diff --git a/Dockerfile b/Dockerfile index 2484378..769e7b8 100644 --- a/Dockerfile +++ b/Dockerfile @@ -106,4 +106,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.karso.WebLauncher"] +CMD ["java", "-Xms64M", "-Xmx1G", "-cp", "/application/application.jar", "org.atriasoft.karso.WebLauncher"] diff --git a/back/CheckStyle.xml b/back/CheckStyle.xml index d68aedd..ac24ac1 100755 --- a/back/CheckStyle.xml +++ b/back/CheckStyle.xml @@ -53,6 +53,9 @@ Checkstyle configuration that checks the sun coding conventions. + + + diff --git a/back/README.md b/back/README.md index f50d714..09ac514 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-karso-0.1.0.jar org.kar.karso.WebLauncher +java -cp out/maven/kar-karso-0.1.0.jar org.atriasoft.karso.WebLauncher // create a single package jar @@ -19,7 +19,7 @@ mvn clean compile assembly:single -java -cp out/maven/karso-0.1.0-jar-with-dependencies.jar org.kar.karso.WebLauncher +java -cp out/maven/karso-0.1.0-jar-with-dependencies.jar org.atriasoft.karso.WebLauncher diff --git a/back/pom.xml b/back/pom.xml index b3328ec..18305bd 100644 --- a/back/pom.xml +++ b/back/pom.xml @@ -1,7 +1,7 @@ 4.0.0 - org.kar + org.atriasoft karso 0.8.0-SNAPSHOT @@ -10,17 +10,11 @@ 21 3.1.1 - - - gitea - https://gitea.atria-soft.org/api/packages/kangaroo-and-rabbit/maven - - - kangaroo-and-rabbit + org.atria-soft archidata - 0.23.6 + 0.28.0 @@ -101,7 +95,7 @@ exec-maven-plugin 1.4.0 - org.kar.karso.WebLauncher + org.atriasoft.karso.WebLauncher @@ -202,7 +196,7 @@ - org.kar.karso.WebLauncher + org.atriasoft.karso.WebLauncher diff --git a/back/properties.txt b/back/properties.txt index 28dc8da..fbd8727 100644 --- a/back/properties.txt +++ b/back/properties.txt @@ -1,6 +1,6 @@ -org.kar..karso.db.host=localhost -org.kar..karso.db.port=15306 -org.kar..karso.db.login=root -org.kar..karso.db.password=klkhj456gkgtkhjgvkujfhjgkjhgsdfhb3467465fgdhdesfgh -org.kar..karso.db.name=oauth -org.kar..karso.address=http://localhost:17080/oauth/api/ +org.atriasoft..karso.db.host=localhost +org.atriasoft..karso.db.port=15306 +org.atriasoft..karso.db.login=root +org.atriasoft..karso.db.password=klkhj456gkgtkhjgvkujfhjgkjhgsdfhb3467465fgdhdesfgh +org.atriasoft..karso.db.name=oauth +org.atriasoft..karso.address=http://localhost:17080/oauth/api/ diff --git a/back/src/org/kar/karso/GenerateApi.java b/back/src/org/kar/karso/GenerateApi.java deleted file mode 100644 index bc4c888..0000000 --- a/back/src/org/kar/karso/GenerateApi.java +++ /dev/null @@ -1,17 +0,0 @@ -package org.kar.karso; - -import org.kar.karso.migration.Initialization; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -public class GenerateApi { - private final static Logger LOGGER = LoggerFactory.getLogger(GenerateApi.class); - - private GenerateApi() {} - - public static void main(final String[] args) throws Exception { - LOGGER.info("Generate API"); - Initialization.generateObjects(); - LOGGER.info("STOP the REST server."); - } -} diff --git a/back/src/org/kar/karso/WebLauncher.java b/back/src/org/kar/karso/WebLauncher.java deleted file mode 100755 index ea4b977..0000000 --- a/back/src/org/kar/karso/WebLauncher.java +++ /dev/null @@ -1,178 +0,0 @@ -package org.kar.karso; - -import java.net.URI; - -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.backup.BackupEngine; -import org.kar.archidata.backup.BackupEngine.StoreMode; -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.migration.model.Migration; -import org.kar.archidata.tools.ConfigBaseVariable; -import org.kar.archidata.tools.ContextGenericTools; -import org.kar.archidata.tools.JWTWrapper; -import org.kar.karso.api.ApplicationResource; -import org.kar.karso.api.ApplicationTokenResource; -import org.kar.karso.api.Front; -import org.kar.karso.api.HealthCheck; -import org.kar.karso.api.PublicKeyResource; -import org.kar.karso.api.RightResource; -import org.kar.karso.api.SystemConfigResource; -import org.kar.karso.api.UserResource; -import org.kar.karso.filter.KarsoAuthenticationFilter; -import org.kar.karso.migration.Initialization; -import org.kar.karso.migration.Migration20231015; -import org.kar.karso.migration.Migration20231126; -import org.kar.karso.migration.Migration20240515; -import org.kar.karso.migration.Migration20250204; -import org.kar.karso.model.Application; -import org.kar.karso.model.ApplicationToken; -import org.kar.karso.model.Right; -import org.kar.karso.model.RightDescription; -import org.kar.karso.model.Settings; -import org.kar.karso.model.UserAuth; -import org.kar.karso.util.ConfigVariable; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import jakarta.ws.rs.core.UriBuilder; - -public class WebLauncher { - private static final Logger LOGGER = LoggerFactory.getLogger(WebLauncher.class); - protected UpdateJwtPublicKey keyUpdater = null; - protected HttpServer server = null; - protected BackupEngine backupEngine = new BackupEngine("./backup", StoreMode.JSON); - - public WebLauncher() { - ConfigBaseVariable.bdDatabase = "karso"; - - this.backupEngine.addClass(Migration.class); - this.backupEngine.addClass(Settings.class); - this.backupEngine.addClass(UserAuth.class); - this.backupEngine.addClass(Application.class); - this.backupEngine.addClass(ApplicationToken.class); - this.backupEngine.addClass(RightDescription.class); - this.backupEngine.addClass(Right.class); - } - - private static URI getBaseURI() { - return UriBuilder.fromUri(ConfigBaseVariable.getlocalAddress()).build(); - } - - public void migrateDB() throws Exception { - WebLauncher.LOGGER.info("Create migration engine"); - final MigrationEngine migrationEngine = new MigrationEngine(); - WebLauncher.LOGGER.info("Add initialization"); - migrationEngine.setInit(new Initialization()); - WebLauncher.LOGGER.info("Add migration since last version"); - migrationEngine.add(new Migration20231015()); - migrationEngine.add(new Migration20231126()); - migrationEngine.add(new Migration20240515()); - migrationEngine.add(new Migration20250204()); - WebLauncher.LOGGER.info("Migrate the DB [START]"); - migrationEngine.migrateWaitAdmin(new DbConfig()); - WebLauncher.LOGGER.info("Migrate the DB [STOP]"); - } - - public static void main(final String[] args) throws Exception { - WebLauncher.LOGGER.info("[START] application wake UP"); - final WebLauncher launcher = new WebLauncher(); - launcher.migrateDB(); - launcher.process(); - WebLauncher.LOGGER.info("end-configure the server & wait finish process:"); - Thread.currentThread().join(); - WebLauncher.LOGGER.info("STOP the REST server"); - } - - public void process() throws InterruptedException { - try { - JWTWrapper.initLocalToken(ConfigVariable.getUUIDKeyRoot()); - } catch (final Exception e1) { - // TODO Auto-generated catch block - e1.printStackTrace(); - LOGGER.info("Wait 10 seconds ...."); - Thread.sleep(10000); - return; - } - - // =================================================================== - // Configure resources - // =================================================================== - final ResourceConfig rc = new ResourceConfig(); - - // add multi-part models .. - rc.register(MultiPartFeature.class); - // global authentication system - rc.register(OptionFilter.class); - // remove cors ==> all time called by an other system... - rc.register(CORSFilter.class); - // global authentication system - rc.register(KarsoAuthenticationFilter.class); - // register exception catcher - GenericCatcher.addAll(rc); - // add default resource: - rc.register(DataResource.class); - rc.register(ApplicationResource.class); - rc.register(ApplicationTokenResource.class); - rc.register(PublicKeyResource.class); - rc.register(RightResource.class); - rc.register(SystemConfigResource.class); - rc.register(UserResource.class); - - rc.register(HealthCheck.class); - rc.register(Front.class); - - ContextGenericTools.addJsr310(rc); - - // add jackson to be discover when we are ins stand-alone server - rc.register(JacksonFeature.class); - // enable this to show low level request - //rc.property(LoggingFeature.LOGGING_FEATURE_LOGGER_LEVEL_SERVER, Level.WARNING.getName()); - LOGGER.info("Start http Server: {}", getBaseURI()); - this.server = GrizzlyHttpServerFactory.createHttpServer(getBaseURI(), rc); - final HttpServer serverLink = this.server; - Runtime.getRuntime().addShutdownHook(new Thread(new Runnable() { - @Override - public void run() { - System.out.println("Stopping server.."); - serverLink.shutdownNow(); - } - }, "shutdownHook")); - - // =================================================================== - // run JERSEY - // =================================================================== - try { - this.server.start(); - LOGGER.info("Jersey app started at {}", getBaseURI()); - } catch (final Exception e) { - LOGGER.error("There was an error while starting Grizzly HTTP server."); - e.printStackTrace(); - } - } - - public void stop() { - if (this.server != null) { - this.server.shutdownNow(); - while (this.server.isStarted()) { - LOGGER.info("wait stop"); - try { - Thread.sleep(200); - } catch (final InterruptedException e) { - e.printStackTrace(); - } - } - this.server = null; - } - } - -} diff --git a/back/src/org/kar/karso/WebLauncherEdgeLocal.java b/back/src/org/kar/karso/WebLauncherEdgeLocal.java deleted file mode 100755 index 69e7a87..0000000 --- a/back/src/org/kar/karso/WebLauncherEdgeLocal.java +++ /dev/null @@ -1,26 +0,0 @@ - -package org.kar.karso; - -import org.kar.archidata.tools.ConfigBaseVariable; -import org.kar.karso.util.ConfigVariable; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -public class WebLauncherEdgeLocal { - private static final Logger LOGGER = LoggerFactory.getLogger(WebLauncherEdgeLocal.class); - - private WebLauncherEdgeLocal() {} - - public static void main(final String[] args) throws Exception { - if (true) { - // for local test: - ConfigBaseVariable.apiAdress = "http://0.0.0.0:15080/karso/api/"; - ConfigBaseVariable.dbPort = "3306"; - ConfigVariable.edge = "true"; - //ConfigBaseVariable.dbType = "sqlite"; - //ConfigBaseVariable.dbHost = "./bdd_base.sqlite"; - - } - WebLauncher.main(args); - } -} diff --git a/back/src/org/kar/karso/WebLauncherLocal.java b/back/src/org/kar/karso/WebLauncherLocal.java deleted file mode 100755 index 22baaf3..0000000 --- a/back/src/org/kar/karso/WebLauncherLocal.java +++ /dev/null @@ -1,45 +0,0 @@ - -package org.kar.karso; - -import org.kar.archidata.tools.ConfigBaseVariable; -import org.kar.karso.migration.Initialization; -import org.kar.karso.util.ConfigVariable; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -public class WebLauncherLocal extends WebLauncher { - private static final Logger LOGGER = LoggerFactory.getLogger(WebLauncherLocal.class); - - private WebLauncherLocal() {} - - public static void main(final String[] args) throws Exception { - Initialization.generateObjects(); - final WebLauncherLocal launcher = new WebLauncherLocal(); - launcher.process(); - LOGGER.info("end-configure the server & wait finish process:"); - Thread.currentThread().join(); - LOGGER.info("STOP the REST server:"); - } - - @Override - public void process() throws InterruptedException { - if (true) { - ConfigBaseVariable.apiAdress = "http://0.0.0.0:15080/karso/api/"; - ConfigBaseVariable.dbPort = "3906"; - // create a unique key for test ==> not retrieve the token every load... - ConfigVariable.uuid_for_key_generation = "lkjlkjlkjlmkjqmwlsdkjqfsdlkf88QJSDMLQKSndmLQKZNERMAL"; - } - try { - super.migrateDB(); - } catch (final Exception e) { - e.printStackTrace(); - while (true) { - LOGGER.error("============================================================================"); - LOGGER.error("== Migration fail ==> waiting intervention of administrator..."); - LOGGER.error("============================================================================"); - Thread.sleep(60 * 60 * 1000); - } - } - super.process(); - } -} diff --git a/back/src/org/kar/karso/api/ApplicationResource.java b/back/src/org/kar/karso/api/ApplicationResource.java deleted file mode 100755 index a68c20f..0000000 --- a/back/src/org/kar/karso/api/ApplicationResource.java +++ /dev/null @@ -1,352 +0,0 @@ -package org.kar.karso.api; - -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -import org.kar.archidata.annotation.AsyncType; -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.AddOnManyToMany; -import org.kar.archidata.dataAccess.options.Condition; -import org.kar.archidata.exception.InputException; -import org.kar.archidata.exception.SystemException; -import org.kar.archidata.filter.GenericContext; -import org.kar.archidata.filter.PartRight; -import org.kar.archidata.tools.JWTWrapper; -import org.kar.karso.model.AddUserData; -import org.kar.karso.model.Application; -import org.kar.karso.model.ApplicationSmall; -import org.kar.karso.model.ClientToken; -import org.kar.karso.model.RightDescription; -import org.kar.karso.model.UserAuth; -import org.kar.karso.model.UserLinkApplication; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import jakarta.annotation.security.RolesAllowed; -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.Path; -import jakarta.ws.rs.PathParam; -import jakarta.ws.rs.Produces; -import jakarta.ws.rs.QueryParam; -import jakarta.ws.rs.core.Context; -import jakarta.ws.rs.core.MediaType; -import jakarta.ws.rs.core.SecurityContext; - -@Path("/application") -@Produces(MediaType.APPLICATION_JSON) -public class ApplicationResource { - private static final Logger LOGGER = LoggerFactory.getLogger(ApplicationResource.class); - - public ApplicationResource() {} - - public List getUserListOfApplication(final Long userId) { - final List out = new ArrayList<>(); - List links = null; - try { - links = DataAccess.getsWhere(UserLinkApplication.class, - new Condition(new QueryCondition("object1id", "=", userId))); - } catch (final Exception e) { - // TODO Auto-generated catch block - e.printStackTrace(); - final String result = "SERVER Internal error"; - LOGGER.error(" result: {}", result); - return out; - } - for (final UserLinkApplication app : links) { - out.add(app.applicationId); - } - return out; - } - - public List getListOfUsers(final Long applicationId) { - final List out = new ArrayList<>(); - List links = null; - try { - links = DataAccess.getsWhere(UserLinkApplication.class, - new Condition(new QueryCondition("object2id", "=", applicationId))); - } catch (final Exception e) { - e.printStackTrace(); - final String result = "SERVER Internal error"; - LOGGER.error(" result: {}", result); - return out; - } - LOGGER.debug("Find list of user for an application: {}", links); - for (final UserLinkApplication app : links) { - out.add(app.userId); - } - return out; - } - //////////////////////////////////////////////////////////////////////////////////////// - // - // Generic /application/ - // - //////////////////////////////////////////////////////////////////////////////////////// - - @GET - @RolesAllowed(value = { "USER", "ADMIN" }) - public List gets(@Context final SecurityContext sc) throws Exception { - final GenericContext gc = (GenericContext) sc.getUserPrincipal(); - LOGGER.debug("getApplications"); - // TODO filter with the list of element available in his authorizations ... - final List tmp = DataAccess.gets(Application.class); - if (sc.isUserInRole("ADMIN")) { - return tmp; - } - final List regular = getUserListOfApplication(gc.userByToken.id); - final List out = new ArrayList<>(); - for (final Application app : tmp) { - if (regular.indexOf(app.id) != -1) { - out.add(app); - } - } - return out; - } - - @POST - @RolesAllowed("ADMIN") - @Consumes(MediaType.APPLICATION_JSON) - public Application create(final Application application) throws Exception { - LOGGER.debug("create new application {}", application); - // verify login or email is correct: - if (application.name == null || application.name.length() < 5) { - throw new InputException("name", "create application (name too small: '" + application.name + "')"); - } - if (application.redirect == null || application.redirect.length() < 6) { - throw new InputException("redirect", - "create application (redirect too small: '" + application.redirect + "')"); - } - application.id = null; - application.createdAt = null; - application.deleted = null; - application.updatedAt = null; - final Application tmp = DataAccess.insert(application); - return get(tmp.id); - } - - //////////////////////////////////////////////////////////////////////////////////////// - // - // Generic /application/{id} - // - //////////////////////////////////////////////////////////////////////////////////////// - - @GET - @Path("{id}") - @RolesAllowed("ADMIN") - public Application get(@PathParam("id") final Long id) throws Exception { - return DataAccess.get(Application.class, id); - } - - @PATCH - @Path("{id}") - @RolesAllowed("ADMIN") - @Consumes(MediaType.APPLICATION_JSON) - public Application patch(@PathParam("id") final Long id, @AsyncType(Application.class) final String jsonRequest) - throws Exception { - DataAccess.updateWithJson(Application.class, id, jsonRequest); - return DataAccess.get(Application.class, id); - } - - @DELETE - @Path("{id}") - @RolesAllowed("ADMIN") - @Produces(value = MediaType.TEXT_PLAIN) - public void remove(@Context final SecurityContext sc, @PathParam("id") final long applicationId) throws Exception { - DataAccess.delete(Application.class, applicationId); - } - - //////////////////////////////////////////////////////////////////////////////////////// - // - // Generic /{id}/* - // - //////////////////////////////////////////////////////////////////////////////////////// - - @GET - @Path("{id}/users") - @RolesAllowed(value = { "ADMIN" }) - public List getApplicationUsers(@PathParam("id") final Long applicationId) throws Exception { - // special case for SSO: (all user have access on the SSO...). - - LOGGER.debug("Request list of user for an applciation: {}", applicationId); - return getListOfUsers(applicationId); - } - - //////////////////////////////////////////////////////////////////////////////////////// - // - // Generic /application/* - // - //////////////////////////////////////////////////////////////////////////////////////// - - @GET - @Path("small") - @RolesAllowed(value = { "USER", "ADMIN" }) - public List getApplicationsSmall(@Context final SecurityContext sc) throws Exception { - final GenericContext gc = (GenericContext) sc.getUserPrincipal(); - LOGGER.debug("getApplications"); - final List tmp = DataAccess.gets(Application.class); - final List regular = getUserListOfApplication(gc.userByToken.id); - final List out = new ArrayList<>(); - for (final Application app : tmp) { - if (regular.indexOf(app.id) != -1) { - out.add(new ApplicationSmall(app.id, app.name, app.description, app.redirect)); - } - } - return out; - } - - @POST - @Path("{id}/users") - @RolesAllowed(value = { "ADMIN" }) - @Consumes(MediaType.APPLICATION_JSON) - public void addUser(@PathParam("id") final Long applicationId, final AddUserData data) throws Exception { - LOGGER.debug("getApplications"); - try (DBAccess db = DBAccess.createInterface()) { - AddOnManyToMany.addLink(db, UserAuth.class, data.userId, "application", applicationId); - } - } - - @DELETE - @Path("{id}/users/${userId}") - @RolesAllowed(value = { "ADMIN" }) - public void removeUser(@PathParam("id") final Long applicationId, @PathParam("userId") final Long userId) - throws Exception { - LOGGER.debug("getApplications"); - try (DBAccess db = DBAccess.createInterface()) { - AddOnManyToMany.removeLink(db, UserAuth.class, userId, "application", applicationId); - } - } - - @GET - @Path("{id}/rights") - @RolesAllowed(value = { "ADMIN" }) - public List getRightsDescription(@PathParam("id") final Long applicationId) throws Exception { - LOGGER.debug("getApplications rights"); - return DataAccess.getsWhere(RightDescription.class, - new Condition(new QueryCondition("applicationId", "=", applicationId))); - } - - @GET - @Path("get_token") - @RolesAllowed(value = { "USER", "ADMIN" }) - public ClientToken getClientToken( - @Context final SecurityContext sc, - @QueryParam("application") final String application) throws Exception { - final GenericContext gc = (GenericContext) sc.getUserPrincipal(); - LOGGER.info("get application TOKEN application name='{}'", application); - LOGGER.debug("== USER ? {}", gc.userByToken.name); - - if (application == null) { - throw new InputException("application", "Input error missing parameter"); - } - String applicationName = application; - boolean isDev = false; - if (applicationName.endsWith("-dev")) { - applicationName = applicationName.substring(0, applicationName.length() - 4); - isDev = true; - } - LOGGER.debug("Search for '{}' base of '{}'", applicationName, application); - - Application appl = null; - try { - appl = DataAccess.getWhere(Application.class, - new Condition(new QueryCondition("name", "=", applicationName))); - } catch (final Exception e) { - // TODO Auto-generated catch block - e.printStackTrace(); - final String result = "SERVER Internal error"; - LOGGER.debug(" result: {}", result); - throw new SystemException("Internal fail request"); - } - - if (appl == null) { - final String result = "Authentiocate-wrong email/login '" + applicationName + "')"; - LOGGER.error(" result: {}", result); - throw new InputException("email/login", "Authentiocate-wrong email/login '" + applicationName + "'"); - } - UserLinkApplication links = null; - try { - links = DataAccess.getWhere(UserLinkApplication.class, - new Condition(new QueryAnd(new QueryCondition("object1id", "=", gc.userByToken.id), - new QueryCondition("deleted", "=", 0), new QueryCondition("object2id", "=", appl.id)))); - } catch (final Exception e) { - e.printStackTrace(); - throw new SystemException("Fail to insert Link"); - } - if (links == null) { - throw new SystemException( - "Authenticate impossible ==> application not accessible '" + applicationName + "'"); - } - // Get the USER Right - final Map applicationRight = RightResource.getUserRight(gc.userByToken.id, appl.id); - if (!applicationRight.containsKey("USER")) { - // If the USER is not override, the system add by default USER - applicationRight.put("USER", PartRight.READ_WRITE); - } - final Map rightForFront = new HashMap<>(); - for (final Map.Entry entry : applicationRight.entrySet()) { - rightForFront.put(entry.getKey(), entry.getValue().getValue()); - } - final Map outRight = new HashMap<>(); - // we set the right in the under map to manage multiple application group right. - // and in some application user can see other user or all user of the - // application - outRight.put(applicationName, rightForFront); - final String ret = JWTWrapper.generateJWToken(gc.userByToken.id, gc.userByToken.name, "KarAuth", - applicationName, outRight, -appl.ttl); - // logger.debug(" ==> generate token: {}", ret); - String returnAdress = appl.redirect; - if (isDev) { - returnAdress = appl.redirectDev; - } - return new ClientToken(returnAdress, ret); - } - - @GET - @Path("return") - @RolesAllowed(value = { "USER", "ADMIN" }) - public String logOut(@Context final SecurityContext sc, @QueryParam("application") final String application) - throws SystemException, InputException { - LOGGER.debug("====================================="); - LOGGER.debug("Get log_out()"); - LOGGER.debug("====================================="); - final GenericContext gc = (GenericContext) sc.getUserPrincipal(); - LOGGER.debug("== USER ? {}", gc.userByToken); - - if (application == null) { - throw new InputException("application", "Input error missing parameter"); - } - String applicationName = application; - boolean isDev = false; - if (applicationName.endsWith("-dev")) { - applicationName = applicationName.substring(0, applicationName.length() - 4); - isDev = true; - } - LOGGER.debug("Search for '{}' base of '{}'", applicationName, application); - - Application appl = null; - try { - appl = DataAccess.getWhere(Application.class, - new Condition(new QueryCondition("name", "=", applicationName))); - } catch (final Exception e) { - e.printStackTrace(); - throw new SystemException("Fail to log-Out..."); - } - if (appl == null) { - throw new SystemException("Authentiocate-wrong email/login '" + applicationName + "'"); - } - String returnAdress = appl.redirect; - if (isDev) { - returnAdress = appl.redirectDev; - } - return returnAdress; - } - -} diff --git a/back/src/org/kar/karso/api/ApplicationTokenResource.java b/back/src/org/kar/karso/api/ApplicationTokenResource.java deleted file mode 100755 index c890d6c..0000000 --- a/back/src/org/kar/karso/api/ApplicationTokenResource.java +++ /dev/null @@ -1,144 +0,0 @@ -package org.kar.karso.api; - -import java.sql.Timestamp; -import java.time.OffsetDateTime; -import java.time.ZoneOffset; -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.exception.DataAccessException; -import org.kar.archidata.exception.InputException; -import org.kar.karso.model.ApplicationToken; -import org.kar.karso.model.CreateTokenRequest; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import jakarta.annotation.security.RolesAllowed; -import jakarta.ws.rs.Consumes; -import jakarta.ws.rs.DELETE; -import jakarta.ws.rs.GET; -import jakarta.ws.rs.POST; -import jakarta.ws.rs.Path; -import jakarta.ws.rs.PathParam; -import jakarta.ws.rs.Produces; -import jakarta.ws.rs.core.Context; -import jakarta.ws.rs.core.MediaType; -import jakarta.ws.rs.core.SecurityContext; - -@Path("/application_token") -@Produces(MediaType.APPLICATION_JSON) -public class ApplicationTokenResource { - private static final Logger LOGGER = LoggerFactory.getLogger(ApplicationTokenResource.class); - - public ApplicationTokenResource() {} - - //////////////////////////////////////////////////////////////////////////////////////// - // - // Generic /application_token/{applicationId} - // - //////////////////////////////////////////////////////////////////////////////////////// - - @GET - @Path("{applicationId}") - @RolesAllowed(value = { "ADMIN" }) - public List gets( - @Context final SecurityContext sc, - @PathParam("applicationId") final Long applicationId) throws Exception { - final List values = DataAccess.getsWhere(ApplicationToken.class, - new Condition(new QueryCondition("parentId", "=", applicationId))); - // clean all tokens this is a secret: - for (final ApplicationToken elem : values) { - elem.token = null; - } - return values; - } - - @DELETE - @Path("{applicationId}/{tokenId}") - @RolesAllowed(value = { "ADMIN" }) - public void remove( - @Context final SecurityContext sc, - @PathParam("applicationId") final Long applicationId, - @PathParam("tokenId") final Integer tokenId) throws Exception { - final long nbRemoved = DataAccess.deleteWhere(ApplicationToken.class, - new Condition(new QueryAnd(new QueryCondition("parentId", "=", applicationId), - new QueryCondition("id", "=", tokenId)))); - if (nbRemoved == 0) { - throw new DataAccessException("Fail to remove token"); - } - } - - private String multipartCorrection(final String data) { - if (data == null) { - return null; - } - if (data.isEmpty()) { - return null; - } - if (data.contentEquals("null")) { - return null; - } - return data; - } - - static String randomToken() { - final int len = 48; - final String valid_element = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvxyz0123456789#_@-~*!?"; - // creating a StringBuffer size of AlphaNumericStr - final StringBuilder out = new StringBuilder(len); - int iii; - for (iii = 0; iii < len; iii++) { - //generating a random number using math.random() - final int ch = (int) (valid_element.length() * Math.random()); - //adding Random character one by one at the end of s - out.append(valid_element.charAt(ch)); - } - return out.toString(); - } - - @POST - @Path("{applicationId}/create") - @RolesAllowed("ADMIN") - @Consumes(MediaType.APPLICATION_JSON) - public ApplicationToken create( - @Context final SecurityContext sc, - @PathParam("applicationId") final Long applicationId, - final CreateTokenRequest request) throws Exception { - LOGGER.info("get user application TOKEN: app='{}' user='???'", applicationId); - // correct input string stream : - final String name = multipartCorrection(request.name); - //validity = multipartCorrection(validity); - LOGGER.debug("create a new token..."); - if (applicationId == null) { - throw new InputException("applicationId", "can not be null"); - } - final int maximum = 365 * 5; - Integer validity = request.validity; - if (validity == null || validity < 0 || validity > maximum) { - validity = maximum; - } - LOGGER.warn("validity= {}", validity); - // todo: set validity timestamp ... - // TODO: check if application exist ... - ApplicationToken token = new ApplicationToken(); - token.token = randomToken(); - token.name = multipartCorrection(name); - token.parentId = applicationId; - final OffsetDateTime now = OffsetDateTime.now(ZoneOffset.UTC); - LOGGER.warn("Check Timestamp now = {}", now); - token.endValidityTime = Timestamp.from(now.plusDays(validity).toInstant()); - LOGGER.warn("token.endValidityTime = {}", token.endValidityTime); - - // insert in the BDD - token = DataAccess.insert(token); - // here we return the token to permit to the user to see it to set it in the application. - return token; - } - /* - Cannot find a deserializer for non-concrete Map type [map type; class jakarta.ws.rs.core.MultivaluedMap, [simple type, class java.lang.String] -> [collection type; class java.util.List, contains [simple type, class java.lang.String]]] - at [Source: (org.glassfish.jersey.message.internal.ReaderInterceptorExecutor$UnCloseableInputStream); line: 1, column: 1] - */ -} diff --git a/back/src/org/kar/karso/api/Front.java b/back/src/org/kar/karso/api/Front.java deleted file mode 100644 index c0a45c6..0000000 --- a/back/src/org/kar/karso/api/Front.java +++ /dev/null @@ -1,18 +0,0 @@ -package org.kar.karso.api; - -import org.kar.archidata.api.FrontGeneric; -import org.kar.karso.util.ConfigVariable; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import jakarta.ws.rs.Path; - -@Path("/front") -public class Front extends FrontGeneric { - private static final Logger LOGGER = LoggerFactory.getLogger(FrontGeneric.class); - - public Front() { - this.baseFrontFolder = ConfigVariable.getFrontFolder(); - } - -} diff --git a/back/src/org/kar/karso/api/HealthCheck.java b/back/src/org/kar/karso/api/HealthCheck.java deleted file mode 100644 index f7a7901..0000000 --- a/back/src/org/kar/karso/api/HealthCheck.java +++ /dev/null @@ -1,32 +0,0 @@ -package org.kar.karso.api; - -import org.kar.archidata.exception.FailException; -import org.kar.archidata.tools.ConfigBaseVariable; -import org.kar.archidata.tools.JWTWrapper; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import jakarta.annotation.security.PermitAll; -import jakarta.ws.rs.GET; -import jakarta.ws.rs.Path; -import jakarta.ws.rs.Produces; -import jakarta.ws.rs.core.MediaType; -import jakarta.ws.rs.core.Response; - -@Path("/health_check") -@Produces(MediaType.APPLICATION_JSON) -public class HealthCheck { - private static final Logger LOGGER = LoggerFactory.getLogger(HealthCheck.class); - - public record HealthResult( - String value) {}; - - @GET - @PermitAll - public HealthResult getHealth() throws FailException { - if (JWTWrapper.getPublicKeyJson() == null && !ConfigBaseVariable.getTestMode()) { - throw new FailException(Response.Status.INTERNAL_SERVER_ERROR, "Missing Jwt public token"); - } - return new HealthResult("alive and kicking"); - } -} diff --git a/back/src/org/kar/karso/api/PublicKeyResource.java b/back/src/org/kar/karso/api/PublicKeyResource.java deleted file mode 100755 index 096f5a8..0000000 --- a/back/src/org/kar/karso/api/PublicKeyResource.java +++ /dev/null @@ -1,47 +0,0 @@ -package org.kar.karso.api; - -import java.security.interfaces.RSAPublicKey; -import java.util.Base64; - -import org.kar.archidata.tools.JWTWrapper; -import org.kar.archidata.tools.JWTWrapper.PublicKey; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import com.nimbusds.jose.JOSEException; - -import jakarta.annotation.security.RolesAllowed; -import jakarta.ws.rs.GET; -import jakarta.ws.rs.Path; -import jakarta.ws.rs.Produces; -import jakarta.ws.rs.core.MediaType; - -@Path("/public_key") -@Produces(MediaType.APPLICATION_JSON) -public class PublicKeyResource { - private static final Logger LOGGER = LoggerFactory.getLogger(PublicKeyResource.class); - - public PublicKeyResource() { - - } - - // This is for java server that use the same implementation - // curl http://localhost:9993/public_key - @GET - @RolesAllowed(value = { "APPLICATION" }) - public PublicKey getKey() { - return new PublicKey(JWTWrapper.getPublicKeyJson()); - } - - // This is for common other interface that support public PEM stream. - // curl http://localhost:9993/public_key/pem - @GET - @Path("/pem") - @RolesAllowed(value = { "APPLICATION" }) - public String getKeyPem() throws JOSEException { - final RSAPublicKey keyPub = JWTWrapper.getPublicKeyJava(); - final byte[] data = keyPub.getEncoded(); - final String base64encoded = new String(Base64.getEncoder().encode(data)); - return "-----BEGIN PUBLIC KEY-----\n" + base64encoded + "\n-----END PUBLIC KEY-----\n"; - } -} diff --git a/back/src/org/kar/karso/api/RightResource.java b/back/src/org/kar/karso/api/RightResource.java deleted file mode 100644 index c26407f..0000000 --- a/back/src/org/kar/karso/api/RightResource.java +++ /dev/null @@ -1,169 +0,0 @@ -package org.kar.karso.api; - -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -import org.kar.archidata.annotation.AsyncType; -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.PartRight; -import org.kar.karso.model.Right; -import org.kar.karso.model.RightDescription; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import jakarta.annotation.security.RolesAllowed; -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.Path; -import jakarta.ws.rs.PathParam; -import jakarta.ws.rs.Produces; -import jakarta.ws.rs.core.MediaType; - -@Path("/right") -@Produces({ MediaType.APPLICATION_JSON }) -public class RightResource { - private static final Logger LOGGER = LoggerFactory.getLogger(RightResource.class); - - public static List getApplicationRightDecription(final long applicationId) throws Exception { - return DataAccess.getsWhere(RightDescription.class, - new Condition(new QueryCondition("applicationId", "=", applicationId))); - } - - public static List getRawUserRight(final long userId, final long applicationId) throws Exception { - // Formatter:off - return DataAccess.getsWhere(Right.class, - new Condition(new QueryAnd(new QueryCondition("applicationId", "=", applicationId), - new QueryCondition("userId", "=", userId)))); - // Formatter:on - } - - public static Map getUserRight(final long userId, final long applicationId) throws Exception { - final Map out = new HashMap<>(); - final List rightsDescriptions = getApplicationRightDecription(applicationId); - LOGGER.trace("Get some descriptions: {} applicationId={}", rightsDescriptions.size(), applicationId); - if (rightsDescriptions != null && rightsDescriptions.size() != 0) { - final List rights = getRawUserRight(userId, applicationId); - LOGGER.trace("Get some user right: count={} userID={} applicationId={}", rights.size(), userId, - applicationId); - LOGGER.trace("Rights:"); - for (final Right elem : rights) { - LOGGER.trace(" - applId={} rightDescriptionId={} value={}", elem.applicationId, - elem.rightDescriptionId, elem.value); - } - LOGGER.trace("RightDescription:"); - for (final RightDescription description : rightsDescriptions) { - if (description == null) { - continue; - } - LOGGER.trace(" - id={} key={}", description.id, description.key); - } - for (final RightDescription description : rightsDescriptions) { - if (description == null) { - continue; - } - final Right right = rights.stream().filter(elem -> elem.rightDescriptionId.equals(description.id)) - .findAny().orElse(null); - if (right != null) { - out.put(description.key, right.value); - } - } - } else { - // the application does not manage right with Karso (normal use-case) - LOGGER.debug("Does not manage Karso right..."); - } - return out; - } - - public static void updateUserRight(final long userId, final long applicationId, final Map delta) - throws Exception { - final List rightsDescriptions = getApplicationRightDecription(applicationId); - LOGGER.debug("Get some descriptions: {} applicationId={}", rightsDescriptions.size(), applicationId); - if (rightsDescriptions == null || rightsDescriptions.size() == 0) { - throw new IllegalArgumentException("Request change right on an application that does not manage any right"); - } - final List rights = getRawUserRight(userId, applicationId); - LOGGER.debug("Get some user right: count={} userID={}", rights.size(), userId); - for (final RightDescription description : rightsDescriptions) { - if (description == null) { - // TODO: this is a really strange case to manage later... - continue; - } - final PartRight newValue = delta.get(description.key); - if (newValue == null) { - //No need to update or create... - continue; - } - final List allRights = rights.stream().filter(elem -> elem.rightDescriptionId.equals(description.id)) - .toList(); - if (allRights.size() > 1) { - // special case of error somewhere else ... ==> remove all elements (except the first) - for (int iii = 1; iii < allRights.size(); iii++) { - LOGGER.error("Remove starnge element in Right id={} ", allRights.get(iii).id); - DataAccess.delete(Right.class, allRights.get(iii).id); - } - } - if (allRights.size() == 1) { - final Right right = allRights.get(0); - // The value exist, we need to update it - LOGGER.debug("Request update a knonwn parameter: {} with {}", description.key, newValue); - right.value = newValue; - // TODO: maybe need to remove the value instead of set a new one ... - DataAccess.update(right, right.id, List.of("value")); - } else { - // we need to create it - LOGGER.debug("Request create parameter: {} with {}", description.key, newValue); - final Right right = new Right(); - right.applicationId = applicationId; - right.userId = userId; - right.rightDescriptionId = description.id; - right.value = newValue; - DataAccess.insert(right); - } - } - } - - @GET - @RolesAllowed("ADMIN") - public List gets() throws Exception { - return DataAccess.gets(Right.class); - } - - @POST - @RolesAllowed("ADMIN") - @Consumes(MediaType.APPLICATION_JSON) - public Right post(final Right request) throws Exception { - return DataAccess.insert(request); - } - - @GET - @Path("{id}") - @RolesAllowed("ADMIN") - public static Right get(@PathParam("id") final Long id) throws Exception { - return DataAccess.get(Right.class, id); - } - - @PATCH - @Path("{id}") - @RolesAllowed("ADMIN") - @Consumes(MediaType.APPLICATION_JSON) - public Right patch(@PathParam("id") final Long id, @AsyncType(Right.class) final String jsonRequest) - throws Exception { - DataAccess.updateWithJson(Right.class, id, jsonRequest); - return DataAccess.get(Right.class, id); - } - - @DELETE - @Path("{id}") - @RolesAllowed("ADMIN") - public void remove(@PathParam("id") final Long id) throws Exception { - DataAccess.delete(Right.class, id); - } - -} diff --git a/back/src/org/kar/karso/api/SystemConfigResource.java b/back/src/org/kar/karso/api/SystemConfigResource.java deleted file mode 100755 index 5414948..0000000 --- a/back/src/org/kar/karso/api/SystemConfigResource.java +++ /dev/null @@ -1,113 +0,0 @@ -package org.kar.karso.api; - -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -import org.kar.archidata.annotation.AsyncType; -import org.kar.archidata.dataAccess.DataAccess; -import org.kar.archidata.dataAccess.QueryCondition; -import org.kar.archidata.dataAccess.options.Condition; -import org.kar.archidata.exception.NotFoundException; -import org.kar.karso.model.Settings; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import com.fasterxml.jackson.databind.JsonNode; -import com.fasterxml.jackson.databind.ObjectMapper; - -import jakarta.annotation.security.PermitAll; -import jakarta.annotation.security.RolesAllowed; -import jakarta.ws.rs.Consumes; -import jakarta.ws.rs.GET; -import jakarta.ws.rs.PATCH; -import jakarta.ws.rs.Path; -import jakarta.ws.rs.PathParam; -import jakarta.ws.rs.Produces; -import jakarta.ws.rs.core.Context; -import jakarta.ws.rs.core.MediaType; -import jakarta.ws.rs.core.SecurityContext; - -@Path("/system_config") -@Produces(MediaType.APPLICATION_JSON) -public class SystemConfigResource { - private static final Logger LOGGER = LoggerFactory.getLogger(SystemConfigResource.class); - - public static class GetSignUpAvailable { - public boolean signup; - - public GetSignUpAvailable(final boolean availlable) { - this.signup = availlable; - } - - public GetSignUpAvailable() { - this.signup = false; - } - } - - public SystemConfigResource() {} - - @GET - @Path("is_sign_up_availlable") - @PermitAll - public GetSignUpAvailable isSignUpAvailable() throws Exception { - final Settings set = DataAccess.getWhere(Settings.class, - new Condition(new QueryCondition("key", "=", "SIGN_UP_ENABLE"))); - if (set == null) { - throw new NotFoundException("Value does not exist"); - } - final boolean availlable = "true".equalsIgnoreCase(set.value); - final GetSignUpAvailable tmp = new GetSignUpAvailable(availlable); - LOGGER.debug("mlkmlk {}", tmp.signup); - return tmp; - } - - @GET - @Path("key/{key}") - @RolesAllowed(value = { "USER", "ADMIN" }) - public Map getKey(@Context final SecurityContext sc, @PathParam("key") final String key) - throws Exception { - final Settings set = DataAccess.getWhere(Settings.class, new Condition(new QueryCondition("key", "=", key))); - if (set == null) { - throw new NotFoundException("Value does not exist"); - } - final Map out = new HashMap<>(); - if ("BOOLEAN".equals(set.type)) { - final boolean available = "true".equalsIgnoreCase(set.value); - out.put("value", available); - } else if ("NUMBER".equals(set.type)) { - final double value = Double.parseDouble(set.value); - out.put("value", value); - } else { - out.put("value", set.value); - } - return out; - } - - @PATCH - @Path("key/{key}") - @RolesAllowed(value = { "ADMIN" }) - @Consumes(MediaType.APPLICATION_JSON) - public void setKey( - @Context final SecurityContext sc, - @PathParam("key") final String key, - @AsyncType(Object.class) final String jsonRequest) throws Exception { - Settings res = null; - try { - res = DataAccess.getWhere(Settings.class, new Condition(new QueryCondition("key", "=", key))); - } catch (final Exception e) { - e.printStackTrace(); - final String result = "Can not find the Key: '" + key + "'"; - throw new NotFoundException(result); - } - final ObjectMapper mapper = new ObjectMapper(); - // Read the tree to filter injection of data: - final JsonNode root = mapper.readTree(jsonRequest); - final JsonNode value = root.findPath("value"); - - res.value = value.asText(); - LOGGER.debug("Update value : {}", res.value); - DataAccess.update(res, res.id, List.of("value")); - } - -} diff --git a/back/src/org/kar/karso/api/UserResource.java b/back/src/org/kar/karso/api/UserResource.java deleted file mode 100755 index 131ca1c..0000000 --- a/back/src/org/kar/karso/api/UserResource.java +++ /dev/null @@ -1,374 +0,0 @@ -package org.kar.karso.api; - -import java.nio.charset.StandardCharsets; -import java.security.MessageDigest; -import java.security.NoSuchAlgorithmException; -import java.sql.Timestamp; -import java.time.LocalDateTime; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -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.AddOnManyToMany; -import org.kar.archidata.dataAccess.options.AccessDeletedItems; -import org.kar.archidata.dataAccess.options.Condition; -import org.kar.archidata.dataAccess.options.ReadAllColumn; -import org.kar.archidata.exception.FailException; -import org.kar.archidata.exception.SystemException; -import org.kar.archidata.filter.GenericContext; -import org.kar.archidata.filter.PartRight; -import org.kar.archidata.model.GetToken; -import org.kar.archidata.tools.JWTWrapper; -import org.kar.karso.migration.Initialization; -import org.kar.karso.model.Application; -import org.kar.karso.model.ChangePassword; -import org.kar.karso.model.ChangePassword.ChangePasswordChecker; -import org.kar.karso.model.DataGetToken; -import org.kar.karso.model.DataGetToken.DataGetTokenChecker; -import org.kar.karso.model.Right; -import org.kar.karso.model.RightDescription; -import org.kar.karso.model.UserAuth; -import org.kar.karso.model.UserAuth.UserAuthChecker; -import org.kar.karso.model.UserAuthGet; -import org.kar.karso.model.UserCreate; -import org.kar.karso.model.UserCreate.UserCreateChecker; -import org.kar.karso.util.ConfigVariable; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import com.fasterxml.jackson.annotation.JsonInclude; - -import jakarta.annotation.security.PermitAll; -import jakarta.annotation.security.RolesAllowed; -import jakarta.ws.rs.Consumes; -import jakarta.ws.rs.GET; -import jakarta.ws.rs.PATCH; -import jakarta.ws.rs.POST; -import jakarta.ws.rs.Path; -import jakarta.ws.rs.PathParam; -import jakarta.ws.rs.Produces; -import jakarta.ws.rs.QueryParam; -import jakarta.ws.rs.core.Context; -import jakarta.ws.rs.core.MediaType; -import jakarta.ws.rs.core.Response; -import jakarta.ws.rs.core.SecurityContext; - -@Path("/users") -@Produces(MediaType.APPLICATION_JSON) -public class UserResource { - private static final Logger LOGGER = LoggerFactory.getLogger(UserResource.class); - static final UserAuthChecker CHECKER = new UserAuthChecker(); - static final DataGetTokenChecker CHECKER_REQUEST_TOKEN = new DataGetTokenChecker(); - static final ChangePasswordChecker CHECKER_CHANGE_PASSWORD = new ChangePasswordChecker(); - static final UserCreateChecker CHECKER_CREATE_USER = new UserCreateChecker(); - public static final String APPLICATION = "karso"; - - @JsonInclude(JsonInclude.Include.NON_NULL) - public static class UserOut { - public long id; - public String login; - - public UserOut(final long id, final String login) { - this.id = id; - this.login = login; - } - } - - public UserResource() {} - - @GET - @RolesAllowed("ADMIN") - public List gets() throws Exception { - final List out = DataAccess.gets(UserAuthGet.class); - return out; - } - - @GET - @Path("{id}") - @RolesAllowed({ "ADMIN", "USER" }) - public UserAuthGet get(@Context final SecurityContext sc, @PathParam("id") final long id) throws Exception { - if (!sc.isUserInRole("ADMIN")) { - // in case of user we need to check if it get his own id parameters: - final UserAuthGet ret = DataAccess.get(UserAuthGet.class, id, new AccessDeletedItems()); - return ret; - } - final UserAuthGet ret = DataAccess.get(UserAuthGet.class, id); - if (ret != null) { - return ret; - } - // Find element in deleted - return DataAccess.get(UserAuthGet.class, id, new AccessDeletedItems(), new ReadAllColumn()); - } - - @POST - @Path("{userId}/application/{applicationId}/link") - @RolesAllowed("ADMIN") - public UserAuth linkApplication( - @Context final SecurityContext sc, - @PathParam("userId") final long userId, - @PathParam("applicationId") final long applicationId, - final boolean data) throws Exception { - LOGGER.debug("Find typeNode"); - try (DBAccess db = DBAccess.createInterface()) { - if (data) { - AddOnManyToMany.addLink(db, UserAuth.class, userId, "application", applicationId); - } else { - AddOnManyToMany.removeLink(db, UserAuth.class, userId, "application", applicationId); - } - return db.get(UserAuth.class, userId); - } - } - - @GET - @Path("{userId}/application/{applicationId}/rights") - @RolesAllowed("ADMIN") - public Map getApplicationRight( - @Context final SecurityContext sc, - @PathParam("userId") final long userId, - @PathParam("applicationId") final long applicationId) throws Exception { - return RightResource.getUserRight(userId, applicationId); - } - - @PATCH - @Path("{userId}/application/{applicationId}/rights") - @RolesAllowed("ADMIN") - @Consumes(MediaType.APPLICATION_JSON) - public Map patchApplicationRight( - @Context final SecurityContext sc, - @PathParam("userId") final long userId, - @PathParam("applicationId") final long applicationId, - final Map data) throws Exception { - this.LOGGER.info("Patch data from FRONT: {}", data); - RightResource.updateUserRight(userId, applicationId, data); - return RightResource.getUserRight(userId, applicationId); - } - - // TODO: check this it might be deprecated ... - @POST - @Path("{id}/set_admin") - @RolesAllowed("ADMIN") - @Consumes(MediaType.APPLICATION_JSON) - public void setAdmin(@Context final SecurityContext sc, @PathParam("id") final long userId, final boolean data) - throws Exception { - try (DBAccess da = DBAccess.createInterface()) { - final Application appKarso = da.get(Application.class, - new Condition(new QueryCondition("name", "=", UserResource.APPLICATION))); - final RightDescription rightsDescription = da.get(RightDescription.class, - new Condition(new QueryAnd(new QueryCondition("key", "=", "ADMIN"), - new QueryCondition("applicationId", "=", appKarso.id)))); - - final Right right = da.get(Right.class, - new Condition(new QueryAnd(new QueryCondition("rightDescriptionId", "=", rightsDescription.id), - new QueryCondition("applicationId", "=", appKarso.id), - new QueryCondition("userId", "=", userId)))); - if (right == null) { - final Right newRight = new Right(); - newRight.applicationId = appKarso.id; - newRight.userId = userId; - newRight.rightDescriptionId = rightsDescription.id; - newRight.value = PartRight.READ_WRITE; - da.insert(newRight); - return; - } else if (PartRight.READ_WRITE.equals(right.value)) { - return; - } - // TODO: maybe remove ??? - right.value = PartRight.READ_WRITE; - final long ret = da.update(right, right.id, List.of("value")); - if (ret == 0) { - throw new FailException(Response.Status.NOT_MODIFIED, "Fail to modify user as an admin."); - } - } - } - - @POST - @Path("{id}/set_blocked") - @RolesAllowed("ADMIN") - @Consumes(MediaType.APPLICATION_JSON) - public void setBlocked(@Context final SecurityContext sc, @PathParam("id") final long userId, final boolean data) - throws Exception { - final UserAuth user = new UserAuth(); - user.blocked = data; - final long ret = DataAccess.update(user, userId, List.of("blocked")); - if (ret == 0) { - throw new FailException(Response.Status.NOT_MODIFIED, "Fail to block the User."); - } - } - - @POST - @RolesAllowed("ADMIN") - @Consumes(MediaType.APPLICATION_JSON) - public UserAuthGet create(final UserCreate user) throws Exception { - LOGGER.debug("create new User email={} login={}", user.email, user.login); - try (DBAccess da = DBAccess.createInterface()) { - CHECKER_CREATE_USER.checkAll(da, "", user, null); - // Check login does not exist - List out = da.getsWhere(UserAuth.class, - new Condition(new QueryCondition("login", "=", user.login))); - if (out.size() >= 1) { - throw new FailException(Response.Status.BAD_REQUEST, "Login already used !!!"); - } - // Check email does not exist - out = da.getsWhere(UserAuth.class, new Condition(new QueryCondition("email", "=", user.email))); - if (out.size() >= 1) { - throw new FailException(Response.Status.BAD_REQUEST, "e-mail already used !!!"); - } - // Add new user and return formated data. - final UserAuth newUser = new UserAuth(); - newUser.blocked = false; - newUser.avatar = false; - newUser.login = user.login; - newUser.password = user.password; - newUser.email = user.email; - newUser.lastConnection = Timestamp.valueOf(LocalDateTime.now()); - final UserAuth tmp = da.insert(newUser); - LOGGER.debug("create new user done with id=={}", tmp.id); - return da.get(UserAuthGet.class, tmp.id); - } - } - - @GET - @Path("me") - @RolesAllowed("USER") - public UserOut getMe(@Context final SecurityContext sc) { - LOGGER.debug("getMe()"); - final GenericContext gc = (GenericContext) sc.getUserPrincipal(); - LOGGER.debug("== USER ? {}", gc.userByToken); - return new UserOut(gc.userByToken.id, gc.userByToken.name); - } - - @POST - @Path("password") - @RolesAllowed("USER") - @Consumes(MediaType.APPLICATION_JSON) - public void changePassword(@Context final SecurityContext sc, final ChangePassword data) throws Exception { - LOGGER.debug("ChangePassword()"); - final GenericContext gc = (GenericContext) sc.getUserPrincipal(); - LOGGER.debug("== USER ? {}", gc.userByToken); - try (DBAccess da = DBAccess.createInterface()) { - CHECKER_CHANGE_PASSWORD.checkAll(da, "", data, null); - final UserAuth user = checkAuthUser(data.login, data.time, data.password); - if (user == null) { - throw new SystemException("Fail to retrieve the user... (impossible case)"); - } - if (!user.id.equals(gc.userByToken.id)) { - throw new SystemException("Try to change the password of an other user !!! You are BAD..."); - } - // Process the update: - user.password = data.newPassword; - DataAccess.update(user, user.id, List.of("password")); - } - } - - @GET - @Path("is_login_exist") - @PermitAll - public Boolean isLoginExist(@QueryParam("login") final String login) throws Exception { - LOGGER.debug("checkLogin: '{}'", login); - final List out = DataAccess.getsWhere(UserAuth.class, - new Condition(new QueryCondition("login", "=", login))); - return out.size() >= 1; - } - - // TODO: add an application TOKEN and permit only 50 requested (maybe add an option to disable it). - @GET - @Path("is_email_exist") - @PermitAll - public Boolean isEmailExist(@QueryParam("email") final String email) throws Exception { - LOGGER.debug("checkEmail: {}", email); - final List out = DataAccess.getsWhere(UserAuth.class, - new Condition(new QueryCondition("email", "=", email))); - return out.size() >= 1; - } - - private UserAuth checkAuthUser(final String login, final String time, final String password) throws Exception { - // email or login? - String query = "login"; - if (login.contains("@")) { - query = "email"; - } - final UserAuth user = DataAccess.getWhere(UserAuth.class, new Condition(new QueryCondition(query, "=", login)), - new AccessDeletedItems(), new ReadAllColumn()); - - if (user == null) { - throw new FailException(Response.Status.PRECONDITION_FAILED, - "FAIL Authenticate-wrong email/login '" + login + "')"); - } - // Check the password: - final String passwordCheck = getSHA512( - "login='" + login + "';pass='" + user.password + "';date='" + time + "'"); - if (!passwordCheck.contentEquals(password)) { - throw new FailException(Response.Status.PRECONDITION_FAILED, "Password error ..."); - } - LOGGER.debug(" ==> pass nearly all test: blocked={} deleted={} ", user.blocked, user.deleted); - if (user.blocked || (user.deleted != null && user.deleted == true)) { - throw new FailException(Response.Status.UNAUTHORIZED, "FAIL Authentiocate"); - } - return user; - } - - @POST - @Path("get_token") - @PermitAll - @Consumes(MediaType.APPLICATION_JSON) - public GetToken getToken(final DataGetToken data) throws Exception { - LOGGER.info("User Authenticate: {}", data.login); - try (DBAccess da = DBAccess.createInterface()) { - CHECKER_REQUEST_TOKEN.checkAll(da, "", data, null); - final UserAuth user = checkAuthUser(data.login, data.time, data.password); - // at the point the user has been not deleted and not blocked. - // this authentication is valid only for Karso ==> not for the application - final int expirationTimeInMinutes = ConfigVariable.getAuthExpirationTime(); - // Get the USER Right (Note: by construction KARSO have application ID = KARSO_INITIALISATION_ID - final Map ssoRight = RightResource.getUserRight(user.id, - Initialization.KARSO_INITIALISATION_ID); - if (!ssoRight.containsKey("USER")) { - // If the USER is not override, the system add by default USER - ssoRight.put("USER", PartRight.READ_WRITE); - } - final Map rightForFront = new HashMap<>(); - for (final Map.Entry entry : ssoRight.entrySet()) { - rightForFront.put(entry.getKey(), entry.getValue().getValue()); - } - LOGGER.debug("Get new token with right: {}", ssoRight); - final Map outRight = new HashMap<>(); - // we set the right in the under map to manage multiple application group right. and in some application user can see other user or all user of the application - outRight.put(UserResource.APPLICATION, rightForFront); - // TODO: maybe correct this get of TTL... - final String ret = JWTWrapper.generateJWToken(user.id, user.login, "KarAuth", UserResource.APPLICATION, - outRight, expirationTimeInMinutes); - if (ret == null) { - throw new SystemException("Missing internal JWT system ==> can not sign anything ..."); - } - // Update last connection: - final UserAuth newUser = new UserAuth(); - newUser.lastConnection = Timestamp.valueOf(LocalDateTime.now()); - da.update(newUser, user.id, List.of("lastConnection")); - return new GetToken(ret); - } - } - - public static String bytesToHex(final byte[] bytes) { - final StringBuilder sb = new StringBuilder(); - for (final byte b : bytes) { - sb.append(String.format("%02x", b)); - } - return sb.toString(); - } - - public static String getSHA512(final String passwordToHash) { - try { - final MessageDigest md = MessageDigest.getInstance("SHA-512"); - final byte[] bytes = md.digest(passwordToHash.getBytes(StandardCharsets.UTF_8)); - return bytesToHex(bytes); - } catch (final NoSuchAlgorithmException e) { - e.printStackTrace(); - } - return null; - } - -} diff --git a/back/src/org/kar/karso/filter/KarsoAuthenticationFilter.java b/back/src/org/kar/karso/filter/KarsoAuthenticationFilter.java deleted file mode 100644 index d93ad35..0000000 --- a/back/src/org/kar/karso/filter/KarsoAuthenticationFilter.java +++ /dev/null @@ -1,74 +0,0 @@ -package org.kar.karso.filter; - -import java.sql.Timestamp; -import java.time.Instant; -import java.util.Map; - -import org.kar.archidata.dataAccess.DataAccess; -import org.kar.archidata.filter.AuthenticationFilter; -import org.kar.archidata.filter.PartRight; -import org.kar.archidata.model.UserByToken; -import org.kar.karso.api.UserResource; -import org.kar.karso.model.ApplicationToken; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import jakarta.annotation.Priority; -import jakarta.ws.rs.Priorities; -import jakarta.ws.rs.ext.Provider; - -//@PreMatching -@Provider -@Priority(Priorities.AUTHENTICATION) -public class KarsoAuthenticationFilter extends AuthenticationFilter { - private static final Logger LOGGER = LoggerFactory.getLogger(KarsoAuthenticationFilter.class); - - //curl http://0.0.0.0:15080/karso/api/public_key/pem --output plop.txt -H "Authorization: Zota 1:U0sJM1m@-STSdfg4365fJOFUGbR4kFycBu1qGZPwf7gW6k2WWRBzTPUH7QutCgPw-SDss45_563sSDFdfg@dsf@456" --verbose - - public KarsoAuthenticationFilter() { - super(UserResource.APPLICATION); - } - - @Override - protected UserByToken validateToken(final String authorization) throws Exception { - if (authorization == null || authorization.length() < 25) { - System.out.println("Application authentication too short '" + authorization + "'"); - return null; - } - final String[] elems = authorization.split(":"); - if (elems.length != 2) { - System.out.println("Application authentication split error '" + authorization + "'"); - return null; - } - final Long indexToken = Long.parseLong(elems[0]); - - final ApplicationToken value = DataAccess.get(ApplicationToken.class, indexToken); - if (value == null) { - System.out.println("Application authentication can not find id '" + authorization + "'"); - return null; - } - // TODO: hash the sent token - if (!value.token.equals(elems[1])) { - System.out.println("Application authentication mismatch '" + authorization + "'"); - return null; - } - // TODO: check UTC !!! - if (!value.endValidityTime.after(Timestamp.from(Instant.now()))) { - System.out.println("Application authentication Time-out '" + authorization + "' " + value.endValidityTime - + " > " + Timestamp.from(Instant.now())); - return null; - } - // ---------------------------------- - // -- All is good !!! - // ---------------------------------- - // We are in transition phase the user element will be removed - final UserByToken userByToken = new UserByToken(); - userByToken.id = value.id; - userByToken.name = value.name; - userByToken.parentId = value.parentId; - userByToken.type = UserByToken.TYPE_APPLICATION; - // TODO: Manage the retrieve of specific rights ... - userByToken.right.put(UserResource.APPLICATION, Map.of("APPLICATION", PartRight.READ_WRITE)); - return userByToken; - } -} diff --git a/back/src/org/kar/karso/migration/Initialization.java b/back/src/org/kar/karso/migration/Initialization.java deleted file mode 100644 index 79434f3..0000000 --- a/back/src/org/kar/karso/migration/Initialization.java +++ /dev/null @@ -1,168 +0,0 @@ -package org.kar.karso.migration; - -import java.util.List; - -import org.kar.archidata.api.DataResource; -import org.kar.archidata.dataAccess.DBAccess; -import org.kar.archidata.dataAccess.addOnSQL.AddOnManyToMany; -import org.kar.archidata.externalRestApi.AnalyzeApi; -import org.kar.archidata.externalRestApi.TsGenerateApi; -import org.kar.archidata.filter.PartRight; -import org.kar.archidata.migration.MigrationSqlStep; -import org.kar.archidata.model.token.JwtToken; -import org.kar.karso.api.ApplicationResource; -import org.kar.karso.api.ApplicationTokenResource; -import org.kar.karso.api.Front; -import org.kar.karso.api.PublicKeyResource; -import org.kar.karso.api.RightResource; -import org.kar.karso.api.SystemConfigResource; -import org.kar.karso.api.UserResource; -import org.kar.karso.model.Application; -import org.kar.karso.model.ApplicationToken; -import org.kar.karso.model.Right; -import org.kar.karso.model.RightDescription; -import org.kar.karso.model.Settings; -import org.kar.karso.model.UserAuth; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -public class Initialization extends MigrationSqlStep { - private static final Logger LOGGER = LoggerFactory.getLogger(Initialization.class); - - public static final int KARSO_INITIALISATION_ID = 1; - - public static final List> CLASSES_BASE = List.of(Settings.class, UserAuth.class, Application.class, - ApplicationToken.class, RightDescription.class, Right.class); - - // created object - private Application app = null; - private UserAuth user = null; - - private RightDescription rightDescription; - - @Override - public String getName() { - return "Initialization"; - } - - public static void generateObjects() throws Exception { - LOGGER.info("Generate APIs"); - final List> listOfResources = List.of(Front.class, DataResource.class, ApplicationResource.class, - ApplicationTokenResource.class, PublicKeyResource.class, RightResource.class, UserResource.class, - SystemConfigResource.class); - final AnalyzeApi api = new AnalyzeApi(); - api.addAllApi(listOfResources); - api.addModel(JwtToken.class); - TsGenerateApi.generateApi(api, "../front/src/back-api/"); - LOGGER.info("Generate APIs (DONE)"); - } - - @Override - public void generateStep() throws Exception { - for (final Class clazz : CLASSES_BASE) { - addClass(clazz); - } - - addAction((final DBAccess da) -> { - final Application app = new Application(); - //app.id = 1L; - app.name = "karso"; - app.description = "Root SSO interface"; - app.redirect = "https://atria-soft.org/karso/sso"; - app.redirectDev = "http://localhost:4003/karso/sso"; - app.notification = ""; - app.ttl = 666; - this.app = da.insert(app); - }); - // default admin: "karadmin" password: "adminA@666" - addAction((final DBAccess da) -> { - final UserAuth user = new UserAuth(); - //user.id = 1L; - user.login = "karadmin"; - user.password = UserResource.getSHA512("adminA@666"); - user.email = "admin@admin.ZZZ"; - this.user = da.insert(user); - }); - addAction((final DBAccess da) -> { - AddOnManyToMany.addLink(da, UserAuth.class, this.user.id, "application", this.app.id); - }); - addAction((final DBAccess da) -> { - final Settings settings = new Settings(); - settings.key = "SIGN_UP_ENABLE"; - settings.right = "rwr-r-"; - settings.type = "BOOLEAN"; - settings.value = "false"; - da.insert(settings); - settings.key = "SIGN_IN_ENABLE"; - settings.right = "rwr-r-"; - settings.type = "BOOLEAN"; - settings.value = "true"; - da.insert(settings); - settings.key = "SIGN_UP_FILTER"; - settings.right = "rw----"; - settings.type = "STRING"; - settings.value = ".*"; - da.insert(settings); - settings.key = "EMAIL_VALIDATION_REQUIRED"; - settings.right = "rwr-r-"; - settings.type = "BOOLEAN"; - settings.value = "false"; - da.insert(settings); - }); - addAction((final DBAccess da) -> { - final RightDescription rightDescription = new RightDescription(); - rightDescription.applicationId = this.app.id; - rightDescription.key = "ADMIN"; - rightDescription.title = "Administrator"; - rightDescription.description = "Full administrator Right"; - this.rightDescription = da.insert(rightDescription); - }); - addAction((final DBAccess da) -> { - final Right right = new Right(); - right.applicationId = this.app.id; - right.userId = this.user.id; - right.rightDescriptionId = this.rightDescription.id; - right.value = PartRight.READ_WRITE; - da.insert(right); - }); - // we generate an offset to permit to manage some generic upgrade in the future... - addAction(""" - ALTER TABLE `application` AUTO_INCREMENT = 1000; - """, "mysql"); - addAction(""" - ALTER TABLE `user` AUTO_INCREMENT = 1000; - """, "mysql"); - addAction(""" - ALTER TABLE `settings` AUTO_INCREMENT = 1000; - """, "mysql"); - addAction(""" - ALTER TABLE `right` AUTO_INCREMENT = 1000; - """, "mysql"); - addAction(""" - ALTER TABLE `rightDescription` AUTO_INCREMENT = 1000; - """, "mysql"); - display(); - } - - public static void dropAll(final DBAccess da) { - for (final Class element : CLASSES_BASE) { - try { - da.drop(element); - } catch (final Exception ex) { - LOGGER.error("Fail to drop table !!!!!!"); - ex.printStackTrace(); - } - } - } - - public static void cleanAll(final DBAccess da) { - for (final Class element : CLASSES_BASE) { - try { - da.cleanAll(element); - } catch (final Exception ex) { - LOGGER.error("Fail to clean table !!!!!!"); - ex.printStackTrace(); - } - } - } -} diff --git a/back/src/org/kar/karso/migration/Migration20231015.java b/back/src/org/kar/karso/migration/Migration20231015.java deleted file mode 100644 index 0813335..0000000 --- a/back/src/org/kar/karso/migration/Migration20231015.java +++ /dev/null @@ -1,35 +0,0 @@ -package org.kar.karso.migration; - -import java.util.List; - -import org.kar.archidata.migration.MigrationSqlStep; - -public class Migration20231015 extends MigrationSqlStep { - - public static final int KARSO_INITIALISATION_ID = 1; - - @Override - public String getName() { - return "refactor creation and update time"; - } - - public Migration20231015() { - - } - - @Override - public void generateStep() { - - for (final String elem : List.of("application", "applicationToken", "right", "rightDescription", "settings", - "user", "user_link_application")) { //, "user_link_cover")) { - - addAction(""" - ALTER TABLE `""" + elem + """ - ` - RENAME COLUMN `create_date` TO `createdAt`, - RENAME COLUMN `modify_date` TO `updatedAt`; - """); - } - } - -} diff --git a/back/src/org/kar/karso/migration/Migration20231126.java b/back/src/org/kar/karso/migration/Migration20231126.java deleted file mode 100644 index e4cf1db..0000000 --- a/back/src/org/kar/karso/migration/Migration20231126.java +++ /dev/null @@ -1,149 +0,0 @@ -package org.kar.karso.migration; - -import org.kar.archidata.migration.MigrationSqlStep; - -public class Migration20231126 extends MigrationSqlStep { - - public static final int KARSO_INITIALISATION_ID = 1; - - @Override - public String getName() { - return "migration-2023-11-26: reorder the migration for the new API of archidata"; - } - - public Migration20231126() { - - } - - @Override - public void generateStep() { - // update migration update (last one) - addAction( - """ - ALTER TABLE `KAR_migration` - CHANGE `id` `id` bigint NOT NULL COMMENT 'Primary key of the base' AUTO_INCREMENT FIRST, - CHANGE `create_date` `createdAt` timestamp(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT 'Create time of the object' AFTER `id`, - CHANGE `modify_date` `updatedAt` timestamp(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT 'When update the object' AFTER `createdAt`, - CHANGE `deleted` `deleted` tinyint(1) NOT NULL DEFAULT '0' COMMENT 'When delete, they are not removed, they are just set in a deleted state' AFTER `updatedAt`, - ADD `version` int NOT NULL DEFAULT '2' AFTER `deleted`, - CHANGE `name` `name` varchar(256) COLLATE 'utf8mb4_0900_ai_ci' NULL COMMENT 'Name of the migration' AFTER `version`, - CHANGE `terminated` `terminated` tinyint(1) NOT NULL DEFAULT '0' COMMENT 'if the migration is well terminated or not' AFTER `name`, - CHANGE `stepId` `stepId` int NULL COMMENT 'index in the migration progression' AFTER `terminated`, - CHANGE `count` `count` int NULL COMMENT 'number of element in the migration' AFTER `stepId`, - CHANGE `log` `log` text COLLATE 'utf8mb3_general_ci' NULL COMMENT 'Log generate by the migration' AFTER `count`; - """); - - addAction( - """ - ALTER TABLE `application` - CHANGE `id` `id` bigint NOT NULL COMMENT 'Primary key of the base' AUTO_INCREMENT FIRST, - CHANGE `createdAt` `createdAt` timestamp(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT 'Create time of the object' AFTER `id`, - CHANGE `updatedAt` `updatedAt` timestamp(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT 'When update the object' AFTER `createdAt`, - CHANGE `deleted` `deleted` tinyint(1) NOT NULL DEFAULT '0' COMMENT 'When delete, they are not removed, they are just set in a deleted state' AFTER `updatedAt`, - CHANGE `name` `name` varchar(256) COLLATE 'utf8mb4_0900_ai_ci' NULL AFTER `deleted`, - CHANGE `description` `description` varchar(2048) COLLATE 'utf8mb4_0900_ai_ci' NULL AFTER `name`, - CHANGE `redirect` `redirect` varchar(2048) COLLATE 'utf8mb4_0900_ai_ci' NOT NULL AFTER `description`, - CHANGE `redirectDev` `redirectDev` varchar(2048) COLLATE 'utf8mb4_0900_ai_ci' NULL DEFAULT 'http://localhost:4200/sso/' AFTER `redirect`, - CHANGE `notification` `notification` varchar(2048) COLLATE 'utf8mb4_0900_ai_ci' NULL DEFAULT 'http://localhost:4200/sso/notification' AFTER `redirectDev`, - CHANGE `ttl` `ttl` int NOT NULL DEFAULT '666' COMMENT 'Expiration time ' AFTER `notification`, - CHANGE `manageRight` `manageRight` tinyint(1) NOT NULL DEFAULT '0' COMMENT 'Right is manage with Karso' AFTER `ttl`; - """); - addAction( - """ - ALTER TABLE `applicationToken` - CHANGE `id` `id` bigint NOT NULL COMMENT 'Primary key of the base' AUTO_INCREMENT FIRST, - CHANGE `createdAt` `createdAt` timestamp(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT 'Create time of the object' AFTER `id`, - CHANGE `updatedAt` `updatedAt` timestamp(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT 'When update the object' AFTER `createdAt`, - CHANGE `deleted` `deleted` tinyint(1) NOT NULL DEFAULT '0' COMMENT 'When delete, they are not removed, they are just set in a deleted state' AFTER `updatedAt`, - CHANGE `parentId` `parentId` bigint NOT NULL AFTER `deleted`, - CHANGE `name` `name` text COLLATE 'utf8mb3_general_ci' NOT NULL AFTER `parentId`, - CHANGE `endValidityTime` `endValidityTime` timestamp(3) NOT NULL AFTER `name`, - CHANGE `token` `token` text COLLATE 'utf8mb3_general_ci' NOT NULL AFTER `endValidityTime`; - """); - - addAction( - """ - ALTER TABLE `right` - CHANGE `id` `id` bigint NOT NULL COMMENT 'Primary key of the base' AUTO_INCREMENT FIRST, - CHANGE `createdAt` `createdAt` timestamp(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT 'Create time of the object' AFTER `id`, - CHANGE `updatedAt` `updatedAt` timestamp(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT 'When update the object' AFTER `createdAt`, - CHANGE `deleted` `deleted` tinyint(1) NOT NULL DEFAULT '0' COMMENT 'When delete, they are not removed, they are just set in a deleted state' AFTER `updatedAt`, - CHANGE `applicationId` `applicationId` bigint NOT NULL COMMENT 'application-ID that have the reference of the right' AFTER `deleted`, - CHANGE `userId` `userId` bigint NOT NULL COMMENT 'user-ID ' AFTER `applicationId`, - CHANGE `rightDescriptionId` `rightDescriptionId` bigint NOT NULL COMMENT 'rightDescription-ID of the right description' AFTER `userId`, - CHANGE `value` `value` varchar(1024) COLLATE 'utf8mb4_0900_ai_ci' NOT NULL COMMENT 'Value of the right' AFTER `rightDescriptionId`; - """); - - addAction( - """ - ALTER TABLE `rightDescription` - CHANGE `id` `id` bigint NOT NULL COMMENT 'Primary key of the base' AUTO_INCREMENT FIRST, - CHANGE `createdAt` `createdAt` timestamp(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT 'Create time of the object' AFTER `id`, - CHANGE `updatedAt` `updatedAt` timestamp(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT 'When update the object' AFTER `createdAt`, - CHANGE `deleted` `deleted` tinyint(1) NOT NULL DEFAULT '0' COMMENT 'When delete, they are not removed, they are just set in a deleted state' AFTER `updatedAt`, - CHANGE `applicationId` `applicationId` bigint NOT NULL COMMENT 'Application id that have the reference of the right' AFTER `deleted`, - CHANGE `key` `key` varchar(64) COLLATE 'utf8mb4_0900_ai_ci' NOT NULL COMMENT 'Key of the property' AFTER `applicationId`, - CHANGE `title` `title` varchar(1024) COLLATE 'utf8mb4_0900_ai_ci' NOT NULL COMMENT 'Title of the right' AFTER `key`, - CHANGE `description` `description` varchar(1024) COLLATE 'utf8mb4_0900_ai_ci' NOT NULL COMMENT 'Description of the right' AFTER `title`, - CHANGE `defaultValue` `defaultValue` varchar(1024) COLLATE 'utf8mb4_0900_ai_ci' NULL COMMENT 'default value if Never set' AFTER `description`, - CHANGE `type` `type` varchar(16) COLLATE 'utf8mb4_0900_ai_ci' NOT NULL DEFAULT 'BOOLEAN' COMMENT 'Type of the property' AFTER `defaultValue`; - """); - - addAction( - """ - ALTER TABLE `settings` - CHANGE `id` `id` bigint NOT NULL COMMENT 'Primary key of the base' AUTO_INCREMENT FIRST, - CHANGE `createdAt` `createdAt` timestamp(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT 'Create time of the object' AFTER `id`, - CHANGE `updatedAt` `updatedAt` timestamp(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT 'When update the object' AFTER `createdAt`, - CHANGE `deleted` `deleted` tinyint(1) NOT NULL DEFAULT '0' COMMENT 'When delete, they are not removed, they are just set in a deleted state' AFTER `updatedAt`, - CHANGE `key` `key` varchar(512) COLLATE 'utf8mb4_0900_ai_ci' NOT NULL AFTER `deleted`, - CHANGE `right` `right` varchar(6) COLLATE 'utf8mb4_0900_ai_ci' NOT NULL DEFAULT 'rw----' COMMENT 'Right for the specific element(ADMIN [rw] USER [rw] other [rw])' AFTER `key`, - CHANGE `type` `type` varchar(10) COLLATE 'utf8mb4_0900_ai_ci' NOT NULL COMMENT 'Type Of the data' AFTER `right`, - CHANGE `value` `value` text COLLATE 'utf8mb3_general_ci' NOT NULL COMMENT 'Value of the configuration' AFTER `type`; - """); - - addAction( - """ - ALTER TABLE `user` - CHANGE `id` `id` bigint NOT NULL COMMENT 'Primary key of the base' AUTO_INCREMENT FIRST, - CHANGE `createdAt` `createdAt` timestamp(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT 'Create time of the object' AFTER `id`, - CHANGE `updatedAt` `updatedAt` timestamp(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT 'When update the object' AFTER `createdAt`, - CHANGE `deleted` `deleted` tinyint(1) NOT NULL DEFAULT '0' COMMENT 'When delete, they are not removed, they are just set in a deleted state' AFTER `updatedAt`, - CHANGE `login` `login` varchar(128) COLLATE 'utf8mb4_0900_ai_ci' NULL AFTER `deleted`, - CHANGE `lastConnection` `lastConnection` timestamp(3) NULL AFTER `login`, - CHANGE `admin` `admin` tinyint(1) NOT NULL DEFAULT '0' AFTER `lastConnection`, - CHANGE `blocked` `blocked` tinyint(1) NOT NULL DEFAULT '0' AFTER `admin`, - CHANGE `removed` `removed` tinyint(1) NOT NULL DEFAULT '0' AFTER `blocked`, - CHANGE `password` `password` varchar(128) COLLATE 'utf8mb4_0900_ai_ci' NOT NULL AFTER `removed`, - CHANGE `email` `email` varchar(512) COLLATE 'utf8mb4_0900_ai_ci' NOT NULL AFTER `password`, - CHANGE `emailValidate` `emailValidate` timestamp(3) NULL AFTER `email`, - CHANGE `newEmail` `newEmail` varchar(512) COLLATE 'utf8mb4_0900_ai_ci' NULL AFTER `emailValidate`, - CHANGE `avatar` `avatar` tinyint(1) NOT NULL DEFAULT '0' AFTER `newEmail`; - """); - - addAction(""" - ALTER TABLE `user_link_application` - CHANGE `createdAt` `createdAt` timestamp(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) AFTER `id`, - CHANGE `updatedAt` `updatedAt` timestamp(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) AFTER `createdAt`, - CHANGE `deleted` `deleted` tinyint(1) NOT NULL DEFAULT '0' AFTER `updatedAt`, - CHANGE `user_id` `object1id` bigint NOT NULL AFTER `deleted`, - CHANGE `application_id` `object2id` bigint NOT NULL AFTER `object1id`, - ADD FOREIGN KEY (`object1id`) REFERENCES `user` (`id`); - """); - - addAction( - """ - CREATE TABLE `user_link_cover` ( - `id` bigint NOT NULL AUTO_INCREMENT COMMENT 'Primary key of the base' , - `createdAt` timestamp(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT 'Create time of the object' , - `updatedAt` timestamp(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3) COMMENT 'When update the object' , - `deleted` tinyint(1) NOT NULL DEFAULT '0' COMMENT 'When delete, they are not removed, they are just set in a deleted state' , - `object1Id` bigint NOT NULL COMMENT 'Object reference 1' , - `object2Id` bigint NOT NULL COMMENT 'Object reference 2' , - PRIMARY KEY (`id`) - ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci; - """); - - } - -} diff --git a/back/src/org/kar/karso/migration/Migration20240515.java b/back/src/org/kar/karso/migration/Migration20240515.java deleted file mode 100644 index a849312..0000000 --- a/back/src/org/kar/karso/migration/Migration20240515.java +++ /dev/null @@ -1,73 +0,0 @@ -package org.kar.karso.migration; - -import java.util.List; - -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.UuidUtils; -import org.kar.karso.migration.model.UUIDConversion; - -public class Migration20240515 extends MigrationSqlStep { - - public static final int KARSO_INITIALISATION_ID = 1; - - @Override - public String getName() { - return "migration-2024-05-15: Update the link user application and the cover"; - } - - public Migration20240515() { - - } - - @Override - public void generateStep() { - // update migration update (last one) - addAction(""" - ALTER TABLE `user_link_application` ADD `uuid` binary(16) AFTER `id`; - """); - addAction((final DBAccess da) -> { - final List datas = da.gets(UUIDConversion.class, new AccessDeletedItems(), - new OverrideTableName("user_link_application")); - for (final UUIDConversion elem : datas) { - elem.uuid = UuidUtils.nextUUID(); - } - for (final UUIDConversion elem : datas) { - da.update(elem, elem.id, List.of("uuid"), new OverrideTableName("user_link_application")); - } - }); - addAction(""" - ALTER TABLE `user_link_application` - CHANGE `id` `id` bigint; - """); - addAction(""" - ALTER TABLE `user_link_application` DROP PRIMARY KEY; - """); - addAction(""" - ALTER TABLE `user_link_application` - CHANGE `uuid` `uuid` binary(16) DEFAULT (UUID_TO_BIN(UUID(), TRUE)); - """); - addAction(""" - ALTER TABLE `user_link_application` - ADD PRIMARY KEY `uuid` (`uuid`); - """); - - addAction(""" - ALTER TABLE `user_link_application` - DROP `id`; - """); - - addAction(""" - DROP TABLE `user_link_cover`; - """); - - addAction(""" - ALTER TABLE `user` - ADD `covers` json DEFAULT NULL COMMENT 'List of Id of the specific covers' AFTER `removed`; - """); - - } - -} diff --git a/back/src/org/kar/karso/migration/Migration20250204.java b/back/src/org/kar/karso/migration/Migration20250204.java deleted file mode 100644 index 4fd7e06..0000000 --- a/back/src/org/kar/karso/migration/Migration20250204.java +++ /dev/null @@ -1,87 +0,0 @@ -package org.kar.karso.migration; - -import java.util.List; - -import org.bson.types.ObjectId; -import org.kar.archidata.dataAccess.DBAccess; -import org.kar.archidata.dataAccess.options.AccessDeletedItems; -import org.kar.archidata.dataAccess.options.OverrideTableName; -import org.kar.archidata.filter.PartRight; -import org.kar.archidata.migration.MigrationSqlStep; -import org.kar.karso.migration.model.OIDConversion; -import org.kar.karso.model.Right; - -public class Migration20250204 extends MigrationSqlStep { - - public static final int KARSO_INITIALISATION_ID = 1; - - @Override - public String getName() { - return "migration-2025-02-04: mograte native id as ObjectId"; - } - - @Override - public void generateStep() { - // update migration update (last one) - addAction(""" - ALTER TABLE `user_link_application` ADD `_id` binary(12) AFTER `uuid`; - """); - addAction((final DBAccess da) -> { - final List datas = da.gets(OIDConversion.class, new AccessDeletedItems(), - new OverrideTableName("user_link_application")); - for (final OIDConversion elem : datas) { - elem._id = new ObjectId(); - } - for (final OIDConversion elem : datas) { - da.update(elem, elem.uuid, List.of("_id"), new OverrideTableName("user_link_application")); - } - }); - addAction(""" - ALTER TABLE `user_link_application` - CHANGE `uuid` `uuid` binary(16); - """); - addAction(""" - ALTER TABLE `user_link_application` DROP PRIMARY KEY; - """); - addAction(""" - ALTER TABLE `user_link_application` - CHANGE `_id` `_id` binary(12) NOT NULL; - """); - addAction(""" - ALTER TABLE `user_link_application` - ADD PRIMARY KEY `_id` (`_id`); - """); - addAction(""" - ALTER TABLE `user_link_application` - DROP `uuid`; - """); - addAction(""" - ALTER TABLE `user` - DROP `admin`; - """); - addAction(""" - ALTER TABLE `user` - DROP `removed`; - """); - addAction(""" - ALTER TABLE `user` ADD `blockedReason` varchar(512) AFTER `blocked`; - """); - addAction(""" - ALTER TABLE `right` - DROP `value`; - """); - addAction(""" - ALTER TABLE `right` ADD `value` JSON NOT NULL AFTER `rightDescriptionId`; - """); - addAction((final DBAccess da) -> { - final List datas = da.gets(Right.class, new AccessDeletedItems()); - for (final Right elem : datas) { - elem.value = PartRight.READ_WRITE; - } - for (final Right elem : datas) { - da.update(elem, elem.id, List.of("value")); - } - }); - } - -} diff --git a/back/src/org/kar/karso/migration/model/OIDConversion.java b/back/src/org/kar/karso/migration/model/OIDConversion.java deleted file mode 100644 index 7d6aa1b..0000000 --- a/back/src/org/kar/karso/migration/model/OIDConversion.java +++ /dev/null @@ -1,13 +0,0 @@ -package org.kar.karso.migration.model; - -import java.util.UUID; - -import org.bson.types.ObjectId; - -import jakarta.persistence.Id; - -public class OIDConversion { - @Id - public UUID uuid = null; - public ObjectId _id = null; -} diff --git a/back/src/org/kar/karso/migration/model/UUIDConversion.java b/back/src/org/kar/karso/migration/model/UUIDConversion.java deleted file mode 100644 index ea03e1a..0000000 --- a/back/src/org/kar/karso/migration/model/UUIDConversion.java +++ /dev/null @@ -1,11 +0,0 @@ -package org.kar.karso.migration.model; - -import java.util.UUID; - -import jakarta.persistence.Id; - -public class UUIDConversion { - @Id - public Long id = null; - public UUID uuid = null; -} diff --git a/back/src/org/kar/karso/model/AddUserData.java b/back/src/org/kar/karso/model/AddUserData.java deleted file mode 100644 index e880314..0000000 --- a/back/src/org/kar/karso/model/AddUserData.java +++ /dev/null @@ -1,15 +0,0 @@ -package org.kar.karso.model; - -import com.fasterxml.jackson.annotation.JsonInclude; - -@JsonInclude(JsonInclude.Include.NON_NULL) -public class AddUserData { - public Long userId; - - public AddUserData() {} - - public AddUserData(final long userId) { - this.userId = userId; - } - -} \ No newline at end of file diff --git a/back/src/org/kar/karso/model/Application.java b/back/src/org/kar/karso/model/Application.java deleted file mode 100644 index fdf15ba..0000000 --- a/back/src/org/kar/karso/model/Application.java +++ /dev/null @@ -1,46 +0,0 @@ -package org.kar.karso.model; - -import org.kar.archidata.annotation.DataIfNotExists; -import org.kar.archidata.model.GenericDataSoftDelete; - -import com.fasterxml.jackson.annotation.JsonInclude; - -import io.swagger.v3.oas.annotations.media.Schema; -import jakarta.persistence.Column; -import jakarta.persistence.Table; -import jakarta.ws.rs.DefaultValue; - -@Table(name = "application") -@DataIfNotExists -@JsonInclude(JsonInclude.Include.NON_NULL) -public class Application extends GenericDataSoftDelete { - @Column(length = 256) - public String name; - @Column(length = 2048) - public String description; - @Column(length = 2048, nullable = false) - public String redirect; - @Column(length = 2048) - @DefaultValue("'http://localhost:4200/sso/'") - public String redirectDev; - @Column(length = 2048) - @DefaultValue("'http://localhost:4200/sso/notification'") - public String notification; - @Column(nullable = false) - @Schema(description = "Expiration time ") - @DefaultValue("666") - public Integer ttl; - @Column(nullable = false) - @Schema(description = "Right is manage with Karso") - @DefaultValue("0") - public Boolean manageRight; - - public Application() {} - - @Override - public String toString() { - return "Application{" + "id=" + this.id + ", description='" + this.description + '\'' + ", redirect='" - + this.redirect + '\'' + ", redirectDev='" + this.redirectDev + '\'' + ", notification='" - + this.notification + '\'' + ", ttl='" + this.ttl + '\'' + '}'; - } -} diff --git a/back/src/org/kar/karso/model/ApplicationSmall.java b/back/src/org/kar/karso/model/ApplicationSmall.java deleted file mode 100644 index ce3cef1..0000000 --- a/back/src/org/kar/karso/model/ApplicationSmall.java +++ /dev/null @@ -1,21 +0,0 @@ -package org.kar.karso.model; - -import com.fasterxml.jackson.annotation.JsonInclude; - -@JsonInclude(JsonInclude.Include.NON_NULL) -public class ApplicationSmall { - public Long id; - public String name; - public String description; - public String redirect; - - public ApplicationSmall() {} - - public ApplicationSmall(final Long id, final String name, final String description, final String redirect) { - this.id = id; - this.name = name; - this.description = description; - this.redirect = redirect; - } - -} diff --git a/back/src/org/kar/karso/model/ApplicationToken.java b/back/src/org/kar/karso/model/ApplicationToken.java deleted file mode 100644 index 27b6f02..0000000 --- a/back/src/org/kar/karso/model/ApplicationToken.java +++ /dev/null @@ -1,15 +0,0 @@ -package org.kar.karso.model; - -import org.kar.archidata.annotation.DataIfNotExists; -import org.kar.archidata.model.GenericToken; - -import com.fasterxml.jackson.annotation.JsonInclude; - -import jakarta.persistence.Table; - -@Table(name = "applicationToken") -@DataIfNotExists -@JsonInclude(JsonInclude.Include.NON_NULL) -public class ApplicationToken extends GenericToken { - -} \ No newline at end of file diff --git a/back/src/org/kar/karso/model/ChangePassword.java b/back/src/org/kar/karso/model/ChangePassword.java deleted file mode 100644 index 08e540c..0000000 --- a/back/src/org/kar/karso/model/ChangePassword.java +++ /dev/null @@ -1,39 +0,0 @@ -package org.kar.karso.model; - -import org.kar.archidata.checker.CheckJPA; - -import com.fasterxml.jackson.annotation.JsonInclude; - -import jakarta.validation.constraints.NotNull; -import jakarta.validation.constraints.Pattern; -import jakarta.validation.constraints.Size; - -@JsonInclude(JsonInclude.Include.NON_NULL) -public class ChangePassword { - @NotNull - @Size(min = 2, max = 2) - @Pattern(regexp = "^v1$") - public String method; - @NotNull - @Size(min = 3, max = 128) - @Pattern(regexp = "^[a-zA-Z0-9\\-_ \\.@]+$") - public String login; - @NotNull - @Size(min = 20, max = 64) - @Pattern(regexp = "^\\d{4}\\-\\d{2}\\-\\d{2}T\\d{2}:\\d{2}:\\d{2}(\\.\\d{1,9})+.*$") - public String time; - @NotNull - @Size(min = 128, max = 128) - @Pattern(regexp = "^[a-zA-Z0-9]{128}$") - public String password; - @NotNull - @Size(min = 128, max = 128) - @Pattern(regexp = "^[a-zA-Z0-9]{128}$") - public String newPassword; - - public static class ChangePasswordChecker extends CheckJPA { - public ChangePasswordChecker() { - super(ChangePassword.class); - } - } -} diff --git a/back/src/org/kar/karso/model/ClientToken.java b/back/src/org/kar/karso/model/ClientToken.java deleted file mode 100644 index f97e26e..0000000 --- a/back/src/org/kar/karso/model/ClientToken.java +++ /dev/null @@ -1,23 +0,0 @@ -package org.kar.karso.model; - -import com.fasterxml.jackson.annotation.JsonInclude; - -import jakarta.persistence.Column; - -@JsonInclude(JsonInclude.Include.NON_NULL) -public class ClientToken { - @Column(length = 1024) - public String url; - @Column(length = 0) - public String jwt; - - public ClientToken() { - - } - - public ClientToken(final String url, final String jwt) { - this.url = url; - this.jwt = jwt; - } - -} \ No newline at end of file diff --git a/back/src/org/kar/karso/model/CreateTokenRequest.java b/back/src/org/kar/karso/model/CreateTokenRequest.java deleted file mode 100644 index 8eca2da..0000000 --- a/back/src/org/kar/karso/model/CreateTokenRequest.java +++ /dev/null @@ -1,17 +0,0 @@ -package org.kar.karso.model; - -import com.fasterxml.jackson.annotation.JsonInclude; - -@JsonInclude(JsonInclude.Include.NON_NULL) -public class CreateTokenRequest { - public CreateTokenRequest() {} - - public CreateTokenRequest(final String name, final Integer validity) { - this.name = name; - this.validity = validity; - } - - public String name; - public Integer validity; - -} \ No newline at end of file diff --git a/back/src/org/kar/karso/model/DataGetToken.java b/back/src/org/kar/karso/model/DataGetToken.java deleted file mode 100644 index 52a59d8..0000000 --- a/back/src/org/kar/karso/model/DataGetToken.java +++ /dev/null @@ -1,95 +0,0 @@ -package org.kar.karso.model; - -import java.nio.charset.StandardCharsets; -import java.security.MessageDigest; -import java.security.NoSuchAlgorithmException; -import java.time.ZoneOffset; -import java.time.ZonedDateTime; -import java.time.format.DateTimeFormatter; - -import org.kar.archidata.checker.CheckJPA; - -import com.fasterxml.jackson.annotation.JsonInclude; - -import jakarta.validation.constraints.NotNull; -import jakarta.validation.constraints.Pattern; -import jakarta.validation.constraints.Size; - -@JsonInclude(JsonInclude.Include.NON_NULL) -public class DataGetToken { - @NotNull - @Size(min = 3, max = 128) - @Pattern(regexp = "^[a-zA-Z0-9\\-_ \\.@]+$") - public String login; - @NotNull - @Size(min = 2, max = 2) - @Pattern(regexp = "^v1$") - public String method; - @NotNull - @Size(min = 20, max = 64) - @Pattern(regexp = "^\\d{4}\\-\\d{2}\\-\\d{2}T\\d{2}:\\d{2}:\\d{2}(\\.\\d{1,9})+.*$") - public String time; - @NotNull - @Size(min = 128, max = 128) - @Pattern(regexp = "^[a-zA-Z0-9]{128}$") - public String password; - - public static class DataGetTokenChecker extends CheckJPA { - public DataGetTokenChecker() { - super(DataGetToken.class); - } - } - - public DataGetToken(final String login, final String password, final String time, final String method) { - this.method = method; - this.login = login; - this.time = time; - this.password = password; - } - - public DataGetToken() { - - } - - public static String sha512(final String passwordToHash) { //, String salt){ - String generatedPassword = null; - try { - final MessageDigest md = MessageDigest.getInstance("SHA-512"); - //md.update(salt.getBytes(StandardCharsets.UTF_8)); - final byte[] bytes = md.digest(passwordToHash.getBytes(StandardCharsets.UTF_8)); - final StringBuilder sb = new StringBuilder(); - for (final byte element : bytes) { - sb.append(Integer.toString((element & 0xff) + 0x100, 16).substring(1)); - } - generatedPassword = sb.toString(); - } catch (final NoSuchAlgorithmException e) { - e.printStackTrace(); - } - return generatedPassword; - } - - public static DataGetToken generate(final String login, final String password) { - return generate(login, password, ZonedDateTime.now(ZoneOffset.UTC).format(DateTimeFormatter.ISO_INSTANT)); - } - - public static DataGetToken generate(final String login, final String password, final String time) { - return generate(login, password, time, "v1"); - } - - public static DataGetToken generate( - final String login, - final String password, - final String time, - final String method) { - return generateSha(login, sha512(password), time, method); - } - - public static DataGetToken generateSha( - final String login, - final String password, - final String time, - final String method) { - return new DataGetToken(login, sha512("login='" + login + "';pass='" + password + "';date='" + time + "'"), - time, method); - } -} diff --git a/back/src/org/kar/karso/model/DataGetTokenApplication.java b/back/src/org/kar/karso/model/DataGetTokenApplication.java deleted file mode 100644 index 2382475..0000000 --- a/back/src/org/kar/karso/model/DataGetTokenApplication.java +++ /dev/null @@ -1,8 +0,0 @@ -package org.kar.karso.model; - -import com.fasterxml.jackson.annotation.JsonInclude; - -@JsonInclude(JsonInclude.Include.NON_NULL) -public class DataGetTokenApplication { - public String application; -} diff --git a/back/src/org/kar/karso/model/Right.java b/back/src/org/kar/karso/model/Right.java deleted file mode 100644 index 07ab203..0000000 --- a/back/src/org/kar/karso/model/Right.java +++ /dev/null @@ -1,36 +0,0 @@ -package org.kar.karso.model; - -import org.kar.archidata.annotation.DataIfNotExists; -import org.kar.archidata.annotation.DataJson; -import org.kar.archidata.filter.PartRight; -import org.kar.archidata.model.GenericDataSoftDelete; - -import com.fasterxml.jackson.annotation.JsonInclude; - -import io.swagger.v3.oas.annotations.media.Schema; -import jakarta.persistence.Column; -import jakarta.persistence.FetchType; -import jakarta.persistence.ManyToOne; -import jakarta.persistence.Table; - -@Table(name = "right") -@DataIfNotExists -@JsonInclude(JsonInclude.Include.NON_NULL) -public class Right extends GenericDataSoftDelete { - @Column(nullable = false) - @Schema(description = "application-ID that have the reference of the right") - @ManyToOne(fetch = FetchType.LAZY, targetEntity = Application.class) - public Long applicationId; - @Column(nullable = false) - @Schema(description = "user-ID ") - @ManyToOne(fetch = FetchType.LAZY, targetEntity = UserAuth.class) - public Long userId; - @Column(nullable = false) - @Schema(description = "rightDescription-ID of the right description") - @ManyToOne(fetch = FetchType.LAZY, targetEntity = RightDescription.class) - public Long rightDescriptionId; - @Column(length = 1024, nullable = false) - @Schema(description = "Value of the right") - @DataJson - public PartRight value; -} diff --git a/back/src/org/kar/karso/model/RightDescription.java b/back/src/org/kar/karso/model/RightDescription.java deleted file mode 100644 index a7af9c0..0000000 --- a/back/src/org/kar/karso/model/RightDescription.java +++ /dev/null @@ -1,31 +0,0 @@ -package org.kar.karso.model; - -import org.kar.archidata.annotation.DataIfNotExists; -import org.kar.archidata.model.GenericDataSoftDelete; - -import com.fasterxml.jackson.annotation.JsonInclude; - -import io.swagger.v3.oas.annotations.media.Schema; -import jakarta.persistence.Column; -import jakarta.persistence.FetchType; -import jakarta.persistence.ManyToOne; -import jakarta.persistence.Table; - -@Table(name = "rightDescription") -@DataIfNotExists -@JsonInclude(JsonInclude.Include.NON_NULL) -public class RightDescription extends GenericDataSoftDelete { - @Column(nullable = false) - @Schema(description = "Application id that have the reference of the right") - @ManyToOne(fetch = FetchType.LAZY, targetEntity = Application.class) - public Long applicationId; - @Column(length = 64, nullable = false) - @Schema(description = "Key of the property") - public String key; - @Column(length = 1024, nullable = false) - @Schema(description = "Title of the right") - public String title; - @Column(length = 1024, nullable = false) - @Schema(description = "Description of the right") - public String description; -} \ No newline at end of file diff --git a/back/src/org/kar/karso/model/Settings.java b/back/src/org/kar/karso/model/Settings.java deleted file mode 100644 index 0a679a9..0000000 --- a/back/src/org/kar/karso/model/Settings.java +++ /dev/null @@ -1,40 +0,0 @@ -package org.kar.karso.model; - -import org.kar.archidata.annotation.DataIfNotExists; -import org.kar.archidata.model.GenericDataSoftDelete; - -import com.fasterxml.jackson.annotation.JsonInclude; - -import io.swagger.v3.oas.annotations.media.Schema; -import jakarta.persistence.Column; -import jakarta.persistence.Table; -import jakarta.ws.rs.DefaultValue; - -enum PropertyType { - STRING, NUMBER, BOOLEAN, -} - -@Table(name = "settings") -@DataIfNotExists -@JsonInclude(JsonInclude.Include.NON_NULL) -public class Settings extends GenericDataSoftDelete { - @Column(length = 512, nullable = false) - public String key; - @Schema(description = "Right for the specific element(ADMIN [rw] USER [rw] other [rw])") - @Column(length = 6, nullable = false) - @DefaultValue("\"rw----\"") - public String right; - @Schema(description = "Type Of the data") - @Column(length = 10, nullable = false) - public String type; - @Schema(description = "Value of the configuration") - @Column(nullable = false) - public String value; - - @Override - public String toString() { - return "Settings [key=" + this.key + ", value=" + this.value + ", id=" + this.id + ", deleted=" + this.deleted - + "]"; - } - -} diff --git a/back/src/org/kar/karso/model/UserAuth.java b/back/src/org/kar/karso/model/UserAuth.java deleted file mode 100644 index 74d2934..0000000 --- a/back/src/org/kar/karso/model/UserAuth.java +++ /dev/null @@ -1,58 +0,0 @@ -package org.kar.karso.model; - -import java.sql.Timestamp; -import java.util.List; - -import org.kar.archidata.annotation.DataIfNotExists; -import org.kar.archidata.checker.CheckJPA; -import org.kar.archidata.model.User; - -import com.fasterxml.jackson.annotation.JsonInclude; - -import io.swagger.v3.oas.annotations.media.Schema; -import jakarta.annotation.Nullable; -import jakarta.persistence.Column; -import jakarta.persistence.ManyToMany; -import jakarta.persistence.Table; -import jakarta.validation.constraints.Pattern; -import jakarta.validation.constraints.Size; -import jakarta.ws.rs.DefaultValue; - -@Table(name = "user") -@DataIfNotExists -@JsonInclude(JsonInclude.Include.NON_NULL) -public class UserAuth extends User { - @Column(length = 128, nullable = false) - @Size(min = 128, max = 128) - @Pattern(regexp = "^[a-zA-Z0-9]{128}$") - @Nullable - public String password; - /* - @Column(length = 128) - public String passwordChange; //!< When change a password, the new password is set in temporary area and wait the email validation - @Column(length = 128) - public String passwordValidation; //!< UniqueId to validate the new password - */ - @Column(length = 512, nullable = false) - @Size(min = 5, max = 128) - @Pattern(regexp = "^[a-zA-Z0-9\\-\\._]+@[a-zA-Z0-9\\-_]+\\.[a-zA-Z0-9]+$") - public String email; - public Timestamp emailValidate; // time of validation - @Column(length = 512) - @Size(min = 5, max = 128) - @Pattern(regexp = "^[a-zA-Z0-9\\-\\._]+@[a-zA-Z0-9\\-_]+\\.[a-zA-Z0-9]+$") - public String newEmail; - @DefaultValue("'0'") - @Column(nullable = false) - public Boolean avatar = false; - @Schema(description = "List of accessible application (if not set the application is not available)") - @ManyToMany(targetEntity = Application.class) - public List applications = null; - - public static class UserAuthChecker extends CheckJPA { - public UserAuthChecker() { - super(UserAuth.class); - } - } - -} diff --git a/back/src/org/kar/karso/model/UserAuthGet.java b/back/src/org/kar/karso/model/UserAuthGet.java deleted file mode 100644 index ba928fe..0000000 --- a/back/src/org/kar/karso/model/UserAuthGet.java +++ /dev/null @@ -1,21 +0,0 @@ -package org.kar.karso.model; - -import org.kar.archidata.annotation.DataIfNotExists; -import org.kar.archidata.model.User; - -import com.fasterxml.jackson.annotation.JsonInclude; - -import jakarta.persistence.Column; -import jakarta.persistence.Table; -import jakarta.ws.rs.DefaultValue; - -@Table(name = "user") -@DataIfNotExists -@JsonInclude(JsonInclude.Include.NON_NULL) -public class UserAuthGet extends User { - @Column(length = 512, nullable = false) - public String email; - @DefaultValue("'0'") - @Column(nullable = false) - public Boolean avatar = false; -} diff --git a/back/src/org/kar/karso/model/UserCreate.java b/back/src/org/kar/karso/model/UserCreate.java deleted file mode 100644 index 3293f06..0000000 --- a/back/src/org/kar/karso/model/UserCreate.java +++ /dev/null @@ -1,32 +0,0 @@ -package org.kar.karso.model; - -import org.kar.archidata.checker.CheckJPA; - -import com.fasterxml.jackson.annotation.JsonInclude; - -import jakarta.validation.constraints.Email; -import jakarta.validation.constraints.NotNull; -import jakarta.validation.constraints.Pattern; -import jakarta.validation.constraints.Size; - -@JsonInclude(JsonInclude.Include.NON_NULL) -public class UserCreate { - @NotNull - @Size(min = 3, max = 128) - @Pattern(regexp = "^[a-zA-Z0-9\\-_ \\.@]+$") - public String login; - @NotNull - @Size(min = 5, max = 128) - @Email() - public String email; - @NotNull - @Size(min = 128, max = 128) - @Pattern(regexp = "^[a-zA-Z0-9]{128}$") - public String password; - - public static class UserCreateChecker extends CheckJPA { - public UserCreateChecker() { - super(UserCreate.class); - } - } -} diff --git a/back/src/org/kar/karso/model/UserLinkApplication.java b/back/src/org/kar/karso/model/UserLinkApplication.java deleted file mode 100644 index 028ec27..0000000 --- a/back/src/org/kar/karso/model/UserLinkApplication.java +++ /dev/null @@ -1,30 +0,0 @@ -package org.kar.karso.model; - -/* - -CREATE TABLE `application` ( - `id` bigint NOT NULL COMMENT 'Unique ID of the application' AUTO_INCREMENT PRIMARY KEY, - `description` text COMMENT 'description of the application', - `token` varchar(128) COLLATE 'latin1_bin' NOT NULL COMMENT 'Token (can be not unique)' -) AUTO_INCREMENT=10; - -*/ - -import org.kar.archidata.annotation.DataIfNotExists; -import org.kar.archidata.model.OIDGenericDataSoftDelete; - -import com.fasterxml.jackson.annotation.JsonInclude; - -import jakarta.persistence.Column; -import jakarta.persistence.Table; - -// TODO: remove this, it must be generated instead of manually create /// -@Table(name = "user_link_application") -@DataIfNotExists -@JsonInclude(JsonInclude.Include.NON_NULL) -public class UserLinkApplication extends OIDGenericDataSoftDelete { - @Column(name = "object1id") - public Long userId; - @Column(name = "object2id") - public Long applicationId; -} diff --git a/back/src/org/kar/karso/old/Group.java b/back/src/org/kar/karso/old/Group.java deleted file mode 100644 index 3ffbcff..0000000 --- a/back/src/org/kar/karso/old/Group.java +++ /dev/null @@ -1,10 +0,0 @@ -package org.kar.karso.old; - -public class Group { - // Unique ID of the group - public long id; - // Unique ID of the parent group - public long parentGroupId = -1; - // Name of the group (Must be unique) - public String groupName; -} diff --git a/back/src/org/kar/karso/old/Package.java b/back/src/org/kar/karso/old/Package.java deleted file mode 100644 index 9ff5cbf..0000000 --- a/back/src/org/kar/karso/old/Package.java +++ /dev/null @@ -1,21 +0,0 @@ -package org.kar.karso.old; - -public class Package { - // Unique ID of the package/module - public long id; - // name of the package - public String name; - // version of the package - public String version; - // current coverage of the package - public double coverage; - // have module deployed - public long refBinary; - // have test deployed - public long refTest; - // have source deployed - public long refSource; - // have java-doc deployed - public long refJavaDoc; - -} diff --git a/back/src/org/kar/karso/util/ConfigVariable.java b/back/src/org/kar/karso/util/ConfigVariable.java deleted file mode 100644 index c5c9650..0000000 --- a/back/src/org/kar/karso/util/ConfigVariable.java +++ /dev/null @@ -1,33 +0,0 @@ -package org.kar.karso.util; - -public class ConfigVariable { - public static String BASE_NAME = "ORG_KARAUTH_"; - public static String frontFolder = System.getenv(BASE_NAME + "FRONT_FOLDER"); - public static String expirationTime = System.getenv(BASE_NAME + "AUTH_EXPIRATION_TIME"); - public static String uuid_for_key_generation = System.getenv(BASE_NAME + "UUID_KEY_ROOT"); - public static String edge = System.getenv(BASE_NAME + "EDGE"); - - public static String getFrontFolder() { - if (frontFolder == null) { - return "/application/front"; - } - return frontFolder; - } - - public static String getUUIDKeyRoot() { - return uuid_for_key_generation; - } - - public static int getAuthExpirationTime() { - String out = expirationTime; - if (out == null) { - // default expiration is 33 days for the master Oauth token - return 60 * 24 * 33; - } - return Integer.valueOf(out); - } - - public static Boolean getEdge() { - return Boolean.valueOf(edge); - } -} diff --git a/back/src/org/kar/karso/util/Transform.java b/back/src/org/kar/karso/util/Transform.java deleted file mode 100644 index 679c7bb..0000000 --- a/back/src/org/kar/karso/util/Transform.java +++ /dev/null @@ -1,55 +0,0 @@ -package org.kar.karso.util; - -public class Transform { - - public static Object convertToType(String type, String value) { - if ("BOOLEAN".equals(type)) { - return Boolean.valueOf(value); - } else if ("STRING".equals(type)) { - return value; - } else if ("LONG".equals(type)) { - return Long.valueOf(value); - } else if ("NUMBER".equals(type)) { - return Double.valueOf(value); - } else { - return null; - } - } - - public static String convertToStringCheck(String type, Object value) { - if ("BOOLEAN".equals(type)) { - if (value instanceof Boolean tmp) { - return String.valueOf(tmp); - } - } else if ("STRING".equals(type)) { - if (value instanceof String tmp) { - return tmp; - } - } else if ("LONG".equals(type)) { - if (value instanceof Long tmp) { - return String.valueOf(tmp); - } else if (value instanceof Integer tmp) { - return String.valueOf(tmp); - } else if (value instanceof Short tmp) { - return String.valueOf(tmp); - } else if (value instanceof Float tmp) { - return String.valueOf(Math.round(tmp)); - } else if (value instanceof Double tmp) { - return String.valueOf(Math.round(tmp)); - } - } else if ("NUMBER".equals(type)) { - if (value instanceof Long tmp) { - return String.valueOf(tmp); - } else if (value instanceof Integer tmp) { - return String.valueOf(tmp); - } else if (value instanceof Short tmp) { - return String.valueOf(tmp); - } else if (value instanceof Float tmp) { - return String.valueOf(tmp); - } else if (value instanceof Double tmp) { - return String.valueOf(tmp); - } - } - return null; - } -} diff --git a/back/test/src/test/kar/karso/ConfigureDb.java b/back/test/src/test/kar/karso/ConfigureDb.java deleted file mode 100644 index 7c0ca14..0000000 --- a/back/test/src/test/kar/karso/ConfigureDb.java +++ /dev/null @@ -1,126 +0,0 @@ -package test.kar.karso; - -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.karso.api.RightResource; -import org.kar.karso.model.Application; -import org.kar.karso.model.Right; -import org.kar.karso.model.Settings; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import jakarta.ws.rs.InternalServerErrorException; - -public class ConfigureDb { - final static private Logger LOGGER = LoggerFactory.getLogger(ConfigureDb.class); - final static private String modeTestForced = null;// "MONGO"; - public static DBAccess da = null; - - public static void configure() throws IOException, InternalServerErrorException, DataAccessException { - String modeTest = System.getenv("TEST_E2E_MODE"); - if (modeTest == null || modeTest.isEmpty() || "false".equalsIgnoreCase(modeTest)) { - modeTest = "SQLITE-MEMORY"; - } else if ("true".equalsIgnoreCase(modeTest)) { - modeTest = "MY-SQL"; - } - // override the local test: - if (modeTestForced != null) { - modeTest = modeTestForced; - } - // for local test: - ConfigBaseVariable.apiAdress = "http://127.0.0.1:12342/test/api/"; - // Enable the test mode permit to access to the test token (never use it in production). - ConfigBaseVariable.testMode = "true"; - final List> listObject = List.of( // - Application.class, // - RightResource.class, // - Right.class, // - Settings.class // - ); - if ("SQLITE-MEMORY".equalsIgnoreCase(modeTest)) { - ConfigBaseVariable.dbType = "sqlite"; - ConfigBaseVariable.bdDatabase = null; - ConfigBaseVariable.dbHost = "memory"; - // for test we need to connect all time the DB - ConfigBaseVariable.dbKeepConnected = "true"; - } else if ("SQLITE".equalsIgnoreCase(modeTest)) { - ConfigBaseVariable.dbType = "sqlite"; - ConfigBaseVariable.bdDatabase = null; - ConfigBaseVariable.dbKeepConnected = "true"; - } else if ("MY-SQL".equalsIgnoreCase(modeTest)) { - ConfigBaseVariable.dbType = "mysql"; - ConfigBaseVariable.bdDatabase = "test_karso_db"; - ConfigBaseVariable.dbPort = "3906"; - ConfigBaseVariable.dbUser = "root"; - } else if ("MONGO".equalsIgnoreCase(modeTest)) { - ConfigBaseVariable.dbType = "mongo"; - ConfigBaseVariable.bdDatabase = "test_karso_db"; - } else { - // User local modification ... - ConfigBaseVariable.bdDatabase = "test_karso_db"; - ConfigBaseVariable.dbPort = "3906"; - ConfigBaseVariable.dbUser = "root"; - } - removeDB(); - // Connect the dataBase... - da = DBAccess.createInterface(); - } - - public static void removeDB() { - String modeTest = System.getenv("TEST_E2E_MODE"); - if (modeTest == null || modeTest.isEmpty() || "false".equalsIgnoreCase(modeTest)) { - modeTest = "SQLITE-MEMORY"; - } else if ("true".equalsIgnoreCase(modeTest)) { - modeTest = "MY-SQL"; - } - // override the local test: - if (modeTestForced != null) { - modeTest = modeTestForced; - } - DbConfig config = null; - try { - config = new DbConfig(); - } catch (final DataAccessException e) { - e.printStackTrace(); - LOGGER.error("Fail to clean the DB"); - return; - } - config.setDbName(null); - LOGGER.info("Remove the DB and create a new one '{}'", config.getDbName()); - try (final DBAccess daRoot = DBAccess.createInterface(config)) { - if ("SQLITE-MEMORY".equalsIgnoreCase(modeTest)) { - // nothing to do ... - } else if ("SQLITE".equalsIgnoreCase(modeTest)) { - daRoot.deleteDB(ConfigBaseVariable.bdDatabase); - } else if ("MY-SQL".equalsIgnoreCase(modeTest)) { - daRoot.deleteDB(ConfigBaseVariable.bdDatabase); - } else if ("MONGO".equalsIgnoreCase(modeTest)) { - daRoot.deleteDB(ConfigBaseVariable.bdDatabase); - } - daRoot.createDB(ConfigBaseVariable.bdDatabase); - } catch (final InternalServerErrorException e) { - e.printStackTrace(); - LOGGER.error("Fail to clean the DB"); - return; - } catch (final IOException e) { - e.printStackTrace(); - LOGGER.error("Fail to clean the DB"); - return; - } - } - - public static void clear() throws IOException { - LOGGER.info("Remove the test db"); - removeDB(); - // The connection is by default open ==> close it at the end of test: - da.close(); - DbIoFactory.closeAllForceMode(); - ConfigBaseVariable.clearAllValue(); - } -} diff --git a/back/test/src/test/kar/karso/StepwiseExtension.java b/back/test/src/test/kar/karso/StepwiseExtension.java deleted file mode 100644 index 2895edf..0000000 --- a/back/test/src/test/kar/karso/StepwiseExtension.java +++ /dev/null @@ -1,37 +0,0 @@ -package test.kar.karso; - -import org.junit.jupiter.api.extension.ConditionEvaluationResult; -import org.junit.jupiter.api.extension.ExecutionCondition; -import org.junit.jupiter.api.extension.ExtensionContext; -import org.junit.jupiter.api.extension.TestExecutionExceptionHandler; - -class StepwiseExtension implements ExecutionCondition, TestExecutionExceptionHandler { - @Override - public ConditionEvaluationResult evaluateExecutionCondition(final ExtensionContext extensionContext) { - final ExtensionContext.Namespace namespace = namespaceFor(extensionContext); - final ExtensionContext.Store store = storeFor(extensionContext, namespace); - final String value = store.get(StepwiseExtension.class, String.class); - return value == null ? ConditionEvaluationResult.enabled("No test failures in stepwise tests") - : ConditionEvaluationResult - .disabled(String.format("Stepwise test disabled due to previous failure in '%s'", value)); - } - - @Override - public void handleTestExecutionException(final ExtensionContext extensionContext, final Throwable throwable) - throws Throwable { - final ExtensionContext.Namespace namespace = namespaceFor(extensionContext); - final ExtensionContext.Store store = storeFor(extensionContext, namespace); - store.put(StepwiseExtension.class, extensionContext.getDisplayName()); - throw throwable; - } - - private ExtensionContext.Namespace namespaceFor(final ExtensionContext extensionContext) { - return ExtensionContext.Namespace.create(StepwiseExtension.class, extensionContext.getParent()); - } - - private ExtensionContext.Store storeFor( - final ExtensionContext extensionContext, - final ExtensionContext.Namespace namespace) { - return extensionContext.getParent().get().getStore(namespace); - } -} \ No newline at end of file diff --git a/back/test/src/test/kar/karso/TestBase.java b/back/test/src/test/kar/karso/TestBase.java deleted file mode 100644 index b20efa8..0000000 --- a/back/test/src/test/kar/karso/TestBase.java +++ /dev/null @@ -1,117 +0,0 @@ -package test.kar.karso; - -import java.io.IOException; -import java.util.Map; - -import org.junit.jupiter.api.AfterAll; -import org.junit.jupiter.api.Assertions; -import org.junit.jupiter.api.BeforeAll; -import org.junit.jupiter.api.MethodOrderer; -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.filter.PartRight; -import org.kar.archidata.filter.RightSafeCaster; -import org.kar.archidata.model.GetToken; -import org.kar.archidata.tools.ConfigBaseVariable; -import org.kar.archidata.tools.JWTWrapper; -import org.kar.archidata.tools.RESTApi; -import org.kar.karso.model.DataGetToken; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import com.nimbusds.jwt.JWTClaimsSet; - -@ExtendWith(StepwiseExtension.class) -@TestMethodOrder(MethodOrderer.OrderAnnotation.class) -public class TestBase { - private final static Logger LOGGER = LoggerFactory.getLogger(TestBase.class); - - static WebLauncherTest webInterface = null; - static RESTApi api = null; - - public void login(final String login, final String password) { - try { - final GetToken token = api.post(GetToken.class, "users/get_token", DataGetToken.generate(login, password)); - api.setToken(token.jwt); - } catch (final Exception ex) { - Assertions.fail("Can not get Authentication for '" + login + "' ==> " + ex.getMessage()); - } - } - - public void loginAdmin() { - login("karadmin", "adminA@666"); - } - - @BeforeAll - public static void configureWebServer() throws Exception { - ConfigureDb.configure(); - LOGGER.info("configure server ..."); - webInterface = new WebLauncherTest(); - webInterface.migrateDB(); - LOGGER.info("Start REST (BEGIN)"); - webInterface.process(); - LOGGER.info("Start REST (DONE)"); - api = new RESTApi(ConfigBaseVariable.apiAdress); - } - - @AfterAll - public static void stopWebServer() throws InterruptedException, IOException { - LOGGER.info("Kill the web server"); - webInterface.stop(); - webInterface = null; - ConfigureDb.clear(); - } - - @Order(3) - @Test - public void firstUserConnect() throws Exception { - final GetToken result = api.post(GetToken.class, "users/get_token", - DataGetToken.generate("karadmin", "adminA@666", "2025-15-25T22:32:23.252Z")); - final String[] splitted = result.jwt.split("\\."); - Assertions.assertEquals(3, splitted.length); - final String authorization = result.jwt; - LOGGER.debug(" validate token : " + authorization); - // Note with local access we get the internal key of the system. - final JWTClaimsSet ret = JWTWrapper.validateToken(authorization, "KarAuth", null); - // check the token is valid !!! (signed and coherent issuer... - Assertions.assertNotNull(ret); - // check userID - final String userUID = ret.getSubject(); - final long id = Long.parseLong(userUID); - Assertions.assertEquals(1, id); - final String name = (String) ret.getClaim("login"); - Assertions.assertEquals("karadmin", name); - - final Object rowRight = ret.getClaim("right"); - Assertions.assertNotNull(rowRight); - final Map> rights = RightSafeCaster.safeCastAndTransform(ret.getClaim("right")); - // Check if the element contain the basic keys: - Assertions.assertEquals(rights.size(), 1); - Assertions.assertTrue(rights.containsKey("karso")); - final Map applRight = rights.get("karso"); - //logger.error("full right: {}", applRight); - Assertions.assertEquals(applRight.size(), 2); - Assertions.assertTrue(applRight.containsKey("ADMIN")); - Assertions.assertEquals(PartRight.READ_WRITE, applRight.get("ADMIN")); - Assertions.assertTrue(applRight.containsKey("USER")); - Assertions.assertEquals(PartRight.READ_WRITE, applRight.get("USER")); - - //logger.debug("request user: '{}' right: '{}' row='{}'", userUID, applRight, rowRight); - - //Assertions.assertEquals("eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiJ9", splitted[0]); - //Assertions.assertEquals("eyJzdWIiOiIwIiwiYXBwbGljYXRpb24iOiJrYXJzbyIsImlzcyI6IkthckF1dGgiLCJyaWdodCI6eyJrYXJzbyI6eyJBRE1JTiI6dHJ1ZSwiVVNFUiI6dHJ1ZX19LCJsb2dpbiI6ImthcmFkbWluIiwiZXhwIjoxNjg0MTk5MTkzLCJpYXQiOjE2ODI3NTU0MjV9", splitted[1]); - // TODO ... Assertions.assertEquals("????", splitted[2]); - } - - @Order(5) - @Test - public void testMeWithToken() throws Exception { - loginAdmin(); - final String result = api.get(String.class, "users/me"); - Assertions.assertEquals("{\"id\":1,\"login\":\"karadmin\"}", result); - - } - -} diff --git a/back/test/src/test/kar/karso/TestHealthCheck.java b/back/test/src/test/kar/karso/TestHealthCheck.java deleted file mode 100644 index 51ac58a..0000000 --- a/back/test/src/test/kar/karso/TestHealthCheck.java +++ /dev/null @@ -1,62 +0,0 @@ -package test.kar.karso; - -import java.io.IOException; - -import org.junit.jupiter.api.AfterAll; -import org.junit.jupiter.api.Assertions; -import org.junit.jupiter.api.BeforeAll; -import org.junit.jupiter.api.MethodOrderer; -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.karso.api.HealthCheck.HealthResult; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -@ExtendWith(StepwiseExtension.class) -@TestMethodOrder(MethodOrderer.OrderAnnotation.class) -public class TestHealthCheck { - private final static Logger LOGGER = LoggerFactory.getLogger(TestHealthCheck.class); - - static WebLauncherTest webInterface = null; - static RESTApi api = null; - - @BeforeAll - public static void configureWebServer() throws Exception { - ConfigureDb.configure(); - LOGGER.info("configure server ..."); - webInterface = new WebLauncherTest(); - webInterface.migrateDB(); - LOGGER.info("Start REST (BEGIN)"); - webInterface.process(); - LOGGER.info("Start REST (DONE)"); - api = new RESTApi(ConfigBaseVariable.apiAdress); - } - - @AfterAll - public static void stopWebServer() throws InterruptedException, IOException { - LOGGER.info("Kill the web server"); - webInterface.stop(); - webInterface = null; - ConfigureDb.clear(); - } - - @Order(1) - @Test - //@RepeatedTest(10) - public void checkHealthCheck() throws Exception { - final HealthResult result = api.get(HealthResult.class, "health_check"); - Assertions.assertEquals(result.value(), "alive and kicking"); - } - - @Order(2) - @Test - public void checkHealthCheckWrongAPI() throws Exception { - Assertions.assertThrows(RESTErrorResponseException.class, () -> api.get(HealthResult.class, "health_checks")); - } - -} diff --git a/back/test/src/test/kar/karso/TestUnAuthorizedAPI.java b/back/test/src/test/kar/karso/TestUnAuthorizedAPI.java deleted file mode 100644 index e512c12..0000000 --- a/back/test/src/test/kar/karso/TestUnAuthorizedAPI.java +++ /dev/null @@ -1,178 +0,0 @@ -package test.kar.karso; - -import java.io.IOException; - -import org.junit.jupiter.api.AfterAll; -import org.junit.jupiter.api.Assertions; -import org.junit.jupiter.api.BeforeAll; -import org.junit.jupiter.api.MethodOrderer; -import org.junit.jupiter.api.Order; -import org.junit.jupiter.api.Test; -import org.junit.jupiter.api.TestMethodOrder; -import org.kar.archidata.exception.RESTErrorResponseException; -import org.kar.archidata.model.GetToken; -import org.kar.archidata.tools.ConfigBaseVariable; -import org.kar.archidata.tools.RESTApi; -import org.kar.karso.model.DataGetToken; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -@TestMethodOrder(MethodOrderer.OrderAnnotation.class) -public class TestUnAuthorizedAPI { - private final static Logger LOGGER = LoggerFactory.getLogger(TestUnAuthorizedAPI.class); - - static WebLauncherTest webInterface = null; - static RESTApi api = null; - - public void login(final String login, final String password) { - try { - final GetToken token = api.post(GetToken.class, "users/get_token", DataGetToken.generate(login, password)); - api.setToken(token.jwt); - } catch (final Exception ex) { - Assertions.fail("Can not get Authentication for '" + login + "' ==> " + ex.getMessage()); - } - } - - public void loginAdmin() { - login("karadmin", "adminA@666"); - } - - @BeforeAll - public static void configureWebServer() throws Exception { - ConfigureDb.configure(); - LOGGER.info("configure server ..."); - webInterface = new WebLauncherTest(); - webInterface.migrateDB(); - LOGGER.info("Start REST (BEGIN)"); - webInterface.process(); - LOGGER.info("Start REST (DONE)"); - api = new RESTApi(ConfigBaseVariable.apiAdress); - } - - @AfterAll - public static void stopWebServer() throws InterruptedException, IOException { - LOGGER.info("Kill the web server"); - webInterface.stop(); - webInterface = null; - ConfigureDb.clear(); - } - - public void checkFail(final String type, final String urlOffset, final int errorStatus) { - checkFail(type, urlOffset, errorStatus, null); - } - - public void checkFail(final String type, final String urlOffset, final int errorStatus, final String data) { - LOGGER.info("Test API: url={} urlOffset={}", type, urlOffset); - try { - if ("GET".equals(type)) { - api.get(String.class, urlOffset); - } else if ("POST".equals(type)) { - api.post(String.class, urlOffset, data); - } else if ("PATCH".equals(type)) { - api.patch(String.class, urlOffset, data); - } else if ("DELETE".equals(type)) { - api.delete(String.class, urlOffset); - } - Assertions.fail("Request on URL does not fail as expected: '" + type + "' url='" + urlOffset + "'"); - } catch (final RESTErrorResponseException ex) { - if (errorStatus != ex.status) { - LOGGER.error("Fail in test with the wrong return errors: {}", ex.toString()); - } - Assertions.assertEquals(errorStatus, ex.status); - } catch (final Exception ex) { - LOGGER.error("Unexpected throw error: {}", ex); - Assertions.fail("Unexpected throws..."); - } - - } - - public void checkWork(final String type, final String urlOffset) { - checkWork(type, urlOffset, null); - } - - public void checkWork(final String type, final String urlOffset, final String data) { - LOGGER.info("Test API: url={} urlOffset={}", type, urlOffset); - try { - if ("GET".equals(type)) { - api.get(String.class, urlOffset); - } else if ("POST".equals(type)) { - api.post(String.class, urlOffset, data); - } else if ("PATCH".equals(type)) { - api.patch(String.class, urlOffset, data); - } else if ("DELETE".equals(type)) { - api.delete(String.class, urlOffset); - } - //Assertions.fail("Request on URL does not fail as expected: '" + type + "' url='" + urlOffset + "'"); - } catch (final RESTErrorResponseException ex) { - Assertions.fail("Must not fail ... " + ex.toString()); - } catch (final Exception ex) { - LOGGER.error("Unexpected throw error: {}", ex); - Assertions.fail("Unexpected throws..."); - } - - } - - @Order(1) - @Test - public void checkUnAuthorizedAPI() throws Exception { - // /application/ - checkFail("GET", "application/", 401); - checkFail("POST", "application/", 401, "{}"); - checkFail("PATCH", "application/", 405, "{}"); // does not exist - checkFail("DELETE", "application/", 405); // does not exist - // /application/{id} - checkFail("GET", "application/0", 401); - checkFail("PATCH", "application/0", 401, "{}"); - checkFail("POST", "application/0", 405, "{}"); - checkFail("DELETE", "application/0", 401); - // /application/{id}/* - checkFail("GET", "application/0/users", 401); - // /application/* - checkFail("GET", "application/small", 401); - checkFail("GET", "application/get_token", 401); - checkFail("GET", "application/return", 401); - - // /application_token/ section: - checkFail("GET", "application_token/0", 401); - checkFail("DELETE", "application_token/0/5", 401); - checkFail("DELETE", "application_token/0/create", 401); - - // /front/* - checkFail("GET", "front", 404); // no index in test section - // health check - checkWork("GET", "health_check"); - - // public_key (only application) - checkFail("GET", "public_key", 401); - checkFail("GET", "public_key/pem", 401); - - // /right - checkFail("GET", "right", 401); - checkFail("POST", "right", 401, "{}"); - checkFail("GET", "right/0", 401); - checkFail("PATCH", "right/0", 401, "{}"); - checkFail("DELETE", "right/0", 401); - - // /system_config - checkWork("GET", "system_config/is_sign_up_availlable"); - checkFail("GET", "system_config/key/skjdfhkjsdhfkjsh", 401); - checkFail("PATCH", "system_config/key/skjdfhkjsdhfkjsh", 401, "{}"); - - // /users - checkFail("GET", "users", 401); - checkFail("GET", "users/0", 401); - checkFail("POST", "users/0/application/0/link", 401, "{}"); - checkFail("POST", "users/0/set_admin", 401, "{}"); - checkFail("POST", "users/0/set_blocked", 401, "{}"); - checkFail("POST", "users", 401, "{}"); - checkFail("GET", "users/me", 401, "{}"); - checkFail("POST", "users/password", 401, "{}"); - checkWork("GET", "users/is_login_exist?login=karadmin"); - checkWork("GET", "users/is_login_exist?login=jhkjhkjh"); - checkWork("GET", "users/is_email_exist?email=admin@admin.ZZZ"); - checkWork("GET", "users/is_email_exist?email=ksjhdkjfhskjdh"); - // not testable : get_token - - } - -} diff --git a/back/test/src/test/kar/karso/TestUsers.java b/back/test/src/test/kar/karso/TestUsers.java deleted file mode 100644 index 6f11343..0000000 --- a/back/test/src/test/kar/karso/TestUsers.java +++ /dev/null @@ -1,69 +0,0 @@ -package test.kar.karso; - -import java.io.IOException; -import java.util.List; - -import org.junit.jupiter.api.AfterAll; -import org.junit.jupiter.api.Assertions; -import org.junit.jupiter.api.BeforeAll; -import org.junit.jupiter.api.MethodOrderer; -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.model.GetToken; -import org.kar.archidata.tools.ConfigBaseVariable; -import org.kar.archidata.tools.RESTApi; -import org.kar.karso.model.DataGetToken; -import org.kar.karso.model.UserAuthGet; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -@ExtendWith(StepwiseExtension.class) -@TestMethodOrder(MethodOrderer.OrderAnnotation.class) -public class TestUsers { - private final static Logger LOGGER = LoggerFactory.getLogger(TestUsers.class); - public final static String ENDPOINT_NAME = "users/"; - - static WebLauncherTest webInterface = null; - static RESTApi api = null; - - private static long idTest; - - @BeforeAll - public static void configureWebServer() throws Exception { - ConfigureDb.configure(); - LOGGER.info("configure server ..."); - webInterface = new WebLauncherTest(); - webInterface.migrateDB(); - LOGGER.info("Start REST (BEGIN)"); - webInterface.process(); - LOGGER.info("Start REST (DONE)"); - api = new RESTApi(ConfigBaseVariable.apiAdress); - final GetToken result = api.post(GetToken.class, "users/get_token", - DataGetToken.generate("karadmin", "adminA@666")); - api.setToken(result.jwt); - } - - @AfterAll - public static void stopWebServer() throws IOException { - LOGGER.info("Kill the web server"); - webInterface.stop(); - webInterface = null; - ConfigureDb.clear(); - } - - @Order(1) - @Test - public void getsValue() throws RESTErrorResponseException, IOException, InterruptedException { - final List listUsers = api.gets(UserAuthGet.class, TestUsers.ENDPOINT_NAME); - Assertions.assertNotNull(listUsers); - Assertions.assertEquals(1, listUsers.size()); - Assertions.assertEquals(1, listUsers.get(0).id); - Assertions.assertEquals(false, listUsers.get(0).blocked); - Assertions.assertEquals(false, listUsers.get(0).avatar); - Assertions.assertEquals("karadmin", listUsers.get(0).login); - Assertions.assertEquals("admin@admin.ZZZ", listUsers.get(0).email); - } -} diff --git a/back/test/src/test/kar/karso/WebLauncherTest.java b/back/test/src/test/kar/karso/WebLauncherTest.java deleted file mode 100755 index 28645d0..0000000 --- a/back/test/src/test/kar/karso/WebLauncherTest.java +++ /dev/null @@ -1,12 +0,0 @@ - -package test.kar.karso; - -import org.kar.karso.WebLauncher; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -public class WebLauncherTest extends WebLauncher { - final private static Logger LOGGER = LoggerFactory.getLogger(WebLauncherTest.class); - - public WebLauncherTest() {} -} diff --git a/front/package.json b/front/package.json index 36c4731..c780b46 100644 --- a/front/package.json +++ b/front/package.json @@ -30,63 +30,63 @@ }, "dependencies": { "@trivago/prettier-plugin-sort-imports": "5.2.2", - "@chakra-ui/cli": "3.7.0", - "@chakra-ui/react": "3.7.0", + "@chakra-ui/cli": "3.16.0", + "@chakra-ui/react": "3.16.0", "@emotion/react": "11.14.0", - "allotment": "1.20.2", + "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.4.0", - "react-router-dom": "7.1.5", - "react-select": "5.10.0", + "react-icons": "5.5.0", + "react-router-dom": "7.5.0", + "react-select": "5.10.1", "react-use": "17.6.0", - "zod": "3.24.1", + "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.3", - "@storybook/addon-essentials": "8.5.3", - "@storybook/addon-links": "8.5.3", - "@storybook/addon-mdx-gfm": "8.5.3", - "@storybook/react": "8.5.3", - "@storybook/react-vite": "8.5.3", - "@storybook/theming": "8.5.3", + "@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.1", - "@types/react": "19.0.8", - "@types/react-dom": "19.0.3", - "@typescript-eslint/eslint-plugin": "8.23.0", - "@typescript-eslint/parser": "8.23.0", + "@types/node": "22.14.1", + "@types/react": "19.1.1", + "@types/react-dom": "19.1.2", + "@typescript-eslint/eslint-plugin": "8.30.0", + "@typescript-eslint/parser": "8.30.0", "@vitejs/plugin-react": "4.3.4", - "eslint": "9.20.0", + "eslint": "9.24.0", "eslint-plugin-codeceptjs": "1.3.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.2", + "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.43.6", - "lint-staged": "15.4.3", - "npm-check-updates": "^17.1.14", - "prettier": "3.4.2", - "puppeteer": "24.2.0", - "react-is": "19.0.0", - "storybook": "8.5.3", + "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.0", - "vitest": "3.0.5" + "typescript": "5.8.3", + "vite": "6.2.6", + "vitest": "3.1.1" } } \ No newline at end of file diff --git a/front/pnpm-lock.yaml b/front/pnpm-lock.yaml index 8ff020c..0a82eb4 100644 --- a/front/pnpm-lock.yaml +++ b/front/pnpm-lock.yaml @@ -9,20 +9,20 @@ importers: .: dependencies: '@chakra-ui/cli': - specifier: 3.7.0 - version: 3.7.0(@chakra-ui/react@3.7.0(@emotion/react@11.14.0(@types/react@19.0.8)(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.1)(react@19.1.0))(react-dom@19.1.0(react@19.1.0))(react@19.1.0)) '@chakra-ui/react': - specifier: 3.7.0 - version: 3.7.0(@emotion/react@11.14.0(@types/react@19.0.8)(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.1)(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.8)(react@19.0.0) + version: 11.14.0(@types/react@19.1.1)(react@19.1.0) '@trivago/prettier-plugin-sort-imports': specifier: 5.2.2 - version: 5.2.2(prettier@3.4.2) + version: 5.2.2(prettier@3.5.3) allotment: - specifier: 1.20.2 - version: 1.20.2(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + specifier: 1.20.3 + 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 @@ -33,69 +33,69 @@ 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.4.0 - version: 5.4.0(react@19.0.0) + specifier: 5.5.0 + version: 5.5.0(react@19.1.0) react-router-dom: - specifier: 7.1.5 - version: 7.1.5(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.8)(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.1)(react-dom@19.1.0(react@19.1.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) zod: - specifier: 3.24.1 - version: 3.24.1 + specifier: 3.24.2 + version: 3.24.2 zustand: specifier: 5.0.3 - version: 5.0.3(@types/react@19.0.8)(react@19.0.0)(use-sync-external-store@1.2.2(react@19.0.0)) + version: 5.0.3(@types/react@19.1.1)(react@19.1.0)(use-sync-external-store@1.2.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.3 - version: 8.5.3(storybook@8.5.3(prettier@3.4.2)) + specifier: 8.6.12 + version: 8.6.12(storybook@8.6.12(prettier@3.5.3)) '@storybook/addon-essentials': - specifier: 8.5.3 - version: 8.5.3(@types/react@19.0.8)(storybook@8.5.3(prettier@3.4.2)) + specifier: 8.6.12 + version: 8.6.12(@types/react@19.1.1)(storybook@8.6.12(prettier@3.5.3)) '@storybook/addon-links': - specifier: 8.5.3 - version: 8.5.3(react@19.0.0)(storybook@8.5.3(prettier@3.4.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.3 - version: 8.5.3(storybook@8.5.3(prettier@3.4.2)) + specifier: 8.6.12 + version: 8.6.12(storybook@8.6.12(prettier@3.5.3)) '@storybook/react': - specifier: 8.5.3 - version: 8.5.3(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(storybook@8.5.3(prettier@3.4.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.3 - version: 8.5.3(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(rollup@4.34.6)(storybook@8.5.3(prettier@3.4.2))(typescript@5.7.3)(vite@6.1.0(@types/node@22.13.1)(jiti@2.4.2)(terser@5.31.1)(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)(terser@5.31.1)(yaml@2.7.0)) '@storybook/theming': - specifier: 8.5.3 - version: 8.5.3(storybook@8.5.3(prettier@3.4.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.2.0)(@types/react-dom@19.0.3(@types/react@19.0.8))(@types/react@19.0.8)(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.2.0)(@types/react-dom@19.1.2(@types/react@19.1.1))(@types/react@19.1.1)(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.2.0) @@ -103,80 +103,80 @@ importers: specifier: 29.5.14 version: 29.5.14 '@types/node': - specifier: 22.13.1 - version: 22.13.1 + specifier: 22.14.1 + version: 22.14.1 '@types/react': - specifier: 19.0.8 - version: 19.0.8 + specifier: 19.1.1 + version: 19.1.1 '@types/react-dom': - specifier: 19.0.3 - version: 19.0.3(@types/react@19.0.8) + specifier: 19.1.2 + version: 19.1.2(@types/react@19.1.1) '@typescript-eslint/eslint-plugin': - specifier: 8.23.0 - version: 8.23.0(@typescript-eslint/parser@8.23.0(eslint@9.20.0(jiti@2.4.2))(typescript@5.7.3))(eslint@9.20.0(jiti@2.4.2))(typescript@5.7.3) + specifier: 8.30.0 + version: 8.30.0(@typescript-eslint/parser@8.30.0(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.23.0 - version: 8.23.0(eslint@9.20.0(jiti@2.4.2))(typescript@5.7.3) + specifier: 8.30.0 + version: 8.30.0(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.0(@types/node@22.13.1)(jiti@2.4.2)(terser@5.31.1)(yaml@2.7.0)) + version: 4.3.4(vite@6.2.6(@types/node@22.14.1)(jiti@2.4.2)(terser@5.31.1)(yaml@2.7.0)) eslint: - specifier: 9.20.0 - version: 9.20.0(jiti@2.4.2) + specifier: 9.24.0 + version: 9.24.0(jiti@2.4.2) eslint-plugin-codeceptjs: specifier: 1.3.0 version: 1.3.0 eslint-plugin-import: specifier: 2.31.0 - version: 2.31.0(@typescript-eslint/parser@8.23.0(eslint@9.20.0(jiti@2.4.2))(typescript@5.7.3))(eslint@9.20.0(jiti@2.4.2)) + version: 2.31.0(@typescript-eslint/parser@8.30.0(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.20.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.20.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.2 - version: 0.11.2(eslint@9.20.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.1)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@types/node@22.13.1)(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.43.6 - version: 5.43.6(@types/node@22.13.1)(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.14 - version: 17.1.14 + specifier: ^17.1.18 + version: 17.1.18 prettier: - specifier: 3.4.2 - version: 3.4.2 + specifier: 3.5.3 + version: 3.5.3 puppeteer: - specifier: 24.2.0 - version: 24.2.0(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.3 - version: 8.5.3(prettier@3.4.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.1)(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.0 - version: 6.1.0(@types/node@22.13.1)(jiti@2.4.2)(terser@5.31.1)(yaml@2.7.0) + specifier: 6.2.6 + version: 6.2.6(@types/node@22.14.1)(jiti@2.4.2)(terser@5.31.1)(yaml@2.7.0) vitest: - specifier: 3.0.5 - version: 3.0.5(@types/debug@4.1.12)(@types/node@22.13.1)(jiti@2.4.2)(jsdom@20.0.3)(terser@5.31.1)(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)(terser@5.31.1)(yaml@2.7.0) packages: @@ -187,8 +187,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' @@ -362,10 +362,6 @@ packages: resolution: {integrity: sha512-fH+b7Y4p3yqvApJALCPJcwb0/XaOSgtK4pzV6WVjPR5GLFQBRI7pfoX2V2iM48NXvX07NUxxm1Vw98YjqTcU5w==} engines: {node: '>=6.9.0'} - '@babel/traverse@7.26.5': - resolution: {integrity: sha512-rkOSPOw+AXbgtwUga3U4u8RpoK9FEFWBNAlTpcnkLFjL5CT+oyHNuUUC/xx6XefEJ16r38r8Bc/lfp6rYuHeJQ==} - engines: {node: '>=6.9.0'} - '@babel/traverse@7.26.7': resolution: {integrity: sha512-1x1sgeyRLC3r5fQOM0/xtQKsYjyxmFjaOrLJNtZ81inNjyJHGIolTULPiSc/2qe1/qfpFLisLQYFnnZl7QoedA==} engines: {node: '>=6.9.0'} @@ -385,14 +381,14 @@ packages: '@bcoe/v8-coverage@0.2.3': resolution: {integrity: sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==} - '@chakra-ui/cli@3.7.0': - resolution: {integrity: sha512-sWge85MWdz6F9RzkerO2B7muok56BIREqXSpelAB/Yt34ZsPBjMG1ive3cU7LEYPAu6OzeaCSkH+xWdcfEMGwA==} + '@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.7.0': - resolution: {integrity: sha512-LjorCIXVKylRQK2Lgs6K7+pHLdVOwJjpD2FwHC3bm+RGPMlKW0p7+zYE1haICBkpgW1ycOCqYU+th06Bc2nG7Q==} + '@chakra-ui/react@3.16.0': + resolution: {integrity: sha512-NZLGQgIPr/hLeyBoQyUqzaru+RGrs4Zy1kGpnBNGnL2UrCLZryHvax/pdfqId8cJjhWPGxokJUTVcTTMPnN3Gg==} peerDependencies: '@emotion/react': '>=11' react: '>=18' @@ -406,11 +402,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==} @@ -460,23 +456,17 @@ 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==} 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/aix-ppc64@0.25.2': + resolution: {integrity: sha512-wCIboOL2yXZym2cgm6mlA742s9QeJ8DjGVaL39dLN4rRwrOgOyYSnOaFPhKZGLb2ngj4EyfAFjsNJwPXZvseag==} + engines: {node: '>=18'} + cpu: [ppc64] + os: [aix] '@esbuild/android-arm64@0.24.2': resolution: {integrity: sha512-cNLgeqCqV8WxfcTIOeL4OAtSmL8JjcN6m09XIgro1Wi7cF4t/THaWEa7eL5CMoMBdjoHOTh/vwTO/o2TRXIyzg==} @@ -484,10 +474,10 @@ packages: cpu: [arm64] os: [android] - '@esbuild/android-arm@0.20.2': - resolution: {integrity: sha512-t98Ra6pw2VaDhqNWO2Oph2LXbz/EJcnLmKLGBJwEwXX/JAN83Fym1rU8l0JUWK6HkIbWONCSSatf4sf2NBRx/w==} - engines: {node: '>=12'} - cpu: [arm] + '@esbuild/android-arm64@0.25.2': + resolution: {integrity: sha512-5ZAX5xOmTligeBaeNEPnPaeEuah53Id2tX4c2CVP3JaROTH+j4fnfHCkr1PjXMd78hMst+TlkfKcW/DlTq0i4w==} + engines: {node: '>=18'} + cpu: [arm64] os: [android] '@esbuild/android-arm@0.24.2': @@ -496,10 +486,10 @@ packages: cpu: [arm] os: [android] - '@esbuild/android-x64@0.20.2': - resolution: {integrity: sha512-btzExgV+/lMGDDa194CcUQm53ncxzeBrWJcncOBxuC6ndBkKxnHdFJn86mCIgTELsooUmwUm9FkhSp5HYu00Rg==} - engines: {node: '>=12'} - cpu: [x64] + '@esbuild/android-arm@0.25.2': + resolution: {integrity: sha512-NQhH7jFstVY5x8CKbcfa166GoV0EFkaPkCKBQkdPJFvo5u+nGXLEH/ooniLb3QI8Fk58YAx7nsPLozUWfCBOJA==} + engines: {node: '>=18'} + cpu: [arm] os: [android] '@esbuild/android-x64@0.24.2': @@ -508,11 +498,11 @@ packages: 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/android-x64@0.25.2': + resolution: {integrity: sha512-Ffcx+nnma8Sge4jzddPHCZVRvIfQ0kMsUsCMcJRHkGJ1cDmhe4SsrYIjLUKn1xpHZybmOqCWwB0zQvsjdEHtkg==} + engines: {node: '>=18'} + cpu: [x64] + os: [android] '@esbuild/darwin-arm64@0.24.2': resolution: {integrity: sha512-kj3AnYWc+CekmZnS5IPu9D+HWtUI49hbnyqk0FLEJDbzCIQt7hg7ucF1SQAilhtYpIujfaHr6O0UHlzzSPdOeA==} @@ -520,10 +510,10 @@ packages: cpu: [arm64] os: [darwin] - '@esbuild/darwin-x64@0.20.2': - resolution: {integrity: sha512-tBcXp9KNphnNH0dfhv8KYkZhjc+H3XBkF5DKtswJblV7KlT9EI2+jeA8DgBjp908WEuYll6pF+UStUCfEpdysA==} - engines: {node: '>=12'} - cpu: [x64] + '@esbuild/darwin-arm64@0.25.2': + resolution: {integrity: sha512-MpM6LUVTXAzOvN4KbjzU/q5smzryuoNjlriAIx+06RpecwCkL9JpenNzpKd2YMzLJFOdPqBpuub6eVRP5IgiSA==} + engines: {node: '>=18'} + cpu: [arm64] os: [darwin] '@esbuild/darwin-x64@0.24.2': @@ -532,11 +522,11 @@ packages: cpu: [x64] os: [darwin] - '@esbuild/freebsd-arm64@0.20.2': - resolution: {integrity: sha512-d3qI41G4SuLiCGCFGUrKsSeTXyWG6yem1KcGZVS+3FYlYhtNoNgYrWcvkOoaqMhwXSMrZRl69ArHsGJ9mYdbbw==} - engines: {node: '>=12'} - cpu: [arm64] - os: [freebsd] + '@esbuild/darwin-x64@0.25.2': + resolution: {integrity: sha512-5eRPrTX7wFyuWe8FqEFPG2cU0+butQQVNcT4sVipqjLYQjjh8a8+vUTfgBKM88ObB85ahsnTwF7PSIt6PG+QkA==} + engines: {node: '>=18'} + cpu: [x64] + os: [darwin] '@esbuild/freebsd-arm64@0.24.2': resolution: {integrity: sha512-UN8HXjtJ0k/Mj6a9+5u6+2eZ2ERD7Edt1Q9IZiB5UZAIdPnVKDoG7mdTVGhHJIeEml60JteamR3qhsr1r8gXvg==} @@ -544,10 +534,10 @@ packages: cpu: [arm64] os: [freebsd] - '@esbuild/freebsd-x64@0.20.2': - resolution: {integrity: sha512-d+DipyvHRuqEeM5zDivKV1KuXn9WeRX6vqSqIDgwIfPQtwMP4jaDsQsDncjTDDsExT4lR/91OLjRo8bmC1e+Cw==} - engines: {node: '>=12'} - cpu: [x64] + '@esbuild/freebsd-arm64@0.25.2': + resolution: {integrity: sha512-mLwm4vXKiQ2UTSX4+ImyiPdiHjiZhIaE9QvC7sw0tZ6HoNMjYAqQpGyui5VRIi5sGd+uWq940gdCbY3VLvsO1w==} + engines: {node: '>=18'} + cpu: [arm64] os: [freebsd] '@esbuild/freebsd-x64@0.24.2': @@ -556,11 +546,11 @@ packages: 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/freebsd-x64@0.25.2': + resolution: {integrity: sha512-6qyyn6TjayJSwGpm8J9QYYGQcRgc90nmfdUb0O7pp1s4lTY+9D0H9O02v5JqGApUyiHOtkz6+1hZNvNtEhbwRQ==} + engines: {node: '>=18'} + cpu: [x64] + os: [freebsd] '@esbuild/linux-arm64@0.24.2': resolution: {integrity: sha512-7HnAD6074BW43YvvUmE/35Id9/NB7BeX5EoNkK9obndmZBUk8xmJJeU7DwmUeN7tkysslb2eSl6CTrYz6oEMQg==} @@ -568,10 +558,10 @@ packages: cpu: [arm64] os: [linux] - '@esbuild/linux-arm@0.20.2': - resolution: {integrity: sha512-VhLPeR8HTMPccbuWWcEUD1Az68TqaTYyj6nfE4QByZIQEQVWBB8vup8PpR7y1QHL3CpcF6xd5WVBU/+SBEvGTg==} - engines: {node: '>=12'} - cpu: [arm] + '@esbuild/linux-arm64@0.25.2': + resolution: {integrity: sha512-gq/sjLsOyMT19I8obBISvhoYiZIAaGF8JpeXu1u8yPv8BE5HlWYobmlsfijFIZ9hIVGYkbdFhEqC0NvM4kNO0g==} + engines: {node: '>=18'} + cpu: [arm64] os: [linux] '@esbuild/linux-arm@0.24.2': @@ -580,10 +570,10 @@ packages: cpu: [arm] os: [linux] - '@esbuild/linux-ia32@0.20.2': - resolution: {integrity: sha512-o10utieEkNPFDZFQm9CoP7Tvb33UutoJqg3qKf1PWVeeJhJw0Q347PxMvBgVVFgouYLGIhFYG0UGdBumROyiig==} - engines: {node: '>=12'} - cpu: [ia32] + '@esbuild/linux-arm@0.25.2': + resolution: {integrity: sha512-UHBRgJcmjJv5oeQF8EpTRZs/1knq6loLxTsjc3nxO9eXAPDLcWW55flrMVc97qFPbmZP31ta1AZVUKQzKTzb0g==} + engines: {node: '>=18'} + cpu: [arm] os: [linux] '@esbuild/linux-ia32@0.24.2': @@ -592,10 +582,10 @@ packages: cpu: [ia32] os: [linux] - '@esbuild/linux-loong64@0.20.2': - resolution: {integrity: sha512-PR7sp6R/UC4CFVomVINKJ80pMFlfDfMQMYynX7t1tNTeivQ6XdX5r2XovMmha/VjR1YN/HgHWsVcTRIMkymrgQ==} - engines: {node: '>=12'} - cpu: [loong64] + '@esbuild/linux-ia32@0.25.2': + resolution: {integrity: sha512-bBYCv9obgW2cBP+2ZWfjYTU+f5cxRoGGQ5SeDbYdFCAZpYWrfjjfYwvUpP8MlKbP0nwZ5gyOU/0aUzZ5HWPuvQ==} + engines: {node: '>=18'} + cpu: [ia32] os: [linux] '@esbuild/linux-loong64@0.24.2': @@ -604,10 +594,10 @@ packages: cpu: [loong64] os: [linux] - '@esbuild/linux-mips64el@0.20.2': - resolution: {integrity: sha512-4BlTqeutE/KnOiTG5Y6Sb/Hw6hsBOZapOVF6njAESHInhlQAghVVZL1ZpIctBOoTFbQyGW+LsVYZ8lSSB3wkjA==} - engines: {node: '>=12'} - cpu: [mips64el] + '@esbuild/linux-loong64@0.25.2': + resolution: {integrity: sha512-SHNGiKtvnU2dBlM5D8CXRFdd+6etgZ9dXfaPCeJtz+37PIUlixvlIhI23L5khKXs3DIzAn9V8v+qb1TRKrgT5w==} + engines: {node: '>=18'} + cpu: [loong64] os: [linux] '@esbuild/linux-mips64el@0.24.2': @@ -616,10 +606,10 @@ packages: cpu: [mips64el] os: [linux] - '@esbuild/linux-ppc64@0.20.2': - resolution: {integrity: sha512-rD3KsaDprDcfajSKdn25ooz5J5/fWBylaaXkuotBDGnMnDP1Uv5DLAN/45qfnf3JDYyJv/ytGHQaziHUdyzaAg==} - engines: {node: '>=12'} - cpu: [ppc64] + '@esbuild/linux-mips64el@0.25.2': + resolution: {integrity: sha512-hDDRlzE6rPeoj+5fsADqdUZl1OzqDYow4TB4Y/3PlKBD0ph1e6uPHzIQcv2Z65u2K0kpeByIyAjCmjn1hJgG0Q==} + engines: {node: '>=18'} + cpu: [mips64el] os: [linux] '@esbuild/linux-ppc64@0.24.2': @@ -628,10 +618,10 @@ packages: cpu: [ppc64] os: [linux] - '@esbuild/linux-riscv64@0.20.2': - resolution: {integrity: sha512-snwmBKacKmwTMmhLlz/3aH1Q9T8v45bKYGE3j26TsaOVtjIag4wLfWSiZykXzXuE1kbCE+zJRmwp+ZbIHinnVg==} - engines: {node: '>=12'} - cpu: [riscv64] + '@esbuild/linux-ppc64@0.25.2': + resolution: {integrity: sha512-tsHu2RRSWzipmUi9UBDEzc0nLc4HtpZEI5Ba+Omms5456x5WaNuiG3u7xh5AO6sipnJ9r4cRWQB2tUjPyIkc6g==} + engines: {node: '>=18'} + cpu: [ppc64] os: [linux] '@esbuild/linux-riscv64@0.24.2': @@ -640,10 +630,10 @@ packages: cpu: [riscv64] os: [linux] - '@esbuild/linux-s390x@0.20.2': - resolution: {integrity: sha512-wcWISOobRWNm3cezm5HOZcYz1sKoHLd8VL1dl309DiixxVFoFe/o8HnwuIwn6sXre88Nwj+VwZUvJf4AFxkyrQ==} - engines: {node: '>=12'} - cpu: [s390x] + '@esbuild/linux-riscv64@0.25.2': + resolution: {integrity: sha512-k4LtpgV7NJQOml/10uPU0s4SAXGnowi5qBSjaLWMojNCUICNu7TshqHLAEbkBdAszL5TabfvQ48kK84hyFzjnw==} + engines: {node: '>=18'} + cpu: [riscv64] os: [linux] '@esbuild/linux-s390x@0.24.2': @@ -652,10 +642,10 @@ packages: cpu: [s390x] os: [linux] - '@esbuild/linux-x64@0.20.2': - resolution: {integrity: sha512-1MdwI6OOTsfQfek8sLwgyjOXAu+wKhLEoaOLTjbijk6E2WONYpH9ZU2mNtR+lZ2B4uwr+usqGuVfFT9tMtGvGw==} - engines: {node: '>=12'} - cpu: [x64] + '@esbuild/linux-s390x@0.25.2': + resolution: {integrity: sha512-GRa4IshOdvKY7M/rDpRR3gkiTNp34M0eLTaC1a08gNrh4u488aPhuZOCpkF6+2wl3zAN7L7XIpOFBhnaE3/Q8Q==} + engines: {node: '>=18'} + cpu: [s390x] os: [linux] '@esbuild/linux-x64@0.24.2': @@ -664,16 +654,22 @@ packages: cpu: [x64] os: [linux] + '@esbuild/linux-x64@0.25.2': + resolution: {integrity: sha512-QInHERlqpTTZ4FRB0fROQWXcYRD64lAoiegezDunLpalZMjcUcld3YzZmVJ2H/Cp0wJRZ8Xtjtj0cEHhYc/uUg==} + engines: {node: '>=18'} + cpu: [x64] + os: [linux] + '@esbuild/netbsd-arm64@0.24.2': resolution: {integrity: sha512-wuLK/VztRRpMt9zyHSazyCVdCXlpHkKm34WUyinD2lzK07FAHTq0KQvZZlXikNWkDGoT6x3TD51jKQ7gMVpopw==} engines: {node: '>=18'} cpu: [arm64] os: [netbsd] - '@esbuild/netbsd-x64@0.20.2': - resolution: {integrity: sha512-K8/DhBxcVQkzYc43yJXDSyjlFeHQJBiowJ0uVL6Tor3jGQfSGHNNJcWxNbOI8v5k82prYqzPuwkzHt3J1T1iZQ==} - engines: {node: '>=12'} - cpu: [x64] + '@esbuild/netbsd-arm64@0.25.2': + resolution: {integrity: sha512-talAIBoY5M8vHc6EeI2WW9d/CkiO9MQJ0IOWX8hrLhxGbro/vBXJvaQXefW2cP0z0nQVTdQ/eNyGFV1GSKrxfw==} + engines: {node: '>=18'} + cpu: [arm64] os: [netbsd] '@esbuild/netbsd-x64@0.24.2': @@ -682,16 +678,22 @@ packages: cpu: [x64] os: [netbsd] + '@esbuild/netbsd-x64@0.25.2': + resolution: {integrity: sha512-voZT9Z+tpOxrvfKFyfDYPc4DO4rk06qamv1a/fkuzHpiVBMOhpjK+vBmWM8J1eiB3OLSMFYNaOaBNLXGChf5tg==} + engines: {node: '>=18'} + cpu: [x64] + os: [netbsd] + '@esbuild/openbsd-arm64@0.24.2': resolution: {integrity: sha512-YQbi46SBct6iKnszhSvdluqDmxCJA+Pu280Av9WICNwQmMxV7nLRHZfjQzwbPs3jeWnuAhE9Jy0NrnJ12Oz+0A==} engines: {node: '>=18'} cpu: [arm64] os: [openbsd] - '@esbuild/openbsd-x64@0.20.2': - resolution: {integrity: sha512-eMpKlV0SThJmmJgiVyN9jTPJ2VBPquf6Kt/nAoo6DgHAoN57K15ZghiHaMvqjCye/uU4X5u3YSMgVBI1h3vKrQ==} - engines: {node: '>=12'} - cpu: [x64] + '@esbuild/openbsd-arm64@0.25.2': + resolution: {integrity: sha512-dcXYOC6NXOqcykeDlwId9kB6OkPUxOEqU+rkrYVqJbK2hagWOMrsTGsMr8+rW02M+d5Op5NNlgMmjzecaRf7Tg==} + engines: {node: '>=18'} + cpu: [arm64] os: [openbsd] '@esbuild/openbsd-x64@0.24.2': @@ -700,11 +702,11 @@ packages: cpu: [x64] os: [openbsd] - '@esbuild/sunos-x64@0.20.2': - resolution: {integrity: sha512-2UyFtRC6cXLyejf/YEld4Hajo7UHILetzE1vsRcGL3earZEW77JxrFjH4Ez2qaTiEfMgAXxfAZCm1fvM/G/o8w==} - engines: {node: '>=12'} + '@esbuild/openbsd-x64@0.25.2': + resolution: {integrity: sha512-t/TkWwahkH0Tsgoq1Ju7QfgGhArkGLkF1uYz8nQS/PPFlXbP5YgRpqQR3ARRiC2iXoLTWFxc6DJMSK10dVXluw==} + engines: {node: '>=18'} cpu: [x64] - os: [sunos] + os: [openbsd] '@esbuild/sunos-x64@0.24.2': resolution: {integrity: sha512-hTdsW27jcktEvpwNHJU4ZwWFGkz2zRJUz8pvddmXPtXDzVKTTINmlmga3ZzwcuMpUvLw7JkLy9QLKyGpD2Yxig==} @@ -712,11 +714,11 @@ packages: cpu: [x64] os: [sunos] - '@esbuild/win32-arm64@0.20.2': - resolution: {integrity: sha512-GRibxoawM9ZCnDxnP3usoUDO9vUkpAxIIZ6GQI+IlVmr5kP3zUq+l17xELTHMWTWzjxa2guPNyrpq1GWmPvcGQ==} - engines: {node: '>=12'} - cpu: [arm64] - os: [win32] + '@esbuild/sunos-x64@0.25.2': + resolution: {integrity: sha512-cfZH1co2+imVdWCjd+D1gf9NjkchVhhdpgb1q5y6Hcv9TP6Zi9ZG/beI3ig8TvwT9lH9dlxLq5MQBBgwuj4xvA==} + engines: {node: '>=18'} + cpu: [x64] + os: [sunos] '@esbuild/win32-arm64@0.24.2': resolution: {integrity: sha512-LihEQ2BBKVFLOC9ZItT9iFprsE9tqjDjnbulhHoFxYQtQfai7qfluVODIYxt1PgdoyQkz23+01rzwNwYfutxUQ==} @@ -724,10 +726,10 @@ packages: cpu: [arm64] os: [win32] - '@esbuild/win32-ia32@0.20.2': - resolution: {integrity: sha512-HfLOfn9YWmkSKRQqovpnITazdtquEW8/SoHW7pWpuEeguaZI4QnCRW6b+oZTztdBnZOS2hqJ6im/D5cPzBTTlQ==} - engines: {node: '>=12'} - cpu: [ia32] + '@esbuild/win32-arm64@0.25.2': + resolution: {integrity: sha512-7Loyjh+D/Nx/sOTzV8vfbB3GJuHdOQyrOryFdZvPHLf42Tk9ivBU5Aedi7iyX+x6rbn2Mh68T4qq1SDqJBQO5Q==} + engines: {node: '>=18'} + cpu: [arm64] os: [win32] '@esbuild/win32-ia32@0.24.2': @@ -736,10 +738,10 @@ packages: cpu: [ia32] os: [win32] - '@esbuild/win32-x64@0.20.2': - resolution: {integrity: sha512-N49X4lJX27+l9jbLKSqZ6bKNjzQvHaT8IIFUy+YIqmXQdjYCToGWwOItDrfby14c78aDd5NHQl29xingXfCdLQ==} - engines: {node: '>=12'} - cpu: [x64] + '@esbuild/win32-ia32@0.25.2': + resolution: {integrity: sha512-WRJgsz9un0nqZJ4MfhabxaD9Ft8KioqU3JMinOTvobbX6MOSUigSBlogP8QB3uxpJDsFS6yN+3FDBdqE5lg9kg==} + engines: {node: '>=18'} + cpu: [ia32] os: [win32] '@esbuild/win32-x64@0.24.2': @@ -748,6 +750,12 @@ packages: cpu: [x64] os: [win32] + '@esbuild/win32-x64@0.25.2': + resolution: {integrity: sha512-kM3HKb16VIXZyIeVrM1ygYmZBKybX8N4p754bw390wGO3Tf2j4L2/WYL+4suWujpgf6GBYs3jv7TyUivdd05JA==} + engines: {node: '>=18'} + cpu: [x64] + os: [win32] + '@eslint-community/eslint-utils@4.4.0': resolution: {integrity: sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} @@ -758,32 +766,36 @@ packages: resolution: {integrity: sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==} engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} - '@eslint/config-array@0.19.1': - resolution: {integrity: sha512-fo6Mtm5mWyKjA/Chy1BYTdn5mGJoDNjC7C64ug20ADsRDGrA85bN3uK3MaKbeRkRuuIEAR5N33Jr1pbm411/PA==} + '@eslint/config-array@0.20.0': + resolution: {integrity: sha512-fxlS1kkIjx8+vy2SjuCB94q3htSNrufYTXubwiBFeaQHbH6Ipi43gFJq2zCMt6PHhImH3Xmr0NksKDvchWlpQQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@eslint/core@0.10.0': - resolution: {integrity: sha512-gFHJ+xBOo4G3WRlR1e/3G8A6/KZAH6zcE/hkLRCZTi/B9avAG365QhFA8uOGzTMqgTghpn7/fSnscW++dpMSAw==} + '@eslint/config-helpers@0.2.1': + resolution: {integrity: sha512-RI17tsD2frtDu/3dmI7QRrD4bedNKPM08ziRYaC5AhkGrzIAJelm9kJU1TznK+apx6V+cqRz8tfpEeG3oIyjxw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@eslint/core@0.11.0': - resolution: {integrity: sha512-DWUB2pksgNEb6Bz2fggIy1wh6fGgZP4Xyy/Mt0QZPiloKKXerbqq9D3SBQTlCRYOrcRPu4vuz+CGjwdfqxnoWA==} + '@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.2.0': - resolution: {integrity: sha512-grOjVNN8P3hjJn/eIETF1wwd12DdnwFDoyceUJLYYdkpbwq3nLi+4fqrTAONx7XDALqlL220wC/RHSC/QTI/0w==} + '@eslint/core@0.13.0': + resolution: {integrity: sha512-yfkgDw1KR66rkT5A8ci4irzDysN7FRpq3ttJolR88OqQikAWqwA8j5VZyas+vjyBNFIJ7MfybJ9plMILI2UrCw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@eslint/js@9.20.0': - resolution: {integrity: sha512-iZA07H9io9Wn836aVTytRaNqh00Sad+EamwOVJT12GTLw1VGMFV/4JaME+JjLtr9fiGaoWgYnS54wrfWsSs4oQ==} + '@eslint/eslintrc@3.3.1': + resolution: {integrity: sha512-gtF186CXhIl1p4pJNGZw8Yc6RlshoePRvE0X91oPGb3vZ8pM3qOS9W9NGPat9LziaBV7XrJWGylNQXkGcnM3IQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@eslint/object-schema@2.1.5': - resolution: {integrity: sha512-o0bhxnL89h5Bae5T318nFoFzGy+YE5i/gGkoPAgkmTVdRKTiv3p8JHevPiPaMwoloKfEiiaHlawCqaZMqRm+XQ==} + '@eslint/js@9.24.0': + resolution: {integrity: sha512-uIY/y3z0uvOGX8cp1C2fiC4+ZmBhp6yZWkojtHL1YEMnRt1Y63HB9TM17proGEmeG7HeUY+UP36F0aknKYTpYA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@eslint/plugin-kit@0.2.5': - resolution: {integrity: sha512-lB05FkqEdUg2AA0xEbUz0SnkXT1LcCTa438W4IWTUh4hdOnVbQyOJ81OrDXsJk/LSiJHubgGEFoR5EHq1NsH1A==} + '@eslint/object-schema@2.1.6': + resolution: {integrity: sha512-RBMg5FRL0I0gs51M/guSAj5/e14VQ4tpZnQNWwuDT66P14I43ItmPfIZRhO9fUVIPOAQXU47atlywZ/czoqFPA==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@eslint/plugin-kit@0.2.8': + resolution: {integrity: sha512-ZAoA40rNMPwSm+AeHpCq8STiNAwzWLJuP8Xv4CHIc9wv/PSuExjMrmjfYNj682vW0OOiZ1HKxzvjQr9XZIisQA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} '@floating-ui/core@1.6.4': @@ -792,9 +804,15 @@ packages: '@floating-ui/dom@1.6.12': resolution: {integrity: sha512-NP83c0HjokcGVEMeoStg317VD9W7eDlGK7457dMBANbKA6GJZdc7rjujdgqzTaz93jkGgc5P/jeWbaCHnMNc+w==} + '@floating-ui/dom@1.6.13': + resolution: {integrity: sha512-umqzocjDgNRGTuO7Q8CU32dkHkECqI8ZdMZ5Swb6QAM0t5rnlrN3lGo1hdpscRd3WS8T6DKYK4ephgIH9iRh3w==} + '@floating-ui/utils@0.2.8': resolution: {integrity: sha512-kym7SodPp8/wloecOpcmSnWJsK7M0E5Wg8UcFA+uO4B9s5d0ywXOEro/8HM9x0rW+TljRzul/14UYz3TleT3ig==} + '@floating-ui/utils@0.2.9': + resolution: {integrity: sha512-MDWhGtE+eHw5JW7lq4qhc5yRLS11ERl1c7Z6Xd0a58DozHES6EnNNwUWbMiG4J9Cgj053Bhk8zvlhFYKVhULwg==} + '@humanfs/core@0.19.1': resolution: {integrity: sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==} engines: {node: '>=18.18.0'} @@ -811,8 +829,8 @@ packages: resolution: {integrity: sha512-d2CGZR2o7fS6sWB7DG/3a95bGKQyHMACZ5aW8qGkkqQpUoZV6C0X7Pc7l4ZNMZkfNBf4VWNe9E1jRsf0G146Ew==} engines: {node: '>=18.18'} - '@humanwhocodes/retry@0.4.1': - resolution: {integrity: sha512-c7hNEllBlenFTHBky65mhq8WD2kbN9Q6gk0bTk8lSBvc554jpXSkST1iePudpt7+A/AQvuHs9EMqjHDXMY1lrA==} + '@humanwhocodes/retry@0.4.2': + resolution: {integrity: sha512-xeO57FpIu4p1Ri3Jq/EXq4ClRm86dVF2z/+kvFnyqVYRavTZmaFaUBbWCOuuTh0o/g7DSsk6kc2vrS4Vl5oPOQ==} engines: {node: '>=18.18'} '@internationalized/date@3.7.0': @@ -899,8 +917,8 @@ packages: resolution: {integrity: sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - '@joshwooding/vite-plugin-react-docgen-typescript@0.4.2': - resolution: {integrity: sha512-feQ+ntr+8hbVudnsTUapiMN9q8T90XA1d5jn9QzY09sNoj4iD9wi0PY1vsBFTda4ZjEaxRK9S81oarR2nj7TFQ==} + '@joshwooding/vite-plugin-react-docgen-typescript@0.5.0': + resolution: {integrity: sha512-qYDdL7fPwLRI+bJNurVcis+tNgJmvWjH4YTBGXTA8xMuxFrnAz6E5o35iyzyKbq5J5Lr8mJGfrR5GXl+WGwhgQ==} peerDependencies: typescript: '>= 4.3.x' vite: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 @@ -948,26 +966,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==} @@ -975,13 +981,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 @@ -1105,113 +1111,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.3': - resolution: {integrity: sha512-7a+SD4EZdZocm+NG1Kx4yV6Aw7+YUlRIyGvKcxsGtYMOLaqrUewApqveXF83+FbYWMoezXcoZCLQFROtS/Z6Fw==} + '@storybook/addon-actions@8.6.12': + resolution: {integrity: sha512-B5kfiRvi35oJ0NIo53CGH66H471A3XTzrfaa6SxXEJsgxxSeKScG5YeXcCvLiZfvANRQ7QDsmzPUgg0o3hdMXw==} peerDependencies: - storybook: ^8.5.3 + storybook: ^8.6.12 - '@storybook/addon-backgrounds@8.5.3': - resolution: {integrity: sha512-sZcw8/C/HIIgbRBY+0ZYTBc5Py8xvw3bt6lzSVQEXA2aygfJpO/jiQJlmOXTmK3g5F5pjFKaaCodfXT7V/9mzw==} + '@storybook/addon-backgrounds@8.6.12': + resolution: {integrity: sha512-lmIAma9BiiCTbJ8YfdZkXjpnAIrOUcgboLkt1f6XJ78vNEMnLNzD9gnh7Tssz1qrqvm34v9daDjIb+ggdiKp3Q==} peerDependencies: - storybook: ^8.5.3 + storybook: ^8.6.12 - '@storybook/addon-controls@8.5.3': - resolution: {integrity: sha512-A4UVQhPyC7FvV+fM50xvEZO26/2uE41Ns0TN0qq7U5EH0Dlj43Salgay6qT8fve6XAI4SgVjkujPVCSbLg/yVQ==} + '@storybook/addon-controls@8.6.12': + resolution: {integrity: sha512-9VSRPJWQVb9wLp21uvpxDGNctYptyUX0gbvxIWOHMH3R2DslSoq41lsC/oQ4l4zSHVdL+nq8sCTkhBxIsjKqdQ==} peerDependencies: - storybook: ^8.5.3 + storybook: ^8.6.12 - '@storybook/addon-docs@8.5.3': - resolution: {integrity: sha512-XVcQlHX963nuoeRkb7qQg89t/9CThdT46UV7jX3FFn08NEMhmDEa+4iVA4l+4xNgJ+Av6uX+u6yRGnM/910mLg==} + '@storybook/addon-docs@8.6.12': + resolution: {integrity: sha512-kEezQjAf/p3SpDzLABgg4fbT48B6dkT2LiZCKTRmCrJVtuReaAr4R9MMM6Jsph6XjbIj/SvOWf3CMeOPXOs9sg==} peerDependencies: - storybook: ^8.5.3 + storybook: ^8.6.12 - '@storybook/addon-essentials@8.5.3': - resolution: {integrity: sha512-0zbEWQQZCiYRUxMo6FrfwQER/vi+B8mCLLivdjbSVSvZsjmlpcaBA5uBjbsXfIRcedHlou4QiJXn+nR8thDlKA==} + '@storybook/addon-essentials@8.6.12': + resolution: {integrity: sha512-Y/7e8KFlttaNfv7q2zoHMPdX6hPXHdsuQMAjYl5NG9HOAJREu4XBy4KZpbcozRe4ApZ78rYsN/MO1EuA+bNMIA==} peerDependencies: - storybook: ^8.5.3 + storybook: ^8.6.12 - '@storybook/addon-highlight@8.5.3': - resolution: {integrity: sha512-xhsr3W6KTvlOIIe+8JE9/sEOAgkW0yjMZzs47A+bWcxKwcFhAUgVLbAgEzjJ0u248rjGKlCJ2pswWefO+ZKJeg==} + '@storybook/addon-highlight@8.6.12': + resolution: {integrity: sha512-9FITVxdoycZ+eXuAZL9ElWyML/0fPPn9UgnnAkrU7zkMi+Segq/Tx7y+WWanC5zfWZrXAuG6WTOYEXeWQdm//w==} peerDependencies: - storybook: ^8.5.3 + storybook: ^8.6.12 - '@storybook/addon-links@8.5.3': - resolution: {integrity: sha512-MRhIif4tCoIucLgGX14dI7yptF9bYH2UaJasyywshzQZKAEjOfX19Aw5fwp2zJt6kukAF6mUxMtWKcQMH2XOmw==} + '@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.3 + storybook: ^8.6.12 peerDependenciesMeta: react: optional: true - '@storybook/addon-mdx-gfm@8.5.3': - resolution: {integrity: sha512-jKfJir3E+jJkD1K9SvrzUQBhaQJbGd2DtcE5IusXe0NKBJegbBy+eMhh9K7ani/isTf8+ZkhoXR3DFWwi2IJhg==} + '@storybook/addon-mdx-gfm@8.6.12': + resolution: {integrity: sha512-OKI5+O8xyK8axGPFwkl38NGJ6Rjf7kyhiBPxw5NuHOjOnU/FL4Pw3QmY47TT96TVws27vP3gF5+FX8lj3Dd3rQ==} peerDependencies: - storybook: ^8.5.3 + storybook: ^8.6.12 - '@storybook/addon-measure@8.5.3': - resolution: {integrity: sha512-unb0bRsnISXWiCBBECxNUUdM12hHpV+1uJUu5OJHtKb26YpiQvewDFLTLjuZJ3NIAfw+F5232Q7K88AWJV6weg==} + '@storybook/addon-measure@8.6.12': + resolution: {integrity: sha512-tACmwqqOvutaQSduw8SMb62wICaT1rWaHtMN3vtWXuxgDPSdJQxLP+wdVyRYMAgpxhLyIO7YRf++Hfha9RHgFg==} peerDependencies: - storybook: ^8.5.3 + storybook: ^8.6.12 - '@storybook/addon-outline@8.5.3': - resolution: {integrity: sha512-e1MkGN6XVdeRh2oUKGdqEDyAo2TD/47ashAAxw8DEiLRWgBMbQ+KBVH4EOG+dn5395jxh7YgRLJn/miqNnfN5g==} + '@storybook/addon-outline@8.6.12': + resolution: {integrity: sha512-1ylwm+n1s40S91No0v9T4tCjZORu3GbnjINlyjYTDLLhQHyBQd3nWR1Y1eewU4xH4cW9SnSLcMQFS/82xHqU6A==} peerDependencies: - storybook: ^8.5.3 + storybook: ^8.6.12 - '@storybook/addon-toolbars@8.5.3': - resolution: {integrity: sha512-AWr9Per9WDrbFtNlbVlj6CiEwKOvOyoBt3bCuMHuRfTdqKwkwInEtyUi4//T8U+c1qs7KJBpsWV2vhIuc5sODg==} + '@storybook/addon-toolbars@8.6.12': + resolution: {integrity: sha512-HEcSzo1DyFtIu5/ikVOmh5h85C1IvK9iFKSzBR6ice33zBOaehVJK+Z5f487MOXxPsZ63uvWUytwPyViGInj+g==} peerDependencies: - storybook: ^8.5.3 + storybook: ^8.6.12 - '@storybook/addon-viewport@8.5.3': - resolution: {integrity: sha512-OkLJ2B8+PiOEAd2HtRG6XewVjtw6AkBMgoSbfKCMr6TWSbuKrOeiwIMqqieAAPVNfsOQ8hTK6JGhr/KPRCKgRA==} + '@storybook/addon-viewport@8.6.12': + resolution: {integrity: sha512-EXK2LArAnABsPP0leJKy78L/lbMWow+EIJfytEP5fHaW4EhMR6h7Hzaqzre6U0IMMr/jVFa1ci+m0PJ0eQc2bw==} peerDependencies: - storybook: ^8.5.3 + storybook: ^8.6.12 - '@storybook/blocks@8.5.3': - resolution: {integrity: sha512-a/PpHFmeBtVB9Q/6cNAnqfeCqMowsrI8nGka0Nl7BB3x1eJnS3I1Qo3Skht0LBEsmXOgXk4dwWxpeQL3qHMRkw==} + '@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-beta - react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta - storybook: ^8.5.3 + 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.6.12 peerDependenciesMeta: react: optional: true react-dom: optional: true - '@storybook/builder-vite@8.5.3': - resolution: {integrity: sha512-MxriwzZSVidaXj3kpH/jCOJZUdF7ofcvxmvrMrNehH9UvXIGM6b73CBC5ucnptbnQ7qxYKdAZiMhQbPHZ9cqOQ==} + '@storybook/builder-vite@8.6.12': + resolution: {integrity: sha512-Gju21ud/3Qw4v2vLNaa5SuJECsI9ICNRr2G0UyCCzRvCHg8jpA9lDReu2NqhLDyFIuDG+ZYT38gcaHEUoNQ8KQ==} peerDependencies: - storybook: ^8.5.3 + storybook: ^8.6.12 vite: ^4.0.0 || ^5.0.0 || ^6.0.0 - '@storybook/components@8.5.3': - resolution: {integrity: sha512-iC9VbpM8Equ8wXI2syBzov+8wys4sGYW7Xfz67LdSVbCMhsH9FRtvgbDppJQC/ZDCofg4sTAHhWpDV/KAQ385A==} + '@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.3': - resolution: {integrity: sha512-ZLlr2pltbj/hmC54lggJTnh09FCAJR62lIdiXNwa+V+/eJz0CfD8tfGmZGKPSmaQeZBpMwAOeRM97k2oLPF+0w==} + '@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.3': - resolution: {integrity: sha512-u5oyXTFg3KIy4h9qoNyiCG2mJF3OpkLO/AcM4lMAwQVnBvz8pwITvr4jDZByVjGmcIbgKJQnWX+BwdK2NI4yAw==} + '@storybook/csf-plugin@8.6.12': + resolution: {integrity: sha512-6s8CnP1aoKPb3XtC0jRLUp8M5vTA8RhGAwQDKUsFpCC7g89JR9CaKs9FY2ZSzsNbjR15uASi7b3K8BzeYumYQg==} peerDependencies: - storybook: ^8.5.3 - - '@storybook/csf@0.1.11': - resolution: {integrity: sha512-dHYFQH3mA+EtnCkHXzicbLgsvzYjcDJ1JWsogbItZogkPHgSJM/Wr71uMkcvw8v9mmCyP4NpXJuu6bPoVsOnzg==} + storybook: ^8.6.12 '@storybook/csf@0.1.12': resolution: {integrity: sha512-9/exVhabisyIVL0VxTCxo01Tdm8wefIXKXfltAPTSr8cbLn5JAxGQ6QV3mjdecLGEOucfoVhAKtJfVHxEK1iqw==} @@ -1226,44 +1224,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.3': - resolution: {integrity: sha512-JtfuMgQpKIPU0ARn1jNPce8FmknpM0Ap0mppWl+KGAWWGadJPDaX/nrY/19dT1kRgIhyOnbX6tgJxII4E9dE5w==} + '@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.3': - resolution: {integrity: sha512-dUsuXW+KgDg4tWXOB6dk5j5gwwRUzbPvicHAY9mzbpSVScbWXuE5T/S/9hHlbtfkhFroWQgPx2eB8z3rai+7RQ==} + '@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.3': - resolution: {integrity: sha512-kNIGk6mpXW3Wy+uS9pH9b9w/54EPJnH+QXA6MX4EQgmxhMQlGlS/l/YZp+3jsVQW4YgTmqe740qB+ccJAKZxBQ==} + '@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.3 + storybook: ^8.6.12 - '@storybook/react-vite@8.5.3': - resolution: {integrity: sha512-F30u2Xf+X774wrfQzWgg7vRVJmmJFbBVGdULsAGonkdy1FUeYo7puPiD2Qg6hBYNDyIyxDXVOukkOvTlG7IBRg==} + '@storybook/react-vite@8.6.12': + resolution: {integrity: sha512-UA2Kule99oyFgHdhcuhrRwCKyWu/yMbqbl9U7NwowFHNwWWFjVMMir/AmfShb/H1C1DQ3LqOad6/QwJyPLjP8g==} engines: {node: '>=18.0.0'} peerDependencies: - '@storybook/test': 8.5.3 + '@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.3 + storybook: ^8.6.12 vite: ^4.0.0 || ^5.0.0 || ^6.0.0 peerDependenciesMeta: '@storybook/test': optional: true - '@storybook/react@8.5.3': - resolution: {integrity: sha512-QIdBSjsnwV/J919i4Fi7DlwxDKHU815t0c4B/w2KTMtKKBkk+Bge+vgVi0/lNqD3eF4w3yjVWGbkzUQZ63yiPg==} + '@storybook/react@8.6.12': + resolution: {integrity: sha512-NzxlHLA5DkDgZM/dMwTYinuzRs6rsUPmlqP+NIv6YaciQ4NGnTYyOC7R/SqI6HHFm8ZZ5eMYvpfiFmhZ9rU+rQ==} engines: {node: '>=18.0.0'} peerDependencies: - '@storybook/test': 8.5.3 + '@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.3 + storybook: ^8.6.12 typescript: '>= 4.2.x' peerDependenciesMeta: '@storybook/test': @@ -1271,8 +1269,8 @@ packages: typescript: optional: true - '@storybook/theming@8.5.3': - resolution: {integrity: sha512-Jvzw+gT1HNarkJo21WZBq5pU89qDN8u/pD3woSh/1c2h5RS6UylWjQHotPFpcBIQiUSrDFtvCU9xugJm4MD0+w==} + '@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 @@ -1287,8 +1285,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 @@ -1415,22 +1413,22 @@ packages: '@types/ms@0.7.34': resolution: {integrity: sha512-nG96G3Wp6acyAgJqGasjODb+acrI7KltPiRxzHPXnP3NgI28bpQDRv53olbqGXbfcgF5aiiHmO3xpwEpS5Ld9g==} - '@types/node@22.13.1': - resolution: {integrity: sha512-jK8uzQlrvXqEU91UxiK5J7pKHyzgnI1Qnl0QDHIgVGuolJhRb9EEl28Cj9b3rGR8B2lhFCtvIm5os8lFnO/1Ew==} + '@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.3': - resolution: {integrity: sha512-0Knk+HJiMP/qOZgMyNFamlIjw9OFCsyC2ZbigmEEyXXixgre6IQpm/4V+r3qH4GC1JPvRJKInw+on2rV6YZLeA==} + '@types/react-dom@19.1.2': + resolution: {integrity: sha512-XGJkWF41Qq305SKWEILa1O8vzhb3aOo3ogBlSmiqNko/WmRb6QIaweuZCXjKygVDXpzXb5wyxKTSOsmkuqj+Qw==} peerDependencies: '@types/react': ^19.0.0 '@types/react-transition-group@4.4.10': resolution: {integrity: sha512-hT/+s0VQs2ojCX823m60m5f0sL5idt9SO6Tj6Dg+rdphGPIeJbJ6CxvBYkgkGKrYeDjvIpKTR38UzmtHJOGW3Q==} - '@types/react@19.0.8': - resolution: {integrity: sha512-9P/o1IGdfmQxrujGbIMDyYaaCykhLKc0NGCtYcECNUr9UAaDe4gwvV9bR6tvd5Br1SG0j+PBpbKr2UYY8CwqSw==} + '@types/react@19.1.1': + resolution: {integrity: sha512-ePapxDL7qrgqSF67s0h9m412d9DbXyC1n59O2st+9rjuuamWsZuD2w55rqY12CbzsZ7uVXb5Nw0gEp9Z8MMutQ==} '@types/resolve@1.20.6': resolution: {integrity: sha512-A4STmOXPhMUtHH+S6ymgE2GiBSMqf4oTvcQZMcHzokuTLVYzXTB8ttjcgxOVaAp2lGwEdzZ0J+cRbbeevQj1UQ==} @@ -1456,49 +1454,43 @@ packages: '@types/yauzl@2.10.3': resolution: {integrity: sha512-oJoftv0LSuaDZE3Le4DbKX+KS9G36NzOeSap90UIK0yMA/NhKJhqlSGtNDORNRaIbQfzjXDrQa0ytJ6mNRGz/Q==} - '@typescript-eslint/eslint-plugin@8.23.0': - resolution: {integrity: sha512-vBz65tJgRrA1Q5gWlRfvoH+w943dq9K1p1yDBY2pc+a1nbBLZp7fB9+Hk8DaALUbzjqlMfgaqlVPT1REJdkt/w==} + '@typescript-eslint/eslint-plugin@8.30.0': + resolution: {integrity: sha512-3LOb8q0E1kazkeON2awh5oWnsn+KO9pPvzSWZNCYeXOZw81yXeq0WfOB22kVCHESHFgQST6LFmkISvjaE9V5kw==} 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.23.0': - resolution: {integrity: sha512-h2lUByouOXFAlMec2mILeELUbME5SZRN/7R9Cw2RD2lRQQY08MWMM+PmVVKKJNK1aIwqTo9t/0CvOxwPbRIE2Q==} + '@typescript-eslint/parser@8.30.0': + resolution: {integrity: sha512-5w64ZeRCgWOA/2ADPoFYmDYdPnEeEkUiFx5Sez7MQpQuxVazHO9wwl+wElokaY5hMKVVor1N13z/tZeWYfVaUg==} 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-eslint/scope-manager@8.19.0': - resolution: {integrity: sha512-hkoJiKQS3GQ13TSMEiuNmSCvhz7ujyqD1x3ShbaETATHrck+9RaDdUbt+osXaUuns9OFwrDTTrjtwsU8gJyyRA==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + typescript: '>=4.8.4 <5.9.0' '@typescript-eslint/scope-manager@8.23.0': resolution: {integrity: sha512-OGqo7+dXHqI7Hfm+WqkZjKjsiRtFUQHPdGMXzk5mYXhJUedO7e/Y7i8AK3MyLMgZR93TX4bIzYrfyVjLC+0VSw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@typescript-eslint/type-utils@8.23.0': - resolution: {integrity: sha512-iIuLdYpQWZKbiH+RkCGc6iu+VwscP5rCtQ1lyQ7TYuKLrcZoeJVpcLiG8DliXVkUxirW/PWlmS+d6yD51L9jvA==} + '@typescript-eslint/scope-manager@8.30.0': + resolution: {integrity: sha512-TTkN0Sjk3SxpfW3lvSteOUxcTxnviQKsD1wgf+sk30Aj7UrHjVNFPTosir3+/3eaxpRMau4U/NY6PAw6cmj7hg==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@typescript-eslint/type-utils@8.30.0': + resolution: {integrity: sha512-8ryZsrZwEuTuC2IBPsb8H5iGQJDdXhHWNc1oNHOp60wGb04/XAG0QU9kUpu0/2hdBPR4/00/Hz4ep+GzpTgDkg==} 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-eslint/types@8.19.0': - resolution: {integrity: sha512-8XQ4Ss7G9WX8oaYvD4OOLCjIQYgRQxO+qCiR2V2s2GxI9AUpo7riNwo6jDhKtTcaJjT8PY54j2Yb33kWtSJsmA==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + typescript: '>=4.8.4 <5.9.0' '@typescript-eslint/types@8.23.0': resolution: {integrity: sha512-1sK4ILJbCmZOTt9k4vkoulT6/y5CHJ1qUYxqpF1K/DBAd8+ZUL4LlSCxOssuH5m4rUaaN0uS0HlVPvd45zjduQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@typescript-eslint/typescript-estree@8.19.0': - resolution: {integrity: sha512-WW9PpDaLIFW9LCbucMSdYUuGeFUz1OkWYS/5fwZwTA+l2RwlWFdJvReQqMUMBw4yJWJOfqd7An9uwut2Oj8sLw==} + '@typescript-eslint/types@8.30.0': + resolution: {integrity: sha512-UQXFVF+8t4YhbU3nxabQL3/uyUEVw9kiVc+V0kZzblElC5MTvzvjJVhmrvI0xya1C1lqhIykWY7CeKioK9RMRw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - peerDependencies: - typescript: '>=4.8.4 <5.8.0' '@typescript-eslint/typescript-estree@8.23.0': resolution: {integrity: sha512-LcqzfipsB8RTvH8FX24W4UUFk1bl+0yTOf9ZA08XngFwMg4Kj8A+9hwz8Cr/ZS4KwHrmo9PJiLZkOt49vPnuvQ==} @@ -1506,12 +1498,11 @@ packages: peerDependencies: typescript: '>=4.8.4 <5.8.0' - '@typescript-eslint/utils@8.19.0': - resolution: {integrity: sha512-PTBG+0oEMPH9jCZlfg07LCB2nYI0I317yyvXGfxnvGvw4SHIOuRnQ3kadyyXY6tGdChusIHIbM5zfIbp4M6tCg==} + '@typescript-eslint/typescript-estree@8.30.0': + resolution: {integrity: sha512-/5n4GS/8koPkRx0XBl9OCFf9N80u+0h05QBU/z5cDBCUXnPpDmSzQ2FXC7JGvU777GOzE6mUAOx2ABtswgzWgQ==} 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.23.0': resolution: {integrity: sha512-uB/+PSo6Exu02b5ZEiVtmY6RVYO7YU5xqgzTIVZwTHvvK3HsL8tZZHFaTLFtRG3CsV4A5mhOv+NZx5BlhXPyIA==} @@ -1520,17 +1511,24 @@ packages: eslint: ^8.57.0 || ^9.0.0 typescript: '>=4.8.4 <5.8.0' - '@typescript-eslint/visitor-keys@8.19.0': - resolution: {integrity: sha512-mCFtBbFBJDCNCWUl5y6sZSCHXw1DEFEk3c/M3nRK2a4XUB8StGFtmcEMizdjKuBzB6e/smJAAWYug3VrdLMr1w==} + '@typescript-eslint/utils@8.30.0': + resolution: {integrity: sha512-TmrXlhwFWpfUBhJE7NJSyru26XrU/foccGTOFvLGcci38/ZnKXgq2IUtAUqE9ILVNjM4Zm3TccGuvl2QANhjag==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + eslint: ^8.57.0 || ^9.0.0 + typescript: '>=4.8.4 <5.9.0' '@typescript-eslint/visitor-keys@8.23.0': resolution: {integrity: sha512-oWWhcWDLwDfu++BGTZcmXWqpwtkwb5o7fxUIGksMQQDSdPW9prsSnfIOZMlsj4vBOSrcnjIUZMiIjODgGosFhQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@visulima/boxen@1.0.25': - resolution: {integrity: sha512-U6kzb4RKO+zEwnLTYdPOnuZ2+qg0jp7YxW+gyJk04jjTXC38dpllUuEeXu7lWH91UrJWUS8qTQiP3q8DIevfWA==} - engines: {node: '>=18.* <=23.*'} + '@typescript-eslint/visitor-keys@8.30.0': + resolution: {integrity: sha512-oj82UQEi0fcYmpQpVISEOUM/icPNJiRh+E6svAtwNP58QpAQnnFigEoeGADm8H7t2bolxSb7+kRYzykbBdA47w==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@visulima/boxen@1.0.30': + resolution: {integrity: sha512-izo776RvDFeipY7tJspA0wFrcq/Ih0Qhe/zu6v7O4OlURy2ViFmy+2ZSUYTHSSwKrmVeZWrUUJSpaepZPLPMMQ==} + engines: {node: '>=18.0.0 <=23.x'} os: [darwin, linux, win32] '@vitejs/plugin-react@4.3.4': @@ -1539,11 +1537,11 @@ packages: peerDependencies: vite: ^4.2.0 || ^5.0.0 || ^6.0.0 - '@vitest/expect@3.0.5': - resolution: {integrity: sha512-nNIOqupgZ4v5jWuQx2DSlHLEs7Q4Oh/7AYwNyE+k0UQzG7tSmjPXShUikn1mpNGzYEN2jJbTvLejwShMitovBA==} + '@vitest/expect@3.1.1': + resolution: {integrity: sha512-q/zjrW9lgynctNbwvFtQkGK9+vvHA5UzVi2V8APrp1C6fG6/MuYYkmlx4FubuqLycCeSdHD5aadWfua/Vr0EUA==} - '@vitest/mocker@3.0.5': - resolution: {integrity: sha512-CLPNBFBIE7x6aEGbIjaQAX03ZZlBMaWwAjBdMkIf/cAn6xzLTiM3zYqO/WAbieEjsAZir6tO71mzeHZoodThvw==} + '@vitest/mocker@3.1.1': + resolution: {integrity: sha512-bmpJJm7Y7i9BBELlLuuM1J1Q6EQ6K5Ye4wcyOpOMXMcePYKSIYlpcrCm4l/O6ja4VJA5G2aMJiuZkZdnxlC3SA==} peerDependencies: msw: ^2.4.9 vite: ^5.0.0 || ^6.0.0 @@ -1553,224 +1551,233 @@ packages: vite: optional: true - '@vitest/pretty-format@3.0.5': - resolution: {integrity: sha512-CjUtdmpOcm4RVtB+up8r2vVDLR16Mgm/bYdkGFe3Yj/scRfCpbSi2W/BDSDcFK7ohw8UXvjMbOp9H4fByd/cOA==} + '@vitest/pretty-format@3.1.1': + resolution: {integrity: sha512-dg0CIzNx+hMMYfNmSqJlLSXEmnNhMswcn3sXO7Tpldr0LiGmg3eXdLLhwkv2ZqgHb/d5xg5F7ezNFRA1fA13yA==} - '@vitest/runner@3.0.5': - resolution: {integrity: sha512-BAiZFityFexZQi2yN4OX3OkJC6scwRo8EhRB0Z5HIGGgd2q+Nq29LgHU/+ovCtd0fOfXj5ZI6pwdlUmC5bpi8A==} + '@vitest/runner@3.1.1': + resolution: {integrity: sha512-X/d46qzJuEDO8ueyjtKfxffiXraPRfmYasoC4i5+mlLEJ10UvPb0XH5M9C3gWuxd7BAQhpK42cJgJtq53YnWVA==} - '@vitest/snapshot@3.0.5': - resolution: {integrity: sha512-GJPZYcd7v8QNUJ7vRvLDmRwl+a1fGg4T/54lZXe+UOGy47F9yUfE18hRCtXL5aHN/AONu29NGzIXSVFh9K0feA==} + '@vitest/snapshot@3.1.1': + resolution: {integrity: sha512-bByMwaVWe/+1WDf9exFxWWgAixelSdiwo2p33tpqIlM14vW7PRV5ppayVXtfycqze4Qhtwag5sVhX400MLBOOw==} - '@vitest/spy@3.0.5': - resolution: {integrity: sha512-5fOzHj0WbUNqPK6blI/8VzZdkBlQLnT25knX0r4dbZI9qoZDf3qAdjoMmDcLG5A83W6oUUFJgUd0EYBc2P5xqg==} + '@vitest/spy@3.1.1': + resolution: {integrity: sha512-+EmrUOOXbKzLkTDwlsc/xrwOlPDXyVk3Z6P6K4oiCndxz7YLpp/0R0UsWVOKT0IXWjjBJuSMk6D27qipaupcvQ==} - '@vitest/utils@3.0.5': - resolution: {integrity: sha512-N9AX0NUoUtVwKwy21JtwzaqR5L5R5A99GAbrHfCCXK1lp593i/3AZAXhSP43wRQuxYsflrdzEfXZFo1reR1Nkg==} + '@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==} @@ -1806,18 +1813,14 @@ 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==} - allotment@1.20.2: - resolution: {integrity: sha512-TaCuHfYNcsJS9EPk04M7TlG5Rl3vbAdHeAyrTE9D5vbpzV+wxnRoUrulDbfnzaQcPIZKpHJNixDOoZNuzliKEA==} + allotment@1.20.3: + resolution: {integrity: sha512-JCnklt7j0OsyDjD7A9AdT6wqJ3FSoo1ASV6w02Am02lo6NwO25yhG1DcWW8ueBV38ppXQmvrXBXuzX7iVkq6Tw==} peerDependencies: - react: ^17.0.0 || ^18.0.0 - react-dom: ^17.0.0 || ^18.0.0 + react: ^17.0.0 || ^18.0.0 || ^19.0.0 + react-dom: ^17.0.0 || ^18.0.0 || ^19.0.0 ansi-escapes@4.3.2: resolution: {integrity: sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==} @@ -2015,8 +2018,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==} @@ -2026,6 +2029,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'} @@ -2034,6 +2041,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'} @@ -2052,8 +2063,8 @@ packages: ccount@2.0.1: resolution: {integrity: sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==} - chai@5.1.2: - resolution: {integrity: sha512-aGtmf24DW6MLHHG5gCx4zaI3uBq3KRtxeVs0DjFH6Z0rDNbsvTxFASFvdj79pxjxZ8/5u3PIiN3IwEIQkiiuPw==} + chai@5.2.0: + resolution: {integrity: sha512-mCuXncKXk5iCLhfhwTc0izo0gtEmpz5CtG2y8GiOINBlMVS6v8TMRc5TaLWKS6692m9+dVVfzgeVxR5UxWHTYw==} engines: {node: '>=12'} chalk@2.4.2: @@ -2087,8 +2098,8 @@ packages: resolution: {integrity: sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==} engines: {node: '>= 8.10.0'} - chromium-bidi@1.2.0: - resolution: {integrity: sha512-XtdJ1GSN6S3l7tO7F77GhNsw0K367p0IsLYf2yZawCVAKKC3lUvDhPdMVrB2FNhmhfW43QGYbEX3Wg6q0maGwQ==} + chromium-bidi@3.0.0: + resolution: {integrity: sha512-ZOGRDAhBMX1uxL2Cm2TDuhImbrsEz5A/tTcVU6RpXEWaTNUNwsHW6njUXizh51Ir6iqHbKAfhA2XK33uBcLo5A==} peerDependencies: devtools-protocol: '*' @@ -2102,10 +2113,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'} @@ -2342,8 +2349,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==} diff-sequences@29.6.3: resolution: {integrity: sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==} @@ -2404,8 +2411,8 @@ packages: end-of-stream@1.4.4: resolution: {integrity: sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==} - enhanced-resolve@5.18.0: - resolution: {integrity: sha512-0/r0MySGYG8YqlayBZ6MuCfECmHFdJ5qyPh8s8wa5Hnm6SaFLSK1VYCbj+NKp090Nm1caZhD+QTnmxO7esYGyQ==} + enhanced-resolve@5.18.1: + resolution: {integrity: sha512-ZSW3ma5GkcQBIpwZTSRAI8N71Uuwgs93IezB7mf7R60tC8ZbJideoDNKjHn2O9KIlx6rkGTTEk1xUCK2E1Y2Yg==} engines: {node: '>=10.13.0'} entities@4.5.0: @@ -2449,6 +2456,10 @@ packages: resolution: {integrity: sha512-MZ4iQ6JwHOBQjahnjwaC1ZtIBH+2ohjamzAO3oaHcXYup7qxjF2fixyH+Q71voWHeOkI2q/TnJao/KfXYIZWbw==} engines: {node: '>= 0.4'} + es-object-atoms@1.1.1: + resolution: {integrity: sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==} + engines: {node: '>= 0.4'} + es-set-tostringtag@2.1.0: resolution: {integrity: sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==} engines: {node: '>= 0.4'} @@ -2465,16 +2476,16 @@ 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==} engines: {node: '>=18'} hasBin: true + esbuild@0.25.2: + resolution: {integrity: sha512-16854zccKPnC+toMywC+uKNeYSv+/eXkevRAfwRD/G9Cleq66m8XFIrigkbvauLLlCfDL45Q2cWegSg53gGBnQ==} + engines: {node: '>=18'} + hasBin: true + escalade@3.1.2: resolution: {integrity: sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==} engines: {node: '>=6'} @@ -2542,26 +2553,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.2: - resolution: {integrity: sha512-0Z4DUklJrC+GHjCRXa7PYfPzWC15DaVnwaOYenpgXiCEijXPZkLKCms+rHhtoRcWccP7Z8DpOOaP1gc3P9oOwg==} + eslint-plugin-storybook@0.12.0: + resolution: {integrity: sha512-Lg5I0+npTgiYgZ4KSvGWGDFZi3eOCNJPaWX0c9rTEEXC5wvooOClsP9ZtbI4hhFKyKgYR877KiJxbRTSJq9gWA==} engines: {node: '>= 18'} peerDependencies: eslint: '>=8' - 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: @@ -2572,8 +2583,8 @@ packages: resolution: {integrity: sha512-UyLnSehNt62FFhSwjZlHmeokpRK59rcz29j+F1/aDgbkbRTk7wIc9XzdoasMUbRNKDM0qQt/+BJ4BrpFeABemw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - eslint@9.20.0: - resolution: {integrity: sha512-aL4F8167Hg4IvsW89ejnpTwx+B/UQRzJPGgbIOl+4XqffWsahVVsLEWoZvnrVuwpWmnRd7XeXmQI1zlKcFDteA==} + 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: @@ -2628,8 +2639,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: @@ -2650,10 +2661,6 @@ packages: fast-fifo@1.3.2: resolution: {integrity: sha512-/d9sfos4yxzpwkDkuN7k2SqFKtYNmCTzgfEpz82x34IM9/zc8KGxQoXg1liNC/izpRM/MBdt44Nmx41ZWqk+FQ==} - fast-glob@3.3.2: - resolution: {integrity: sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==} - engines: {node: '>=8.6.0'} - fast-glob@3.3.3: resolution: {integrity: sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==} engines: {node: '>=8.6.0'} @@ -2664,6 +2671,9 @@ packages: fast-levenshtein@2.0.6: resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==} + fast-safe-stringify@2.1.1: + resolution: {integrity: sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA==} + fast-shallow-equal@1.0.0: resolution: {integrity: sha512-HPtaa38cPgWvaCFmRNhlc6NG7pv6NUHqjPgVAkWGoB9mQMwYB27/K0CvOM5Czy+qpT3e8XJ6Q4aPAnzpNpzNaw==} @@ -2767,6 +2777,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'} @@ -3349,8 +3363,8 @@ packages: resolution: {integrity: sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==} engines: {node: '>=6'} - knip@5.43.6: - resolution: {integrity: sha512-bUCFlg44imdV5vayYxu0pIAB373S8Ufjda0qaI9oRZDH6ltJFwUoAO2j7nafxDmo5G0ZeP4IiLAHqlc3wYIONQ==} + knip@5.50.3: + resolution: {integrity: sha512-0A4G7UPucGTCpNh5vHSfL0+tVQIuKfJKdg8sAq6EC3COKbAchEbM+TeN4w32OrnJW9CesHs71lqftlggMVfW2A==} engines: {node: '>=18.18.0'} hasBin: true peerDependencies: @@ -3372,8 +3386,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 @@ -3397,6 +3411,7 @@ packages: lodash.isequal@4.5.0: resolution: {integrity: sha512-pDo3lu8Jhfjqls6GkMgpahsF9kCyayhgykjyLMNFTKWrpVdAQtYyB4muAMWozBB4ig/dtWAmsMxLEI8wuz+DYQ==} + deprecated: This package is deprecated. Use require('node:util').isDeepStrictEqual instead. lodash.merge@4.6.2: resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} @@ -3424,6 +3439,9 @@ packages: loupe@3.1.2: resolution: {integrity: sha512-23I4pFZHmAemUnz8WZXbYRSKYj801VDaNv9ETuMh7IrMc7VuVVSo+Z9iLE3ni30+U48iDWfi30d3twAXBYmnCg==} + loupe@3.1.3: + resolution: {integrity: sha512-kkIp7XSkP78ZxJEsSxW3712C6teJVoeHHwgo9zJ380de7IYyJ2ISlxojcH2pC5OFLewESmnRi/+XCDIEEVyoug==} + lru-cache@10.4.3: resolution: {integrity: sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==} @@ -3671,8 +3689,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 @@ -3699,8 +3717,8 @@ packages: resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} engines: {node: '>=0.10.0'} - npm-check-updates@17.1.14: - resolution: {integrity: sha512-dr4bXIxETubLI1tFGeock5hN8yVjahvaVpx+lPO4/O2md3zJuxB7FgH3MIoTvQSCgsgkIRpe0skti01IEAA5tA==} + 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 @@ -3731,8 +3749,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: @@ -3790,10 +3808,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'} @@ -3858,8 +3872,8 @@ packages: resolution: {integrity: sha512-5HviZNaZcfqP95rwpv+1HDgUamezbqdSYTyzjTvwtJSnIH+3vnbmWsItli8OFEndS984VT55M3jduxZbX351gg==} engines: {node: '>=12'} - pathe@2.0.2: - resolution: {integrity: sha512-15Ztpk+nov8DR524R4BF7uEuzESgzUEAV4Ah7CUMNGXdE5ELuvxElxGXndBl32vMSsWa1jpNf22Z+Er3sKwq+w==} + pathe@2.0.3: + resolution: {integrity: sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==} pathval@2.0.0: resolution: {integrity: sha512-vE7JKRyES09KiunauX7nd2Q9/L7lhok4smP9RZTDeD4MVs72Dp2qNFVz39Nz5a0FVEW0BJR6C0DYrq6unoziZA==} @@ -3895,13 +3909,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 @@ -3913,8 +3927,8 @@ packages: resolution: {integrity: sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q==} engines: {node: '>= 0.4'} - postcss@8.5.1: - resolution: {integrity: sha512-6oz2beyjc5VMn/KV1pPw8fliQkhBXrVn1Z3TVyqZxU8kZpzEKhBdmCFqI6ZbmGtamQvQGuU1sgPTk8ZrXDD7jQ==} + postcss@8.5.3: + resolution: {integrity: sha512-dle9A3yYxlBSrt8Fu+IpjGT8SY8hN0mlaA6GY8t0P5PjIOZemULz/E2Bnm/2dcUOena75OTNkHI76uZBNUUq3A==} engines: {node: ^10 || ^12 || >=14} prelude-ls@1.2.1: @@ -3926,8 +3940,8 @@ packages: engines: {node: '>=14'} hasBin: true - prettier@3.4.2: - resolution: {integrity: sha512-e9MewbtFo+Fevyuxn/4rrcDAaq0IYxPGLvObpQjiZBMAzB9IGmzlnG9RZy3FFas+eBMu2vA0CszMeduow5dIuQ==} + prettier@3.5.3: + resolution: {integrity: sha512-QQtaxnoDJeAkDvDKWCLiwIXkTgRhwYDEQCghU9Z6q03iyek/rxRh/2lC3HB7P8sWT2xC/y5JDctPLBIGzHKbhw==} engines: {node: '>=14'} hasBin: true @@ -3981,12 +3995,12 @@ packages: resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} engines: {node: '>=6'} - puppeteer-core@24.2.0: - resolution: {integrity: sha512-e4A4/xqWdd4kcE6QVHYhJ+Qlx/+XpgjP4d8OwBx0DJoY/nkIRhSgYmKQnv7+XSs1ofBstalt+XPGrkaz4FoXOQ==} + puppeteer-core@24.6.1: + resolution: {integrity: sha512-sMCxsY+OPWO2fecBrhIeCeJbWWXJ6UaN997sTid6whY0YT9XM0RnxEwLeUibluIS5/fRmuxe1efjb5RMBsky7g==} engines: {node: '>=18'} - puppeteer@24.2.0: - resolution: {integrity: sha512-z8vv7zPEgrilIbOo3WNvM+2mXMnyM9f4z6zdrB88Fzeuo43Oupmjrzk3EpuvuCtyK0A7Lsllfx7Z+4BvEEGJcQ==} + puppeteer@24.6.1: + resolution: {integrity: sha512-/4ocGfu8LNvDbWUqJZV2VmwEWpbOdJa69y2Jivd213tV0ekAtUh/bgT1hhW63SDN/CtrEucOPwoomZ+9M+eBEg==} engines: {node: '>=18'} hasBin: true @@ -4011,23 +4025,18 @@ packages: resolution: {integrity: sha512-i8aF1nyKInZnANZ4uZrH49qn1paRgBZ7wZiCNBMnenlPzEv0mRl+ShpTVEI6wZNl8sSc79xZkivtgLKQArcanQ==} engines: {node: '>=16.14.0'} - react-dom@18.3.1: - resolution: {integrity: sha512-5m4nQKp+rZRb09LNH59GM4BxTh9251/ylbKIbpe7TpGxfJ+9kv6BLkLBXIjjspbgbnIBNqlI23tRnTWT0snUIw==} + react-dom@19.1.0: + resolution: {integrity: sha512-Xs1hdnE+DyKgeHJeJznQmYMIBG3TKIHJJT95Q58nHLSrElKlGQqDTR2HQ9fx5CN/Gk6Vh/kupBTDLU11/nDk/g==} peerDependencies: - react: ^18.3.1 - - react-dom@19.0.0: - resolution: {integrity: sha512-4GV5sHFG0e/0AD4X+ySy6UJd3jVl1iNsNHdpad0qhABJ11twS3TTBnseqsKurKcsNqCEFeGL3uLpVChpIO3QfQ==} - peerDependencies: - react: ^19.0.0 + react: ^19.1.0 react-error-boundary@5.0.0: resolution: {integrity: sha512-tnjAxG+IkpLephNcePNA7v6F/QpWLH8He65+DmedchDwg162JZqx4NmbXj0mlAYVVEd81OW7aFhmbsScYfiAFQ==} peerDependencies: react: '>=16.13.1' - react-icons@5.4.0: - resolution: {integrity: sha512-7eltJxgVt7X64oHh6wSWNwwbKTCtMfK35hcjvJS0yxEAhPM8oUKdS3+kqaW1vicIltw+kR2unHaa12S9pPALoQ==} + react-icons@5.5.0: + resolution: {integrity: sha512-MEFcXdkP3dLo8uumGI5xN3lDFNsRtrjbOEKDLD7yv76v4wpnEq2Lt2qeHaQOr34I/wPN3s3+N08WkQ+CW37Xiw==} peerDependencies: react: '*' @@ -4040,22 +4049,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.1.5: - resolution: {integrity: sha512-/4f9+up0Qv92D3bB8iN5P1s3oHAepSGa9h5k6tpTFlixTTskJZwKGhJ6vRJ277tLD1zuaZTt95hyGWV1Z37csQ==} + 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.1.5: - resolution: {integrity: sha512-8BUF+hZEU4/z/JD201yK6S+UYhsf58bzYIDq2NS1iGpwxSXDu7F+DeGSkIXMFBuHZB21FSiCzEcUb18cQNdRkA==} + react-router@7.5.0: + resolution: {integrity: sha512-estOHrRlDMKdlQa6Mj32gIks4J+AxNsYoE0DbTTxiMy2mPzZuWSDU+N85/r1IlNR7kGfznF3VCUlvc5IUO+B9g==} engines: {node: '>=20.0.0'} peerDependencies: react: '>=18' @@ -4064,8 +4073,8 @@ 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 @@ -4088,12 +4097,8 @@ packages: react: '*' react-dom: '*' - react@18.3.1: - resolution: {integrity: sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ==} - engines: {node: '>=0.10.0'} - - react@19.0.0: - resolution: {integrity: sha512-V8AVnmPIICiWpGfm6GLzCR/W5FXLchHop40W4nXBmdlEceh16rCN8O8LNWm5bh5XUX91fh7KpA+W0TgMKmgTpQ==} + react@19.1.0: + resolution: {integrity: sha512-FS+XFBNvn3GTAWq26joslQgWNoFu08F4kl0J4CgdNKADkdSGXQyTCnKteIAJy96Br6YbpEU1LSzV5dYtjMkMDg==} engines: {node: '>=0.10.0'} readdirp@3.6.0: @@ -4207,11 +4212,8 @@ packages: resolution: {integrity: sha512-xAg7SOnEhrm5zI3puOOKyy1OMcMlIJZYNJY7xLBwSze0UjhPLnWfj2GF2EpT0jmzaJKIWKHLsaSSajf35bcYnA==} engines: {node: '>=v12.22.7'} - scheduler@0.23.2: - resolution: {integrity: sha512-UOShsPwz7NrMUqhR6t0hWjFduvOzbtv7toDH1/hIrfRNIDBnnBWd0CwJTGvTpngVlmwGCdP9/Zl/tVrDqcuYzQ==} - - 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==} @@ -4224,11 +4226,6 @@ packages: resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} hasBin: true - semver@7.6.3: - resolution: {integrity: sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==} - engines: {node: '>=10'} - hasBin: true - semver@7.7.1: resolution: {integrity: sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==} engines: {node: '>=10'} @@ -4369,11 +4366,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.9.0: + resolution: {integrity: sha512-UGvjygr6F6tpH7o2qyqR6QYpwraIjKSdtzyBdyytFOHmPZY917kwdwLG0RbOjWOnKmnm3PeHjaoLLMie7kPLQw==} - storybook@8.5.3: - resolution: {integrity: sha512-2WtNBZ45u1AhviRU+U+ld588tH8gDa702dNSq5C8UBaE9PlOsazGsyp90dw1s9YRvi+ejrjKAupQAU0GwwUiVg==} + storybook@8.6.12: + resolution: {integrity: sha512-Z/nWYEHBTLK1ZBtAWdhxC0l5zf7ioJ7G4+zYqtTdYeb67gTnxNj80gehf8o8QY9L2zA2+eyMRGLC2V5fI7Z3Tw==} hasBin: true peerDependencies: prettier: ^2 || ^3 @@ -4474,9 +4471,6 @@ packages: engines: {node: '>=16 || 14 >=14.17'} hasBin: true - summary@2.1.0: - resolution: {integrity: sha512-nMIjMrd5Z2nuB2RZCKJfFMjgS3fygbeyGk9PxPPaJR1RIcyN9yn4A63Isovzm3ZtQuEkLBVgMdPup8UeLH7aQw==} - supports-color@5.5.0: resolution: {integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==} engines: {node: '>=4'} @@ -4571,12 +4565,6 @@ packages: trough@2.2.0: resolution: {integrity: sha512-tmMpK00BjZiUyVyvrBK7knerNgmgvcV/KLVyuma/SC+TQN167GrMRciANTz09+k3zW8L8t60jWO1GpfkZdjTaw==} - ts-api-utils@1.3.0: - resolution: {integrity: sha512-UQMIo7pb8WRomKR1/+MFVLTroIvDVtMX3K6OUir8ynLyzB8Jeriont2bTAtmNPa1ekAgN7YPDyf6V+ygrdU+eQ==} - engines: {node: '>=16'} - peerDependencies: - typescript: '>=4.2.0' - ts-api-utils@2.0.1: resolution: {integrity: sha512-dnlgjFSVetynI8nzgJ+qF62efpglpWRk8isUEWZGWlJYySCTD6aKvbUDu+zbPeDakk3bg5H4XpitHukgfL1m9w==} engines: {node: '>=18.12'} @@ -4655,8 +4643,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 @@ -4664,8 +4652,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==} unicorn-magic@0.1.0: resolution: {integrity: sha512-lRfVq8fE8gz6QMBuDM6a+LO3IAzTi05H6gCVaUpir2E1Rwpo4ZUog45KpNXKC/Mn3Yb9UDuHumeFTo9iV/D9FQ==} @@ -4753,13 +4741,13 @@ packages: vfile@6.0.1: resolution: {integrity: sha512-1bYqc7pt6NIADBJ98UiG0Bn/CHIVOoZ/IyEkqIruLg0mE1BKzkOXY2D6CSqQIcKqgadppE5lrxgWXJmXd7zZJw==} - vite-node@3.0.5: - resolution: {integrity: sha512-02JEJl7SbtwSDJdYS537nU6l+ktdvcREfLksk/NDAqtdKWGqHl+joXzEubHROmS3E6pip+Xgu2tFezMu75jH7A==} + 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.0: - resolution: {integrity: sha512-RjjMipCKVoR4hVfPY6GQTgveinjNuyLw+qruksLDvA5ktI1150VmcMBKmQaEWJhg/j6Uaf6dNCNA0AfdzUb/hQ==} + 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: @@ -4798,16 +4786,16 @@ packages: yaml: optional: true - vitest@3.0.5: - resolution: {integrity: sha512-4dof+HvqONw9bvsYxtkfUp2uHsTN9bV2CZIi1pWgoFpL1Lld8LA1ka9q/ONSsoScAKG7NVGf2stJTI7XRkXb2Q==} + 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.5 - '@vitest/ui': 3.0.5 + '@vitest/browser': 3.1.1 + '@vitest/ui': 3.1.1 happy-dom: '*' jsdom: '*' peerDependenciesMeta: @@ -4936,6 +4924,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'} @@ -4984,8 +4984,8 @@ packages: peerDependencies: zod: ^3.18.0 - zod@3.24.1: - resolution: {integrity: sha512-muH7gBL9sI1nciMZV67X5fTKKBLtwpZ5VBp1vsOQzj1MhrBZ4wlVCm3gedKZWLp0Oyel8sIGfeiz54Su+OVT+A==} + zod@3.24.2: + resolution: {integrity: sha512-lY7CDW43ECgW9u1TcT3IoXHflywfVqDYze4waEz812jR/bZ8FHDsl7pFQoSZTz5N+2NqRXs8GBwnAwo3ZNxqhQ==} zustand@5.0.3: resolution: {integrity: sha512-14fwWQtU3pH4dE0dOpdMiWjddcH+QzKIgk1cl8epwSE7yag43k/AD/m4L6+K7DytAOr9gGBe3/EXj9g7cdostg==} @@ -5017,62 +5017,64 @@ snapshots: '@jridgewell/gen-mapping': 0.3.5 '@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.24.7': dependencies: @@ -5095,10 +5097,10 @@ snapshots: '@babel/helper-compilation-targets': 7.25.9 '@babel/helper-module-transforms': 7.26.0(@babel/core@7.26.0) '@babel/helpers': 7.26.0 - '@babel/parser': 7.26.5 + '@babel/parser': 7.26.7 '@babel/template': 7.25.9 - '@babel/traverse': 7.26.5 - '@babel/types': 7.26.5 + '@babel/traverse': 7.26.7 + '@babel/types': 7.26.7 convert-source-map: 2.0.0 debug: 4.4.0 gensync: 1.0.0-beta.2 @@ -5109,7 +5111,7 @@ snapshots: '@babel/generator@7.26.3': dependencies: - '@babel/parser': 7.26.5 + '@babel/parser': 7.26.7 '@babel/types': 7.26.7 '@jridgewell/gen-mapping': 0.3.5 '@jridgewell/trace-mapping': 0.3.25 @@ -5143,7 +5145,7 @@ snapshots: '@babel/core': 7.26.0 '@babel/helper-module-imports': 7.25.9 '@babel/helper-validator-identifier': 7.25.9 - '@babel/traverse': 7.26.5 + '@babel/traverse': 7.26.7 transitivePeerDependencies: - supports-color @@ -5158,7 +5160,7 @@ snapshots: '@babel/helpers@7.26.0': dependencies: '@babel/template': 7.25.9 - '@babel/types': 7.26.5 + '@babel/types': 7.26.7 '@babel/highlight@7.24.7': dependencies: @@ -5277,18 +5279,6 @@ snapshots: transitivePeerDependencies: - supports-color - '@babel/traverse@7.26.5': - dependencies: - '@babel/code-frame': 7.26.2 - '@babel/generator': 7.26.5 - '@babel/parser': 7.26.5 - '@babel/template': 7.25.9 - '@babel/types': 7.26.5 - debug: 4.4.0 - globals: 11.12.0 - transitivePeerDependencies: - - supports-color - '@babel/traverse@7.26.7': dependencies: '@babel/code-frame': 7.26.2 @@ -5318,15 +5308,15 @@ snapshots: '@bcoe/v8-coverage@0.2.3': {} - '@chakra-ui/cli@3.7.0(@chakra-ui/react@3.7.0(@emotion/react@11.14.0(@types/react@19.0.8)(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.1)(react@19.1.0))(react-dom@19.1.0(react@19.1.0))(react@19.1.0))': dependencies: - '@chakra-ui/react': 3.7.0(@emotion/react@11.14.0(@types/react@19.0.8)(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.1)(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.25 - 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 @@ -5339,44 +5329,45 @@ snapshots: prettier: 3.3.3 scule: 1.3.0 sucrase: 3.35.0 - zod: 3.24.1 + zod: 3.24.2 transitivePeerDependencies: - supports-color - '@chakra-ui/react@3.7.0(@emotion/react@11.14.0(@types/react@19.0.8)(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.1)(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.8)(react@19.0.0) + '@emotion/react': 11.14.0(@types/react@19.1.1)(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 - react: 19.0.0 - react-dom: 19.0.0(react@19.0.0) + fast-safe-stringify: 2.1.1 + 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 @@ -5416,19 +5407,19 @@ snapshots: '@emotion/memoize@0.9.0': {} - '@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0)': + '@emotion/react@11.14.0(@types/react@19.1.1)(react@19.1.0)': dependencies: '@babel/runtime': 7.24.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.8 + '@types/react': 19.1.1 transitivePeerDependencies: - supports-color @@ -5444,182 +5435,190 @@ 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': - optional: true - '@esbuild/aix-ppc64@0.24.2': optional: true - '@esbuild/android-arm64@0.20.2': + '@esbuild/aix-ppc64@0.25.2': optional: true '@esbuild/android-arm64@0.24.2': optional: true - '@esbuild/android-arm@0.20.2': + '@esbuild/android-arm64@0.25.2': optional: true '@esbuild/android-arm@0.24.2': optional: true - '@esbuild/android-x64@0.20.2': + '@esbuild/android-arm@0.25.2': optional: true '@esbuild/android-x64@0.24.2': optional: true - '@esbuild/darwin-arm64@0.20.2': + '@esbuild/android-x64@0.25.2': optional: true '@esbuild/darwin-arm64@0.24.2': optional: true - '@esbuild/darwin-x64@0.20.2': + '@esbuild/darwin-arm64@0.25.2': optional: true '@esbuild/darwin-x64@0.24.2': optional: true - '@esbuild/freebsd-arm64@0.20.2': + '@esbuild/darwin-x64@0.25.2': optional: true '@esbuild/freebsd-arm64@0.24.2': optional: true - '@esbuild/freebsd-x64@0.20.2': + '@esbuild/freebsd-arm64@0.25.2': optional: true '@esbuild/freebsd-x64@0.24.2': optional: true - '@esbuild/linux-arm64@0.20.2': + '@esbuild/freebsd-x64@0.25.2': optional: true '@esbuild/linux-arm64@0.24.2': optional: true - '@esbuild/linux-arm@0.20.2': + '@esbuild/linux-arm64@0.25.2': optional: true '@esbuild/linux-arm@0.24.2': optional: true - '@esbuild/linux-ia32@0.20.2': + '@esbuild/linux-arm@0.25.2': optional: true '@esbuild/linux-ia32@0.24.2': optional: true - '@esbuild/linux-loong64@0.20.2': + '@esbuild/linux-ia32@0.25.2': optional: true '@esbuild/linux-loong64@0.24.2': optional: true - '@esbuild/linux-mips64el@0.20.2': + '@esbuild/linux-loong64@0.25.2': optional: true '@esbuild/linux-mips64el@0.24.2': optional: true - '@esbuild/linux-ppc64@0.20.2': + '@esbuild/linux-mips64el@0.25.2': optional: true '@esbuild/linux-ppc64@0.24.2': optional: true - '@esbuild/linux-riscv64@0.20.2': + '@esbuild/linux-ppc64@0.25.2': optional: true '@esbuild/linux-riscv64@0.24.2': optional: true - '@esbuild/linux-s390x@0.20.2': + '@esbuild/linux-riscv64@0.25.2': optional: true '@esbuild/linux-s390x@0.24.2': optional: true - '@esbuild/linux-x64@0.20.2': + '@esbuild/linux-s390x@0.25.2': optional: true '@esbuild/linux-x64@0.24.2': optional: true + '@esbuild/linux-x64@0.25.2': + optional: true + '@esbuild/netbsd-arm64@0.24.2': optional: true - '@esbuild/netbsd-x64@0.20.2': + '@esbuild/netbsd-arm64@0.25.2': optional: true '@esbuild/netbsd-x64@0.24.2': optional: true + '@esbuild/netbsd-x64@0.25.2': + optional: true + '@esbuild/openbsd-arm64@0.24.2': optional: true - '@esbuild/openbsd-x64@0.20.2': + '@esbuild/openbsd-arm64@0.25.2': optional: true '@esbuild/openbsd-x64@0.24.2': optional: true - '@esbuild/sunos-x64@0.20.2': + '@esbuild/openbsd-x64@0.25.2': optional: true '@esbuild/sunos-x64@0.24.2': optional: true - '@esbuild/win32-arm64@0.20.2': + '@esbuild/sunos-x64@0.25.2': optional: true '@esbuild/win32-arm64@0.24.2': optional: true - '@esbuild/win32-ia32@0.20.2': + '@esbuild/win32-arm64@0.25.2': optional: true '@esbuild/win32-ia32@0.24.2': optional: true - '@esbuild/win32-x64@0.20.2': + '@esbuild/win32-ia32@0.25.2': optional: true '@esbuild/win32-x64@0.24.2': optional: true - '@eslint-community/eslint-utils@4.4.0(eslint@9.20.0(jiti@2.4.2))': + '@esbuild/win32-x64@0.25.2': + optional: true + + '@eslint-community/eslint-utils@4.4.0(eslint@9.24.0(jiti@2.4.2))': dependencies: - eslint: 9.20.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.1': + '@eslint/config-array@0.20.0': dependencies: - '@eslint/object-schema': 2.1.5 + '@eslint/object-schema': 2.1.6 debug: 4.4.0 minimatch: 3.1.2 transitivePeerDependencies: - supports-color - '@eslint/core@0.10.0': + '@eslint/config-helpers@0.2.1': {} + + '@eslint/core@0.12.0': dependencies: '@types/json-schema': 7.0.15 - '@eslint/core@0.11.0': + '@eslint/core@0.13.0': dependencies: '@types/json-schema': 7.0.15 - '@eslint/eslintrc@3.2.0': + '@eslint/eslintrc@3.3.1': dependencies: ajv: 6.12.6 debug: 4.4.0 @@ -5633,13 +5632,13 @@ snapshots: transitivePeerDependencies: - supports-color - '@eslint/js@9.20.0': {} + '@eslint/js@9.24.0': {} - '@eslint/object-schema@2.1.5': {} + '@eslint/object-schema@2.1.6': {} - '@eslint/plugin-kit@0.2.5': + '@eslint/plugin-kit@0.2.8': dependencies: - '@eslint/core': 0.10.0 + '@eslint/core': 0.13.0 levn: 0.4.1 '@floating-ui/core@1.6.4': @@ -5651,8 +5650,15 @@ snapshots: '@floating-ui/core': 1.6.4 '@floating-ui/utils': 0.2.8 + '@floating-ui/dom@1.6.13': + dependencies: + '@floating-ui/core': 1.6.4 + '@floating-ui/utils': 0.2.9 + '@floating-ui/utils@0.2.8': {} + '@floating-ui/utils@0.2.9': {} + '@humanfs/core@0.19.1': {} '@humanfs/node@0.16.6': @@ -5664,7 +5670,7 @@ snapshots: '@humanwhocodes/retry@0.3.0': {} - '@humanwhocodes/retry@0.4.1': {} + '@humanwhocodes/retry@0.4.2': {} '@internationalized/date@3.7.0': dependencies: @@ -5696,27 +5702,27 @@ snapshots: '@jest/console@29.7.0': dependencies: '@jest/types': 29.6.3 - '@types/node': 22.13.1 + '@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.1)(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.1 + '@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.1)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@types/node@22.13.1)(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 @@ -5741,7 +5747,7 @@ snapshots: dependencies: '@jest/fake-timers': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 22.13.1 + '@types/node': 22.14.1 jest-mock: 29.7.0 '@jest/expect-utils@29.7.0': @@ -5759,7 +5765,7 @@ snapshots: dependencies: '@jest/types': 29.6.3 '@sinonjs/fake-timers': 10.3.0 - '@types/node': 22.13.1 + '@types/node': 22.14.1 jest-message-util: 29.7.0 jest-mock: 29.7.0 jest-util: 29.7.0 @@ -5781,7 +5787,7 @@ snapshots: '@jest/transform': 29.7.0 '@jest/types': 29.6.3 '@jridgewell/trace-mapping': 0.3.25 - '@types/node': 22.13.1 + '@types/node': 22.14.1 chalk: 4.1.2 collect-v8-coverage: 1.0.2 exit: 0.1.2 @@ -5851,17 +5857,18 @@ snapshots: '@jest/schemas': 29.6.3 '@types/istanbul-lib-coverage': 2.0.6 '@types/istanbul-reports': 3.0.4 - '@types/node': 22.13.1 + '@types/node': 22.14.1 '@types/yargs': 17.0.32 chalk: 4.1.2 - '@joshwooding/vite-plugin-react-docgen-typescript@0.4.2(typescript@5.7.3)(vite@6.1.0(@types/node@22.13.1)(jiti@2.4.2)(terser@5.31.1)(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)(terser@5.31.1)(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.0(@types/node@22.13.1)(jiti@2.4.2)(terser@5.31.1)(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)(terser@5.31.1)(yaml@2.7.0) optionalDependencies: - typescript: 5.7.3 + typescript: 5.8.3 '@jridgewell/gen-mapping@0.3.5': dependencies: @@ -5895,46 +5902,34 @@ snapshots: '@juggle/resize-observer@3.4.0': {} - '@mdx-js/react@3.0.1(@types/react@19.0.8)(react@18.3.1)': + '@mdx-js/react@3.0.1(@types/react@19.1.1)(react@19.1.0)': dependencies: '@types/mdx': 2.0.13 - '@types/react': 19.0.8 - react: 18.3.1 + '@types/react': 19.1.1 + 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.17.1 - '@nodelib/fs.walk@3.0.1': - dependencies: - '@nodelib/fs.scandir': 4.0.1 - fastq: 1.17.1 - '@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 @@ -6025,132 +6020,124 @@ snapshots: dependencies: '@sinonjs/commons': 3.0.1 - '@snyk/github-codeowners@1.1.0': - dependencies: - commander: 4.1.1 - ignore: 5.3.1 - p-map: 4.0.0 - - '@storybook/addon-actions@8.5.3(storybook@8.5.3(prettier@3.4.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.3(prettier@3.4.2) + storybook: 8.6.12(prettier@3.5.3) uuid: 9.0.1 - '@storybook/addon-backgrounds@8.5.3(storybook@8.5.3(prettier@3.4.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.3(prettier@3.4.2) + storybook: 8.6.12(prettier@3.5.3) ts-dedent: 2.2.0 - '@storybook/addon-controls@8.5.3(storybook@8.5.3(prettier@3.4.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.3(prettier@3.4.2) + storybook: 8.6.12(prettier@3.5.3) ts-dedent: 2.2.0 - '@storybook/addon-docs@8.5.3(@types/react@19.0.8)(storybook@8.5.3(prettier@3.4.2))': + '@storybook/addon-docs@8.6.12(@types/react@19.1.1)(storybook@8.6.12(prettier@3.5.3))': dependencies: - '@mdx-js/react': 3.0.1(@types/react@19.0.8)(react@18.3.1) - '@storybook/blocks': 8.5.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@8.5.3(prettier@3.4.2)) - '@storybook/csf-plugin': 8.5.3(storybook@8.5.3(prettier@3.4.2)) - '@storybook/react-dom-shim': 8.5.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@8.5.3(prettier@3.4.2)) - react: 18.3.1 - react-dom: 18.3.1(react@18.3.1) - storybook: 8.5.3(prettier@3.4.2) + '@mdx-js/react': 3.0.1(@types/react@19.1.1)(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.3(@types/react@19.0.8)(storybook@8.5.3(prettier@3.4.2))': + '@storybook/addon-essentials@8.6.12(@types/react@19.1.1)(storybook@8.6.12(prettier@3.5.3))': dependencies: - '@storybook/addon-actions': 8.5.3(storybook@8.5.3(prettier@3.4.2)) - '@storybook/addon-backgrounds': 8.5.3(storybook@8.5.3(prettier@3.4.2)) - '@storybook/addon-controls': 8.5.3(storybook@8.5.3(prettier@3.4.2)) - '@storybook/addon-docs': 8.5.3(@types/react@19.0.8)(storybook@8.5.3(prettier@3.4.2)) - '@storybook/addon-highlight': 8.5.3(storybook@8.5.3(prettier@3.4.2)) - '@storybook/addon-measure': 8.5.3(storybook@8.5.3(prettier@3.4.2)) - '@storybook/addon-outline': 8.5.3(storybook@8.5.3(prettier@3.4.2)) - '@storybook/addon-toolbars': 8.5.3(storybook@8.5.3(prettier@3.4.2)) - '@storybook/addon-viewport': 8.5.3(storybook@8.5.3(prettier@3.4.2)) - storybook: 8.5.3(prettier@3.4.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.1)(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.3(storybook@8.5.3(prettier@3.4.2))': + '@storybook/addon-highlight@8.6.12(storybook@8.6.12(prettier@3.5.3))': dependencies: '@storybook/global': 5.0.0 - storybook: 8.5.3(prettier@3.4.2) + storybook: 8.6.12(prettier@3.5.3) - '@storybook/addon-links@8.5.3(react@19.0.0)(storybook@8.5.3(prettier@3.4.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.3(prettier@3.4.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.3(storybook@8.5.3(prettier@3.4.2))': + '@storybook/addon-mdx-gfm@8.6.12(storybook@8.6.12(prettier@3.5.3))': dependencies: remark-gfm: 4.0.0 - storybook: 8.5.3(prettier@3.4.2) + storybook: 8.6.12(prettier@3.5.3) ts-dedent: 2.2.0 transitivePeerDependencies: - supports-color - '@storybook/addon-measure@8.5.3(storybook@8.5.3(prettier@3.4.2))': + '@storybook/addon-measure@8.6.12(storybook@8.6.12(prettier@3.5.3))': dependencies: '@storybook/global': 5.0.0 - storybook: 8.5.3(prettier@3.4.2) + storybook: 8.6.12(prettier@3.5.3) tiny-invariant: 1.3.3 - '@storybook/addon-outline@8.5.3(storybook@8.5.3(prettier@3.4.2))': + '@storybook/addon-outline@8.6.12(storybook@8.6.12(prettier@3.5.3))': dependencies: '@storybook/global': 5.0.0 - storybook: 8.5.3(prettier@3.4.2) + storybook: 8.6.12(prettier@3.5.3) ts-dedent: 2.2.0 - '@storybook/addon-toolbars@8.5.3(storybook@8.5.3(prettier@3.4.2))': + '@storybook/addon-toolbars@8.6.12(storybook@8.6.12(prettier@3.5.3))': dependencies: - storybook: 8.5.3(prettier@3.4.2) + storybook: 8.6.12(prettier@3.5.3) - '@storybook/addon-viewport@8.5.3(storybook@8.5.3(prettier@3.4.2))': + '@storybook/addon-viewport@8.6.12(storybook@8.6.12(prettier@3.5.3))': dependencies: memoizerific: 1.11.3 - storybook: 8.5.3(prettier@3.4.2) + storybook: 8.6.12(prettier@3.5.3) - '@storybook/blocks@8.5.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@8.5.3(prettier@3.4.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.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - storybook: 8.5.3(prettier@3.4.2) + '@storybook/icons': 1.3.0(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: 18.3.1 - react-dom: 18.3.1(react@18.3.1) + react: 19.1.0 + react-dom: 19.1.0(react@19.1.0) - '@storybook/builder-vite@8.5.3(storybook@8.5.3(prettier@3.4.2))(vite@6.1.0(@types/node@22.13.1)(jiti@2.4.2)(terser@5.31.1)(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)(terser@5.31.1)(yaml@2.7.0))': dependencies: - '@storybook/csf-plugin': 8.5.3(storybook@8.5.3(prettier@3.4.2)) + '@storybook/csf-plugin': 8.6.12(storybook@8.6.12(prettier@3.5.3)) browser-assert: 1.2.1 - storybook: 8.5.3(prettier@3.4.2) + storybook: 8.6.12(prettier@3.5.3) ts-dedent: 2.2.0 - vite: 6.1.0(@types/node@22.13.1)(jiti@2.4.2)(terser@5.31.1)(yaml@2.7.0) + vite: 6.2.6(@types/node@22.14.1)(jiti@2.4.2)(terser@5.31.1)(yaml@2.7.0) - '@storybook/components@8.5.3(storybook@8.5.3(prettier@3.4.2))': + '@storybook/components@8.6.12(storybook@8.6.12(prettier@3.5.3))': dependencies: - storybook: 8.5.3(prettier@3.4.2) + storybook: 8.6.12(prettier@3.5.3) - '@storybook/core@8.5.3(prettier@3.4.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 @@ -6158,93 +6145,84 @@ snapshots: jsdoc-type-pratt-parser: 4.1.0 process: 0.11.10 recast: 0.23.9 - semver: 7.6.3 + semver: 7.7.1 util: 0.12.5 ws: 8.18.0 optionalDependencies: - prettier: 3.4.2 + prettier: 3.5.3 transitivePeerDependencies: - bufferutil + - storybook - supports-color - utf-8-validate - '@storybook/csf-plugin@8.5.3(storybook@8.5.3(prettier@3.4.2))': + '@storybook/csf-plugin@8.6.12(storybook@8.6.12(prettier@3.5.3))': dependencies: - storybook: 8.5.3(prettier@3.4.2) + storybook: 8.6.12(prettier@3.5.3) unplugin: 1.11.0 - '@storybook/csf@0.1.11': - dependencies: - type-fest: 2.19.0 - '@storybook/csf@0.1.12': dependencies: type-fest: 2.19.0 '@storybook/global@5.0.0': {} - '@storybook/icons@1.3.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@storybook/icons@1.3.0(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': dependencies: - react: 18.3.1 - react-dom: 18.3.1(react@18.3.1) + react: 19.1.0 + react-dom: 19.1.0(react@19.1.0) - '@storybook/manager-api@8.5.3(storybook@8.5.3(prettier@3.4.2))': + '@storybook/manager-api@8.6.12(storybook@8.6.12(prettier@3.5.3))': dependencies: - storybook: 8.5.3(prettier@3.4.2) + storybook: 8.6.12(prettier@3.5.3) - '@storybook/preview-api@8.5.3(storybook@8.5.3(prettier@3.4.2))': + '@storybook/preview-api@8.6.12(storybook@8.6.12(prettier@3.5.3))': dependencies: - storybook: 8.5.3(prettier@3.4.2) + storybook: 8.6.12(prettier@3.5.3) - '@storybook/react-dom-shim@8.5.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@8.5.3(prettier@3.4.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: 18.3.1 - react-dom: 18.3.1(react@18.3.1) - storybook: 8.5.3(prettier@3.4.2) + react: 19.1.0 + react-dom: 19.1.0(react@19.1.0) + storybook: 8.6.12(prettier@3.5.3) - '@storybook/react-dom-shim@8.5.3(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(storybook@8.5.3(prettier@3.4.2))': + '@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)(terser@5.31.1)(yaml@2.7.0))': dependencies: - react: 19.0.0 - react-dom: 19.0.0(react@19.0.0) - storybook: 8.5.3(prettier@3.4.2) - - '@storybook/react-vite@8.5.3(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(rollup@4.34.6)(storybook@8.5.3(prettier@3.4.2))(typescript@5.7.3)(vite@6.1.0(@types/node@22.13.1)(jiti@2.4.2)(terser@5.31.1)(yaml@2.7.0))': - dependencies: - '@joshwooding/vite-plugin-react-docgen-typescript': 0.4.2(typescript@5.7.3)(vite@6.1.0(@types/node@22.13.1)(jiti@2.4.2)(terser@5.31.1)(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)(terser@5.31.1)(yaml@2.7.0)) '@rollup/pluginutils': 5.1.0(rollup@4.34.6) - '@storybook/builder-vite': 8.5.3(storybook@8.5.3(prettier@3.4.2))(vite@6.1.0(@types/node@22.13.1)(jiti@2.4.2)(terser@5.31.1)(yaml@2.7.0)) - '@storybook/react': 8.5.3(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(storybook@8.5.3(prettier@3.4.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)(terser@5.31.1)(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.0.3 - react-dom: 19.0.0(react@19.0.0) + react-dom: 19.1.0(react@19.1.0) resolve: 1.22.8 - storybook: 8.5.3(prettier@3.4.2) + storybook: 8.6.12(prettier@3.5.3) tsconfig-paths: 4.2.0 - vite: 6.1.0(@types/node@22.13.1)(jiti@2.4.2)(terser@5.31.1)(yaml@2.7.0) + vite: 6.2.6(@types/node@22.14.1)(jiti@2.4.2)(terser@5.31.1)(yaml@2.7.0) transitivePeerDependencies: - rollup - supports-color - typescript - '@storybook/react@8.5.3(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(storybook@8.5.3(prettier@3.4.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.3(storybook@8.5.3(prettier@3.4.2)) + '@storybook/components': 8.6.12(storybook@8.6.12(prettier@3.5.3)) '@storybook/global': 5.0.0 - '@storybook/manager-api': 8.5.3(storybook@8.5.3(prettier@3.4.2)) - '@storybook/preview-api': 8.5.3(storybook@8.5.3(prettier@3.4.2)) - '@storybook/react-dom-shim': 8.5.3(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(storybook@8.5.3(prettier@3.4.2)) - '@storybook/theming': 8.5.3(storybook@8.5.3(prettier@3.4.2)) - react: 19.0.0 - react-dom: 19.0.0(react@19.0.0) - storybook: 8.5.3(prettier@3.4.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.3(storybook@8.5.3(prettier@3.4.2))': + '@storybook/theming@8.6.12(storybook@8.6.12(prettier@3.5.3))': dependencies: - storybook: 8.5.3(prettier@3.4.2) + storybook: 8.6.12(prettier@3.5.3) '@swc/helpers@0.5.15': dependencies: @@ -6271,15 +6249,15 @@ snapshots: lodash: 4.17.21 redent: 3.0.0 - '@testing-library/react@16.2.0(@testing-library/dom@10.2.0)(@types/react-dom@19.0.3(@types/react@19.0.8))(@types/react@19.0.8)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)': + '@testing-library/react@16.3.0(@testing-library/dom@10.2.0)(@types/react-dom@19.1.2(@types/react@19.1.1))(@types/react@19.1.1)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': dependencies: '@babel/runtime': 7.24.7 '@testing-library/dom': 10.2.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.8 - '@types/react-dom': 19.0.3(@types/react@19.0.8) + '@types/react': 19.1.1 + '@types/react-dom': 19.1.2(@types/react@19.1.1) '@testing-library/user-event@14.6.1(@testing-library/dom@10.2.0)': dependencies: @@ -6289,7 +6267,7 @@ snapshots: '@tootallnate/quickjs-emscripten@0.23.0': {} - '@trivago/prettier-plugin-sort-imports@5.2.2(prettier@3.4.2)': + '@trivago/prettier-plugin-sort-imports@5.2.2(prettier@3.5.3)': dependencies: '@babel/generator': 7.26.5 '@babel/parser': 7.26.7 @@ -6297,7 +6275,7 @@ snapshots: '@babel/types': 7.26.7 javascript-natural-sort: 0.7.1 lodash: 4.17.21 - prettier: 3.4.2 + prettier: 3.5.3 transitivePeerDependencies: - supports-color @@ -6313,24 +6291,24 @@ snapshots: '@types/babel__core@7.20.5': dependencies: - '@babel/parser': 7.26.5 - '@babel/types': 7.26.5 + '@babel/parser': 7.26.7 + '@babel/types': 7.26.7 '@types/babel__generator': 7.6.8 '@types/babel__template': 7.4.4 '@types/babel__traverse': 7.20.6 '@types/babel__generator@7.6.8': dependencies: - '@babel/types': 7.26.5 + '@babel/types': 7.26.7 '@types/babel__template@7.4.4': dependencies: - '@babel/parser': 7.26.5 - '@babel/types': 7.26.5 + '@babel/parser': 7.26.7 + '@babel/types': 7.26.7 '@types/babel__traverse@7.20.6': dependencies: - '@babel/types': 7.26.5 + '@babel/types': 7.26.7 '@types/cli-table@0.3.4': {} @@ -6346,7 +6324,7 @@ snapshots: '@types/graceful-fs@4.1.9': dependencies: - '@types/node': 22.13.1 + '@types/node': 22.14.1 '@types/istanbul-lib-coverage@2.0.6': {} @@ -6367,7 +6345,7 @@ snapshots: '@types/jsdom@20.0.1': dependencies: - '@types/node': 22.13.1 + '@types/node': 22.14.1 '@types/tough-cookie': 4.0.5 parse5: 7.1.2 @@ -6389,21 +6367,21 @@ snapshots: '@types/ms@0.7.34': {} - '@types/node@22.13.1': + '@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.3(@types/react@19.0.8)': + '@types/react-dom@19.1.2(@types/react@19.1.1)': dependencies: - '@types/react': 19.0.8 + '@types/react': 19.1.1 '@types/react-transition-group@4.4.10': dependencies: - '@types/react': 19.0.8 + '@types/react': 19.1.1 - '@types/react@19.0.8': + '@types/react@19.1.1': dependencies: csstype: 3.1.3 @@ -6425,78 +6403,64 @@ snapshots: '@types/yauzl@2.10.3': dependencies: - '@types/node': 22.13.1 + '@types/node': 22.14.1 optional: true - '@typescript-eslint/eslint-plugin@8.23.0(@typescript-eslint/parser@8.23.0(eslint@9.20.0(jiti@2.4.2))(typescript@5.7.3))(eslint@9.20.0(jiti@2.4.2))(typescript@5.7.3)': + '@typescript-eslint/eslint-plugin@8.30.0(@typescript-eslint/parser@8.30.0(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.23.0(eslint@9.20.0(jiti@2.4.2))(typescript@5.7.3) - '@typescript-eslint/scope-manager': 8.23.0 - '@typescript-eslint/type-utils': 8.23.0(eslint@9.20.0(jiti@2.4.2))(typescript@5.7.3) - '@typescript-eslint/utils': 8.23.0(eslint@9.20.0(jiti@2.4.2))(typescript@5.7.3) - '@typescript-eslint/visitor-keys': 8.23.0 - eslint: 9.20.0(jiti@2.4.2) + '@typescript-eslint/parser': 8.30.0(eslint@9.24.0(jiti@2.4.2))(typescript@5.8.3) + '@typescript-eslint/scope-manager': 8.30.0 + '@typescript-eslint/type-utils': 8.30.0(eslint@9.24.0(jiti@2.4.2))(typescript@5.8.3) + '@typescript-eslint/utils': 8.30.0(eslint@9.24.0(jiti@2.4.2))(typescript@5.8.3) + '@typescript-eslint/visitor-keys': 8.30.0 + eslint: 9.24.0(jiti@2.4.2) graphemer: 1.4.0 ignore: 5.3.1 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.23.0(eslint@9.20.0(jiti@2.4.2))(typescript@5.7.3)': + '@typescript-eslint/parser@8.30.0(eslint@9.24.0(jiti@2.4.2))(typescript@5.8.3)': dependencies: - '@typescript-eslint/scope-manager': 8.23.0 - '@typescript-eslint/types': 8.23.0 - '@typescript-eslint/typescript-estree': 8.23.0(typescript@5.7.3) - '@typescript-eslint/visitor-keys': 8.23.0 + '@typescript-eslint/scope-manager': 8.30.0 + '@typescript-eslint/types': 8.30.0 + '@typescript-eslint/typescript-estree': 8.30.0(typescript@5.8.3) + '@typescript-eslint/visitor-keys': 8.30.0 debug: 4.4.0 - eslint: 9.20.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.19.0': - dependencies: - '@typescript-eslint/types': 8.19.0 - '@typescript-eslint/visitor-keys': 8.19.0 - '@typescript-eslint/scope-manager@8.23.0': dependencies: '@typescript-eslint/types': 8.23.0 '@typescript-eslint/visitor-keys': 8.23.0 - '@typescript-eslint/type-utils@8.23.0(eslint@9.20.0(jiti@2.4.2))(typescript@5.7.3)': + '@typescript-eslint/scope-manager@8.30.0': dependencies: - '@typescript-eslint/typescript-estree': 8.23.0(typescript@5.7.3) - '@typescript-eslint/utils': 8.23.0(eslint@9.20.0(jiti@2.4.2))(typescript@5.7.3) + '@typescript-eslint/types': 8.30.0 + '@typescript-eslint/visitor-keys': 8.30.0 + + '@typescript-eslint/type-utils@8.30.0(eslint@9.24.0(jiti@2.4.2))(typescript@5.8.3)': + dependencies: + '@typescript-eslint/typescript-estree': 8.30.0(typescript@5.8.3) + '@typescript-eslint/utils': 8.30.0(eslint@9.24.0(jiti@2.4.2))(typescript@5.8.3) debug: 4.4.0 - eslint: 9.20.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.19.0': {} - '@typescript-eslint/types@8.23.0': {} - '@typescript-eslint/typescript-estree@8.19.0(typescript@5.7.3)': - dependencies: - '@typescript-eslint/types': 8.19.0 - '@typescript-eslint/visitor-keys': 8.19.0 - debug: 4.4.0 - fast-glob: 3.3.2 - is-glob: 4.0.3 - minimatch: 9.0.5 - semver: 7.6.3 - ts-api-utils: 1.3.0(typescript@5.7.3) - typescript: 5.7.3 - transitivePeerDependencies: - - supports-color + '@typescript-eslint/types@8.30.0': {} - '@typescript-eslint/typescript-estree@8.23.0(typescript@5.7.3)': + '@typescript-eslint/typescript-estree@8.23.0(typescript@5.8.3)': dependencies: '@typescript-eslint/types': 8.23.0 '@typescript-eslint/visitor-keys': 8.23.0 @@ -6504,555 +6468,588 @@ snapshots: fast-glob: 3.3.3 is-glob: 4.0.3 minimatch: 9.0.5 - semver: 7.6.3 - ts-api-utils: 2.0.1(typescript@5.7.3) - typescript: 5.7.3 + semver: 7.7.1 + ts-api-utils: 2.0.1(typescript@5.8.3) + typescript: 5.8.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/utils@8.19.0(eslint@9.20.0(jiti@2.4.2))(typescript@5.7.3)': + '@typescript-eslint/typescript-estree@8.30.0(typescript@5.8.3)': dependencies: - '@eslint-community/eslint-utils': 4.4.0(eslint@9.20.0(jiti@2.4.2)) - '@typescript-eslint/scope-manager': 8.19.0 - '@typescript-eslint/types': 8.19.0 - '@typescript-eslint/typescript-estree': 8.19.0(typescript@5.7.3) - eslint: 9.20.0(jiti@2.4.2) - typescript: 5.7.3 + '@typescript-eslint/types': 8.30.0 + '@typescript-eslint/visitor-keys': 8.30.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.8.3) + typescript: 5.8.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/utils@8.23.0(eslint@9.20.0(jiti@2.4.2))(typescript@5.7.3)': + '@typescript-eslint/utils@8.23.0(eslint@9.24.0(jiti@2.4.2))(typescript@5.8.3)': dependencies: - '@eslint-community/eslint-utils': 4.4.0(eslint@9.20.0(jiti@2.4.2)) + '@eslint-community/eslint-utils': 4.4.0(eslint@9.24.0(jiti@2.4.2)) '@typescript-eslint/scope-manager': 8.23.0 '@typescript-eslint/types': 8.23.0 - '@typescript-eslint/typescript-estree': 8.23.0(typescript@5.7.3) - eslint: 9.20.0(jiti@2.4.2) - typescript: 5.7.3 + '@typescript-eslint/typescript-estree': 8.23.0(typescript@5.8.3) + eslint: 9.24.0(jiti@2.4.2) + typescript: 5.8.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/visitor-keys@8.19.0': + '@typescript-eslint/utils@8.30.0(eslint@9.24.0(jiti@2.4.2))(typescript@5.8.3)': dependencies: - '@typescript-eslint/types': 8.19.0 - eslint-visitor-keys: 4.2.0 + '@eslint-community/eslint-utils': 4.4.0(eslint@9.24.0(jiti@2.4.2)) + '@typescript-eslint/scope-manager': 8.30.0 + '@typescript-eslint/types': 8.30.0 + '@typescript-eslint/typescript-estree': 8.30.0(typescript@5.8.3) + eslint: 9.24.0(jiti@2.4.2) + typescript: 5.8.3 + transitivePeerDependencies: + - supports-color '@typescript-eslint/visitor-keys@8.23.0': dependencies: '@typescript-eslint/types': 8.23.0 eslint-visitor-keys: 4.2.0 - '@visulima/boxen@1.0.25': {} + '@typescript-eslint/visitor-keys@8.30.0': + dependencies: + '@typescript-eslint/types': 8.30.0 + eslint-visitor-keys: 4.2.0 - '@vitejs/plugin-react@4.3.4(vite@6.1.0(@types/node@22.13.1)(jiti@2.4.2)(terser@5.31.1)(yaml@2.7.0))': + '@visulima/boxen@1.0.30': {} + + '@vitejs/plugin-react@4.3.4(vite@6.2.6(@types/node@22.14.1)(jiti@2.4.2)(terser@5.31.1)(yaml@2.7.0))': dependencies: '@babel/core': 7.26.0 '@babel/plugin-transform-react-jsx-self': 7.25.9(@babel/core@7.26.0) '@babel/plugin-transform-react-jsx-source': 7.25.9(@babel/core@7.26.0) '@types/babel__core': 7.20.5 react-refresh: 0.14.2 - vite: 6.1.0(@types/node@22.13.1)(jiti@2.4.2)(terser@5.31.1)(yaml@2.7.0) + vite: 6.2.6(@types/node@22.14.1)(jiti@2.4.2)(terser@5.31.1)(yaml@2.7.0) transitivePeerDependencies: - supports-color - '@vitest/expect@3.0.5': + '@vitest/expect@3.1.1': dependencies: - '@vitest/spy': 3.0.5 - '@vitest/utils': 3.0.5 - chai: 5.1.2 + '@vitest/spy': 3.1.1 + '@vitest/utils': 3.1.1 + chai: 5.2.0 tinyrainbow: 2.0.0 - '@vitest/mocker@3.0.5(vite@6.1.0(@types/node@22.13.1)(jiti@2.4.2)(terser@5.31.1)(yaml@2.7.0))': + '@vitest/mocker@3.1.1(vite@6.2.6(@types/node@22.14.1)(jiti@2.4.2)(terser@5.31.1)(yaml@2.7.0))': dependencies: - '@vitest/spy': 3.0.5 + '@vitest/spy': 3.1.1 estree-walker: 3.0.3 magic-string: 0.30.17 optionalDependencies: - vite: 6.1.0(@types/node@22.13.1)(jiti@2.4.2)(terser@5.31.1)(yaml@2.7.0) + vite: 6.2.6(@types/node@22.14.1)(jiti@2.4.2)(terser@5.31.1)(yaml@2.7.0) - '@vitest/pretty-format@3.0.5': + '@vitest/pretty-format@3.1.1': dependencies: tinyrainbow: 2.0.0 - '@vitest/runner@3.0.5': + '@vitest/runner@3.1.1': dependencies: - '@vitest/utils': 3.0.5 - pathe: 2.0.2 + '@vitest/utils': 3.1.1 + pathe: 2.0.3 - '@vitest/snapshot@3.0.5': + '@vitest/snapshot@3.1.1': dependencies: - '@vitest/pretty-format': 3.0.5 + '@vitest/pretty-format': 3.1.1 magic-string: 0.30.17 - pathe: 2.0.2 + pathe: 2.0.3 - '@vitest/spy@3.0.5': + '@vitest/spy@3.1.1': dependencies: tinyspy: 3.0.2 - '@vitest/utils@3.0.5': + '@vitest/utils@3.1.1': dependencies: - '@vitest/pretty-format': 3.0.5 - loupe: 3.1.2 + '@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: {} @@ -7081,11 +7078,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 @@ -7093,16 +7085,16 @@ snapshots: json-schema-traverse: 0.4.1 uri-js: 4.4.1 - allotment@1.20.2(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: @@ -7352,9 +7344,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.2 node-eval: 2.0.0 cac@6.7.14: {} @@ -7364,6 +7356,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 @@ -7376,6 +7373,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@5.3.1: {} @@ -7386,7 +7388,7 @@ snapshots: ccount@2.0.1: {} - chai@5.1.2: + chai@5.2.0: dependencies: assertion-error: 2.0.1 check-error: 2.1.1 @@ -7430,11 +7432,11 @@ snapshots: optionalDependencies: fsevents: 2.3.3 - chromium-bidi@1.2.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.1 + zod: 3.24.2 ci-info@3.9.0: {} @@ -7442,8 +7444,6 @@ snapshots: classnames@2.5.1: {} - clean-stack@2.2.0: {} - cli-cursor@5.0.0: dependencies: restore-cursor: 5.1.0 @@ -7519,22 +7519,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.0 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.1)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@types/node@22.13.1)(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.1)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@types/node@22.13.1)(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: @@ -7663,7 +7663,7 @@ snapshots: dependencies: dequal: 2.0.3 - devtools-protocol@0.0.1402036: {} + devtools-protocol@0.0.1425554: {} diff-sequences@29.6.3: {} @@ -7718,7 +7718,7 @@ snapshots: dependencies: once: 1.4.0 - enhanced-resolve@5.18.0: + enhanced-resolve@5.18.1: dependencies: graceful-fs: 4.2.11 tapable: 2.2.1 @@ -7820,6 +7820,10 @@ snapshots: dependencies: es-errors: 1.3.0 + es-object-atoms@1.1.1: + dependencies: + es-errors: 1.3.0 + es-set-tostringtag@2.1.0: dependencies: es-errors: 1.3.0 @@ -7844,32 +7848,6 @@ snapshots: transitivePeerDependencies: - supports-color - esbuild@0.20.2: - 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 @@ -7898,6 +7876,34 @@ snapshots: '@esbuild/win32-ia32': 0.24.2 '@esbuild/win32-x64': 0.24.2 + esbuild@0.25.2: + optionalDependencies: + '@esbuild/aix-ppc64': 0.25.2 + '@esbuild/android-arm': 0.25.2 + '@esbuild/android-arm64': 0.25.2 + '@esbuild/android-x64': 0.25.2 + '@esbuild/darwin-arm64': 0.25.2 + '@esbuild/darwin-x64': 0.25.2 + '@esbuild/freebsd-arm64': 0.25.2 + '@esbuild/freebsd-x64': 0.25.2 + '@esbuild/linux-arm': 0.25.2 + '@esbuild/linux-arm64': 0.25.2 + '@esbuild/linux-ia32': 0.25.2 + '@esbuild/linux-loong64': 0.25.2 + '@esbuild/linux-mips64el': 0.25.2 + '@esbuild/linux-ppc64': 0.25.2 + '@esbuild/linux-riscv64': 0.25.2 + '@esbuild/linux-s390x': 0.25.2 + '@esbuild/linux-x64': 0.25.2 + '@esbuild/netbsd-arm64': 0.25.2 + '@esbuild/netbsd-x64': 0.25.2 + '@esbuild/openbsd-arm64': 0.25.2 + '@esbuild/openbsd-x64': 0.25.2 + '@esbuild/sunos-x64': 0.25.2 + '@esbuild/win32-arm64': 0.25.2 + '@esbuild/win32-ia32': 0.25.2 + '@esbuild/win32-x64': 0.25.2 + escalade@3.1.2: {} escalade@3.2.0: {} @@ -7926,12 +7932,12 @@ snapshots: transitivePeerDependencies: - supports-color - eslint-module-utils@2.12.0(@typescript-eslint/parser@8.23.0(eslint@9.20.0(jiti@2.4.2))(typescript@5.7.3))(eslint-import-resolver-node@0.3.9)(eslint@9.20.0(jiti@2.4.2)): + eslint-module-utils@2.12.0(@typescript-eslint/parser@8.30.0(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.23.0(eslint@9.20.0(jiti@2.4.2))(typescript@5.7.3) - eslint: 9.20.0(jiti@2.4.2) + '@typescript-eslint/parser': 8.30.0(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 @@ -7940,7 +7946,7 @@ snapshots: dependencies: requireindex: 1.1.0 - eslint-plugin-import@2.31.0(@typescript-eslint/parser@8.23.0(eslint@9.20.0(jiti@2.4.2))(typescript@5.7.3))(eslint@9.20.0(jiti@2.4.2)): + eslint-plugin-import@2.31.0(@typescript-eslint/parser@8.30.0(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 @@ -7949,9 +7955,9 @@ snapshots: array.prototype.flatmap: 1.3.3 debug: 3.2.7 doctrine: 2.1.0 - eslint: 9.20.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.23.0(eslint@9.20.0(jiti@2.4.2))(typescript@5.7.3))(eslint-import-resolver-node@0.3.9)(eslint@9.20.0(jiti@2.4.2)) + eslint-module-utils: 2.12.0(@typescript-eslint/parser@8.30.0(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.15.1 is-glob: 4.0.3 @@ -7963,17 +7969,17 @@ snapshots: string.prototype.trimend: 1.0.9 tsconfig-paths: 3.15.0 optionalDependencies: - '@typescript-eslint/parser': 8.23.0(eslint@9.20.0(jiti@2.4.2))(typescript@5.7.3) + '@typescript-eslint/parser': 8.30.0(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.20.0(jiti@2.4.2)): + eslint-plugin-react-hooks@5.2.0(eslint@9.24.0(jiti@2.4.2)): dependencies: - eslint: 9.20.0(jiti@2.4.2) + eslint: 9.24.0(jiti@2.4.2) - eslint-plugin-react@7.37.4(eslint@9.20.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 @@ -7981,12 +7987,12 @@ snapshots: array.prototype.tosorted: 1.1.4 doctrine: 2.1.0 es-iterator-helpers: 1.2.1 - eslint: 9.20.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 @@ -7995,17 +8001,17 @@ snapshots: string.prototype.matchall: 4.0.12 string.prototype.repeat: 1.0.0 - eslint-plugin-storybook@0.11.2(eslint@9.20.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.11 - '@typescript-eslint/utils': 8.19.0(eslint@9.20.0(jiti@2.4.2))(typescript@5.7.3) - eslint: 9.20.0(jiti@2.4.2) + '@storybook/csf': 0.1.12 + '@typescript-eslint/utils': 8.23.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 transitivePeerDependencies: - supports-color - typescript - eslint-scope@8.2.0: + eslint-scope@8.3.0: dependencies: esrecurse: 4.3.0 estraverse: 5.3.0 @@ -8014,18 +8020,19 @@ snapshots: eslint-visitor-keys@4.2.0: {} - eslint@9.20.0(jiti@2.4.2): + eslint@9.24.0(jiti@2.4.2): dependencies: - '@eslint-community/eslint-utils': 4.4.0(eslint@9.20.0(jiti@2.4.2)) + '@eslint-community/eslint-utils': 4.4.0(eslint@9.24.0(jiti@2.4.2)) '@eslint-community/regexpp': 4.12.1 - '@eslint/config-array': 0.19.1 - '@eslint/core': 0.11.0 - '@eslint/eslintrc': 3.2.0 - '@eslint/js': 9.20.0 - '@eslint/plugin-kit': 0.2.5 + '@eslint/config-array': 0.20.0 + '@eslint/config-helpers': 0.2.1 + '@eslint/core': 0.12.0 + '@eslint/eslintrc': 3.3.1 + '@eslint/js': 9.24.0 + '@eslint/plugin-kit': 0.2.8 '@humanfs/node': 0.16.6 '@humanwhocodes/module-importer': 1.0.1 - '@humanwhocodes/retry': 0.4.1 + '@humanwhocodes/retry': 0.4.2 '@types/estree': 1.0.6 '@types/json-schema': 7.0.15 ajv: 6.12.6 @@ -8033,7 +8040,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.5.0 @@ -8109,7 +8116,7 @@ snapshots: exit@0.1.2: {} - expect-type@1.1.0: {} + expect-type@1.2.1: {} expect@29.7.0: dependencies: @@ -8135,14 +8142,6 @@ snapshots: fast-fifo@1.3.2: {} - fast-glob@3.3.2: - dependencies: - '@nodelib/fs.stat': 2.0.5 - '@nodelib/fs.walk': 1.2.8 - glob-parent: 5.1.2 - merge2: 1.4.1 - micromatch: 4.0.8 - fast-glob@3.3.3: dependencies: '@nodelib/fs.stat': 2.0.5 @@ -8155,6 +8154,8 @@ snapshots: fast-levenshtein@2.0.6: {} + fast-safe-stringify@2.1.1: {} + fast-shallow-equal@1.0.0: {} fastest-stable-stringify@2.0.2: {} @@ -8268,6 +8269,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: @@ -8605,7 +8619,7 @@ snapshots: istanbul-lib-instrument@5.2.1: dependencies: '@babel/core': 7.26.0 - '@babel/parser': 7.26.5 + '@babel/parser': 7.26.7 '@istanbuljs/schema': 0.1.3 istanbul-lib-coverage: 3.2.2 semver: 6.3.1 @@ -8618,7 +8632,7 @@ snapshots: '@babel/parser': 7.26.5 '@istanbuljs/schema': 0.1.3 istanbul-lib-coverage: 3.2.2 - semver: 7.6.3 + semver: 7.7.1 transitivePeerDependencies: - supports-color @@ -8670,7 +8684,7 @@ snapshots: '@jest/expect': 29.7.0 '@jest/test-result': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 22.13.1 + '@types/node': 22.14.1 chalk: 4.1.2 co: 4.6.0 dedent: 1.5.3(babel-plugin-macros@3.1.0) @@ -8690,16 +8704,16 @@ snapshots: - babel-plugin-macros - supports-color - jest-cli@29.7.0(@types/node@22.13.1)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@types/node@22.13.1)(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.1)(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.1)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@types/node@22.13.1)(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.1.0 - jest-config: 29.7.0(@types/node@22.13.1)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@types/node@22.13.1)(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 @@ -8709,7 +8723,7 @@ snapshots: - supports-color - ts-node - jest-config@29.7.0(@types/node@22.13.1)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@types/node@22.13.1)(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.0 '@jest/test-sequencer': 29.7.0 @@ -8734,8 +8748,8 @@ snapshots: slash: 3.0.0 strip-json-comments: 3.1.1 optionalDependencies: - '@types/node': 22.13.1 - ts-node: 10.9.2(@types/node@22.13.1)(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 @@ -8765,7 +8779,7 @@ snapshots: '@jest/fake-timers': 29.7.0 '@jest/types': 29.6.3 '@types/jsdom': 20.0.1 - '@types/node': 22.13.1 + '@types/node': 22.14.1 jest-mock: 29.7.0 jest-util: 29.7.0 jsdom: 20.0.3 @@ -8779,7 +8793,7 @@ snapshots: '@jest/environment': 29.7.0 '@jest/fake-timers': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 22.13.1 + '@types/node': 22.14.1 jest-mock: 29.7.0 jest-util: 29.7.0 @@ -8789,7 +8803,7 @@ snapshots: dependencies: '@jest/types': 29.6.3 '@types/graceful-fs': 4.1.9 - '@types/node': 22.13.1 + '@types/node': 22.14.1 anymatch: 3.1.3 fb-watchman: 2.0.2 graceful-fs: 4.2.11 @@ -8828,7 +8842,7 @@ snapshots: jest-mock@29.7.0: dependencies: '@jest/types': 29.6.3 - '@types/node': 22.13.1 + '@types/node': 22.14.1 jest-util: 29.7.0 jest-pnp-resolver@1.2.3(jest-resolve@29.7.0): @@ -8863,7 +8877,7 @@ snapshots: '@jest/test-result': 29.7.0 '@jest/transform': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 22.13.1 + '@types/node': 22.14.1 chalk: 4.1.2 emittery: 0.13.1 graceful-fs: 4.2.11 @@ -8891,7 +8905,7 @@ snapshots: '@jest/test-result': 29.7.0 '@jest/transform': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 22.13.1 + '@types/node': 22.14.1 chalk: 4.1.2 cjs-module-lexer: 1.3.1 collect-v8-coverage: 1.0.2 @@ -8930,14 +8944,14 @@ snapshots: jest-util: 29.7.0 natural-compare: 1.4.0 pretty-format: 29.7.0 - semver: 7.6.3 + semver: 7.7.1 transitivePeerDependencies: - supports-color jest-util@29.7.0: dependencies: '@jest/types': 29.6.3 - '@types/node': 22.13.1 + '@types/node': 22.14.1 chalk: 4.1.2 ci-info: 3.9.0 graceful-fs: 4.2.11 @@ -8956,7 +8970,7 @@ snapshots: dependencies: '@jest/test-result': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 22.13.1 + '@types/node': 22.14.1 ansi-escapes: 4.3.2 chalk: 4.1.2 emittery: 0.13.1 @@ -8965,17 +8979,17 @@ snapshots: jest-worker@29.7.0: dependencies: - '@types/node': 22.13.1 + '@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.1)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@types/node@22.13.1)(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.1)(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.1.0 - jest-cli: 29.7.0(@types/node@22.13.1)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@types/node@22.13.1)(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 @@ -9069,13 +9083,12 @@ snapshots: kleur@3.0.3: {} - knip@5.43.6(@types/node@22.13.1)(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.1 + '@nodelib/fs.walk': 1.2.8 + '@types/node': 22.14.1 easy-table: 1.2.0 - enhanced-resolve: 5.18.0 + enhanced-resolve: 5.18.1 fast-glob: 3.3.3 jiti: 2.4.2 js-yaml: 4.1.0 @@ -9085,10 +9098,9 @@ snapshots: pretty-ms: 9.0.0 smol-toml: 1.3.1 strip-json-comments: 5.0.1 - summary: 2.1.0 - typescript: 5.7.3 - zod: 3.24.1 - zod-validation-error: 3.0.3(zod@3.24.1) + typescript: 5.8.3 + zod: 3.24.2 + zod-validation-error: 3.0.3(zod@3.24.2) leven@3.1.0: {} @@ -9101,7 +9113,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 @@ -9163,6 +9175,8 @@ snapshots: loupe@3.1.2: {} + loupe@3.1.3: {} + lru-cache@10.4.3: {} lru-cache@5.1.1: @@ -9183,7 +9197,7 @@ snapshots: make-dir@4.0.0: dependencies: - semver: 7.6.3 + semver: 7.7.1 make-error@1.3.6: {} @@ -9547,15 +9561,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.2 @@ -9566,10 +9580,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: {} @@ -9589,7 +9603,7 @@ snapshots: normalize-path@3.0.0: {} - npm-check-updates@17.1.14: {} + npm-check-updates@17.1.18: {} npm-run-path@4.0.1: dependencies: @@ -9616,11 +9630,12 @@ 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.0.0 + es-object-atoms: 1.1.1 object.fromentries@2.0.8: dependencies: @@ -9695,10 +9710,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: @@ -9759,7 +9770,7 @@ snapshots: path-type@5.0.0: {} - pathe@2.0.2: {} + pathe@2.0.3: {} pathval@2.0.0: {} @@ -9781,11 +9792,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 @@ -9795,7 +9806,7 @@ snapshots: possible-typed-array-names@1.0.0: {} - postcss@8.5.1: + postcss@8.5.3: dependencies: nanoid: 3.3.8 picocolors: 1.1.1 @@ -9805,7 +9816,7 @@ snapshots: prettier@3.3.3: {} - prettier@3.4.2: {} + prettier@3.5.3: {} pretty-format@27.5.1: dependencies: @@ -9868,26 +9879,26 @@ snapshots: punycode@2.3.1: {} - puppeteer-core@24.2.0: + puppeteer-core@24.6.1: dependencies: - '@puppeteer/browsers': 2.7.1 - chromium-bidi: 1.2.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: - bufferutil - supports-color - utf-8-validate - puppeteer@24.2.0(typescript@5.7.3): + puppeteer@24.6.1(typescript@5.8.3): dependencies: - '@puppeteer/browsers': 2.7.1 - chromium-bidi: 1.2.0(devtools-protocol@0.0.1402036) - cosmiconfig: 9.0.0(typescript@5.7.3) - devtools-protocol: 0.0.1402036 - puppeteer-core: 24.2.0 + '@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: - bufferutil @@ -9903,9 +9914,9 @@ snapshots: queue-tick@1.0.1: {} - 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.0.3: dependencies: @@ -9922,25 +9933,19 @@ snapshots: transitivePeerDependencies: - supports-color - react-dom@18.3.1(react@18.3.1): + react-dom@19.1.0(react@19.1.0): dependencies: - loose-envify: 1.4.0 - react: 18.3.1 - scheduler: 0.23.2 + react: 19.1.0 + scheduler: 0.26.0 - react-dom@19.0.0(react@19.0.0): - dependencies: - react: 19.0.0 - scheduler: 0.25.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.24.7 - react: 19.0.0 + react: 19.1.0 - react-icons@5.4.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: {} @@ -9948,58 +9953,58 @@ 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.1.5(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.1.5(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.1.5(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.8)(react-dom@19.0.0(react@19.0.0))(react@19.0.0): + react-select@5.10.1(@types/react@19.1.1)(react-dom@19.1.0(react@19.1.0))(react@19.1.0): dependencies: '@babel/runtime': 7.24.7 '@emotion/cache': 11.14.0 - '@emotion/react': 11.14.0(@types/react@19.0.8)(react@19.0.0) + '@emotion/react': 11.14.0(@types/react@19.1.1)(react@19.1.0) '@floating-ui/dom': 1.6.12 '@types/react-transition-group': 4.4.10 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.8)(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.1)(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-transition-group@4.4.5(react-dom@19.1.0(react@19.1.0))(react@19.1.0): dependencies: '@babel/runtime': 7.24.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 @@ -10007,10 +10012,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 @@ -10018,11 +10023,7 @@ snapshots: ts-easing: 0.2.0 tslib: 2.8.1 - react@18.3.1: - dependencies: - loose-envify: 1.4.0 - - react@19.0.0: {} + react@19.1.0: {} readdirp@3.6.0: dependencies: @@ -10186,11 +10187,7 @@ snapshots: dependencies: xmlchars: 2.2.0 - scheduler@0.23.2: - dependencies: - loose-envify: 1.4.0 - - scheduler@0.25.0: {} + scheduler@0.26.0: {} screenfull@5.2.0: {} @@ -10198,8 +10195,6 @@ snapshots: semver@6.3.1: {} - semver@7.6.3: {} - semver@7.7.1: {} set-cookie-parser@2.7.1: {} @@ -10347,13 +10342,13 @@ snapshots: stack-generator: 2.0.10 stacktrace-gps: 3.1.2 - std-env@3.8.0: {} + std-env@3.9.0: {} - storybook@8.5.3(prettier@3.4.2): + storybook@8.6.12(prettier@3.5.3): dependencies: - '@storybook/core': 8.5.3(prettier@3.4.2) + '@storybook/core': 8.6.12(prettier@3.5.3)(storybook@8.6.12(prettier@3.5.3)) optionalDependencies: - prettier: 3.4.2 + prettier: 3.5.3 transitivePeerDependencies: - bufferutil - supports-color @@ -10478,8 +10473,6 @@ snapshots: pirates: 4.0.6 ts-interface-checker: 0.1.13 - summary@2.1.0: {} - supports-color@5.5.0: dependencies: has-flag: 3.0.0 @@ -10573,13 +10566,9 @@ snapshots: trough@2.2.0: {} - ts-api-utils@1.3.0(typescript@5.7.3): + ts-api-utils@2.0.1(typescript@5.8.3): dependencies: - typescript: 5.7.3 - - ts-api-utils@2.0.1(typescript@5.7.3): - dependencies: - typescript: 5.7.3 + typescript: 5.8.3 ts-dedent@2.2.0: {} @@ -10587,21 +10576,21 @@ snapshots: ts-interface-checker@0.1.13: {} - ts-node@10.9.2(@types/node@22.13.1)(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.1 + '@types/node': 22.14.1 acorn: 8.12.0 acorn-walk: 8.3.3 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 @@ -10667,7 +10656,7 @@ snapshots: typed-query-selector@2.12.0: {} - typescript@5.7.3: {} + typescript@5.8.3: {} unbox-primitive@1.1.0: dependencies: @@ -10676,7 +10665,7 @@ snapshots: has-symbols: 1.1.0 which-boxed-primitive: 1.1.1 - undici-types@6.20.0: {} + undici-types@6.21.0: {} unicorn-magic@0.1.0: {} @@ -10737,21 +10726,21 @@ snapshots: querystringify: 2.2.0 requires-port: 1.0.0 - use-isomorphic-layout-effect@1.2.0(@types/react@19.0.8)(react@19.0.0): + use-isomorphic-layout-effect@1.2.0(@types/react@19.1.1)(react@19.1.0): dependencies: - react: 19.0.0 + react: 19.1.0 optionalDependencies: - '@types/react': 19.0.8 + '@types/react': 19.1.1 - 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) - use-sync-external-store@1.2.2(react@19.0.0): + use-sync-external-store@1.2.2(react@19.1.0): dependencies: - react: 19.0.0 + react: 19.1.0 optional: true util@0.12.5: @@ -10783,13 +10772,13 @@ snapshots: unist-util-stringify-position: 4.0.0 vfile-message: 4.0.2 - vite-node@3.0.5(@types/node@22.13.1)(jiti@2.4.2)(terser@5.31.1)(yaml@2.7.0): + vite-node@3.1.1(@types/node@22.14.1)(jiti@2.4.2)(terser@5.31.1)(yaml@2.7.0): dependencies: cac: 6.7.14 debug: 4.4.0 es-module-lexer: 1.6.0 - pathe: 2.0.2 - vite: 6.1.0(@types/node@22.13.1)(jiti@2.4.2)(terser@5.31.1)(yaml@2.7.0) + pathe: 2.0.3 + vite: 6.2.6(@types/node@22.14.1)(jiti@2.4.2)(terser@5.31.1)(yaml@2.7.0) transitivePeerDependencies: - '@types/node' - jiti @@ -10804,43 +10793,43 @@ snapshots: - tsx - yaml - vite@6.1.0(@types/node@22.13.1)(jiti@2.4.2)(terser@5.31.1)(yaml@2.7.0): + vite@6.2.6(@types/node@22.14.1)(jiti@2.4.2)(terser@5.31.1)(yaml@2.7.0): dependencies: - esbuild: 0.24.2 - postcss: 8.5.1 + esbuild: 0.25.2 + postcss: 8.5.3 rollup: 4.34.6 optionalDependencies: - '@types/node': 22.13.1 + '@types/node': 22.14.1 fsevents: 2.3.3 jiti: 2.4.2 terser: 5.31.1 yaml: 2.7.0 - vitest@3.0.5(@types/debug@4.1.12)(@types/node@22.13.1)(jiti@2.4.2)(jsdom@20.0.3)(terser@5.31.1)(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)(terser@5.31.1)(yaml@2.7.0): dependencies: - '@vitest/expect': 3.0.5 - '@vitest/mocker': 3.0.5(vite@6.1.0(@types/node@22.13.1)(jiti@2.4.2)(terser@5.31.1)(yaml@2.7.0)) - '@vitest/pretty-format': 3.0.5 - '@vitest/runner': 3.0.5 - '@vitest/snapshot': 3.0.5 - '@vitest/spy': 3.0.5 - '@vitest/utils': 3.0.5 - chai: 5.1.2 + '@vitest/expect': 3.1.1 + '@vitest/mocker': 3.1.1(vite@6.2.6(@types/node@22.14.1)(jiti@2.4.2)(terser@5.31.1)(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.2 - std-env: 3.8.0 + pathe: 2.0.3 + std-env: 3.9.0 tinybench: 2.9.0 tinyexec: 0.3.2 tinypool: 1.0.2 tinyrainbow: 2.0.0 - vite: 6.1.0(@types/node@22.13.1)(jiti@2.4.2)(terser@5.31.1)(yaml@2.7.0) - vite-node: 3.0.5(@types/node@22.13.1)(jiti@2.4.2)(terser@5.31.1)(yaml@2.7.0) + vite: 6.2.6(@types/node@22.14.1)(jiti@2.4.2)(terser@5.31.1)(yaml@2.7.0) + vite-node: 3.1.1(@types/node@22.14.1)(jiti@2.4.2)(terser@5.31.1)(yaml@2.7.0) why-is-node-running: 2.3.0 optionalDependencies: '@types/debug': 4.1.12 - '@types/node': 22.13.1 + '@types/node': 22.14.1 jsdom: 20.0.3 transitivePeerDependencies: - jiti @@ -10968,6 +10957,8 @@ snapshots: ws@8.18.0: {} + ws@8.18.1: {} + xml-name-validator@4.0.0: {} xmlchars@2.2.0: {} @@ -11001,16 +10992,16 @@ snapshots: yocto-queue@0.1.0: {} - zod-validation-error@3.0.3(zod@3.24.1): + zod-validation-error@3.0.3(zod@3.24.2): dependencies: - zod: 3.24.1 + zod: 3.24.2 - zod@3.24.1: {} + zod@3.24.2: {} - zustand@5.0.3(@types/react@19.0.8)(react@19.0.0)(use-sync-external-store@1.2.2(react@19.0.0)): + zustand@5.0.3(@types/react@19.1.1)(react@19.1.0)(use-sync-external-store@1.2.2(react@19.1.0)): optionalDependencies: - '@types/react': 19.0.8 - react: 19.0.0 - use-sync-external-store: 1.2.2(react@19.0.0) + '@types/react': 19.1.1 + react: 19.1.0 + use-sync-external-store: 1.2.2(react@19.1.0) zwitch@2.0.4: {} diff --git a/front/src/back-api/api/application-resource.ts b/front/src/back-api/api/application-resource.ts index 2238e79..4a49937 100644 --- a/front/src/back-api/api/application-resource.ts +++ b/front/src/back-api/api/application-resource.ts @@ -11,10 +11,11 @@ import { import { z as zod } from "zod" import { - AddUserDataWrite, + AddUserData, Application, + ApplicationCreate, ApplicationSmall, - ApplicationWrite, + ApplicationUpdate, ClientToken, Long, RightDescription, @@ -37,7 +38,7 @@ export namespace ApplicationResource { params: { id: Long, }, - data: AddUserDataWrite, + data: AddUserData, }): Promise { return RESTRequestVoid({ restModel: { @@ -55,7 +56,7 @@ export namespace ApplicationResource { data, }: { restConfig: RESTConfig, - data: ApplicationWrite, + data: ApplicationCreate, }): Promise { return RESTRequestJson({ restModel: { @@ -256,12 +257,12 @@ export namespace ApplicationResource { params: { id: Long, }, - data: ApplicationWrite, + data: ApplicationUpdate, }): Promise { return RESTRequestJson({ restModel: { endPoint: "/application/{id}", - requestType: HTTPRequestModel.PATCH, + requestType: HTTPRequestModel.PUT, contentType: HTTPMimeType.JSON, accept: HTTPMimeType.JSON, }, diff --git a/front/src/back-api/api/application-token-resource.ts b/front/src/back-api/api/application-token-resource.ts index 4bbd09b..bb84b85 100644 --- a/front/src/back-api/api/application-token-resource.ts +++ b/front/src/back-api/api/application-token-resource.ts @@ -12,7 +12,7 @@ import { import { z as zod } from "zod" import { ApplicationToken, - CreateTokenRequestWrite, + CreateTokenRequest, Integer, Long, ZodApplicationToken, @@ -30,7 +30,7 @@ export namespace ApplicationTokenResource { params: { applicationId: Long, }, - data: CreateTokenRequestWrite, + data: CreateTokenRequest, }): Promise { return RESTRequestJson({ restModel: { 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/right-resource.ts b/front/src/back-api/api/right-resource.ts index a514064..13a871c 100644 --- a/front/src/back-api/api/right-resource.ts +++ b/front/src/back-api/api/right-resource.ts @@ -13,7 +13,8 @@ import { z as zod } from "zod" import { Long, Right, - RightWrite, + RightCreate, + RightUpdate, ZodRight, isRight, } from "../model"; @@ -76,12 +77,12 @@ export namespace RightResource { params: { id: Long, }, - data: RightWrite, + data: RightUpdate, }): Promise { return RESTRequestJson({ restModel: { endPoint: "/right/{id}", - requestType: HTTPRequestModel.PATCH, + requestType: HTTPRequestModel.PUT, contentType: HTTPMimeType.JSON, accept: HTTPMimeType.JSON, }, @@ -95,7 +96,7 @@ export namespace RightResource { data, }: { restConfig: RESTConfig, - data: RightWrite, + data: RightCreate, }): Promise { return RESTRequestJson({ restModel: { diff --git a/front/src/back-api/api/system-config-resource.ts b/front/src/back-api/api/system-config-resource.ts index 39d2b6a..7ea3973 100644 --- a/front/src/back-api/api/system-config-resource.ts +++ b/front/src/back-api/api/system-config-resource.ts @@ -78,7 +78,7 @@ export namespace SystemConfigResource { return RESTRequestVoid({ restModel: { endPoint: "/system_config/key/{key}", - requestType: HTTPRequestModel.PATCH, + requestType: HTTPRequestModel.PUT, contentType: HTTPMimeType.JSON, }, restConfig, diff --git a/front/src/back-api/api/user-resource.ts b/front/src/back-api/api/user-resource.ts index 874e378..2a89279 100644 --- a/front/src/back-api/api/user-resource.ts +++ b/front/src/back-api/api/user-resource.ts @@ -11,14 +11,14 @@ import { import { z as zod } from "zod" import { - ChangePasswordWrite, - DataGetTokenWrite, + ChangePassword, + DataGetToken, GetToken, Long, PartRight, UserAuth, UserAuthGet, - UserCreateWrite, + UserCreate, UserOut, ZodPartRight, ZodUserAuthGet, @@ -35,7 +35,7 @@ export namespace UserResource { data, }: { restConfig: RESTConfig, - data: ChangePasswordWrite, + data: ChangePassword, }): Promise { return RESTRequestVoid({ restModel: { @@ -52,7 +52,7 @@ export namespace UserResource { data, }: { restConfig: RESTConfig, - data: UserCreateWrite, + data: UserCreate, }): Promise { return RESTRequestJson({ restModel: { @@ -137,7 +137,7 @@ export namespace UserResource { data, }: { restConfig: RESTConfig, - data: DataGetTokenWrite, + data: DataGetToken, }): Promise { return RESTRequestJson({ restModel: { @@ -263,7 +263,7 @@ export namespace UserResource { applicationId: Long, userId: Long, }, - data: {[key: string]: PartRight;}, + data: {[key: Partial]: PartRight;}, }): Promise { return RESTRequestJson({ restModel: { diff --git a/front/src/back-api/model/add-user-data.ts b/front/src/back-api/model/add-user-data.ts index 4a896b4..eae6536 100644 --- a/front/src/back-api/model/add-user-data.ts +++ b/front/src/back-api/model/add-user-data.ts @@ -21,19 +21,3 @@ export function isAddUserData(data: any): data is AddUserData { return false; } } -export const ZodAddUserDataWrite = zod.object({ - userId: ZodLong.nullable().optional(), - -}); - -export type AddUserDataWrite = zod.infer; - -export function isAddUserDataWrite(data: any): data is AddUserDataWrite { - try { - ZodAddUserDataWrite.parse(data); - return true; - } catch (e: any) { - console.log(`Fail to parse data type='ZodAddUserDataWrite' error=${e}`); - return false; - } -} diff --git a/front/src/back-api/model/application-small.ts b/front/src/back-api/model/application-small.ts index 9bb9919..1222a2a 100644 --- a/front/src/back-api/model/application-small.ts +++ b/front/src/back-api/model/application-small.ts @@ -24,22 +24,3 @@ export function isApplicationSmall(data: any): data is ApplicationSmall { return false; } } -export const ZodApplicationSmallWrite = zod.object({ - id: ZodLong.nullable().optional(), - name: zod.string().nullable().optional(), - description: zod.string().nullable().optional(), - redirect: zod.string().nullable().optional(), - -}); - -export type ApplicationSmallWrite = zod.infer; - -export function isApplicationSmallWrite(data: any): data is ApplicationSmallWrite { - try { - ZodApplicationSmallWrite.parse(data); - return true; - } catch (e: any) { - console.log(`Fail to parse data type='ZodApplicationSmallWrite' error=${e}`); - return false; - } -} diff --git a/front/src/back-api/model/application-token.ts b/front/src/back-api/model/application-token.ts index de173c3..21927f2 100644 --- a/front/src/back-api/model/application-token.ts +++ b/front/src/back-api/model/application-token.ts @@ -3,7 +3,7 @@ */ import { z as zod } from "zod"; -import {ZodGenericToken, ZodGenericTokenWrite } from "./generic-token"; +import {ZodGenericToken} from "./generic-token"; export const ZodApplicationToken = ZodGenericToken; @@ -18,16 +18,3 @@ export function isApplicationToken(data: any): data is ApplicationToken { return false; } } -export const ZodApplicationTokenWrite = ZodGenericTokenWrite; - -export type ApplicationTokenWrite = zod.infer; - -export function isApplicationTokenWrite(data: any): data is ApplicationTokenWrite { - try { - ZodApplicationTokenWrite.parse(data); - return true; - } catch (e: any) { - console.log(`Fail to parse data type='ZodApplicationTokenWrite' error=${e}`); - return false; - } -} diff --git a/front/src/back-api/model/application.ts b/front/src/back-api/model/application.ts index 17f1802..2da2b8a 100644 --- a/front/src/back-api/model/application.ts +++ b/front/src/back-api/model/application.ts @@ -3,15 +3,16 @@ */ import { z as zod } from "zod"; +import {ZodLong} from "./long"; import {ZodInteger} from "./integer"; -import {ZodGenericDataSoftDelete, ZodGenericDataSoftDeleteWrite } from "./generic-data-soft-delete"; +import {ZodGenericDataSoftDelete, ZodGenericDataSoftDeleteUpdate , ZodGenericDataSoftDeleteCreate } from "./generic-data-soft-delete"; export const ZodApplication = ZodGenericDataSoftDelete.extend({ - name: zod.string().optional(), - description: zod.string().optional(), - redirect: zod.string(), - redirectDev: zod.string().optional(), - notification: zod.string().optional(), + name: zod.string().min(1).max(256).optional(), + description: zod.string().min(1).max(2048).optional(), + redirect: zod.string().min(1).max(2048), + redirectDev: zod.string().min(1).max(2048).optional(), + notification: zod.string().min(1).max(2048).optional(), /** * Expiration time */ @@ -20,6 +21,7 @@ export const ZodApplication = ZodGenericDataSoftDelete.extend({ * Right is manage with Karso */ manageRight: zod.boolean(), + users: zod.array(ZodLong), }); @@ -34,31 +36,61 @@ export function isApplication(data: any): data is Application { return false; } } -export const ZodApplicationWrite = ZodGenericDataSoftDeleteWrite.extend({ - name: zod.string().nullable().optional(), - description: zod.string().nullable().optional(), - redirect: zod.string().optional(), - redirectDev: zod.string().nullable().optional(), - notification: zod.string().nullable().optional(), +export const ZodApplicationUpdate = ZodGenericDataSoftDeleteUpdate.extend({ + name: zod.string().min(1).max(256).nullable().optional(), + description: zod.string().min(1).max(2048).nullable().optional(), + redirect: zod.string().min(1).max(2048), + redirectDev: zod.string().min(1).max(2048).nullable().optional(), + notification: zod.string().min(1).max(2048).nullable().optional(), /** * Expiration time */ - ttl: ZodInteger.optional(), + ttl: ZodInteger, /** * Right is manage with Karso */ - manageRight: zod.boolean().optional(), + manageRight: zod.boolean(), + users: zod.array(ZodLong), }); -export type ApplicationWrite = zod.infer; +export type ApplicationUpdate = zod.infer; -export function isApplicationWrite(data: any): data is ApplicationWrite { +export function isApplicationUpdate(data: any): data is ApplicationUpdate { try { - ZodApplicationWrite.parse(data); + ZodApplicationUpdate.parse(data); return true; } catch (e: any) { - console.log(`Fail to parse data type='ZodApplicationWrite' error=${e}`); + console.log(`Fail to parse data type='ZodApplicationUpdate' error=${e}`); + return false; + } +} +export const ZodApplicationCreate = ZodGenericDataSoftDeleteCreate.extend({ + name: zod.string().min(1).max(256).nullable().optional(), + description: zod.string().min(1).max(2048).nullable().optional(), + redirect: zod.string().min(1).max(2048), + redirectDev: zod.string().min(1).max(2048).nullable().optional(), + notification: zod.string().min(1).max(2048).nullable().optional(), + /** + * Expiration time + */ + ttl: ZodInteger, + /** + * Right is manage with Karso + */ + manageRight: zod.boolean(), + users: zod.array(ZodLong), + +}); + +export type ApplicationCreate = zod.infer; + +export function isApplicationCreate(data: any): data is ApplicationCreate { + try { + ZodApplicationCreate.parse(data); + return true; + } catch (e: any) { + console.log(`Fail to parse data type='ZodApplicationCreate' error=${e}`); return false; } } diff --git a/front/src/back-api/model/change-password.ts b/front/src/back-api/model/change-password.ts index b7d88d7..b01b6b7 100644 --- a/front/src/back-api/model/change-password.ts +++ b/front/src/back-api/model/change-password.ts @@ -24,23 +24,3 @@ export function isChangePassword(data: any): data is ChangePassword { return false; } } -export const ZodChangePasswordWrite = zod.object({ - method: zod.string().min(2).max(2).optional(), - login: zod.string().min(3).max(128).optional(), - time: zod.string().min(20).max(64).optional(), - password: zod.string().min(128).max(128).optional(), - newPassword: zod.string().min(128).max(128).optional(), - -}); - -export type ChangePasswordWrite = zod.infer; - -export function isChangePasswordWrite(data: any): data is ChangePasswordWrite { - try { - ZodChangePasswordWrite.parse(data); - return true; - } catch (e: any) { - console.log(`Fail to parse data type='ZodChangePasswordWrite' error=${e}`); - return false; - } -} diff --git a/front/src/back-api/model/client-token.ts b/front/src/back-api/model/client-token.ts index 512212c..89af483 100644 --- a/front/src/back-api/model/client-token.ts +++ b/front/src/back-api/model/client-token.ts @@ -5,8 +5,8 @@ import { z as zod } from "zod"; export const ZodClientToken = zod.object({ - url: zod.string().optional(), - jwt: zod.string().optional(), + url: zod.string().max(1024).optional(), + jwt: zod.string().max(1024).optional(), }); @@ -21,20 +21,3 @@ export function isClientToken(data: any): data is ClientToken { return false; } } -export const ZodClientTokenWrite = zod.object({ - url: zod.string().nullable().optional(), - jwt: zod.string().nullable().optional(), - -}); - -export type ClientTokenWrite = zod.infer; - -export function isClientTokenWrite(data: any): data is ClientTokenWrite { - try { - ZodClientTokenWrite.parse(data); - return true; - } catch (e: any) { - console.log(`Fail to parse data type='ZodClientTokenWrite' error=${e}`); - return false; - } -} diff --git a/front/src/back-api/model/create-token-request.ts b/front/src/back-api/model/create-token-request.ts index 3b3505c..2f0ff68 100644 --- a/front/src/back-api/model/create-token-request.ts +++ b/front/src/back-api/model/create-token-request.ts @@ -22,20 +22,3 @@ export function isCreateTokenRequest(data: any): data is CreateTokenRequest { return false; } } -export const ZodCreateTokenRequestWrite = zod.object({ - name: zod.string().nullable().optional(), - validity: ZodInteger.nullable().optional(), - -}); - -export type CreateTokenRequestWrite = zod.infer; - -export function isCreateTokenRequestWrite(data: any): data is CreateTokenRequestWrite { - try { - ZodCreateTokenRequestWrite.parse(data); - return true; - } catch (e: any) { - console.log(`Fail to parse data type='ZodCreateTokenRequestWrite' error=${e}`); - return false; - } -} diff --git a/front/src/back-api/model/data-get-token.ts b/front/src/back-api/model/data-get-token.ts index 60f77cb..a2a5063 100644 --- a/front/src/back-api/model/data-get-token.ts +++ b/front/src/back-api/model/data-get-token.ts @@ -23,22 +23,3 @@ export function isDataGetToken(data: any): data is DataGetToken { return false; } } -export const ZodDataGetTokenWrite = zod.object({ - login: zod.string().min(3).max(128).optional(), - method: zod.string().min(2).max(2).optional(), - time: zod.string().min(20).max(64).optional(), - password: zod.string().min(128).max(128).optional(), - -}); - -export type DataGetTokenWrite = zod.infer; - -export function isDataGetTokenWrite(data: any): data is DataGetTokenWrite { - try { - ZodDataGetTokenWrite.parse(data); - return true; - } catch (e: any) { - console.log(`Fail to parse data type='ZodDataGetTokenWrite' 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..589f56f 100644 --- a/front/src/back-api/model/generic-data.ts +++ b/front/src/back-api/model/generic-data.ts @@ -4,7 +4,7 @@ import { z as zod } from "zod"; import {ZodLong} from "./long"; -import {ZodGenericTiming, ZodGenericTimingWrite } from "./generic-timing"; +import {ZodGenericTiming, ZodGenericTimingUpdate , ZodGenericTimingCreate } 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/generic-token.ts b/front/src/back-api/model/generic-token.ts index 67d07ec..2bd2af4 100644 --- a/front/src/back-api/model/generic-token.ts +++ b/front/src/back-api/model/generic-token.ts @@ -4,8 +4,8 @@ import { z as zod } from "zod"; import {ZodLong} from "./long"; +import {ZodGenericDataSoftDelete, ZodGenericDataSoftDeleteUpdate , ZodGenericDataSoftDeleteCreate } from "./generic-data-soft-delete"; import {ZodTimestamp} from "./timestamp"; -import {ZodGenericDataSoftDelete, ZodGenericDataSoftDeleteWrite } from "./generic-data-soft-delete"; export const ZodGenericToken = ZodGenericDataSoftDelete.extend({ parentId: ZodLong, @@ -26,22 +26,3 @@ export function isGenericToken(data: any): data is GenericToken { return false; } } -export const ZodGenericTokenWrite = ZodGenericDataSoftDeleteWrite.extend({ - parentId: ZodLong.optional(), - name: zod.string().optional(), - endValidityTime: ZodTimestamp.optional(), - token: zod.string().optional(), - -}); - -export type GenericTokenWrite = zod.infer; - -export function isGenericTokenWrite(data: any): data is GenericTokenWrite { - try { - ZodGenericTokenWrite.parse(data); - return true; - } catch (e: any) { - console.log(`Fail to parse data type='ZodGenericTokenWrite' error=${e}`); - return false; - } -} diff --git a/front/src/back-api/model/get-sign-up-available.ts b/front/src/back-api/model/get-sign-up-available.ts index 638b0b2..2727556 100644 --- a/front/src/back-api/model/get-sign-up-available.ts +++ b/front/src/back-api/model/get-sign-up-available.ts @@ -20,19 +20,3 @@ export function isGetSignUpAvailable(data: any): data is GetSignUpAvailable { return false; } } -export const ZodGetSignUpAvailableWrite = zod.object({ - signup: zod.boolean(), - -}); - -export type GetSignUpAvailableWrite = zod.infer; - -export function isGetSignUpAvailableWrite(data: any): data is GetSignUpAvailableWrite { - try { - ZodGetSignUpAvailableWrite.parse(data); - return true; - } catch (e: any) { - console.log(`Fail to parse data type='ZodGetSignUpAvailableWrite' error=${e}`); - return false; - } -} diff --git a/front/src/back-api/model/get-token.ts b/front/src/back-api/model/get-token.ts index 1e222c4..81ff19c 100644 --- a/front/src/back-api/model/get-token.ts +++ b/front/src/back-api/model/get-token.ts @@ -20,19 +20,3 @@ export function isGetToken(data: any): data is GetToken { return false; } } -export const ZodGetTokenWrite = zod.object({ - jwt: zod.string().optional(), - -}); - -export type GetTokenWrite = zod.infer; - -export function isGetTokenWrite(data: any): data is GetTokenWrite { - try { - ZodGetTokenWrite.parse(data); - return true; - } catch (e: any) { - console.log(`Fail to parse data type='ZodGetTokenWrite' error=${e}`); - return false; - } -} diff --git a/front/src/back-api/model/index.ts b/front/src/back-api/model/index.ts index 7108566..0df2e03 100644 --- a/front/src/back-api/model/index.ts +++ b/front/src/back-api/model/index.ts @@ -25,6 +25,7 @@ export * from "./object-id" export * from "./part-right" export * from "./public-key" export * from "./rest-error-response" +export * from "./rest-input-error" export * from "./right" export * from "./right-description" 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/public-key.ts b/front/src/back-api/model/public-key.ts index b83af0e..a554582 100644 --- a/front/src/back-api/model/public-key.ts +++ b/front/src/back-api/model/public-key.ts @@ -20,19 +20,3 @@ export function isPublicKey(data: any): data is PublicKey { return false; } } -export const ZodPublicKeyWrite = zod.object({ - key: zod.string().nullable().optional(), - -}); - -export type PublicKeyWrite = zod.infer; - -export function isPublicKeyWrite(data: any): data is PublicKeyWrite { - try { - ZodPublicKeyWrite.parse(data); - return true; - } catch (e: any) { - console.log(`Fail to parse data type='ZodPublicKeyWrite' 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..06e288b 100644 --- a/front/src/back-api/model/rest-error-response.ts +++ b/front/src/back-api/model/rest-error-response.ts @@ -3,6 +3,7 @@ */ import { z as zod } from "zod"; +import {ZodRestInputError} from "./rest-input-error"; import {ZodObjectId} from "./object-id"; import {ZodInteger} from "./integer"; @@ -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/right-description.ts b/front/src/back-api/model/right-description.ts index 635f7a7..92696e3 100644 --- a/front/src/back-api/model/right-description.ts +++ b/front/src/back-api/model/right-description.ts @@ -4,7 +4,7 @@ import { z as zod } from "zod"; import {ZodLong} from "./long"; -import {ZodGenericDataSoftDelete, ZodGenericDataSoftDeleteWrite } from "./generic-data-soft-delete"; +import {ZodGenericDataSoftDelete, ZodGenericDataSoftDeleteUpdate , ZodGenericDataSoftDeleteCreate } from "./generic-data-soft-delete"; export const ZodRightDescription = ZodGenericDataSoftDelete.extend({ /** @@ -14,15 +14,15 @@ export const ZodRightDescription = ZodGenericDataSoftDelete.extend({ /** * Key of the property */ - key: zod.string(), + key: zod.string().min(1).max(64), /** * Title of the right */ - title: zod.string(), + title: zod.string().min(1).max(1024), /** * Description of the right */ - description: zod.string(), + description: zod.string().max(1024), }); @@ -37,34 +37,3 @@ export function isRightDescription(data: any): data is RightDescription { return false; } } -export const ZodRightDescriptionWrite = ZodGenericDataSoftDeleteWrite.extend({ - /** - * Application id that have the reference of the right - */ - applicationId: ZodLong.optional(), - /** - * Key of the property - */ - key: zod.string().optional(), - /** - * Title of the right - */ - title: zod.string().optional(), - /** - * Description of the right - */ - description: zod.string().optional(), - -}); - -export type RightDescriptionWrite = zod.infer; - -export function isRightDescriptionWrite(data: any): data is RightDescriptionWrite { - try { - ZodRightDescriptionWrite.parse(data); - return true; - } catch (e: any) { - console.log(`Fail to parse data type='ZodRightDescriptionWrite' error=${e}`); - return false; - } -} diff --git a/front/src/back-api/model/right.ts b/front/src/back-api/model/right.ts index a1969d6..a6a1d63 100644 --- a/front/src/back-api/model/right.ts +++ b/front/src/back-api/model/right.ts @@ -4,8 +4,8 @@ import { z as zod } from "zod"; import {ZodLong} from "./long"; +import {ZodGenericDataSoftDelete, ZodGenericDataSoftDeleteUpdate , ZodGenericDataSoftDeleteCreate } from "./generic-data-soft-delete"; import {ZodPartRight} from "./part-right"; -import {ZodGenericDataSoftDelete, ZodGenericDataSoftDeleteWrite } from "./generic-data-soft-delete"; export const ZodRight = ZodGenericDataSoftDelete.extend({ /** @@ -23,7 +23,7 @@ export const ZodRight = ZodGenericDataSoftDelete.extend({ /** * Value of the right */ - value: ZodPartRight, + value: ZodPartRight.optional(), }); @@ -38,34 +38,65 @@ export function isRight(data: any): data is Right { return false; } } -export const ZodRightWrite = ZodGenericDataSoftDeleteWrite.extend({ +export const ZodRightUpdate = ZodGenericDataSoftDeleteUpdate.extend({ /** * application-ID that have the reference of the right */ - applicationId: ZodLong.optional(), + applicationId: ZodLong, /** * user-ID */ - userId: ZodLong.optional(), + userId: ZodLong, /** * rightDescription-ID of the right description */ - rightDescriptionId: ZodLong.optional(), + rightDescriptionId: ZodLong, /** * Value of the right */ - value: ZodPartRight.optional(), + value: ZodPartRight.nullable().optional(), }); -export type RightWrite = zod.infer; +export type RightUpdate = zod.infer; -export function isRightWrite(data: any): data is RightWrite { +export function isRightUpdate(data: any): data is RightUpdate { try { - ZodRightWrite.parse(data); + ZodRightUpdate.parse(data); return true; } catch (e: any) { - console.log(`Fail to parse data type='ZodRightWrite' error=${e}`); + console.log(`Fail to parse data type='ZodRightUpdate' error=${e}`); + return false; + } +} +export const ZodRightCreate = ZodGenericDataSoftDeleteCreate.extend({ + /** + * application-ID that have the reference of the right + */ + applicationId: ZodLong, + /** + * user-ID + */ + userId: ZodLong, + /** + * rightDescription-ID of the right description + */ + rightDescriptionId: ZodLong, + /** + * Value of the right + */ + value: ZodPartRight.nullable().optional(), + +}); + +export type RightCreate = zod.infer; + +export function isRightCreate(data: any): data is RightCreate { + try { + ZodRightCreate.parse(data); + return true; + } catch (e: any) { + console.log(`Fail to parse data type='ZodRightCreate' error=${e}`); return false; } } diff --git a/front/src/back-api/model/user-auth-get.ts b/front/src/back-api/model/user-auth-get.ts index d619d57..c9bcaa1 100644 --- a/front/src/back-api/model/user-auth-get.ts +++ b/front/src/back-api/model/user-auth-get.ts @@ -3,10 +3,10 @@ */ import { z as zod } from "zod"; -import {ZodUser, ZodUserWrite } from "./user"; +import {ZodUser, ZodUserUpdate , ZodUserCreate } from "./user"; export const ZodUserAuthGet = ZodUser.extend({ - email: zod.string(), + email: zod.string().min(1).max(512), avatar: zod.boolean(), }); @@ -22,20 +22,3 @@ export function isUserAuthGet(data: any): data is UserAuthGet { return false; } } -export const ZodUserAuthGetWrite = ZodUserWrite.extend({ - email: zod.string().optional(), - avatar: zod.boolean().optional(), - -}); - -export type UserAuthGetWrite = zod.infer; - -export function isUserAuthGetWrite(data: any): data is UserAuthGetWrite { - try { - ZodUserAuthGetWrite.parse(data); - return true; - } catch (e: any) { - console.log(`Fail to parse data type='ZodUserAuthGetWrite' error=${e}`); - return false; - } -} diff --git a/front/src/back-api/model/user-auth.ts b/front/src/back-api/model/user-auth.ts index d0a82c5..596f500 100644 --- a/front/src/back-api/model/user-auth.ts +++ b/front/src/back-api/model/user-auth.ts @@ -3,9 +3,9 @@ */ import { z as zod } from "zod"; -import {ZodTimestamp} from "./timestamp"; import {ZodLong} from "./long"; -import {ZodUser, ZodUserWrite } from "./user"; +import {ZodTimestamp} from "./timestamp"; +import {ZodUser, ZodUserUpdate , ZodUserCreate } from "./user"; export const ZodUserAuth = ZodUser.extend({ password: zod.string().min(128).max(128).optional(), @@ -31,27 +31,3 @@ export function isUserAuth(data: any): data is UserAuth { return false; } } -export const ZodUserAuthWrite = ZodUserWrite.extend({ - password: zod.string().min(128).max(128).nullable().optional(), - email: zod.string().min(5).max(128).optional(), - emailValidate: ZodTimestamp.nullable().optional(), - newEmail: zod.string().min(5).max(128).nullable().optional(), - avatar: zod.boolean().optional(), - /** - * List of accessible application (if not set the application is not available) - */ - applications: zod.array(ZodLong).optional(), - -}); - -export type UserAuthWrite = zod.infer; - -export function isUserAuthWrite(data: any): data is UserAuthWrite { - try { - ZodUserAuthWrite.parse(data); - return true; - } catch (e: any) { - console.log(`Fail to parse data type='ZodUserAuthWrite' error=${e}`); - return false; - } -} diff --git a/front/src/back-api/model/user-create.ts b/front/src/back-api/model/user-create.ts index e8dbb0d..900cac6 100644 --- a/front/src/back-api/model/user-create.ts +++ b/front/src/back-api/model/user-create.ts @@ -22,21 +22,3 @@ export function isUserCreate(data: any): data is UserCreate { return false; } } -export const ZodUserCreateWrite = zod.object({ - login: zod.string().min(3).max(128).optional(), - email: zod.string().min(5).max(128).optional(), - password: zod.string().min(128).max(128).optional(), - -}); - -export type UserCreateWrite = zod.infer; - -export function isUserCreateWrite(data: any): data is UserCreateWrite { - try { - ZodUserCreateWrite.parse(data); - return true; - } catch (e: any) { - console.log(`Fail to parse data type='ZodUserCreateWrite' 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..b32b053 100644 --- a/front/src/back-api/model/user.ts +++ b/front/src/back-api/model/user.ts @@ -3,9 +3,9 @@ */ import { z as zod } from "zod"; +import {ZodGenericDataSoftDelete, ZodGenericDataSoftDeleteUpdate , ZodGenericDataSoftDeleteCreate } from "./generic-data-soft-delete"; import {ZodTimestamp} from "./timestamp"; import {ZodUUID} from "./uuid"; -import {ZodGenericDataSoftDelete, ZodGenericDataSoftDeleteWrite } 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/scene/account/ManageAccountPage.tsx b/front/src/scene/account/ManageAccountPage.tsx index 6929840..3a008de 100644 --- a/front/src/scene/account/ManageAccountPage.tsx +++ b/front/src/scene/account/ManageAccountPage.tsx @@ -1,7 +1,7 @@ import { Button, Table, Text } from '@chakra-ui/react'; import { z as zod } from 'zod'; -import { UserCreateWrite, ZodUserCreateWrite } from '@/back-api'; +import { UserCreate, ZodUserCreate } from '@/back-api'; import { PageLayout } from '@/components/Layout/PageLayout'; import { ParameterLayout } from '@/components/ParameterLayout'; import { TopBar } from '@/components/TopBar/TopBar'; @@ -99,14 +99,14 @@ const passwordSchema = zod message: 'The password must not contain spaces.', }); -export const ZodUserCreateWithNewPassword = ZodUserCreateWrite.omit({ +export const ZodUserCreateWithNewPassword = ZodUserCreate.omit({ password: true, }).extend({ password: passwordSchema, }); export const CreateUserComponent = () => { - const form = useFormidable({ + const form = useFormidable({ initialValues: { login: '', email: '', diff --git a/front/src/scene/connection/useLogin.tsx b/front/src/scene/connection/useLogin.tsx index c823f51..b395a77 100644 --- a/front/src/scene/connection/useLogin.tsx +++ b/front/src/scene/connection/useLogin.tsx @@ -1,7 +1,7 @@ import { useState } from 'react'; import { UserResource } from '@/back-api'; -import { toaster, toasterAPIError } from '@/components/ui/toaster'; +import { toaster } from '@/components/ui/toaster'; import { useSessionService } from '@/service/session'; //import { useSessionContext } from '@/context/SessionContext'; import { getRestConfig } from '@/utils/http'; @@ -51,6 +51,7 @@ export const useLogin = () => { toaster.create({ title: 'Connection fail', description: `Fail to connect with identification: '${login}'`, + type: 'error', }); setLastError('The connection Fail'); setIsConnectionLoading(false); diff --git a/front/src/service/ApplicationToken.ts b/front/src/service/ApplicationToken.ts index 45263a8..a6116e9 100644 --- a/front/src/service/ApplicationToken.ts +++ b/front/src/service/ApplicationToken.ts @@ -1,10 +1,9 @@ import { ApplicationToken, ApplicationTokenResource, - CreateTokenRequestWrite, + CreateTokenRequest, Integer, Long, - RestErrorResponse, } from '@/back-api'; import { useSessionService } from '@/service/session'; import { useQuery, useQueryCall, useQueryCallProps } from '@/utils/query'; @@ -26,14 +25,15 @@ export namespace ApplicationTokenService { export const useApplicationTokenCreate = ( applicationId: Long, - config: { - config?: Omit, 'queryFunction'>; - } + config: Omit< + useQueryCallProps, + 'queryFunction' + > = {} ) => { const { getRestConfig } = useSessionService(); const { call, ...rest } = useQueryCall< ApplicationToken, - CreateTokenRequestWrite + CreateTokenRequest >({ queryFunction: (inputData) => { return ApplicationTokenResource.create({ @@ -49,7 +49,15 @@ export namespace ApplicationTokenService { export const useApplicationTokenRemove = ( applicationId: Long, - config: { config?: Omit, 'queryFunction'> } + config: Omit< + useQueryCallProps< + void, + { + tokenId: Integer; + } + >, + 'queryFunction' + > = {} ) => { const { getRestConfig } = useSessionService(); const { call, ...rest } = useQueryCall< diff --git a/front/src/service/application.ts b/front/src/service/application.ts index 0aee77b..e778e2e 100644 --- a/front/src/service/application.ts +++ b/front/src/service/application.ts @@ -56,11 +56,12 @@ export namespace ApplicationService { // }); // } - export const useGetClientToken = ({ - config, - }: { - config?: Omit, 'queryFunction'>; - }) => { + export const useGetClientToken = ( + config: Omit< + useQueryCallProps, + 'queryFunction' + > = {} + ) => { const { getRestConfig } = useSessionService(); const { call, ...rest } = useQueryCall< ClientToken, diff --git a/front/src/service/session.ts b/front/src/service/session.ts index b9c18ae..0e2165a 100644 --- a/front/src/service/session.ts +++ b/front/src/service/session.ts @@ -130,14 +130,14 @@ export const useSessionServiceWrapped = (): SessionServiceProps => { }; }; -export const useHasRight = (part: RightGroup) => { +export const useHasRight = (group: RightGroup) => { const { token, hasReadRight, hasWriteRight } = useSessionService(); const isReadable = useMemo(() => { - console.log(`get is read for: ${part} ==> ${hasReadRight(part)}`); - return hasReadRight(part); - }, [token, hasReadRight, part]); + console.log(`get is read for: ${group} ==> ${hasReadRight(group)}`); + return hasReadRight(group); + }, [token, hasReadRight, group]); const isWritable = useMemo(() => { - return hasWriteRight(part); - }, [token, hasWriteRight, part]); + return hasWriteRight(group); + }, [token, hasWriteRight, group]); return { isReadable, isWritable }; }; diff --git a/front/src/service/user.service.ts b/front/src/service/user.service.ts index 908ae80..2d9dd8f 100644 --- a/front/src/service/user.service.ts +++ b/front/src/service/user.service.ts @@ -3,12 +3,7 @@ * @copyright 2018, Edouard DUPIN, all right reserved * @license PROPRIETARY (see license file) */ -import { - RESTConfig, - UserAuthGet, - UserCreateWrite, - UserResource, -} from '@/back-api'; +import { UserAuthGet, UserCreate, UserResource } from '@/back-api'; import { useQuery, useQueryCall, useQueryCallProps } from '@/utils/query'; import { useSessionService } from './session'; @@ -35,13 +30,14 @@ export namespace UserService { }, }); }; - export const useCreate = ({ - config, - }: { - config?: Omit, 'queryFunction'>; - }) => { + export const useCreate = ( + config: Omit< + useQueryCallProps, + 'queryFunction' + > = {} + ) => { const { getRestConfig } = useSessionService(); - return useQueryCall({ + return useQueryCall({ queryFunction: (data) => { return UserResource.create({ restConfig: getRestConfig(),