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/pom.xml b/back/pom.xml index 4eb8197..cfcc0d6 100644 --- a/back/pom.xml +++ b/back/pom.xml @@ -8,7 +8,7 @@ org.atria-soft archidata - 0.28.0 + 0.30.3-SNAPSHOT diff --git a/back/src/org/atriasoft/karusic/WebLauncher.java b/back/src/org/atriasoft/karusic/WebLauncher.java index 14e2cc2..c1c84dd 100755 --- a/back/src/org/atriasoft/karusic/WebLauncher.java +++ b/back/src/org/atriasoft/karusic/WebLauncher.java @@ -2,6 +2,7 @@ package org.atriasoft.karusic; import java.net.URI; import java.util.Iterator; +import java.util.TimeZone; import java.util.logging.LogManager; import javax.imageio.ImageIO; @@ -29,12 +30,7 @@ import org.atriasoft.karusic.api.TrackResource; import org.atriasoft.karusic.api.UserResource; import org.atriasoft.karusic.filter.KarusicAuthenticationFilter; import org.atriasoft.karusic.migration.Initialization; -import org.atriasoft.karusic.migration.Migration20231126; -import org.atriasoft.karusic.migration.Migration20240225; -import org.atriasoft.karusic.migration.Migration20240226; -import org.atriasoft.karusic.migration.Migration20240907; -import org.atriasoft.karusic.migration.Migration20250104; -import org.atriasoft.karusic.migration.Migration20250414; +import org.atriasoft.karusic.migration.Migration20250427; import org.glassfish.grizzly.http.server.HttpServer; import org.glassfish.jersey.grizzly2.httpserver.GrizzlyHttpServerFactory; import org.glassfish.jersey.jackson.JacksonFeature; @@ -53,6 +49,7 @@ public class WebLauncher { protected HttpServer server = null; public WebLauncher() { + TimeZone.setDefault(TimeZone.getTimeZone("UTC")); ConfigBaseVariable.bdDatabase = "karusic"; } @@ -66,12 +63,7 @@ public class WebLauncher { WebLauncher.LOGGER.info("Add initialization"); migrationEngine.setInit(new Initialization()); WebLauncher.LOGGER.info("Add migration since last version"); - migrationEngine.add(new Migration20231126()); - migrationEngine.add(new Migration20240225()); - migrationEngine.add(new Migration20240226()); - migrationEngine.add(new Migration20240907()); - migrationEngine.add(new Migration20250104()); - migrationEngine.add(new Migration20250414()); + migrationEngine.add(new Migration20250427()); WebLauncher.LOGGER.info("Migrate the DB [START]"); migrationEngine.migrateWaitAdmin(new DbConfig()); WebLauncher.LOGGER.info("Migrate the DB [STOP]"); diff --git a/back/src/org/atriasoft/karusic/WebLauncherLocal.java b/back/src/org/atriasoft/karusic/WebLauncherLocal.java index 3a268ff..a9f797b 100755 --- a/back/src/org/atriasoft/karusic/WebLauncherLocal.java +++ b/back/src/org/atriasoft/karusic/WebLauncherLocal.java @@ -32,8 +32,8 @@ public class WebLauncherLocal extends WebLauncher { if (true) { // for local test: ConfigBaseVariable.apiAdress = "http://0.0.0.0:19080/karusic/api/"; - ConfigBaseVariable.dbPort = "3906"; ConfigBaseVariable.testMode = "true"; + ConfigBaseVariable.dbType = "mongo"; } // Test fail of SSO: ConfigBaseVariable.ssoAdress = null; try { diff --git a/back/src/org/atriasoft/karusic/api/AlbumResource.java b/back/src/org/atriasoft/karusic/api/AlbumResource.java index 321e136..c0a4eeb 100644 --- a/back/src/org/atriasoft/karusic/api/AlbumResource.java +++ b/back/src/org/atriasoft/karusic/api/AlbumResource.java @@ -35,11 +35,11 @@ public class AlbumResource { private static final Logger LOGGER = LoggerFactory.getLogger(AlbumResource.class); @GET - @Path("{id}") + @Path("{oid}") @RolesAllowed("USER") @Operation(description = "Get a specific Album with his ID") - public Album get(@PathParam("id") final Long id) throws Exception { - return DataAccess.get(Album.class, id); + public Album get(@PathParam("oid") final ObjectId oid) throws Exception { + return DataAccess.get(Album.class, oid); // return this.morphiaService.getDatastore().find(Album.class).filter(Filters.eq("id", id)).first(); } @@ -67,19 +67,19 @@ public class AlbumResource { } @PUT - @Path("{id}") + @Path("{oid}") @RolesAllowed("ADMIN") @Consumes(MediaType.APPLICATION_JSON) @Operation(description = "Update a specific album") - public Album put(@PathParam("id") final Long id, @Valid final Album album) throws Exception { + public Album put(@PathParam("oid") final ObjectId oid, @Valid final Album album) throws Exception { // final Query query = this.morphiaService.getDatastore().find(Album.class).filter(Filters.eq("id", id)); // final UpdateOperations ops = this.morphiaService.getDatastore().createUpdateOperations(Album.class) // .set("name", master.getName()); // this.morphiaService.getDatastore().update(query, ops); // return Response.ok(master).build(); - album.id = id; - DataAccess.update(album, id); - return DataAccess.get(Album.class, id); + album.oid = oid; + DataAccess.update(album, oid); + return DataAccess.get(Album.class, oid); } // @PUT @@ -87,7 +87,7 @@ public class AlbumResource { // @RolesAllowed("ADMIN") // @Consumes(MediaType.APPLICATION_JSON) // @Operation(description = "Update a specific album") - // public Album put(@PathParam("id") final Long id, final Album album) + // public Album put(@PathParam("id") final ObjectId oid, final Album album) // throws Exception { // final Query query = this.morphiaService.getDatastore().find(Album.class).filter(Filters.eq("id", id)); // final UpdateOperations ops = this.morphiaService.getDatastore().createUpdateOperations(Album.class) @@ -97,11 +97,11 @@ public class AlbumResource { // } @DELETE - @Path("{id}") + @Path("{oid}") @RolesAllowed("ADMIN") @Operation(description = "Remove a specific album") - public void remove(@PathParam("id") final Long id) throws Exception { - DataAccess.delete(Album.class, id); + public void remove(@PathParam("oid") final ObjectId oid) throws Exception { + DataAccess.delete(Album.class, oid); // this.morphiaService.getDatastore().find(Album.class).filter(Filters.eq("id", id)).delete(); } @@ -109,34 +109,34 @@ public class AlbumResource { * @Path("{id}/track/{trackId}") * @RolesAllowed("ADMIN") * @Consumes({ MediaType.MULTIPART_FORM_DATA }) - * @Operation(description = "Add a Track on a specific album") public Album addTrack(@PathParam("id") final Long id, @PathParam("trackId") final Long trackId) throws Exception { + * @Operation(description = "Add a Track on a specific album") public Album addTrack(@PathParam("id") final ObjectId oid, @PathParam("trackId") final Long trackId) throws Exception { * AddOnManyToMany.removeLink(this.dam, Album.class, id, "track", trackId); return this.dam.get(Album.class, id); } */ @POST - @Path("{id}/cover") + @Path("{oid}/cover") @RolesAllowed("ADMIN") @Consumes({ MediaType.MULTIPART_FORM_DATA }) @Operation(description = "Add a cover on a specific album") @ApiTypeScriptProgress - public Album uploadCover(@PathParam("id") final Long id, @ApiInputOptional @FormDataParam("uri") final String uri, @ApiInputOptional @FormDataParam("file") final InputStream fileInputStream, + public Album uploadCover(@PathParam("oid") final ObjectId oid, @ApiInputOptional @FormDataParam("uri") final String uri, @ApiInputOptional @FormDataParam("file") final InputStream fileInputStream, @ApiInputOptional @FormDataParam("file") final FormDataContentDisposition fileMetaData) throws Exception { try (DBAccess db = DBAccess.createInterface()) { if (uri != null) { - DataTools.uploadCoverFromUri(db, Album.class, id, uri); + DataTools.uploadCoverFromUri(db, Album.class, oid, uri); } else { - DataTools.uploadCover(db, Album.class, id, fileInputStream, fileMetaData); + DataTools.uploadCover(db, Album.class, oid, fileInputStream, fileMetaData); } - return db.get(Album.class, id); + return db.get(Album.class, oid); } } @DELETE - @Path("{id}/cover/{coverId}") + @Path("{oid}/cover/{coverId}") @RolesAllowed("ADMIN") @Operation(description = "Remove a cover on a specific album") - public Album removeCover(@PathParam("id") final Long id, @PathParam("coverId") final ObjectId coverId) throws Exception { + public Album removeCover(@PathParam("oid") final ObjectId oid, @PathParam("coverId") final ObjectId coverId) throws Exception { try (DBAccess db = DBAccess.createInterface()) { - AddOnDataJson.removeLink(db, Album.class, "id", id, "covers", coverId); - return db.get(Album.class, id); + AddOnDataJson.removeLink(db, Album.class, "id", oid, "covers", coverId); + return db.get(Album.class, oid); } } } diff --git a/back/src/org/atriasoft/karusic/api/ArtistResource.java b/back/src/org/atriasoft/karusic/api/ArtistResource.java index c7ef614..1b61d41 100644 --- a/back/src/org/atriasoft/karusic/api/ArtistResource.java +++ b/back/src/org/atriasoft/karusic/api/ArtistResource.java @@ -34,10 +34,10 @@ public class ArtistResource { private static final Logger LOGGER = LoggerFactory.getLogger(ArtistResource.class); @GET - @Path("{id}") + @Path("{oid}") @RolesAllowed("USER") - public Artist get(@PathParam("id") final Long id) throws Exception { - return DataAccess.get(Artist.class, id); + public Artist get(@PathParam("oid") final ObjectId oid) throws Exception { + return DataAccess.get(Artist.class, oid); } @GET @@ -54,46 +54,46 @@ public class ArtistResource { } @PUT - @Path("{id}") + @Path("{oid}") @RolesAllowed("ADMIN") @Consumes(MediaType.APPLICATION_JSON) - public Artist put(@PathParam("id") final Long id, @Valid final Artist artist) throws Exception { - artist.id = id; - DataAccess.update(artist, id); - return DataAccess.get(Artist.class, id); + public Artist put(@PathParam("oid") final ObjectId oid, @Valid final Artist artist) throws Exception { + artist.oid = oid; + DataAccess.update(artist, oid); + return DataAccess.get(Artist.class, oid); } @DELETE - @Path("{id}") + @Path("{oid}") @RolesAllowed("ADMIN") - public void remove(@PathParam("id") final Long id) throws Exception { - DataAccess.delete(Artist.class, id); + public void remove(@PathParam("oid") final ObjectId oid) throws Exception { + DataAccess.delete(Artist.class, oid); } @POST - @Path("{id}/cover") + @Path("{oid}/cover") @RolesAllowed("ADMIN") @Consumes({ MediaType.MULTIPART_FORM_DATA }) @ApiTypeScriptProgress - public Artist uploadCover(@PathParam("id") final Long id, @ApiInputOptional @FormDataParam("uri") final String uri, @ApiInputOptional @FormDataParam("file") final InputStream fileInputStream, - @ApiInputOptional @FormDataParam("file") final FormDataContentDisposition fileMetaData) throws Exception { + public Artist uploadCover(@PathParam("oid") final ObjectId oid, @ApiInputOptional @FormDataParam("uri") final String uri, + @ApiInputOptional @FormDataParam("file") final InputStream fileInputStream, @ApiInputOptional @FormDataParam("file") final FormDataContentDisposition fileMetaData) throws Exception { try (DBAccess db = DBAccess.createInterface()) { if (uri != null) { - DataTools.uploadCoverFromUri(db, Artist.class, id, uri); + DataTools.uploadCoverFromUri(db, Artist.class, oid, uri); } else { - DataTools.uploadCover(db, Artist.class, id, fileInputStream, fileMetaData); + DataTools.uploadCover(db, Artist.class, oid, fileInputStream, fileMetaData); } - return db.get(Artist.class, id); + return db.get(Artist.class, oid); } } @DELETE - @Path("{id}/cover/{coverId}") + @Path("{oid}/cover/{coverId}") @RolesAllowed("ADMIN") - public Artist removeCover(@PathParam("id") final Long id, @PathParam("coverId") final ObjectId coverId) throws Exception { + public Artist removeCover(@PathParam("oid") final ObjectId oid, @PathParam("coverId") final ObjectId coverId) throws Exception { try (DBAccess db = DBAccess.createInterface()) { - AddOnDataJson.removeLink(db, Artist.class, "id", id, "covers", coverId); - return db.get(Artist.class, id); + AddOnDataJson.removeLink(db, Artist.class, "id", oid, "covers", coverId); + return db.get(Artist.class, oid); } } } diff --git a/back/src/org/atriasoft/karusic/api/GenderResource.java b/back/src/org/atriasoft/karusic/api/GenderResource.java index db44f6b..a2cd90f 100644 --- a/back/src/org/atriasoft/karusic/api/GenderResource.java +++ b/back/src/org/atriasoft/karusic/api/GenderResource.java @@ -34,10 +34,10 @@ public class GenderResource { private static final Logger LOGGER = LoggerFactory.getLogger(GenderResource.class); @GET - @Path("{id}") + @Path("{oid}") @RolesAllowed("USER") - public Gender get(@PathParam("id") final Long id) throws Exception { - return DataAccess.get(Gender.class, id); + public Gender get(@PathParam("oid") final ObjectId oid) throws Exception { + return DataAccess.get(Gender.class, oid); } @GET @@ -54,46 +54,46 @@ public class GenderResource { } @PUT - @Path("{id}") + @Path("{oid}") @RolesAllowed("ADMIN") @Consumes(MediaType.APPLICATION_JSON) - public Gender patch(@PathParam("id") final Long id, @Valid final Gender gender) throws Exception { - gender.id = id; - DataAccess.update(gender, id); - return DataAccess.get(Gender.class, id); + public Gender patch(@PathParam("oid") final ObjectId oid, @Valid final Gender gender) throws Exception { + gender.oid = oid; + DataAccess.update(gender, oid); + return DataAccess.get(Gender.class, oid); } @DELETE - @Path("{id}") + @Path("{oid}") @RolesAllowed("ADMIN") - public void remove(@PathParam("id") final Long id) throws Exception { - DataAccess.delete(Gender.class, id); + public void remove(@PathParam("oid") final ObjectId oid) throws Exception { + DataAccess.delete(Gender.class, oid); } @POST - @Path("{id}/cover") + @Path("{oid}/cover") @RolesAllowed("ADMIN") @Consumes({ MediaType.MULTIPART_FORM_DATA }) @ApiTypeScriptProgress - public Gender uploadCover(@PathParam("id") final Long id, @ApiInputOptional @FormDataParam("uri") final String uri, @ApiInputOptional @FormDataParam("file") final InputStream fileInputStream, - @ApiInputOptional @FormDataParam("file") final FormDataContentDisposition fileMetaData) throws Exception { + public Gender uploadCover(@PathParam("oid") final ObjectId oid, @ApiInputOptional @FormDataParam("uri") final String uri, + @ApiInputOptional @FormDataParam("file") final InputStream fileInputStream, @ApiInputOptional @FormDataParam("file") final FormDataContentDisposition fileMetaData) throws Exception { try (DBAccess db = DBAccess.createInterface()) { if (uri != null) { - DataTools.uploadCoverFromUri(db, Gender.class, id, uri); + DataTools.uploadCoverFromUri(db, Gender.class, oid, uri); } else { - DataTools.uploadCover(db, Gender.class, id, fileInputStream, fileMetaData); + DataTools.uploadCover(db, Gender.class, oid, fileInputStream, fileMetaData); } - return db.get(Gender.class, id); + return db.get(Gender.class, oid); } } @DELETE - @Path("{id}/cover/{coverId}") + @Path("{oid}/cover/{coverId}") @RolesAllowed("ADMIN") - public Gender removeCover(@PathParam("id") final Long id, @PathParam("coverId") final ObjectId coverId) throws Exception { + public Gender removeCover(@PathParam("oid") final ObjectId oid, @PathParam("coverId") final ObjectId coverId) throws Exception { try (DBAccess db = DBAccess.createInterface()) { - AddOnDataJson.removeLink(db, Gender.class, "id", id, "covers", coverId); - return db.get(Gender.class, id); + AddOnDataJson.removeLink(db, Gender.class, "_id", oid, "covers", coverId); + return db.get(Gender.class, oid); } } } diff --git a/back/src/org/atriasoft/karusic/api/PlaylistResource.java b/back/src/org/atriasoft/karusic/api/PlaylistResource.java index 86121b8..4b9b7a0 100644 --- a/back/src/org/atriasoft/karusic/api/PlaylistResource.java +++ b/back/src/org/atriasoft/karusic/api/PlaylistResource.java @@ -35,8 +35,8 @@ public class PlaylistResource { @GET @Path("{id}") @RolesAllowed("USER") - public Playlist get(@PathParam("id") final Long id) throws Exception { - return DataAccess.get(Playlist.class, id); + public Playlist get(@PathParam("id") final ObjectId oid) throws Exception { + return DataAccess.get(Playlist.class, oid); } @GET @@ -53,41 +53,41 @@ public class PlaylistResource { } @PUT - @Path("{id}") + @Path("{oid}") @RolesAllowed("ADMIN") @Consumes(MediaType.APPLICATION_JSON) - public Playlist put(@PathParam("id") final Long id, @Valid final Playlist playlist) throws Exception { - playlist.id = id; - DataAccess.update(playlist, id); - return DataAccess.get(Playlist.class, id); + public Playlist put(@PathParam("oid") final ObjectId oid, @Valid final Playlist playlist) throws Exception { + playlist.oid = oid; + DataAccess.update(playlist, oid); + return DataAccess.get(Playlist.class, oid); } @DELETE - @Path("{id}") + @Path("{oid}") @RolesAllowed("ADMIN") - public void remove(@PathParam("id") final Long id) throws Exception { - DataAccess.delete(Playlist.class, id); + public void remove(@PathParam("oid") final ObjectId oid) throws Exception { + DataAccess.delete(Playlist.class, oid); } @POST - @Path("{id}/cover") + @Path("{oid}/cover") @RolesAllowed("ADMIN") @Consumes({ MediaType.MULTIPART_FORM_DATA }) @ApiAsyncType(Playlist.class) - public void uploadCover(@PathParam("id") final Long id, @FormDataParam("file") final InputStream fileInputStream, @FormDataParam("file") final FormDataContentDisposition fileMetaData) + public void uploadCover(@PathParam("oid") final ObjectId oid, @FormDataParam("file") final InputStream fileInputStream, @FormDataParam("file") final FormDataContentDisposition fileMetaData) throws Exception { try (DBAccess db = DBAccess.createInterface()) { - DataTools.uploadCover(db, Playlist.class, id, fileInputStream, fileMetaData); + DataTools.uploadCover(db, Playlist.class, oid, fileInputStream, fileMetaData); } } @DELETE - @Path("{id}/cover/{coverId}") + @Path("{oid}/cover/{coverId}") @RolesAllowed("ADMIN") - public Playlist removeCover(@PathParam("id") final Long id, @PathParam("coverId") final ObjectId coverId) throws Exception { + public Playlist removeCover(@PathParam("oid") final ObjectId oid, @PathParam("coverId") final ObjectId coverId) throws Exception { try (DBAccess db = DBAccess.createInterface()) { - AddOnDataJson.removeLink(db, Playlist.class, "id", id, "covers", coverId); - return DataAccess.get(Playlist.class, id); + AddOnDataJson.removeLink(db, Playlist.class, "id", oid, "covers", coverId); + return DataAccess.get(Playlist.class, oid); } } } diff --git a/back/src/org/atriasoft/karusic/api/TrackResource.java b/back/src/org/atriasoft/karusic/api/TrackResource.java index 8a65b71..9f48677 100644 --- a/back/src/org/atriasoft/karusic/api/TrackResource.java +++ b/back/src/org/atriasoft/karusic/api/TrackResource.java @@ -40,10 +40,10 @@ public class TrackResource { private static final Logger LOGGER = LoggerFactory.getLogger(TrackResource.class); @GET - @Path("{id}") + @Path("{oid}") @RolesAllowed("USER") - public Track get(@PathParam("id") final Long id) throws Exception { - return DataAccess.get(Track.class, id); + public Track get(@PathParam("oid") final ObjectId oid) throws Exception { + return DataAccess.get(Track.class, oid); } @GET @@ -60,46 +60,46 @@ public class TrackResource { } @PUT - @Path("{id}") + @Path("{oid}") @RolesAllowed("ADMIN") @Consumes(MediaType.APPLICATION_JSON) - public Track put(@PathParam("id") final Long id, @Valid final Track track) throws Exception { - track.id = id; - DataAccess.update(track, id); - return DataAccess.get(Track.class, id); + public Track put(@PathParam("oid") final ObjectId oid, @Valid final Track track) throws Exception { + track.oid = oid; + DataAccess.update(track, oid); + return DataAccess.get(Track.class, oid); } @DELETE - @Path("{id}") + @Path("{oid}") @RolesAllowed("ADMIN") - public void remove(@PathParam("id") final Long id) throws Exception { - DataAccess.delete(Track.class, id); + public void remove(@PathParam("oid") final ObjectId oid) throws Exception { + DataAccess.delete(Track.class, oid); } @POST - @Path("{id}/cover") + @Path("{oid}/cover") @RolesAllowed("ADMIN") @Consumes({ MediaType.MULTIPART_FORM_DATA }) @ApiTypeScriptProgress - public Track uploadCover(@PathParam("id") final Long id, @FormDataParam("uri") final String uri, @FormDataParam("file") final InputStream fileInputStream, + public Track uploadCover(@PathParam("oid") final ObjectId oid, @FormDataParam("uri") final String uri, @FormDataParam("file") final InputStream fileInputStream, @FormDataParam("file") final FormDataContentDisposition fileMetaData) throws Exception { try (DBAccess db = DBAccess.createInterface()) { if (uri != null) { - DataTools.uploadCoverFromUri(db, Track.class, id, uri); + DataTools.uploadCoverFromUri(db, Track.class, oid, uri); } else { - DataTools.uploadCover(db, Track.class, id, fileInputStream, fileMetaData); + DataTools.uploadCover(db, Track.class, oid, fileInputStream, fileMetaData); } - return DataAccess.get(Track.class, id); + return DataAccess.get(Track.class, oid); } } @DELETE - @Path("{id}/cover/{coverId}") + @Path("{oid}/cover/{coverId}") @RolesAllowed("ADMIN") - public Track removeCover(@PathParam("id") final Long id, @PathParam("coverId") final ObjectId coverId) throws Exception { + public Track removeCover(@PathParam("oid") final ObjectId oid, @PathParam("coverId") final ObjectId coverId) throws Exception { try (DBAccess db = DBAccess.createInterface()) { - AddOnDataJson.removeLink(db, Track.class, "id", id, "covers", coverId); - return db.get(Track.class, id); + AddOnDataJson.removeLink(db, Track.class, "_id", oid, "covers", coverId); + return db.get(Track.class, oid); } } @@ -111,9 +111,9 @@ public class TrackResource { @ApiTypeScriptProgress public Response uploadTrack( // @FormDataParam("title") String title, // - @ApiInputOptional @ApiAsyncType(Long.class) @FormDataParam("genderId") String genderId, // - @ApiInputOptional @ApiAsyncType(Long.class) @FormDataParam("artistId") String artistId, // - @ApiInputOptional @ApiAsyncType(Long.class) @FormDataParam("albumId") String albumId, // + @ApiInputOptional @ApiAsyncType(ObjectId.class) @FormDataParam("genderId") String genderId, // + @ApiInputOptional @ApiAsyncType(ObjectId.class) @FormDataParam("artistId") String artistId, // + @ApiInputOptional @ApiAsyncType(ObjectId.class) @FormDataParam("albumId") String albumId, // @ApiInputOptional @ApiAsyncType(Long.class) @FormDataParam("trackId") String trackId, // @FormDataParam("file") final InputStream fileInputStream, // @FormDataParam("file") final FormDataContentDisposition fileMetaData // @@ -166,13 +166,13 @@ public class TrackResource { Track trackElem = new Track(); trackElem.name = title; trackElem.track = trackId != null ? Long.parseLong(trackId) : null; - trackElem.albumId = albumId != null ? Long.parseLong(albumId) : null; - trackElem.genderId = genderId != null ? Long.parseLong(genderId) : null; + trackElem.albumId = albumId != null ? new ObjectId(albumId) : null; + trackElem.genderId = genderId != null ? new ObjectId(genderId) : null; trackElem.dataId = data.oid; // Now list of artist has an internal management: if (artistId != null) { trackElem.artists = new ArrayList<>(); - trackElem.artists.add(artistId != null ? Long.parseLong(artistId) : null); + trackElem.artists.add(artistId != null ? new ObjectId(artistId) : null); } // TODO: maybe validate here .... diff --git a/back/src/org/atriasoft/karusic/migration/Initialization.java b/back/src/org/atriasoft/karusic/migration/Initialization.java index a379e5e..b2146db 100644 --- a/back/src/org/atriasoft/karusic/migration/Initialization.java +++ b/back/src/org/atriasoft/karusic/migration/Initialization.java @@ -56,56 +56,36 @@ public class Initialization extends MigrationSqlStep { for (final Class clazz : CLASSES_BASE) { addClass(clazz); } - addAction((final DBAccess da) -> { final List data = List.of(// - new Gender(1L, "Variété française"), // - new Gender(2L, "Pop"), // - new Gender(3L, "inconnue"), // - new Gender(4L, "Disco"), // - new Gender(5L, "Enfants"), // - new Gender(6L, "Portugaise"), // - new Gender(7L, "Apprentissage"), // - new Gender(8L, "Blues"), // - new Gender(9L, "Jazz"), // - new Gender(10L, "Chanson Noël"), // - new Gender(11L, "DubStep"), // - new Gender(12L, "Rap français"), // - new Gender(13L, "Classique"), // - new Gender(14L, "Rock"), // - new Gender(15L, "Electro"), // - new Gender(16L, "Celtique"), // - new Gender(17L, "Country"), // - new Gender(18L, "Variété Québéquoise"), // - new Gender(19L, "Médiéval"), // - new Gender(20L, "Variété Italienne"), // - new Gender(21L, "Comédie Musicale"), // - new Gender(22L, "Vianney"), // - new Gender(23L, "Bande Original"), // - new Gender(24L, "Bande Originale"), // - new Gender(25L, "Variété Belge"), // - new Gender(26L, "Gospel")); + new Gender("Variété française"), // + new Gender("Pop"), // + new Gender("inconnue"), // + new Gender("Disco"), // + new Gender("Enfants"), // + new Gender("Portugaise"), // + new Gender("Apprentissage"), // + new Gender("Blues"), // + new Gender("Jazz"), // + new Gender("Chanson Noël"), // + new Gender("DubStep"), // + new Gender("Rap français"), // + new Gender("Classique"), // + new Gender("Rock"), // + new Gender("Electro"), // + new Gender("Celtique"), // + new Gender("Country"), // + new Gender("Variété Québéquoise"), // + new Gender("Médiéval"), // + new Gender("Variété Italienne"), // + new Gender("Comédie Musicale"), // + new Gender("Vianney"), // + new Gender("Bande Original"), // + new Gender("Bande Originale"), // + new Gender("Variété Belge"), // + new Gender("Gospel")); da.insertMultiple(data); }); - // set start increment element to permit to add after default elements - addAction(""" - ALTER TABLE `album` AUTO_INCREMENT = 1000; - """, "mysql"); - addAction(""" - ALTER TABLE `artist` AUTO_INCREMENT = 1000; - """, "mysql"); - addAction(""" - ALTER TABLE `gender` AUTO_INCREMENT = 1000; - """, "mysql"); - addAction(""" - ALTER TABLE `playlist` AUTO_INCREMENT = 1000; - """, "mysql"); - addAction(""" - ALTER TABLE `track` AUTO_INCREMENT = 1000; - """, "mysql"); - addAction(""" - ALTER TABLE `user` AUTO_INCREMENT = 1000; - """, "mysql"); } public static void dropAll(final DBAccess da) { diff --git a/back/src/org/atriasoft/karusic/migration/Migration20250427.java b/back/src/org/atriasoft/karusic/migration/Migration20250427.java new file mode 100644 index 0000000..d642531 --- /dev/null +++ b/back/src/org/atriasoft/karusic/migration/Migration20250427.java @@ -0,0 +1,148 @@ +package org.atriasoft.karusic.migration; + +import java.util.ArrayList; +import java.util.List; + +import org.atriasoft.archidata.dataAccess.DBAccess; +import org.atriasoft.archidata.dataAccess.options.AccessDeletedItems; +import org.atriasoft.archidata.dataAccess.options.DirectData; +import org.atriasoft.archidata.dataAccess.options.ReadAllColumn; +import org.atriasoft.archidata.db.DbConfig; +import org.atriasoft.archidata.migration.MigrationSqlStep; +import org.atriasoft.archidata.model.Data; +import org.atriasoft.archidata.tools.ConfigBaseVariable; +import org.atriasoft.karusic.model.Album; +import org.atriasoft.karusic.model.Artist; +import org.atriasoft.karusic.model.Gender; +import org.atriasoft.karusic.model.Track; +import org.atriasoft.karusic.modelOld.AlbumOld; +import org.atriasoft.karusic.modelOld.ArtistOld; +import org.atriasoft.karusic.modelOld.GenderOld; +import org.atriasoft.karusic.modelOld.TrackOld; +import org.bson.types.ObjectId; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +public class Migration20250427 extends MigrationSqlStep { + private static final Logger LOGGER = LoggerFactory.getLogger(Migration20240226.class); + + public static final int KARSO_INITIALISATION_ID = 1; + + @Override + public String getName() { + return "migration-2025-04-27: Migrate to MongoDB"; + } + + public static ObjectId getElementArtist(final List datas, final Long id) throws Exception { + if (id == null) { + return null; + } + for (final var elem : datas) { + if (elem.id.equals(id)) { + return elem.getOid(); + } + } + throw new Exception("Does not exist"); + } + + public static ObjectId getElementAlbum(final List datas, final Long id) throws Exception { + if (id == null) { + return null; + } + for (final var elem : datas) { + if (elem.id.equals(id)) { + return elem.getOid(); + } + } + throw new Exception("Does not exist"); + } + + public static ObjectId getElementGender(final List datas, final Long id) throws Exception { + if (id == null) { + return null; + } + for (final var elem : datas) { + if (elem.id.equals(id)) { + return elem.getOid(); + } + } + throw new Exception("Does not exist"); + } + + @Override + public void generateStep() throws Exception { + addAction((final DBAccess daMongo) -> { + // Create the previous connection on SQL: + final DbConfig configSQL = new DbConfig("mysql", ConfigBaseVariable.getDBHost(), (short) 3906, + // final DbConfig config = new DbConfig("mysql", "db", (short) 3306, + ConfigBaseVariable.getDBLogin(), ConfigBaseVariable.getDBPassword(), ConfigBaseVariable.getDBName(), ConfigBaseVariable.getDBKeepConnected(), + List.of(ConfigBaseVariable.getBbInterfacesClasses())); + try (final DBAccess daSQL = DBAccess.createInterface(configSQL)) { + final List allData = daSQL.gets(Data.class, new ReadAllColumn(), new AccessDeletedItems()); + final List allOldAlbums = daSQL.gets(AlbumOld.class, new ReadAllColumn(), new AccessDeletedItems()); + final List allOldArtist = daSQL.gets(ArtistOld.class, new ReadAllColumn(), new AccessDeletedItems()); + final List allOldGender = daSQL.gets(GenderOld.class, new ReadAllColumn(), new AccessDeletedItems()); + final List allTOldrack = daSQL.gets(TrackOld.class, new ReadAllColumn(), new AccessDeletedItems()); + for (final Data elem : allData) { + daMongo.insert(elem, new DirectData()); + } + for (final AlbumOld elem : allOldAlbums) { + final Album tmp = new Album(); + tmp.oid = elem.getOid(); + tmp.deleted = elem.deleted; + tmp.updatedAt = elem.updatedAt; + tmp.createdAt = elem.createdAt; + tmp.name = elem.name; + tmp.description = elem.description; + tmp.covers = elem.covers; + daMongo.insert(tmp, new DirectData()); + } + for (final ArtistOld elem : allOldArtist) { + final Artist tmp = new Artist(); + tmp.oid = elem.getOid(); + tmp.deleted = elem.deleted; + tmp.updatedAt = elem.updatedAt; + tmp.createdAt = elem.createdAt; + tmp.name = elem.name; + tmp.description = elem.description; + tmp.covers = elem.covers; + tmp.firstName = elem.firstName; + tmp.birth = elem.birth; + tmp.death = elem.death; + daMongo.insert(tmp, new DirectData()); + } + for (final GenderOld elem : allOldGender) { + final Gender tmp = new Gender(); + tmp.oid = elem.getOid(); + tmp.deleted = elem.deleted; + tmp.updatedAt = elem.updatedAt; + tmp.createdAt = elem.createdAt; + tmp.name = elem.name; + tmp.description = elem.description; + tmp.covers = elem.covers; + daMongo.insert(tmp, new DirectData()); + } + for (final TrackOld elem : allTOldrack) { + final Track tmp = new Track(); + tmp.oid = elem.getOid(); + tmp.deleted = elem.deleted; + tmp.updatedAt = elem.updatedAt; + tmp.createdAt = elem.createdAt; + tmp.name = elem.name; + tmp.description = elem.description; + tmp.covers = elem.covers; + tmp.genderId = getElementGender(allOldGender, elem.genderId); + tmp.albumId = getElementAlbum(allOldAlbums, elem.albumId); + tmp.track = elem.track; + tmp.dataId = elem.dataId; + tmp.artists = new ArrayList<>(); + for (final Long artistId : elem.artists) { + tmp.artists.add(getElementArtist(allOldArtist, artistId)); + } + daMongo.insert(tmp, new DirectData()); + } + } + }); + } + +} diff --git a/back/src/org/atriasoft/karusic/model/Album.java b/back/src/org/atriasoft/karusic/model/Album.java index 945a31c..fb6e68a 100644 --- a/back/src/org/atriasoft/karusic/model/Album.java +++ b/back/src/org/atriasoft/karusic/model/Album.java @@ -4,13 +4,12 @@ import java.util.Date; import java.util.List; import org.atriasoft.archidata.annotation.DataIfNotExists; -import org.atriasoft.archidata.annotation.DataJson; import org.atriasoft.archidata.annotation.apiGenerator.ApiAccessLimitation; import org.atriasoft.archidata.annotation.apiGenerator.ApiGenerationMode; import org.atriasoft.archidata.annotation.checker.CheckForeignKey; import org.atriasoft.archidata.annotation.checker.CollectionNotEmpty; import org.atriasoft.archidata.model.Data; -import org.atriasoft.archidata.model.GenericDataSoftDelete; +import org.atriasoft.archidata.model.OIDGenericDataSoftDelete; import org.bson.types.ObjectId; import org.hibernate.validator.constraints.UniqueElements; @@ -20,16 +19,14 @@ import dev.morphia.annotations.Entity; import io.swagger.v3.oas.annotations.media.Schema; import jakarta.annotation.Nullable; import jakarta.persistence.Column; -import jakarta.persistence.Table; import jakarta.validation.constraints.NotNull; import jakarta.validation.constraints.Size; -@Entity("Album") -@Table(name = "album") +@Entity() @DataIfNotExists @JsonInclude(JsonInclude.Include.NON_NULL) @ApiGenerationMode(create = true, update = true) -public class Album extends GenericDataSoftDelete { +public class Album extends OIDGenericDataSoftDelete { @Column(length = 256) @Size(min = 1, max = 256) public String name = null; @@ -37,7 +34,6 @@ public class Album extends GenericDataSoftDelete { @Size(min = 0, max = 8192) public String description = null; @Schema(description = "List of Id of the specific covers") - @DataJson() @Nullable @CollectionNotEmpty @UniqueElements diff --git a/back/src/org/atriasoft/karusic/model/Artist.java b/back/src/org/atriasoft/karusic/model/Artist.java index d783129..714e0be 100644 --- a/back/src/org/atriasoft/karusic/model/Artist.java +++ b/back/src/org/atriasoft/karusic/model/Artist.java @@ -4,13 +4,12 @@ import java.util.Date; import java.util.List; import org.atriasoft.archidata.annotation.DataIfNotExists; -import org.atriasoft.archidata.annotation.DataJson; import org.atriasoft.archidata.annotation.apiGenerator.ApiAccessLimitation; import org.atriasoft.archidata.annotation.apiGenerator.ApiGenerationMode; import org.atriasoft.archidata.annotation.checker.CheckForeignKey; import org.atriasoft.archidata.annotation.checker.CollectionNotEmpty; import org.atriasoft.archidata.model.Data; -import org.atriasoft.archidata.model.GenericDataSoftDelete; +import org.atriasoft.archidata.model.OIDGenericDataSoftDelete; import org.bson.types.ObjectId; import org.hibernate.validator.constraints.UniqueElements; @@ -20,16 +19,14 @@ import dev.morphia.annotations.Entity; import io.swagger.v3.oas.annotations.media.Schema; import jakarta.annotation.Nullable; import jakarta.persistence.Column; -import jakarta.persistence.Table; import jakarta.validation.constraints.NotNull; import jakarta.validation.constraints.Size; -@Entity("Artist") -@Table(name = "artist") +@Entity() @DataIfNotExists @JsonInclude(JsonInclude.Include.NON_NULL) @ApiGenerationMode(create = true, update = true) -public class Artist extends GenericDataSoftDelete { +public class Artist extends OIDGenericDataSoftDelete { @Column(length = 256) @Size(min = 1, max = 256) public String name = null; @@ -37,7 +34,6 @@ public class Artist extends GenericDataSoftDelete { @Size(min = 0, max = 8192) public String description = null; @Schema(description = "List of Id of the specific covers") - @DataJson() @Nullable @CollectionNotEmpty @UniqueElements @@ -54,7 +50,7 @@ public class Artist extends GenericDataSoftDelete { @Override public String toString() { - return "Artist [id=" + this.id + ", name=" + this.name + ", description=" + this.description + ", covers=" + this.covers + ", firstName=" + this.firstName + ", surname=" + this.surname + return "Artist [id=" + this.oid + ", name=" + this.name + ", description=" + this.description + ", covers=" + this.covers + ", firstName=" + this.firstName + ", surname=" + this.surname + ", birth=" + this.birth + ", death=" + this.death + "]"; } } diff --git a/back/src/org/atriasoft/karusic/model/Gender.java b/back/src/org/atriasoft/karusic/model/Gender.java index e053fe5..39bf10d 100644 --- a/back/src/org/atriasoft/karusic/model/Gender.java +++ b/back/src/org/atriasoft/karusic/model/Gender.java @@ -15,13 +15,12 @@ CREATE TABLE `node` ( import java.util.List; import org.atriasoft.archidata.annotation.DataIfNotExists; -import org.atriasoft.archidata.annotation.DataJson; import org.atriasoft.archidata.annotation.apiGenerator.ApiAccessLimitation; import org.atriasoft.archidata.annotation.apiGenerator.ApiGenerationMode; import org.atriasoft.archidata.annotation.checker.CheckForeignKey; import org.atriasoft.archidata.annotation.checker.CollectionNotEmpty; import org.atriasoft.archidata.model.Data; -import org.atriasoft.archidata.model.GenericDataSoftDelete; +import org.atriasoft.archidata.model.OIDGenericDataSoftDelete; import org.bson.types.ObjectId; import org.hibernate.validator.constraints.UniqueElements; @@ -31,16 +30,14 @@ import dev.morphia.annotations.Entity; import io.swagger.v3.oas.annotations.media.Schema; import jakarta.annotation.Nullable; import jakarta.persistence.Column; -import jakarta.persistence.Table; import jakarta.validation.constraints.NotNull; import jakarta.validation.constraints.Size; -@Entity("Gender") -@Table(name = "gender") +@Entity() @DataIfNotExists @JsonInclude(JsonInclude.Include.NON_NULL) @ApiGenerationMode(create = true, update = true) -public class Gender extends GenericDataSoftDelete { +public class Gender extends OIDGenericDataSoftDelete { @Column(length = 256) @Size(min = 1, max = 256) public String name = null; @@ -48,7 +45,6 @@ public class Gender extends GenericDataSoftDelete { @Size(min = 0, max = 8192) public String description = null; @Schema(description = "List of Id of the specific covers") - @DataJson() @Nullable @CollectionNotEmpty @UniqueElements @@ -57,8 +53,12 @@ public class Gender extends GenericDataSoftDelete { public Gender() {} - public Gender(final Long id, final String name) { - this.id = id; + public Gender(final String name) { + this.name = name; + } + + public Gender(final ObjectId oid, final String name) { + this.oid = oid; this.name = name; } diff --git a/back/src/org/atriasoft/karusic/model/Playlist.java b/back/src/org/atriasoft/karusic/model/Playlist.java index 1a95eaf..aa10c10 100644 --- a/back/src/org/atriasoft/karusic/model/Playlist.java +++ b/back/src/org/atriasoft/karusic/model/Playlist.java @@ -15,13 +15,12 @@ CREATE TABLE `node` ( import java.util.List; import org.atriasoft.archidata.annotation.DataIfNotExists; -import org.atriasoft.archidata.annotation.DataJson; import org.atriasoft.archidata.annotation.apiGenerator.ApiAccessLimitation; import org.atriasoft.archidata.annotation.apiGenerator.ApiGenerationMode; import org.atriasoft.archidata.annotation.checker.CheckForeignKey; import org.atriasoft.archidata.annotation.checker.CollectionNotEmpty; import org.atriasoft.archidata.model.Data; -import org.atriasoft.archidata.model.GenericDataSoftDelete; +import org.atriasoft.archidata.model.OIDGenericDataSoftDelete; import org.bson.types.ObjectId; import org.hibernate.validator.constraints.UniqueElements; @@ -31,16 +30,14 @@ import dev.morphia.annotations.Entity; import io.swagger.v3.oas.annotations.media.Schema; import jakarta.annotation.Nullable; import jakarta.persistence.Column; -import jakarta.persistence.Table; import jakarta.validation.constraints.NotNull; import jakarta.validation.constraints.Size; -@Entity("Playlist") -@Table(name = "playlist") +@Entity() @DataIfNotExists @JsonInclude(JsonInclude.Include.NON_NULL) @ApiGenerationMode(create = true, update = true) -public class Playlist extends GenericDataSoftDelete { +public class Playlist extends OIDGenericDataSoftDelete { @Column(length = 256) @Size(min = 1, max = 256) public String name = null; @@ -48,12 +45,10 @@ public class Playlist extends GenericDataSoftDelete { @Size(min = 0, max = 8192) public String description = null; @Schema(description = "List of Id of the specific covers") - @DataJson() @Nullable @CollectionNotEmpty @UniqueElements @ApiAccessLimitation(readable = true, creatable = false, updatable = false) public List<@CheckForeignKey(target = Data.class) @NotNull ObjectId> covers = null; - @DataJson() - public List<@CheckForeignKey(target = Track.class) @NotNull Long> tracks = null; + public List<@CheckForeignKey(target = Track.class) @NotNull ObjectId> tracks = null; } diff --git a/back/src/org/atriasoft/karusic/model/Track.java b/back/src/org/atriasoft/karusic/model/Track.java index 9631a33..d912540 100644 --- a/back/src/org/atriasoft/karusic/model/Track.java +++ b/back/src/org/atriasoft/karusic/model/Track.java @@ -15,13 +15,12 @@ CREATE TABLE `node` ( import java.util.List; import org.atriasoft.archidata.annotation.DataIfNotExists; -import org.atriasoft.archidata.annotation.DataJson; import org.atriasoft.archidata.annotation.apiGenerator.ApiAccessLimitation; import org.atriasoft.archidata.annotation.apiGenerator.ApiGenerationMode; import org.atriasoft.archidata.annotation.checker.CheckForeignKey; import org.atriasoft.archidata.annotation.checker.CollectionNotEmpty; import org.atriasoft.archidata.model.Data; -import org.atriasoft.archidata.model.GenericDataSoftDelete; +import org.atriasoft.archidata.model.OIDGenericDataSoftDelete; import org.bson.types.ObjectId; import org.hibernate.validator.constraints.UniqueElements; @@ -31,17 +30,15 @@ import dev.morphia.annotations.Entity; import io.swagger.v3.oas.annotations.media.Schema; import jakarta.annotation.Nullable; import jakarta.persistence.Column; -import jakarta.persistence.Table; import jakarta.validation.constraints.NotNull; import jakarta.validation.constraints.PositiveOrZero; import jakarta.validation.constraints.Size; -@Entity("Track") -@Table(name = "track") +@Entity() @DataIfNotExists @JsonInclude(JsonInclude.Include.NON_NULL) @ApiGenerationMode(create = true, update = true) -public class Track extends GenericDataSoftDelete { +public class Track extends OIDGenericDataSoftDelete { @Column(length = 256) @Size(min = 1, max = 256) @@ -50,28 +47,25 @@ public class Track extends GenericDataSoftDelete { @Size(min = 0, max = 8192) public String description = null; @Schema(description = "List of Id of the specific covers") - @DataJson() @Nullable @CollectionNotEmpty @UniqueElements @ApiAccessLimitation(readable = true, creatable = false, updatable = false) public List<@CheckForeignKey(target = Data.class) @NotNull ObjectId> covers = null; @CheckForeignKey(target = Gender.class) - public Long genderId = null; + public ObjectId genderId = null; @CheckForeignKey(target = Album.class) - public Long albumId = null; + public ObjectId albumId = null; @PositiveOrZero public Long track = null; @CheckForeignKey(target = Data.class) public ObjectId dataId = null; - // @ManyToMany(fetch = FetchType.LAZY, targetEntity = Artist.class) - @DataJson @Column(length = 0) - public List<@CheckForeignKey(target = Artist.class) @NotNull Long> artists = null; + public List<@CheckForeignKey(target = Artist.class) @NotNull ObjectId> artists = null; @Override public String toString() { - return "Track [id=" + this.id + ", deleted=" + this.deleted + ", createdAt=" + this.createdAt + ", updatedAt=" + this.updatedAt + ", name=" + this.name + ", description=" + this.description + return "Track [oid=" + this.oid + ", deleted=" + this.deleted + ", createdAt=" + this.createdAt + ", updatedAt=" + this.updatedAt + ", name=" + this.name + ", description=" + this.description + ", covers=" + this.covers + ", genderId=" + this.genderId + ", albumId=" + this.albumId + ", track=" + this.track + ", dataId=" + this.dataId + ", artists=" + this.artists + "]"; } } diff --git a/back/src/org/atriasoft/karusic/modelOld/AlbumOld.java b/back/src/org/atriasoft/karusic/modelOld/AlbumOld.java new file mode 100644 index 0000000..f188dfe --- /dev/null +++ b/back/src/org/atriasoft/karusic/modelOld/AlbumOld.java @@ -0,0 +1,32 @@ +package org.atriasoft.karusic.modelOld; + +import java.util.Date; +import java.util.List; + +import org.atriasoft.archidata.annotation.DataJson; +import org.atriasoft.archidata.model.GenericDataSoftDelete; +import org.bson.types.ObjectId; + +import io.swagger.v3.oas.annotations.media.Schema; +import jakarta.persistence.Column; +import jakarta.persistence.Table; + +@Table(name = "album") +public class AlbumOld extends GenericDataSoftDelete { + @Column(length = 256) + public String name = null; + @Column(length = 0) + public String description = null; + @Schema(description = "List of Id of the specific covers") + @DataJson() + public List covers = null; + + public Date publication; + + @Column(nullable = true) + private final ObjectId oid = new ObjectId(); + + public ObjectId getOid() { + return this.oid; + } +} diff --git a/back/src/org/atriasoft/karusic/modelOld/ArtistOld.java b/back/src/org/atriasoft/karusic/modelOld/ArtistOld.java new file mode 100644 index 0000000..13237ee --- /dev/null +++ b/back/src/org/atriasoft/karusic/modelOld/ArtistOld.java @@ -0,0 +1,34 @@ +package org.atriasoft.karusic.modelOld; + +import java.util.Date; +import java.util.List; + +import org.atriasoft.archidata.annotation.DataJson; +import org.atriasoft.archidata.model.GenericDataSoftDelete; +import org.bson.types.ObjectId; + +import jakarta.persistence.Column; +import jakarta.persistence.Table; + +@Table(name = "artist") +public class ArtistOld extends GenericDataSoftDelete { + @Column(length = 256) + public String name = null; + @Column(length = 0) + public String description = null; + @DataJson() + public List covers = null; + @Column(length = 256) + public String firstName = null; + @Column(length = 256) + public String surname = null; + public Date birth = null; + public Date death = null; + + @Column(nullable = true) + private final ObjectId oid = new ObjectId(); + + public ObjectId getOid() { + return this.oid; + } +} diff --git a/back/src/org/atriasoft/karusic/modelOld/GenderOld.java b/back/src/org/atriasoft/karusic/modelOld/GenderOld.java new file mode 100644 index 0000000..43f15ea --- /dev/null +++ b/back/src/org/atriasoft/karusic/modelOld/GenderOld.java @@ -0,0 +1,53 @@ +package org.atriasoft.karusic.modelOld; +/* +CREATE TABLE `node` ( + `id` bigint NOT NULL COMMENT 'table ID' AUTO_INCREMENT PRIMARY KEY, + `deleted` BOOLEAN NOT NULL DEFAULT false, + `create_date` datetime NOT NULL DEFAULT now() COMMENT 'Time the element has been created', + `modify_date` datetime NOT NULL DEFAULT now() COMMENT 'Time the element has been update', + `type` enum("TYPE", "UNIVERS", "SERIE", "SAISON", "MEDIA") NOT NULL DEFAULT 'TYPE', + `name` TEXT COLLATE 'utf8_general_ci' NOT NULL, + `description` TEXT COLLATE 'utf8_general_ci', + `parent_id` bigint +) AUTO_INCREMENT=10; +*/ + +import java.util.List; + +import org.atriasoft.archidata.annotation.DataJson; +import org.atriasoft.archidata.annotation.checker.CheckForeignKey; +import org.atriasoft.archidata.model.Data; +import org.atriasoft.archidata.model.GenericDataSoftDelete; +import org.bson.types.ObjectId; + +import jakarta.persistence.Column; +import jakarta.persistence.Table; +import jakarta.validation.constraints.NotNull; + +@Table(name = "gender") +public class GenderOld extends GenericDataSoftDelete { + @Column(length = 256) + public String name = null; + @Column(length = 0) + public String description = null; + @DataJson() + public List<@CheckForeignKey(target = Data.class) @NotNull ObjectId> covers = null; + + public GenderOld() {} + + public GenderOld(final String name) { + this.name = name; + } + + public GenderOld(final Long id, final String name) { + this.id = id; + this.name = name; + } + + @Column(nullable = true) + private final ObjectId oid = new ObjectId(); + + public ObjectId getOid() { + return this.oid; + } +} diff --git a/back/src/org/atriasoft/karusic/modelOld/TrackOld.java b/back/src/org/atriasoft/karusic/modelOld/TrackOld.java new file mode 100644 index 0000000..55630ac --- /dev/null +++ b/back/src/org/atriasoft/karusic/modelOld/TrackOld.java @@ -0,0 +1,48 @@ +package org.atriasoft.karusic.modelOld; +/* +CREATE TABLE `node` ( + `id` bigint NOT NULL COMMENT 'table ID' AUTO_INCREMENT PRIMARY KEY, + `deleted` BOOLEAN NOT NULL DEFAULT false, + `create_date` datetime NOT NULL DEFAULT now() COMMENT 'Time the element has been created', + `modify_date` datetime NOT NULL DEFAULT now() COMMENT 'Time the element has been update', + `type` enum("TYPE", "UNIVERS", "SERIE", "SAISON", "MEDIA") NOT NULL DEFAULT 'TYPE', + `name` TEXT COLLATE 'utf8_general_ci' NOT NULL, + `description` TEXT COLLATE 'utf8_general_ci', + `parent_id` bigint +) AUTO_INCREMENT=10; + */ + +import java.util.List; + +import org.atriasoft.archidata.annotation.DataJson; +import org.atriasoft.archidata.annotation.checker.CheckForeignKey; +import org.atriasoft.archidata.model.Data; +import org.atriasoft.archidata.model.GenericDataSoftDelete; +import org.bson.types.ObjectId; + +import jakarta.persistence.Column; +import jakarta.persistence.Table; +import jakarta.validation.constraints.NotNull; + +@Table(name = "track") +public class TrackOld extends GenericDataSoftDelete { + @Column(length = 256) + public String name = null; + @Column(length = 0) + public String description = null; + @DataJson() + public List<@CheckForeignKey(target = Data.class) @NotNull ObjectId> covers = null; + public Long genderId = null; + public Long albumId = null; + public Long track = null; + public ObjectId dataId = null; + @DataJson + public List artists = null; + + @Column(nullable = true) + private final ObjectId oid = new ObjectId(); + + public ObjectId getOid() { + return this.oid; + } +} diff --git a/back/test/src/test/atriasoft/karusic/ConfigureDb.java b/back/test/src/test/atriasoft/karusic/ConfigureDb.java index 879c4c6..b783948 100644 --- a/back/test/src/test/atriasoft/karusic/ConfigureDb.java +++ b/back/test/src/test/atriasoft/karusic/ConfigureDb.java @@ -1,19 +1,12 @@ package test.atriasoft.karusic; import java.io.IOException; -import java.util.List; import org.atriasoft.archidata.dataAccess.DBAccess; import org.atriasoft.archidata.db.DbConfig; import org.atriasoft.archidata.db.DbIoFactory; import org.atriasoft.archidata.exception.DataAccessException; import org.atriasoft.archidata.tools.ConfigBaseVariable; -import org.atriasoft.karusic.model.Album; -import org.atriasoft.karusic.model.Artist; -import org.atriasoft.karusic.model.Gender; -import org.atriasoft.karusic.model.Playlist; -import org.atriasoft.karusic.model.Track; -import org.atriasoft.karusic.model.UserKarusic; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -39,14 +32,6 @@ public class ConfigureDb { 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( // - Album.class, // - Artist.class, // - Gender.class, // - Playlist.class, // - Track.class, // - UserKarusic.class // - ); if ("SQLITE-MEMORY".equalsIgnoreCase(modeTest)) { ConfigBaseVariable.dbType = "sqlite"; ConfigBaseVariable.bdDatabase = null; diff --git a/back/test/src/test/atriasoft/karusic/TestHealthCheck.java b/back/test/src/test/atriasoft/karusic/TestHealthCheck.java index ab1cf76..4939472 100644 --- a/back/test/src/test/atriasoft/karusic/TestHealthCheck.java +++ b/back/test/src/test/atriasoft/karusic/TestHealthCheck.java @@ -1,5 +1,9 @@ package test.atriasoft.karusic; +import org.atriasoft.archidata.exception.RESTErrorResponseException; +import org.atriasoft.archidata.tools.ConfigBaseVariable; +import org.atriasoft.archidata.tools.RESTApi; +import org.atriasoft.karusic.api.HealthCheck.HealthResult; import org.junit.jupiter.api.AfterAll; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.BeforeAll; @@ -8,10 +12,6 @@ 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.atriasoft.archidata.exception.RESTErrorResponseException; -import org.atriasoft.archidata.tools.ConfigBaseVariable; -import org.atriasoft.archidata.tools.RESTApi; -import org.atriasoft.karusic.api.HealthCheck.HealthResult; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -46,14 +46,14 @@ public class TestHealthCheck { @Order(1) @Test public void checkHealthCheck() throws Exception { - final HealthResult result = api.get(HealthResult.class, "health_check"); + final HealthResult result = api.request("health_check").get().fetch(HealthResult.class); 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")); + Assertions.assertThrows(RESTErrorResponseException.class, () -> api.request("health_check_kaboom").get().fetch()); } } diff --git a/back/test/src/test/atriasoft/karusic/TestTrack.java b/back/test/src/test/atriasoft/karusic/TestTrack.java index cebb9aa..c00e5c6 100644 --- a/back/test/src/test/atriasoft/karusic/TestTrack.java +++ b/back/test/src/test/atriasoft/karusic/TestTrack.java @@ -7,6 +7,9 @@ import java.nio.file.Files; import java.util.HashMap; import java.util.Map; +import org.atriasoft.archidata.tools.ConfigBaseVariable; +import org.atriasoft.archidata.tools.RESTApi; +import org.atriasoft.karusic.model.Track; import org.junit.jupiter.api.AfterAll; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.BeforeAll; @@ -15,9 +18,6 @@ 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.atriasoft.archidata.tools.ConfigBaseVariable; -import org.atriasoft.archidata.tools.RESTApi; -import org.atriasoft.karusic.model.Track; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -25,8 +25,8 @@ import org.slf4j.LoggerFactory; @TestMethodOrder(MethodOrderer.OrderAnnotation.class) public class TestTrack { private final static Logger LOGGER = LoggerFactory.getLogger(TestTrack.class); - public final static String ENDPOINT_NAME = "track/"; - public final static String ENDPOINT_DATA_NAME = "data/"; + public final static String ENDPOINT_NAME = "track"; + public final static String ENDPOINT_DATA_NAME = "data"; static WebLauncherTest webInterface = null; static RESTApi api = null; @@ -89,11 +89,11 @@ public class TestTrack { multipart.put("trackId", 9); multipart.put("file", dataToUpload); - final Track inserted = api.postMultipart(Track.class, TestTrack.ENDPOINT_NAME + "upload", multipart); + final Track inserted = api.request(TestTrack.ENDPOINT_NAME, "upload").post().bodyMultipart(multipart).fetch(Track.class); Assertions.assertNotNull(inserted); - Assertions.assertNotNull(inserted.id); - Assertions.assertTrue(inserted.id >= 0); + Assertions.assertNotNull(inserted.oid); + // Assertions.assertTrue(inserted.oid >= 0); Assertions.assertNull(inserted.updatedAt); Assertions.assertNull(inserted.createdAt); Assertions.assertNull(inserted.deleted); @@ -102,8 +102,7 @@ public class TestTrack { Assertions.assertNotNull(inserted.dataId); // Retrieve Data: - final HttpResponse retreiveData = api.getRaw(TestTrack.ENDPOINT_DATA_NAME + inserted.dataId); - + final HttpResponse retreiveData = api.request(TestTrack.ENDPOINT_DATA_NAME, inserted.dataId.toString()).get().fetchByte(); Assertions.assertNotNull(retreiveData); Assertions.assertEquals(200, retreiveData.statusCode()); Assertions.assertEquals("11999", retreiveData.headers().firstValue("content-length").orElse(null)); diff --git a/front/.env b/front/.env new file mode 100644 index 0000000..083c815 --- /dev/null +++ b/front/.env @@ -0,0 +1 @@ +NODE_ENV=development \ No newline at end of file diff --git a/front/config sample.yaml b/front/config sample.yaml new file mode 100644 index 0000000..bb0f3c8 --- /dev/null +++ b/front/config sample.yaml @@ -0,0 +1,10637 @@ +{ + conditions: { + hover: [ + '@media (hover: hover)', + '&:is(:hover, [data-hover]):not(:disabled, [data-disabled])', + ], + active: + '&:is(:active, [data-active]):not(:disabled, [data-disabled], [data-state=open])', + focus: '&:is(:focus, [data-focus])', + focusWithin: '&:is(:focus-within, [data-focus-within])', + focusVisible: '&:is(:focus-visible, [data-focus-visible])', + disabled: + '&:is(:disabled, [disabled], [data-disabled], [aria-disabled=true])', + visited: '&:visited', + target: '&:target', + readOnly: '&:is([data-readonly], [aria-readonly=true], [readonly])', + readWrite: '&:read-write', + empty: '&:is(:empty, [data-empty])', + checked: + '&:is(:checked, [data-checked], [aria-checked=true], [data-state=checked])', + enabled: '&:enabled', + expanded: + '&:is([aria-expanded=true], [data-expanded], [data-state=expanded])', + highlighted: '&[data-highlighted]', + complete: '&[data-complete]', + incomplete: '&[data-incomplete]', + dragging: '&[data-dragging]', + before: '&::before', + after: '&::after', + firstLetter: '&::first-letter', + firstLine: '&::first-line', + marker: '&::marker', + selection: '&::selection', + file: '&::file-selector-button', + backdrop: '&::backdrop', + first: '&:first-of-type', + last: '&:last-of-type', + notFirst: '&:not(:first-of-type)', + notLast: '&:not(:last-of-type)', + only: '&:only-child', + even: '&:nth-of-type(even)', + odd: '&:nth-of-type(odd)', + peerFocus: '.peer:is(:focus, [data-focus]) ~ &', + peerHover: + '.peer:is(:hover, [data-hover]):not(:disabled, [data-disabled]) ~ &', + peerActive: + '.peer:is(:active, [data-active]):not(:disabled, [data-disabled]) ~ &', + peerFocusWithin: '.peer:focus-within ~ &', + peerFocusVisible: '.peer:is(:focus-visible, [data-focus-visible]) ~ &', + peerDisabled: '.peer:is(:disabled, [disabled], [data-disabled]) ~ &', + peerChecked: + '.peer:is(:checked, [data-checked], [aria-checked=true], [data-state=checked]) ~ &', + peerInvalid: '.peer:is(:invalid, [data-invalid], [aria-invalid=true]) ~ &', + peerExpanded: + '.peer:is([aria-expanded=true], [data-expanded], [data-state=expanded]) ~ &', + peerPlaceholderShown: '.peer:placeholder-shown ~ &', + groupFocus: '.group:is(:focus, [data-focus]) &', + groupHover: + '.group:is(:hover, [data-hover]):not(:disabled, [data-disabled]) &', + groupActive: + '.group:is(:active, [data-active]):not(:disabled, [data-disabled]) &', + groupFocusWithin: '.group:focus-within &', + groupFocusVisible: '.group:is(:focus-visible, [data-focus-visible]) &', + groupDisabled: '.group:is(:disabled, [disabled], [data-disabled]) &', + groupChecked: + '.group:is(:checked, [data-checked], [aria-checked=true], [data-state=checked]) &', + groupExpanded: + '.group:is([aria-expanded=true], [data-expanded], [data-state=expanded]) &', + groupInvalid: '.group:invalid &', + indeterminate: + '&:is(:indeterminate, [data-indeterminate], [aria-checked=mixed], [data-state=indeterminate])', + required: '&:is([data-required], [aria-required=true])', + valid: '&:is([data-valid], [data-state=valid])', + invalid: '&:is([data-invalid], [aria-invalid=true], [data-state=invalid])', + autofill: '&:autofill', + inRange: '&:is(:in-range, [data-in-range])', + outOfRange: '&:is(:out-of-range, [data-outside-range])', + placeholder: '&::placeholder, &[data-placeholder]', + placeholderShown: '&:is(:placeholder-shown, [data-placeholder-shown])', + pressed: '&:is([aria-pressed=true], [data-pressed])', + selected: '&:is([aria-selected=true], [data-selected])', + grabbed: '&:is([aria-grabbed=true], [data-grabbed])', + underValue: '&[data-state=under-value]', + overValue: '&[data-state=over-value]', + atValue: '&[data-state=at-value]', + default: '&:default', + optional: '&:optional', + open: '&:is([open], [data-open], [data-state=open])', + closed: '&:is([closed], [data-closed], [data-state=closed])', + fullscreen: '&is(:fullscreen, [data-fullscreen])', + loading: '&:is([data-loading], [aria-busy=true])', + hidden: '&:is([hidden], [data-hidden])', + current: '&[data-current]', + currentPage: '&[aria-current=page]', + currentStep: '&[aria-current=step]', + today: '&[data-today]', + unavailable: '&[data-unavailable]', + rangeStart: '&[data-range-start]', + rangeEnd: '&[data-range-end]', + now: '&[data-now]', + topmost: '&[data-topmost]', + motionReduce: '@media (prefers-reduced-motion: reduce)', + motionSafe: '@media (prefers-reduced-motion: no-preference)', + print: '@media print', + landscape: '@media (orientation: landscape)', + portrait: '@media (orientation: portrait)', + dark: '.dark &, .dark .chakra-theme:not(.light) &', + light: ':root &, .light &', + osDark: '@media (prefers-color-scheme: dark)', + osLight: '@media (prefers-color-scheme: light)', + highContrast: '@media (forced-colors: active)', + lessContrast: '@media (prefers-contrast: less)', + moreContrast: '@media (prefers-contrast: more)', + ltr: '[dir=ltr] &', + rtl: '[dir=rtl] &', + scrollbar: '&::-webkit-scrollbar', + scrollbarThumb: '&::-webkit-scrollbar-thumb', + scrollbarTrack: '&::-webkit-scrollbar-track', + horizontal: '&[data-orientation=horizontal]', + vertical: '&[data-orientation=vertical]', + icon: '& :where(svg)', + starting: '@starting-style', + }, + utilities: { + background: { + shorthand: ['bg'], + }, + backgroundColor: { + shorthand: ['bgColor'], + }, + backgroundSize: { + shorthand: ['bgSize'], + }, + backgroundPosition: { + shorthand: ['bgPos'], + }, + backgroundRepeat: { + shorthand: ['bgRepeat'], + }, + backgroundAttachment: { + shorthand: ['bgAttachment'], + }, + backgroundClip: { + shorthand: ['bgClip'], + values: ['text'], + }, + backgroundGradient: { + shorthand: ['bgGradient'], + }, + gradientFrom: {}, + gradientTo: {}, + gradientVia: {}, + backgroundImage: { + values: 'gradients', + shorthand: ['bgImg', 'bgImage'], + }, + border: { + values: 'borders', + }, + borderTop: { + values: 'borders', + }, + borderLeft: { + values: 'borders', + }, + borderBlockStart: { + values: 'borders', + }, + borderRight: { + values: 'borders', + }, + borderInlineEnd: { + values: 'borders', + }, + borderBottom: { + values: 'borders', + }, + borderBlockEnd: { + values: 'borders', + }, + borderInlineStart: { + values: 'borders', + shorthand: ['borderStart'], + }, + borderInline: { + values: 'borders', + shorthand: ['borderX'], + }, + borderBlock: { + values: 'borders', + shorthand: ['borderY'], + }, + borderColor: {}, + borderTopColor: {}, + borderBlockStartColor: {}, + borderBottomColor: {}, + borderBlockEndColor: {}, + borderLeftColor: {}, + borderInlineStartColor: { + shorthand: ['borderStartColor'], + }, + borderRightColor: {}, + borderInlineEndColor: { + shorthand: ['borderEndColor'], + }, + borderStyle: { + values: 'borderStyles', + }, + borderTopStyle: { + values: 'borderStyles', + }, + borderBlockStartStyle: { + values: 'borderStyles', + }, + borderBottomStyle: { + values: 'borderStyles', + }, + borderBlockEndStyle: { + values: 'borderStyles', + }, + borderInlineStartStyle: { + values: 'borderStyles', + shorthand: ['borderStartStyle'], + }, + borderInlineEndStyle: { + values: 'borderStyles', + shorthand: ['borderEndStyle'], + }, + borderLeftStyle: { + values: 'borderStyles', + }, + borderRightStyle: { + values: 'borderStyles', + }, + borderRadius: { + values: 'radii', + shorthand: ['rounded'], + }, + borderTopLeftRadius: { + values: 'radii', + shorthand: ['roundedTopLeft'], + }, + borderStartStartRadius: { + values: 'radii', + shorthand: ['roundedStartStart', 'borderTopStartRadius'], + }, + borderEndStartRadius: { + values: 'radii', + shorthand: ['roundedEndStart', 'borderBottomStartRadius'], + }, + borderTopRightRadius: { + values: 'radii', + shorthand: ['roundedTopRight'], + }, + borderStartEndRadius: { + values: 'radii', + shorthand: ['roundedStartEnd', 'borderTopEndRadius'], + }, + borderEndEndRadius: { + values: 'radii', + shorthand: ['roundedEndEnd', 'borderBottomEndRadius'], + }, + borderBottomLeftRadius: { + values: 'radii', + shorthand: ['roundedBottomLeft'], + }, + borderBottomRightRadius: { + values: 'radii', + shorthand: ['roundedBottomRight'], + }, + borderInlineStartRadius: { + values: 'radii', + property: 'borderRadius', + shorthand: ['roundedStart', 'borderStartRadius'], + }, + borderInlineEndRadius: { + values: 'radii', + property: 'borderRadius', + shorthand: ['roundedEnd', 'borderEndRadius'], + }, + borderTopRadius: { + values: 'radii', + property: 'borderRadius', + shorthand: ['roundedTop'], + }, + borderBottomRadius: { + values: 'radii', + property: 'borderRadius', + shorthand: ['roundedBottom'], + }, + borderLeftRadius: { + values: 'radii', + property: 'borderRadius', + shorthand: ['roundedLeft'], + }, + borderRightRadius: { + values: 'radii', + property: 'borderRadius', + shorthand: ['roundedRight'], + }, + borderWidth: { + values: 'borderWidths', + }, + borderBlockStartWidth: { + values: 'borderWidths', + }, + borderTopWidth: { + values: 'borderWidths', + }, + borderBottomWidth: { + values: 'borderWidths', + }, + borderBlockEndWidth: { + values: 'borderWidths', + }, + borderRightWidth: { + values: 'borderWidths', + }, + borderInlineWidth: { + values: 'borderWidths', + shorthand: ['borderXWidth'], + }, + borderInlineStartWidth: { + values: 'borderWidths', + shorthand: ['borderStartWidth'], + }, + borderInlineEndWidth: { + values: 'borderWidths', + shorthand: ['borderEndWidth'], + }, + borderLeftWidth: { + values: 'borderWidths', + }, + borderBlockWidth: { + values: 'borderWidths', + shorthand: ['borderYWidth'], + }, + color: {}, + fill: {}, + stroke: {}, + accentColor: {}, + divideX: { + values: { + type: 'string', + }, + }, + divideY: { + values: { + type: 'string', + }, + }, + divideColor: {}, + divideStyle: { + property: 'borderStyle', + }, + boxShadow: { + values: 'shadows', + shorthand: ['shadow'], + }, + boxShadowColor: { + shorthand: ['shadowColor'], + }, + mixBlendMode: { + shorthand: ['blendMode'], + }, + backgroundBlendMode: { + shorthand: ['bgBlendMode'], + }, + opacity: { + values: 'opacity', + }, + filter: {}, + blur: { + values: 'blurs', + }, + brightness: {}, + contrast: {}, + grayscale: {}, + hueRotate: {}, + invert: {}, + saturate: {}, + sepia: {}, + dropShadow: {}, + backdropFilter: {}, + backdropBlur: { + values: 'blurs', + }, + backdropBrightness: {}, + backdropContrast: {}, + backdropGrayscale: {}, + backdropHueRotate: {}, + backdropInvert: {}, + backdropOpacity: {}, + backdropSaturate: {}, + backdropSepia: {}, + flexBasis: { + values: 'sizes', + }, + gap: { + values: 'spacing', + }, + rowGap: { + values: 'spacing', + shorthand: ['gapY'], + }, + columnGap: { + values: 'spacing', + shorthand: ['gapX'], + }, + flexDirection: { + shorthand: ['flexDir'], + }, + gridGap: { + values: 'spacing', + }, + gridColumnGap: { + values: 'spacing', + }, + gridRowGap: { + values: 'spacing', + }, + outlineColor: {}, + focusRing: { + values: ['outside', 'inside', 'mixed', 'none'], + }, + focusVisibleRing: { + values: ['outside', 'inside', 'mixed', 'none'], + }, + focusRingColor: {}, + focusRingOffset: { + values: 'spacing', + }, + focusRingWidth: { + values: 'borderWidths', + property: 'outlineWidth', + }, + focusRingStyle: { + values: 'borderStyles', + property: 'outlineStyle', + }, + aspectRatio: { + values: 'aspectRatios', + }, + width: { + values: 'sizes', + shorthand: ['w'], + }, + inlineSize: { + values: 'sizes', + }, + height: { + values: 'sizes', + shorthand: ['h'], + }, + blockSize: { + values: 'sizes', + }, + boxSize: { + values: 'sizes', + property: 'width', + }, + minWidth: { + values: 'sizes', + shorthand: ['minW'], + }, + minInlineSize: { + values: 'sizes', + }, + minHeight: { + values: 'sizes', + shorthand: ['minH'], + }, + minBlockSize: { + values: 'sizes', + }, + maxWidth: { + values: 'sizes', + shorthand: ['maxW'], + }, + maxInlineSize: { + values: 'sizes', + }, + maxHeight: { + values: 'sizes', + shorthand: ['maxH'], + }, + maxBlockSize: { + values: 'sizes', + }, + hideFrom: { + values: 'breakpoints', + }, + hideBelow: { + values: 'breakpoints', + }, + overscrollBehavior: { + shorthand: ['overscroll'], + }, + overscrollBehaviorX: { + shorthand: ['overscrollX'], + }, + overscrollBehaviorY: { + shorthand: ['overscrollY'], + }, + scrollbar: { + values: ['visible', 'hidden'], + }, + scrollbarColor: {}, + scrollbarGutter: { + values: 'spacing', + }, + scrollbarWidth: { + values: 'sizes', + }, + scrollMargin: { + values: 'spacing', + }, + scrollMarginTop: { + values: 'spacing', + }, + scrollMarginBottom: { + values: 'spacing', + }, + scrollMarginLeft: { + values: 'spacing', + }, + scrollMarginRight: { + values: 'spacing', + }, + scrollMarginX: { + values: 'spacing', + }, + scrollMarginY: { + values: 'spacing', + }, + scrollPadding: { + values: 'spacing', + }, + scrollPaddingTop: { + values: 'spacing', + }, + scrollPaddingBottom: { + values: 'spacing', + }, + scrollPaddingLeft: { + values: 'spacing', + }, + scrollPaddingRight: { + values: 'spacing', + }, + scrollPaddingInline: { + values: 'spacing', + shorthand: ['scrollPaddingX'], + }, + scrollPaddingBlock: { + values: 'spacing', + shorthand: ['scrollPaddingY'], + }, + scrollSnapType: { + values: { + none: 'none', + x: 'x var(--scroll-snap-strictness)', + y: 'y var(--scroll-snap-strictness)', + both: 'both var(--scroll-snap-strictness)', + }, + }, + scrollSnapStrictness: { + values: ['mandatory', 'proximity'], + }, + scrollSnapMargin: { + values: 'spacing', + }, + scrollSnapMarginTop: { + values: 'spacing', + }, + scrollSnapMarginBottom: { + values: 'spacing', + }, + scrollSnapMarginLeft: { + values: 'spacing', + }, + scrollSnapMarginRight: { + values: 'spacing', + }, + listStylePosition: { + shorthand: ['listStylePos'], + }, + listStyleImage: { + shorthand: ['listStyleImg'], + }, + position: { + shorthand: ['pos'], + }, + zIndex: { + values: 'zIndex', + }, + inset: { + values: 'spacing', + }, + insetInline: { + values: 'spacing', + shorthand: ['insetX'], + }, + insetBlock: { + values: 'spacing', + shorthand: ['insetY'], + }, + top: { + values: 'spacing', + }, + insetBlockStart: { + values: 'spacing', + }, + bottom: { + values: 'spacing', + }, + insetBlockEnd: { + values: 'spacing', + }, + left: { + values: 'spacing', + }, + right: { + values: 'spacing', + }, + insetInlineStart: { + values: 'spacing', + shorthand: ['insetStart'], + }, + insetInlineEnd: { + values: 'spacing', + shorthand: ['insetEnd'], + }, + ring: {}, + ringColor: {}, + ringOffset: {}, + ringOffsetColor: {}, + ringInset: {}, + margin: { + values: 'spacing', + shorthand: ['m'], + }, + marginTop: { + values: 'spacing', + shorthand: ['mt'], + }, + marginBlockStart: { + values: 'spacing', + shorthand: ['mt'], + }, + marginRight: { + values: 'spacing', + shorthand: ['mr'], + }, + marginBottom: { + values: 'spacing', + shorthand: ['mb'], + }, + marginBlockEnd: { + values: 'spacing', + }, + marginLeft: { + values: 'spacing', + shorthand: ['ml'], + }, + marginInlineStart: { + values: 'spacing', + shorthand: ['ms', 'marginStart'], + }, + marginInlineEnd: { + values: 'spacing', + shorthand: ['me', 'marginEnd'], + }, + marginInline: { + values: 'spacing', + shorthand: ['mx', 'marginX'], + }, + marginBlock: { + values: 'spacing', + shorthand: ['my', 'marginY'], + }, + padding: { + values: 'spacing', + shorthand: ['p'], + }, + paddingTop: { + values: 'spacing', + shorthand: ['pt'], + }, + paddingRight: { + values: 'spacing', + shorthand: ['pr'], + }, + paddingBottom: { + values: 'spacing', + shorthand: ['pb'], + }, + paddingBlockStart: { + values: 'spacing', + }, + paddingBlockEnd: { + values: 'spacing', + }, + paddingLeft: { + values: 'spacing', + shorthand: ['pl'], + }, + paddingInlineStart: { + values: 'spacing', + shorthand: ['ps', 'paddingStart'], + }, + paddingInlineEnd: { + values: 'spacing', + shorthand: ['pe', 'paddingEnd'], + }, + paddingInline: { + values: 'spacing', + shorthand: ['px', 'paddingX'], + }, + paddingBlock: { + values: 'spacing', + shorthand: ['py', 'paddingY'], + }, + textDecoration: { + shorthand: ['textDecor'], + }, + textDecorationColor: {}, + textShadow: { + values: 'shadows', + }, + transform: {}, + skewX: {}, + skewY: {}, + scaleX: {}, + scaleY: {}, + scale: {}, + spaceXReverse: { + values: { + type: 'boolean', + }, + }, + spaceX: { + property: 'marginInlineStart', + values: 'spacing', + }, + spaceYReverse: { + values: { + type: 'boolean', + }, + }, + spaceY: { + property: 'marginTop', + values: 'spacing', + }, + rotate: {}, + rotateX: {}, + rotateY: {}, + translate: {}, + translateX: { + values: 'spacing', + }, + translateY: { + values: 'spacing', + }, + transition: { + values: [ + 'all', + 'common', + 'colors', + 'opacity', + 'position', + 'backgrounds', + 'size', + 'shadow', + 'transform', + ], + }, + transitionDuration: { + values: 'durations', + }, + transitionProperty: { + values: { + common: + 'background-color, border-color, color, fill, stroke, opacity, box-shadow, translate, transform', + colors: 'background-color, border-color, color, fill, stroke', + size: 'width, height', + position: 'left, right, top, bottom, inset-inline, inset-block', + background: + 'background, background-color, background-image, background-position', + }, + }, + transitionTimingFunction: { + values: 'easings', + }, + animation: { + values: 'animations', + }, + animationDuration: { + values: 'durations', + }, + animationDelay: { + values: 'durations', + }, + animationTimingFunction: { + values: 'easings', + }, + fontFamily: { + values: 'fonts', + }, + fontSize: { + values: 'fontSizes', + }, + fontWeight: { + values: 'fontWeights', + }, + lineHeight: { + values: 'lineHeights', + }, + letterSpacing: { + values: 'letterSpacings', + }, + textIndent: { + values: 'spacing', + }, + truncate: { + values: { + type: 'boolean', + }, + }, + lineClamp: {}, + srOnly: { + values: { + type: 'boolean', + }, + }, + debug: { + values: { + type: 'boolean', + }, + }, + caretColor: {}, + cursor: { + values: 'cursor', + }, + }, + preflight: true, + cssVarsPrefix: 'chakra', + cssVarsRoot: ':where(html, .chakra-theme)', + globalCss: { + '*': { + fontFeatureSettings: '"cv11"', + '--ring-inset': 'var(--chakra-empty,/*!*/ /*!*/)', + '--ring-offset-width': '0px', + '--ring-offset-color': '#fff', + '--ring-color': 'rgba(66, 153, 225, 0.6)', + '--ring-offset-shadow': '0 0 #0000', + '--ring-shadow': '0 0 #0000', + '--brightness': 'var(--chakra-empty,/*!*/ /*!*/)', + '--contrast': 'var(--chakra-empty,/*!*/ /*!*/)', + '--grayscale': 'var(--chakra-empty,/*!*/ /*!*/)', + '--hue-rotate': 'var(--chakra-empty,/*!*/ /*!*/)', + '--invert': 'var(--chakra-empty,/*!*/ /*!*/)', + '--saturate': 'var(--chakra-empty,/*!*/ /*!*/)', + '--sepia': 'var(--chakra-empty,/*!*/ /*!*/)', + '--drop-shadow': 'var(--chakra-empty,/*!*/ /*!*/)', + '--backdrop-blur': 'var(--chakra-empty,/*!*/ /*!*/)', + '--backdrop-brightness': 'var(--chakra-empty,/*!*/ /*!*/)', + '--backdrop-contrast': 'var(--chakra-empty,/*!*/ /*!*/)', + '--backdrop-grayscale': 'var(--chakra-empty,/*!*/ /*!*/)', + '--backdrop-hue-rotate': 'var(--chakra-empty,/*!*/ /*!*/)', + '--backdrop-invert': 'var(--chakra-empty,/*!*/ /*!*/)', + '--backdrop-opacity': 'var(--chakra-empty,/*!*/ /*!*/)', + '--backdrop-saturate': 'var(--chakra-empty,/*!*/ /*!*/)', + '--backdrop-sepia': 'var(--chakra-empty,/*!*/ /*!*/)', + '--global-font-mono': 'fonts.mono', + '--global-font-body': 'fonts.body', + '--global-color-border': 'colors.border', + }, + html: { + color: 'fg', + bg: 'bg', + lineHeight: '1.5', + colorPalette: 'gray', + }, + '*::placeholder': { + color: 'fg.muted/80', + }, + '*::selection': { + bg: 'colorPalette.muted/80', + }, + }, + theme: { + breakpoints: { + sm: '480px', + md: '768px', + lg: '1024px', + xl: '1280px', + '2xl': '1536px', + }, + keyframes: { + spin: { + '0%': { + transform: 'rotate(0deg)', + }, + '100%': { + transform: 'rotate(360deg)', + }, + }, + pulse: { + '50%': { + opacity: '0.5', + }, + }, + ping: { + '75%, 100%': { + transform: 'scale(2)', + opacity: '0', + }, + }, + bounce: { + '0%, 100%': { + transform: 'translateY(-25%)', + animationTimingFunction: 'cubic-bezier(0.8,0,1,1)', + }, + '50%': { + transform: 'none', + animationTimingFunction: 'cubic-bezier(0,0,0.2,1)', + }, + }, + 'bg-position': { + from: { + backgroundPosition: 'var(--animate-from, 1rem) 0', + }, + to: { + backgroundPosition: 'var(--animate-to, 0) 0', + }, + }, + position: { + from: { + insetInlineStart: 'var(--animate-from-x)', + insetBlockStart: 'var(--animate-from-y)', + }, + to: { + insetInlineStart: 'var(--animate-to-x)', + insetBlockStart: 'var(--animate-to-y)', + }, + }, + 'circular-progress': { + '0%': { + strokeDasharray: '1, 400', + strokeDashoffset: '0', + }, + '50%': { + strokeDasharray: '400, 400', + strokeDashoffset: '-100%', + }, + '100%': { + strokeDasharray: '400, 400', + strokeDashoffset: '-260%', + }, + }, + 'expand-height': { + from: { + height: '0', + }, + to: { + height: 'var(--height)', + }, + }, + 'collapse-height': { + from: { + height: 'var(--height)', + }, + to: { + height: '0', + }, + }, + 'expand-width': { + from: { + width: '0', + }, + to: { + width: 'var(--width)', + }, + }, + 'collapse-width': { + from: { + height: 'var(--width)', + }, + to: { + height: '0', + }, + }, + 'fade-in': { + from: { + opacity: 0, + }, + to: { + opacity: 1, + }, + }, + 'fade-out': { + from: { + opacity: 1, + }, + to: { + opacity: 0, + }, + }, + 'slide-from-left-full': { + from: { + translate: '-100% 0', + }, + to: { + translate: '0 0', + }, + }, + 'slide-from-right-full': { + from: { + translate: '100% 0', + }, + to: { + translate: '0 0', + }, + }, + 'slide-from-top-full': { + from: { + translate: '0 -100%', + }, + to: { + translate: '0 0', + }, + }, + 'slide-from-bottom-full': { + from: { + translate: '0 100%', + }, + to: { + translate: '0 0', + }, + }, + 'slide-to-left-full': { + from: { + translate: '0 0', + }, + to: { + translate: '-100% 0', + }, + }, + 'slide-to-right-full': { + from: { + translate: '0 0', + }, + to: { + translate: '100% 0', + }, + }, + 'slide-to-top-full': { + from: { + translate: '0 0', + }, + to: { + translate: '0 -100%', + }, + }, + 'slide-to-bottom-full': { + from: { + translate: '0 0', + }, + to: { + translate: '0 100%', + }, + }, + 'slide-from-top': { + '0%': { + translate: '0 -0.5rem', + }, + to: { + translate: '0', + }, + }, + 'slide-from-bottom': { + '0%': { + translate: '0 0.5rem', + }, + to: { + translate: '0', + }, + }, + 'slide-from-left': { + '0%': { + translate: '-0.5rem 0', + }, + to: { + translate: '0', + }, + }, + 'slide-from-right': { + '0%': { + translate: '0.5rem 0', + }, + to: { + translate: '0', + }, + }, + 'slide-to-top': { + '0%': { + translate: '0', + }, + to: { + translate: '0 -0.5rem', + }, + }, + 'slide-to-bottom': { + '0%': { + translate: '0', + }, + to: { + translate: '0 0.5rem', + }, + }, + 'slide-to-left': { + '0%': { + translate: '0', + }, + to: { + translate: '-0.5rem 0', + }, + }, + 'slide-to-right': { + '0%': { + translate: '0', + }, + to: { + translate: '0.5rem 0', + }, + }, + 'scale-in': { + from: { + scale: '0.95', + }, + to: { + scale: '1', + }, + }, + 'scale-out': { + from: { + scale: '1', + }, + to: { + scale: '0.95', + }, + }, + }, + tokens: { + aspectRatios: { + square: { + value: '1 / 1', + }, + landscape: { + value: '4 / 3', + }, + portrait: { + value: '3 / 4', + }, + wide: { + value: '16 / 9', + }, + ultrawide: { + value: '18 / 5', + }, + golden: { + value: '1.618 / 1', + }, + }, + animations: { + spin: { + value: 'spin 1s linear infinite', + }, + ping: { + value: 'ping 1s cubic-bezier(0, 0, 0.2, 1) infinite', + }, + pulse: { + value: 'pulse 2s cubic-bezier(0.4, 0, 0.6, 1) infinite', + }, + bounce: { + value: 'bounce 1s infinite', + }, + }, + blurs: { + none: { + value: ' ', + }, + sm: { + value: '4px', + }, + md: { + value: '8px', + }, + lg: { + value: '12px', + }, + xl: { + value: '16px', + }, + '2xl': { + value: '24px', + }, + '3xl': { + value: '40px', + }, + '4xl': { + value: '64px', + }, + }, + borders: { + xs: { + value: '0.5px solid', + }, + sm: { + value: '1px solid', + }, + md: { + value: '2px solid', + }, + lg: { + value: '4px solid', + }, + xl: { + value: '8px solid', + }, + }, + colors: { + transparent: { + value: 'transparent', + }, + current: { + value: 'currentColor', + }, + black: { + value: '#09090B', + }, + white: { + value: '#FFFFFF', + }, + whiteAlpha: { + '50': { + value: 'rgba(255, 255, 255, 0.04)', + }, + '100': { + value: 'rgba(255, 255, 255, 0.06)', + }, + '200': { + value: 'rgba(255, 255, 255, 0.08)', + }, + '300': { + value: 'rgba(255, 255, 255, 0.16)', + }, + '400': { + value: 'rgba(255, 255, 255, 0.24)', + }, + '500': { + value: 'rgba(255, 255, 255, 0.36)', + }, + '600': { + value: 'rgba(255, 255, 255, 0.48)', + }, + '700': { + value: 'rgba(255, 255, 255, 0.64)', + }, + '800': { + value: 'rgba(255, 255, 255, 0.80)', + }, + '900': { + value: 'rgba(255, 255, 255, 0.92)', + }, + '950': { + value: 'rgba(255, 255, 255, 0.95)', + }, + }, + blackAlpha: { + '50': { + value: 'rgba(0, 0, 0, 0.04)', + }, + '100': { + value: 'rgba(0, 0, 0, 0.06)', + }, + '200': { + value: 'rgba(0, 0, 0, 0.08)', + }, + '300': { + value: 'rgba(0, 0, 0, 0.16)', + }, + '400': { + value: 'rgba(0, 0, 0, 0.24)', + }, + '500': { + value: 'rgba(0, 0, 0, 0.36)', + }, + '600': { + value: 'rgba(0, 0, 0, 0.48)', + }, + '700': { + value: 'rgba(0, 0, 0, 0.64)', + }, + '800': { + value: 'rgba(0, 0, 0, 0.80)', + }, + '900': { + value: 'rgba(0, 0, 0, 0.92)', + }, + '950': { + value: 'rgba(0, 0, 0, 0.95)', + }, + }, + gray: { + '50': { + value: '#fafafa', + }, + '100': { + value: '#f4f4f5', + }, + '200': { + value: '#e4e4e7', + }, + '300': { + value: '#d4d4d8', + }, + '400': { + value: '#a1a1aa', + }, + '500': { + value: '#71717a', + }, + '600': { + value: '#52525b', + }, + '700': { + value: '#3f3f46', + }, + '800': { + value: '#27272a', + }, + '900': { + value: '#18181b', + }, + '950': { + value: '#111111', + }, + }, + red: { + '50': { + value: '#fef2f2', + }, + '100': { + value: '#fee2e2', + }, + '200': { + value: '#fecaca', + }, + '300': { + value: '#fca5a5', + }, + '400': { + value: '#f87171', + }, + '500': { + value: '#ef4444', + }, + '600': { + value: '#dc2626', + }, + '700': { + value: '#991919', + }, + '800': { + value: '#511111', + }, + '900': { + value: '#300c0c', + }, + '950': { + value: '#1f0808', + }, + }, + orange: { + '50': { + value: '#fff7ed', + }, + '100': { + value: '#ffedd5', + }, + '200': { + value: '#fed7aa', + }, + '300': { + value: '#fdba74', + }, + '400': { + value: '#fb923c', + }, + '500': { + value: '#f97316', + }, + '600': { + value: '#ea580c', + }, + '700': { + value: '#92310a', + }, + '800': { + value: '#6c2710', + }, + '900': { + value: '#3b1106', + }, + '950': { + value: '#220a04', + }, + }, + yellow: { + '50': { + value: '#fefce8', + }, + '100': { + value: '#fef9c3', + }, + '200': { + value: '#fef08a', + }, + '300': { + value: '#fde047', + }, + '400': { + value: '#facc15', + }, + '500': { + value: '#eab308', + }, + '600': { + value: '#ca8a04', + }, + '700': { + value: '#845209', + }, + '800': { + value: '#713f12', + }, + '900': { + value: '#422006', + }, + '950': { + value: '#281304', + }, + }, + green: { + '50': { + value: '#f0fdf4', + }, + '100': { + value: '#dcfce7', + }, + '200': { + value: '#bbf7d0', + }, + '300': { + value: '#86efac', + }, + '400': { + value: '#4ade80', + }, + '500': { + value: '#22c55e', + }, + '600': { + value: '#16a34a', + }, + '700': { + value: '#116932', + }, + '800': { + value: '#124a28', + }, + '900': { + value: '#042713', + }, + '950': { + value: '#03190c', + }, + }, + teal: { + '50': { + value: '#f0fdfa', + }, + '100': { + value: '#ccfbf1', + }, + '200': { + value: '#99f6e4', + }, + '300': { + value: '#5eead4', + }, + '400': { + value: '#2dd4bf', + }, + '500': { + value: '#14b8a6', + }, + '600': { + value: '#0d9488', + }, + '700': { + value: '#0c5d56', + }, + '800': { + value: '#114240', + }, + '900': { + value: '#032726', + }, + '950': { + value: '#021716', + }, + }, + blue: { + '50': { + value: '#eff6ff', + }, + '100': { + value: '#dbeafe', + }, + '200': { + value: '#bfdbfe', + }, + '300': { + value: '#a3cfff', + }, + '400': { + value: '#60a5fa', + }, + '500': { + value: '#3b82f6', + }, + '600': { + value: '#2563eb', + }, + '700': { + value: '#173da6', + }, + '800': { + value: '#1a3478', + }, + '900': { + value: '#14204a', + }, + '950': { + value: '#0c142e', + }, + }, + cyan: { + '50': { + value: '#ecfeff', + }, + '100': { + value: '#cffafe', + }, + '200': { + value: '#a5f3fc', + }, + '300': { + value: '#67e8f9', + }, + '400': { + value: '#22d3ee', + }, + '500': { + value: '#06b6d4', + }, + '600': { + value: '#0891b2', + }, + '700': { + value: '#0c5c72', + }, + '800': { + value: '#134152', + }, + '900': { + value: '#072a38', + }, + '950': { + value: '#051b24', + }, + }, + purple: { + '50': { + value: '#faf5ff', + }, + '100': { + value: '#f3e8ff', + }, + '200': { + value: '#e9d5ff', + }, + '300': { + value: '#d8b4fe', + }, + '400': { + value: '#c084fc', + }, + '500': { + value: '#a855f7', + }, + '600': { + value: '#9333ea', + }, + '700': { + value: '#641ba3', + }, + '800': { + value: '#4a1772', + }, + '900': { + value: '#2f0553', + }, + '950': { + value: '#1a032e', + }, + }, + pink: { + '50': { + value: '#fdf2f8', + }, + '100': { + value: '#fce7f3', + }, + '200': { + value: '#fbcfe8', + }, + '300': { + value: '#f9a8d4', + }, + '400': { + value: '#f472b6', + }, + '500': { + value: '#ec4899', + }, + '600': { + value: '#db2777', + }, + '700': { + value: '#a41752', + }, + '800': { + value: '#6d0e34', + }, + '900': { + value: '#45061f', + }, + '950': { + value: '#2c0514', + }, + }, + }, + durations: { + fastest: { + value: '50ms', + }, + faster: { + value: '100ms', + }, + fast: { + value: '150ms', + }, + moderate: { + value: '200ms', + }, + slow: { + value: '300ms', + }, + slower: { + value: '400ms', + }, + slowest: { + value: '500ms', + }, + }, + easings: { + 'ease-in': { + value: 'cubic-bezier(0.42, 0, 1, 1)', + }, + 'ease-out': { + value: 'cubic-bezier(0, 0, 0.58, 1)', + }, + 'ease-in-out': { + value: 'cubic-bezier(0.42, 0, 0.58, 1)', + }, + 'ease-in-smooth': { + value: 'cubic-bezier(0.32, 0.72, 0, 1)', + }, + }, + fonts: { + heading: { + value: + 'Inter, -apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol"', + }, + body: { + value: + 'Inter, -apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol"', + }, + mono: { + value: + 'SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace', + }, + }, + fontSizes: { + '2xs': { + value: '0.625rem', + }, + xs: { + value: '0.75rem', + }, + sm: { + value: '0.875rem', + }, + md: { + value: '1rem', + }, + lg: { + value: '1.125rem', + }, + xl: { + value: '1.25rem', + }, + '2xl': { + value: '1.5rem', + }, + '3xl': { + value: '1.875rem', + }, + '4xl': { + value: '2.25rem', + }, + '5xl': { + value: '3rem', + }, + '6xl': { + value: '3.75rem', + }, + '7xl': { + value: '4.5rem', + }, + '8xl': { + value: '6rem', + }, + '9xl': { + value: '8rem', + }, + }, + fontWeights: { + thin: { + value: '100', + }, + extralight: { + value: '200', + }, + light: { + value: '300', + }, + normal: { + value: '400', + }, + medium: { + value: '500', + }, + semibold: { + value: '600', + }, + bold: { + value: '700', + }, + extrabold: { + value: '800', + }, + black: { + value: '900', + }, + }, + letterSpacings: { + tighter: { + value: '-0.05em', + }, + tight: { + value: '-0.025em', + }, + wide: { + value: '0.025em', + }, + wider: { + value: '0.05em', + }, + widest: { + value: '0.1em', + }, + }, + lineHeights: { + shorter: { + value: 1.25, + }, + short: { + value: 1.375, + }, + moderate: { + value: 1.5, + }, + tall: { + value: 1.625, + }, + taller: { + value: 2, + }, + }, + radii: { + none: { + value: '0', + }, + '2xs': { + value: '0.0625rem', + }, + xs: { + value: '0.125rem', + }, + sm: { + value: '0.25rem', + }, + md: { + value: '0.375rem', + }, + lg: { + value: '0.5rem', + }, + xl: { + value: '0.75rem', + }, + '2xl': { + value: '1rem', + }, + '3xl': { + value: '1.5rem', + }, + '4xl': { + value: '2rem', + }, + full: { + value: '9999px', + }, + }, + spacing: { + '1': { + value: '0.25rem', + }, + '2': { + value: '0.5rem', + }, + '3': { + value: '0.75rem', + }, + '4': { + value: '1rem', + }, + '5': { + value: '1.25rem', + }, + '6': { + value: '1.5rem', + }, + '7': { + value: '1.75rem', + }, + '8': { + value: '2rem', + }, + '9': { + value: '2.25rem', + }, + '10': { + value: '2.5rem', + }, + '11': { + value: '2.75rem', + }, + '12': { + value: '3rem', + }, + '14': { + value: '3.5rem', + }, + '16': { + value: '4rem', + }, + '20': { + value: '5rem', + }, + '24': { + value: '6rem', + }, + '28': { + value: '7rem', + }, + '32': { + value: '8rem', + }, + '36': { + value: '9rem', + }, + '40': { + value: '10rem', + }, + '44': { + value: '11rem', + }, + '48': { + value: '12rem', + }, + '52': { + value: '13rem', + }, + '56': { + value: '14rem', + }, + '60': { + value: '15rem', + }, + '64': { + value: '16rem', + }, + '72': { + value: '18rem', + }, + '80': { + value: '20rem', + }, + '96': { + value: '24rem', + }, + '0.5': { + value: '0.125rem', + }, + '1.5': { + value: '0.375rem', + }, + '2.5': { + value: '0.625rem', + }, + '3.5': { + value: '0.875rem', + }, + '4.5': { + value: '1.125rem', + }, + }, + sizes: { + '1': { + value: '0.25rem', + }, + '2': { + value: '0.5rem', + }, + '3': { + value: '0.75rem', + }, + '4': { + value: '1rem', + }, + '5': { + value: '1.25rem', + }, + '6': { + value: '1.5rem', + }, + '7': { + value: '1.75rem', + }, + '8': { + value: '2rem', + }, + '9': { + value: '2.25rem', + }, + '10': { + value: '2.5rem', + }, + '11': { + value: '2.75rem', + }, + '12': { + value: '3rem', + }, + '14': { + value: '3.5rem', + }, + '16': { + value: '4rem', + }, + '20': { + value: '5rem', + }, + '24': { + value: '6rem', + }, + '28': { + value: '7rem', + }, + '32': { + value: '8rem', + }, + '36': { + value: '9rem', + }, + '40': { + value: '10rem', + }, + '44': { + value: '11rem', + }, + '48': { + value: '12rem', + }, + '52': { + value: '13rem', + }, + '56': { + value: '14rem', + }, + '60': { + value: '15rem', + }, + '64': { + value: '16rem', + }, + '72': { + value: '18rem', + }, + '80': { + value: '20rem', + }, + '96': { + value: '24rem', + }, + '3xs': { + value: '14rem', + }, + '2xs': { + value: '16rem', + }, + xs: { + value: '20rem', + }, + sm: { + value: '24rem', + }, + md: { + value: '28rem', + }, + lg: { + value: '32rem', + }, + xl: { + value: '36rem', + }, + '2xl': { + value: '42rem', + }, + '3xl': { + value: '48rem', + }, + '4xl': { + value: '56rem', + }, + '5xl': { + value: '64rem', + }, + '6xl': { + value: '72rem', + }, + '7xl': { + value: '80rem', + }, + '8xl': { + value: '90rem', + }, + '0.5': { + value: '0.125rem', + }, + '1.5': { + value: '0.375rem', + }, + '2.5': { + value: '0.625rem', + }, + '3.5': { + value: '0.875rem', + }, + '4.5': { + value: '1.125rem', + }, + '1/2': { + value: '50%', + }, + '1/3': { + value: '33.333333%', + }, + '2/3': { + value: '66.666667%', + }, + '1/4': { + value: '25%', + }, + '3/4': { + value: '75%', + }, + '1/5': { + value: '20%', + }, + '2/5': { + value: '40%', + }, + '3/5': { + value: '60%', + }, + '4/5': { + value: '80%', + }, + '1/6': { + value: '16.666667%', + }, + '2/6': { + value: '33.333333%', + }, + '3/6': { + value: '50%', + }, + '4/6': { + value: '66.666667%', + }, + '5/6': { + value: '83.333333%', + }, + '1/12': { + value: '8.333333%', + }, + '2/12': { + value: '16.666667%', + }, + '3/12': { + value: '25%', + }, + '4/12': { + value: '33.333333%', + }, + '5/12': { + value: '41.666667%', + }, + '6/12': { + value: '50%', + }, + '7/12': { + value: '58.333333%', + }, + '8/12': { + value: '66.666667%', + }, + '9/12': { + value: '75%', + }, + '10/12': { + value: '83.333333%', + }, + '11/12': { + value: '91.666667%', + }, + max: { + value: 'max-content', + }, + min: { + value: 'min-content', + }, + fit: { + value: 'fit-content', + }, + prose: { + value: '60ch', + }, + full: { + value: '100%', + }, + dvh: { + value: '100dvh', + }, + svh: { + value: '100svh', + }, + lvh: { + value: '100lvh', + }, + dvw: { + value: '100dvw', + }, + svw: { + value: '100svw', + }, + lvw: { + value: '100lvw', + }, + vw: { + value: '100vw', + }, + vh: { + value: '100vh', + }, + }, + zIndex: { + hide: { + value: -1, + }, + base: { + value: 0, + }, + docked: { + value: 10, + }, + dropdown: { + value: 1000, + }, + sticky: { + value: 1100, + }, + banner: { + value: 1200, + }, + overlay: { + value: 1300, + }, + modal: { + value: 1400, + }, + popover: { + value: 1500, + }, + skipNav: { + value: 1600, + }, + toast: { + value: 1700, + }, + tooltip: { + value: 1800, + }, + max: { + value: 2147483647, + }, + }, + cursor: { + button: { + value: 'pointer', + }, + checkbox: { + value: 'default', + }, + disabled: { + value: 'not-allowed', + }, + menuitem: { + value: 'default', + }, + option: { + value: 'default', + }, + radio: { + value: 'default', + }, + slider: { + value: 'default', + }, + switch: { + value: 'pointer', + }, + }, + }, + semanticTokens: { + colors: { + bg: { + DEFAULT: { + value: { + _light: '{colors.white}', + _dark: '{colors.black}', + }, + }, + subtle: { + value: { + _light: '{colors.gray.50}', + _dark: '{colors.gray.950}', + }, + }, + muted: { + value: { + _light: '{colors.gray.100}', + _dark: '{colors.gray.900}', + }, + }, + emphasized: { + value: { + _light: '{colors.gray.200}', + _dark: '{colors.gray.800}', + }, + }, + inverted: { + value: { + _light: '{colors.black}', + _dark: '{colors.white}', + }, + }, + panel: { + value: { + _light: '{colors.white}', + _dark: '{colors.gray.950}', + }, + }, + error: { + value: { + _light: '{colors.red.50}', + _dark: '{colors.red.950}', + }, + }, + warning: { + value: { + _light: '{colors.orange.50}', + _dark: '{colors.orange.950}', + }, + }, + success: { + value: { + _light: '{colors.green.50}', + _dark: '{colors.green.950}', + }, + }, + info: { + value: { + _light: '{colors.blue.50}', + _dark: '{colors.blue.950}', + }, + }, + }, + fg: { + DEFAULT: { + value: { + _light: '{colors.black}', + _dark: '{colors.gray.50}', + }, + }, + muted: { + value: { + _light: '{colors.gray.600}', + _dark: '{colors.gray.400}', + }, + }, + subtle: { + value: { + _light: '{colors.gray.400}', + _dark: '{colors.gray.500}', + }, + }, + inverted: { + value: { + _light: '{colors.gray.50}', + _dark: '{colors.black}', + }, + }, + error: { + value: { + _light: '{colors.red.500}', + _dark: '{colors.red.400}', + }, + }, + warning: { + value: { + _light: '{colors.orange.600}', + _dark: '{colors.orange.300}', + }, + }, + success: { + value: { + _light: '{colors.green.600}', + _dark: '{colors.green.300}', + }, + }, + info: { + value: { + _light: '{colors.blue.600}', + _dark: '{colors.blue.300}', + }, + }, + }, + border: { + DEFAULT: { + value: { + _light: '{colors.gray.200}', + _dark: '{colors.gray.800}', + }, + }, + muted: { + value: { + _light: '{colors.gray.100}', + _dark: '{colors.gray.900}', + }, + }, + subtle: { + value: { + _light: '{colors.gray.50}', + _dark: '{colors.gray.950}', + }, + }, + emphasized: { + value: { + _light: '{colors.gray.300}', + _dark: '{colors.gray.700}', + }, + }, + inverted: { + value: { + _light: '{colors.gray.800}', + _dark: '{colors.gray.200}', + }, + }, + error: { + value: { + _light: '{colors.red.500}', + _dark: '{colors.red.400}', + }, + }, + warning: { + value: { + _light: '{colors.orange.500}', + _dark: '{colors.orange.400}', + }, + }, + success: { + value: { + _light: '{colors.green.500}', + _dark: '{colors.green.400}', + }, + }, + info: { + value: { + _light: '{colors.blue.500}', + _dark: '{colors.blue.400}', + }, + }, + }, + gray: { + contrast: { + value: { + _light: '{colors.white}', + _dark: '{colors.black}', + }, + }, + fg: { + value: { + _light: '{colors.gray.800}', + _dark: '{colors.gray.200}', + }, + }, + subtle: { + value: { + _light: '{colors.gray.100}', + _dark: '{colors.gray.900}', + }, + }, + muted: { + value: { + _light: '{colors.gray.200}', + _dark: '{colors.gray.800}', + }, + }, + emphasized: { + value: { + _light: '{colors.gray.300}', + _dark: '{colors.gray.700}', + }, + }, + solid: { + value: { + _light: '{colors.gray.900}', + _dark: '{colors.white}', + }, + }, + focusRing: { + value: { + _light: '{colors.gray.800}', + _dark: '{colors.gray.200}', + }, + }, + }, + red: { + contrast: { + value: { + _light: 'white', + _dark: 'white', + }, + }, + fg: { + value: { + _light: '{colors.red.700}', + _dark: '{colors.red.300}', + }, + }, + subtle: { + value: { + _light: '{colors.red.100}', + _dark: '{colors.red.900}', + }, + }, + muted: { + value: { + _light: '{colors.red.200}', + _dark: '{colors.red.800}', + }, + }, + emphasized: { + value: { + _light: '{colors.red.300}', + _dark: '{colors.red.700}', + }, + }, + solid: { + value: { + _light: '{colors.red.600}', + _dark: '{colors.red.600}', + }, + }, + focusRing: { + value: { + _light: '{colors.red.600}', + _dark: '{colors.red.600}', + }, + }, + }, + orange: { + contrast: { + value: { + _light: 'white', + _dark: 'black', + }, + }, + fg: { + value: { + _light: '{colors.orange.700}', + _dark: '{colors.orange.300}', + }, + }, + subtle: { + value: { + _light: '{colors.orange.100}', + _dark: '{colors.orange.900}', + }, + }, + muted: { + value: { + _light: '{colors.orange.200}', + _dark: '{colors.orange.800}', + }, + }, + emphasized: { + value: { + _light: '{colors.orange.300}', + _dark: '{colors.orange.700}', + }, + }, + solid: { + value: { + _light: '{colors.orange.600}', + _dark: '{colors.orange.500}', + }, + }, + focusRing: { + value: { + _light: '{colors.orange.600}', + _dark: '{colors.orange.500}', + }, + }, + }, + green: { + contrast: { + value: { + _light: 'white', + _dark: 'white', + }, + }, + fg: { + value: { + _light: '{colors.green.700}', + _dark: '{colors.green.300}', + }, + }, + subtle: { + value: { + _light: '{colors.green.100}', + _dark: '{colors.green.900}', + }, + }, + muted: { + value: { + _light: '{colors.green.200}', + _dark: '{colors.green.800}', + }, + }, + emphasized: { + value: { + _light: '{colors.green.300}', + _dark: '{colors.green.700}', + }, + }, + solid: { + value: { + _light: '{colors.green.600}', + _dark: '{colors.green.600}', + }, + }, + focusRing: { + value: { + _light: '{colors.green.600}', + _dark: '{colors.green.600}', + }, + }, + }, + blue: { + contrast: { + value: { + _light: 'white', + _dark: 'white', + }, + }, + fg: { + value: { + _light: '{colors.blue.700}', + _dark: '{colors.blue.300}', + }, + }, + subtle: { + value: { + _light: '{colors.blue.100}', + _dark: '{colors.blue.900}', + }, + }, + muted: { + value: { + _light: '{colors.blue.200}', + _dark: '{colors.blue.800}', + }, + }, + emphasized: { + value: { + _light: '{colors.blue.300}', + _dark: '{colors.blue.700}', + }, + }, + solid: { + value: { + _light: '{colors.blue.600}', + _dark: '{colors.blue.600}', + }, + }, + focusRing: { + value: { + _light: '{colors.blue.600}', + _dark: '{colors.blue.600}', + }, + }, + }, + yellow: { + contrast: { + value: { + _light: 'black', + _dark: 'black', + }, + }, + fg: { + value: { + _light: '{colors.yellow.800}', + _dark: '{colors.yellow.300}', + }, + }, + subtle: { + value: { + _light: '{colors.yellow.100}', + _dark: '{colors.yellow.900}', + }, + }, + muted: { + value: { + _light: '{colors.yellow.200}', + _dark: '{colors.yellow.800}', + }, + }, + emphasized: { + value: { + _light: '{colors.yellow.300}', + _dark: '{colors.yellow.700}', + }, + }, + solid: { + value: { + _light: '{colors.yellow.300}', + _dark: '{colors.yellow.300}', + }, + }, + focusRing: { + value: { + _light: '{colors.yellow.300}', + _dark: '{colors.yellow.300}', + }, + }, + }, + teal: { + contrast: { + value: { + _light: 'white', + _dark: 'white', + }, + }, + fg: { + value: { + _light: '{colors.teal.700}', + _dark: '{colors.teal.300}', + }, + }, + subtle: { + value: { + _light: '{colors.teal.100}', + _dark: '{colors.teal.900}', + }, + }, + muted: { + value: { + _light: '{colors.teal.200}', + _dark: '{colors.teal.800}', + }, + }, + emphasized: { + value: { + _light: '{colors.teal.300}', + _dark: '{colors.teal.700}', + }, + }, + solid: { + value: { + _light: '{colors.teal.600}', + _dark: '{colors.teal.600}', + }, + }, + focusRing: { + value: { + _light: '{colors.teal.600}', + _dark: '{colors.teal.600}', + }, + }, + }, + purple: { + contrast: { + value: { + _light: 'white', + _dark: 'white', + }, + }, + fg: { + value: { + _light: '{colors.purple.700}', + _dark: '{colors.purple.300}', + }, + }, + subtle: { + value: { + _light: '{colors.purple.100}', + _dark: '{colors.purple.900}', + }, + }, + muted: { + value: { + _light: '{colors.purple.200}', + _dark: '{colors.purple.800}', + }, + }, + emphasized: { + value: { + _light: '{colors.purple.300}', + _dark: '{colors.purple.700}', + }, + }, + solid: { + value: { + _light: '{colors.purple.600}', + _dark: '{colors.purple.600}', + }, + }, + focusRing: { + value: { + _light: '{colors.purple.600}', + _dark: '{colors.purple.600}', + }, + }, + }, + pink: { + contrast: { + value: { + _light: 'white', + _dark: 'white', + }, + }, + fg: { + value: { + _light: '{colors.pink.700}', + _dark: '{colors.pink.300}', + }, + }, + subtle: { + value: { + _light: '{colors.pink.100}', + _dark: '{colors.pink.900}', + }, + }, + muted: { + value: { + _light: '{colors.pink.200}', + _dark: '{colors.pink.800}', + }, + }, + emphasized: { + value: { + _light: '{colors.pink.300}', + _dark: '{colors.pink.700}', + }, + }, + solid: { + value: { + _light: '{colors.pink.600}', + _dark: '{colors.pink.600}', + }, + }, + focusRing: { + value: { + _light: '{colors.pink.600}', + _dark: '{colors.pink.600}', + }, + }, + }, + cyan: { + contrast: { + value: { + _light: 'white', + _dark: 'white', + }, + }, + fg: { + value: { + _light: '{colors.cyan.700}', + _dark: '{colors.cyan.300}', + }, + }, + subtle: { + value: { + _light: '{colors.cyan.100}', + _dark: '{colors.cyan.900}', + }, + }, + muted: { + value: { + _light: '{colors.cyan.200}', + _dark: '{colors.cyan.800}', + }, + }, + emphasized: { + value: { + _light: '{colors.cyan.300}', + _dark: '{colors.cyan.700}', + }, + }, + solid: { + value: { + _light: '{colors.cyan.600}', + _dark: '{colors.cyan.600}', + }, + }, + focusRing: { + value: { + _light: '{colors.cyan.600}', + _dark: '{colors.cyan.600}', + }, + }, + }, + }, + shadows: { + xs: { + value: { + _light: + '0px 1px 2px {colors.gray.900/10}, 0px 0px 1px {colors.gray.900/20}', + _dark: + '0px 1px 1px {black/64}, 0px 0px 1px inset {colors.gray.300/20}', + }, + }, + sm: { + value: { + _light: + '0px 2px 4px {colors.gray.900/10}, 0px 0px 1px {colors.gray.900/30}', + _dark: + '0px 2px 4px {black/64}, 0px 0px 1px inset {colors.gray.300/30}', + }, + }, + md: { + value: { + _light: + '0px 4px 8px {colors.gray.900/10}, 0px 0px 1px {colors.gray.900/30}', + _dark: + '0px 4px 8px {black/64}, 0px 0px 1px inset {colors.gray.300/30}', + }, + }, + lg: { + value: { + _light: + '0px 8px 16px {colors.gray.900/10}, 0px 0px 1px {colors.gray.900/30}', + _dark: + '0px 8px 16px {black/64}, 0px 0px 1px inset {colors.gray.300/30}', + }, + }, + xl: { + value: { + _light: + '0px 16px 24px {colors.gray.900/10}, 0px 0px 1px {colors.gray.900/30}', + _dark: + '0px 16px 24px {black/64}, 0px 0px 1px inset {colors.gray.300/30}', + }, + }, + '2xl': { + value: { + _light: + '0px 24px 40px {colors.gray.900/16}, 0px 0px 1px {colors.gray.900/30}', + _dark: + '0px 24px 40px {black/64}, 0px 0px 1px inset {colors.gray.300/30}', + }, + }, + inner: { + value: { + _light: 'inset 0 2px 4px 0 {black/5}', + _dark: 'inset 0 2px 4px 0 black', + }, + }, + inset: { + value: { + _light: 'inset 0 0 0 1px {black/5}', + _dark: 'inset 0 0 0 1px {colors.gray.300/5}', + }, + }, + }, + radii: { + l1: { + value: '{radii.xs}', + }, + l2: { + value: '{radii.sm}', + }, + l3: { + value: '{radii.md}', + }, + }, + }, + recipes: { + badge: { + className: 'chakra-badge', + base: { + display: 'inline-flex', + alignItems: 'center', + borderRadius: 'l2', + gap: '1', + fontWeight: 'medium', + fontVariantNumeric: 'tabular-nums', + whiteSpace: 'nowrap', + userSelect: 'none', + }, + variants: { + variant: { + solid: { + bg: 'colorPalette.solid', + color: 'colorPalette.contrast', + }, + subtle: { + bg: 'colorPalette.subtle', + color: 'colorPalette.fg', + }, + outline: { + color: 'colorPalette.fg', + shadow: 'inset 0 0 0px 1px var(--shadow-color)', + shadowColor: 'colorPalette.muted', + }, + surface: { + bg: 'colorPalette.subtle', + color: 'colorPalette.fg', + shadow: 'inset 0 0 0px 1px var(--shadow-color)', + shadowColor: 'colorPalette.muted', + }, + plain: { + color: 'colorPalette.fg', + }, + }, + size: { + xs: { + textStyle: '2xs', + px: '1', + minH: '4', + }, + sm: { + textStyle: 'xs', + px: '1.5', + minH: '5', + }, + md: { + textStyle: 'sm', + px: '2', + minH: '6', + }, + lg: { + textStyle: 'sm', + px: '2.5', + minH: '7', + }, + }, + }, + defaultVariants: { + variant: 'subtle', + size: 'sm', + }, + }, + button: { + className: 'chakra-button', + base: { + display: 'inline-flex', + appearance: 'none', + alignItems: 'center', + justifyContent: 'center', + userSelect: 'none', + position: 'relative', + borderRadius: 'l2', + whiteSpace: 'nowrap', + verticalAlign: 'middle', + borderWidth: '1px', + borderColor: 'transparent', + cursor: 'button', + flexShrink: '0', + outline: '0', + lineHeight: '1.2', + isolation: 'isolate', + fontWeight: 'medium', + transitionProperty: 'common', + transitionDuration: 'moderate', + focusVisibleRing: 'outside', + _disabled: { + layerStyle: 'disabled', + }, + _icon: { + flexShrink: '0', + }, + }, + variants: { + size: { + '2xs': { + h: '6', + minW: '6', + textStyle: 'xs', + px: '2', + gap: '1', + _icon: { + width: '3.5', + height: '3.5', + }, + }, + xs: { + h: '8', + minW: '8', + textStyle: 'xs', + px: '2.5', + gap: '1', + _icon: { + width: '4', + height: '4', + }, + }, + sm: { + h: '9', + minW: '9', + px: '3.5', + textStyle: 'sm', + gap: '2', + _icon: { + width: '4', + height: '4', + }, + }, + md: { + h: '10', + minW: '10', + textStyle: 'sm', + px: '4', + gap: '2', + _icon: { + width: '5', + height: '5', + }, + }, + lg: { + h: '11', + minW: '11', + textStyle: 'md', + px: '5', + gap: '3', + _icon: { + width: '5', + height: '5', + }, + }, + xl: { + h: '12', + minW: '12', + textStyle: 'md', + px: '5', + gap: '2.5', + _icon: { + width: '5', + height: '5', + }, + }, + '2xl': { + h: '16', + minW: '16', + textStyle: 'lg', + px: '7', + gap: '3', + _icon: { + width: '6', + height: '6', + }, + }, + }, + variant: { + solid: { + bg: 'colorPalette.solid', + color: 'colorPalette.contrast', + _hover: { + bg: 'colorPalette.solid/90', + }, + _expanded: { + bg: 'colorPalette.solid/90', + }, + }, + subtle: { + bg: 'colorPalette.subtle', + color: 'colorPalette.fg', + _hover: { + bg: 'colorPalette.muted', + }, + _expanded: { + bg: 'colorPalette.muted', + }, + }, + surface: { + bg: 'colorPalette.subtle', + color: 'colorPalette.fg', + shadow: '0 0 0px 1px var(--shadow-color)', + shadowColor: 'colorPalette.muted', + _hover: { + bg: 'colorPalette.muted', + }, + _expanded: { + bg: 'colorPalette.muted', + }, + }, + outline: { + borderWidth: '1px', + borderColor: 'colorPalette.muted', + color: 'colorPalette.fg', + _hover: { + bg: 'colorPalette.subtle', + }, + _expanded: { + bg: 'colorPalette.subtle', + }, + }, + ghost: { + color: 'colorPalette.fg', + _hover: { + bg: 'colorPalette.subtle', + }, + _expanded: { + bg: 'colorPalette.subtle', + }, + }, + plain: { + color: 'colorPalette.fg', + }, + }, + }, + defaultVariants: { + size: 'md', + variant: 'solid', + }, + }, + code: { + className: 'chakra-code', + base: { + fontFamily: 'mono', + alignItems: 'center', + display: 'inline-flex', + borderRadius: 'l2', + }, + variants: { + variant: { + solid: { + bg: 'colorPalette.solid', + color: 'colorPalette.contrast', + }, + subtle: { + bg: 'colorPalette.subtle', + color: 'colorPalette.fg', + }, + outline: { + color: 'colorPalette.fg', + shadow: 'inset 0 0 0px 1px var(--shadow-color)', + shadowColor: 'colorPalette.muted', + }, + surface: { + bg: 'colorPalette.subtle', + color: 'colorPalette.fg', + shadow: 'inset 0 0 0px 1px var(--shadow-color)', + shadowColor: 'colorPalette.muted', + }, + plain: { + color: 'colorPalette.fg', + }, + }, + size: { + xs: { + textStyle: '2xs', + px: '1', + minH: '4', + }, + sm: { + textStyle: 'xs', + px: '1.5', + minH: '5', + }, + md: { + textStyle: 'sm', + px: '2', + minH: '6', + }, + lg: { + textStyle: 'sm', + px: '2.5', + minH: '7', + }, + }, + }, + defaultVariants: { + variant: 'subtle', + size: 'sm', + }, + }, + container: { + className: 'chakra-container', + base: { + position: 'relative', + maxWidth: '8xl', + w: '100%', + mx: 'auto', + px: { + base: '4', + md: '6', + lg: '8', + }, + }, + variants: { + centerContent: { + true: { + display: 'flex', + flexDirection: 'column', + alignItems: 'center', + }, + }, + fluid: { + true: { + maxWidth: 'full', + }, + }, + }, + }, + heading: { + className: 'chakra-heading', + base: { + fontFamily: 'heading', + fontWeight: 'semibold', + }, + variants: { + size: { + xs: { + textStyle: 'xs', + }, + sm: { + textStyle: 'sm', + }, + md: { + textStyle: 'md', + }, + lg: { + textStyle: 'lg', + }, + xl: { + textStyle: 'xl', + }, + '2xl': { + textStyle: '2xl', + }, + '3xl': { + textStyle: '3xl', + }, + '4xl': { + textStyle: '4xl', + }, + '5xl': { + textStyle: '5xl', + }, + '6xl': { + textStyle: '6xl', + }, + '7xl': { + textStyle: '7xl', + }, + }, + }, + defaultVariants: { + size: 'xl', + }, + }, + input: { + className: 'chakra-input', + base: { + width: '100%', + minWidth: '0', + outline: '0', + position: 'relative', + appearance: 'none', + textAlign: 'start', + borderRadius: 'l2', + _disabled: { + layerStyle: 'disabled', + }, + height: 'var(--input-height)', + minW: 'var(--input-height)', + '--focus-color': 'colors.colorPalette.focusRing', + '--error-color': 'colors.border.error', + _invalid: { + focusRingColor: 'var(--error-color)', + borderColor: 'var(--error-color)', + }, + }, + variants: { + size: { + '2xs': { + textStyle: 'xs', + px: '2', + '--input-height': 'sizes.7', + }, + xs: { + textStyle: 'xs', + px: '2', + '--input-height': 'sizes.8', + }, + sm: { + textStyle: 'sm', + px: '2.5', + '--input-height': 'sizes.9', + }, + md: { + textStyle: 'sm', + px: '3', + '--input-height': 'sizes.10', + }, + lg: { + textStyle: 'md', + px: '4', + '--input-height': 'sizes.11', + }, + xl: { + textStyle: 'md', + px: '4.5', + '--input-height': 'sizes.12', + }, + '2xl': { + textStyle: 'lg', + px: '5', + '--input-height': 'sizes.16', + }, + }, + variant: { + outline: { + bg: 'transparent', + borderWidth: '1px', + borderColor: 'border', + focusVisibleRing: 'inside', + }, + subtle: { + borderWidth: '1px', + borderColor: 'transparent', + bg: 'bg.muted', + focusVisibleRing: 'inside', + }, + flushed: { + bg: 'transparent', + borderBottomWidth: '1px', + borderBottomColor: 'border', + borderRadius: '0', + px: '0', + _focusVisible: { + borderColor: 'var(--focus-color)', + boxShadow: '0px 1px 0px 0px var(--focus-color)', + }, + }, + }, + }, + defaultVariants: { + size: 'md', + variant: 'outline', + }, + }, + inputAddon: { + className: 'chakra-input-addon', + base: { + flex: '0 0 auto', + width: 'auto', + display: 'flex', + alignItems: 'center', + whiteSpace: 'nowrap', + alignSelf: 'stretch', + borderRadius: 'l2', + }, + variants: { + size: { + '2xs': { + textStyle: 'xs', + px: '2', + '--input-height': 'sizes.7', + }, + xs: { + textStyle: 'xs', + px: '2', + '--input-height': 'sizes.8', + }, + sm: { + textStyle: 'sm', + px: '2.5', + '--input-height': 'sizes.9', + }, + md: { + textStyle: 'sm', + px: '3', + '--input-height': 'sizes.10', + }, + lg: { + textStyle: 'md', + px: '4', + '--input-height': 'sizes.11', + }, + xl: { + textStyle: 'md', + px: '4.5', + '--input-height': 'sizes.12', + }, + '2xl': { + textStyle: 'lg', + px: '5', + '--input-height': 'sizes.16', + }, + }, + variant: { + outline: { + borderWidth: '1px', + borderColor: 'border', + bg: 'bg.muted', + }, + subtle: { + borderWidth: '1px', + borderColor: 'transparent', + bg: 'bg.emphasized', + }, + flushed: { + borderBottom: '1px solid', + borderColor: 'inherit', + borderRadius: '0', + px: '0', + bg: 'transparent', + }, + }, + }, + defaultVariants: { + size: 'md', + variant: 'outline', + }, + }, + kbd: { + className: 'chakra-kbd', + base: { + display: 'inline-flex', + alignItems: 'center', + fontWeight: 'medium', + fontFamily: 'mono', + flexShrink: '0', + whiteSpace: 'nowrap', + wordSpacing: '-0.5em', + userSelect: 'none', + px: '1', + borderRadius: 'l2', + }, + variants: { + variant: { + raised: { + bg: 'colorPalette.subtle', + color: 'colorPalette.fg', + borderWidth: '1px', + borderBottomWidth: '2px', + borderColor: 'colorPalette.muted', + }, + outline: { + borderWidth: '1px', + color: 'colorPalette.fg', + }, + subtle: { + bg: 'colorPalette.muted', + color: 'colorPalette.fg', + }, + plain: { + color: 'colorPalette.fg', + }, + }, + size: { + sm: { + textStyle: 'xs', + height: '4.5', + }, + md: { + textStyle: 'sm', + height: '5', + }, + lg: { + textStyle: 'md', + height: '6', + }, + }, + }, + defaultVariants: { + size: 'md', + variant: 'raised', + }, + }, + link: { + className: 'chakra-link', + base: { + display: 'inline-flex', + alignItems: 'center', + outline: 'none', + gap: '1.5', + cursor: 'pointer', + borderRadius: 'l1', + focusRing: 'outside', + }, + variants: { + variant: { + underline: { + color: 'colorPalette.fg', + textDecoration: 'underline', + textUnderlineOffset: '3px', + textDecorationColor: 'currentColor/20', + }, + plain: { + color: 'colorPalette.fg', + _hover: { + textDecoration: 'underline', + textUnderlineOffset: '3px', + textDecorationColor: 'currentColor/20', + }, + }, + }, + }, + defaultVariants: { + variant: 'plain', + }, + }, + mark: { + className: 'chakra-mark', + base: { + bg: 'transparent', + color: 'inherit', + whiteSpace: 'nowrap', + }, + variants: { + variant: { + subtle: { + bg: 'colorPalette.subtle', + color: 'inherit', + }, + solid: { + bg: 'colorPalette.solid', + color: 'colorPalette.contrast', + }, + text: { + fontWeight: 'medium', + }, + plain: {}, + }, + }, + }, + separator: { + className: 'chakra-separator', + base: { + display: 'block', + borderColor: 'border', + }, + variants: { + variant: { + solid: { + borderStyle: 'solid', + }, + dashed: { + borderStyle: 'dashed', + }, + dotted: { + borderStyle: 'dotted', + }, + }, + orientation: { + vertical: { + height: '100%', + borderInlineStartWidth: 'var(--separator-thickness)', + }, + horizontal: { + width: '100%', + borderTopWidth: 'var(--separator-thickness)', + }, + }, + size: { + xs: { + '--separator-thickness': '0.5px', + }, + sm: { + '--separator-thickness': '1px', + }, + md: { + '--separator-thickness': '2px', + }, + lg: { + '--separator-thickness': '3px', + }, + }, + }, + defaultVariants: { + size: 'sm', + variant: 'solid', + orientation: 'horizontal', + }, + }, + skeleton: { + className: 'chakra-skeleton', + base: {}, + variants: { + loading: { + true: { + borderRadius: 'l2', + boxShadow: 'none', + backgroundClip: 'padding-box', + cursor: 'default', + color: 'transparent', + pointerEvents: 'none', + userSelect: 'none', + flexShrink: '0', + '&::before, &::after, *': { + visibility: 'hidden', + }, + }, + false: { + background: 'unset', + animation: + 'fade-in var(--fade-duration, 0.1s) ease-out !important', + }, + }, + variant: { + pulse: { + background: 'bg.emphasized', + animation: 'pulse', + animationDuration: 'var(--duration, 1.2s)', + }, + shine: { + '--animate-from': '200%', + '--animate-to': '-200%', + '--start-color': 'colors.bg.muted', + '--end-color': 'colors.bg.emphasized', + backgroundImage: + 'linear-gradient(270deg,var(--start-color),var(--end-color),var(--end-color),var(--start-color))', + backgroundSize: '400% 100%', + animation: 'bg-position var(--duration, 5s) ease-in-out infinite', + }, + none: { + animation: 'none', + }, + }, + }, + defaultVariants: { + variant: 'pulse', + loading: true, + }, + }, + skipNavLink: { + className: 'chakra-skip-nav', + base: { + display: 'inline-flex', + bg: 'bg.panel', + padding: '2.5', + borderRadius: 'l2', + fontWeight: 'semibold', + focusVisibleRing: 'outside', + textStyle: 'sm', + userSelect: 'none', + border: '0', + height: '1px', + width: '1px', + margin: '-1px', + outline: '0', + overflow: 'hidden', + position: 'absolute', + clip: 'rect(0 0 0 0)', + _focusVisible: { + clip: 'auto', + width: 'auto', + height: 'auto', + position: 'fixed', + top: '6', + insetStart: '6', + }, + }, + }, + spinner: { + className: 'chakra-spinner', + base: { + display: 'inline-block', + borderColor: 'currentColor', + borderStyle: 'solid', + borderWidth: '2px', + borderRadius: 'full', + width: 'var(--spinner-size)', + height: 'var(--spinner-size)', + animation: 'spin', + animationDuration: 'slowest', + '--spinner-track-color': 'transparent', + borderBottomColor: 'var(--spinner-track-color)', + borderInlineStartColor: 'var(--spinner-track-color)', + }, + variants: { + size: { + inherit: { + '--spinner-size': '1em', + }, + xs: { + '--spinner-size': 'sizes.3', + }, + sm: { + '--spinner-size': 'sizes.4', + }, + md: { + '--spinner-size': 'sizes.5', + }, + lg: { + '--spinner-size': 'sizes.8', + }, + xl: { + '--spinner-size': 'sizes.10', + }, + }, + }, + defaultVariants: { + size: 'md', + }, + }, + textarea: { + className: 'chakra-textarea', + base: { + width: '100%', + minWidth: '0', + outline: '0', + position: 'relative', + appearance: 'none', + textAlign: 'start', + borderRadius: 'l2', + _disabled: { + layerStyle: 'disabled', + }, + '--focus-color': 'colors.colorPalette.focusRing', + '--error-color': 'colors.border.error', + _invalid: { + focusRingColor: 'var(--error-color)', + borderColor: 'var(--error-color)', + }, + }, + variants: { + size: { + xs: { + textStyle: 'xs', + px: '2', + py: '1.5', + scrollPaddingBottom: '1.5', + }, + sm: { + textStyle: 'sm', + px: '2.5', + py: '2', + scrollPaddingBottom: '2', + }, + md: { + textStyle: 'sm', + px: '3', + py: '2', + scrollPaddingBottom: '2', + }, + lg: { + textStyle: 'md', + px: '4', + py: '3', + scrollPaddingBottom: '3', + }, + xl: { + textStyle: 'md', + px: '4.5', + py: '3.5', + scrollPaddingBottom: '3.5', + }, + }, + variant: { + outline: { + bg: 'transparent', + borderWidth: '1px', + borderColor: 'border', + focusVisibleRing: 'inside', + }, + subtle: { + borderWidth: '1px', + borderColor: 'transparent', + bg: 'bg.muted', + focusVisibleRing: 'inside', + }, + flushed: { + bg: 'transparent', + borderBottomWidth: '1px', + borderBottomColor: 'border', + borderRadius: '0', + px: '0', + _focusVisible: { + borderColor: 'var(--focus-color)', + boxShadow: '0px 1px 0px 0px var(--focus-color)', + }, + }, + }, + }, + defaultVariants: { + size: 'md', + variant: 'outline', + }, + }, + icon: { + className: 'chakra-icon', + base: { + display: 'inline-block', + lineHeight: '1em', + flexShrink: '0', + color: 'currentcolor', + verticalAlign: 'middle', + width: 'var(--icon-size)', + height: 'var(--icon-size)', + }, + variants: { + size: { + inherit: { + '--icon-size': '1em', + }, + xs: { + '--icon-size': 'sizes.3', + }, + sm: { + '--icon-size': 'sizes.4', + }, + md: { + '--icon-size': 'sizes.5', + }, + lg: { + '--icon-size': 'sizes.6', + }, + xl: { + '--icon-size': 'sizes.7', + }, + '2xl': { + '--icon-size': 'sizes.8', + }, + }, + }, + defaultVariants: { + size: 'inherit', + }, + }, + checkmark: { + className: 'chakra-checkmark', + base: { + display: 'inline-flex', + alignItems: 'center', + justifyContent: 'center', + flexShrink: '0', + color: 'white', + borderWidth: '1px', + borderColor: 'transparent', + borderRadius: 'l1', + focusVisibleRing: 'outside', + _icon: { + boxSize: 'full', + }, + _invalid: { + colorPalette: 'red', + borderColor: 'border.error', + }, + _disabled: { + opacity: '0.5', + }, + }, + variants: { + size: { + xs: { + boxSize: '3', + }, + sm: { + boxSize: '4', + }, + md: { + boxSize: '5', + p: '0.5', + }, + lg: { + boxSize: '6', + p: '0.5', + }, + }, + variant: { + solid: { + borderColor: 'border', + '&:is([data-state=checked], [data-state=indeterminate])': { + bg: 'colorPalette.solid', + color: 'colorPalette.contrast', + borderColor: 'colorPalette.solid', + }, + }, + outline: { + borderColor: 'border', + '&:is([data-state=checked], [data-state=indeterminate])': { + color: 'colorPalette.fg', + borderColor: 'colorPalette.solid', + }, + }, + subtle: { + bg: 'colorPalette.muted', + borderColor: 'colorPalette.muted', + '&:is([data-state=checked], [data-state=indeterminate])': { + color: 'colorPalette.fg', + }, + }, + plain: { + '&:is([data-state=checked], [data-state=indeterminate])': { + color: 'colorPalette.fg', + }, + }, + inverted: { + borderColor: 'border', + color: 'colorPalette.fg', + '&:is([data-state=checked], [data-state=indeterminate])': { + borderColor: 'colorPalette.solid', + }, + }, + }, + }, + defaultVariants: { + variant: 'solid', + size: 'md', + }, + }, + radiomark: { + className: 'chakra-radiomark', + base: { + display: 'inline-flex', + alignItems: 'center', + justifyContent: 'center', + flexShrink: 0, + verticalAlign: 'top', + color: 'white', + borderWidth: '1px', + borderColor: 'transparent', + borderRadius: 'full', + cursor: 'radio', + _focusVisible: { + outline: '2px solid', + outlineColor: 'colorPalette.focusRing', + outlineOffset: '2px', + }, + _invalid: { + colorPalette: 'red', + borderColor: 'red.500', + }, + _disabled: { + opacity: '0.5', + cursor: 'disabled', + }, + '& .dot': { + height: '100%', + width: '100%', + borderRadius: 'full', + bg: 'currentColor', + scale: '0.4', + }, + }, + variants: { + variant: { + solid: { + borderWidth: '1px', + borderColor: 'border', + _checked: { + bg: 'colorPalette.solid', + color: 'colorPalette.contrast', + borderColor: 'colorPalette.solid', + }, + }, + subtle: { + borderWidth: '1px', + bg: 'colorPalette.muted', + borderColor: 'colorPalette.muted', + color: 'transparent', + _checked: { + color: 'colorPalette.fg', + }, + }, + outline: { + borderWidth: '1px', + borderColor: 'inherit', + _checked: { + color: 'colorPalette.fg', + borderColor: 'colorPalette.solid', + }, + '& .dot': { + scale: '0.6', + }, + }, + inverted: { + bg: 'bg', + borderWidth: '1px', + borderColor: 'inherit', + _checked: { + color: 'colorPalette.solid', + borderColor: 'currentcolor', + }, + }, + }, + size: { + xs: { + boxSize: '3', + }, + sm: { + boxSize: '4', + }, + md: { + boxSize: '5', + }, + lg: { + boxSize: '6', + }, + }, + }, + defaultVariants: { + variant: 'solid', + size: 'md', + }, + }, + colorSwatch: { + className: 'color-swatch', + base: { + boxSize: 'var(--swatch-size)', + shadow: 'inset 0 0 0 1px rgba(0, 0, 0, 0.1)', + '--checker-size': '8px', + '--checker-bg': 'colors.bg', + '--checker-fg': 'colors.bg.emphasized', + background: + 'linear-gradient(var(--color), var(--color)), repeating-conic-gradient(var(--checker-fg) 0%, var(--checker-fg) 25%, var(--checker-bg) 0%, var(--checker-bg) 50%) 0% 50% / var(--checker-size) var(--checker-size) !important', + display: 'inline-flex', + alignItems: 'center', + justifyContent: 'center', + flexShrink: '0', + }, + variants: { + size: { + '2xs': { + '--swatch-size': 'sizes.3.5', + }, + xs: { + '--swatch-size': 'sizes.4', + }, + sm: { + '--swatch-size': 'sizes.4.5', + }, + md: { + '--swatch-size': 'sizes.5', + }, + lg: { + '--swatch-size': 'sizes.6', + }, + xl: { + '--swatch-size': 'sizes.7', + }, + '2xl': { + '--swatch-size': 'sizes.8', + }, + inherit: { + '--swatch-size': 'inherit', + }, + full: { + '--swatch-size': '100%', + }, + }, + shape: { + square: { + borderRadius: 'none', + }, + circle: { + borderRadius: 'full', + }, + rounded: { + borderRadius: 'l1', + }, + }, + }, + defaultVariants: { + size: 'md', + shape: 'rounded', + }, + }, + }, + slotRecipes: { + accordion: { + className: 'chakra-accordion', + slots: [ + 'root', + 'item', + 'itemTrigger', + 'itemContent', + 'itemIndicator', + 'itemBody', + ], + base: { + root: { + width: 'full', + '--accordion-radius': 'radii.l2', + }, + item: { + overflowAnchor: 'none', + }, + itemTrigger: { + display: 'flex', + alignItems: 'center', + width: 'full', + outline: '0', + gap: '3', + fontWeight: 'medium', + borderRadius: 'var(--accordion-radius)', + _focusVisible: { + outline: '2px solid', + outlineColor: 'colorPalette.focusRing', + }, + _disabled: { + layerStyle: 'disabled', + }, + }, + itemBody: { + pt: 'var(--accordion-padding-y)', + pb: 'calc(var(--accordion-padding-y) * 2)', + }, + itemContent: { + overflow: 'hidden', + borderRadius: 'var(--accordion-radius)', + _open: { + animationName: 'expand-height, fade-in', + animationDuration: 'moderate', + }, + _closed: { + animationName: 'collapse-height, fade-out', + animationDuration: 'moderate', + }, + }, + itemIndicator: { + transition: 'rotate 0.2s', + transformOrigin: 'center', + color: 'fg.subtle', + _open: { + rotate: '180deg', + }, + _icon: { + width: '1.2em', + height: '1.2em', + }, + }, + }, + variants: { + variant: { + outline: { + item: { + borderBottomWidth: '1px', + }, + }, + subtle: { + itemTrigger: { + px: 'var(--accordion-padding-x)', + }, + itemContent: { + px: 'var(--accordion-padding-x)', + }, + item: { + borderRadius: 'var(--accordion-radius)', + _open: { + bg: 'colorPalette.subtle', + }, + }, + }, + enclosed: { + root: { + borderWidth: '1px', + borderRadius: 'var(--accordion-radius)', + divideY: '1px', + overflow: 'hidden', + }, + itemTrigger: { + px: 'var(--accordion-padding-x)', + }, + itemContent: { + px: 'var(--accordion-padding-x)', + }, + item: { + _open: { + bg: 'bg.subtle', + }, + }, + }, + plain: {}, + }, + size: { + sm: { + root: { + '--accordion-padding-x': 'spacing.3', + '--accordion-padding-y': 'spacing.2', + }, + itemTrigger: { + textStyle: 'sm', + py: 'var(--accordion-padding-y)', + }, + }, + md: { + root: { + '--accordion-padding-x': 'spacing.4', + '--accordion-padding-y': 'spacing.2', + }, + itemTrigger: { + textStyle: 'md', + py: 'var(--accordion-padding-y)', + }, + }, + lg: { + root: { + '--accordion-padding-x': 'spacing.4.5', + '--accordion-padding-y': 'spacing.2.5', + }, + itemTrigger: { + textStyle: 'lg', + py: 'var(--accordion-padding-y)', + }, + }, + }, + }, + defaultVariants: { + size: 'md', + variant: 'outline', + }, + }, + actionBar: { + className: 'chakra-action-bar', + slots: [ + 'positioner', + 'content', + 'separator', + 'selectionTrigger', + 'closeTrigger', + ], + base: { + positioner: { + position: 'fixed', + display: 'flex', + justifyContent: 'center', + pointerEvents: 'none', + insetInline: '0', + top: 'unset', + bottom: 'calc(env(safe-area-inset-bottom) + 20px)', + }, + content: { + bg: 'bg.panel', + shadow: 'md', + display: 'flex', + alignItems: 'center', + gap: '3', + borderRadius: 'l3', + py: '2.5', + px: '3', + pointerEvents: 'auto', + translate: 'calc(-1 * var(--scrollbar-width) / 2) 0px', + _open: { + animationName: 'slide-from-bottom, fade-in', + animationDuration: 'moderate', + }, + _closed: { + animationName: 'slide-to-bottom, fade-out', + animationDuration: 'faster', + }, + }, + separator: { + width: '1px', + height: '5', + bg: 'border', + }, + selectionTrigger: { + display: 'inline-flex', + alignItems: 'center', + gap: '2', + alignSelf: 'stretch', + textStyle: 'sm', + px: '4', + py: '1', + borderRadius: 'l2', + borderWidth: '1px', + borderStyle: 'dashed', + }, + }, + }, + alert: { + slots: ['title', 'description', 'root', 'indicator', 'content'], + className: 'chakra-alert', + base: { + root: { + width: 'full', + display: 'flex', + alignItems: 'flex-start', + position: 'relative', + borderRadius: 'l3', + }, + title: { + fontWeight: 'medium', + }, + description: { + display: 'inline', + }, + indicator: { + display: 'inline-flex', + alignItems: 'center', + justifyContent: 'center', + flexShrink: '0', + width: '1em', + height: '1em', + _icon: { + boxSize: 'full', + }, + }, + content: { + display: 'flex', + flex: '1', + gap: '1', + }, + }, + variants: { + status: { + info: { + root: { + colorPalette: 'blue', + }, + }, + warning: { + root: { + colorPalette: 'orange', + }, + }, + success: { + root: { + colorPalette: 'green', + }, + }, + error: { + root: { + colorPalette: 'red', + }, + }, + neutral: { + root: { + colorPalette: 'gray', + }, + }, + }, + inline: { + true: { + content: { + display: 'inline-flex', + flexDirection: 'row', + alignItems: 'center', + }, + }, + false: { + content: { + display: 'flex', + flexDirection: 'column', + }, + }, + }, + variant: { + subtle: { + root: { + bg: 'colorPalette.subtle', + color: 'colorPalette.fg', + }, + }, + surface: { + root: { + bg: 'colorPalette.subtle', + color: 'colorPalette.fg', + shadow: 'inset 0 0 0px 1px var(--shadow-color)', + shadowColor: 'colorPalette.muted', + }, + indicator: { + color: 'colorPalette.fg', + }, + }, + outline: { + root: { + color: 'colorPalette.fg', + shadow: 'inset 0 0 0px 1px var(--shadow-color)', + shadowColor: 'colorPalette.muted', + }, + indicator: { + color: 'colorPalette.fg', + }, + }, + solid: { + root: { + bg: 'colorPalette.solid', + color: 'colorPalette.contrast', + }, + indicator: { + color: 'colorPalette.contrast', + }, + }, + }, + size: { + sm: { + root: { + gap: '2', + px: '3', + py: '3', + textStyle: 'xs', + }, + indicator: { + textStyle: 'lg', + }, + }, + md: { + root: { + gap: '3', + px: '4', + py: '4', + textStyle: 'sm', + }, + indicator: { + textStyle: 'xl', + }, + }, + lg: { + root: { + gap: '3', + px: '4', + py: '4', + textStyle: 'md', + }, + indicator: { + textStyle: '2xl', + }, + }, + }, + }, + defaultVariants: { + status: 'info', + variant: 'subtle', + size: 'md', + inline: false, + }, + }, + avatar: { + slots: ['root', 'image', 'fallback'], + className: 'chakra-avatar', + base: { + root: { + display: 'inline-flex', + alignItems: 'center', + justifyContent: 'center', + fontWeight: 'medium', + position: 'relative', + verticalAlign: 'top', + flexShrink: '0', + userSelect: 'none', + width: 'var(--avatar-size)', + height: 'var(--avatar-size)', + fontSize: 'var(--avatar-font-size)', + borderRadius: 'var(--avatar-radius)', + '&[data-group-item]': { + borderWidth: '2px', + borderColor: 'bg', + }, + }, + image: { + width: '100%', + height: '100%', + objectFit: 'cover', + borderRadius: 'var(--avatar-radius)', + }, + fallback: { + lineHeight: '1', + textTransform: 'uppercase', + fontWeight: 'medium', + fontSize: 'var(--avatar-font-size)', + borderRadius: 'var(--avatar-radius)', + }, + }, + variants: { + size: { + full: { + root: { + '--avatar-size': '100%', + '--avatar-font-size': '100%', + }, + }, + '2xs': { + root: { + '--avatar-font-size': 'fontSizes.2xs', + '--avatar-size': 'sizes.6', + }, + }, + xs: { + root: { + '--avatar-font-size': 'fontSizes.xs', + '--avatar-size': 'sizes.8', + }, + }, + sm: { + root: { + '--avatar-font-size': 'fontSizes.sm', + '--avatar-size': 'sizes.9', + }, + }, + md: { + root: { + '--avatar-font-size': 'fontSizes.md', + '--avatar-size': 'sizes.10', + }, + }, + lg: { + root: { + '--avatar-font-size': 'fontSizes.md', + '--avatar-size': 'sizes.11', + }, + }, + xl: { + root: { + '--avatar-font-size': 'fontSizes.lg', + '--avatar-size': 'sizes.12', + }, + }, + '2xl': { + root: { + '--avatar-font-size': 'fontSizes.xl', + '--avatar-size': 'sizes.16', + }, + }, + }, + variant: { + solid: { + root: { + bg: 'colorPalette.solid', + color: 'colorPalette.contrast', + }, + }, + subtle: { + root: { + bg: 'colorPalette.muted', + color: 'colorPalette.fg', + }, + }, + outline: { + root: { + color: 'colorPalette.fg', + borderWidth: '1px', + borderColor: 'colorPalette.muted', + }, + }, + }, + shape: { + square: {}, + rounded: { + root: { + '--avatar-radius': 'radii.l3', + }, + }, + full: { + root: { + '--avatar-radius': 'radii.full', + }, + }, + }, + borderless: { + true: { + root: { + '&[data-group-item]': { + borderWidth: '0px', + }, + }, + }, + }, + }, + defaultVariants: { + size: 'md', + shape: 'full', + variant: 'subtle', + }, + }, + blockquote: { + className: 'chakra-blockquote', + slots: ['root', 'icon', 'content', 'caption'], + base: { + root: { + position: 'relative', + display: 'flex', + flexDirection: 'column', + gap: '2', + }, + caption: { + textStyle: 'sm', + color: 'fg.muted', + }, + icon: { + boxSize: '5', + }, + }, + variants: { + justify: { + start: { + root: { + alignItems: 'flex-start', + textAlign: 'start', + }, + }, + center: { + root: { + alignItems: 'center', + textAlign: 'center', + }, + }, + end: { + root: { + alignItems: 'flex-end', + textAlign: 'end', + }, + }, + }, + variant: { + subtle: { + root: { + paddingX: '5', + borderStartWidth: '4px', + borderStartColor: 'colorPalette.muted', + }, + icon: { + color: 'colorPalette.fg', + }, + }, + solid: { + root: { + paddingX: '5', + borderStartWidth: '4px', + borderStartColor: 'colorPalette.solid', + }, + icon: { + color: 'colorPalette.solid', + }, + }, + plain: { + root: { + paddingX: '5', + }, + icon: { + color: 'colorPalette.solid', + }, + }, + }, + }, + defaultVariants: { + variant: 'subtle', + justify: 'start', + }, + }, + breadcrumb: { + className: 'chakra-breadcrumb', + slots: [ + 'link', + 'currentLink', + 'item', + 'list', + 'root', + 'ellipsis', + 'separator', + ], + base: { + list: { + display: 'flex', + alignItems: 'center', + wordBreak: 'break-word', + color: 'fg.muted', + }, + link: { + outline: '0', + textDecoration: 'none', + borderRadius: 'l1', + focusRing: 'outside', + display: 'inline-flex', + alignItems: 'center', + gap: '2', + }, + item: { + display: 'inline-flex', + alignItems: 'center', + }, + separator: { + color: 'fg.muted', + opacity: '0.8', + _icon: { + boxSize: '1em', + }, + }, + ellipsis: { + display: 'inline-flex', + alignItems: 'center', + justifyContent: 'center', + _icon: { + boxSize: '1em', + }, + }, + }, + variants: { + variant: { + underline: { + link: { + color: 'colorPalette.fg', + textDecoration: 'underline', + textUnderlineOffset: '0.2em', + textDecorationColor: 'colorPalette.muted', + }, + currentLink: { + color: 'colorPalette.fg', + }, + }, + plain: { + link: { + color: 'fg.muted', + _hover: { + color: 'fg', + }, + }, + currentLink: { + color: 'fg', + }, + }, + }, + size: { + sm: { + list: { + gap: '1', + textStyle: 'xs', + }, + }, + md: { + list: { + gap: '1.5', + textStyle: 'sm', + }, + }, + lg: { + list: { + gap: '2', + textStyle: 'md', + }, + }, + }, + }, + defaultVariants: { + variant: 'plain', + size: 'md', + }, + }, + card: { + className: 'chakra-card', + slots: ['root', 'header', 'body', 'footer', 'title', 'description'], + base: { + root: { + display: 'flex', + flexDirection: 'column', + position: 'relative', + minWidth: '0', + wordWrap: 'break-word', + borderRadius: 'l3', + color: 'fg', + textAlign: 'start', + }, + title: { + fontWeight: 'semibold', + }, + description: { + color: 'fg.muted', + fontSize: 'sm', + }, + header: { + paddingInline: 'var(--card-padding)', + paddingTop: 'var(--card-padding)', + display: 'flex', + flexDirection: 'column', + gap: '1.5', + }, + body: { + padding: 'var(--card-padding)', + flex: '1', + display: 'flex', + flexDirection: 'column', + }, + footer: { + display: 'flex', + alignItems: 'center', + gap: '2', + paddingInline: 'var(--card-padding)', + paddingBottom: 'var(--card-padding)', + }, + }, + variants: { + size: { + sm: { + root: { + '--card-padding': 'spacing.4', + }, + title: { + textStyle: 'md', + }, + }, + md: { + root: { + '--card-padding': 'spacing.6', + }, + title: { + textStyle: 'lg', + }, + }, + lg: { + root: { + '--card-padding': 'spacing.7', + }, + title: { + textStyle: 'xl', + }, + }, + }, + variant: { + elevated: { + root: { + bg: 'bg.panel', + boxShadow: 'md', + }, + }, + outline: { + root: { + bg: 'bg.panel', + borderWidth: '1px', + borderColor: 'border', + }, + }, + subtle: { + root: { + bg: 'bg.muted', + }, + }, + }, + }, + defaultVariants: { + variant: 'outline', + size: 'md', + }, + }, + checkbox: { + slots: ['root', 'label', 'control', 'indicator', 'group'], + className: 'chakra-checkbox', + base: { + root: { + display: 'inline-flex', + gap: '2', + alignItems: 'center', + verticalAlign: 'top', + position: 'relative', + }, + control: { + display: 'inline-flex', + alignItems: 'center', + justifyContent: 'center', + flexShrink: '0', + color: 'white', + borderWidth: '1px', + borderColor: 'transparent', + borderRadius: 'l1', + focusVisibleRing: 'outside', + _icon: { + boxSize: 'full', + }, + _invalid: { + colorPalette: 'red', + borderColor: 'border.error', + }, + _disabled: { + opacity: '0.5', + }, + }, + label: { + fontWeight: 'medium', + userSelect: 'none', + _disabled: { + opacity: '0.5', + }, + }, + }, + variants: { + size: { + xs: { + root: { + gap: '1.5', + }, + label: { + textStyle: 'xs', + }, + control: { + boxSize: '3', + }, + }, + sm: { + root: { + gap: '2', + }, + label: { + textStyle: 'sm', + }, + control: { + boxSize: '4', + }, + }, + md: { + root: { + gap: '2.5', + }, + label: { + textStyle: 'sm', + }, + control: { + boxSize: '5', + p: '0.5', + }, + }, + lg: { + root: { + gap: '3', + }, + label: { + textStyle: 'md', + }, + control: { + boxSize: '6', + p: '0.5', + }, + }, + }, + variant: { + outline: { + control: { + borderColor: 'border', + '&:is([data-state=checked], [data-state=indeterminate])': { + color: 'colorPalette.fg', + borderColor: 'colorPalette.solid', + }, + }, + }, + solid: { + control: { + borderColor: 'border', + '&:is([data-state=checked], [data-state=indeterminate])': { + bg: 'colorPalette.solid', + color: 'colorPalette.contrast', + borderColor: 'colorPalette.solid', + }, + }, + }, + subtle: { + control: { + bg: 'colorPalette.muted', + borderColor: 'colorPalette.muted', + '&:is([data-state=checked], [data-state=indeterminate])': { + color: 'colorPalette.fg', + }, + }, + }, + }, + }, + defaultVariants: { + variant: 'solid', + size: 'md', + }, + }, + checkboxCard: { + slots: [ + 'root', + 'control', + 'label', + 'description', + 'addon', + 'indicator', + 'content', + ], + className: 'chakra-checkbox-card', + base: { + root: { + display: 'flex', + flexDirection: 'column', + userSelect: 'none', + position: 'relative', + borderRadius: 'l2', + flex: '1', + focusVisibleRing: 'outside', + _disabled: { + opacity: '0.8', + borderColor: 'border.subtle', + }, + _invalid: { + outline: '2px solid', + outlineColor: 'border.error', + }, + }, + control: { + display: 'inline-flex', + flex: '1', + position: 'relative', + borderRadius: 'inherit', + justifyContent: 'var(--checkbox-card-justify)', + alignItems: 'var(--checkbox-card-align)', + }, + label: { + fontWeight: 'medium', + display: 'flex', + alignItems: 'center', + gap: '2', + _disabled: { + opacity: '0.5', + }, + }, + description: { + opacity: '0.64', + textStyle: 'sm', + }, + addon: { + _disabled: { + opacity: '0.5', + }, + }, + indicator: { + display: 'inline-flex', + alignItems: 'center', + justifyContent: 'center', + flexShrink: '0', + color: 'white', + borderWidth: '1px', + borderColor: 'transparent', + borderRadius: 'l1', + focusVisibleRing: 'outside', + _icon: { + boxSize: 'full', + }, + _invalid: { + colorPalette: 'red', + borderColor: 'border.error', + }, + _disabled: { + opacity: '0.5', + }, + }, + content: { + display: 'flex', + flexDirection: 'column', + flex: '1', + gap: '1', + justifyContent: 'var(--checkbox-card-justify)', + alignItems: 'var(--checkbox-card-align)', + }, + }, + variants: { + size: { + sm: { + root: { + textStyle: 'sm', + }, + control: { + padding: '3', + gap: '1.5', + }, + addon: { + px: '3', + py: '1.5', + borderTopWidth: '1px', + }, + indicator: { + boxSize: '4', + }, + }, + md: { + root: { + textStyle: 'sm', + }, + control: { + padding: '4', + gap: '2.5', + }, + addon: { + px: '4', + py: '2', + borderTopWidth: '1px', + }, + indicator: { + boxSize: '5', + p: '0.5', + }, + }, + lg: { + root: { + textStyle: 'md', + }, + control: { + padding: '4', + gap: '3.5', + }, + addon: { + px: '4', + py: '2', + borderTopWidth: '1px', + }, + indicator: { + boxSize: '6', + p: '0.5', + }, + }, + }, + variant: { + surface: { + root: { + borderWidth: '1px', + borderColor: 'border', + _checked: { + bg: 'colorPalette.subtle', + color: 'colorPalette.fg', + borderColor: 'colorPalette.muted', + }, + _disabled: { + bg: 'bg.muted', + }, + }, + indicator: { + borderColor: 'border', + '&:is([data-state=checked], [data-state=indeterminate])': { + bg: 'colorPalette.solid', + color: 'colorPalette.contrast', + borderColor: 'colorPalette.solid', + }, + }, + }, + subtle: { + root: { + bg: 'bg.muted', + }, + control: { + _checked: { + bg: 'colorPalette.muted', + color: 'colorPalette.fg', + }, + }, + indicator: { + '&:is([data-state=checked], [data-state=indeterminate])': { + color: 'colorPalette.fg', + }, + }, + }, + outline: { + root: { + borderWidth: '1px', + borderColor: 'border', + _checked: { + boxShadow: '0 0 0 1px var(--shadow-color)', + boxShadowColor: 'colorPalette.solid', + borderColor: 'colorPalette.solid', + }, + }, + indicator: { + borderColor: 'border', + '&:is([data-state=checked], [data-state=indeterminate])': { + bg: 'colorPalette.solid', + color: 'colorPalette.contrast', + borderColor: 'colorPalette.solid', + }, + }, + }, + solid: { + root: { + borderWidth: '1px', + _checked: { + bg: 'colorPalette.solid', + color: 'colorPalette.contrast', + borderColor: 'colorPalette.solid', + }, + }, + indicator: { + borderColor: 'border', + color: 'colorPalette.fg', + '&:is([data-state=checked], [data-state=indeterminate])': { + borderColor: 'colorPalette.solid', + }, + }, + }, + }, + justify: { + start: { + root: { + '--checkbox-card-justify': 'flex-start', + }, + }, + end: { + root: { + '--checkbox-card-justify': 'flex-end', + }, + }, + center: { + root: { + '--checkbox-card-justify': 'center', + }, + }, + }, + align: { + start: { + root: { + '--checkbox-card-align': 'flex-start', + }, + content: { + textAlign: 'start', + }, + }, + end: { + root: { + '--checkbox-card-align': 'flex-end', + }, + content: { + textAlign: 'end', + }, + }, + center: { + root: { + '--checkbox-card-align': 'center', + }, + content: { + textAlign: 'center', + }, + }, + }, + orientation: { + vertical: { + control: { + flexDirection: 'column', + }, + }, + horizontal: { + control: { + flexDirection: 'row', + }, + }, + }, + }, + defaultVariants: { + size: 'md', + variant: 'outline', + align: 'start', + orientation: 'horizontal', + }, + }, + collapsible: { + slots: ['root', 'trigger', 'content'], + className: 'chakra-collapsible', + base: { + content: { + overflow: 'hidden', + _open: { + animationName: 'expand-height, fade-in', + animationDuration: 'moderate', + }, + _closed: { + animationName: 'collapse-height, fade-out', + animationDuration: 'moderate', + }, + }, + }, + }, + dataList: { + slots: ['root', 'item', 'itemLabel', 'itemValue'], + className: 'chakra-data-list', + base: { + itemLabel: { + display: 'flex', + alignItems: 'center', + gap: '1', + }, + itemValue: { + display: 'flex', + minWidth: '0', + flex: '1', + }, + }, + variants: { + orientation: { + horizontal: { + root: { + display: 'flex', + flexDirection: 'column', + }, + item: { + display: 'inline-flex', + alignItems: 'center', + gap: '4', + }, + itemLabel: { + minWidth: '120px', + }, + }, + vertical: { + root: { + display: 'flex', + flexDirection: 'column', + }, + item: { + display: 'flex', + flexDirection: 'column', + gap: '1', + }, + }, + }, + size: { + sm: { + root: { + gap: '3', + }, + item: { + textStyle: 'xs', + }, + }, + md: { + root: { + gap: '4', + }, + item: { + textStyle: 'sm', + }, + }, + lg: { + root: { + gap: '5', + }, + item: { + textStyle: 'md', + }, + }, + }, + variant: { + subtle: { + itemLabel: { + color: 'fg.muted', + }, + }, + bold: { + itemLabel: { + fontWeight: 'medium', + }, + itemValue: { + color: 'fg.muted', + }, + }, + }, + }, + defaultVariants: { + size: 'md', + orientation: 'vertical', + variant: 'subtle', + }, + }, + dialog: { + slots: [ + 'trigger', + 'backdrop', + 'positioner', + 'content', + 'title', + 'description', + 'closeTrigger', + 'header', + 'body', + 'footer', + 'backdrop', + ], + className: 'chakra-dialog', + base: { + backdrop: { + bg: 'blackAlpha.500', + pos: 'fixed', + left: 0, + top: 0, + w: '100vw', + h: '100dvh', + zIndex: 'modal', + _open: { + animationName: 'fade-in', + animationDuration: 'slow', + }, + _closed: { + animationName: 'fade-out', + animationDuration: 'moderate', + }, + }, + positioner: { + display: 'flex', + width: '100vw', + height: '100dvh', + position: 'fixed', + left: 0, + top: 0, + '--dialog-z-index': 'zIndex.modal', + zIndex: 'calc(var(--dialog-z-index) + var(--layer-index, 0))', + justifyContent: 'center', + overscrollBehaviorY: 'none', + }, + content: { + display: 'flex', + flexDirection: 'column', + position: 'relative', + width: '100%', + outline: 0, + borderRadius: 'l3', + textStyle: 'sm', + my: 'var(--dialog-margin, var(--dialog-base-margin))', + '--dialog-z-index': 'zIndex.modal', + zIndex: 'calc(var(--dialog-z-index) + var(--layer-index, 0))', + bg: 'bg.panel', + boxShadow: 'lg', + _open: { + animationDuration: 'moderate', + }, + _closed: { + animationDuration: 'faster', + }, + }, + header: { + flex: 0, + px: '6', + pt: '6', + pb: '4', + }, + body: { + flex: '1', + px: '6', + pt: '2', + pb: '6', + }, + footer: { + display: 'flex', + alignItems: 'center', + justifyContent: 'flex-end', + gap: '3', + px: '6', + pt: '2', + pb: '4', + }, + title: { + textStyle: 'lg', + fontWeight: 'semibold', + }, + description: { + color: 'fg.muted', + }, + }, + variants: { + placement: { + center: { + positioner: { + alignItems: 'center', + }, + content: { + '--dialog-base-margin': 'auto', + mx: 'auto', + }, + }, + top: { + positioner: { + alignItems: 'flex-start', + }, + content: { + '--dialog-base-margin': 'spacing.16', + mx: 'auto', + }, + }, + bottom: { + positioner: { + alignItems: 'flex-end', + }, + content: { + '--dialog-base-margin': 'spacing.16', + mx: 'auto', + }, + }, + }, + scrollBehavior: { + inside: { + positioner: { + overflow: 'hidden', + }, + content: { + maxH: 'calc(100% - 7.5rem)', + }, + body: { + overflow: 'auto', + }, + }, + outside: { + positioner: { + overflow: 'auto', + pointerEvents: 'auto', + }, + }, + }, + size: { + xs: { + content: { + maxW: 'sm', + }, + }, + sm: { + content: { + maxW: 'md', + }, + }, + md: { + content: { + maxW: 'lg', + }, + }, + lg: { + content: { + maxW: '2xl', + }, + }, + xl: { + content: { + maxW: '4xl', + }, + }, + cover: { + positioner: { + padding: '10', + }, + content: { + width: '100%', + height: '100%', + '--dialog-margin': '0', + }, + }, + full: { + content: { + maxW: '100vw', + minH: '100vh', + '--dialog-margin': '0', + borderRadius: '0', + }, + }, + }, + motionPreset: { + scale: { + content: { + _open: { + animationName: 'scale-in, fade-in', + }, + _closed: { + animationName: 'scale-out, fade-out', + }, + }, + }, + 'slide-in-bottom': { + content: { + _open: { + animationName: 'slide-from-bottom, fade-in', + }, + _closed: { + animationName: 'slide-to-bottom, fade-out', + }, + }, + }, + 'slide-in-top': { + content: { + _open: { + animationName: 'slide-from-top, fade-in', + }, + _closed: { + animationName: 'slide-to-top, fade-out', + }, + }, + }, + 'slide-in-left': { + content: { + _open: { + animationName: 'slide-from-left, fade-in', + }, + _closed: { + animationName: 'slide-to-left, fade-out', + }, + }, + }, + 'slide-in-right': { + content: { + _open: { + animationName: 'slide-from-right, fade-in', + }, + _closed: { + animationName: 'slide-to-right, fade-out', + }, + }, + }, + none: {}, + }, + }, + defaultVariants: { + size: 'md', + scrollBehavior: 'outside', + placement: 'top', + motionPreset: 'scale', + }, + }, + drawer: { + slots: [ + 'trigger', + 'backdrop', + 'positioner', + 'content', + 'title', + 'description', + 'closeTrigger', + 'header', + 'body', + 'footer', + 'backdrop', + ], + className: 'chakra-drawer', + base: { + backdrop: { + bg: 'blackAlpha.500', + pos: 'fixed', + insetInlineStart: 0, + top: 0, + w: '100vw', + h: '100dvh', + zIndex: 'modal', + _open: { + animationName: 'fade-in', + animationDuration: 'slow', + }, + _closed: { + animationName: 'fade-out', + animationDuration: 'moderate', + }, + }, + positioner: { + display: 'flex', + width: '100vw', + height: '100dvh', + position: 'fixed', + insetInlineStart: 0, + top: 0, + zIndex: 'modal', + overscrollBehaviorY: 'none', + }, + content: { + display: 'flex', + flexDirection: 'column', + position: 'relative', + width: '100%', + outline: 0, + zIndex: 'modal', + textStyle: 'sm', + maxH: '100dvh', + color: 'inherit', + bg: 'bg.panel', + boxShadow: 'lg', + _open: { + animationDuration: 'slowest', + animationTimingFunction: 'ease-in-smooth', + }, + _closed: { + animationDuration: 'slower', + animationTimingFunction: 'ease-in-smooth', + }, + }, + header: { + flex: 0, + px: '6', + pt: '6', + pb: '4', + }, + body: { + px: '6', + py: '2', + flex: '1', + overflow: 'auto', + }, + footer: { + display: 'flex', + alignItems: 'center', + justifyContent: 'flex-end', + gap: '3', + px: '6', + pt: '2', + pb: '4', + }, + title: { + textStyle: 'lg', + fontWeight: 'semibold', + }, + description: { + color: 'fg.muted', + }, + }, + variants: { + size: { + xs: { + content: { + maxW: 'xs', + }, + }, + sm: { + content: { + maxW: 'md', + }, + }, + md: { + content: { + maxW: 'lg', + }, + }, + lg: { + content: { + maxW: '2xl', + }, + }, + xl: { + content: { + maxW: '4xl', + }, + }, + full: { + content: { + maxW: '100vw', + h: '100dvh', + }, + }, + }, + placement: { + start: { + positioner: { + justifyContent: 'flex-start', + }, + content: { + _open: { + animationName: { + base: 'slide-from-left-full, fade-in', + _rtl: 'slide-from-right-full, fade-in', + }, + }, + _closed: { + animationName: { + base: 'slide-to-left-full, fade-out', + _rtl: 'slide-to-right-full, fade-out', + }, + }, + }, + }, + end: { + positioner: { + justifyContent: 'flex-end', + }, + content: { + _open: { + animationName: { + base: 'slide-from-right-full, fade-in', + _rtl: 'slide-from-left-full, fade-in', + }, + }, + _closed: { + animationName: { + base: 'slide-to-right-full, fade-out', + _rtl: 'slide-to-right-full, fade-out', + }, + }, + }, + }, + top: { + positioner: { + alignItems: 'flex-start', + }, + content: { + maxW: '100%', + _open: { + animationName: 'slide-from-top-full, fade-in', + }, + _closed: { + animationName: 'slide-to-top-full, fade-out', + }, + }, + }, + bottom: { + positioner: { + alignItems: 'flex-end', + }, + content: { + maxW: '100%', + _open: { + animationName: 'slide-from-bottom-full, fade-in', + }, + _closed: { + animationName: 'slide-to-bottom-full, fade-out', + }, + }, + }, + }, + contained: { + true: { + positioner: { + padding: '4', + }, + content: { + borderRadius: 'l3', + }, + }, + }, + }, + defaultVariants: { + size: 'xs', + placement: 'end', + }, + }, + editable: { + slots: [ + 'root', + 'area', + 'label', + 'preview', + 'input', + 'editTrigger', + 'submitTrigger', + 'cancelTrigger', + 'control', + 'textarea', + ], + className: 'chakra-editable', + base: { + root: { + display: 'inline-flex', + alignItems: 'center', + position: 'relative', + gap: '1.5', + width: 'full', + }, + preview: { + fontSize: 'inherit', + fontWeight: 'inherit', + textAlign: 'inherit', + bg: 'transparent', + borderRadius: 'l2', + py: '1', + px: '1', + display: 'inline-flex', + alignItems: 'center', + transitionProperty: 'common', + transitionDuration: 'normal', + cursor: 'text', + _hover: { + bg: 'bg.muted', + }, + _disabled: { + userSelect: 'none', + }, + }, + input: { + fontSize: 'inherit', + fontWeight: 'inherit', + textAlign: 'inherit', + bg: 'transparent', + borderRadius: 'l2', + outline: '0', + py: '1', + px: '1', + transitionProperty: 'common', + transitionDuration: 'normal', + width: 'full', + focusVisibleRing: 'inside', + focusRingWidth: '2px', + _placeholder: { + opacity: 0.6, + }, + }, + control: { + display: 'inline-flex', + alignItems: 'center', + gap: '1.5', + }, + }, + variants: { + size: { + sm: { + root: { + textStyle: 'sm', + }, + preview: { + minH: '8', + }, + input: { + minH: '8', + }, + }, + md: { + root: { + textStyle: 'sm', + }, + preview: { + minH: '9', + }, + input: { + minH: '9', + }, + }, + lg: { + root: { + textStyle: 'md', + }, + preview: { + minH: '10', + }, + input: { + minH: '10', + }, + }, + }, + }, + defaultVariants: { + size: 'md', + }, + }, + emptyState: { + slots: ['root', 'content', 'indicator', 'title', 'description'], + className: 'chakra-empty-state', + base: { + root: { + width: 'full', + }, + content: { + display: 'flex', + flexDirection: 'column', + alignItems: 'center', + justifyContent: 'center', + }, + indicator: { + display: 'flex', + alignItems: 'center', + justifyContent: 'center', + color: 'fg.subtle', + _icon: { + boxSize: '1em', + }, + }, + title: { + fontWeight: 'semibold', + }, + description: { + textStyle: 'sm', + color: 'fg.muted', + }, + }, + variants: { + size: { + sm: { + root: { + px: '4', + py: '6', + }, + title: { + textStyle: 'md', + }, + content: { + gap: '4', + }, + indicator: { + textStyle: '2xl', + }, + }, + md: { + root: { + px: '8', + py: '12', + }, + title: { + textStyle: 'lg', + }, + content: { + gap: '6', + }, + indicator: { + textStyle: '4xl', + }, + }, + lg: { + root: { + px: '12', + py: '16', + }, + title: { + textStyle: 'xl', + }, + content: { + gap: '8', + }, + indicator: { + textStyle: '6xl', + }, + }, + }, + }, + defaultVariants: { + size: 'md', + }, + }, + field: { + className: 'chakra-field', + slots: [ + 'root', + 'errorText', + 'helperText', + 'input', + 'label', + 'select', + 'textarea', + 'requiredIndicator', + 'requiredIndicator', + ], + base: { + requiredIndicator: { + color: 'fg.error', + lineHeight: '1', + }, + root: { + display: 'flex', + width: '100%', + position: 'relative', + gap: '1.5', + }, + label: { + display: 'flex', + alignItems: 'center', + textAlign: 'start', + textStyle: 'sm', + fontWeight: 'medium', + gap: '1', + userSelect: 'none', + _disabled: { + opacity: '0.5', + }, + }, + errorText: { + display: 'inline-flex', + alignItems: 'center', + fontWeight: 'medium', + gap: '1', + color: 'fg.error', + textStyle: 'xs', + }, + helperText: { + color: 'fg.muted', + textStyle: 'xs', + }, + }, + variants: { + orientation: { + vertical: { + root: { + flexDirection: 'column', + alignItems: 'flex-start', + }, + }, + horizontal: { + root: { + flexDirection: 'row', + alignItems: 'center', + justifyContent: 'space-between', + }, + label: { + flex: '0 0 var(--field-label-width, 80px)', + }, + }, + }, + }, + defaultVariants: { + orientation: 'vertical', + }, + }, + fieldset: { + className: 'fieldset', + slots: ['root', 'errorText', 'helperText', 'legend', 'content'], + base: { + root: { + display: 'flex', + flexDirection: 'column', + width: 'full', + }, + content: { + display: 'flex', + flexDirection: 'column', + width: 'full', + }, + legend: { + color: 'fg', + fontWeight: 'medium', + _disabled: { + opacity: '0.5', + }, + }, + helperText: { + color: 'fg.muted', + textStyle: 'sm', + }, + errorText: { + display: 'inline-flex', + alignItems: 'center', + color: 'fg.error', + gap: '2', + fontWeight: 'medium', + textStyle: 'sm', + }, + }, + variants: { + size: { + sm: { + root: { + spaceY: '2', + }, + content: { + gap: '1.5', + }, + legend: { + textStyle: 'sm', + }, + }, + md: { + root: { + spaceY: '4', + }, + content: { + gap: '4', + }, + legend: { + textStyle: 'sm', + }, + }, + lg: { + root: { + spaceY: '6', + }, + content: { + gap: '4', + }, + legend: { + textStyle: 'md', + }, + }, + }, + }, + defaultVariants: { + size: 'md', + }, + }, + fileUpload: { + className: 'chakra-file-upload', + slots: [ + 'root', + 'dropzone', + 'item', + 'itemDeleteTrigger', + 'itemGroup', + 'itemName', + 'itemPreview', + 'itemPreviewImage', + 'itemSizeText', + 'label', + 'trigger', + 'clearTrigger', + 'itemContent', + 'dropzoneContent', + ], + base: { + root: { + display: 'flex', + flexDirection: 'column', + gap: '4', + width: '100%', + alignItems: 'flex-start', + }, + label: { + fontWeight: 'medium', + textStyle: 'sm', + }, + dropzone: { + background: 'bg', + borderRadius: 'l3', + borderWidth: '2px', + borderStyle: 'dashed', + display: 'flex', + alignItems: 'center', + flexDirection: 'column', + gap: '4', + justifyContent: 'center', + minHeight: '2xs', + px: '3', + py: '2', + transition: 'backgrounds', + focusVisibleRing: 'outside', + _hover: { + bg: 'bg.subtle', + }, + _dragging: { + bg: 'colorPalette.subtle', + borderStyle: 'solid', + borderColor: 'colorPalette.solid', + }, + }, + dropzoneContent: { + display: 'flex', + flexDirection: 'column', + alignItems: 'center', + textAlign: 'center', + gap: '1', + textStyle: 'sm', + }, + item: { + textStyle: 'sm', + animationName: 'fade-in', + animationDuration: 'moderate', + background: 'bg', + borderRadius: 'l2', + borderWidth: '1px', + width: '100%', + display: 'flex', + alignItems: 'center', + gap: '3', + p: '4', + }, + itemGroup: { + width: '100%', + display: 'flex', + flexDirection: 'column', + gap: '3', + }, + itemName: { + color: 'fg', + fontWeight: 'medium', + lineClamp: '1', + }, + itemContent: { + display: 'flex', + flexDirection: 'column', + gap: '0.5', + flex: '1', + }, + itemSizeText: { + color: 'fg.muted', + textStyle: 'xs', + }, + itemDeleteTrigger: { + alignSelf: 'flex-start', + }, + itemPreviewImage: { + width: '10', + height: '10', + objectFit: 'scale-down', + }, + }, + defaultVariants: {}, + }, + hoverCard: { + className: 'chakra-hover-card', + slots: ['arrow', 'arrowTip', 'trigger', 'positioner', 'content'], + base: { + content: { + position: 'relative', + display: 'flex', + flexDirection: 'column', + textStyle: 'sm', + '--hovercard-bg': 'colors.bg.panel', + bg: 'var(--hovercard-bg)', + boxShadow: 'lg', + maxWidth: '80', + borderRadius: 'l3', + zIndex: 'popover', + transformOrigin: 'var(--transform-origin)', + outline: '0', + _open: { + animationStyle: 'slide-fade-in', + animationDuration: 'fast', + }, + _closed: { + animationStyle: 'slide-fade-out', + animationDuration: 'faster', + }, + }, + arrow: { + '--arrow-size': 'sizes.3', + '--arrow-background': 'var(--hovercard-bg)', + }, + arrowTip: { + borderTopWidth: '0.5px', + borderInlineStartWidth: '0.5px', + }, + }, + variants: { + size: { + xs: { + content: { + padding: '3', + }, + }, + sm: { + content: { + padding: '4', + }, + }, + md: { + content: { + padding: '5', + }, + }, + lg: { + content: { + padding: '6', + }, + }, + }, + }, + defaultVariants: { + size: 'md', + }, + }, + list: { + className: 'chakra-list', + slots: ['root', 'item', 'indicator'], + base: { + root: { + display: 'flex', + flexDirection: 'column', + gap: 'var(--list-gap)', + '& :where(ul, ol)': { + marginTop: 'var(--list-gap)', + }, + }, + item: { + whiteSpace: 'normal', + display: 'list-item', + }, + indicator: { + marginEnd: '2', + minHeight: '1lh', + flexShrink: 0, + display: 'inline-block', + verticalAlign: 'middle', + }, + }, + variants: { + variant: { + marker: { + root: { + listStyle: 'revert', + listStylePosition: 'inside', + }, + item: { + _marker: { + color: 'fg.subtle', + }, + }, + }, + plain: { + item: { + alignItems: 'flex-start', + display: 'inline-flex', + }, + }, + }, + align: { + center: { + item: { + alignItems: 'center', + }, + }, + start: { + item: { + alignItems: 'flex-start', + }, + }, + end: { + item: { + alignItems: 'flex-end', + }, + }, + }, + }, + defaultVariants: { + variant: 'marker', + }, + }, + menu: { + className: 'chakra-menu', + slots: [ + 'arrow', + 'arrowTip', + 'content', + 'contextTrigger', + 'indicator', + 'item', + 'itemGroup', + 'itemGroupLabel', + 'itemIndicator', + 'itemText', + 'positioner', + 'separator', + 'trigger', + 'triggerItem', + 'itemCommand', + ], + base: { + content: { + outline: 0, + bg: 'bg.panel', + boxShadow: 'lg', + color: 'fg', + maxHeight: 'var(--available-height)', + '--menu-z-index': 'zIndex.dropdown', + zIndex: 'calc(var(--menu-z-index) + var(--layer-index, 0))', + borderRadius: 'l2', + overflow: 'hidden', + overflowY: 'auto', + _open: { + animationStyle: 'slide-fade-in', + animationDuration: 'fast', + }, + _closed: { + animationStyle: 'slide-fade-out', + animationDuration: 'faster', + }, + }, + item: { + textDecoration: 'none', + color: 'fg', + userSelect: 'none', + borderRadius: 'l1', + width: '100%', + display: 'flex', + cursor: 'menuitem', + alignItems: 'center', + textAlign: 'start', + position: 'relative', + flex: '0 0 auto', + outline: 0, + _disabled: { + layerStyle: 'disabled', + }, + }, + itemText: { + flex: '1', + }, + itemGroupLabel: { + px: '2', + py: '1.5', + fontWeight: 'semibold', + textStyle: 'sm', + }, + indicator: { + display: 'inline-flex', + alignItems: 'center', + justifyContent: 'center', + flexShrink: '0', + }, + itemCommand: { + opacity: '0.6', + textStyle: 'xs', + ms: 'auto', + ps: '4', + letterSpacing: 'widest', + }, + separator: { + height: '1px', + bg: 'bg.muted', + my: '1', + mx: '-1', + }, + }, + variants: { + variant: { + subtle: { + item: { + _highlighted: { + bg: { + _light: 'bg.muted', + _dark: 'bg.emphasized', + }, + }, + }, + }, + solid: { + item: { + _highlighted: { + bg: 'colorPalette.solid', + color: 'colorPalette.contrast', + }, + }, + }, + }, + size: { + sm: { + content: { + minW: '8rem', + padding: '1', + }, + item: { + gap: '1', + textStyle: 'xs', + py: '1', + px: '1.5', + }, + }, + md: { + content: { + minW: '8rem', + padding: '1.5', + }, + item: { + gap: '2', + textStyle: 'sm', + py: '1.5', + px: '2', + }, + }, + }, + }, + defaultVariants: { + size: 'md', + variant: 'subtle', + }, + }, + nativeSelect: { + className: 'chakra-native-select', + slots: ['root', 'field', 'indicator'], + base: { + root: { + height: 'fit-content', + display: 'flex', + width: '100%', + position: 'relative', + }, + field: { + width: '100%', + minWidth: '0', + outline: '0', + appearance: 'none', + borderRadius: 'l2', + _disabled: { + layerStyle: 'disabled', + }, + _invalid: { + borderColor: 'border.error', + }, + focusVisibleRing: 'inside', + lineHeight: 'normal', + '& > option, & > optgroup': { + bg: 'inherit', + }, + }, + indicator: { + position: 'absolute', + display: 'inline-flex', + alignItems: 'center', + justifyContent: 'center', + pointerEvents: 'none', + top: '50%', + transform: 'translateY(-50%)', + height: '100%', + color: 'fg.muted', + _disabled: { + opacity: '0.5', + }, + _invalid: { + color: 'fg.error', + }, + _icon: { + width: '1em', + height: '1em', + }, + }, + }, + variants: { + variant: { + outline: { + field: { + bg: 'transparent', + borderWidth: '1px', + borderColor: 'border', + _expanded: { + borderColor: 'border.emphasized', + }, + }, + }, + subtle: { + field: { + borderWidth: '1px', + borderColor: 'transparent', + bg: 'bg.muted', + }, + }, + plain: { + field: { + bg: 'transparent', + color: 'fg', + focusRingWidth: '2px', + }, + }, + }, + size: { + xs: { + field: { + textStyle: 'xs', + ps: '2', + pe: '6', + height: '6', + }, + indicator: { + textStyle: 'sm', + insetEnd: '1.5', + }, + }, + sm: { + field: { + textStyle: 'sm', + ps: '2.5', + pe: '8', + height: '8', + }, + indicator: { + textStyle: 'md', + insetEnd: '2', + }, + }, + md: { + field: { + textStyle: 'sm', + ps: '3', + pe: '8', + height: '10', + }, + indicator: { + textStyle: 'lg', + insetEnd: '2', + }, + }, + lg: { + field: { + textStyle: 'md', + ps: '4', + pe: '8', + height: '11', + }, + indicator: { + textStyle: 'xl', + insetEnd: '3', + }, + }, + xl: { + field: { + textStyle: 'md', + ps: '4.5', + pe: '10', + height: '12', + }, + indicator: { + textStyle: 'xl', + insetEnd: '3', + }, + }, + }, + }, + defaultVariants: { + size: 'md', + variant: 'outline', + }, + }, + numberInput: { + className: 'chakra-number-input', + slots: [ + 'root', + 'label', + 'input', + 'control', + 'valueText', + 'incrementTrigger', + 'decrementTrigger', + 'scrubber', + ], + base: { + root: { + position: 'relative', + zIndex: '0', + isolation: 'isolate', + }, + input: { + width: '100%', + minWidth: '0', + outline: '0', + position: 'relative', + appearance: 'none', + textAlign: 'start', + borderRadius: 'l2', + _disabled: { + layerStyle: 'disabled', + }, + height: 'var(--input-height)', + minW: 'var(--input-height)', + '--focus-color': 'colors.colorPalette.focusRing', + '--error-color': 'colors.border.error', + _invalid: { + focusRingColor: 'var(--error-color)', + borderColor: 'var(--error-color)', + }, + verticalAlign: 'top', + pe: 'calc(var(--stepper-width) + 0.5rem)', + }, + control: { + display: 'flex', + flexDirection: 'column', + position: 'absolute', + top: '0', + insetEnd: '0px', + margin: '1px', + width: 'var(--stepper-width)', + height: 'calc(100% - 2px)', + zIndex: '1', + borderStartWidth: '1px', + divideY: '1px', + }, + incrementTrigger: { + display: 'flex', + justifyContent: 'center', + alignItems: 'center', + flex: '1', + userSelect: 'none', + cursor: 'button', + lineHeight: '1', + color: 'fg.muted', + '--stepper-base-radius': 'radii.l1', + '--stepper-radius': 'calc(var(--stepper-base-radius) + 1px)', + _icon: { + boxSize: '1em', + }, + _disabled: { + opacity: '0.5', + }, + _hover: { + bg: 'bg.muted', + }, + _active: { + bg: 'bg.emphasized', + }, + borderTopEndRadius: 'var(--stepper-radius)', + }, + decrementTrigger: { + display: 'flex', + justifyContent: 'center', + alignItems: 'center', + flex: '1', + userSelect: 'none', + cursor: 'button', + lineHeight: '1', + color: 'fg.muted', + '--stepper-base-radius': 'radii.l1', + '--stepper-radius': 'calc(var(--stepper-base-radius) + 1px)', + _icon: { + boxSize: '1em', + }, + _disabled: { + opacity: '0.5', + }, + _hover: { + bg: 'bg.muted', + }, + _active: { + bg: 'bg.emphasized', + }, + borderBottomEndRadius: 'var(--stepper-radius)', + }, + valueText: { + fontWeight: 'medium', + fontFeatureSettings: 'pnum', + fontVariantNumeric: 'proportional-nums', + }, + }, + variants: { + size: { + xs: { + input: { + textStyle: 'xs', + px: '2', + '--input-height': 'sizes.8', + }, + control: { + fontSize: '2xs', + '--stepper-width': 'sizes.4', + }, + }, + sm: { + input: { + textStyle: 'sm', + px: '2.5', + '--input-height': 'sizes.9', + }, + control: { + fontSize: 'xs', + '--stepper-width': 'sizes.5', + }, + }, + md: { + input: { + textStyle: 'sm', + px: '3', + '--input-height': 'sizes.10', + }, + control: { + fontSize: 'sm', + '--stepper-width': 'sizes.6', + }, + }, + lg: { + input: { + textStyle: 'md', + px: '4', + '--input-height': 'sizes.11', + }, + control: { + fontSize: 'sm', + '--stepper-width': 'sizes.6', + }, + }, + }, + variant: { + outline: { + input: { + bg: 'transparent', + borderWidth: '1px', + borderColor: 'border', + focusVisibleRing: 'inside', + }, + }, + subtle: { + input: { + borderWidth: '1px', + borderColor: 'transparent', + bg: 'bg.muted', + focusVisibleRing: 'inside', + }, + }, + flushed: { + input: { + bg: 'transparent', + borderBottomWidth: '1px', + borderBottomColor: 'border', + borderRadius: '0', + px: '0', + _focusVisible: { + borderColor: 'var(--focus-color)', + boxShadow: '0px 1px 0px 0px var(--focus-color)', + }, + }, + }, + }, + }, + defaultVariants: { + size: 'md', + variant: 'outline', + }, + }, + pinInput: { + className: 'chakra-pin-input', + slots: ['root', 'label', 'input', 'control'], + base: { + input: { + width: 'var(--input-height)', + minWidth: '0', + outline: '0', + position: 'relative', + appearance: 'none', + textAlign: 'center', + borderRadius: 'l2', + _disabled: { + layerStyle: 'disabled', + }, + height: 'var(--input-height)', + minW: 'var(--input-height)', + '--focus-color': 'colors.colorPalette.focusRing', + '--error-color': 'colors.border.error', + _invalid: { + focusRingColor: 'var(--error-color)', + borderColor: 'var(--error-color)', + }, + }, + }, + variants: { + size: { + '2xs': { + input: { + textStyle: 'xs', + px: '2', + '--input-height': 'sizes.7', + }, + }, + xs: { + input: { + textStyle: 'xs', + px: '2', + '--input-height': 'sizes.8', + }, + }, + sm: { + input: { + textStyle: 'sm', + px: '2.5', + '--input-height': 'sizes.9', + }, + }, + md: { + input: { + textStyle: 'sm', + px: '3', + '--input-height': 'sizes.10', + }, + }, + lg: { + input: { + textStyle: 'md', + px: '4', + '--input-height': 'sizes.11', + }, + }, + xl: { + input: { + textStyle: 'md', + px: '4.5', + '--input-height': 'sizes.12', + }, + }, + '2xl': { + input: { + textStyle: 'lg', + px: '5', + '--input-height': 'sizes.16', + }, + }, + }, + variant: { + outline: { + input: { + bg: 'transparent', + borderWidth: '1px', + borderColor: 'border', + focusVisibleRing: 'inside', + }, + }, + subtle: { + input: { + borderWidth: '1px', + borderColor: 'transparent', + bg: 'bg.muted', + focusVisibleRing: 'inside', + }, + }, + flushed: { + input: { + bg: 'transparent', + borderBottomWidth: '1px', + borderBottomColor: 'border', + borderRadius: '0', + px: '0', + _focusVisible: { + borderColor: 'var(--focus-color)', + boxShadow: '0px 1px 0px 0px var(--focus-color)', + }, + }, + }, + }, + }, + defaultVariants: { + size: 'md', + variant: 'outline', + }, + }, + popover: { + className: 'chakra-popover', + slots: [ + 'arrow', + 'arrowTip', + 'anchor', + 'trigger', + 'indicator', + 'positioner', + 'content', + 'title', + 'description', + 'closeTrigger', + 'header', + 'body', + 'footer', + ], + base: { + content: { + position: 'relative', + display: 'flex', + flexDirection: 'column', + textStyle: 'sm', + '--popover-bg': 'colors.bg.panel', + bg: 'var(--popover-bg)', + boxShadow: 'lg', + '--popover-size': 'sizes.xs', + '--popover-mobile-size': 'calc(100dvw - 1rem)', + width: { + base: 'min(var(--popover-mobile-size), var(--popover-size))', + sm: 'var(--popover-size)', + }, + borderRadius: 'l3', + '--popover-z-index': 'zIndex.popover', + zIndex: 'calc(var(--popover-z-index) + var(--layer-index, 0))', + outline: '0', + transformOrigin: 'var(--transform-origin)', + _open: { + animationStyle: 'scale-fade-in', + animationDuration: 'fast', + }, + _closed: { + animationStyle: 'scale-fade-out', + animationDuration: 'faster', + }, + }, + header: { + paddingInline: 'var(--popover-padding)', + paddingTop: 'var(--popover-padding)', + }, + body: { + padding: 'var(--popover-padding)', + flex: '1', + }, + footer: { + display: 'flex', + alignItems: 'center', + paddingInline: 'var(--popover-padding)', + paddingBottom: 'var(--popover-padding)', + }, + arrow: { + '--arrow-size': 'sizes.3', + '--arrow-background': 'var(--popover-bg)', + }, + arrowTip: { + borderTopWidth: '1px', + borderInlineStartWidth: '1px', + }, + }, + variants: { + size: { + xs: { + content: { + '--popover-padding': 'spacing.3', + }, + }, + sm: { + content: { + '--popover-padding': 'spacing.4', + }, + }, + md: { + content: { + '--popover-padding': 'spacing.5', + }, + }, + lg: { + content: { + '--popover-padding': 'spacing.6', + }, + }, + }, + }, + defaultVariants: { + size: 'md', + }, + }, + progress: { + slots: [ + 'root', + 'label', + 'track', + 'range', + 'valueText', + 'view', + 'circle', + 'circleTrack', + 'circleRange', + ], + className: 'chakra-progress', + base: { + root: { + textStyle: 'sm', + position: 'relative', + }, + track: { + overflow: 'hidden', + position: 'relative', + }, + range: { + display: 'flex', + alignItems: 'center', + justifyContent: 'center', + transitionProperty: 'width, height', + transitionDuration: 'slow', + height: '100%', + bgColor: 'var(--track-color)', + _indeterminate: { + '--animate-from-x': '-40%', + '--animate-to-x': '100%', + position: 'absolute', + willChange: 'left', + minWidth: '50%', + animation: 'position 1s ease infinite normal none running', + backgroundImage: + 'linear-gradient(to right, transparent 0%, var(--track-color) 50%, transparent 100%)', + }, + }, + label: { + display: 'inline-flex', + fontWeight: 'medium', + alignItems: 'center', + gap: '1', + }, + valueText: { + textStyle: 'xs', + lineHeight: '1', + fontWeight: 'medium', + }, + }, + variants: { + variant: { + outline: { + track: { + shadow: 'inset', + bgColor: 'bg.muted', + }, + range: { + bgColor: 'colorPalette.solid', + }, + }, + subtle: { + track: { + bgColor: 'colorPalette.muted', + }, + range: { + bgColor: 'colorPalette.solid/72', + }, + }, + }, + shape: { + square: {}, + rounded: { + track: { + borderRadius: 'l1', + }, + }, + full: { + track: { + borderRadius: 'full', + }, + }, + }, + striped: { + true: { + range: { + backgroundImage: + 'linear-gradient(45deg, var(--stripe-color) 25%, transparent 25%, transparent 50%, var(--stripe-color) 50%, var(--stripe-color) 75%, transparent 75%, transparent)', + backgroundSize: 'var(--stripe-size) var(--stripe-size)', + '--stripe-size': '1rem', + '--stripe-color': { + _light: 'rgba(255, 255, 255, 0.3)', + _dark: 'rgba(0, 0, 0, 0.3)', + }, + }, + }, + }, + animated: { + true: { + range: { + '--animate-from': 'var(--stripe-size)', + animation: 'bg-position 1s linear infinite', + }, + }, + }, + size: { + xs: { + track: { + h: '1.5', + }, + }, + sm: { + track: { + h: '2', + }, + }, + md: { + track: { + h: '2.5', + }, + }, + lg: { + track: { + h: '3', + }, + }, + xl: { + track: { + h: '4', + }, + }, + }, + }, + defaultVariants: { + variant: 'outline', + size: 'md', + shape: 'rounded', + }, + }, + progressCircle: { + className: 'chakra-progress-circle', + slots: [ + 'root', + 'label', + 'track', + 'range', + 'valueText', + 'view', + 'circle', + 'circleTrack', + 'circleRange', + ], + base: { + root: { + display: 'inline-flex', + textStyle: 'sm', + position: 'relative', + }, + circle: { + _indeterminate: { + animation: 'spin 2s linear infinite', + }, + }, + circleTrack: { + '--track-color': 'colors.colorPalette.muted', + stroke: 'var(--track-color)', + }, + circleRange: { + stroke: 'colorPalette.solid', + transitionProperty: 'stroke-dasharray', + transitionDuration: '0.6s', + _indeterminate: { + animation: 'circular-progress 1.5s linear infinite', + }, + }, + label: { + display: 'inline-flex', + }, + valueText: { + lineHeight: '1', + fontWeight: 'medium', + letterSpacing: 'tight', + fontVariantNumeric: 'tabular-nums', + }, + }, + variants: { + size: { + xs: { + circle: { + '--size': '24px', + '--thickness': '4px', + }, + valueText: { + textStyle: '2xs', + }, + }, + sm: { + circle: { + '--size': '32px', + '--thickness': '5px', + }, + valueText: { + textStyle: '2xs', + }, + }, + md: { + circle: { + '--size': '40px', + '--thickness': '6px', + }, + valueText: { + textStyle: 'xs', + }, + }, + lg: { + circle: { + '--size': '48px', + '--thickness': '7px', + }, + valueText: { + textStyle: 'sm', + }, + }, + xl: { + circle: { + '--size': '64px', + '--thickness': '8px', + }, + valueText: { + textStyle: 'sm', + }, + }, + }, + }, + defaultVariants: { + size: 'md', + }, + }, + radioCard: { + className: 'chakra-radio-card', + slots: [ + 'root', + 'label', + 'item', + 'itemText', + 'itemControl', + 'indicator', + 'itemAddon', + 'itemIndicator', + 'itemContent', + 'itemDescription', + ], + base: { + root: { + display: 'flex', + flexDirection: 'column', + gap: '1.5', + isolation: 'isolate', + }, + item: { + flex: '1', + display: 'flex', + flexDirection: 'column', + userSelect: 'none', + position: 'relative', + borderRadius: 'l2', + _focus: { + bg: 'colorPalette.muted/20', + }, + _disabled: { + opacity: '0.8', + borderColor: 'border.disabled', + }, + _checked: { + zIndex: '1', + }, + }, + label: { + display: 'inline-flex', + fontWeight: 'medium', + textStyle: 'sm', + _disabled: { + opacity: '0.5', + }, + }, + itemText: { + fontWeight: 'medium', + }, + itemDescription: { + opacity: '0.64', + textStyle: 'sm', + }, + itemControl: { + display: 'inline-flex', + flex: '1', + pos: 'relative', + rounded: 'inherit', + justifyContent: 'var(--radio-card-justify)', + alignItems: 'var(--radio-card-align)', + _disabled: { + bg: 'bg.muted', + }, + }, + itemIndicator: { + display: 'inline-flex', + alignItems: 'center', + justifyContent: 'center', + flexShrink: 0, + verticalAlign: 'top', + color: 'white', + borderWidth: '1px', + borderColor: 'transparent', + borderRadius: 'full', + cursor: 'radio', + _focusVisible: { + outline: '2px solid', + outlineColor: 'colorPalette.focusRing', + outlineOffset: '2px', + }, + _invalid: { + colorPalette: 'red', + borderColor: 'red.500', + }, + _disabled: { + opacity: '0.5', + cursor: 'disabled', + }, + '& .dot': { + height: '100%', + width: '100%', + borderRadius: 'full', + bg: 'currentColor', + scale: '0.4', + }, + }, + itemAddon: { + roundedBottom: 'inherit', + _disabled: { + color: 'fg.muted', + }, + }, + itemContent: { + display: 'flex', + flexDirection: 'column', + flex: '1', + gap: '1', + justifyContent: 'var(--radio-card-justify)', + alignItems: 'var(--radio-card-align)', + }, + }, + variants: { + size: { + sm: { + item: { + textStyle: 'sm', + }, + itemControl: { + padding: '3', + gap: '1.5', + }, + itemAddon: { + px: '3', + py: '1.5', + borderTopWidth: '1px', + }, + itemIndicator: { + boxSize: '4', + }, + }, + md: { + item: { + textStyle: 'sm', + }, + itemControl: { + padding: '4', + gap: '2.5', + }, + itemAddon: { + px: '4', + py: '2', + borderTopWidth: '1px', + }, + itemIndicator: { + boxSize: '5', + }, + }, + lg: { + item: { + textStyle: 'md', + }, + itemControl: { + padding: '4', + gap: '3.5', + }, + itemAddon: { + px: '4', + py: '2', + borderTopWidth: '1px', + }, + itemIndicator: { + boxSize: '6', + }, + }, + }, + variant: { + surface: { + item: { + borderWidth: '1px', + _checked: { + bg: 'colorPalette.subtle', + color: 'colorPalette.fg', + borderColor: 'colorPalette.muted', + }, + }, + itemIndicator: { + borderWidth: '1px', + borderColor: 'border', + _checked: { + bg: 'colorPalette.solid', + color: 'colorPalette.contrast', + borderColor: 'colorPalette.solid', + }, + }, + }, + subtle: { + item: { + bg: 'bg.muted', + }, + itemControl: { + _checked: { + bg: 'colorPalette.muted', + color: 'colorPalette.fg', + }, + }, + itemIndicator: { + borderWidth: '1px', + borderColor: 'inherit', + _checked: { + color: 'colorPalette.fg', + borderColor: 'colorPalette.solid', + }, + '& .dot': { + scale: '0.6', + }, + }, + }, + outline: { + item: { + borderWidth: '1px', + _checked: { + boxShadow: '0 0 0 1px var(--shadow-color)', + boxShadowColor: 'colorPalette.solid', + borderColor: 'colorPalette.solid', + }, + }, + itemIndicator: { + borderWidth: '1px', + borderColor: 'border', + _checked: { + bg: 'colorPalette.solid', + color: 'colorPalette.contrast', + borderColor: 'colorPalette.solid', + }, + }, + }, + solid: { + item: { + borderWidth: '1px', + _checked: { + bg: 'colorPalette.solid', + color: 'colorPalette.contrast', + borderColor: 'colorPalette.solid', + }, + }, + itemIndicator: { + bg: 'bg', + borderWidth: '1px', + borderColor: 'inherit', + _checked: { + color: 'colorPalette.solid', + borderColor: 'currentcolor', + }, + }, + }, + }, + justify: { + start: { + item: { + '--radio-card-justify': 'flex-start', + }, + }, + end: { + item: { + '--radio-card-justify': 'flex-end', + }, + }, + center: { + item: { + '--radio-card-justify': 'center', + }, + }, + }, + align: { + start: { + item: { + '--radio-card-align': 'flex-start', + }, + itemControl: { + textAlign: 'start', + }, + }, + end: { + item: { + '--radio-card-align': 'flex-end', + }, + itemControl: { + textAlign: 'end', + }, + }, + center: { + item: { + '--radio-card-align': 'center', + }, + itemControl: { + textAlign: 'center', + }, + }, + }, + orientation: { + vertical: { + itemControl: { + flexDirection: 'column', + }, + }, + horizontal: { + itemControl: { + flexDirection: 'row', + }, + }, + }, + }, + defaultVariants: { + size: 'md', + variant: 'outline', + align: 'start', + orientation: 'horizontal', + }, + }, + radioGroup: { + className: 'chakra-radio-group', + slots: [ + 'root', + 'label', + 'item', + 'itemText', + 'itemControl', + 'indicator', + 'itemAddon', + 'itemIndicator', + ], + base: { + item: { + display: 'inline-flex', + alignItems: 'center', + position: 'relative', + fontWeight: 'medium', + _disabled: { + cursor: 'disabled', + }, + }, + itemControl: { + display: 'inline-flex', + alignItems: 'center', + justifyContent: 'center', + flexShrink: 0, + verticalAlign: 'top', + color: 'white', + borderWidth: '1px', + borderColor: 'transparent', + borderRadius: 'full', + cursor: 'radio', + _focusVisible: { + outline: '2px solid', + outlineColor: 'colorPalette.focusRing', + outlineOffset: '2px', + }, + _invalid: { + colorPalette: 'red', + borderColor: 'red.500', + }, + _disabled: { + opacity: '0.5', + cursor: 'disabled', + }, + '& .dot': { + height: '100%', + width: '100%', + borderRadius: 'full', + bg: 'currentColor', + scale: '0.4', + }, + }, + label: { + userSelect: 'none', + textStyle: 'sm', + _disabled: { + opacity: '0.5', + }, + }, + }, + variants: { + variant: { + outline: { + itemControl: { + borderWidth: '1px', + borderColor: 'inherit', + _checked: { + color: 'colorPalette.fg', + borderColor: 'colorPalette.solid', + }, + '& .dot': { + scale: '0.6', + }, + }, + }, + subtle: { + itemControl: { + borderWidth: '1px', + bg: 'colorPalette.muted', + borderColor: 'colorPalette.muted', + color: 'transparent', + _checked: { + color: 'colorPalette.fg', + }, + }, + }, + solid: { + itemControl: { + borderWidth: '1px', + borderColor: 'border', + _checked: { + bg: 'colorPalette.solid', + color: 'colorPalette.contrast', + borderColor: 'colorPalette.solid', + }, + }, + }, + }, + size: { + xs: { + item: { + textStyle: 'xs', + gap: '1.5', + }, + itemControl: { + boxSize: '3', + }, + }, + sm: { + item: { + textStyle: 'sm', + gap: '2', + }, + itemControl: { + boxSize: '4', + }, + }, + md: { + item: { + textStyle: 'sm', + gap: '2.5', + }, + itemControl: { + boxSize: '5', + }, + }, + lg: { + item: { + textStyle: 'md', + gap: '3', + }, + itemControl: { + boxSize: '6', + }, + }, + }, + }, + defaultVariants: { + size: 'md', + variant: 'solid', + }, + }, + ratingGroup: { + className: 'chakra-rating-group', + slots: ['root', 'label', 'item', 'control', 'itemIndicator'], + base: { + root: { + display: 'inline-flex', + }, + control: { + display: 'inline-flex', + alignItems: 'center', + }, + item: { + display: 'inline-flex', + alignItems: 'center', + justifyContent: 'center', + userSelect: 'none', + }, + itemIndicator: { + display: 'inline-flex', + alignItems: 'center', + justifyContent: 'center', + width: '1em', + height: '1em', + position: 'relative', + _icon: { + stroke: 'currentColor', + width: '100%', + height: '100%', + display: 'inline-block', + flexShrink: 0, + position: 'absolute', + left: 0, + top: 0, + }, + '& [data-bg]': { + color: 'bg.emphasized', + }, + '& [data-fg]': { + color: 'transparent', + }, + '&[data-highlighted]:not([data-half])': { + '& [data-fg]': { + color: 'colorPalette.solid', + }, + }, + '&[data-half]': { + '& [data-fg]': { + color: 'colorPalette.solid', + clipPath: 'inset(0 50% 0 0)', + }, + }, + }, + }, + variants: { + size: { + xs: { + item: { + textStyle: 'sm', + }, + }, + sm: { + item: { + textStyle: 'md', + }, + }, + md: { + item: { + textStyle: 'xl', + }, + }, + lg: { + item: { + textStyle: '2xl', + }, + }, + }, + }, + defaultVariants: { + size: 'md', + }, + }, + segmentGroup: { + className: 'chakra-segment-group', + slots: [ + 'root', + 'label', + 'item', + 'itemText', + 'itemControl', + 'indicator', + ], + base: { + root: { + '--segment-radius': 'radii.l2', + borderRadius: 'l2', + display: 'inline-flex', + boxShadow: 'inset', + minW: 'max-content', + textAlign: 'center', + position: 'relative', + isolation: 'isolate', + bg: 'bg.muted', + }, + item: { + display: 'flex', + alignItems: 'center', + userSelect: 'none', + fontSize: 'sm', + position: 'relative', + color: 'fg', + borderRadius: 'var(--segment-radius)', + _disabled: { + opacity: '0.5', + }, + '&:has(input:focus-visible)': { + focusRing: 'outside', + }, + _before: { + content: '""', + position: 'absolute', + insetInlineStart: 0, + insetBlock: '1.5', + bg: 'border', + width: '1px', + transition: 'opacity 0.2s', + }, + '& + &[data-state=checked], &[data-state=checked] + &, &:first-of-type': + { + _before: { + opacity: '0', + }, + }, + '&[data-state=checked][data-ssr]': { + shadow: 'sm', + bg: 'bg', + borderRadius: 'var(--segment-radius)', + }, + }, + indicator: { + shadow: 'sm', + pos: 'absolute', + bg: { + _light: 'bg', + _dark: 'bg.emphasized', + }, + width: 'var(--width)', + height: 'var(--height)', + top: 'var(--top)', + left: 'var(--left)', + zIndex: -1, + borderRadius: 'var(--segment-radius)', + }, + }, + variants: { + size: { + xs: { + root: { + height: '6', + }, + item: { + textStyle: 'xs', + px: '3', + gap: '1', + }, + }, + sm: { + root: { + height: '8', + }, + item: { + textStyle: 'sm', + px: '4', + gap: '2', + }, + }, + md: { + root: { + height: '10', + }, + item: { + textStyle: 'sm', + px: '4', + gap: '2', + }, + }, + lg: { + root: { + height: '10', + }, + item: { + textStyle: 'md', + px: '5', + gap: '3', + }, + }, + }, + }, + defaultVariants: { + size: 'md', + }, + }, + select: { + className: 'chakra-select', + slots: [ + 'label', + 'positioner', + 'trigger', + 'indicator', + 'clearTrigger', + 'item', + 'itemText', + 'itemIndicator', + 'itemGroup', + 'itemGroupLabel', + 'list', + 'content', + 'root', + 'control', + 'valueText', + 'indicatorGroup', + ], + base: { + root: { + display: 'flex', + flexDirection: 'column', + gap: '1.5', + width: 'full', + }, + trigger: { + display: 'flex', + alignItems: 'center', + justifyContent: 'space-between', + width: 'full', + minH: 'var(--select-trigger-height)', + px: 'var(--select-trigger-padding-x)', + borderRadius: 'l2', + userSelect: 'none', + textAlign: 'start', + focusVisibleRing: 'inside', + _placeholderShown: { + color: 'fg.muted', + }, + _disabled: { + layerStyle: 'disabled', + }, + _invalid: { + borderColor: 'border.error', + }, + }, + indicatorGroup: { + display: 'flex', + alignItems: 'center', + gap: '1', + pos: 'absolute', + right: '0', + top: '0', + bottom: '0', + px: 'var(--select-trigger-padding-x)', + pointerEvents: 'none', + }, + indicator: { + display: 'flex', + alignItems: 'center', + justifyContent: 'center', + color: { + base: 'fg.muted', + _disabled: 'fg.subtle', + _invalid: 'fg.error', + }, + }, + content: { + background: 'bg.panel', + display: 'flex', + flexDirection: 'column', + zIndex: 'dropdown', + borderRadius: 'l2', + outline: 0, + maxH: '96', + overflowY: 'auto', + boxShadow: 'md', + _open: { + animationStyle: 'slide-fade-in', + animationDuration: 'fast', + }, + _closed: { + animationStyle: 'slide-fade-out', + animationDuration: 'fastest', + }, + }, + item: { + position: 'relative', + userSelect: 'none', + display: 'flex', + alignItems: 'center', + gap: '2', + cursor: 'option', + justifyContent: 'space-between', + flex: '1', + textAlign: 'start', + borderRadius: 'l1', + _highlighted: { + bg: { + _light: 'bg.muted', + _dark: 'bg.emphasized', + }, + }, + _disabled: { + pointerEvents: 'none', + opacity: '0.5', + }, + _icon: { + width: '4', + height: '4', + }, + }, + control: { + pos: 'relative', + }, + itemText: { + flex: '1', + }, + itemGroup: { + _first: { + mt: '0', + }, + }, + itemGroupLabel: { + py: '1', + fontWeight: 'medium', + }, + label: { + fontWeight: 'medium', + userSelect: 'none', + textStyle: 'sm', + _disabled: { + layerStyle: 'disabled', + }, + }, + valueText: { + lineClamp: '1', + maxW: '80%', + }, + }, + variants: { + variant: { + outline: { + trigger: { + bg: 'transparent', + borderWidth: '1px', + borderColor: 'border', + _expanded: { + borderColor: 'border.emphasized', + }, + }, + }, + subtle: { + trigger: { + borderWidth: '1px', + borderColor: 'transparent', + bg: 'bg.muted', + }, + }, + }, + size: { + xs: { + root: { + '--select-trigger-height': 'sizes.8', + '--select-trigger-padding-x': 'spacing.2', + }, + content: { + p: '1', + gap: '1', + textStyle: 'xs', + }, + trigger: { + textStyle: 'xs', + gap: '1', + }, + item: { + py: '1', + px: '2', + }, + itemGroupLabel: { + py: '1', + px: '2', + }, + indicator: { + _icon: { + width: '3.5', + height: '3.5', + }, + }, + }, + sm: { + root: { + '--select-trigger-height': 'sizes.9', + '--select-trigger-padding-x': 'spacing.2.5', + }, + content: { + p: '1', + textStyle: 'sm', + }, + trigger: { + textStyle: 'sm', + gap: '1', + }, + indicator: { + _icon: { + width: '4', + height: '4', + }, + }, + item: { + py: '1', + px: '1.5', + }, + itemGroup: { + mt: '1', + }, + itemGroupLabel: { + py: '1', + px: '1.5', + }, + }, + md: { + root: { + '--select-trigger-height': 'sizes.10', + '--select-trigger-padding-x': 'spacing.3', + }, + content: { + p: '1', + textStyle: 'sm', + }, + itemGroup: { + mt: '1.5', + }, + item: { + py: '1.5', + px: '2', + }, + itemIndicator: { + display: 'flex', + alignItems: 'center', + justifyContent: 'center', + }, + itemGroupLabel: { + py: '1.5', + px: '2', + }, + trigger: { + textStyle: 'sm', + gap: '2', + }, + indicator: { + _icon: { + width: '4', + height: '4', + }, + }, + }, + lg: { + root: { + '--select-trigger-height': 'sizes.12', + '--select-trigger-padding-x': 'spacing.4', + }, + content: { + p: '1.5', + textStyle: 'md', + }, + itemGroup: { + mt: '2', + }, + item: { + py: '2', + px: '3', + }, + itemGroupLabel: { + py: '2', + px: '3', + }, + trigger: { + textStyle: 'md', + py: '3', + gap: '2', + }, + indicator: { + _icon: { + width: '5', + height: '5', + }, + }, + }, + }, + }, + defaultVariants: { + size: 'md', + variant: 'outline', + }, + }, + slider: { + className: 'chakra-slider', + slots: [ + 'root', + 'label', + 'thumb', + 'valueText', + 'track', + 'range', + 'control', + 'markerGroup', + 'marker', + 'draggingIndicator', + 'markerIndicator', + ], + base: { + root: { + display: 'flex', + flexDirection: 'column', + gap: '1', + textStyle: 'sm', + position: 'relative', + isolation: 'isolate', + touchAction: 'none', + }, + label: { + fontWeight: 'medium', + textStyle: 'sm', + }, + control: { + display: 'inline-flex', + alignItems: 'center', + position: 'relative', + }, + track: { + overflow: 'hidden', + borderRadius: 'full', + flex: '1', + }, + range: { + width: 'inherit', + height: 'inherit', + _disabled: { + bg: 'border.emphasized!', + }, + }, + markerGroup: { + position: 'absolute!', + zIndex: '1', + }, + marker: { + '--marker-bg': { + base: 'white', + _underValue: 'colors.bg', + }, + display: 'flex', + alignItems: 'center', + gap: 'calc(var(--slider-thumb-size) / 2)', + color: 'fg.muted', + textStyle: 'xs', + }, + markerIndicator: { + width: 'var(--slider-marker-size)', + height: 'var(--slider-marker-size)', + borderRadius: 'full', + bg: 'var(--marker-bg)', + }, + thumb: { + width: 'var(--slider-thumb-size)', + height: 'var(--slider-thumb-size)', + display: 'flex', + alignItems: 'center', + justifyContent: 'center', + outline: 0, + zIndex: '2', + borderRadius: 'full', + _focusVisible: { + ring: '2px', + ringColor: 'colorPalette.focusRing', + ringOffset: '2px', + ringOffsetColor: 'bg', + }, + }, + }, + variants: { + size: { + sm: { + root: { + '--slider-thumb-size': 'sizes.4', + '--slider-track-size': 'sizes.1.5', + '--slider-marker-center': '6px', + '--slider-marker-size': 'sizes.1', + '--slider-marker-inset': '3px', + }, + }, + md: { + root: { + '--slider-thumb-size': 'sizes.5', + '--slider-track-size': 'sizes.2', + '--slider-marker-center': '8px', + '--slider-marker-size': 'sizes.1', + '--slider-marker-inset': '4px', + }, + }, + lg: { + root: { + '--slider-thumb-size': 'sizes.6', + '--slider-track-size': 'sizes.2.5', + '--slider-marker-center': '9px', + '--slider-marker-size': 'sizes.1.5', + '--slider-marker-inset': '5px', + }, + }, + }, + variant: { + outline: { + track: { + shadow: 'inset', + bg: 'bg.emphasized/72', + }, + range: { + bg: 'colorPalette.solid', + }, + thumb: { + borderWidth: '2px', + borderColor: 'colorPalette.solid', + bg: 'bg', + _disabled: { + bg: 'border.emphasized', + borderColor: 'border.emphasized', + }, + }, + }, + solid: { + track: { + bg: 'colorPalette.subtle', + _disabled: { + bg: 'bg.muted', + }, + }, + range: { + bg: 'colorPalette.solid', + }, + thumb: { + bg: 'colorPalette.solid', + _disabled: { + bg: 'border.emphasized', + }, + }, + }, + }, + orientation: { + vertical: { + root: { + display: 'inline-flex', + }, + control: { + flexDirection: 'column', + height: '100%', + minWidth: 'var(--slider-thumb-size)', + '&[data-has-mark-label]': { + marginEnd: '4', + }, + }, + track: { + width: 'var(--slider-track-size)', + }, + thumb: { + left: '50%', + translate: '-50% 0', + }, + markerGroup: { + insetStart: 'var(--slider-marker-center)', + insetBlock: 'var(--slider-marker-inset)', + }, + marker: { + flexDirection: 'row', + }, + }, + horizontal: { + control: { + flexDirection: 'row', + width: '100%', + minHeight: 'var(--slider-thumb-size)', + '&[data-has-mark-label]': { + marginBottom: '4', + }, + }, + track: { + height: 'var(--slider-track-size)', + }, + thumb: { + top: '50%', + translate: '0 -50%', + }, + markerGroup: { + top: 'var(--slider-marker-center)', + insetInline: 'var(--slider-marker-inset)', + }, + marker: { + flexDirection: 'column', + }, + }, + }, + }, + defaultVariants: { + size: 'md', + variant: 'outline', + orientation: 'horizontal', + }, + }, + stat: { + className: 'chakra-stat', + slots: [ + 'root', + 'label', + 'helpText', + 'valueText', + 'valueUnit', + 'indicator', + ], + base: { + root: { + display: 'flex', + flexDirection: 'column', + gap: '1', + position: 'relative', + flex: '1', + }, + label: { + display: 'inline-flex', + gap: '1.5', + alignItems: 'center', + color: 'fg.muted', + textStyle: 'sm', + }, + helpText: { + color: 'fg.muted', + textStyle: 'xs', + }, + valueUnit: { + color: 'fg.muted', + textStyle: 'xs', + fontWeight: 'initial', + letterSpacing: 'initial', + }, + valueText: { + verticalAlign: 'baseline', + fontWeight: 'semibold', + letterSpacing: 'tight', + fontFeatureSettings: 'pnum', + fontVariantNumeric: 'proportional-nums', + display: 'inline-flex', + gap: '1', + }, + indicator: { + display: 'inline-flex', + alignItems: 'center', + justifyContent: 'center', + marginEnd: 1, + '& :where(svg)': { + w: '1em', + h: '1em', + }, + '&[data-type=up]': { + color: 'fg.success', + }, + '&[data-type=down]': { + color: 'fg.error', + }, + }, + }, + variants: { + size: { + sm: { + valueText: { + textStyle: 'xl', + }, + }, + md: { + valueText: { + textStyle: '2xl', + }, + }, + lg: { + valueText: { + textStyle: '3xl', + }, + }, + }, + }, + defaultVariants: { + size: 'md', + }, + }, + steps: { + className: 'chakra-steps', + slots: [ + 'root', + 'list', + 'item', + 'trigger', + 'indicator', + 'separator', + 'content', + 'title', + 'description', + 'nextTrigger', + 'prevTrigger', + 'progress', + ], + base: { + root: { + display: 'flex', + width: 'full', + }, + list: { + display: 'flex', + justifyContent: 'space-between', + '--steps-gutter': 'spacing.3', + '--steps-thickness': '2px', + }, + title: { + fontWeight: 'medium', + color: 'fg', + }, + description: { + color: 'fg.muted', + }, + separator: { + bg: 'border', + flex: '1', + }, + indicator: { + display: 'flex', + justifyContent: 'center', + alignItems: 'center', + flexShrink: '0', + borderRadius: 'full', + fontWeight: 'medium', + width: 'var(--steps-size)', + height: 'var(--steps-size)', + _icon: { + flexShrink: '0', + width: 'var(--steps-icon-size)', + height: 'var(--steps-icon-size)', + }, + }, + item: { + position: 'relative', + display: 'flex', + flex: '1 0 0', + '&:last-of-type': { + flex: 'initial', + '& [data-part=separator]': { + display: 'none', + }, + }, + }, + trigger: { + display: 'flex', + alignItems: 'center', + gap: '3', + textAlign: 'start', + focusVisibleRing: 'outside', + borderRadius: 'l2', + }, + content: { + focusVisibleRing: 'outside', + }, + }, + variants: { + orientation: { + vertical: { + root: { + flexDirection: 'row', + height: '100%', + }, + list: { + flexDirection: 'column', + alignItems: 'flex-start', + }, + separator: { + position: 'absolute', + width: 'var(--steps-thickness)', + height: '100%', + maxHeight: + 'calc(100% - var(--steps-size) - var(--steps-gutter) * 2)', + top: 'calc(var(--steps-size) + var(--steps-gutter))', + insetStart: 'calc(var(--steps-size) / 2 - 1px)', + }, + item: { + alignItems: 'flex-start', + }, + }, + horizontal: { + root: { + flexDirection: 'column', + width: '100%', + }, + list: { + flexDirection: 'row', + alignItems: 'center', + }, + separator: { + width: '100%', + height: 'var(--steps-thickness)', + marginX: 'var(--steps-gutter)', + }, + item: { + alignItems: 'center', + }, + }, + }, + variant: { + solid: { + indicator: { + _incomplete: { + borderWidth: 'var(--steps-thickness)', + }, + _current: { + bg: 'colorPalette.muted', + borderWidth: 'var(--steps-thickness)', + borderColor: 'colorPalette.solid', + color: 'colorPalette.fg', + }, + _complete: { + bg: 'colorPalette.solid', + borderColor: 'colorPalette.solid', + color: 'colorPalette.contrast', + }, + }, + separator: { + _complete: { + bg: 'colorPalette.solid', + }, + }, + }, + subtle: { + indicator: { + _incomplete: { + bg: 'bg.muted', + }, + _current: { + bg: 'colorPalette.muted', + color: 'colorPalette.fg', + }, + _complete: { + bg: 'colorPalette.emphasized', + color: 'colorPalette.fg', + }, + }, + separator: { + _complete: { + bg: 'colorPalette.emphasized', + }, + }, + }, + }, + size: { + xs: { + root: { + gap: '2.5', + }, + list: { + '--steps-size': 'sizes.6', + '--steps-icon-size': 'sizes.3.5', + textStyle: 'xs', + }, + title: { + textStyle: 'sm', + }, + }, + sm: { + root: { + gap: '3', + }, + list: { + '--steps-size': 'sizes.8', + '--steps-icon-size': 'sizes.4', + textStyle: 'xs', + }, + title: { + textStyle: 'sm', + }, + }, + md: { + root: { + gap: '4', + }, + list: { + '--steps-size': 'sizes.10', + '--steps-icon-size': 'sizes.4', + textStyle: 'sm', + }, + title: { + textStyle: 'sm', + }, + }, + lg: { + root: { + gap: '6', + }, + list: { + '--steps-size': 'sizes.11', + '--steps-icon-size': 'sizes.5', + textStyle: 'md', + }, + title: { + textStyle: 'md', + }, + }, + }, + }, + defaultVariants: { + size: 'md', + variant: 'solid', + orientation: 'horizontal', + }, + }, + switch: { + slots: ['root', 'label', 'control', 'thumb', 'indicator'], + className: 'chakra-switch', + base: { + root: { + display: 'inline-flex', + gap: '2.5', + alignItems: 'center', + position: 'relative', + verticalAlign: 'middle', + '--switch-diff': 'calc(var(--switch-width) - var(--switch-height))', + '--switch-x': { + base: 'var(--switch-diff)', + _rtl: 'calc(var(--switch-diff) * -1)', + }, + }, + label: { + lineHeight: '1', + userSelect: 'none', + fontSize: 'sm', + fontWeight: 'medium', + _disabled: { + opacity: '0.5', + }, + }, + indicator: { + position: 'absolute', + height: 'var(--switch-height)', + width: 'var(--switch-height)', + fontSize: 'var(--switch-indicator-font-size)', + fontWeight: 'medium', + flexShrink: 0, + userSelect: 'none', + display: 'grid', + placeContent: 'center', + transition: 'inset-inline-start 0.12s ease', + insetInlineStart: 'calc(var(--switch-x) - 2px)', + _checked: { + insetInlineStart: '2px', + }, + }, + control: { + display: 'inline-flex', + gap: '0.5rem', + flexShrink: 0, + justifyContent: 'flex-start', + cursor: 'switch', + borderRadius: 'full', + position: 'relative', + width: 'var(--switch-width)', + height: 'var(--switch-height)', + _disabled: { + opacity: '0.5', + cursor: 'not-allowed', + }, + _invalid: { + outline: '2px solid', + outlineColor: 'border.error', + outlineOffset: '2px', + }, + }, + thumb: { + display: 'flex', + alignItems: 'center', + justifyContent: 'center', + flexShrink: 0, + transitionProperty: 'translate', + transitionDuration: 'fast', + borderRadius: 'inherit', + _checked: { + translate: 'var(--switch-x) 0', + }, + }, + }, + variants: { + variant: { + solid: { + control: { + borderRadius: 'full', + bg: 'bg.emphasized', + focusVisibleRing: 'outside', + _checked: { + bg: 'colorPalette.solid', + }, + }, + thumb: { + bg: 'white', + width: 'var(--switch-height)', + height: 'var(--switch-height)', + scale: '0.8', + boxShadow: 'sm', + _checked: { + bg: 'colorPalette.contrast', + }, + }, + }, + raised: { + control: { + borderRadius: 'full', + height: 'calc(var(--switch-height) / 2)', + bg: 'bg.muted', + boxShadow: 'inset', + _checked: { + bg: 'colorPalette.solid/60', + }, + }, + thumb: { + width: 'var(--switch-height)', + height: 'var(--switch-height)', + position: 'relative', + top: 'calc(var(--switch-height) * -0.25)', + bg: 'white', + boxShadow: 'xs', + focusVisibleRing: 'outside', + _checked: { + bg: 'colorPalette.solid', + }, + }, + }, + }, + size: { + xs: { + root: { + '--switch-width': 'sizes.6', + '--switch-height': 'sizes.3', + '--switch-indicator-font-size': 'fontSizes.xs', + }, + }, + sm: { + root: { + '--switch-width': 'sizes.8', + '--switch-height': 'sizes.4', + '--switch-indicator-font-size': 'fontSizes.xs', + }, + }, + md: { + root: { + '--switch-width': 'sizes.10', + '--switch-height': 'sizes.5', + '--switch-indicator-font-size': 'fontSizes.sm', + }, + }, + lg: { + root: { + '--switch-width': 'sizes.12', + '--switch-height': 'sizes.6', + '--switch-indicator-font-size': 'fontSizes.md', + }, + }, + }, + }, + defaultVariants: { + variant: 'solid', + size: 'md', + }, + }, + table: { + className: 'chakra-table', + slots: [ + 'root', + 'header', + 'body', + 'row', + 'columnHeader', + 'cell', + 'footer', + 'caption', + ], + base: { + root: { + fontVariantNumeric: 'lining-nums tabular-nums', + borderCollapse: 'collapse', + width: 'full', + textAlign: 'start', + verticalAlign: 'top', + }, + row: { + _selected: { + bg: 'colorPalette.subtle', + }, + }, + cell: { + textAlign: 'start', + alignItems: 'center', + }, + columnHeader: { + fontWeight: 'medium', + textAlign: 'start', + color: 'fg', + }, + caption: { + fontWeight: 'medium', + textStyle: 'xs', + }, + footer: { + fontWeight: 'medium', + }, + }, + variants: { + interactive: { + true: { + body: { + '& tr': { + _hover: { + bg: 'colorPalette.subtle', + }, + }, + }, + }, + }, + stickyHeader: { + true: { + header: { + '& :where(tr)': { + top: 'var(--table-sticky-offset, 0)', + position: 'sticky', + zIndex: 1, + }, + }, + }, + }, + striped: { + true: { + row: { + '&:nth-of-type(odd) td': { + bg: 'bg.muted', + }, + }, + }, + }, + showColumnBorder: { + true: { + columnHeader: { + '&:not(:last-of-type)': { + borderInlineEndWidth: '1px', + }, + }, + cell: { + '&:not(:last-of-type)': { + borderInlineEndWidth: '1px', + }, + }, + }, + }, + variant: { + line: { + columnHeader: { + borderBottomWidth: '1px', + }, + cell: { + borderBottomWidth: '1px', + }, + row: { + bg: 'bg', + }, + }, + outline: { + root: { + boxShadow: '0 0 0 1px {colors.border}', + overflow: 'hidden', + }, + columnHeader: { + borderBottomWidth: '1px', + }, + header: { + bg: 'bg.muted', + }, + row: { + '&:not(:last-of-type)': { + borderBottomWidth: '1px', + }, + }, + footer: { + borderTopWidth: '1px', + }, + }, + }, + size: { + sm: { + root: { + textStyle: 'sm', + }, + columnHeader: { + px: '2', + py: '2', + }, + cell: { + px: '2', + py: '2', + }, + }, + md: { + root: { + textStyle: 'sm', + }, + columnHeader: { + px: '3', + py: '3', + }, + cell: { + px: '3', + py: '3', + }, + }, + lg: { + root: { + textStyle: 'md', + }, + columnHeader: { + px: '4', + py: '3', + }, + cell: { + px: '4', + py: '3', + }, + }, + }, + }, + defaultVariants: { + variant: 'line', + size: 'md', + }, + }, + tabs: { + slots: [ + 'root', + 'trigger', + 'list', + 'content', + 'contentGroup', + 'indicator', + ], + className: 'chakra-tabs', + base: { + root: { + '--tabs-trigger-radius': 'radii.l2', + position: 'relative', + _horizontal: { + display: 'block', + }, + _vertical: { + display: 'flex', + }, + }, + list: { + display: 'inline-flex', + position: 'relative', + isolation: 'isolate', + '--tabs-indicator-shadow': 'shadows.xs', + '--tabs-indicator-bg': 'colors.bg', + minH: 'var(--tabs-height)', + _horizontal: { + flexDirection: 'row', + }, + _vertical: { + flexDirection: 'column', + }, + }, + trigger: { + outline: '0', + minW: 'var(--tabs-height)', + height: 'var(--tabs-height)', + display: 'flex', + alignItems: 'center', + fontWeight: 'medium', + position: 'relative', + cursor: 'button', + gap: '2', + _focusVisible: { + zIndex: 1, + outline: '2px solid', + outlineColor: 'colorPalette.focusRing', + }, + _disabled: { + cursor: 'not-allowed', + opacity: 0.5, + }, + }, + content: { + focusVisibleRing: 'inside', + _horizontal: { + width: '100%', + pt: 'var(--tabs-content-padding)', + }, + _vertical: { + height: '100%', + ps: 'var(--tabs-content-padding)', + }, + }, + indicator: { + width: 'var(--width)', + height: 'var(--height)', + borderRadius: 'var(--tabs-indicator-radius)', + bg: 'var(--tabs-indicator-bg)', + shadow: 'var(--tabs-indicator-shadow)', + zIndex: -1, + }, + }, + variants: { + fitted: { + true: { + list: { + display: 'flex', + }, + trigger: { + flex: 1, + textAlign: 'center', + justifyContent: 'center', + }, + }, + }, + justify: { + start: { + list: { + justifyContent: 'flex-start', + }, + }, + center: { + list: { + justifyContent: 'center', + }, + }, + end: { + list: { + justifyContent: 'flex-end', + }, + }, + }, + size: { + sm: { + root: { + '--tabs-height': 'sizes.9', + '--tabs-content-padding': 'spacing.3', + }, + trigger: { + py: '1', + px: '3', + textStyle: 'sm', + }, + }, + md: { + root: { + '--tabs-height': 'sizes.10', + '--tabs-content-padding': 'spacing.4', + }, + trigger: { + py: '2', + px: '4', + textStyle: 'sm', + }, + }, + lg: { + root: { + '--tabs-height': 'sizes.11', + '--tabs-content-padding': 'spacing.4.5', + }, + trigger: { + py: '2', + px: '4.5', + textStyle: 'md', + }, + }, + }, + variant: { + line: { + list: { + display: 'flex', + borderColor: 'border', + _horizontal: { + borderBottomWidth: '1px', + }, + _vertical: { + borderEndWidth: '1px', + }, + }, + trigger: { + color: 'fg.muted', + _disabled: { + _active: { + bg: 'initial', + }, + }, + _selected: { + color: 'fg', + _horizontal: { + layerStyle: 'indicator.bottom', + '--indicator-offset-y': '-1px', + '--indicator-color': 'colors.colorPalette.solid', + }, + _vertical: { + layerStyle: 'indicator.end', + '--indicator-offset-x': '-1px', + }, + }, + }, + }, + subtle: { + trigger: { + borderRadius: 'var(--tabs-trigger-radius)', + color: 'fg.muted', + _selected: { + bg: 'colorPalette.subtle', + color: 'colorPalette.fg', + }, + }, + }, + enclosed: { + list: { + bg: 'bg.muted', + padding: '1', + borderRadius: 'l3', + minH: 'calc(var(--tabs-height) - 4px)', + }, + trigger: { + justifyContent: 'center', + color: 'fg.muted', + borderRadius: 'var(--tabs-trigger-radius)', + _selected: { + bg: 'bg', + color: 'colorPalette.fg', + shadow: 'xs', + }, + }, + }, + outline: { + list: { + '--line-thickness': '1px', + '--line-offset': 'calc(var(--line-thickness) * -1)', + borderColor: 'border', + display: 'flex', + _horizontal: { + _before: { + content: '""', + position: 'absolute', + bottom: '0px', + width: '100%', + borderBottomWidth: 'var(--line-thickness)', + borderBottomColor: 'border', + }, + }, + _vertical: { + _before: { + content: '""', + position: 'absolute', + insetInline: 'var(--line-offset)', + height: 'calc(100% - calc(var(--line-thickness) * 2))', + borderEndWidth: 'var(--line-thickness)', + borderEndColor: 'border', + }, + }, + }, + trigger: { + color: 'fg.muted', + borderWidth: '1px', + borderColor: 'transparent', + _selected: { + bg: 'currentBg', + color: 'colorPalette.fg', + }, + _horizontal: { + borderTopRadius: 'var(--tabs-trigger-radius)', + marginBottom: 'var(--line-offset)', + marginEnd: { + _notLast: 'var(--line-offset)', + }, + _selected: { + borderColor: 'border', + borderBottomColor: 'transparent', + }, + }, + _vertical: { + borderStartRadius: 'var(--tabs-trigger-radius)', + marginEnd: 'var(--line-offset)', + marginBottom: { + _notLast: 'var(--line-offset)', + }, + _selected: { + borderColor: 'border', + borderEndColor: 'transparent', + }, + }, + }, + }, + plain: { + trigger: { + color: 'fg.muted', + _selected: { + color: 'colorPalette.fg', + }, + borderRadius: 'var(--tabs-trigger-radius)', + '&[data-selected][data-ssr]': { + bg: 'var(--tabs-indicator-bg)', + shadow: 'var(--tabs-indicator-shadow)', + borderRadius: 'var(--tabs-indicator-radius)', + }, + }, + }, + }, + }, + defaultVariants: { + size: 'md', + variant: 'line', + }, + }, + tag: { + slots: ['root', 'label', 'closeTrigger', 'startElement', 'endElement'], + className: 'chakra-tag', + base: { + root: { + display: 'inline-flex', + alignItems: 'center', + verticalAlign: 'top', + maxWidth: '100%', + userSelect: 'none', + borderRadius: 'l2', + focusVisibleRing: 'outside', + }, + label: { + lineClamp: '1', + }, + closeTrigger: { + display: 'flex', + alignItems: 'center', + justifyContent: 'center', + outline: '0', + borderRadius: 'l1', + color: 'currentColor', + focusVisibleRing: 'inside', + focusRingWidth: '2px', + }, + startElement: { + flexShrink: 0, + boxSize: 'var(--tag-element-size)', + ms: 'var(--tag-element-offset)', + '&:has([data-scope=avatar])': { + boxSize: 'var(--tag-avatar-size)', + ms: 'calc(var(--tag-element-offset) * 1.5)', + }, + _icon: { + boxSize: '100%', + }, + }, + endElement: { + flexShrink: 0, + boxSize: 'var(--tag-element-size)', + me: 'var(--tag-element-offset)', + _icon: { + boxSize: '100%', + }, + '&:has(button)': { + ms: 'calc(var(--tag-element-offset) * -1)', + }, + }, + }, + variants: { + size: { + sm: { + root: { + px: '1.5', + minH: '4.5', + gap: '1', + '--tag-avatar-size': 'spacing.3', + '--tag-element-size': 'spacing.3', + '--tag-element-offset': '-2px', + }, + label: { + textStyle: 'xs', + }, + }, + md: { + root: { + px: '1.5', + minH: '5', + gap: '1', + '--tag-avatar-size': 'spacing.3.5', + '--tag-element-size': 'spacing.3.5', + '--tag-element-offset': '-2px', + }, + label: { + textStyle: 'xs', + }, + }, + lg: { + root: { + px: '2', + minH: '6', + gap: '1.5', + '--tag-avatar-size': 'spacing.4.5', + '--tag-element-size': 'spacing.4', + '--tag-element-offset': '-3px', + }, + label: { + textStyle: 'sm', + }, + }, + xl: { + root: { + px: '2.5', + minH: '8', + gap: '1.5', + '--tag-avatar-size': 'spacing.6', + '--tag-element-size': 'spacing.4.5', + '--tag-element-offset': '-4px', + }, + label: { + textStyle: 'sm', + }, + }, + }, + variant: { + subtle: { + root: { + bg: 'colorPalette.subtle', + color: 'colorPalette.fg', + }, + }, + solid: { + root: { + bg: 'colorPalette.solid', + color: 'colorPalette.contrast', + }, + }, + outline: { + root: { + color: 'colorPalette.fg', + shadow: 'inset 0 0 0px 1px var(--shadow-color)', + shadowColor: 'colorPalette.muted', + }, + }, + surface: { + root: { + bg: 'colorPalette.subtle', + color: 'colorPalette.fg', + shadow: 'inset 0 0 0px 1px var(--shadow-color)', + shadowColor: 'colorPalette.muted', + }, + }, + }, + }, + defaultVariants: { + size: 'md', + variant: 'surface', + }, + }, + toast: { + slots: [ + 'root', + 'title', + 'description', + 'indicator', + 'closeTrigger', + 'actionTrigger', + ], + className: 'chakra-toast', + base: { + root: { + width: 'full', + display: 'flex', + alignItems: 'flex-start', + position: 'relative', + gap: '3', + py: '4', + ps: '4', + pe: '6', + borderRadius: 'l2', + translate: 'var(--x) var(--y)', + scale: 'var(--scale)', + zIndex: 'var(--z-index)', + height: 'var(--height)', + opacity: 'var(--opacity)', + willChange: 'translate, opacity, scale', + transition: + 'translate 400ms, scale 400ms, opacity 400ms, height 400ms, box-shadow 200ms', + transitionTimingFunction: 'cubic-bezier(0.21, 1.02, 0.73, 1)', + _closed: { + transition: 'translate 400ms, scale 400ms, opacity 200ms', + transitionTimingFunction: 'cubic-bezier(0.06, 0.71, 0.55, 1)', + }, + bg: 'bg.panel', + color: 'fg', + boxShadow: 'xl', + '--toast-trigger-bg': 'colors.bg.muted', + '&[data-type=warning]': { + bg: 'orange.solid', + color: 'orange.contrast', + '--toast-trigger-bg': '{white/10}', + '--toast-border-color': '{white/40}', + }, + '&[data-type=success]': { + bg: 'green.solid', + color: 'green.contrast', + '--toast-trigger-bg': '{white/10}', + '--toast-border-color': '{white/40}', + }, + '&[data-type=error]': { + bg: 'red.solid', + color: 'red.contrast', + '--toast-trigger-bg': '{white/10}', + '--toast-border-color': '{white/40}', + }, + }, + title: { + fontWeight: 'medium', + textStyle: 'sm', + marginEnd: '2', + }, + description: { + display: 'inline', + textStyle: 'sm', + opacity: '0.8', + }, + indicator: { + flexShrink: '0', + boxSize: '5', + }, + actionTrigger: { + textStyle: 'sm', + fontWeight: 'medium', + height: '8', + px: '3', + borderRadius: 'l2', + alignSelf: 'center', + borderWidth: '1px', + borderColor: 'var(--toast-border-color, inherit)', + transition: 'background 200ms', + _hover: { + bg: 'var(--toast-trigger-bg)', + }, + }, + closeTrigger: { + position: 'absolute', + top: '1', + insetEnd: '1', + padding: '1', + display: 'inline-flex', + alignItems: 'center', + justifyContent: 'center', + color: '{currentColor/60}', + borderRadius: 'l2', + textStyle: 'md', + transition: 'background 200ms', + }, + }, + }, + tooltip: { + slots: ['trigger', 'arrow', 'arrowTip', 'positioner', 'content'], + className: 'chakra-tooltip', + base: { + content: { + '--tooltip-bg': 'colors.bg.inverted', + bg: 'var(--tooltip-bg)', + color: 'fg.inverted', + px: '2.5', + py: '1', + borderRadius: 'l2', + fontWeight: 'medium', + textStyle: 'xs', + boxShadow: 'md', + maxW: 'xs', + zIndex: 'tooltip', + transformOrigin: 'var(--transform-origin)', + _open: { + animationStyle: 'scale-fade-in', + animationDuration: 'fast', + }, + _closed: { + animationStyle: 'scale-fade-out', + animationDuration: 'fast', + }, + }, + arrow: { + '--arrow-size': 'sizes.2', + '--arrow-background': 'var(--tooltip-bg)', + }, + arrowTip: { + borderTopWidth: '1px', + borderInlineStartWidth: '1px', + borderColor: 'var(--tooltip-bg)', + }, + }, + }, + status: { + className: 'chakra-status', + slots: ['root', 'indicator'], + base: { + root: { + display: 'inline-flex', + alignItems: 'center', + gap: '2', + }, + indicator: { + width: '0.64em', + height: '0.64em', + flexShrink: 0, + borderRadius: 'full', + forcedColorAdjust: 'none', + bg: 'colorPalette.solid', + }, + }, + variants: { + size: { + sm: { + root: { + textStyle: 'xs', + }, + }, + md: { + root: { + textStyle: 'sm', + }, + }, + lg: { + root: { + textStyle: 'md', + }, + }, + }, + }, + defaultVariants: { + size: 'md', + }, + }, + timeline: { + slots: [ + 'root', + 'item', + 'content', + 'separator', + 'indicator', + 'connector', + 'title', + 'description', + ], + className: 'chakra-timeline', + base: { + root: { + display: 'flex', + flexDirection: 'column', + width: 'full', + '--timeline-thickness': '1px', + '--timeline-gutter': '4px', + }, + item: { + display: 'flex', + position: 'relative', + alignItems: 'flex-start', + flexShrink: 0, + gap: '4', + _last: { + '& :where(.chakra-timeline__separator)': { + display: 'none', + }, + }, + }, + separator: { + position: 'absolute', + borderStartWidth: 'var(--timeline-thickness)', + ms: 'calc(-1 * var(--timeline-thickness) / 2)', + insetInlineStart: 'calc(var(--timeline-indicator-size) / 2)', + insetBlock: '0', + borderColor: 'border', + }, + indicator: { + outline: '2px solid {colors.bg}', + position: 'relative', + flexShrink: '0', + boxSize: 'var(--timeline-indicator-size)', + fontSize: 'var(--timeline-font-size)', + display: 'flex', + alignItems: 'center', + justifyContent: 'center', + borderRadius: 'full', + fontWeight: 'medium', + }, + connector: { + alignSelf: 'stretch', + position: 'relative', + }, + content: { + pb: '6', + display: 'flex', + flexDirection: 'column', + width: 'full', + gap: '2', + }, + title: { + display: 'flex', + fontWeight: 'medium', + flexWrap: 'wrap', + gap: '1.5', + alignItems: 'center', + mt: 'var(--timeline-margin)', + }, + description: { + color: 'fg.muted', + textStyle: 'xs', + }, + }, + variants: { + variant: { + subtle: { + indicator: { + bg: 'colorPalette.muted', + }, + }, + solid: { + indicator: { + bg: 'colorPalette.solid', + color: 'colorPalette.contrast', + }, + }, + outline: { + indicator: { + bg: 'currentBg', + borderWidth: '1px', + borderColor: 'colorPalette.muted', + }, + }, + plain: {}, + }, + size: { + sm: { + root: { + '--timeline-indicator-size': 'sizes.4', + '--timeline-font-size': 'fontSizes.2xs', + }, + title: { + textStyle: 'xs', + }, + }, + md: { + root: { + '--timeline-indicator-size': 'sizes.5', + '--timeline-font-size': 'fontSizes.xs', + }, + title: { + textStyle: 'sm', + }, + }, + lg: { + root: { + '--timeline-indicator-size': 'sizes.6', + '--timeline-font-size': 'fontSizes.xs', + }, + title: { + mt: '0.5', + textStyle: 'sm', + }, + }, + xl: { + root: { + '--timeline-indicator-size': 'sizes.8', + '--timeline-font-size': 'fontSizes.sm', + }, + title: { + mt: '1.5', + textStyle: 'sm', + }, + }, + }, + }, + defaultVariants: { + size: 'md', + variant: 'solid', + }, + }, + colorPicker: { + className: 'colorPicker', + slots: [ + 'root', + 'label', + 'control', + 'trigger', + 'positioner', + 'content', + 'area', + 'areaThumb', + 'valueText', + 'areaBackground', + 'channelSlider', + 'channelSliderLabel', + 'channelSliderTrack', + 'channelSliderThumb', + 'channelSliderValueText', + 'channelInput', + 'transparencyGrid', + 'swatchGroup', + 'swatchTrigger', + 'swatchIndicator', + 'swatch', + 'eyeDropperTrigger', + 'formatTrigger', + 'formatSelect', + 'view', + ], + base: { + root: { + display: 'flex', + flexDirection: 'column', + gap: '1.5', + }, + label: { + color: 'fg', + fontWeight: 'medium', + textStyle: 'sm', + }, + valueText: { + textAlign: 'start', + }, + control: { + display: 'flex', + alignItems: 'center', + flexDirection: 'row', + gap: '2', + position: 'relative', + }, + swatchTrigger: { + display: 'flex', + alignItems: 'center', + justifyContent: 'center', + }, + trigger: { + display: 'flex', + alignItems: 'center', + justifyContent: 'center', + flexDirection: 'row', + flexShrink: '0', + gap: '2', + textStyle: 'sm', + minH: 'var(--input-height)', + minW: 'var(--input-height)', + px: '1', + rounded: 'l2', + _disabled: { + opacity: '0.5', + }, + '--focus-color': 'colors.colorPalette.focusRing', + '&:focus-visible': { + borderColor: 'var(--focus-color)', + outline: '1px solid var(--focus-color)', + }, + '&[data-fit-content]': { + '--input-height': 'unset', + px: '0', + border: '0', + }, + }, + content: { + display: 'flex', + flexDirection: 'column', + bg: 'bg.panel', + borderRadius: 'l3', + boxShadow: 'lg', + width: '64', + p: '4', + gap: '3', + zIndex: 'dropdown', + _open: { + animationStyle: 'slide-fade-in', + animationDuration: 'fast', + }, + _closed: { + animationStyle: 'slide-fade-out', + animationDuration: 'faster', + }, + }, + area: { + height: '180px', + borderRadius: 'l2', + overflow: 'hidden', + }, + areaThumb: { + borderRadius: 'full', + height: 'var(--thumb-size)', + width: 'var(--thumb-size)', + borderWidth: '2px', + borderColor: 'white', + shadow: 'sm', + focusVisibleRing: 'mixed', + focusRingColor: 'white', + }, + areaBackground: { + height: 'full', + }, + channelSlider: { + borderRadius: 'l2', + flex: '1', + }, + channelSliderTrack: { + height: 'var(--slider-height)', + borderRadius: 'inherit', + boxShadow: 'inset 0 0 0 1px rgba(0,0,0,0.1)', + }, + swatchGroup: { + display: 'flex', + flexDirection: 'row', + flexWrap: 'wrap', + gap: '2', + }, + swatch: { + boxSize: 'var(--swatch-size)', + shadow: 'inset 0 0 0 1px rgba(0, 0, 0, 0.1)', + '--checker-size': '8px', + '--checker-bg': 'colors.bg', + '--checker-fg': 'colors.bg.emphasized', + background: + 'linear-gradient(var(--color), var(--color)), repeating-conic-gradient(var(--checker-fg) 0%, var(--checker-fg) 25%, var(--checker-bg) 0%, var(--checker-bg) 50%) 0% 50% / var(--checker-size) var(--checker-size) !important', + display: 'inline-flex', + alignItems: 'center', + justifyContent: 'center', + flexShrink: '0', + borderRadius: 'l1', + }, + swatchIndicator: { + color: 'white', + rounded: 'full', + }, + channelSliderThumb: { + borderRadius: 'full', + height: 'var(--thumb-size)', + width: 'var(--thumb-size)', + borderWidth: '2px', + borderColor: 'white', + shadow: 'sm', + transform: 'translate(-50%, -50%)', + focusVisibleRing: 'outside', + focusRingOffset: '1px', + }, + channelInput: { + width: '100%', + minWidth: '0', + outline: '0', + position: 'relative', + appearance: 'none', + textAlign: 'start', + borderRadius: 'l2', + _disabled: { + layerStyle: 'disabled', + }, + height: 'var(--input-height)', + minW: 'var(--input-height)', + '--focus-color': 'colors.colorPalette.focusRing', + '--error-color': 'colors.border.error', + _invalid: { + focusRingColor: 'var(--error-color)', + borderColor: 'var(--error-color)', + }, + '&::-webkit-inner-spin-button, &::-webkit-outer-spin-button': { + WebkitAppearance: 'none', + margin: 0, + }, + }, + formatSelect: { + textStyle: 'xs', + textTransform: 'uppercase', + borderWidth: '1px', + minH: '6', + focusRing: 'inside', + rounded: 'l2', + }, + transparencyGrid: { + borderRadius: 'l2', + }, + view: { + display: 'flex', + flexDirection: 'column', + gap: '2', + }, + }, + variants: { + size: { + '2xs': { + channelInput: { + textStyle: 'xs', + px: '2', + '--input-height': 'sizes.7', + }, + swatch: { + '--swatch-size': 'sizes.4.5', + }, + trigger: { + '--input-height': 'sizes.7', + }, + area: { + '--thumb-size': 'sizes.3', + }, + channelSlider: { + '--slider-height': 'sizes.3', + '--thumb-size': 'sizes.3', + }, + }, + xs: { + channelInput: { + textStyle: 'xs', + px: '2', + '--input-height': 'sizes.8', + }, + swatch: { + '--swatch-size': 'sizes.5', + }, + trigger: { + '--input-height': 'sizes.8', + }, + area: { + '--thumb-size': 'sizes.3.5', + }, + channelSlider: { + '--slider-height': 'sizes.3.5', + '--thumb-size': 'sizes.3.5', + }, + }, + sm: { + channelInput: { + textStyle: 'sm', + px: '2.5', + '--input-height': 'sizes.9', + }, + swatch: { + '--swatch-size': 'sizes.6', + }, + trigger: { + '--input-height': 'sizes.9', + }, + area: { + '--thumb-size': 'sizes.3.5', + }, + channelSlider: { + '--slider-height': 'sizes.3.5', + '--thumb-size': 'sizes.3.5', + }, + }, + md: { + channelInput: { + textStyle: 'sm', + px: '3', + '--input-height': 'sizes.10', + }, + swatch: { + '--swatch-size': 'sizes.7', + }, + trigger: { + '--input-height': 'sizes.10', + }, + area: { + '--thumb-size': 'sizes.3.5', + }, + channelSlider: { + '--slider-height': 'sizes.3.5', + '--thumb-size': 'sizes.3.5', + }, + }, + lg: { + channelInput: { + textStyle: 'md', + px: '4', + '--input-height': 'sizes.11', + }, + swatch: { + '--swatch-size': 'sizes.7', + }, + trigger: { + '--input-height': 'sizes.11', + }, + area: { + '--thumb-size': 'sizes.3.5', + }, + channelSlider: { + '--slider-height': 'sizes.3.5', + '--thumb-size': 'sizes.3.5', + }, + }, + xl: { + channelInput: { + textStyle: 'md', + px: '4.5', + '--input-height': 'sizes.12', + }, + swatch: { + '--swatch-size': 'sizes.8', + }, + trigger: { + '--input-height': 'sizes.12', + }, + area: { + '--thumb-size': 'sizes.3.5', + }, + channelSlider: { + '--slider-height': 'sizes.3.5', + '--thumb-size': 'sizes.3.5', + }, + }, + '2xl': { + channelInput: { + textStyle: 'lg', + px: '5', + '--input-height': 'sizes.16', + }, + swatch: { + '--swatch-size': 'sizes.10', + }, + trigger: { + '--input-height': 'sizes.16', + }, + area: { + '--thumb-size': 'sizes.3.5', + }, + channelSlider: { + '--slider-height': 'sizes.3.5', + '--thumb-size': 'sizes.3.5', + }, + }, + }, + variant: { + outline: { + channelInput: { + bg: 'transparent', + borderWidth: '1px', + borderColor: 'border', + focusVisibleRing: 'inside', + }, + trigger: { + borderWidth: '1px', + }, + }, + subtle: { + channelInput: { + borderWidth: '1px', + borderColor: 'transparent', + bg: 'bg.muted', + focusVisibleRing: 'inside', + }, + trigger: { + borderWidth: '1px', + borderColor: 'transparent', + bg: 'bg.muted', + }, + }, + }, + }, + defaultVariants: { + size: 'md', + variant: 'outline', + }, + }, + qrCode: { + slots: ['root', 'frame', 'pattern', 'overlay', 'downloadTrigger'], + className: 'chakra-qr-code', + base: { + root: { + position: 'relative', + width: 'fit-content', + '--qr-code-overlay-size': 'calc(var(--qr-code-size) / 3)', + }, + frame: { + width: 'var(--qr-code-size)', + height: 'var(--qr-code-size)', + fill: 'currentColor', + }, + overlay: { + display: 'flex', + alignItems: 'center', + justifyContent: 'center', + width: 'var(--qr-code-overlay-size)', + height: 'var(--qr-code-overlay-size)', + padding: '1', + bg: 'bg', + rounded: 'l1', + }, + }, + variants: { + size: { + '2xs': { + root: { + '--qr-code-size': '40px', + }, + }, + xs: { + root: { + '--qr-code-size': '64px', + }, + }, + sm: { + root: { + '--qr-code-size': '80px', + }, + }, + md: { + root: { + '--qr-code-size': '120px', + }, + }, + lg: { + root: { + '--qr-code-size': '160px', + }, + }, + xl: { + root: { + '--qr-code-size': '200px', + }, + }, + '2xl': { + root: { + '--qr-code-size': '240px', + }, + }, + full: { + root: { + '--qr-code-size': '100%', + }, + }, + }, + }, + defaultVariants: { + size: 'md', + }, + }, + }, + textStyles: { + '2xs': { + value: { + fontSize: '2xs', + lineHeight: '0.75rem', + }, + }, + xs: { + value: { + fontSize: 'xs', + lineHeight: '1rem', + }, + }, + sm: { + value: { + fontSize: 'sm', + lineHeight: '1.25rem', + }, + }, + md: { + value: { + fontSize: 'md', + lineHeight: '1.5rem', + }, + }, + lg: { + value: { + fontSize: 'lg', + lineHeight: '1.75rem', + }, + }, + xl: { + value: { + fontSize: 'xl', + lineHeight: '1.875rem', + }, + }, + '2xl': { + value: { + fontSize: '2xl', + lineHeight: '2rem', + }, + }, + '3xl': { + value: { + fontSize: '3xl', + lineHeight: '2.375rem', + }, + }, + '4xl': { + value: { + fontSize: '4xl', + lineHeight: '2.75rem', + letterSpacing: '-0.025em', + }, + }, + '5xl': { + value: { + fontSize: '5xl', + lineHeight: '3.75rem', + letterSpacing: '-0.025em', + }, + }, + '6xl': { + value: { + fontSize: '6xl', + lineHeight: '4.5rem', + letterSpacing: '-0.025em', + }, + }, + '7xl': { + value: { + fontSize: '7xl', + lineHeight: '5.75rem', + letterSpacing: '-0.025em', + }, + }, + none: { + value: {}, + }, + }, + layerStyles: { + 'fill.muted': { + value: { + background: 'colorPalette.muted', + color: 'colorPalette.fg', + }, + }, + 'fill.subtle': { + value: { + background: 'colorPalette.subtle', + color: 'colorPalette.fg', + }, + }, + 'fill.surface': { + value: { + background: 'colorPalette.subtle', + color: 'colorPalette.fg', + boxShadow: '0 0 0px 1px var(--shadow-color)', + boxShadowColor: 'colorPalette.muted', + }, + }, + 'fill.solid': { + value: { + background: 'colorPalette.solid', + color: 'colorPalette.contrast', + }, + }, + 'outline.subtle': { + value: { + color: 'colorPalette.fg', + boxShadow: 'inset 0 0 0px 1px var(--shadow-color)', + boxShadowColor: 'colorPalette.subtle', + }, + }, + 'outline.solid': { + value: { + borderWidth: '1px', + borderColor: 'colorPalette.solid', + color: 'colorPalette.fg', + }, + }, + 'indicator.bottom': { + value: { + position: 'relative', + '--indicator-color-fallback': 'colors.colorPalette.solid', + _before: { + content: '""', + position: 'absolute', + bottom: 'var(--indicator-offset-y, 0)', + insetInline: 'var(--indicator-offset-x, 0)', + height: 'var(--indicator-thickness, 2px)', + background: + 'var(--indicator-color, var(--indicator-color-fallback))', + }, + }, + }, + 'indicator.top': { + value: { + position: 'relative', + '--indicator-color-fallback': 'colors.colorPalette.solid', + _before: { + content: '""', + position: 'absolute', + top: 'var(--indicator-offset-y, 0)', + insetInline: 'var(--indicator-offset-x, 0)', + height: 'var(--indicator-thickness, 2px)', + background: + 'var(--indicator-color, var(--indicator-color-fallback))', + }, + }, + }, + 'indicator.start': { + value: { + position: 'relative', + '--indicator-color-fallback': 'colors.colorPalette.solid', + _before: { + content: '""', + position: 'absolute', + insetInlineStart: 'var(--indicator-offset-x, 0)', + insetBlock: 'var(--indicator-offset-y, 0)', + width: 'var(--indicator-thickness, 2px)', + background: + 'var(--indicator-color, var(--indicator-color-fallback))', + }, + }, + }, + 'indicator.end': { + value: { + position: 'relative', + '--indicator-color-fallback': 'colors.colorPalette.solid', + _before: { + content: '""', + position: 'absolute', + insetInlineEnd: 'var(--indicator-offset-x, 0)', + insetBlock: 'var(--indicator-offset-y, 0)', + width: 'var(--indicator-thickness, 2px)', + background: + 'var(--indicator-color, var(--indicator-color-fallback))', + }, + }, + }, + disabled: { + value: { + opacity: '0.5', + cursor: 'not-allowed', + }, + }, + none: { + value: {}, + }, + }, + animationStyles: { + 'slide-fade-in': { + value: { + transformOrigin: 'var(--transform-origin)', + '&[data-placement^=top]': { + animationName: 'slide-from-bottom, fade-in', + }, + '&[data-placement^=bottom]': { + animationName: 'slide-from-top, fade-in', + }, + '&[data-placement^=left]': { + animationName: 'slide-from-right, fade-in', + }, + '&[data-placement^=right]': { + animationName: 'slide-from-left, fade-in', + }, + }, + }, + 'slide-fade-out': { + value: { + transformOrigin: 'var(--transform-origin)', + '&[data-placement^=top]': { + animationName: 'slide-to-bottom, fade-out', + }, + '&[data-placement^=bottom]': { + animationName: 'slide-to-top, fade-out', + }, + '&[data-placement^=left]': { + animationName: 'slide-to-right, fade-out', + }, + '&[data-placement^=right]': { + animationName: 'slide-to-left, fade-out', + }, + }, + }, + 'scale-fade-in': { + value: { + transformOrigin: 'var(--transform-origin)', + animationName: 'scale-in, fade-in', + }, + }, + 'scale-fade-out': { + value: { + transformOrigin: 'var(--transform-origin)', + animationName: 'scale-out, fade-out', + }, + }, + }, + }, +}; diff --git a/front/package.json b/front/package.json index 90acd32..b811c0a 100644 --- a/front/package.json +++ b/front/package.json @@ -29,11 +29,11 @@ "*.{ts,tsx,js,jsx,json}": "prettier --write" }, "dependencies": { - "react-speech-recognition": "4.0.0", + "react-speech-recognition": "4.0.1", "regenerator-runtime": "0.14.1", "@trivago/prettier-plugin-sort-imports": "5.2.2", - "@chakra-ui/cli": "3.16.0", - "@chakra-ui/react": "3.16.0", + "@chakra-ui/cli": "3.17.0", + "@chakra-ui/react": "3.17.0", "@emotion/react": "11.14.0", "allotment": "1.20.3", "css-mediaquery": "0.1.2", @@ -44,15 +44,15 @@ "react-dom": "19.1.0", "react-error-boundary": "5.0.0", "react-icons": "5.5.0", - "react-router-dom": "7.5.0", + "react-router-dom": "7.5.3", "react-select": "5.10.1", "react-use": "17.6.0", - "zod": "3.24.2", + "zod": "3.24.3", "zustand": "5.0.3" }, "devDependencies": { "@chakra-ui/styled-system": "^2.12.0", - "@playwright/test": "1.51.1", + "@playwright/test": "1.52.0", "@storybook/addon-actions": "8.6.12", "@storybook/addon-essentials": "8.6.12", "@storybook/addon-links": "8.6.12", @@ -65,29 +65,29 @@ "@testing-library/user-event": "14.6.1", "@trivago/prettier-plugin-sort-imports": "5.2.2", "@types/jest": "29.5.14", - "@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.24.0", + "@types/node": "22.15.3", + "@types/react": "19.1.2", + "@types/react-dom": "19.1.3", + "@typescript-eslint/eslint-plugin": "8.31.1", + "@typescript-eslint/parser": "8.31.1", + "@vitejs/plugin-react": "4.4.1", + "eslint": "9.25.1", "eslint-plugin-import": "2.31.0", "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.50.3", + "knip": "5.52.0", "lint-staged": "15.5.1", - "npm-check-updates": "^17.1.18", + "npm-check-updates": "^18.0.1", "prettier": "3.5.3", - "puppeteer": "24.6.1", + "puppeteer": "24.7.2", "react-is": "19.1.0", "storybook": "8.6.12", "ts-node": "10.9.2", "typescript": "5.8.3", - "vite": "6.2.6", - "vitest": "3.1.1" + "vite": "6.3.4", + "vitest": "3.1.2" } } diff --git a/front/pnpm-lock.yaml b/front/pnpm-lock.yaml index ac0b33e..28da307 100644 --- a/front/pnpm-lock.yaml +++ b/front/pnpm-lock.yaml @@ -9,14 +9,14 @@ importers: .: dependencies: '@chakra-ui/cli': - 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)) + specifier: 3.17.0 + version: 3.17.0(@chakra-ui/react@3.17.0(@emotion/react@11.14.0(@types/react@19.1.2)(react@19.1.0))(react-dom@19.1.0(react@19.1.0))(react@19.1.0)) '@chakra-ui/react': - specifier: 3.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) + specifier: 3.17.0 + version: 3.17.0(@emotion/react@11.14.0(@types/react@19.1.2)(react@19.1.0))(react-dom@19.1.0(react@19.1.0))(react@19.1.0) '@emotion/react': specifier: 11.14.0 - version: 11.14.0(@types/react@19.1.1)(react@19.1.0) + version: 11.14.0(@types/react@19.1.2)(react@19.1.0) '@trivago/prettier-plugin-sort-imports': specifier: 5.2.2 version: 5.2.2(prettier@3.5.3) @@ -48,14 +48,14 @@ importers: specifier: 5.5.0 version: 5.5.0(react@19.1.0) react-router-dom: - specifier: 7.5.0 - version: 7.5.0(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + specifier: 7.5.3 + version: 7.5.3(react-dom@19.1.0(react@19.1.0))(react@19.1.0) react-select: 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) + version: 5.10.1(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) react-speech-recognition: - specifier: 4.0.0 - version: 4.0.0(react@19.1.0) + specifier: 4.0.1 + version: 4.0.1(react@19.1.0) react-use: specifier: 17.6.0 version: 17.6.0(react-dom@19.1.0(react@19.1.0))(react@19.1.0) @@ -63,24 +63,24 @@ importers: specifier: 0.14.1 version: 0.14.1 zod: - specifier: 3.24.2 - version: 3.24.2 + specifier: 3.24.3 + version: 3.24.3 zustand: specifier: 5.0.3 - version: 5.0.3(@types/react@19.1.1)(react@19.1.0) + version: 5.0.3(@types/react@19.1.2)(react@19.1.0) devDependencies: '@chakra-ui/styled-system': specifier: ^2.12.0 version: 2.12.0(react@19.1.0) '@playwright/test': - specifier: 1.51.1 - version: 1.51.1 + specifier: 1.52.0 + version: 1.52.0 '@storybook/addon-actions': specifier: 8.6.12 version: 8.6.12(storybook@8.6.12(prettier@3.5.3)) '@storybook/addon-essentials': specifier: 8.6.12 - version: 8.6.12(@types/react@19.1.1)(storybook@8.6.12(prettier@3.5.3)) + version: 8.6.12(@types/react@19.1.2)(storybook@8.6.12(prettier@3.5.3)) '@storybook/addon-links': specifier: 8.6.12 version: 8.6.12(react@19.1.0)(storybook@8.6.12(prettier@3.5.3)) @@ -92,7 +92,7 @@ importers: 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.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.39.0)(yaml@2.7.0)) + version: 8.6.12(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(rollup@4.40.1)(storybook@8.6.12(prettier@3.5.3))(typescript@5.8.3)(vite@6.3.4(@types/node@22.15.3)(jiti@2.4.2)(terser@5.39.0)(yaml@2.7.0)) '@storybook/theming': specifier: 8.6.12 version: 8.6.12(storybook@8.6.12(prettier@3.5.3)) @@ -101,7 +101,7 @@ importers: version: 6.6.3 '@testing-library/react': specifier: 16.3.0 - version: 16.3.0(@testing-library/dom@10.4.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) + version: 16.3.0(@testing-library/dom@10.4.0)(@types/react-dom@19.1.3(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) '@testing-library/user-event': specifier: 14.6.1 version: 14.6.1(@testing-library/dom@10.4.0) @@ -109,59 +109,59 @@ importers: specifier: 29.5.14 version: 29.5.14 '@types/node': - specifier: 22.14.1 - version: 22.14.1 + specifier: 22.15.3 + version: 22.15.3 '@types/react': - specifier: 19.1.1 - version: 19.1.1 - '@types/react-dom': specifier: 19.1.2 - version: 19.1.2(@types/react@19.1.1) + version: 19.1.2 + '@types/react-dom': + specifier: 19.1.3 + version: 19.1.3(@types/react@19.1.2) '@typescript-eslint/eslint-plugin': - 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) + specifier: 8.31.1 + version: 8.31.1(@typescript-eslint/parser@8.31.1(eslint@9.25.1(jiti@2.4.2))(typescript@5.8.3))(eslint@9.25.1(jiti@2.4.2))(typescript@5.8.3) '@typescript-eslint/parser': - specifier: 8.30.0 - version: 8.30.0(eslint@9.24.0(jiti@2.4.2))(typescript@5.8.3) + specifier: 8.31.1 + version: 8.31.1(eslint@9.25.1(jiti@2.4.2))(typescript@5.8.3) '@vitejs/plugin-react': - specifier: 4.3.4 - version: 4.3.4(vite@6.2.6(@types/node@22.14.1)(jiti@2.4.2)(terser@5.39.0)(yaml@2.7.0)) + specifier: 4.4.1 + version: 4.4.1(vite@6.3.4(@types/node@22.15.3)(jiti@2.4.2)(terser@5.39.0)(yaml@2.7.0)) eslint: - specifier: 9.24.0 - version: 9.24.0(jiti@2.4.2) + specifier: 9.25.1 + version: 9.25.1(jiti@2.4.2) eslint-plugin-import: specifier: 2.31.0 - 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)) + version: 2.31.0(@typescript-eslint/parser@8.31.1(eslint@9.25.1(jiti@2.4.2))(typescript@5.8.3))(eslint@9.25.1(jiti@2.4.2)) eslint-plugin-react: specifier: 7.37.5 - version: 7.37.5(eslint@9.24.0(jiti@2.4.2)) + version: 7.37.5(eslint@9.25.1(jiti@2.4.2)) eslint-plugin-react-hooks: specifier: 5.2.0 - version: 5.2.0(eslint@9.24.0(jiti@2.4.2)) + version: 5.2.0(eslint@9.25.1(jiti@2.4.2)) eslint-plugin-storybook: specifier: 0.12.0 - version: 0.12.0(eslint@9.24.0(jiti@2.4.2))(typescript@5.8.3) + version: 0.12.0(eslint@9.25.1(jiti@2.4.2))(typescript@5.8.3) jest: specifier: 29.7.0 - 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)) + version: 29.7.0(@types/node@22.15.3)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@types/node@22.15.3)(typescript@5.8.3)) jest-environment-jsdom: specifier: 29.7.0 version: 29.7.0 knip: - specifier: 5.50.3 - version: 5.50.3(@types/node@22.14.1)(typescript@5.8.3) + specifier: 5.52.0 + version: 5.52.0(@types/node@22.15.3)(typescript@5.8.3) lint-staged: specifier: 15.5.1 version: 15.5.1 npm-check-updates: - specifier: ^17.1.18 - version: 17.1.18 + specifier: ^18.0.1 + version: 18.0.1 prettier: specifier: 3.5.3 version: 3.5.3 puppeteer: - specifier: 24.6.1 - version: 24.6.1(typescript@5.8.3) + specifier: 24.7.2 + version: 24.7.2(typescript@5.8.3) react-is: specifier: 19.1.0 version: 19.1.0 @@ -170,16 +170,16 @@ importers: version: 8.6.12(prettier@3.5.3) ts-node: specifier: 10.9.2 - version: 10.9.2(@types/node@22.14.1)(typescript@5.8.3) + version: 10.9.2(@types/node@22.15.3)(typescript@5.8.3) typescript: specifier: 5.8.3 version: 5.8.3 vite: - specifier: 6.2.6 - version: 6.2.6(@types/node@22.14.1)(jiti@2.4.2)(terser@5.39.0)(yaml@2.7.0) + specifier: 6.3.4 + version: 6.3.4(@types/node@22.15.3)(jiti@2.4.2)(terser@5.39.0)(yaml@2.7.0) vitest: - 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.39.0)(yaml@2.7.0) + specifier: 3.1.2 + version: 3.1.2(@types/debug@4.1.12)(@types/node@22.15.3)(jiti@2.4.2)(jsdom@20.0.3)(terser@5.39.0)(yaml@2.7.0) packages: @@ -190,8 +190,8 @@ packages: resolution: {integrity: sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==} engines: {node: '>=6.0.0'} - '@ark-ui/react@5.5.0': - resolution: {integrity: sha512-zLERNKOrf77K0OMOLoo5+jZQn9uXxYck56gBzx/zhW2SjFe0M2lE6VyaIiwgKGIqbGre59gD9/tyTsqO6bqARQ==} + '@ark-ui/react@5.8.0': + resolution: {integrity: sha512-5KrB7YqJ1YXz5DNmu5LWoWp1JeqC/SPdXMRekvOopDdKqWARsfdSV+mZuTHq2UY5bCSv8GYZJEBhbQyk265Yxw==} peerDependencies: react: '>=18.0.0' react-dom: '>=18.0.0' @@ -200,32 +200,62 @@ packages: resolution: {integrity: sha512-RJlIHRueQgwWitWgF8OdFYGZX328Ax5BCemNGlqHfplnRT9ESi8JkFlvaVYbS+UubVY6dpv87Fs2u5M29iNFVQ==} engines: {node: '>=6.9.0'} + '@babel/code-frame@7.27.1': + resolution: {integrity: sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg==} + engines: {node: '>=6.9.0'} + '@babel/compat-data@7.26.8': resolution: {integrity: sha512-oH5UPLMWR3L2wEFLnFJ1TZXqHufiTKAiLfqw5zkhS4dKXLJ10yVztfil/twG8EDTA4F/tvVNw9nOl4ZMslB8rQ==} engines: {node: '>=6.9.0'} + '@babel/compat-data@7.27.1': + resolution: {integrity: sha512-Q+E+rd/yBzNQhXkG+zQnF58e4zoZfBedaxwzPmicKsiK3nt8iJYrSrDbjwFFDGC4f+rPafqRaPH6TsDoSvMf7A==} + engines: {node: '>=6.9.0'} + '@babel/core@7.26.8': resolution: {integrity: sha512-l+lkXCHS6tQEc5oUpK28xBOZ6+HwaH7YwoYQbLFiYb4nS2/l1tKnZEtEWkD0GuiYdvArf9qBS0XlQGXzPMsNqQ==} engines: {node: '>=6.9.0'} + '@babel/core@7.27.1': + resolution: {integrity: sha512-IaaGWsQqfsQWVLqMn9OB92MNN7zukfVA4s7KKAI0KfrrDsZ0yhi5uV4baBuLuN7n3vsZpwP8asPPcVwApxvjBQ==} + engines: {node: '>=6.9.0'} + '@babel/generator@7.26.8': resolution: {integrity: sha512-ef383X5++iZHWAXX0SXQR6ZyQhw/0KtTkrTz61WXRhFM6dhpHulO/RJz79L8S6ugZHJkOOkUrUdxgdF2YiPFnA==} engines: {node: '>=6.9.0'} + '@babel/generator@7.27.1': + resolution: {integrity: sha512-UnJfnIpc/+JO0/+KRVQNGU+y5taA5vCbwN8+azkX6beii/ZF+enZJSOKo11ZSzGJjlNfJHfQtmQT8H+9TXPG2w==} + engines: {node: '>=6.9.0'} + '@babel/helper-compilation-targets@7.26.5': resolution: {integrity: sha512-IXuyn5EkouFJscIDuFF5EsiSolseme1s0CZB+QxVugqJLYmKdxI1VfIBOst0SUu4rnk2Z7kqTwmoO1lp3HIfnA==} engines: {node: '>=6.9.0'} + '@babel/helper-compilation-targets@7.27.1': + resolution: {integrity: sha512-2YaDd/Rd9E598B5+WIc8wJPmWETiiJXFYVE60oX8FDohv7rAUU3CQj+A1MgeEmcsk2+dQuEjIe/GDvig0SqL4g==} + engines: {node: '>=6.9.0'} + '@babel/helper-module-imports@7.25.9': resolution: {integrity: sha512-tnUA4RsrmflIM6W6RFTLFSXITtl0wKjgpnLgXyowocVPrbYrLUXSBXDgTs8BlbmIzIdlBySRQjINYs2BAkiLtw==} engines: {node: '>=6.9.0'} + '@babel/helper-module-imports@7.27.1': + resolution: {integrity: sha512-0gSFWUPNXNopqtIPQvlD5WgXYI5GY2kP2cCvoT8kczjbfcfuIljTbcWrulD1CIPIX2gt1wghbDy08yE1p+/r3w==} + engines: {node: '>=6.9.0'} + '@babel/helper-module-transforms@7.26.0': resolution: {integrity: sha512-xO+xu6B5K2czEnQye6BHA7DolFFmS3LB7stHZFaOLb1pAwO1HWLS8fXA+eh0A2yIvltPVmx3eNNDBJA2SLHXFw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 + '@babel/helper-module-transforms@7.27.1': + resolution: {integrity: sha512-9yHn519/8KvTU5BjTVEEeIM3w9/2yXNKoD82JifINImhpKkARMJKPP59kLo+BafpdN5zgNeIcS4jsGDmd3l58g==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + '@babel/helper-plugin-utils@7.26.5': resolution: {integrity: sha512-RS+jZcRdZdRFzMyr+wcsaqOmld1/EqTghfaBGQQd/WnRdzdlvSZ//kF7U8VQTxf1ynZ4cjUcYgjVGx13ewNPMg==} engines: {node: '>=6.9.0'} @@ -234,23 +264,44 @@ packages: resolution: {integrity: sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA==} engines: {node: '>=6.9.0'} + '@babel/helper-string-parser@7.27.1': + resolution: {integrity: sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==} + engines: {node: '>=6.9.0'} + '@babel/helper-validator-identifier@7.25.9': resolution: {integrity: sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ==} engines: {node: '>=6.9.0'} + '@babel/helper-validator-identifier@7.27.1': + resolution: {integrity: sha512-D2hP9eA+Sqx1kBZgzxZh0y1trbuU+JoDkiEwqhQ36nodYqJwyEIhPSdMNd7lOm/4io72luTPWH20Yda0xOuUow==} + engines: {node: '>=6.9.0'} + '@babel/helper-validator-option@7.25.9': resolution: {integrity: sha512-e/zv1co8pp55dNdEcCynfj9X7nyUKUXoUEwfXqaZt0omVOmDe9oOTdKStH4GmAw6zxMFs50ZayuMfHDKlO7Tfw==} engines: {node: '>=6.9.0'} + '@babel/helper-validator-option@7.27.1': + resolution: {integrity: sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg==} + engines: {node: '>=6.9.0'} + '@babel/helpers@7.26.7': resolution: {integrity: sha512-8NHiL98vsi0mbPQmYAGWwfcFaOy4j2HY49fXJCfuDcdE7fMIsH9a7GdaeXpIBsbT7307WU8KCMp5pUVDNL4f9A==} engines: {node: '>=6.9.0'} + '@babel/helpers@7.27.1': + resolution: {integrity: sha512-FCvFTm0sWV8Fxhpp2McP5/W53GPllQ9QeQ7SiqGWjMf/LVG07lFa5+pgK05IRhVwtvafT22KF+ZSnM9I545CvQ==} + engines: {node: '>=6.9.0'} + '@babel/parser@7.26.8': resolution: {integrity: sha512-TZIQ25pkSoaKEYYaHbbxkfL36GNsQ6iFiBbeuzAkLnXayKR1yP1zFe+NxuZWWsUyvt8icPU9CCq0sgWGXR1GEw==} engines: {node: '>=6.0.0'} hasBin: true + '@babel/parser@7.27.1': + resolution: {integrity: sha512-I0dZ3ZpCrJ1c04OqlNsQcKiZlsrXf/kkE4FXzID9rIOYICsAbA8mMDzhW/luRNAHdCNt7os/u8wenklZDlUVUQ==} + engines: {node: '>=6.0.0'} + hasBin: true + '@babel/plugin-syntax-async-generators@7.8.4': resolution: {integrity: sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==} peerDependencies: @@ -362,25 +413,37 @@ packages: resolution: {integrity: sha512-iNKaX3ZebKIsCvJ+0jd6embf+Aulaa3vNBqZ41kM7iTWjx5qzWKXGHiJUW3+nTpQ18SG11hdF8OAzKrpXkb96Q==} engines: {node: '>=6.9.0'} + '@babel/template@7.27.1': + resolution: {integrity: sha512-Fyo3ghWMqkHHpHQCoBs2VnYjR4iWFFjguTDEqA5WgZDOrFesVjMhMM2FSqTKSoUSDO1VQtavj8NFpdRBEvJTtg==} + engines: {node: '>=6.9.0'} + '@babel/traverse@7.26.8': resolution: {integrity: sha512-nic9tRkjYH0oB2dzr/JoGIm+4Q6SuYeLEiIiZDwBscRMYFJ+tMAz98fuel9ZnbXViA2I0HVSSRRK8DW5fjXStA==} engines: {node: '>=6.9.0'} + '@babel/traverse@7.27.1': + resolution: {integrity: sha512-ZCYtZciz1IWJB4U61UPu4KEaqyfj+r5T1Q5mqPo+IBpcG9kHv30Z0aD8LXPgC1trYa6rK0orRyAhqUgk4MjmEg==} + engines: {node: '>=6.9.0'} + '@babel/types@7.26.8': resolution: {integrity: sha512-eUuWapzEGWFEpHFxgEaBG8e3n6S8L3MSu0oda755rOfabWPnh0Our1AozNFVUxGFIhbKgd1ksprsoDGMinTOTA==} engines: {node: '>=6.9.0'} + '@babel/types@7.27.1': + resolution: {integrity: sha512-+EzkxvLNfiUeKMgy/3luqfsCWFRXLb7U6wNQTk60tovuckwB15B191tJWvpp4HjiQWdJkCxO3Wbvc6jlk3Xb2Q==} + engines: {node: '>=6.9.0'} + '@bcoe/v8-coverage@0.2.3': resolution: {integrity: sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==} - '@chakra-ui/cli@3.16.0': - resolution: {integrity: sha512-hQVsWWhGzgUF+KZGquVqhxlSoq28Dlv5w6+UheAOS9rXow0UKBzlvD/utUfMQeUcTp6P0rE54epV5tSQT13hDw==} + '@chakra-ui/cli@3.17.0': + resolution: {integrity: sha512-930P5aUP9yDI/59amE4FyO4gnq3zqLAGHEg0BCtGRjB/DlfjOurz/RJMvMU853L9KVfdGt+i5OWeV2upq9mSkg==} hasBin: true peerDependencies: '@chakra-ui/react': '>=3.0.0-next.0' - '@chakra-ui/react@3.16.0': - resolution: {integrity: sha512-NZLGQgIPr/hLeyBoQyUqzaru+RGrs4Zy1kGpnBNGnL2UrCLZryHvax/pdfqId8cJjhWPGxokJUTVcTTMPnN3Gg==} + '@chakra-ui/react@3.17.0': + resolution: {integrity: sha512-b6syn8PTCAEqXQa52KtVFs2lAavFTldb2SkBbAqmrlWQyE58jTxpgxaEsYsqQxq/bljwC0xHsh5/ACU7Xwr6sA==} peerDependencies: '@emotion/react': '>=11' react: '>=18' @@ -612,28 +675,28 @@ packages: resolution: {integrity: sha512-fxlS1kkIjx8+vy2SjuCB94q3htSNrufYTXubwiBFeaQHbH6Ipi43gFJq2zCMt6PHhImH3Xmr0NksKDvchWlpQQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@eslint/config-helpers@0.2.0': - resolution: {integrity: sha512-yJLLmLexii32mGrhW29qvU3QBVTu0GUmEf/J4XsBtVhp4JkIUFN/BjWqTF63yRvGApIDpZm5fa97LtYtINmfeQ==} + '@eslint/config-helpers@0.2.2': + resolution: {integrity: sha512-+GPzk8PlG0sPpzdU5ZvIRMPidzAnZDl/s9L+y13iodqvb8leL53bTannOrQ/Im7UkpsmFU5Ily5U60LWixnmLg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@eslint/core@0.12.0': - resolution: {integrity: sha512-cmrR6pytBuSMTaBweKoGMwu3EiHiEC+DoyupPmlZ0HxBJBtIxwe+j/E4XPIKNx+Q74c8lXKPwYawBf5glsTkHg==} + '@eslint/core@0.13.0': + resolution: {integrity: sha512-yfkgDw1KR66rkT5A8ci4irzDysN7FRpq3ttJolR88OqQikAWqwA8j5VZyas+vjyBNFIJ7MfybJ9plMILI2UrCw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} '@eslint/eslintrc@3.3.1': resolution: {integrity: sha512-gtF186CXhIl1p4pJNGZw8Yc6RlshoePRvE0X91oPGb3vZ8pM3qOS9W9NGPat9LziaBV7XrJWGylNQXkGcnM3IQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@eslint/js@9.24.0': - resolution: {integrity: sha512-uIY/y3z0uvOGX8cp1C2fiC4+ZmBhp6yZWkojtHL1YEMnRt1Y63HB9TM17proGEmeG7HeUY+UP36F0aknKYTpYA==} + '@eslint/js@9.25.1': + resolution: {integrity: sha512-dEIwmjntEx8u3Uvv+kr3PDeeArL8Hw07H9kyYxCjnM9pBjfEhk6uLXSchxxzgiwtRhhzVzqmUSDFBOi1TuZ7qg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} '@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.7': - resolution: {integrity: sha512-JubJ5B2pJ4k4yGxaNLdbjrnk9d/iDz6/q8wOilpIowd6PJPgaxCuHBnBszq7Ce2TyMrywm5r4PnKm6V3iiZF+g==} + '@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.9': @@ -665,11 +728,11 @@ packages: resolution: {integrity: sha512-xeO57FpIu4p1Ri3Jq/EXq4ClRm86dVF2z/+kvFnyqVYRavTZmaFaUBbWCOuuTh0o/g7DSsk6kc2vrS4Vl5oPOQ==} engines: {node: '>=18.18'} - '@internationalized/date@3.7.0': - resolution: {integrity: sha512-VJ5WS3fcVx0bejE/YHfbDKR/yawZgKqn/if+oEeLqNwBtPzVB06olkfcnojTmEMX+gTpH+FlQ69SHNitJ8/erQ==} + '@internationalized/date@3.8.0': + resolution: {integrity: sha512-J51AJ0fEL68hE4CwGPa6E0PO6JDaVLd8aln48xFCSy7CZkZc96dGEGmLs2OEEbBxcsVZtfrqkXJwI2/MSG8yKw==} - '@internationalized/number@3.6.0': - resolution: {integrity: sha512-PtrRcJVy7nw++wn4W2OuePQQfTqDzfusSuY1QTtui4wa7r+rGVtR75pO8CyKvHvzyQYi3Q1uO5sY0AsB4e65Bw==} + '@internationalized/number@3.6.1': + resolution: {integrity: sha512-UVsb4bCwbL944E0SX50CHFtWEeZ2uB5VozZ5yDXJdq6iPZsZO5p+bjVMZh2GxHf4Bs/7xtDCcPwEa2NU9DaG/g==} '@isaacs/cliui@8.0.2': resolution: {integrity: sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==} @@ -803,20 +866,20 @@ packages: resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} engines: {node: '>= 8'} - '@pandacss/is-valid-prop@0.41.0': - resolution: {integrity: sha512-BE6h6CsJk14ugIRrsazJtN3fcg+KDFRat1Bs93YFKH6jd4DOb1yUyVvC70jKqPVvg70zEcV8acZ7VdcU5TLu+w==} + '@pandacss/is-valid-prop@0.53.6': + resolution: {integrity: sha512-TgWBQmz/5j/oAMjavqJAjQh1o+yxhYspKvepXPn4lFhAN3yBhilrw9HliAkvpUr0sB2CkJ2BYMpFXbAJYEocsA==} '@pkgjs/parseargs@0.11.0': resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==} engines: {node: '>=14'} - '@playwright/test@1.51.1': - resolution: {integrity: sha512-nM+kEaTSAoVlXmMPH10017vn3FSiFqr/bh4fKg9vmAdMfd9SDqRZNvPSiAHADc/itWak+qPvMPZQOPwCBW7k7Q==} + '@playwright/test@1.52.0': + resolution: {integrity: sha512-uh6W7sb55hl7D6vsAeA+V2p5JnlAqzhqFyF0VcJkKZXkgnFcVG9PziERRHQfPLfNGx1C292a4JqbWzhR8L4R1g==} engines: {node: '>=18'} hasBin: true - '@puppeteer/browsers@2.10.0': - resolution: {integrity: sha512-HdHF4rny4JCvIcm7V1dpvpctIGqM3/Me255CB44vW7hDG1zYMmcBMjpNqZEDxdCfXGLkx5kP0+Jz5DUS+ukqtA==} + '@puppeteer/browsers@2.10.2': + resolution: {integrity: sha512-i4Ez+s9oRWQbNjtI/3+jxr7OH508mjAKvza0ekPJem0ZtmsYHP3B5dq62+IaBHKaGCOuqJxXzvFLUhJvQ6jtsQ==} engines: {node: '>=18'} hasBin: true @@ -829,98 +892,103 @@ packages: rollup: optional: true - '@rollup/rollup-android-arm-eabi@4.34.6': - resolution: {integrity: sha512-+GcCXtOQoWuC7hhX1P00LqjjIiS/iOouHXhMdiDSnq/1DGTox4SpUvO52Xm+div6+106r+TcvOeo/cxvyEyTgg==} + '@rollup/rollup-android-arm-eabi@4.40.1': + resolution: {integrity: sha512-kxz0YeeCrRUHz3zyqvd7n+TVRlNyTifBsmnmNPtk3hQURUyG9eAB+usz6DAwagMusjx/zb3AjvDUvhFGDAexGw==} cpu: [arm] os: [android] - '@rollup/rollup-android-arm64@4.34.6': - resolution: {integrity: sha512-E8+2qCIjciYUnCa1AiVF1BkRgqIGW9KzJeesQqVfyRITGQN+dFuoivO0hnro1DjT74wXLRZ7QF8MIbz+luGaJA==} + '@rollup/rollup-android-arm64@4.40.1': + resolution: {integrity: sha512-PPkxTOisoNC6TpnDKatjKkjRMsdaWIhyuMkA4UsBXT9WEZY4uHezBTjs6Vl4PbqQQeu6oION1w2voYZv9yquCw==} cpu: [arm64] os: [android] - '@rollup/rollup-darwin-arm64@4.34.6': - resolution: {integrity: sha512-z9Ib+OzqN3DZEjX7PDQMHEhtF+t6Mi2z/ueChQPLS/qUMKY7Ybn5A2ggFoKRNRh1q1T03YTQfBTQCJZiepESAg==} + '@rollup/rollup-darwin-arm64@4.40.1': + resolution: {integrity: sha512-VWXGISWFY18v/0JyNUy4A46KCFCb9NVsH+1100XP31lud+TzlezBbz24CYzbnA4x6w4hx+NYCXDfnvDVO6lcAA==} cpu: [arm64] os: [darwin] - '@rollup/rollup-darwin-x64@4.34.6': - resolution: {integrity: sha512-PShKVY4u0FDAR7jskyFIYVyHEPCPnIQY8s5OcXkdU8mz3Y7eXDJPdyM/ZWjkYdR2m0izD9HHWA8sGcXn+Qrsyg==} + '@rollup/rollup-darwin-x64@4.40.1': + resolution: {integrity: sha512-nIwkXafAI1/QCS7pxSpv/ZtFW6TXcNUEHAIA9EIyw5OzxJZQ1YDrX+CL6JAIQgZ33CInl1R6mHet9Y/UZTg2Bw==} cpu: [x64] os: [darwin] - '@rollup/rollup-freebsd-arm64@4.34.6': - resolution: {integrity: sha512-YSwyOqlDAdKqs0iKuqvRHLN4SrD2TiswfoLfvYXseKbL47ht1grQpq46MSiQAx6rQEN8o8URtpXARCpqabqxGQ==} + '@rollup/rollup-freebsd-arm64@4.40.1': + resolution: {integrity: sha512-BdrLJ2mHTrIYdaS2I99mriyJfGGenSaP+UwGi1kB9BLOCu9SR8ZpbkmmalKIALnRw24kM7qCN0IOm6L0S44iWw==} cpu: [arm64] os: [freebsd] - '@rollup/rollup-freebsd-x64@4.34.6': - resolution: {integrity: sha512-HEP4CgPAY1RxXwwL5sPFv6BBM3tVeLnshF03HMhJYCNc6kvSqBgTMmsEjb72RkZBAWIqiPUyF1JpEBv5XT9wKQ==} + '@rollup/rollup-freebsd-x64@4.40.1': + resolution: {integrity: sha512-VXeo/puqvCG8JBPNZXZf5Dqq7BzElNJzHRRw3vjBE27WujdzuOPecDPc/+1DcdcTptNBep3861jNq0mYkT8Z6Q==} cpu: [x64] os: [freebsd] - '@rollup/rollup-linux-arm-gnueabihf@4.34.6': - resolution: {integrity: sha512-88fSzjC5xeH9S2Vg3rPgXJULkHcLYMkh8faix8DX4h4TIAL65ekwuQMA/g2CXq8W+NJC43V6fUpYZNjaX3+IIg==} + '@rollup/rollup-linux-arm-gnueabihf@4.40.1': + resolution: {integrity: sha512-ehSKrewwsESPt1TgSE/na9nIhWCosfGSFqv7vwEtjyAqZcvbGIg4JAcV7ZEh2tfj/IlfBeZjgOXm35iOOjadcg==} cpu: [arm] os: [linux] - '@rollup/rollup-linux-arm-musleabihf@4.34.6': - resolution: {integrity: sha512-wM4ztnutBqYFyvNeR7Av+reWI/enK9tDOTKNF+6Kk2Q96k9bwhDDOlnCUNRPvromlVXo04riSliMBs/Z7RteEg==} + '@rollup/rollup-linux-arm-musleabihf@4.40.1': + resolution: {integrity: sha512-m39iO/aaurh5FVIu/F4/Zsl8xppd76S4qoID8E+dSRQvTyZTOI2gVk3T4oqzfq1PtcvOfAVlwLMK3KRQMaR8lg==} cpu: [arm] os: [linux] - '@rollup/rollup-linux-arm64-gnu@4.34.6': - resolution: {integrity: sha512-9RyprECbRa9zEjXLtvvshhw4CMrRa3K+0wcp3KME0zmBe1ILmvcVHnypZ/aIDXpRyfhSYSuN4EPdCCj5Du8FIA==} + '@rollup/rollup-linux-arm64-gnu@4.40.1': + resolution: {integrity: sha512-Y+GHnGaku4aVLSgrT0uWe2o2Rq8te9hi+MwqGF9r9ORgXhmHK5Q71N757u0F8yU1OIwUIFy6YiJtKjtyktk5hg==} cpu: [arm64] os: [linux] - '@rollup/rollup-linux-arm64-musl@4.34.6': - resolution: {integrity: sha512-qTmklhCTyaJSB05S+iSovfo++EwnIEZxHkzv5dep4qoszUMX5Ca4WM4zAVUMbfdviLgCSQOu5oU8YoGk1s6M9Q==} + '@rollup/rollup-linux-arm64-musl@4.40.1': + resolution: {integrity: sha512-jEwjn3jCA+tQGswK3aEWcD09/7M5wGwc6+flhva7dsQNRZZTe30vkalgIzV4tjkopsTS9Jd7Y1Bsj6a4lzz8gQ==} cpu: [arm64] os: [linux] - '@rollup/rollup-linux-loongarch64-gnu@4.34.6': - resolution: {integrity: sha512-4Qmkaps9yqmpjY5pvpkfOerYgKNUGzQpFxV6rnS7c/JfYbDSU0y6WpbbredB5cCpLFGJEqYX40WUmxMkwhWCjw==} + '@rollup/rollup-linux-loongarch64-gnu@4.40.1': + resolution: {integrity: sha512-ySyWikVhNzv+BV/IDCsrraOAZ3UaC8SZB67FZlqVwXwnFhPihOso9rPOxzZbjp81suB1O2Topw+6Ug3JNegejQ==} cpu: [loong64] os: [linux] - '@rollup/rollup-linux-powerpc64le-gnu@4.34.6': - resolution: {integrity: sha512-Zsrtux3PuaxuBTX/zHdLaFmcofWGzaWW1scwLU3ZbW/X+hSsFbz9wDIp6XvnT7pzYRl9MezWqEqKy7ssmDEnuQ==} + '@rollup/rollup-linux-powerpc64le-gnu@4.40.1': + resolution: {integrity: sha512-BvvA64QxZlh7WZWqDPPdt0GH4bznuL6uOO1pmgPnnv86rpUpc8ZxgZwcEgXvo02GRIZX1hQ0j0pAnhwkhwPqWg==} cpu: [ppc64] os: [linux] - '@rollup/rollup-linux-riscv64-gnu@4.34.6': - resolution: {integrity: sha512-aK+Zp+CRM55iPrlyKiU3/zyhgzWBxLVrw2mwiQSYJRobCURb781+XstzvA8Gkjg/hbdQFuDw44aUOxVQFycrAg==} + '@rollup/rollup-linux-riscv64-gnu@4.40.1': + resolution: {integrity: sha512-EQSP+8+1VuSulm9RKSMKitTav89fKbHymTf25n5+Yr6gAPZxYWpj3DzAsQqoaHAk9YX2lwEyAf9S4W8F4l3VBQ==} cpu: [riscv64] os: [linux] - '@rollup/rollup-linux-s390x-gnu@4.34.6': - resolution: {integrity: sha512-WoKLVrY9ogmaYPXwTH326+ErlCIgMmsoRSx6bO+l68YgJnlOXhygDYSZe/qbUJCSiCiZAQ+tKm88NcWuUXqOzw==} + '@rollup/rollup-linux-riscv64-musl@4.40.1': + resolution: {integrity: sha512-n/vQ4xRZXKuIpqukkMXZt9RWdl+2zgGNx7Uda8NtmLJ06NL8jiHxUawbwC+hdSq1rrw/9CghCpEONor+l1e2gA==} + cpu: [riscv64] + os: [linux] + + '@rollup/rollup-linux-s390x-gnu@4.40.1': + resolution: {integrity: sha512-h8d28xzYb98fMQKUz0w2fMc1XuGzLLjdyxVIbhbil4ELfk5/orZlSTpF/xdI9C8K0I8lCkq+1En2RJsawZekkg==} cpu: [s390x] os: [linux] - '@rollup/rollup-linux-x64-gnu@4.34.6': - resolution: {integrity: sha512-Sht4aFvmA4ToHd2vFzwMFaQCiYm2lDFho5rPcvPBT5pCdC+GwHG6CMch4GQfmWTQ1SwRKS0dhDYb54khSrjDWw==} + '@rollup/rollup-linux-x64-gnu@4.40.1': + resolution: {integrity: sha512-XiK5z70PEFEFqcNj3/zRSz/qX4bp4QIraTy9QjwJAb/Z8GM7kVUsD0Uk8maIPeTyPCP03ChdI+VVmJriKYbRHQ==} cpu: [x64] os: [linux] - '@rollup/rollup-linux-x64-musl@4.34.6': - resolution: {integrity: sha512-zmmpOQh8vXc2QITsnCiODCDGXFC8LMi64+/oPpPx5qz3pqv0s6x46ps4xoycfUiVZps5PFn1gksZzo4RGTKT+A==} + '@rollup/rollup-linux-x64-musl@4.40.1': + resolution: {integrity: sha512-2BRORitq5rQ4Da9blVovzNCMaUlyKrzMSvkVR0D4qPuOy/+pMCrh1d7o01RATwVy+6Fa1WBw+da7QPeLWU/1mQ==} cpu: [x64] os: [linux] - '@rollup/rollup-win32-arm64-msvc@4.34.6': - resolution: {integrity: sha512-3/q1qUsO/tLqGBaD4uXsB6coVGB3usxw3qyeVb59aArCgedSF66MPdgRStUd7vbZOsko/CgVaY5fo2vkvPLWiA==} + '@rollup/rollup-win32-arm64-msvc@4.40.1': + resolution: {integrity: sha512-b2bcNm9Kbde03H+q+Jjw9tSfhYkzrDUf2d5MAd1bOJuVplXvFhWz7tRtWvD8/ORZi7qSCy0idW6tf2HgxSXQSg==} cpu: [arm64] os: [win32] - '@rollup/rollup-win32-ia32-msvc@4.34.6': - resolution: {integrity: sha512-oLHxuyywc6efdKVTxvc0135zPrRdtYVjtVD5GUm55I3ODxhU/PwkQFD97z16Xzxa1Fz0AEe4W/2hzRtd+IfpOA==} + '@rollup/rollup-win32-ia32-msvc@4.40.1': + resolution: {integrity: sha512-DfcogW8N7Zg7llVEfpqWMZcaErKfsj9VvmfSyRjCyo4BI3wPEfrzTtJkZG6gKP/Z92wFm6rz2aDO7/JfiR/whA==} cpu: [ia32] os: [win32] - '@rollup/rollup-win32-x64-msvc@4.34.6': - resolution: {integrity: sha512-0PVwmgzZ8+TZ9oGBmdZoQVXflbvuwzN/HRclujpl4N/q3i+y0lqLw8n1bXA8ru3sApDjlmONaNAuYr38y1Kr9w==} + '@rollup/rollup-win32-x64-msvc@4.40.1': + resolution: {integrity: sha512-ECyOuDeH3C1I8jH2MK1RtBJW+YPMvSfT0a5NN0nHfQYnDSJ6tUiZH3gzwVP5/Kfh/+Tt7tpWVF9LXNTnhTJ3kA==} cpu: [x64] os: [win32] @@ -1188,9 +1256,6 @@ packages: '@types/cli-table@0.3.4': resolution: {integrity: sha512-GsALrTL69mlwbAw/MHF1IPTadSLZQnsxe7a80G8l4inN/iEXCOcVeT/S7aRc6hbhqzL9qZ314kHPDQnQ3ev+HA==} - '@types/cookie@0.6.0': - resolution: {integrity: sha512-4Kh9a6B2bQciAhf7FSuMRRkUWecJgJu9nPnx3yzpsfXX/c50REIqpHY4C82bXP90qrLtXtkDxTZosYO3UpOwlA==} - '@types/debug@4.1.12': resolution: {integrity: sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ==} @@ -1200,6 +1265,9 @@ packages: '@types/estree@1.0.6': resolution: {integrity: sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==} + '@types/estree@1.0.7': + resolution: {integrity: sha512-w28IoSUCJpidD/TGviZwwMJckNESJZXFu7NBZ5YJ4mEUnNraUn9Pm8HSZm/jDF1pDWYKspWE7oVphigUPRakIQ==} + '@types/gensync@1.0.4': resolution: {integrity: sha512-C3YYeRQWp2fmq9OryX+FoDy8nXS6scQ7dPptD8LnFDAUNcKWJjXQKDNJD3HVm+kOUsXhTOkpi69vI4EuAr95bA==} @@ -1245,14 +1313,14 @@ packages: '@types/ms@2.1.0': resolution: {integrity: sha512-GsCCIZDE/p3i96vtEqx+7dBUGXrc7zeSK3wwPHIaRThS+9OhWIXRqzs4d6k1SVU8g91DrNRWxWUGhp5KXQb2VA==} - '@types/node@22.14.1': - resolution: {integrity: sha512-u0HuPQwe/dHrItgHHpmw3N2fYCR6x4ivMNbPHRkBVP4CvN+kiRrKHWk3i8tXiO/joPwXLMYvF9TTF0eqgHIuOw==} + '@types/node@22.15.3': + resolution: {integrity: sha512-lX7HFZeHf4QG/J7tBZqrCAXwz9J5RD56Y6MpP0eJkka8p+K0RY/yBTW7CYFJ4VGCclxqOLKmiGP5juQc6MKgcw==} '@types/parse-json@4.0.2': resolution: {integrity: sha512-dISoDXWWQwUquiKsyZ4Ng+HX2KsPL7LyHKHQwgGFEA3IaKac4Obd+h2a/a6waisAoepJlBcx9paWqjA8/HVjCw==} - '@types/react-dom@19.1.2': - resolution: {integrity: sha512-XGJkWF41Qq305SKWEILa1O8vzhb3aOo3ogBlSmiqNko/WmRb6QIaweuZCXjKygVDXpzXb5wyxKTSOsmkuqj+Qw==} + '@types/react-dom@19.1.3': + resolution: {integrity: sha512-rJXC08OG0h3W6wDMFxQrZF00Kq6qQvw0djHRdzl3U5DnIERz0MRce3WVc7IS6JYBwtaP/DwYtRRjVlvivNveKg==} peerDependencies: '@types/react': ^19.0.0 @@ -1261,8 +1329,8 @@ packages: peerDependencies: '@types/react': '*' - '@types/react@19.1.1': - resolution: {integrity: sha512-ePapxDL7qrgqSF67s0h9m412d9DbXyC1n59O2st+9rjuuamWsZuD2w55rqY12CbzsZ7uVXb5Nw0gEp9Z8MMutQ==} + '@types/react@19.1.2': + resolution: {integrity: sha512-oxLPMytKchWGbnQM9O7D67uPa9paTNxO7jVoNMXgkkErULBPhPARCfkKL9ytcIJJRGjbsVwW4ugJzyFFvm/Tiw==} '@types/resolve@1.20.6': resolution: {integrity: sha512-A4STmOXPhMUtHH+S6ymgE2GiBSMqf4oTvcQZMcHzokuTLVYzXTB8ttjcgxOVaAp2lGwEdzZ0J+cRbbeevQj1UQ==} @@ -1288,16 +1356,16 @@ packages: '@types/yauzl@2.10.3': resolution: {integrity: sha512-oJoftv0LSuaDZE3Le4DbKX+KS9G36NzOeSap90UIK0yMA/NhKJhqlSGtNDORNRaIbQfzjXDrQa0ytJ6mNRGz/Q==} - '@typescript-eslint/eslint-plugin@8.30.0': - resolution: {integrity: sha512-3LOb8q0E1kazkeON2awh5oWnsn+KO9pPvzSWZNCYeXOZw81yXeq0WfOB22kVCHESHFgQST6LFmkISvjaE9V5kw==} + '@typescript-eslint/eslint-plugin@8.31.1': + resolution: {integrity: sha512-oUlH4h1ABavI4F0Xnl8/fOtML/eu8nI2A1nYd+f+55XI0BLu+RIqKoCiZKNo6DtqZBEQm5aNKA20G3Z5w3R6GQ==} 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.9.0' - '@typescript-eslint/parser@8.30.0': - resolution: {integrity: sha512-5w64ZeRCgWOA/2ADPoFYmDYdPnEeEkUiFx5Sez7MQpQuxVazHO9wwl+wElokaY5hMKVVor1N13z/tZeWYfVaUg==} + '@typescript-eslint/parser@8.31.1': + resolution: {integrity: sha512-oU/OtYVydhXnumd0BobL9rkJg7wFJ9bFFPmSmB/bf/XWN85hlViji59ko6bSKBXyseT9V8l+CN1nwmlbiN0G7Q==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 @@ -1307,12 +1375,12 @@ packages: resolution: {integrity: sha512-8oI9GwPMQmBryaaxG1tOZdxXVeMDte6NyJA4i7/TWa4fBwgnAXYlIQP+uYOeqAaLJ2JRxlG9CAyL+C+YE9Xknw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@typescript-eslint/scope-manager@8.30.0': - resolution: {integrity: sha512-TTkN0Sjk3SxpfW3lvSteOUxcTxnviQKsD1wgf+sk30Aj7UrHjVNFPTosir3+/3eaxpRMau4U/NY6PAw6cmj7hg==} + '@typescript-eslint/scope-manager@8.31.1': + resolution: {integrity: sha512-BMNLOElPxrtNQMIsFHE+3P0Yf1z0dJqV9zLdDxN/xLlWMlXK/ApEsVEKzpizg9oal8bAT5Sc7+ocal7AC1HCVw==} 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==} + '@typescript-eslint/type-utils@8.31.1': + resolution: {integrity: sha512-fNaT/m9n0+dpSp8G/iOQ05GoHYXbxw81x+yvr7TArTuZuCA6VVKbqWYVZrV5dVagpDTtj/O8k5HBEE/p/HM5LA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 @@ -1322,8 +1390,8 @@ packages: resolution: {integrity: sha512-/6cp9yL72yUHAYq9g6DsAU+vVfvQmd1a8KyA81uvfDE21O2DwQ/qxlM4AR8TSdAu+kJLBDrEHKC5/W2/nxsY0A==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@typescript-eslint/types@8.30.0': - resolution: {integrity: sha512-UQXFVF+8t4YhbU3nxabQL3/uyUEVw9kiVc+V0kZzblElC5MTvzvjJVhmrvI0xya1C1lqhIykWY7CeKioK9RMRw==} + '@typescript-eslint/types@8.31.1': + resolution: {integrity: sha512-SfepaEFUDQYRoA70DD9GtytljBePSj17qPxFHA/h3eg6lPTqGJ5mWOtbXCk1YrVU1cTJRd14nhaXWFu0l2troQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} '@typescript-eslint/typescript-estree@8.27.0': @@ -1332,8 +1400,8 @@ packages: peerDependencies: typescript: '>=4.8.4 <5.9.0' - '@typescript-eslint/typescript-estree@8.30.0': - resolution: {integrity: sha512-/5n4GS/8koPkRx0XBl9OCFf9N80u+0h05QBU/z5cDBCUXnPpDmSzQ2FXC7JGvU777GOzE6mUAOx2ABtswgzWgQ==} + '@typescript-eslint/typescript-estree@8.31.1': + resolution: {integrity: sha512-kaA0ueLe2v7KunYOyWYtlf/QhhZb7+qh4Yw6Ni5kgukMIG+iP773tjgBiLWIXYumWCwEq3nLW+TUywEp8uEeag==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: typescript: '>=4.8.4 <5.9.0' @@ -1345,8 +1413,8 @@ packages: eslint: ^8.57.0 || ^9.0.0 typescript: '>=4.8.4 <5.9.0' - '@typescript-eslint/utils@8.30.0': - resolution: {integrity: sha512-TmrXlhwFWpfUBhJE7NJSyru26XrU/foccGTOFvLGcci38/ZnKXgq2IUtAUqE9ILVNjM4Zm3TccGuvl2QANhjag==} + '@typescript-eslint/utils@8.31.1': + resolution: {integrity: sha512-2DSI4SNfF5T4oRveQ4nUrSjUqjMND0nLq9rEkz0gfGr3tg0S5KB6DhwR+WZPCjzkZl3cH+4x2ce3EsL50FubjQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 @@ -1356,8 +1424,8 @@ packages: resolution: {integrity: sha512-WsXQwMkILJvffP6z4U3FYJPlbf/j07HIxmDjZpbNvBJkMfvwXj5ACRkkHwBDvLBbDbtX5TdU64/rcvKJ/vuInQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@typescript-eslint/visitor-keys@8.30.0': - resolution: {integrity: sha512-oj82UQEi0fcYmpQpVISEOUM/icPNJiRh+E6svAtwNP58QpAQnnFigEoeGADm8H7t2bolxSb7+kRYzykbBdA47w==} + '@typescript-eslint/visitor-keys@8.31.1': + resolution: {integrity: sha512-I+/rgqOVBn6f0o7NDTmAPWWC6NuqhV174lfYvAm9fUaWeiefLdux9/YI3/nLugEn9L8fcSi0XmpKi/r5u0nmpw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} '@visulima/boxen@1.0.30': @@ -1365,17 +1433,17 @@ packages: engines: {node: '>=18.0.0 <=23.x'} os: [darwin, linux, win32] - '@vitejs/plugin-react@4.3.4': - resolution: {integrity: sha512-SCCPBJtYLdE8PX/7ZQAs1QAZ8Jqwih+0VBLum1EGqmCCQal+MIUqLCzj3ZUy8ufbC0cAM4LRlSTm7IQJwWT4ug==} + '@vitejs/plugin-react@4.4.1': + resolution: {integrity: sha512-IpEm5ZmeXAP/osiBXVVP5KjFMzbWOonMs0NaQQl+xYnUAcq4oHUBsF2+p4MgKWG4YMmFYJU8A6sxRPuowllm6w==} engines: {node: ^14.18.0 || >=16.0.0} peerDependencies: vite: ^4.2.0 || ^5.0.0 || ^6.0.0 - '@vitest/expect@3.1.1': - resolution: {integrity: sha512-q/zjrW9lgynctNbwvFtQkGK9+vvHA5UzVi2V8APrp1C6fG6/MuYYkmlx4FubuqLycCeSdHD5aadWfua/Vr0EUA==} + '@vitest/expect@3.1.2': + resolution: {integrity: sha512-O8hJgr+zREopCAqWl3uCVaOdqJwZ9qaDwUP7vy3Xigad0phZe9APxKhPcDNqYYi0rX5oMvwJMSCAXY2afqeTSA==} - '@vitest/mocker@3.1.1': - resolution: {integrity: sha512-bmpJJm7Y7i9BBELlLuuM1J1Q6EQ6K5Ye4wcyOpOMXMcePYKSIYlpcrCm4l/O6ja4VJA5G2aMJiuZkZdnxlC3SA==} + '@vitest/mocker@3.1.2': + resolution: {integrity: sha512-kOtd6K2lc7SQ0mBqYv/wdGedlqPdM/B38paPY+OwJ1XiNi44w3Fpog82UfOibmHaV9Wod18A09I9SCKLyDMqgw==} peerDependencies: msw: ^2.4.9 vite: ^5.0.0 || ^6.0.0 @@ -1385,233 +1453,230 @@ packages: vite: optional: true - '@vitest/pretty-format@3.1.1': - resolution: {integrity: sha512-dg0CIzNx+hMMYfNmSqJlLSXEmnNhMswcn3sXO7Tpldr0LiGmg3eXdLLhwkv2ZqgHb/d5xg5F7ezNFRA1fA13yA==} + '@vitest/pretty-format@3.1.2': + resolution: {integrity: sha512-R0xAiHuWeDjTSB3kQ3OQpT8Rx3yhdOAIm/JM4axXxnG7Q/fS8XUwggv/A4xzbQA+drYRjzkMnpYnOGAc4oeq8w==} - '@vitest/runner@3.1.1': - resolution: {integrity: sha512-X/d46qzJuEDO8ueyjtKfxffiXraPRfmYasoC4i5+mlLEJ10UvPb0XH5M9C3gWuxd7BAQhpK42cJgJtq53YnWVA==} + '@vitest/runner@3.1.2': + resolution: {integrity: sha512-bhLib9l4xb4sUMPXnThbnhX2Yi8OutBMA8Yahxa7yavQsFDtwY/jrUZwpKp2XH9DhRFJIeytlyGpXCqZ65nR+g==} - '@vitest/snapshot@3.1.1': - resolution: {integrity: sha512-bByMwaVWe/+1WDf9exFxWWgAixelSdiwo2p33tpqIlM14vW7PRV5ppayVXtfycqze4Qhtwag5sVhX400MLBOOw==} + '@vitest/snapshot@3.1.2': + resolution: {integrity: sha512-Q1qkpazSF/p4ApZg1vfZSQ5Yw6OCQxVMVrLjslbLFA1hMDrT2uxtqMaw8Tc/jy5DLka1sNs1Y7rBcftMiaSH/Q==} - '@vitest/spy@3.1.1': - resolution: {integrity: sha512-+EmrUOOXbKzLkTDwlsc/xrwOlPDXyVk3Z6P6K4oiCndxz7YLpp/0R0UsWVOKT0IXWjjBJuSMk6D27qipaupcvQ==} + '@vitest/spy@3.1.2': + resolution: {integrity: sha512-OEc5fSXMws6sHVe4kOFyDSj/+4MSwst0ib4un0DlcYgQvRuYQ0+M2HyqGaauUMnjq87tmUaMNDxKQx7wNfVqPA==} - '@vitest/utils@3.1.1': - resolution: {integrity: sha512-1XIjflyaU2k3HMArJ50bwSh3wKWPD6Q47wz/NUSmRV0zNywPc4w79ARjg/i/aNINHwA+mIALhUVqD9/aUvZNgg==} + '@vitest/utils@3.1.2': + resolution: {integrity: sha512-5GGd0ytZ7BH3H6JTj9Kw7Prn1Nbg0wZVrIvou+UWxm54d+WoXXgAgjFJ8wn3LdagWLFSEfpPeyYrByZaGEZHLg==} '@xobotyi/scrollbar-width@1.9.5': resolution: {integrity: sha512-N8tkAACJx2ww8vFMneJmaAgmjAG1tnVBZJRLRcx061tmsLRZHSEZSLuGWnwPtunsSLvSqXQ2wfp7Mgqg1I+2dQ==} - '@zag-js/accordion@1.8.2': - resolution: {integrity: sha512-JszESCOvftl3dG6lEPjZp2p3+0VN0fwMnW+1jhWwMEe5MZ0y0IrcXww2dxet1ln+w5ViRdOTeDR07idbDKYAYg==} + '@zag-js/accordion@1.12.0': + resolution: {integrity: sha512-9mZgGiyPPKOcNgCjHO67P0pN8tP8wORWc1IhQ9oWCWCtYvGNal8+3+ddooH/N8qW0ZSFURm9gZWbCX1any4Trg==} - '@zag-js/anatomy@1.8.2': - resolution: {integrity: sha512-F88Q+Bo1KOFZPHLffOqiuemkgZJbtspQuyOJcWb0bL7Lc1pYC4DIpIj26bcXT8xICDNcwR877hI0Wko//ZgTVA==} + '@zag-js/anatomy@1.12.0': + resolution: {integrity: sha512-BpnD2qh+shANl127hin9gfOmiHnUaL0whgbBGL6KMuurFg+WPtOBMTxAtbhSRa3524cu61GBkgETH4VAg1xS7w==} - '@zag-js/aria-hidden@1.8.2': - resolution: {integrity: sha512-/SV23qfCWMbGdsNZ2pgmVqOv6a4yd/2+FAIRy/6bjZ8axBzhm7NvfDhqjZciN4JuMch82uafeTBZ7pObk/fU1g==} + '@zag-js/angle-slider@1.12.0': + resolution: {integrity: sha512-PrxmA9EBr0aG0tq3gEYQvX0VlPxGH4tDTWK8ipO05z09wBdfFJIIYQbGCYp4VpZQqJT3QBpDsf43gJFJ5cq4Sw==} - '@zag-js/auto-resize@1.8.2': - resolution: {integrity: sha512-Z+94iR/vbPixiifjF+pmOa1UtuM5TTnJqM7D+Ol3WenRrm+Urp4JWAcyaf76NRVWK51KwMwWLljeA6J0H3V6gQ==} + '@zag-js/aria-hidden@1.12.0': + resolution: {integrity: sha512-YQkGo49bPzjMWTPbnuqGMDDemmppVk8w6QlF+Gygurp2gfeCQngj+2Oz6ZCzvSNIFXjRAL6i31O8BolfV/aLPg==} - '@zag-js/avatar@1.8.2': - resolution: {integrity: sha512-PWhYVvXyOt+kdi2Vd6GfqGQQruh1TNylw6TzNbhPt3B6Fj6uNvQqfEsh6yNErfnCeaa4b/Q+48rM4b/t3DzM0g==} + '@zag-js/auto-resize@1.12.0': + resolution: {integrity: sha512-9y7HCXp4cUcaHxVB5fgC94q6+/ZwsF8X/F3ZY34dSF06xZ4L8mjnp1lF75gzPJMbUGY+sKd0Excpxty8ecWrjg==} - '@zag-js/carousel@1.8.2': - resolution: {integrity: sha512-ViPcVQFQfw8ry3i4m2HYixTfN5Km979TWtMnDKdDM3csXLOQJvfCIHtZ/08wWn1302zaDMQe72+p9jDqzqntMg==} + '@zag-js/avatar@1.12.0': + resolution: {integrity: sha512-0e4ti7Be0p8KbZInkbrz45v/dd5w/OBN0rxeP2yOkHJRCUfPRqx/aE2wXL/66iAuh0RadgOYhgPVf1DjFSqWLw==} - '@zag-js/checkbox@1.8.2': - resolution: {integrity: sha512-KWVKo2Cofs9bjKf9QN9d9UJ6jQFuKfTPT4smDIqhXo4MIFa5eOd6yxvwbgvLvBlvvr9I6Amm9T4e9XxFbyrHdA==} + '@zag-js/carousel@1.12.0': + resolution: {integrity: sha512-E77u1wq472Mh+1dRC+iId5zq35LA10njL7jImO9Mi2Ia1LDrMwxfwsEUs+jh94W0MV1d+jpcJ7MCquQeZrurIg==} - '@zag-js/clipboard@1.8.2': - resolution: {integrity: sha512-KwyFxLDPkEwjiI6zxRKG1gQk1q+lL1HN6nvGCMKRxoDtYVaY9VRxQ6mVNg2VUIecM8uuhRnkM1WHGrSTUcaFcQ==} + '@zag-js/checkbox@1.12.0': + resolution: {integrity: sha512-tt7oWTR2YSk3DT7F49fhNL3AqUyxbl5Qk3qiiQbiRxTVKmbq3ATNW5cm2QifXEwIPbBaIiXdI/W69DJjcszqoQ==} - '@zag-js/collapsible@1.8.2': - resolution: {integrity: sha512-rtvR4WaMnjv0cW6f+wYqIKkRGhckqlY7nVYBUjGqIzlKq0VNzRgugS8qWpoqdupQJ9wyjusb/GXLOudqpdl1lw==} + '@zag-js/clipboard@1.12.0': + resolution: {integrity: sha512-6x14LF51633/vzL6q7SqQ9FSUFDpkB4JXaqFeP6BVgo4sMMgYimQIRaufJ6G1lXV3sof2bcJhNXPJWZkYn4wnQ==} - '@zag-js/collection@1.8.2': - resolution: {integrity: sha512-GQ6bMscyX3R5wXct6pIMFNd9vm/Ofux7bAwdavp1RrYu/iMKRg/tLbJIOYMQ9VXpjbiOB+6f2GVtHAM0eYLb6A==} + '@zag-js/collapsible@1.12.0': + resolution: {integrity: sha512-2jzKy2Dbbit66oRmhbacHKqPuE7xt37+YBE71sJWmj2To8NKWrwibF61vFbHVjaoAgZ0mhgXiAJYPMyPHXaWWg==} - '@zag-js/color-picker@1.8.2': - resolution: {integrity: sha512-WFuU5T99GPtqiD1MBZlurBjNMpHZQmbzaTgO6mdKQv3IKa2+I2jqXlnTnJbjTRmsF2DhAo45mEyGOvLwlTfTNA==} + '@zag-js/collection@1.12.0': + resolution: {integrity: sha512-gk/qRc5rUyjD6P/fxT2UHvpXWtjXflaM++J4DjAu4bPiBAzhz8zjBZRo6Yyiffm1+YNBIZKxFemb813P16iQNg==} - '@zag-js/color-utils@1.8.2': - resolution: {integrity: sha512-6oB+oxCSQoJu8sw1POQNzFLRN1wFDR5b+DSincqBR1QoKLr5K4iYmwJZ7UySvDF8uZATaShvB/qVVxniUpZ17w==} + '@zag-js/color-picker@1.12.0': + resolution: {integrity: sha512-nbmY0ljFLZFhfjAMJkYsfiJ3tk8ux0lzdF6v7kif/ZtPfFIchVkCXX5ESx5w71j7MpfzJN3PrQ0F/2wDCHHPtg==} - '@zag-js/combobox@1.8.2': - resolution: {integrity: sha512-jQo1cDtsUlBMPmBv/P7pUBHpxu19L+Pd5zXWOcdYXXMyFQg/KrW+PLS84G3yk2UCoH7ywKY25wFdMcOrqrTdUw==} + '@zag-js/color-utils@1.12.0': + resolution: {integrity: sha512-KZsR8gEStPC5X6A+eMS5ZLRWWcsHi5byGfF8UaNybFJ8VsB9MqrPw5xtcQm9zOkJQlWaeEFOMQuojl/hGGUIXQ==} - '@zag-js/core@1.8.2': - resolution: {integrity: sha512-vZDvvXuoxKnVXqBS6H6ZGbfxRWaQ9DStVS/a+tLdP0pz05NJwyJIPSWOOHZo9XPDiN4j1mRaTVcSvNpuOSEDTw==} + '@zag-js/combobox@1.12.0': + resolution: {integrity: sha512-a4eLrgdmsJ4Dc8Yob7SXm1PYVfqT2IAvwqX/3DpWCVisff57e9GlfLh9n/AgoH1SWNs2709nm56P2lQrVtK7uQ==} - '@zag-js/date-picker@1.8.2': - resolution: {integrity: sha512-SnZgQOxUajnuQUDIcq73Gxy+fifm3/F0H4tokE8LAbbkcf5kr/Pyin+2amhiXBkbDiUbeCttx34TlD4HXwmjyQ==} + '@zag-js/core@1.12.0': + resolution: {integrity: sha512-GIDXIgTDHQZCnzKEhi+VMEvcJBsloHQNSmBRxZFllPh7htYGijwK8CrDQSzQPrGW074aR2pzu/RhdyqCUGQJyQ==} + + '@zag-js/date-picker@1.12.0': + resolution: {integrity: sha512-qJoPGRH8yOs7OWLdsfINMbsMQW8Qh1FR0ixlyFkDJi3K5KUer2p2O91DmkJll4VdXIM1FJ8oBtbcDK1M55PtyQ==} peerDependencies: '@internationalized/date': '>=3.0.0' - '@zag-js/date-utils@1.8.2': - resolution: {integrity: sha512-KFMcZMb7xC7XypH1VDQIiYv4dpxB+1JEG2QX7zbYos+QKd41A8tNtaDnfJX+iePVsJV156gqiOrtogNvz4rJ8A==} + '@zag-js/date-utils@1.12.0': + resolution: {integrity: sha512-nalAtiVqabj9Ozlftj/Veq58dm6fcqUx2Ok3IofIdqxZJ6Q7Xdrk8vuba+5+lhipfemyVbjZQoQHwX6TBM5H0g==} peerDependencies: '@internationalized/date': '>=3.0.0' - '@zag-js/dialog@1.8.2': - resolution: {integrity: sha512-1XJIb0/YNBV5LgcRQ7ZwS/GvJiIy1e/iaZvYea6RRAInxcNH6KFon9U1Hm1Lfdz9GryCMs32WDhlFcYQoeGlKw==} + '@zag-js/dialog@1.12.0': + resolution: {integrity: sha512-l1HYpIR0Puz+L7i+Di4DWIJbeJamse5lFb3SNyYFMkZHT6zPn/ylQhcsmB13eFWnveVGoOp8+WT4XVRw6Ff1Tg==} - '@zag-js/dismissable@1.8.2': - resolution: {integrity: sha512-YGQB60pr/jbldJlt0LtToriJEMX8ds8uxienPModMgzEPo7yEDf30VMo4Ix8Sm38E6CJBOcm87vKHrrD8aEfnw==} + '@zag-js/dismissable@1.12.0': + resolution: {integrity: sha512-YXXzaCUPykfzDQUK5TTOShTioZbUh/tkZIA+uRUZK18qvEI8fmGrLaVHyD3Z0smtA0KWW2O5mC2v8lwq9DB3Lw==} - '@zag-js/dom-query@1.8.1': - resolution: {integrity: sha512-+2DYAW9riWnAAf7etTkaVqpaTHjYSHYGExJtBmZ6KurmYsc7Uw46mAcIImakZhrg69AI0cpL4b2YJHMQz8GGZA==} + '@zag-js/dom-query@1.12.0': + resolution: {integrity: sha512-3fw4+kyFn+K+ESBSG7uhvxgOAJcB+WLYsMrktgK4SUC1ukq3wDKF4oAP+uhXA6OYdVw2T5ZwLU0aY37q94hC2A==} - '@zag-js/dom-query@1.8.2': - resolution: {integrity: sha512-bn6Pxga19PJzpDb+Oh326kn1sgVfO97mxRzRFqzrKz9NuANGlCblmv2NTYmhfppqE1nt9QyLLhyQ2BLbzwouLg==} + '@zag-js/editable@1.12.0': + resolution: {integrity: sha512-6QJSDDCSWjCZuPyJ28ctqRvpFzRDt39a/s17SyywWdW+qLeFkXtdod21ZMXx2RGsrSnqYPVEQOD6sYJ4e+iEMQ==} - '@zag-js/editable@1.8.2': - resolution: {integrity: sha512-NFg5qp2IzE0nvDFf+UyFIIHGFBCyB5r74YIVBb0oJnVcIzrYa1+HA2ZrNMzTnjpZdx7B5lE/99VAsvk2Mb+GtA==} + '@zag-js/file-upload@1.12.0': + resolution: {integrity: sha512-5VOL/5sEfmZ2PpvZpB+j7dXgTWPgvJk4zo/JjX/UbQdL/NTOMWRfEZVaOZKgAb0Ngo9AvqI8GYWxoUAYLyupDg==} - '@zag-js/file-upload@1.8.2': - resolution: {integrity: sha512-b+xt9W5CqFG0NCB4F6C29FcFPlV0q5LC7m7mj7iMhk+dRkWPVhxr9o5SFPtjXLZlncFNgHfMkBU7Ktx5JY8CSA==} + '@zag-js/file-utils@1.12.0': + resolution: {integrity: sha512-1UGt+juPdyZT2Dzzj6qMvtzdX1tAp/weazlgV4+Vw2kvOn8jn1+l3z0FTmFyA1e2r0n7dvVyhCRq/qw6vGIe/Q==} - '@zag-js/file-utils@1.8.1': - resolution: {integrity: sha512-IdulHjOzPeZWNURY1rM/FbltdnXIOjUsOA7wWAped6oMMtDmWlrfpKtFs2emnXd04mZLnZN9yBO5WtHI7TTWeg==} + '@zag-js/floating-panel@1.12.0': + resolution: {integrity: sha512-9SGV5/OfEU6t4pEVoCbyHr95pH47fYfA4ZWecDJ9I/bZ4Fft2bozAqyjIyoTnj+RPzvHKkqvC6tGmt0j/4DDSQ==} - '@zag-js/file-utils@1.8.2': - resolution: {integrity: sha512-VBn2PeVtfj4c4snVcvp9oVFFiOVwJQ1OvS44CXv2xl9u4hRnDVSHalNmdj5jOqspNmTy9xNCKQWPK73ef26msQ==} + '@zag-js/focus-trap@1.12.0': + resolution: {integrity: sha512-T8eNgWDFcSf/oyut0kG3zYji3CqH2GtnivpNSeDsiNdwJ2bHXgeC65HqUExESClBTJz0W74AatruPvFzEhxDxg==} - '@zag-js/focus-trap@1.8.2': - resolution: {integrity: sha512-GzKdicdiVjlOOsNzmmRAZVccs902PXnoyO+qkzXlIsr8+RPRgtPlZthIp6wtr4CJ2vLOMByvrEt7wCNSIoDzxA==} + '@zag-js/focus-visible@1.12.0': + resolution: {integrity: sha512-u+6k8fyQ12a0sZvSk02V7JY1OAsxWI6MhfW11OvSixMSHfd82YaWOG2HA/GIAcyaUEKKPqZUtAJZl0ZIZvJG7g==} - '@zag-js/focus-visible@1.8.2': - resolution: {integrity: sha512-YXkB4ClgEf/gTRGUrTDThvxfThpey41dDKcuQIPTA6F76ji4jLQiDYLnw4KDxLW8uLL21jZgctO5FFdIMoxJeg==} + '@zag-js/highlight-word@1.12.0': + resolution: {integrity: sha512-9VLG98hH34NDfubR1SkC5fMUzAYZqkw/4KeJbEzduC9qIrDe58fQkCPITsGKzTz7XncONxwqf+wgfIr0qlwESw==} - '@zag-js/highlight-word@1.8.2': - resolution: {integrity: sha512-yI65t4bFxTUkZbHuntRCdBPOEQdpO8G4nkoY8WznBetQ1LLhqOd+7KXelzq+Vot2RbXzop54xEBvgKeTQbGOgg==} + '@zag-js/hover-card@1.12.0': + resolution: {integrity: sha512-hkciHD3rgokvl0MNzUcEOyGcJ1SZtpe2G6rtH9k04pFFUm4nL7TljcFuFzBWESn1fBHcQrzXUl8AWhBcuXl/IA==} - '@zag-js/hover-card@1.8.2': - resolution: {integrity: sha512-GwYGsojbVpyhOCz+XUnEtxA9ZmUlnfPrnE71j/Gc2+oLtOFwvnhINtBTZPCUXO5ec95uG9QFwxc63x1upB/PIA==} + '@zag-js/i18n-utils@1.12.0': + resolution: {integrity: sha512-5g7fCeAB8x7mUhsiyfI+w6994HSziX39Wwx4wN+tR424quBNs/EaFALScOMQ0hZjq8VCWFk9DM6+TBNstNLMhw==} - '@zag-js/i18n-utils@1.8.1': - resolution: {integrity: sha512-Epj/VOsJppsHlo2YwGV718CsZEneH9OVZtD8LB7j/zGXjQr/LALErCQQVOJXlBO6Ky2G/ZE/vK4LyO5GIjkTKw==} + '@zag-js/interact-outside@1.12.0': + resolution: {integrity: sha512-lcYo84syK3eF0MYESpMBQsfxT4+uzbaA8izZ0HvIC3kSCXLAaDZNagxPcRoB2yaTvWrn3FUw3YmJHKBOW7Vs9w==} - '@zag-js/i18n-utils@1.8.2': - resolution: {integrity: sha512-Zhiw2U14kkYRPru/5nWYei0l0eiQOkTu2VDCc/mn9jd7+zDEIYNp3b1CvMQ3/ES21i1HH6uBuKKujuktH/f6Iw==} + '@zag-js/listbox@1.12.0': + resolution: {integrity: sha512-6z/FGF9zshiIOXeov4NpU4foaeKAKR8hfBo4M8RNwvPUBeqDHCfu+IJlab4mHPB2Rz+4N5rhap2krpqBk9OT5A==} - '@zag-js/interact-outside@1.8.2': - resolution: {integrity: sha512-7N0v/vdsJO5a7AjwWofZ99AP5/hzFfCShSgEfg4GpRk7gPOdFanm7U3Zy9LtVvM9gwRncqGwjo4yd6O5G7SCnA==} + '@zag-js/live-region@1.12.0': + resolution: {integrity: sha512-m9lJ3zDLYIV/MY72ZYc6x1Dm5bnUzhKwObKhuSlpDG+7OzN/Mub5se9SXHe5e4bJ879VcsZQ543/hguo0G1hng==} - '@zag-js/live-region@1.8.2': - resolution: {integrity: sha512-QkowjTQj9C6ZFSCB+E7QNU5yjWMA58cAR5TcWgdLLKAP+SJwaTdtptpyFq71VH+jT85sNvvBZVya1aWZrbGopg==} + '@zag-js/menu@1.12.0': + resolution: {integrity: sha512-ciKCeQ1heLGt4RcyhB5f9GQB7CE1rP9Zfwp5oHX9FC5rq4nyneI0qhXEYYklE0P9z7+Z6EAH8FyvLORj5j/SpA==} - '@zag-js/menu@1.8.2': - resolution: {integrity: sha512-kEz1FJ0kgkutN1XDpS27GAkk1T/v3fUctBHrj0Wvt7TvQfPyzudyjmj35UEP5e8AglJAoQt2Am93YPSQ2deJwg==} + '@zag-js/number-input@1.12.0': + resolution: {integrity: sha512-8CEdDRPU3v0z2mAO5kVlp4B3IwgLzdBv+1JwrA3nM1NFp5cSzcsPK1gULkwUh0rbMrA3s/dFolPBZHSfldbKEA==} - '@zag-js/number-input@1.8.2': - resolution: {integrity: sha512-oyxXI/FDDj40BMkkLHDu84me3TgLIZizQhMj51R3ZM5Qg5BucYbamQKDgcGbb2CI6BUPo+6jklO0QZmy8/2cTQ==} + '@zag-js/pagination@1.12.0': + resolution: {integrity: sha512-AoX/Ks2hOAXubZEqnNrgLgalb1+qgTMv9wnahXef7amhEn/L+4wq+p9Nzmk7SXzeqR/p1RweH2lJEnLdAbbP5Q==} - '@zag-js/pagination@1.8.2': - resolution: {integrity: sha512-+Ummfw6r0Ll4oFVRvoVhPSvox8y2vvIocjGip0e6ze8zaUuHgUYzNkcK7OalZ3pZkh9y0+9MlnqtsQwxZhMJPw==} + '@zag-js/pin-input@1.12.0': + resolution: {integrity: sha512-8291cewBFGtUwX1iAObmNUvnp5/31iAYuWIn87vejqG+fVNxPnV9bUYN0nKAXhQTEZo03N/90FxbX8chZSgWtA==} - '@zag-js/pin-input@1.8.2': - resolution: {integrity: sha512-TME6Maud8Z78ZxFru7WvBGf5EQAuMoPQfdTMpd8os24srtO+HwiFN1wbeBsV/6BmbOeA9gFuB4K8O8rqNn3uqg==} + '@zag-js/popover@1.12.0': + resolution: {integrity: sha512-Syp6E/op1g2g7y2ErqGaoMfM6Fln3N027UzxjIFdtNX0i83h04LMO7oyP3+0AcaqRtVuh1cCK0CCjEa7HuSGBA==} - '@zag-js/popover@1.8.2': - resolution: {integrity: sha512-c3uk6t5MG3xluf2LR1adOGnCsKchfRqzB7K9/fyBvWXBFyFiV5DWXdc2NpnzvB0Z5fQVJMrBiMnpvmzqbVovAA==} + '@zag-js/popper@1.12.0': + resolution: {integrity: sha512-YVdQHdYT32OtIeYmOBpdhhDoZa1aFQA5PrhSMAX9gtEnDIWg3m4bwdwC0Fs7G++zguHjgJ6ve1/QxTs6lHnC7Q==} - '@zag-js/popper@1.8.2': - resolution: {integrity: sha512-OfZS5KKQZsaENZG1SliM8/shtAKmKrprJuWpn3/kzcOAO/obNZfApld4oa1N5FoePLLTY96qVfdC5W9xygKRDQ==} + '@zag-js/presence@1.12.0': + resolution: {integrity: sha512-QZm7bf8Xy9D2Y5HqtaODzyL44+A62GuuUked6y1Z0RfJXwVkzjNFqCvqZb8Zf/UvKmReaofczkslL4xzyy/IFA==} - '@zag-js/presence@1.8.2': - resolution: {integrity: sha512-aT9PPQAY28HeAxiSeIhnOmlkI+tw0ippxtUWenxQ6B3yyU/ZOGVqc4f7eY418z65lF2yziYvUkZgOdWc6E4kZA==} + '@zag-js/progress@1.12.0': + resolution: {integrity: sha512-jHe11FZwt1cJj/4u4oTAFzR5AEqxJSXt9kO+Jg5yb48UdpZ7L9SL6Layju9fsT8l4yp8XpWZD/cI0kELbP7kvQ==} - '@zag-js/progress@1.8.2': - resolution: {integrity: sha512-QUzPe5Xj0zSexKJ1+JCmQnJ+pZ5EeRjMLWSn4cdeUJtzEuPosBLCzJtMzl+uZ/mTg2YVgPC7l6wV6nfMYrco/g==} + '@zag-js/qr-code@1.12.0': + resolution: {integrity: sha512-hk5HV5oPVDRyN1yUUshmcE8NPUC0hwT5Rmm1X4bDfYxu8qCAhTsxkpcdOgQoFE720OLFsadHbpWd4PzfUY3LvA==} - '@zag-js/qr-code@1.8.2': - resolution: {integrity: sha512-W47UwF5jBL3NraobAOC9aYFpMFiXhDzgZ6O3f4Zhd3eDx6BnUvebZ+GOfE71EmJ0fu43mF6o3ial8H4nxj2myQ==} + '@zag-js/radio-group@1.12.0': + resolution: {integrity: sha512-ByJq8PMAPmg7w4rWCZwqKJ06CDjY8mMzWbJb8YgOy1Aos/JUUUybVdgFpg1VLntN12plrnff5xzq/67LJawVrA==} - '@zag-js/radio-group@1.8.2': - resolution: {integrity: sha512-WY0QT4XkqgXD1N1VZG11gTnu7rGaPYizZIq/m1NS0ls6b/tTnwdlrPL2bgBzlJtyuuCeQJXh5pTypCiNoAZurg==} + '@zag-js/rating-group@1.12.0': + resolution: {integrity: sha512-vH2Hu3/rKfP6/EN80V7nMZe06/q+w1jLplojfyiajOaRHn0H+/4oN72Y/6Rd6jk9uAM7Reo/dTLk92BrJ5hyfA==} - '@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==} + '@zag-js/react@1.12.0': + resolution: {integrity: sha512-cipenUT8mpF+fNv7gGpnLEMuu6cHHGhKSlrBhPAHv8JABIlsog8TGifz/xTSn8WIbcg0e+LEhfEZG5LRff6dZw==} peerDependencies: react: '>=18.0.0' react-dom: '>=18.0.0' - '@zag-js/rect-utils@1.8.2': - resolution: {integrity: sha512-RWgPe+MOtOJaWjvlGD1Cf1snmD+hem1mfxXqM3XTCZCjuAlqAzHSCyuBUDia96nU0YGgAxYuloQLh8HFLJcVPA==} + '@zag-js/rect-utils@1.12.0': + resolution: {integrity: sha512-rREWLVbXV2Sy7Kh+TBuLST3QLUNKi+lYZcyuulIV5X3aEEMfNKvB4svdZonfkPYA5uz1MGRYZoM/K3LY77EEVw==} - '@zag-js/remove-scroll@1.8.2': - resolution: {integrity: sha512-zJvLCKcb1yWEdWCP+cDhnYTY1MyoNzuiYOwWTh2YiktQYC0zpd2KDbd+jdhSWIpbIdV22UMuy4sDfFpx6i/mqA==} + '@zag-js/remove-scroll@1.12.0': + resolution: {integrity: sha512-a/6NKblhUfNk8GzLPC2sB2nFXnMhTDysDj6T7wkWsYlPYi2IIX8NwbRl0tSoFoe5w1n0o0g4oe4SDViYOFoBUg==} - '@zag-js/scroll-snap@1.8.2': - resolution: {integrity: sha512-kyM4ZsRvq5WuJJZVr1TQ1xjuso0ANhySMtILH1kC9EFGIOwZegnIpZt5K1rf5NBFmBrcBjUl+lEKwySRNFauhw==} + '@zag-js/scroll-snap@1.12.0': + resolution: {integrity: sha512-78j6RNi+enlKjDUY9PfDUyHzfK7vQDpq7Rsw2Glkf2obu5Ye6O9ElwiLyolBL+YUm/+y7KDIJe9zAndG+Hq6kQ==} - '@zag-js/select@1.8.2': - resolution: {integrity: sha512-ZsBU7kGp8TX4gNavmiTWz9cB+6KgqHXxSwgARnaYUBsYhpdDG2SYfzgyfGAYcAv4ejNTFEfvNk89h+Kpz4CeOg==} + '@zag-js/select@1.12.0': + resolution: {integrity: sha512-GRfQnlG3YdwkD1fAUH/DvfhXIxymB90ZRYcHtuSxF36v2sJIcRhUVZIQvZzGDKX4CvlGVxhobq0w6nHihJh5rA==} - '@zag-js/signature-pad@1.8.2': - resolution: {integrity: sha512-Jl3kRbxo3fkey9uqdVDyGROlECa3MpOXaMWDzO58vodrOjjLnZPO1VPF4xvjG5LUsEOGx54R97Tpc2hS3t93Pw==} + '@zag-js/signature-pad@1.12.0': + resolution: {integrity: sha512-+01KZSSp2iWZSi8J9j6qTI1iWX1oLXayXJA2RMZhrgjG6i6Aab9SALZA/3ViEl9WLEgedJ/rWZrQsShz+QB66A==} - '@zag-js/slider@1.8.2': - resolution: {integrity: sha512-+tncZezgA4FVHV6M7a6lV3cPJUa5OsP7ouXkYGw7Z3cvOoFLaL+bxaCe/UHouRTKqoZj4ImR83x85xcIj50e1g==} + '@zag-js/slider@1.12.0': + resolution: {integrity: sha512-nyA+67/Wm2/znX1vJMzk10bdm14wJfAU8kYffc8RruqUse4WwSz7Tr0W4jLXTcc+IRZqBc1mrHynfwwOrnvXHA==} - '@zag-js/splitter@1.8.2': - resolution: {integrity: sha512-jcr382kBA/pRrQu04PVqB2U4Tn32wBCbJMX4UC/tmuVTP5RwQrA4WaDs21CelfntI0qEbzCMxFfYvbU7+ma7iw==} + '@zag-js/splitter@1.12.0': + resolution: {integrity: sha512-9twlVGYrjtpQ9yn7MgBGR5H64vd0OKVW1rt5LBsVDEPPkUdhb1gaxHJQSAIYlTfFyiYs72oXXq33uO2Sn7enPA==} - '@zag-js/steps@1.8.2': - resolution: {integrity: sha512-iCwaiT6q0GyhZCnHH9bwmQfYGqVmN5ObF+efV2eYDVsuICKe/PlEHL7H3gRClJR6x6FehXmYYI/gCI/PLzsuHg==} + '@zag-js/steps@1.12.0': + resolution: {integrity: sha512-KpIFwISjdLWjDuPKSKK3o68Qm2B1IAsJxYv1BL+6LwAAm31yJN1PEdGFXzvmylLBkAkeUbXQlHMCV7vLgae77w==} - '@zag-js/store@1.8.2': - resolution: {integrity: sha512-Q/sg8L5B3lbX1MWFJNhE5bcPzJrwhRcgDGtvKf8KDKcbcirhF5HiXUbbE4jvav52QVQYKru+WnOJ8WVj5Bi3tA==} + '@zag-js/store@1.12.0': + resolution: {integrity: sha512-AW+EJI1reNzWDEaH/LHnjBFZyLOGJNkf+GYEJ8treRJZXEVIaIjHZtSKQZrFJKAM8JIkrb08vawS/lj1izlimg==} - '@zag-js/switch@1.8.2': - resolution: {integrity: sha512-WYgtfzponocm4rrJcG4CNy1xsOwOXZ1yE9NBNKvew2Cj5yZLpTQLcjJBlWR5VjZ3Tgx+3D/F2nmBYzVFtU8zyw==} + '@zag-js/switch@1.12.0': + resolution: {integrity: sha512-ihn+6f4pMJjL1BDheDP5MpWVyIUpyZNo3lDIKrCSunqJflBomHuB3uVR//tkcgG0QsWIQ0b2IoHL1mtbyYn74w==} - '@zag-js/tabs@1.8.2': - resolution: {integrity: sha512-aM7gx9aj1DcyTV6T5H7okMHWBhi/0jdjhUhFRWWSdYxiYvpveBhVK+Tvg9Nq9GBqXZEgg8E1hxuLgPQUZv7QBQ==} + '@zag-js/tabs@1.12.0': + resolution: {integrity: sha512-VRVE2nOTs8jHdAAV2nIskjbeu9n/QEr6k6Sq1srhOztiEPmLMdMF9F6DlMRK2UR+KuNsOqTBV3gsjZj5Av//fw==} - '@zag-js/tags-input@1.8.2': - resolution: {integrity: sha512-9DF2pXz6a6lX5IiCwg8ug0TSLZ3FILIHUaX9WNBSx7afDlCMH36UgKhyfs2Xhl9gliVC/6a0Tr2sX5VDEYCe7g==} + '@zag-js/tags-input@1.12.0': + resolution: {integrity: sha512-uRUTPPQSm/zV9iZ+/F3Hu8XJMLqZRMnTZZbYS7kEemkpDc3nwUen5XRPwSxIcej77mehvhBPxkPOEdt4nrkZyw==} - '@zag-js/time-picker@1.8.2': - resolution: {integrity: sha512-RdAPrRBeuiCL7m4PdEZOR6YzfQfOeNElgjEAVLZgUTu4WEhLt/XVdjaOuUQtiuLW4ukT72wNVWi0S+NBCHerIw==} + '@zag-js/time-picker@1.12.0': + resolution: {integrity: sha512-rEE5Sr+xdij7ZLNeyi/I0DcuFPn0ghSXUPLvp7XJ1rF/qrn8xIR7hR84KqVA1wjrSzuhkr0QyJKqR/k88AxKCg==} peerDependencies: '@internationalized/date': '>=3.0.0' - '@zag-js/timer@1.8.2': - resolution: {integrity: sha512-EUqVacZyrKuvzDFHRZLYjDzNwMyr/5cQCu4m1Da4nv7hvqivDvofU2HUUf7mi7isuYuRaRAZ6sFQqknmvfbKQQ==} + '@zag-js/timer@1.12.0': + resolution: {integrity: sha512-37iJz2Qcih9+AIevwQkDm/BB4n3wi2xg3vPswjavStlClPHkmBnERey+KcHULmvfRyKNgXfR0oiet5eCZK5bvg==} - '@zag-js/toast@1.8.2': - resolution: {integrity: sha512-ew+lfy8y5j4HWj5Ir9RoSfQKlbZnmGnn1r8GHMBhQXegWVGWAb04n4sp7t/e656iBif9HpLm3+/SUwOdCPIiJg==} + '@zag-js/toast@1.12.0': + resolution: {integrity: sha512-G9Emqd5AaUQ9Hl18HQNoOVkGaL7qyUffoAI8+xv+QxJOIobMeRwaoGplOs8f9CDxK+wgl00ZnIa1tJThpq34ZQ==} - '@zag-js/toggle-group@1.8.2': - resolution: {integrity: sha512-kBvFQtUJ70PpqJ6aA9uLCXLvSTiUMhzX3GkJbmTxffu2BdVKUF5OEKW3x9VpYdPeekBnayCXoGdW7WEOkgpYGw==} + '@zag-js/toggle-group@1.12.0': + resolution: {integrity: sha512-vw458MNJNcfiMVf54usbWJ6W9079/TtjhyGJdR1p8U73ps0RT/9/rEItAWXyBpoDvHP486zdffyH6HFMIW9c8A==} - '@zag-js/toggle@1.8.2': - resolution: {integrity: sha512-2EebV04Hv25ex1jQVa1Cjb4A85qcC6kvABn4qR6wZooxf5Ua72C9sdiEjrAvMhDGAWaa37JuxlyYs+sZG1l0Lw==} + '@zag-js/toggle@1.12.0': + resolution: {integrity: sha512-krpJdt3P8/u0AmM6LDrSuCrQWqbaRIGswxg9LoFBCs9AAa+nmhP3LIu0FsNeSZzGWSOGC779ELf1ZnN4z6V+Rw==} - '@zag-js/tooltip@1.8.2': - resolution: {integrity: sha512-FqDq4H3PFnEJt96JCr4dap3Pkcq2D0Gb/G5G5gG3QAs7kOIHL2Jpq1CGCxE3EpmQOFee1HwyokC6R4Q4kot1Nw==} + '@zag-js/tooltip@1.12.0': + resolution: {integrity: sha512-sdYSUQp+ziSyKlLPJVN5pythQacMpNYfRximG0ddpZ43iTZp71P9hN0ZvO6RccND+vP7uGNzncEqAIk30emlzw==} - '@zag-js/tour@1.8.2': - resolution: {integrity: sha512-67Qw+dYY8ayf1x0ggvU0U0MoS0I/nhVe9JRpabPjYc09123DgGsDA4sdbj6VfCeFW6j3kffn5VEmTm8C3yV8gA==} + '@zag-js/tour@1.12.0': + resolution: {integrity: sha512-yTJQPbYE3J5nIR1EbxjBIbGdFgwfFqwEZ22qFOC4vw81tkdi2h4qJcDr/ucML3oeEVmJBmFU4EWzNKcoBATsdw==} - '@zag-js/tree-view@1.8.2': - resolution: {integrity: sha512-l/JmKjkz/BM59HVscazl8BMJj+suXl+FNRQVZqhyijzlb2PrB5xtgiQNV9XLNM2qHBCub9820Y1YMLyEP5YiwQ==} + '@zag-js/tree-view@1.12.0': + resolution: {integrity: sha512-p/tKMPqHxx9Xal7zmaNFC/35VZBPtNMXqbpIlT5GVPPge+9NwtWd7a2Nt5RLdvztqfcyZUkfANWkMUnWgXgucA==} - '@zag-js/types@1.8.1': - resolution: {integrity: sha512-gJU3UlRccL2N4ukG4xEtetAr/fiuFBxpG5IKZ/Pr0zz8Z17LpdhK7ozyn9SU7y9W6YOcngByAgNgz+nRzmu5aQ==} + '@zag-js/types@1.12.0': + resolution: {integrity: sha512-qewKPnURQ9v4BKL0zFrqPIkC77areamYBkO2+DRet2U2WYofrOf4q7T6qIOcF4lLPYvCOv9LnYuw4pAlHyqcgA==} - '@zag-js/types@1.8.2': - resolution: {integrity: sha512-J+94HhFAPOBchNdGcmvqjB8nbQFgKHcqGoPl5vNTKlcoibN0yFjn4XFZoQU6uCf8sPhNg6NUNTkluR5YjybyJA==} - - '@zag-js/utils@1.8.2': - resolution: {integrity: sha512-7HnRAQ7+pR00c4BQChulTdf6G1gJ0NqV4mMKd9UXk4/E7GLYinUdBNAZ3jZCdHDrio3+2zIlNvpzkO3G4pVjlw==} + '@zag-js/utils@1.12.0': + resolution: {integrity: sha512-PapS6VDeQtlWyZg3gC4pIY0++2OCAzqrnlRiB7IhEyOYsqi5MiAs+TKVDFXU+eUM77aR8pgtXo10yvdnNw6b+A==} abab@2.0.6: resolution: {integrity: sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA==} @@ -1935,8 +2000,8 @@ packages: resolution: {integrity: sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==} engines: {node: '>= 8.10.0'} - chromium-bidi@3.0.0: - resolution: {integrity: sha512-ZOGRDAhBMX1uxL2Cm2TDuhImbrsEz5A/tTcVU6RpXEWaTNUNwsHW6njUXizh51Ir6iqHbKAfhA2XK33uBcLo5A==} + chromium-bidi@4.1.1: + resolution: {integrity: sha512-biR7t4vF3YluE6RlMSk9IWk+b9U+WWyzHp+N2pL9vRTk+UXHYRTVp7jTK58ZNzMLBgoLMHY4QyJMbeuw3eKxqg==} peerDependencies: devtools-protocol: '*' @@ -1966,10 +2031,6 @@ packages: resolution: {integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==} engines: {node: '>=12'} - clone@1.0.4: - resolution: {integrity: sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==} - engines: {node: '>=0.8'} - co@4.6.0: resolution: {integrity: sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==} engines: {iojs: '>= 1.0.0', node: '>= 0.12.0'} @@ -2146,9 +2207,6 @@ packages: resolution: {integrity: sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==} engines: {node: '>=0.10.0'} - defaults@1.0.4: - resolution: {integrity: sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==} - define-data-property@1.1.4: resolution: {integrity: sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==} engines: {node: '>= 0.4'} @@ -2220,9 +2278,6 @@ packages: eastasianwidth@0.2.0: resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==} - easy-table@1.2.0: - resolution: {integrity: sha512-OFzVOv03YpvtcWGe5AayU5G2hgybsg3iqA6drU8UaoZyB9jLGMTrz9+asnLp/E+6qPh88yEI1gvyZFZ41dmgww==} - electron-to-chromium@1.5.97: resolution: {integrity: sha512-HKLtaH02augM7ZOdYRuO19rWDeY+QSJ1VxnXFa/XDFLf07HvM90pALIJFgrO+UVaajI3+aJMMpojoUTLZyQ7JQ==} @@ -2393,8 +2448,8 @@ packages: resolution: {integrity: sha512-UyLnSehNt62FFhSwjZlHmeokpRK59rcz29j+F1/aDgbkbRTk7wIc9XzdoasMUbRNKDM0qQt/+BJ4BrpFeABemw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - eslint@9.24.0: - resolution: {integrity: sha512-eh/jxIEJyZrvbWRe4XuVclLPDYSYYYgLy5zXGGxD6j8zjSAxFEzI2fL/8xNq6O2yKqVt+eF2YhV+hxjV6UKXwQ==} + eslint@9.25.1: + resolution: {integrity: sha512-E6Mtz9oGQWDCpV12319d59n4tx9zOTXSTmc8BLVxBx+G/0RdM5MvEEJLU9c0+aleoePYYgVTOsRblx433qmhWQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} hasBin: true peerDependencies: @@ -2499,6 +2554,14 @@ packages: fd-slicer@1.1.0: resolution: {integrity: sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g==} + fdir@6.4.4: + resolution: {integrity: sha512-1NZP+GK4GfuAv3PqKvxQRDMjdSRZjnkq7KfhlNrCNNlZ0ygQFpebfrnfnq/W7fpUnAv9aGWmY1zKx7FYL3gwhg==} + peerDependencies: + picomatch: ^3 || ^4 + peerDependenciesMeta: + picomatch: + optional: true + fetch-blob@3.2.0: resolution: {integrity: sha512-7yAQpD2UMJzLi1Dqv7qFYnPbaPx7ZfFK6PiIxQ4PfkGPyNyl2Ugx+a/umUonmKqjhM4DnfbMvdX6otXq83soQQ==} engines: {node: ^12.20 || >= 14.13} @@ -2644,8 +2707,8 @@ packages: resolution: {integrity: sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==} engines: {node: '>= 0.4'} - globby@14.0.2: - resolution: {integrity: sha512-s3Fq41ZVh7vbbe2PN3nrW7yC7U7MFVc5c98/iTl9c2GawNMKx/J648KQRW6WKkuU8GIbbh2IXfIRQjOZnXcTnw==} + globby@14.1.0: + resolution: {integrity: sha512-0Ia46fDOaT7k4og1PDW4YbodWWr3scS2vAr2lTbsplOt2WkKp0vQbkI9wKis/T5LV/dqPjO3bpS/z6GTJB82LA==} engines: {node: '>=18'} gopd@1.2.0: @@ -2733,6 +2796,10 @@ packages: resolution: {integrity: sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==} engines: {node: '>= 4'} + ignore@7.0.4: + resolution: {integrity: sha512-gJzzk+PQNznz8ysRrC0aOkBNVRBDtE1n53IqyqEf3PXrYwomFs5q4pGMizBMJF+ykh03insJ27hB8gSrD2Hn8A==} + engines: {node: '>= 4'} + import-fresh@3.3.1: resolution: {integrity: sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==} engines: {node: '>=6'} @@ -3164,8 +3231,8 @@ packages: resolution: {integrity: sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==} engines: {node: '>=6'} - knip@5.50.3: - resolution: {integrity: sha512-0A4G7UPucGTCpNh5vHSfL0+tVQIuKfJKdg8sAq6EC3COKbAchEbM+TeN4w32OrnJW9CesHs71lqftlggMVfW2A==} + knip@5.52.0: + resolution: {integrity: sha512-Jac+wJvfrGSYp664sQbEMPCs9m4z0VSdvzSZAgvVIA9gXuE+a2I2O5YnDpiitHTZ2eGbbMNJyewO/4me6LFMHQ==} engines: {node: '>=18.18.0'} hasBin: true peerDependencies: @@ -3492,6 +3559,7 @@ packages: node-domexception@1.0.0: resolution: {integrity: sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ==} engines: {node: '>=10.5.0'} + deprecated: Use your platform's native DOMException instead node-eval@2.0.0: resolution: {integrity: sha512-Ap+L9HznXAVeJj3TJ1op6M6bg5xtTq8L5CU/PJxtkhea/DrIxdTknGKIECKd/v/Lgql95iuMAYvIzBNd0pmcMg==} @@ -3511,8 +3579,8 @@ packages: resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} engines: {node: '>=0.10.0'} - npm-check-updates@17.1.18: - resolution: {integrity: sha512-bkUy2g4v1i+3FeUf5fXMLbxmV95eG4/sS7lYE32GrUeVgQRfQEk39gpskksFunyaxQgTIdrvYbnuNbO/pSUSqw==} + npm-check-updates@18.0.1: + resolution: {integrity: sha512-MO7mLp/8nm6kZNLLyPgz4gHmr9tLoU+pWPLdXuGAx+oZydBHkHWN0ibTonsrfwC2WEQNIQxuZagYwB67JQpAuw==} engines: {node: ^18.18.0 || >=20.0.0, npm: '>=8.12.1'} hasBin: true @@ -3617,8 +3685,8 @@ packages: package-json-from-dist@1.0.1: resolution: {integrity: sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==} - package-manager-detector@0.1.2: - resolution: {integrity: sha512-iePyefLTOm2gEzbaZKSW+eBMjg+UYsQvUKxmvGXAQ987K16efBg10MxIjZs08iyX+DY2/owKY9DIdu193kX33w==} + package-manager-detector@1.2.0: + resolution: {integrity: sha512-PutJepsOtsqVfUsxCzgTTpyXmiAgvKptIgY4th5eq5UXXFhj5PxfQ9hnGkypMeovpAvVshFRItoFHYO18TCOqA==} parent-module@1.0.1: resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} @@ -3662,9 +3730,9 @@ packages: resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} engines: {node: '>=8'} - path-type@5.0.0: - resolution: {integrity: sha512-5HviZNaZcfqP95rwpv+1HDgUamezbqdSYTyzjTvwtJSnIH+3vnbmWsItli8OFEndS984VT55M3jduxZbX351gg==} - engines: {node: '>=12'} + path-type@6.0.0: + resolution: {integrity: sha512-Vj7sf++t5pBD637NSfkxpHSMfWaeig5+DKWLhcqIYx6mWQz5hdJTGDVMQiJcw1ZYkhs7AazKDGpRVji1LJCZUQ==} + engines: {node: '>=18'} pathe@2.0.3: resolution: {integrity: sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==} @@ -3703,13 +3771,13 @@ packages: resolution: {integrity: sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==} engines: {node: '>=8'} - playwright-core@1.51.1: - resolution: {integrity: sha512-/crRMj8+j/Nq5s8QcvegseuyeZPxpQCZb6HNk3Sos3BlZyAknRjoyJPFWkpNn8v0+P3WiwqFF8P+zQo4eqiNuw==} + playwright-core@1.52.0: + resolution: {integrity: sha512-l2osTgLXSMeuLZOML9qYODUQoPPnUsKsb5/P6LJ2e6uPKXUdPK5WYhN4z03G+YNbWmGDY4YENauNu4ZKczreHg==} engines: {node: '>=18'} hasBin: true - playwright@1.51.1: - resolution: {integrity: sha512-kkx+MB2KQRkyxjYPc3a0wLZZoDczmppyGJIvQ43l+aZihkaVvmu/21kiyaHeHjiFxjxNNFnUncKmcGIyOojsaw==} + playwright@1.52.0: + resolution: {integrity: sha512-JAwMNMBlxJ2oD1kce4KPtMkDeKGHQstdpFPcPH3maElAXon/QZeTvtsfXmTMRyO9TslfoYOXkSsvao2nE1ilTw==} engines: {node: '>=18'} hasBin: true @@ -3729,11 +3797,6 @@ packages: resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} engines: {node: '>= 0.8.0'} - prettier@3.3.3: - resolution: {integrity: sha512-i2tDNA0O5IrMO757lfrdQZCc2jPNDVntV0m/+4whiDfWaTKfMNgR7Qz0NAeGz/nRqF4m5/6CLzbP4/liHt12Ew==} - engines: {node: '>=14'} - hasBin: true - prettier@3.5.3: resolution: {integrity: sha512-QQtaxnoDJeAkDvDKWCLiwIXkTgRhwYDEQCghU9Z6q03iyek/rxRh/2lC3HB7P8sWT2xC/y5JDctPLBIGzHKbhw==} engines: {node: '>=14'} @@ -3789,12 +3852,12 @@ packages: resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} engines: {node: '>=6'} - puppeteer-core@24.6.1: - resolution: {integrity: sha512-sMCxsY+OPWO2fecBrhIeCeJbWWXJ6UaN997sTid6whY0YT9XM0RnxEwLeUibluIS5/fRmuxe1efjb5RMBsky7g==} + puppeteer-core@24.7.2: + resolution: {integrity: sha512-P9pZyTmJqKODFCnkZgemCpoFA4LbAa8+NumHVQKyP5X9IgdNS1ZnAnIh1sMAwhF8/xEUGf7jt+qmNLlKieFw1Q==} engines: {node: '>=18'} - puppeteer@24.6.1: - resolution: {integrity: sha512-/4ocGfu8LNvDbWUqJZV2VmwEWpbOdJa69y2Jivd213tV0ekAtUh/bgT1hhW63SDN/CtrEucOPwoomZ+9M+eBEg==} + puppeteer@24.7.2: + resolution: {integrity: sha512-ifYqoY6wGs0yZeFuFPn8BE9FhuveXkarF+eO18I2e/axdoCh4Qh1AE+qXdJBhdaeoPt6eRNTY4Dih29Jbq8wow==} engines: {node: '>=18'} hasBin: true @@ -3843,19 +3906,19 @@ packages: react-is@19.1.0: resolution: {integrity: sha512-Oe56aUPnkHyyDxxkvqtd7KkdQP5uIUfHxd5XTb3wE9d/kRnZLmKbDB0GWk919tdQ+mxxPtG6EAs6RMT6i1qtHg==} - react-refresh@0.14.2: - resolution: {integrity: sha512-jCvmsr+1IUSMUyzOkRcvnVbX3ZYC6g9TDrDbFuFmRDq7PD4yaGbLKNQL6k2jnArV8hjYxh7hVhAZB6s9HDGpZA==} + react-refresh@0.17.0: + resolution: {integrity: sha512-z6F7K9bV85EfseRCp2bzrpyQ0Gkw1uLoCel9XBVWPg/TjRj94SkJzUTGfOa4bs7iJvBWtQG0Wq7wnI0syw3EBQ==} engines: {node: '>=0.10.0'} - react-router-dom@7.5.0: - resolution: {integrity: sha512-fFhGFCULy4vIseTtH5PNcY/VvDJK5gvOWcwJVHQp8JQcWVr85ENhJ3UpuF/zP1tQOIFYNRJHzXtyhU1Bdgw0RA==} + react-router-dom@7.5.3: + resolution: {integrity: sha512-cK0jSaTyW4jV9SRKAItMIQfWZ/D6WEZafgHuuCb9g+SjhLolY78qc+De4w/Cz9ybjvLzShAmaIMEXt8iF1Cm+A==} engines: {node: '>=20.0.0'} peerDependencies: react: '>=18' react-dom: '>=18' - react-router@7.5.0: - resolution: {integrity: sha512-estOHrRlDMKdlQa6Mj32gIks4J+AxNsYoE0DbTTxiMy2mPzZuWSDU+N85/r1IlNR7kGfznF3VCUlvc5IUO+B9g==} + react-router@7.5.3: + resolution: {integrity: sha512-3iUDM4/fZCQ89SXlDa+Ph3MevBrozBAI655OAfWQlTm9nBR0IKlrmNwFow5lPHttbwvITZfkeeeZFP6zt3F7pw==} engines: {node: '>=20.0.0'} peerDependencies: react: '>=18' @@ -3870,8 +3933,8 @@ packages: react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 - react-speech-recognition@4.0.0: - resolution: {integrity: sha512-hz1OsRhjAW70rOMVXN84PR+1L2I1j8xS1TXpwpd4vlDaRY9i/LbAaxEklqscgObECTTuyxNeGBdVdcq/pX3bqQ==} + react-speech-recognition@4.0.1: + resolution: {integrity: sha512-0fIqzLtfY8vuYA6AmJVK7qiabZx0oFKOO+rbiBgFI3COWVGREy0A+gdU16hWXmFebeyrI8JsOLYsWk6WaHUXRw==} peerDependencies: react: '>=16.8.0' @@ -3975,8 +4038,8 @@ packages: rfdc@1.4.1: resolution: {integrity: sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA==} - rollup@4.34.6: - resolution: {integrity: sha512-wc2cBWqJgkU3Iz5oztRkQbfVkbxoz5EhnCGOrnJvnLnQ7O0WhQUYyv18qQI79O8L7DdHrrlJNeCHd4VGpnaXKQ==} + rollup@4.40.1: + resolution: {integrity: sha512-C5VvvgCCyfyotVITIAv+4efVytl5F7wt+/I2i9q9GZcEXW9BP52YYOXC58igUi+LFZVHukErIIqQSWwv/M3WRw==} engines: {node: '>=18.0.0', npm: '>=8.0.0'} hasBin: true @@ -4321,6 +4384,10 @@ packages: tinyexec@0.3.2: resolution: {integrity: sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA==} + tinyglobby@0.2.13: + resolution: {integrity: sha512-mEwzpUgrLySlveBwEVDMKk5B57bhLPYovRfPAXD5gA/98Opn0rCDj3GtLwFvCvH5RK9uPCExUROW5NjDwvqkxw==} + engines: {node: '>=12.0.0'} + tinypool@1.0.2: resolution: {integrity: sha512-al6n+QEANGFOMf/dmUMsuS5/r9B06uwlyNjZZql/zv8J7ybHCgoihBNORZCY2mzUuAnomQa2JdhyHKzZxPCrFA==} engines: {node: ^18.0.0 || >=20.0.0} @@ -4444,8 +4511,8 @@ packages: undici-types@6.21.0: resolution: {integrity: sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==} - unicorn-magic@0.1.0: - resolution: {integrity: sha512-lRfVq8fE8gz6QMBuDM6a+LO3IAzTi05H6gCVaUpir2E1Rwpo4ZUog45KpNXKC/Mn3Yb9UDuHumeFTo9iV/D9FQ==} + unicorn-magic@0.3.0: + resolution: {integrity: sha512-+QBBXBCvifc56fsbuxZQ6Sic3wqqc3WWaqxs58gvJrcOuN83HGTCwz3oS5phzU9LthRNE9VrJCFCLUgHeeFnfA==} engines: {node: '>=18'} unified@11.0.5: @@ -4521,13 +4588,13 @@ packages: vfile@6.0.3: resolution: {integrity: sha512-KzIbH/9tXat2u30jf+smMwFCsno4wHVdNmzFyL+T/L3UGqqk6JKfVqOFOZEpZSHADH1k40ab6NUIXZq422ov3Q==} - vite-node@3.1.1: - resolution: {integrity: sha512-V+IxPAE2FvXpTCHXyNem0M+gWm6J7eRyWPR6vYoG/Gl+IscNOjXzztUhimQgTxaAoUoj40Qqimaa0NLIOOAH4w==} + vite-node@3.1.2: + resolution: {integrity: sha512-/8iMryv46J3aK13iUXsei5G/A3CUlW4665THCPS+K8xAaqrVWiGB4RfXMQXCLjpK9P2eK//BczrVkn5JLAk6DA==} engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0} hasBin: true - vite@6.2.6: - resolution: {integrity: sha512-9xpjNl3kR4rVDZgPNdTL0/c6ao4km69a/2ihNQbcANz8RuCOK3hQBmLSJf3bRKVQjVMda+YvizNE8AwvogcPbw==} + vite@6.3.4: + resolution: {integrity: sha512-BiReIiMS2fyFqbqNT/Qqt4CVITDU9M9vE+DKcVAsB+ZV0wvTKd+3hMbkpxz1b+NmEDMegpVbisKiAZOnvO92Sw==} engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0} hasBin: true peerDependencies: @@ -4566,16 +4633,16 @@ packages: yaml: optional: true - vitest@3.1.1: - resolution: {integrity: sha512-kiZc/IYmKICeBAZr9DQ5rT7/6bD9G7uqQEki4fxazi1jdVl2mWGzedtBs5s6llz59yQhVb7FFY2MbHzHCnT79Q==} + vitest@3.1.2: + resolution: {integrity: sha512-WaxpJe092ID1C0mr+LH9MmNrhfzi8I65EX/NRU/Ld016KqQNRgxSOlGNP1hHN+a/F8L15Mh8klwaF77zR3GeDQ==} 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.1.1 - '@vitest/ui': 3.1.1 + '@vitest/browser': 3.1.2 + '@vitest/ui': 3.1.2 happy-dom: '*' jsdom: '*' peerDependenciesMeta: @@ -4601,9 +4668,6 @@ packages: walker@1.0.8: resolution: {integrity: sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==} - wcwidth@1.0.1: - resolution: {integrity: sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==} - web-streams-polyfill@3.3.3: resolution: {integrity: sha512-d2JWLCivmZYTSIoge9MsgFCZrt571BikcWGYkjC1khllbTeDlGqZ2D8vD8E/lJa8WGWbb7Plm8/XJYV7IJHZZw==} engines: {node: '>= 8'} @@ -4748,8 +4812,8 @@ packages: peerDependencies: zod: ^3.18.0 - zod@3.24.2: - resolution: {integrity: sha512-lY7CDW43ECgW9u1TcT3IoXHflywfVqDYze4waEz812jR/bZ8FHDsl7pFQoSZTz5N+2NqRXs8GBwnAwo3ZNxqhQ==} + zod@3.24.3: + resolution: {integrity: sha512-HhY1oqzWCQWuUqvBFnsyrtZRhyPeR7SUGv+C4+MsisMuVfSPx8HpwWqH8tRahSlt6M3PiFAcoeFhZAqIXTxoSg==} zustand@5.0.3: resolution: {integrity: sha512-14fwWQtU3pH4dE0dOpdMiWjddcH+QzKIgk1cl8epwSE7yag43k/AD/m4L6+K7DytAOr9gGBe3/EXj9g7cdostg==} @@ -4781,62 +4845,65 @@ snapshots: '@jridgewell/gen-mapping': 0.3.8 '@jridgewell/trace-mapping': 0.3.25 - '@ark-ui/react@5.5.0(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + '@ark-ui/react@5.8.0(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': dependencies: - '@internationalized/date': 3.7.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 + '@internationalized/date': 3.8.0 + '@zag-js/accordion': 1.12.0 + '@zag-js/anatomy': 1.12.0 + '@zag-js/angle-slider': 1.12.0 + '@zag-js/auto-resize': 1.12.0 + '@zag-js/avatar': 1.12.0 + '@zag-js/carousel': 1.12.0 + '@zag-js/checkbox': 1.12.0 + '@zag-js/clipboard': 1.12.0 + '@zag-js/collapsible': 1.12.0 + '@zag-js/collection': 1.12.0 + '@zag-js/color-picker': 1.12.0 + '@zag-js/color-utils': 1.12.0 + '@zag-js/combobox': 1.12.0 + '@zag-js/core': 1.12.0 + '@zag-js/date-picker': 1.12.0(@internationalized/date@3.8.0) + '@zag-js/date-utils': 1.12.0(@internationalized/date@3.8.0) + '@zag-js/dialog': 1.12.0 + '@zag-js/dom-query': 1.12.0 + '@zag-js/editable': 1.12.0 + '@zag-js/file-upload': 1.12.0 + '@zag-js/file-utils': 1.12.0 + '@zag-js/floating-panel': 1.12.0 + '@zag-js/focus-trap': 1.12.0 + '@zag-js/highlight-word': 1.12.0 + '@zag-js/hover-card': 1.12.0 + '@zag-js/i18n-utils': 1.12.0 + '@zag-js/listbox': 1.12.0 + '@zag-js/menu': 1.12.0 + '@zag-js/number-input': 1.12.0 + '@zag-js/pagination': 1.12.0 + '@zag-js/pin-input': 1.12.0 + '@zag-js/popover': 1.12.0 + '@zag-js/presence': 1.12.0 + '@zag-js/progress': 1.12.0 + '@zag-js/qr-code': 1.12.0 + '@zag-js/radio-group': 1.12.0 + '@zag-js/rating-group': 1.12.0 + '@zag-js/react': 1.12.0(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@zag-js/select': 1.12.0 + '@zag-js/signature-pad': 1.12.0 + '@zag-js/slider': 1.12.0 + '@zag-js/splitter': 1.12.0 + '@zag-js/steps': 1.12.0 + '@zag-js/switch': 1.12.0 + '@zag-js/tabs': 1.12.0 + '@zag-js/tags-input': 1.12.0 + '@zag-js/time-picker': 1.12.0(@internationalized/date@3.8.0) + '@zag-js/timer': 1.12.0 + '@zag-js/toast': 1.12.0 + '@zag-js/toggle': 1.12.0 + '@zag-js/toggle-group': 1.12.0 + '@zag-js/tooltip': 1.12.0 + '@zag-js/tour': 1.12.0 + '@zag-js/tree-view': 1.12.0 + '@zag-js/types': 1.12.0 + '@zag-js/utils': 1.12.0 react: 19.1.0 react-dom: 19.1.0(react@19.1.0) @@ -4846,8 +4913,16 @@ snapshots: js-tokens: 4.0.0 picocolors: 1.1.1 + '@babel/code-frame@7.27.1': + dependencies: + '@babel/helper-validator-identifier': 7.27.1 + js-tokens: 4.0.0 + picocolors: 1.1.1 + '@babel/compat-data@7.26.8': {} + '@babel/compat-data@7.27.1': {} + '@babel/core@7.26.8': dependencies: '@ampproject/remapping': 2.3.0 @@ -4869,6 +4944,26 @@ snapshots: transitivePeerDependencies: - supports-color + '@babel/core@7.27.1': + dependencies: + '@ampproject/remapping': 2.3.0 + '@babel/code-frame': 7.27.1 + '@babel/generator': 7.27.1 + '@babel/helper-compilation-targets': 7.27.1 + '@babel/helper-module-transforms': 7.27.1(@babel/core@7.27.1) + '@babel/helpers': 7.27.1 + '@babel/parser': 7.27.1 + '@babel/template': 7.27.1 + '@babel/traverse': 7.27.1 + '@babel/types': 7.27.1 + convert-source-map: 2.0.0 + debug: 4.4.0 + gensync: 1.0.0-beta.2 + json5: 2.2.3 + semver: 6.3.1 + transitivePeerDependencies: + - supports-color + '@babel/generator@7.26.8': dependencies: '@babel/parser': 7.26.8 @@ -4877,6 +4972,14 @@ snapshots: '@jridgewell/trace-mapping': 0.3.25 jsesc: 3.1.0 + '@babel/generator@7.27.1': + dependencies: + '@babel/parser': 7.27.1 + '@babel/types': 7.27.1 + '@jridgewell/gen-mapping': 0.3.8 + '@jridgewell/trace-mapping': 0.3.25 + jsesc: 3.1.0 + '@babel/helper-compilation-targets@7.26.5': dependencies: '@babel/compat-data': 7.26.8 @@ -4885,6 +4988,14 @@ snapshots: lru-cache: 5.1.1 semver: 6.3.1 + '@babel/helper-compilation-targets@7.27.1': + dependencies: + '@babel/compat-data': 7.27.1 + '@babel/helper-validator-option': 7.27.1 + browserslist: 4.24.4 + lru-cache: 5.1.1 + semver: 6.3.1 + '@babel/helper-module-imports@7.25.9': dependencies: '@babel/traverse': 7.26.8 @@ -4892,6 +5003,13 @@ snapshots: transitivePeerDependencies: - supports-color + '@babel/helper-module-imports@7.27.1': + dependencies: + '@babel/traverse': 7.27.1 + '@babel/types': 7.27.1 + transitivePeerDependencies: + - supports-color + '@babel/helper-module-transforms@7.26.0(@babel/core@7.26.8)': dependencies: '@babel/core': 7.26.8 @@ -4901,23 +5019,47 @@ snapshots: transitivePeerDependencies: - supports-color + '@babel/helper-module-transforms@7.27.1(@babel/core@7.27.1)': + dependencies: + '@babel/core': 7.27.1 + '@babel/helper-module-imports': 7.27.1 + '@babel/helper-validator-identifier': 7.27.1 + '@babel/traverse': 7.27.1 + transitivePeerDependencies: + - supports-color + '@babel/helper-plugin-utils@7.26.5': {} '@babel/helper-string-parser@7.25.9': {} + '@babel/helper-string-parser@7.27.1': {} + '@babel/helper-validator-identifier@7.25.9': {} + '@babel/helper-validator-identifier@7.27.1': {} + '@babel/helper-validator-option@7.25.9': {} + '@babel/helper-validator-option@7.27.1': {} + '@babel/helpers@7.26.7': dependencies: '@babel/template': 7.26.8 '@babel/types': 7.26.8 + '@babel/helpers@7.27.1': + dependencies: + '@babel/template': 7.27.1 + '@babel/types': 7.27.1 + '@babel/parser@7.26.8': dependencies: '@babel/types': 7.26.8 + '@babel/parser@7.27.1': + dependencies: + '@babel/types': 7.27.1 + '@babel/plugin-syntax-async-generators@7.8.4(@babel/core@7.26.8)': dependencies: '@babel/core': 7.26.8 @@ -5003,14 +5145,14 @@ snapshots: '@babel/core': 7.26.8 '@babel/helper-plugin-utils': 7.26.5 - '@babel/plugin-transform-react-jsx-self@7.25.9(@babel/core@7.26.8)': + '@babel/plugin-transform-react-jsx-self@7.25.9(@babel/core@7.27.1)': dependencies: - '@babel/core': 7.26.8 + '@babel/core': 7.27.1 '@babel/helper-plugin-utils': 7.26.5 - '@babel/plugin-transform-react-jsx-source@7.25.9(@babel/core@7.26.8)': + '@babel/plugin-transform-react-jsx-source@7.25.9(@babel/core@7.27.1)': dependencies: - '@babel/core': 7.26.8 + '@babel/core': 7.27.1 '@babel/helper-plugin-utils': 7.26.5 '@babel/runtime@7.26.7': @@ -5023,6 +5165,12 @@ snapshots: '@babel/parser': 7.26.8 '@babel/types': 7.26.8 + '@babel/template@7.27.1': + dependencies: + '@babel/code-frame': 7.27.1 + '@babel/parser': 7.27.1 + '@babel/types': 7.27.1 + '@babel/traverse@7.26.8': dependencies: '@babel/code-frame': 7.26.2 @@ -5035,18 +5183,35 @@ snapshots: transitivePeerDependencies: - supports-color + '@babel/traverse@7.27.1': + dependencies: + '@babel/code-frame': 7.27.1 + '@babel/generator': 7.27.1 + '@babel/parser': 7.27.1 + '@babel/template': 7.27.1 + '@babel/types': 7.27.1 + debug: 4.4.0 + globals: 11.12.0 + transitivePeerDependencies: + - supports-color + '@babel/types@7.26.8': dependencies: '@babel/helper-string-parser': 7.25.9 '@babel/helper-validator-identifier': 7.25.9 + '@babel/types@7.27.1': + dependencies: + '@babel/helper-string-parser': 7.27.1 + '@babel/helper-validator-identifier': 7.27.1 + '@bcoe/v8-coverage@0.2.3': {} - '@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))': + '@chakra-ui/cli@3.17.0(@chakra-ui/react@3.17.0(@emotion/react@11.14.0(@types/react@19.1.2)(react@19.1.0))(react-dom@19.1.0(react@19.1.0))(react@19.1.0))': dependencies: - '@chakra-ui/react': 3.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': 3.17.0(@emotion/react@11.14.0(@types/react@19.1.2)(react@19.1.0))(react-dom@19.1.0(react@19.1.0))(react@19.1.0) '@clack/prompts': 0.10.1 - '@pandacss/is-valid-prop': 0.41.0 + '@pandacss/is-valid-prop': 0.53.6 '@types/cli-table': 0.3.4 '@types/debug': 4.1.12 '@visulima/boxen': 1.0.30 @@ -5055,27 +5220,27 @@ snapshots: cli-table: 0.3.11 commander: 12.1.0 debug: 4.4.0 - globby: 14.0.2 + globby: 14.1.0 https-proxy-agent: 7.0.6 look-it-up: 2.1.0 node-fetch: 3.3.2 - package-manager-detector: 0.1.2 - prettier: 3.3.3 + package-manager-detector: 1.2.0 + prettier: 3.5.3 scule: 1.3.0 sucrase: 3.35.0 - zod: 3.24.2 + zod: 3.24.3 transitivePeerDependencies: - supports-color - '@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@3.17.0(@emotion/react@11.14.0(@types/react@19.1.2)(react@19.1.0))(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': dependencies: - '@ark-ui/react': 5.5.0(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@ark-ui/react': 5.8.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.1.1)(react@19.1.0) + '@emotion/react': 11.14.0(@types/react@19.1.2)(react@19.1.0) '@emotion/serialize': 1.3.3 '@emotion/use-insertion-effect-with-fallbacks': 1.2.0(react@19.1.0) '@emotion/utils': 1.4.2 - '@pandacss/is-valid-prop': 0.41.0 + '@pandacss/is-valid-prop': 0.53.6 csstype: 3.1.3 fast-safe-stringify: 2.1.1 react: 19.1.0 @@ -5141,7 +5306,7 @@ snapshots: '@emotion/memoize@0.9.0': {} - '@emotion/react@11.14.0(@types/react@19.1.1)(react@19.1.0)': + '@emotion/react@11.14.0(@types/react@19.1.2)(react@19.1.0)': dependencies: '@babel/runtime': 7.26.7 '@emotion/babel-plugin': 11.13.5 @@ -5153,7 +5318,7 @@ snapshots: hoist-non-react-statics: 3.3.2 react: 19.1.0 optionalDependencies: - '@types/react': 19.1.1 + '@types/react': 19.1.2 transitivePeerDependencies: - supports-color @@ -5252,9 +5417,9 @@ snapshots: '@esbuild/win32-x64@0.25.1': optional: true - '@eslint-community/eslint-utils@4.4.1(eslint@9.24.0(jiti@2.4.2))': + '@eslint-community/eslint-utils@4.4.1(eslint@9.25.1(jiti@2.4.2))': dependencies: - eslint: 9.24.0(jiti@2.4.2) + eslint: 9.25.1(jiti@2.4.2) eslint-visitor-keys: 3.4.3 '@eslint-community/regexpp@4.12.1': {} @@ -5267,9 +5432,9 @@ snapshots: transitivePeerDependencies: - supports-color - '@eslint/config-helpers@0.2.0': {} + '@eslint/config-helpers@0.2.2': {} - '@eslint/core@0.12.0': + '@eslint/core@0.13.0': dependencies: '@types/json-schema': 7.0.15 @@ -5287,13 +5452,13 @@ snapshots: transitivePeerDependencies: - supports-color - '@eslint/js@9.24.0': {} + '@eslint/js@9.25.1': {} '@eslint/object-schema@2.1.6': {} - '@eslint/plugin-kit@0.2.7': + '@eslint/plugin-kit@0.2.8': dependencies: - '@eslint/core': 0.12.0 + '@eslint/core': 0.13.0 levn: 0.4.1 '@floating-ui/core@1.6.9': @@ -5320,11 +5485,11 @@ snapshots: '@humanwhocodes/retry@0.4.2': {} - '@internationalized/date@3.7.0': + '@internationalized/date@3.8.0': dependencies: '@swc/helpers': 0.5.15 - '@internationalized/number@3.6.0': + '@internationalized/number@3.6.1': dependencies: '@swc/helpers': 0.5.15 @@ -5350,27 +5515,27 @@ snapshots: '@jest/console@29.7.0': dependencies: '@jest/types': 29.6.3 - '@types/node': 22.14.1 + '@types/node': 22.15.3 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.14.1)(typescript@5.8.3))': + '@jest/core@29.7.0(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@types/node@22.15.3)(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.14.1 + '@types/node': 22.15.3 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.14.1)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@types/node@22.14.1)(typescript@5.8.3)) + jest-config: 29.7.0(@types/node@22.15.3)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@types/node@22.15.3)(typescript@5.8.3)) jest-haste-map: 29.7.0 jest-message-util: 29.7.0 jest-regex-util: 29.6.3 @@ -5395,7 +5560,7 @@ snapshots: dependencies: '@jest/fake-timers': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 22.14.1 + '@types/node': 22.15.3 jest-mock: 29.7.0 '@jest/expect-utils@29.7.0': @@ -5413,7 +5578,7 @@ snapshots: dependencies: '@jest/types': 29.6.3 '@sinonjs/fake-timers': 10.3.0 - '@types/node': 22.14.1 + '@types/node': 22.15.3 jest-message-util: 29.7.0 jest-mock: 29.7.0 jest-util: 29.7.0 @@ -5435,7 +5600,7 @@ snapshots: '@jest/transform': 29.7.0 '@jest/types': 29.6.3 '@jridgewell/trace-mapping': 0.3.25 - '@types/node': 22.14.1 + '@types/node': 22.15.3 chalk: 4.1.2 collect-v8-coverage: 1.0.2 exit: 0.1.2 @@ -5505,16 +5670,16 @@ snapshots: '@jest/schemas': 29.6.3 '@types/istanbul-lib-coverage': 2.0.6 '@types/istanbul-reports': 3.0.4 - '@types/node': 22.14.1 + '@types/node': 22.15.3 '@types/yargs': 17.0.33 chalk: 4.1.2 - '@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.39.0)(yaml@2.7.0))': + '@joshwooding/vite-plugin-react-docgen-typescript@0.5.0(typescript@5.8.3)(vite@6.3.4(@types/node@22.15.3)(jiti@2.4.2)(terser@5.39.0)(yaml@2.7.0))': dependencies: glob: 10.4.5 magic-string: 0.27.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.39.0)(yaml@2.7.0) + vite: 6.3.4(@types/node@22.15.3)(jiti@2.4.2)(terser@5.39.0)(yaml@2.7.0) optionalDependencies: typescript: 5.8.3 @@ -5548,10 +5713,10 @@ snapshots: '@juggle/resize-observer@3.4.0': {} - '@mdx-js/react@3.1.0(@types/react@19.1.1)(react@19.1.0)': + '@mdx-js/react@3.1.0(@types/react@19.1.2)(react@19.1.0)': dependencies: '@types/mdx': 2.0.13 - '@types/react': 19.1.1 + '@types/react': 19.1.2 react: 19.1.0 '@nodelib/fs.scandir@2.1.5': @@ -5566,16 +5731,16 @@ snapshots: '@nodelib/fs.scandir': 2.1.5 fastq: 1.19.0 - '@pandacss/is-valid-prop@0.41.0': {} + '@pandacss/is-valid-prop@0.53.6': {} '@pkgjs/parseargs@0.11.0': optional: true - '@playwright/test@1.51.1': + '@playwright/test@1.52.0': dependencies: - playwright: 1.51.1 + playwright: 1.52.0 - '@puppeteer/browsers@2.10.0': + '@puppeteer/browsers@2.10.2': dependencies: debug: 4.4.0 extract-zip: 2.0.1 @@ -5588,69 +5753,72 @@ snapshots: - bare-buffer - supports-color - '@rollup/pluginutils@5.1.4(rollup@4.34.6)': + '@rollup/pluginutils@5.1.4(rollup@4.40.1)': dependencies: '@types/estree': 1.0.6 estree-walker: 2.0.2 picomatch: 4.0.2 optionalDependencies: - rollup: 4.34.6 + rollup: 4.40.1 - '@rollup/rollup-android-arm-eabi@4.34.6': + '@rollup/rollup-android-arm-eabi@4.40.1': optional: true - '@rollup/rollup-android-arm64@4.34.6': + '@rollup/rollup-android-arm64@4.40.1': optional: true - '@rollup/rollup-darwin-arm64@4.34.6': + '@rollup/rollup-darwin-arm64@4.40.1': optional: true - '@rollup/rollup-darwin-x64@4.34.6': + '@rollup/rollup-darwin-x64@4.40.1': optional: true - '@rollup/rollup-freebsd-arm64@4.34.6': + '@rollup/rollup-freebsd-arm64@4.40.1': optional: true - '@rollup/rollup-freebsd-x64@4.34.6': + '@rollup/rollup-freebsd-x64@4.40.1': optional: true - '@rollup/rollup-linux-arm-gnueabihf@4.34.6': + '@rollup/rollup-linux-arm-gnueabihf@4.40.1': optional: true - '@rollup/rollup-linux-arm-musleabihf@4.34.6': + '@rollup/rollup-linux-arm-musleabihf@4.40.1': optional: true - '@rollup/rollup-linux-arm64-gnu@4.34.6': + '@rollup/rollup-linux-arm64-gnu@4.40.1': optional: true - '@rollup/rollup-linux-arm64-musl@4.34.6': + '@rollup/rollup-linux-arm64-musl@4.40.1': optional: true - '@rollup/rollup-linux-loongarch64-gnu@4.34.6': + '@rollup/rollup-linux-loongarch64-gnu@4.40.1': optional: true - '@rollup/rollup-linux-powerpc64le-gnu@4.34.6': + '@rollup/rollup-linux-powerpc64le-gnu@4.40.1': optional: true - '@rollup/rollup-linux-riscv64-gnu@4.34.6': + '@rollup/rollup-linux-riscv64-gnu@4.40.1': optional: true - '@rollup/rollup-linux-s390x-gnu@4.34.6': + '@rollup/rollup-linux-riscv64-musl@4.40.1': optional: true - '@rollup/rollup-linux-x64-gnu@4.34.6': + '@rollup/rollup-linux-s390x-gnu@4.40.1': optional: true - '@rollup/rollup-linux-x64-musl@4.34.6': + '@rollup/rollup-linux-x64-gnu@4.40.1': optional: true - '@rollup/rollup-win32-arm64-msvc@4.34.6': + '@rollup/rollup-linux-x64-musl@4.40.1': optional: true - '@rollup/rollup-win32-ia32-msvc@4.34.6': + '@rollup/rollup-win32-arm64-msvc@4.40.1': optional: true - '@rollup/rollup-win32-x64-msvc@4.34.6': + '@rollup/rollup-win32-ia32-msvc@4.40.1': + optional: true + + '@rollup/rollup-win32-x64-msvc@4.40.1': optional: true '@rtsao/scc@1.1.0': {} @@ -5690,9 +5858,9 @@ snapshots: storybook: 8.6.12(prettier@3.5.3) ts-dedent: 2.2.0 - '@storybook/addon-docs@8.6.12(@types/react@19.1.1)(storybook@8.6.12(prettier@3.5.3))': + '@storybook/addon-docs@8.6.12(@types/react@19.1.2)(storybook@8.6.12(prettier@3.5.3))': dependencies: - '@mdx-js/react': 3.1.0(@types/react@19.1.1)(react@19.1.0) + '@mdx-js/react': 3.1.0(@types/react@19.1.2)(react@19.1.0) '@storybook/blocks': 8.6.12(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(storybook@8.6.12(prettier@3.5.3)) '@storybook/csf-plugin': 8.6.12(storybook@8.6.12(prettier@3.5.3)) '@storybook/react-dom-shim': 8.6.12(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(storybook@8.6.12(prettier@3.5.3)) @@ -5703,12 +5871,12 @@ snapshots: transitivePeerDependencies: - '@types/react' - '@storybook/addon-essentials@8.6.12(@types/react@19.1.1)(storybook@8.6.12(prettier@3.5.3))': + '@storybook/addon-essentials@8.6.12(@types/react@19.1.2)(storybook@8.6.12(prettier@3.5.3))': dependencies: '@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-docs': 8.6.12(@types/react@19.1.2)(storybook@8.6.12(prettier@3.5.3)) '@storybook/addon-highlight': 8.6.12(storybook@8.6.12(prettier@3.5.3)) '@storybook/addon-measure': 8.6.12(storybook@8.6.12(prettier@3.5.3)) '@storybook/addon-outline': 8.6.12(storybook@8.6.12(prettier@3.5.3)) @@ -5770,13 +5938,13 @@ snapshots: react: 19.1.0 react-dom: 19.1.0(react@19.1.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.39.0)(yaml@2.7.0))': + '@storybook/builder-vite@8.6.12(storybook@8.6.12(prettier@3.5.3))(vite@6.3.4(@types/node@22.15.3)(jiti@2.4.2)(terser@5.39.0)(yaml@2.7.0))': dependencies: '@storybook/csf-plugin': 8.6.12(storybook@8.6.12(prettier@3.5.3)) browser-assert: 1.2.1 storybook: 8.6.12(prettier@3.5.3) ts-dedent: 2.2.0 - vite: 6.2.6(@types/node@22.14.1)(jiti@2.4.2)(terser@5.39.0)(yaml@2.7.0) + vite: 6.3.4(@types/node@22.15.3)(jiti@2.4.2)(terser@5.39.0)(yaml@2.7.0) '@storybook/components@8.6.12(storybook@8.6.12(prettier@3.5.3))': dependencies: @@ -5833,11 +6001,11 @@ snapshots: react-dom: 19.1.0(react@19.1.0) storybook: 8.6.12(prettier@3.5.3) - '@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.39.0)(yaml@2.7.0))': + '@storybook/react-vite@8.6.12(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(rollup@4.40.1)(storybook@8.6.12(prettier@3.5.3))(typescript@5.8.3)(vite@6.3.4(@types/node@22.15.3)(jiti@2.4.2)(terser@5.39.0)(yaml@2.7.0))': dependencies: - '@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.39.0)(yaml@2.7.0)) - '@rollup/pluginutils': 5.1.4(rollup@4.34.6) - '@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.39.0)(yaml@2.7.0)) + '@joshwooding/vite-plugin-react-docgen-typescript': 0.5.0(typescript@5.8.3)(vite@6.3.4(@types/node@22.15.3)(jiti@2.4.2)(terser@5.39.0)(yaml@2.7.0)) + '@rollup/pluginutils': 5.1.4(rollup@4.40.1) + '@storybook/builder-vite': 8.6.12(storybook@8.6.12(prettier@3.5.3))(vite@6.3.4(@types/node@22.15.3)(jiti@2.4.2)(terser@5.39.0)(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 @@ -5847,7 +6015,7 @@ snapshots: resolve: 1.22.10 storybook: 8.6.12(prettier@3.5.3) tsconfig-paths: 4.2.0 - vite: 6.2.6(@types/node@22.14.1)(jiti@2.4.2)(terser@5.39.0)(yaml@2.7.0) + vite: 6.3.4(@types/node@22.15.3)(jiti@2.4.2)(terser@5.39.0)(yaml@2.7.0) transitivePeerDependencies: - rollup - supports-color @@ -5896,15 +6064,15 @@ snapshots: lodash: 4.17.21 redent: 3.0.0 - '@testing-library/react@16.3.0(@testing-library/dom@10.4.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/react@16.3.0(@testing-library/dom@10.4.0)(@types/react-dom@19.1.3(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': dependencies: '@babel/runtime': 7.26.7 '@testing-library/dom': 10.4.0 react: 19.1.0 react-dom: 19.1.0(react@19.1.0) optionalDependencies: - '@types/react': 19.1.1 - '@types/react-dom': 19.1.2(@types/react@19.1.1) + '@types/react': 19.1.2 + '@types/react-dom': 19.1.3(@types/react@19.1.2) '@testing-library/user-event@14.6.1(@testing-library/dom@10.4.0)': dependencies: @@ -5959,8 +6127,6 @@ snapshots: '@types/cli-table@0.3.4': {} - '@types/cookie@0.6.0': {} - '@types/debug@4.1.12': dependencies: '@types/ms': 2.1.0 @@ -5969,11 +6135,13 @@ snapshots: '@types/estree@1.0.6': {} + '@types/estree@1.0.7': {} + '@types/gensync@1.0.4': {} '@types/graceful-fs@4.1.9': dependencies: - '@types/node': 22.14.1 + '@types/node': 22.15.3 '@types/istanbul-lib-coverage@2.0.6': {} @@ -5994,7 +6162,7 @@ snapshots: '@types/jsdom@20.0.1': dependencies: - '@types/node': 22.14.1 + '@types/node': 22.15.3 '@types/tough-cookie': 4.0.5 parse5: 7.2.1 @@ -6016,21 +6184,21 @@ snapshots: '@types/ms@2.1.0': {} - '@types/node@22.14.1': + '@types/node@22.15.3': dependencies: undici-types: 6.21.0 '@types/parse-json@4.0.2': {} - '@types/react-dom@19.1.2(@types/react@19.1.1)': + '@types/react-dom@19.1.3(@types/react@19.1.2)': dependencies: - '@types/react': 19.1.1 + '@types/react': 19.1.2 - '@types/react-transition-group@4.4.12(@types/react@19.1.1)': + '@types/react-transition-group@4.4.12(@types/react@19.1.2)': dependencies: - '@types/react': 19.1.1 + '@types/react': 19.1.2 - '@types/react@19.1.1': + '@types/react@19.1.2': dependencies: csstype: 3.1.3 @@ -6052,18 +6220,18 @@ snapshots: '@types/yauzl@2.10.3': dependencies: - '@types/node': 22.14.1 + '@types/node': 22.15.3 optional: true - '@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)': + '@typescript-eslint/eslint-plugin@8.31.1(@typescript-eslint/parser@8.31.1(eslint@9.25.1(jiti@2.4.2))(typescript@5.8.3))(eslint@9.25.1(jiti@2.4.2))(typescript@5.8.3)': dependencies: '@eslint-community/regexpp': 4.12.1 - '@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) + '@typescript-eslint/parser': 8.31.1(eslint@9.25.1(jiti@2.4.2))(typescript@5.8.3) + '@typescript-eslint/scope-manager': 8.31.1 + '@typescript-eslint/type-utils': 8.31.1(eslint@9.25.1(jiti@2.4.2))(typescript@5.8.3) + '@typescript-eslint/utils': 8.31.1(eslint@9.25.1(jiti@2.4.2))(typescript@5.8.3) + '@typescript-eslint/visitor-keys': 8.31.1 + eslint: 9.25.1(jiti@2.4.2) graphemer: 1.4.0 ignore: 5.3.2 natural-compare: 1.4.0 @@ -6072,14 +6240,14 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/parser@8.30.0(eslint@9.24.0(jiti@2.4.2))(typescript@5.8.3)': + '@typescript-eslint/parser@8.31.1(eslint@9.25.1(jiti@2.4.2))(typescript@5.8.3)': dependencies: - '@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 + '@typescript-eslint/scope-manager': 8.31.1 + '@typescript-eslint/types': 8.31.1 + '@typescript-eslint/typescript-estree': 8.31.1(typescript@5.8.3) + '@typescript-eslint/visitor-keys': 8.31.1 debug: 4.4.0 - eslint: 9.24.0(jiti@2.4.2) + eslint: 9.25.1(jiti@2.4.2) typescript: 5.8.3 transitivePeerDependencies: - supports-color @@ -6089,17 +6257,17 @@ snapshots: '@typescript-eslint/types': 8.27.0 '@typescript-eslint/visitor-keys': 8.27.0 - '@typescript-eslint/scope-manager@8.30.0': + '@typescript-eslint/scope-manager@8.31.1': dependencies: - '@typescript-eslint/types': 8.30.0 - '@typescript-eslint/visitor-keys': 8.30.0 + '@typescript-eslint/types': 8.31.1 + '@typescript-eslint/visitor-keys': 8.31.1 - '@typescript-eslint/type-utils@8.30.0(eslint@9.24.0(jiti@2.4.2))(typescript@5.8.3)': + '@typescript-eslint/type-utils@8.31.1(eslint@9.25.1(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) + '@typescript-eslint/typescript-estree': 8.31.1(typescript@5.8.3) + '@typescript-eslint/utils': 8.31.1(eslint@9.25.1(jiti@2.4.2))(typescript@5.8.3) debug: 4.4.0 - eslint: 9.24.0(jiti@2.4.2) + eslint: 9.25.1(jiti@2.4.2) ts-api-utils: 2.0.1(typescript@5.8.3) typescript: 5.8.3 transitivePeerDependencies: @@ -6107,7 +6275,7 @@ snapshots: '@typescript-eslint/types@8.27.0': {} - '@typescript-eslint/types@8.30.0': {} + '@typescript-eslint/types@8.31.1': {} '@typescript-eslint/typescript-estree@8.27.0(typescript@5.8.3)': dependencies: @@ -6123,10 +6291,10 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/typescript-estree@8.30.0(typescript@5.8.3)': + '@typescript-eslint/typescript-estree@8.31.1(typescript@5.8.3)': dependencies: - '@typescript-eslint/types': 8.30.0 - '@typescript-eslint/visitor-keys': 8.30.0 + '@typescript-eslint/types': 8.31.1 + '@typescript-eslint/visitor-keys': 8.31.1 debug: 4.4.0 fast-glob: 3.3.3 is-glob: 4.0.3 @@ -6137,24 +6305,24 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/utils@8.27.0(eslint@9.24.0(jiti@2.4.2))(typescript@5.8.3)': + '@typescript-eslint/utils@8.27.0(eslint@9.25.1(jiti@2.4.2))(typescript@5.8.3)': dependencies: - '@eslint-community/eslint-utils': 4.4.1(eslint@9.24.0(jiti@2.4.2)) + '@eslint-community/eslint-utils': 4.4.1(eslint@9.25.1(jiti@2.4.2)) '@typescript-eslint/scope-manager': 8.27.0 '@typescript-eslint/types': 8.27.0 '@typescript-eslint/typescript-estree': 8.27.0(typescript@5.8.3) - eslint: 9.24.0(jiti@2.4.2) + eslint: 9.25.1(jiti@2.4.2) typescript: 5.8.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/utils@8.30.0(eslint@9.24.0(jiti@2.4.2))(typescript@5.8.3)': + '@typescript-eslint/utils@8.31.1(eslint@9.25.1(jiti@2.4.2))(typescript@5.8.3)': dependencies: - '@eslint-community/eslint-utils': 4.4.1(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) + '@eslint-community/eslint-utils': 4.4.1(eslint@9.25.1(jiti@2.4.2)) + '@typescript-eslint/scope-manager': 8.31.1 + '@typescript-eslint/types': 8.31.1 + '@typescript-eslint/typescript-estree': 8.31.1(typescript@5.8.3) + eslint: 9.25.1(jiti@2.4.2) typescript: 5.8.3 transitivePeerDependencies: - supports-color @@ -6164,541 +6332,556 @@ snapshots: '@typescript-eslint/types': 8.27.0 eslint-visitor-keys: 4.2.0 - '@typescript-eslint/visitor-keys@8.30.0': + '@typescript-eslint/visitor-keys@8.31.1': dependencies: - '@typescript-eslint/types': 8.30.0 + '@typescript-eslint/types': 8.31.1 eslint-visitor-keys: 4.2.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.39.0)(yaml@2.7.0))': + '@vitejs/plugin-react@4.4.1(vite@6.3.4(@types/node@22.15.3)(jiti@2.4.2)(terser@5.39.0)(yaml@2.7.0))': dependencies: - '@babel/core': 7.26.8 - '@babel/plugin-transform-react-jsx-self': 7.25.9(@babel/core@7.26.8) - '@babel/plugin-transform-react-jsx-source': 7.25.9(@babel/core@7.26.8) + '@babel/core': 7.27.1 + '@babel/plugin-transform-react-jsx-self': 7.25.9(@babel/core@7.27.1) + '@babel/plugin-transform-react-jsx-source': 7.25.9(@babel/core@7.27.1) '@types/babel__core': 7.20.5 - react-refresh: 0.14.2 - vite: 6.2.6(@types/node@22.14.1)(jiti@2.4.2)(terser@5.39.0)(yaml@2.7.0) + react-refresh: 0.17.0 + vite: 6.3.4(@types/node@22.15.3)(jiti@2.4.2)(terser@5.39.0)(yaml@2.7.0) transitivePeerDependencies: - supports-color - '@vitest/expect@3.1.1': + '@vitest/expect@3.1.2': dependencies: - '@vitest/spy': 3.1.1 - '@vitest/utils': 3.1.1 + '@vitest/spy': 3.1.2 + '@vitest/utils': 3.1.2 chai: 5.2.0 tinyrainbow: 2.0.0 - '@vitest/mocker@3.1.1(vite@6.2.6(@types/node@22.14.1)(jiti@2.4.2)(terser@5.39.0)(yaml@2.7.0))': + '@vitest/mocker@3.1.2(vite@6.3.4(@types/node@22.15.3)(jiti@2.4.2)(terser@5.39.0)(yaml@2.7.0))': dependencies: - '@vitest/spy': 3.1.1 + '@vitest/spy': 3.1.2 estree-walker: 3.0.3 magic-string: 0.30.17 optionalDependencies: - vite: 6.2.6(@types/node@22.14.1)(jiti@2.4.2)(terser@5.39.0)(yaml@2.7.0) + vite: 6.3.4(@types/node@22.15.3)(jiti@2.4.2)(terser@5.39.0)(yaml@2.7.0) - '@vitest/pretty-format@3.1.1': + '@vitest/pretty-format@3.1.2': dependencies: tinyrainbow: 2.0.0 - '@vitest/runner@3.1.1': + '@vitest/runner@3.1.2': dependencies: - '@vitest/utils': 3.1.1 + '@vitest/utils': 3.1.2 pathe: 2.0.3 - '@vitest/snapshot@3.1.1': + '@vitest/snapshot@3.1.2': dependencies: - '@vitest/pretty-format': 3.1.1 + '@vitest/pretty-format': 3.1.2 magic-string: 0.30.17 pathe: 2.0.3 - '@vitest/spy@3.1.1': + '@vitest/spy@3.1.2': dependencies: tinyspy: 3.0.2 - '@vitest/utils@3.1.1': + '@vitest/utils@3.1.2': dependencies: - '@vitest/pretty-format': 3.1.1 + '@vitest/pretty-format': 3.1.2 loupe: 3.1.3 tinyrainbow: 2.0.0 '@xobotyi/scrollbar-width@1.9.5': {} - '@zag-js/accordion@1.8.2': + '@zag-js/accordion@1.12.0': dependencies: - '@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': 1.12.0 + '@zag-js/core': 1.12.0 + '@zag-js/dom-query': 1.12.0 + '@zag-js/types': 1.12.0 + '@zag-js/utils': 1.12.0 - '@zag-js/anatomy@1.8.2': {} + '@zag-js/anatomy@1.12.0': {} - '@zag-js/aria-hidden@1.8.2': {} - - '@zag-js/auto-resize@1.8.2': + '@zag-js/angle-slider@1.12.0': dependencies: - '@zag-js/dom-query': 1.8.2 + '@zag-js/anatomy': 1.12.0 + '@zag-js/core': 1.12.0 + '@zag-js/dom-query': 1.12.0 + '@zag-js/rect-utils': 1.12.0 + '@zag-js/types': 1.12.0 + '@zag-js/utils': 1.12.0 - '@zag-js/avatar@1.8.2': + '@zag-js/aria-hidden@1.12.0': {} + + '@zag-js/auto-resize@1.12.0': dependencies: - '@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/dom-query': 1.12.0 - '@zag-js/carousel@1.8.2': + '@zag-js/avatar@1.12.0': dependencies: - '@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/anatomy': 1.12.0 + '@zag-js/core': 1.12.0 + '@zag-js/dom-query': 1.12.0 + '@zag-js/types': 1.12.0 + '@zag-js/utils': 1.12.0 - '@zag-js/checkbox@1.8.2': + '@zag-js/carousel@1.12.0': dependencies: - '@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/anatomy': 1.12.0 + '@zag-js/core': 1.12.0 + '@zag-js/dom-query': 1.12.0 + '@zag-js/scroll-snap': 1.12.0 + '@zag-js/types': 1.12.0 + '@zag-js/utils': 1.12.0 - '@zag-js/clipboard@1.8.2': + '@zag-js/checkbox@1.12.0': dependencies: - '@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': 1.12.0 + '@zag-js/core': 1.12.0 + '@zag-js/dom-query': 1.12.0 + '@zag-js/focus-visible': 1.12.0 + '@zag-js/types': 1.12.0 + '@zag-js/utils': 1.12.0 - '@zag-js/collapsible@1.8.2': + '@zag-js/clipboard@1.12.0': dependencies: - '@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': 1.12.0 + '@zag-js/core': 1.12.0 + '@zag-js/dom-query': 1.12.0 + '@zag-js/types': 1.12.0 + '@zag-js/utils': 1.12.0 - '@zag-js/collection@1.8.2': + '@zag-js/collapsible@1.12.0': dependencies: - '@zag-js/utils': 1.8.2 + '@zag-js/anatomy': 1.12.0 + '@zag-js/core': 1.12.0 + '@zag-js/dom-query': 1.12.0 + '@zag-js/types': 1.12.0 + '@zag-js/utils': 1.12.0 - '@zag-js/color-picker@1.8.2': + '@zag-js/collection@1.12.0': dependencies: - '@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/utils': 1.12.0 - '@zag-js/color-utils@1.8.2': + '@zag-js/color-picker@1.12.0': dependencies: - '@zag-js/utils': 1.8.2 + '@zag-js/anatomy': 1.12.0 + '@zag-js/color-utils': 1.12.0 + '@zag-js/core': 1.12.0 + '@zag-js/dismissable': 1.12.0 + '@zag-js/dom-query': 1.12.0 + '@zag-js/popper': 1.12.0 + '@zag-js/types': 1.12.0 + '@zag-js/utils': 1.12.0 - '@zag-js/combobox@1.8.2': + '@zag-js/color-utils@1.12.0': dependencies: - '@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/utils': 1.12.0 - '@zag-js/core@1.8.2': + '@zag-js/combobox@1.12.0': dependencies: - '@zag-js/dom-query': 1.8.2 - '@zag-js/utils': 1.8.2 + '@zag-js/anatomy': 1.12.0 + '@zag-js/aria-hidden': 1.12.0 + '@zag-js/collection': 1.12.0 + '@zag-js/core': 1.12.0 + '@zag-js/dismissable': 1.12.0 + '@zag-js/dom-query': 1.12.0 + '@zag-js/popper': 1.12.0 + '@zag-js/types': 1.12.0 + '@zag-js/utils': 1.12.0 - '@zag-js/date-picker@1.8.2(@internationalized/date@3.7.0)': + '@zag-js/core@1.12.0': dependencies: - '@internationalized/date': 3.7.0 - '@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/dom-query': 1.12.0 + '@zag-js/utils': 1.12.0 - '@zag-js/date-utils@1.8.2(@internationalized/date@3.7.0)': + '@zag-js/date-picker@1.12.0(@internationalized/date@3.8.0)': dependencies: - '@internationalized/date': 3.7.0 + '@internationalized/date': 3.8.0 + '@zag-js/anatomy': 1.12.0 + '@zag-js/core': 1.12.0 + '@zag-js/date-utils': 1.12.0(@internationalized/date@3.8.0) + '@zag-js/dismissable': 1.12.0 + '@zag-js/dom-query': 1.12.0 + '@zag-js/live-region': 1.12.0 + '@zag-js/popper': 1.12.0 + '@zag-js/types': 1.12.0 + '@zag-js/utils': 1.12.0 - '@zag-js/dialog@1.8.2': + '@zag-js/date-utils@1.12.0(@internationalized/date@3.8.0)': dependencies: - '@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 + '@internationalized/date': 3.8.0 - '@zag-js/dismissable@1.8.2': + '@zag-js/dialog@1.12.0': dependencies: - '@zag-js/dom-query': 1.8.2 - '@zag-js/interact-outside': 1.8.2 - '@zag-js/utils': 1.8.2 + '@zag-js/anatomy': 1.12.0 + '@zag-js/aria-hidden': 1.12.0 + '@zag-js/core': 1.12.0 + '@zag-js/dismissable': 1.12.0 + '@zag-js/dom-query': 1.12.0 + '@zag-js/focus-trap': 1.12.0 + '@zag-js/remove-scroll': 1.12.0 + '@zag-js/types': 1.12.0 + '@zag-js/utils': 1.12.0 - '@zag-js/dom-query@1.8.1': + '@zag-js/dismissable@1.12.0': dependencies: - '@zag-js/types': 1.8.1 + '@zag-js/dom-query': 1.12.0 + '@zag-js/interact-outside': 1.12.0 + '@zag-js/utils': 1.12.0 - '@zag-js/dom-query@1.8.2': + '@zag-js/dom-query@1.12.0': dependencies: - '@zag-js/types': 1.8.2 + '@zag-js/types': 1.12.0 - '@zag-js/editable@1.8.2': + '@zag-js/editable@1.12.0': dependencies: - '@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/anatomy': 1.12.0 + '@zag-js/core': 1.12.0 + '@zag-js/dom-query': 1.12.0 + '@zag-js/interact-outside': 1.12.0 + '@zag-js/types': 1.12.0 + '@zag-js/utils': 1.12.0 - '@zag-js/file-upload@1.8.2': + '@zag-js/file-upload@1.12.0': dependencies: - '@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/anatomy': 1.12.0 + '@zag-js/core': 1.12.0 + '@zag-js/dom-query': 1.12.0 + '@zag-js/file-utils': 1.12.0 + '@zag-js/i18n-utils': 1.12.0 + '@zag-js/types': 1.12.0 + '@zag-js/utils': 1.12.0 - '@zag-js/file-utils@1.8.1': + '@zag-js/file-utils@1.12.0': dependencies: - '@zag-js/i18n-utils': 1.8.1 + '@zag-js/i18n-utils': 1.12.0 - '@zag-js/file-utils@1.8.2': + '@zag-js/floating-panel@1.12.0': dependencies: - '@zag-js/i18n-utils': 1.8.2 + '@zag-js/anatomy': 1.12.0 + '@zag-js/core': 1.12.0 + '@zag-js/dismissable': 1.12.0 + '@zag-js/dom-query': 1.12.0 + '@zag-js/popper': 1.12.0 + '@zag-js/rect-utils': 1.12.0 + '@zag-js/store': 1.12.0 + '@zag-js/types': 1.12.0 + '@zag-js/utils': 1.12.0 - '@zag-js/focus-trap@1.8.2': + '@zag-js/focus-trap@1.12.0': dependencies: - '@zag-js/dom-query': 1.8.2 + '@zag-js/dom-query': 1.12.0 - '@zag-js/focus-visible@1.8.2': + '@zag-js/focus-visible@1.12.0': dependencies: - '@zag-js/dom-query': 1.8.2 + '@zag-js/dom-query': 1.12.0 - '@zag-js/highlight-word@1.8.2': {} + '@zag-js/highlight-word@1.12.0': {} - '@zag-js/hover-card@1.8.2': + '@zag-js/hover-card@1.12.0': 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/types': 1.8.2 - '@zag-js/utils': 1.8.2 + '@zag-js/anatomy': 1.12.0 + '@zag-js/core': 1.12.0 + '@zag-js/dismissable': 1.12.0 + '@zag-js/dom-query': 1.12.0 + '@zag-js/popper': 1.12.0 + '@zag-js/types': 1.12.0 + '@zag-js/utils': 1.12.0 - '@zag-js/i18n-utils@1.8.1': + '@zag-js/i18n-utils@1.12.0': dependencies: - '@zag-js/dom-query': 1.8.1 + '@zag-js/dom-query': 1.12.0 - '@zag-js/i18n-utils@1.8.2': + '@zag-js/interact-outside@1.12.0': dependencies: - '@zag-js/dom-query': 1.8.2 + '@zag-js/dom-query': 1.12.0 + '@zag-js/utils': 1.12.0 - '@zag-js/interact-outside@1.8.2': + '@zag-js/listbox@1.12.0': dependencies: - '@zag-js/dom-query': 1.8.2 - '@zag-js/utils': 1.8.2 + '@zag-js/anatomy': 1.12.0 + '@zag-js/collection': 1.12.0 + '@zag-js/core': 1.12.0 + '@zag-js/dom-query': 1.12.0 + '@zag-js/focus-visible': 1.12.0 + '@zag-js/types': 1.12.0 + '@zag-js/utils': 1.12.0 - '@zag-js/live-region@1.8.2': {} + '@zag-js/live-region@1.12.0': {} - '@zag-js/menu@1.8.2': + '@zag-js/menu@1.12.0': 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/anatomy': 1.12.0 + '@zag-js/core': 1.12.0 + '@zag-js/dismissable': 1.12.0 + '@zag-js/dom-query': 1.12.0 + '@zag-js/popper': 1.12.0 + '@zag-js/rect-utils': 1.12.0 + '@zag-js/types': 1.12.0 + '@zag-js/utils': 1.12.0 - '@zag-js/number-input@1.8.2': + '@zag-js/number-input@1.12.0': dependencies: - '@internationalized/number': 3.6.0 - '@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 + '@internationalized/number': 3.6.1 + '@zag-js/anatomy': 1.12.0 + '@zag-js/core': 1.12.0 + '@zag-js/dom-query': 1.12.0 + '@zag-js/types': 1.12.0 + '@zag-js/utils': 1.12.0 - '@zag-js/pagination@1.8.2': + '@zag-js/pagination@1.12.0': dependencies: - '@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': 1.12.0 + '@zag-js/core': 1.12.0 + '@zag-js/dom-query': 1.12.0 + '@zag-js/types': 1.12.0 + '@zag-js/utils': 1.12.0 - '@zag-js/pin-input@1.8.2': + '@zag-js/pin-input@1.12.0': dependencies: - '@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': 1.12.0 + '@zag-js/core': 1.12.0 + '@zag-js/dom-query': 1.12.0 + '@zag-js/types': 1.12.0 + '@zag-js/utils': 1.12.0 - '@zag-js/popover@1.8.2': + '@zag-js/popover@1.12.0': dependencies: - '@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/anatomy': 1.12.0 + '@zag-js/aria-hidden': 1.12.0 + '@zag-js/core': 1.12.0 + '@zag-js/dismissable': 1.12.0 + '@zag-js/dom-query': 1.12.0 + '@zag-js/focus-trap': 1.12.0 + '@zag-js/popper': 1.12.0 + '@zag-js/remove-scroll': 1.12.0 + '@zag-js/types': 1.12.0 + '@zag-js/utils': 1.12.0 - '@zag-js/popper@1.8.2': + '@zag-js/popper@1.12.0': dependencies: '@floating-ui/dom': 1.6.13 - '@zag-js/dom-query': 1.8.2 - '@zag-js/utils': 1.8.2 + '@zag-js/dom-query': 1.12.0 + '@zag-js/utils': 1.12.0 - '@zag-js/presence@1.8.2': + '@zag-js/presence@1.12.0': dependencies: - '@zag-js/core': 1.8.2 - '@zag-js/dom-query': 1.8.2 - '@zag-js/types': 1.8.2 + '@zag-js/core': 1.12.0 + '@zag-js/dom-query': 1.12.0 + '@zag-js/types': 1.12.0 - '@zag-js/progress@1.8.2': + '@zag-js/progress@1.12.0': dependencies: - '@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': 1.12.0 + '@zag-js/core': 1.12.0 + '@zag-js/dom-query': 1.12.0 + '@zag-js/types': 1.12.0 + '@zag-js/utils': 1.12.0 - '@zag-js/qr-code@1.8.2': + '@zag-js/qr-code@1.12.0': dependencies: - '@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': 1.12.0 + '@zag-js/core': 1.12.0 + '@zag-js/dom-query': 1.12.0 + '@zag-js/types': 1.12.0 + '@zag-js/utils': 1.12.0 proxy-memoize: 3.0.1 uqr: 0.1.2 - '@zag-js/radio-group@1.8.2': + '@zag-js/radio-group@1.12.0': dependencies: - '@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/anatomy': 1.12.0 + '@zag-js/core': 1.12.0 + '@zag-js/dom-query': 1.12.0 + '@zag-js/focus-visible': 1.12.0 + '@zag-js/types': 1.12.0 + '@zag-js/utils': 1.12.0 - '@zag-js/rating-group@1.8.2': + '@zag-js/rating-group@1.12.0': dependencies: - '@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': 1.12.0 + '@zag-js/core': 1.12.0 + '@zag-js/dom-query': 1.12.0 + '@zag-js/types': 1.12.0 + '@zag-js/utils': 1.12.0 - '@zag-js/react@1.8.2(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + '@zag-js/react@1.12.0(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': dependencies: - '@zag-js/core': 1.8.2 - '@zag-js/store': 1.8.2 - '@zag-js/types': 1.8.2 - '@zag-js/utils': 1.8.2 + '@zag-js/core': 1.12.0 + '@zag-js/store': 1.12.0 + '@zag-js/types': 1.12.0 + '@zag-js/utils': 1.12.0 react: 19.1.0 react-dom: 19.1.0(react@19.1.0) - '@zag-js/rect-utils@1.8.2': {} + '@zag-js/rect-utils@1.12.0': {} - '@zag-js/remove-scroll@1.8.2': + '@zag-js/remove-scroll@1.12.0': dependencies: - '@zag-js/dom-query': 1.8.2 + '@zag-js/dom-query': 1.12.0 - '@zag-js/scroll-snap@1.8.2': + '@zag-js/scroll-snap@1.12.0': dependencies: - '@zag-js/dom-query': 1.8.2 + '@zag-js/dom-query': 1.12.0 - '@zag-js/select@1.8.2': + '@zag-js/select@1.12.0': dependencies: - '@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/anatomy': 1.12.0 + '@zag-js/collection': 1.12.0 + '@zag-js/core': 1.12.0 + '@zag-js/dismissable': 1.12.0 + '@zag-js/dom-query': 1.12.0 + '@zag-js/popper': 1.12.0 + '@zag-js/types': 1.12.0 + '@zag-js/utils': 1.12.0 - '@zag-js/signature-pad@1.8.2': + '@zag-js/signature-pad@1.12.0': dependencies: - '@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': 1.12.0 + '@zag-js/core': 1.12.0 + '@zag-js/dom-query': 1.12.0 + '@zag-js/types': 1.12.0 + '@zag-js/utils': 1.12.0 perfect-freehand: 1.2.2 - '@zag-js/slider@1.8.2': + '@zag-js/slider@1.12.0': dependencies: - '@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': 1.12.0 + '@zag-js/core': 1.12.0 + '@zag-js/dom-query': 1.12.0 + '@zag-js/types': 1.12.0 + '@zag-js/utils': 1.12.0 - '@zag-js/splitter@1.8.2': + '@zag-js/splitter@1.12.0': dependencies: - '@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': 1.12.0 + '@zag-js/core': 1.12.0 + '@zag-js/dom-query': 1.12.0 + '@zag-js/types': 1.12.0 + '@zag-js/utils': 1.12.0 - '@zag-js/steps@1.8.2': + '@zag-js/steps@1.12.0': dependencies: - '@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': 1.12.0 + '@zag-js/core': 1.12.0 + '@zag-js/dom-query': 1.12.0 + '@zag-js/types': 1.12.0 + '@zag-js/utils': 1.12.0 - '@zag-js/store@1.8.2': + '@zag-js/store@1.12.0': dependencies: proxy-compare: 3.0.1 - '@zag-js/switch@1.8.2': + '@zag-js/switch@1.12.0': dependencies: - '@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/anatomy': 1.12.0 + '@zag-js/core': 1.12.0 + '@zag-js/dom-query': 1.12.0 + '@zag-js/focus-visible': 1.12.0 + '@zag-js/types': 1.12.0 + '@zag-js/utils': 1.12.0 - '@zag-js/tabs@1.8.2': + '@zag-js/tabs@1.12.0': dependencies: - '@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': 1.12.0 + '@zag-js/core': 1.12.0 + '@zag-js/dom-query': 1.12.0 + '@zag-js/types': 1.12.0 + '@zag-js/utils': 1.12.0 - '@zag-js/tags-input@1.8.2': + '@zag-js/tags-input@1.12.0': dependencies: - '@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/anatomy': 1.12.0 + '@zag-js/auto-resize': 1.12.0 + '@zag-js/core': 1.12.0 + '@zag-js/dom-query': 1.12.0 + '@zag-js/interact-outside': 1.12.0 + '@zag-js/live-region': 1.12.0 + '@zag-js/types': 1.12.0 + '@zag-js/utils': 1.12.0 - '@zag-js/time-picker@1.8.2(@internationalized/date@3.7.0)': + '@zag-js/time-picker@1.12.0(@internationalized/date@3.8.0)': dependencies: - '@internationalized/date': 3.7.0 - '@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 + '@internationalized/date': 3.8.0 + '@zag-js/anatomy': 1.12.0 + '@zag-js/core': 1.12.0 + '@zag-js/dismissable': 1.12.0 + '@zag-js/dom-query': 1.12.0 + '@zag-js/popper': 1.12.0 + '@zag-js/types': 1.12.0 + '@zag-js/utils': 1.12.0 - '@zag-js/timer@1.8.2': + '@zag-js/timer@1.12.0': dependencies: - '@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': 1.12.0 + '@zag-js/core': 1.12.0 + '@zag-js/dom-query': 1.12.0 + '@zag-js/types': 1.12.0 + '@zag-js/utils': 1.12.0 - '@zag-js/toast@1.8.2': + '@zag-js/toast@1.12.0': 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/types': 1.8.2 - '@zag-js/utils': 1.8.2 + '@zag-js/anatomy': 1.12.0 + '@zag-js/core': 1.12.0 + '@zag-js/dismissable': 1.12.0 + '@zag-js/dom-query': 1.12.0 + '@zag-js/types': 1.12.0 + '@zag-js/utils': 1.12.0 - '@zag-js/toggle-group@1.8.2': + '@zag-js/toggle-group@1.12.0': dependencies: - '@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': 1.12.0 + '@zag-js/core': 1.12.0 + '@zag-js/dom-query': 1.12.0 + '@zag-js/types': 1.12.0 + '@zag-js/utils': 1.12.0 - '@zag-js/toggle@1.8.2': + '@zag-js/toggle@1.12.0': dependencies: - '@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': 1.12.0 + '@zag-js/core': 1.12.0 + '@zag-js/dom-query': 1.12.0 + '@zag-js/types': 1.12.0 + '@zag-js/utils': 1.12.0 - '@zag-js/tooltip@1.8.2': + '@zag-js/tooltip@1.12.0': dependencies: - '@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/anatomy': 1.12.0 + '@zag-js/core': 1.12.0 + '@zag-js/dom-query': 1.12.0 + '@zag-js/focus-visible': 1.12.0 + '@zag-js/popper': 1.12.0 + '@zag-js/store': 1.12.0 + '@zag-js/types': 1.12.0 + '@zag-js/utils': 1.12.0 - '@zag-js/tour@1.8.2': + '@zag-js/tour@1.12.0': 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/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/anatomy': 1.12.0 + '@zag-js/core': 1.12.0 + '@zag-js/dismissable': 1.12.0 + '@zag-js/dom-query': 1.12.0 + '@zag-js/focus-trap': 1.12.0 + '@zag-js/interact-outside': 1.12.0 + '@zag-js/popper': 1.12.0 + '@zag-js/types': 1.12.0 + '@zag-js/utils': 1.12.0 - '@zag-js/tree-view@1.8.2': + '@zag-js/tree-view@1.12.0': 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/anatomy': 1.12.0 + '@zag-js/collection': 1.12.0 + '@zag-js/core': 1.12.0 + '@zag-js/dom-query': 1.12.0 + '@zag-js/types': 1.12.0 + '@zag-js/utils': 1.12.0 - '@zag-js/types@1.8.1': + '@zag-js/types@1.12.0': dependencies: csstype: 3.1.3 - '@zag-js/types@1.8.2': - dependencies: - csstype: 3.1.3 - - '@zag-js/utils@1.8.2': {} + '@zag-js/utils@1.12.0': {} abab@2.0.6: {} @@ -7080,11 +7263,11 @@ snapshots: optionalDependencies: fsevents: 2.3.3 - chromium-bidi@3.0.0(devtools-protocol@0.0.1425554): + chromium-bidi@4.1.1(devtools-protocol@0.0.1425554): dependencies: devtools-protocol: 0.0.1425554 mitt: 3.0.1 - zod: 3.24.2 + zod: 3.24.3 ci-info@3.9.0: {} @@ -7111,9 +7294,6 @@ snapshots: strip-ansi: 6.0.1 wrap-ansi: 7.0.0 - clone@1.0.4: - optional: true - co@4.6.0: {} collect-v8-coverage@1.0.2: {} @@ -7170,13 +7350,13 @@ snapshots: optionalDependencies: typescript: 5.8.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)): + create-jest@29.7.0(@types/node@22.15.3)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@types/node@22.15.3)(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.14.1)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@types/node@22.14.1)(typescript@5.8.3)) + jest-config: 29.7.0(@types/node@22.15.3)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@types/node@22.15.3)(typescript@5.8.3)) jest-util: 29.7.0 prompts: 2.4.2 transitivePeerDependencies: @@ -7270,11 +7450,6 @@ snapshots: deepmerge@4.3.1: {} - defaults@1.0.4: - dependencies: - clone: 1.0.4 - optional: true - define-data-property@1.1.4: dependencies: es-define-property: 1.0.1 @@ -7340,12 +7515,6 @@ snapshots: eastasianwidth@0.2.0: {} - easy-table@1.2.0: - dependencies: - ansi-regex: 5.0.1 - optionalDependencies: - wcwidth: 1.0.1 - electron-to-chromium@1.5.97: {} emittery@0.13.1: {} @@ -7538,17 +7707,17 @@ snapshots: transitivePeerDependencies: - supports-color - 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)): + eslint-module-utils@2.12.0(@typescript-eslint/parser@8.31.1(eslint@9.25.1(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint@9.25.1(jiti@2.4.2)): dependencies: debug: 3.2.7 optionalDependencies: - '@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-eslint/parser': 8.31.1(eslint@9.25.1(jiti@2.4.2))(typescript@5.8.3) + eslint: 9.25.1(jiti@2.4.2) eslint-import-resolver-node: 0.3.9 transitivePeerDependencies: - supports-color - 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)): + eslint-plugin-import@2.31.0(@typescript-eslint/parser@8.31.1(eslint@9.25.1(jiti@2.4.2))(typescript@5.8.3))(eslint@9.25.1(jiti@2.4.2)): dependencies: '@rtsao/scc': 1.1.0 array-includes: 3.1.8 @@ -7557,9 +7726,9 @@ snapshots: array.prototype.flatmap: 1.3.3 debug: 3.2.7 doctrine: 2.1.0 - eslint: 9.24.0(jiti@2.4.2) + eslint: 9.25.1(jiti@2.4.2) eslint-import-resolver-node: 0.3.9 - 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)) + eslint-module-utils: 2.12.0(@typescript-eslint/parser@8.31.1(eslint@9.25.1(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint@9.25.1(jiti@2.4.2)) hasown: 2.0.2 is-core-module: 2.16.1 is-glob: 4.0.3 @@ -7571,17 +7740,17 @@ snapshots: string.prototype.trimend: 1.0.9 tsconfig-paths: 3.15.0 optionalDependencies: - '@typescript-eslint/parser': 8.30.0(eslint@9.24.0(jiti@2.4.2))(typescript@5.8.3) + '@typescript-eslint/parser': 8.31.1(eslint@9.25.1(jiti@2.4.2))(typescript@5.8.3) transitivePeerDependencies: - eslint-import-resolver-typescript - eslint-import-resolver-webpack - supports-color - eslint-plugin-react-hooks@5.2.0(eslint@9.24.0(jiti@2.4.2)): + eslint-plugin-react-hooks@5.2.0(eslint@9.25.1(jiti@2.4.2)): dependencies: - eslint: 9.24.0(jiti@2.4.2) + eslint: 9.25.1(jiti@2.4.2) - eslint-plugin-react@7.37.5(eslint@9.24.0(jiti@2.4.2)): + eslint-plugin-react@7.37.5(eslint@9.25.1(jiti@2.4.2)): dependencies: array-includes: 3.1.8 array.prototype.findlast: 1.2.5 @@ -7589,7 +7758,7 @@ snapshots: array.prototype.tosorted: 1.1.4 doctrine: 2.1.0 es-iterator-helpers: 1.2.1 - eslint: 9.24.0(jiti@2.4.2) + eslint: 9.25.1(jiti@2.4.2) estraverse: 5.3.0 hasown: 2.0.2 jsx-ast-utils: 3.3.5 @@ -7603,11 +7772,11 @@ snapshots: string.prototype.matchall: 4.0.12 string.prototype.repeat: 1.0.0 - eslint-plugin-storybook@0.12.0(eslint@9.24.0(jiti@2.4.2))(typescript@5.8.3): + eslint-plugin-storybook@0.12.0(eslint@9.25.1(jiti@2.4.2))(typescript@5.8.3): dependencies: '@storybook/csf': 0.1.13 - '@typescript-eslint/utils': 8.27.0(eslint@9.24.0(jiti@2.4.2))(typescript@5.8.3) - eslint: 9.24.0(jiti@2.4.2) + '@typescript-eslint/utils': 8.27.0(eslint@9.25.1(jiti@2.4.2))(typescript@5.8.3) + eslint: 9.25.1(jiti@2.4.2) ts-dedent: 2.2.0 transitivePeerDependencies: - supports-color @@ -7622,16 +7791,16 @@ snapshots: eslint-visitor-keys@4.2.0: {} - eslint@9.24.0(jiti@2.4.2): + eslint@9.25.1(jiti@2.4.2): dependencies: - '@eslint-community/eslint-utils': 4.4.1(eslint@9.24.0(jiti@2.4.2)) + '@eslint-community/eslint-utils': 4.4.1(eslint@9.25.1(jiti@2.4.2)) '@eslint-community/regexpp': 4.12.1 '@eslint/config-array': 0.20.0 - '@eslint/config-helpers': 0.2.0 - '@eslint/core': 0.12.0 + '@eslint/config-helpers': 0.2.2 + '@eslint/core': 0.13.0 '@eslint/eslintrc': 3.3.1 - '@eslint/js': 9.24.0 - '@eslint/plugin-kit': 0.2.7 + '@eslint/js': 9.25.1 + '@eslint/plugin-kit': 0.2.8 '@humanfs/node': 0.16.6 '@humanwhocodes/module-importer': 1.0.1 '@humanwhocodes/retry': 0.4.2 @@ -7774,6 +7943,10 @@ snapshots: dependencies: pend: 1.2.0 + fdir@6.4.4(picomatch@4.0.2): + optionalDependencies: + picomatch: 4.0.2 + fetch-blob@3.2.0: dependencies: node-domexception: 1.0.0 @@ -7942,14 +8115,14 @@ snapshots: define-properties: 1.2.1 gopd: 1.2.0 - globby@14.0.2: + globby@14.1.0: dependencies: '@sindresorhus/merge-streams': 2.3.0 fast-glob: 3.3.3 - ignore: 5.3.2 - path-type: 5.0.0 + ignore: 7.0.4 + path-type: 6.0.0 slash: 5.1.0 - unicorn-magic: 0.1.0 + unicorn-magic: 0.3.0 gopd@1.2.0: {} @@ -8034,6 +8207,8 @@ snapshots: ignore@5.3.2: {} + ignore@7.0.4: {} + import-fresh@3.3.1: dependencies: parent-module: 1.0.1 @@ -8284,7 +8459,7 @@ snapshots: '@jest/expect': 29.7.0 '@jest/test-result': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 22.14.1 + '@types/node': 22.15.3 chalk: 4.1.2 co: 4.6.0 dedent: 1.5.3(babel-plugin-macros@3.1.0) @@ -8304,16 +8479,16 @@ snapshots: - babel-plugin-macros - supports-color - 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)): + jest-cli@29.7.0(@types/node@22.15.3)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@types/node@22.15.3)(typescript@5.8.3)): dependencies: - '@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/core': 29.7.0(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@types/node@22.15.3)(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.14.1)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@types/node@22.14.1)(typescript@5.8.3)) + create-jest: 29.7.0(@types/node@22.15.3)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@types/node@22.15.3)(typescript@5.8.3)) exit: 0.1.2 import-local: 3.2.0 - 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-config: 29.7.0(@types/node@22.15.3)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@types/node@22.15.3)(typescript@5.8.3)) jest-util: 29.7.0 jest-validate: 29.7.0 yargs: 17.7.2 @@ -8323,7 +8498,7 @@ snapshots: - supports-color - ts-node - 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-config@29.7.0(@types/node@22.15.3)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@types/node@22.15.3)(typescript@5.8.3)): dependencies: '@babel/core': 7.26.8 '@jest/test-sequencer': 29.7.0 @@ -8348,8 +8523,8 @@ snapshots: slash: 3.0.0 strip-json-comments: 3.1.1 optionalDependencies: - '@types/node': 22.14.1 - ts-node: 10.9.2(@types/node@22.14.1)(typescript@5.8.3) + '@types/node': 22.15.3 + ts-node: 10.9.2(@types/node@22.15.3)(typescript@5.8.3) transitivePeerDependencies: - babel-plugin-macros - supports-color @@ -8379,7 +8554,7 @@ snapshots: '@jest/fake-timers': 29.7.0 '@jest/types': 29.6.3 '@types/jsdom': 20.0.1 - '@types/node': 22.14.1 + '@types/node': 22.15.3 jest-mock: 29.7.0 jest-util: 29.7.0 jsdom: 20.0.3 @@ -8393,7 +8568,7 @@ snapshots: '@jest/environment': 29.7.0 '@jest/fake-timers': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 22.14.1 + '@types/node': 22.15.3 jest-mock: 29.7.0 jest-util: 29.7.0 @@ -8403,7 +8578,7 @@ snapshots: dependencies: '@jest/types': 29.6.3 '@types/graceful-fs': 4.1.9 - '@types/node': 22.14.1 + '@types/node': 22.15.3 anymatch: 3.1.3 fb-watchman: 2.0.2 graceful-fs: 4.2.11 @@ -8442,7 +8617,7 @@ snapshots: jest-mock@29.7.0: dependencies: '@jest/types': 29.6.3 - '@types/node': 22.14.1 + '@types/node': 22.15.3 jest-util: 29.7.0 jest-pnp-resolver@1.2.3(jest-resolve@29.7.0): @@ -8477,7 +8652,7 @@ snapshots: '@jest/test-result': 29.7.0 '@jest/transform': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 22.14.1 + '@types/node': 22.15.3 chalk: 4.1.2 emittery: 0.13.1 graceful-fs: 4.2.11 @@ -8505,7 +8680,7 @@ snapshots: '@jest/test-result': 29.7.0 '@jest/transform': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 22.14.1 + '@types/node': 22.15.3 chalk: 4.1.2 cjs-module-lexer: 1.4.3 collect-v8-coverage: 1.0.2 @@ -8551,7 +8726,7 @@ snapshots: jest-util@29.7.0: dependencies: '@jest/types': 29.6.3 - '@types/node': 22.14.1 + '@types/node': 22.15.3 chalk: 4.1.2 ci-info: 3.9.0 graceful-fs: 4.2.11 @@ -8570,7 +8745,7 @@ snapshots: dependencies: '@jest/test-result': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 22.14.1 + '@types/node': 22.15.3 ansi-escapes: 4.3.2 chalk: 4.1.2 emittery: 0.13.1 @@ -8579,17 +8754,17 @@ snapshots: jest-worker@29.7.0: dependencies: - '@types/node': 22.14.1 + '@types/node': 22.15.3 jest-util: 29.7.0 merge-stream: 2.0.0 supports-color: 8.1.1 - 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)): + jest@29.7.0(@types/node@22.15.3)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@types/node@22.15.3)(typescript@5.8.3)): dependencies: - '@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/core': 29.7.0(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@types/node@22.15.3)(typescript@5.8.3)) '@jest/types': 29.6.3 import-local: 3.2.0 - 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)) + jest-cli: 29.7.0(@types/node@22.15.3)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@types/node@22.15.3)(typescript@5.8.3)) transitivePeerDependencies: - '@types/node' - babel-plugin-macros @@ -8677,11 +8852,10 @@ snapshots: kleur@3.0.3: {} - knip@5.50.3(@types/node@22.14.1)(typescript@5.8.3): + knip@5.52.0(@types/node@22.15.3)(typescript@5.8.3): dependencies: '@nodelib/fs.walk': 1.2.8 - '@types/node': 22.14.1 - easy-table: 1.2.0 + '@types/node': 22.15.3 enhanced-resolve: 5.18.1 fast-glob: 3.3.3 jiti: 2.4.2 @@ -8693,8 +8867,8 @@ snapshots: smol-toml: 1.3.1 strip-json-comments: 5.0.1 typescript: 5.8.3 - zod: 3.24.2 - zod-validation-error: 3.4.0(zod@3.24.2) + zod: 3.24.3 + zod-validation-error: 3.4.0(zod@3.24.3) leven@3.1.0: {} @@ -9191,7 +9365,7 @@ snapshots: normalize-path@3.0.0: {} - npm-check-updates@17.1.18: {} + npm-check-updates@18.0.1: {} npm-run-path@4.0.1: dependencies: @@ -9320,7 +9494,7 @@ snapshots: package-json-from-dist@1.0.1: {} - package-manager-detector@0.1.2: {} + package-manager-detector@1.2.0: {} parent-module@1.0.1: dependencies: @@ -9356,7 +9530,7 @@ snapshots: path-type@4.0.0: {} - path-type@5.0.0: {} + path-type@6.0.0: {} pathe@2.0.3: {} @@ -9380,11 +9554,11 @@ snapshots: dependencies: find-up: 4.1.0 - playwright-core@1.51.1: {} + playwright-core@1.52.0: {} - playwright@1.51.1: + playwright@1.52.0: dependencies: - playwright-core: 1.51.1 + playwright-core: 1.52.0 optionalDependencies: fsevents: 2.3.2 @@ -9402,8 +9576,6 @@ snapshots: prelude-ls@1.2.1: {} - prettier@3.3.3: {} - prettier@3.5.3: {} pretty-format@27.5.1: @@ -9469,10 +9641,10 @@ snapshots: punycode@2.3.1: {} - puppeteer-core@24.6.1: + puppeteer-core@24.7.2: dependencies: - '@puppeteer/browsers': 2.10.0 - chromium-bidi: 3.0.0(devtools-protocol@0.0.1425554) + '@puppeteer/browsers': 2.10.2 + chromium-bidi: 4.1.1(devtools-protocol@0.0.1425554) debug: 4.4.0 devtools-protocol: 0.0.1425554 typed-query-selector: 2.12.0 @@ -9483,13 +9655,13 @@ snapshots: - supports-color - utf-8-validate - puppeteer@24.6.1(typescript@5.8.3): + puppeteer@24.7.2(typescript@5.8.3): dependencies: - '@puppeteer/browsers': 2.10.0 - chromium-bidi: 3.0.0(devtools-protocol@0.0.1425554) + '@puppeteer/browsers': 2.10.2 + chromium-bidi: 4.1.1(devtools-protocol@0.0.1425554) cosmiconfig: 9.0.0(typescript@5.8.3) devtools-protocol: 0.0.1425554 - puppeteer-core: 24.6.1 + puppeteer-core: 24.7.2 typed-query-selector: 2.12.0 transitivePeerDependencies: - bare-buffer @@ -9545,17 +9717,16 @@ snapshots: react-is@19.1.0: {} - react-refresh@0.14.2: {} + react-refresh@0.17.0: {} - react-router-dom@7.5.0(react-dom@19.1.0(react@19.1.0))(react@19.1.0): + react-router-dom@7.5.3(react-dom@19.1.0(react@19.1.0))(react@19.1.0): dependencies: 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.5.3(react-dom@19.1.0(react@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.5.3(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.1.0 set-cookie-parser: 2.7.1 @@ -9563,25 +9734,26 @@ snapshots: optionalDependencies: react-dom: 19.1.0(react@19.1.0) - react-select@5.10.1(@types/react@19.1.1)(react-dom@19.1.0(react@19.1.0))(react@19.1.0): + react-select@5.10.1(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0): dependencies: '@babel/runtime': 7.26.7 '@emotion/cache': 11.14.0 - '@emotion/react': 11.14.0(@types/react@19.1.1)(react@19.1.0) + '@emotion/react': 11.14.0(@types/react@19.1.2)(react@19.1.0) '@floating-ui/dom': 1.6.13 - '@types/react-transition-group': 4.4.12(@types/react@19.1.1) + '@types/react-transition-group': 4.4.12(@types/react@19.1.2) memoize-one: 6.0.0 prop-types: 15.8.1 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) + use-isomorphic-layout-effect: 1.2.0(@types/react@19.1.2)(react@19.1.0) transitivePeerDependencies: - '@types/react' - supports-color - react-speech-recognition@4.0.0(react@19.1.0): + react-speech-recognition@4.0.1(react@19.1.0): dependencies: + lodash.debounce: 4.0.8 react: 19.1.0 react-transition-group@4.4.5(react-dom@19.1.0(react@19.1.0))(react@19.1.0): @@ -9721,29 +9893,30 @@ snapshots: rfdc@1.4.1: {} - rollup@4.34.6: + rollup@4.40.1: dependencies: - '@types/estree': 1.0.6 + '@types/estree': 1.0.7 optionalDependencies: - '@rollup/rollup-android-arm-eabi': 4.34.6 - '@rollup/rollup-android-arm64': 4.34.6 - '@rollup/rollup-darwin-arm64': 4.34.6 - '@rollup/rollup-darwin-x64': 4.34.6 - '@rollup/rollup-freebsd-arm64': 4.34.6 - '@rollup/rollup-freebsd-x64': 4.34.6 - '@rollup/rollup-linux-arm-gnueabihf': 4.34.6 - '@rollup/rollup-linux-arm-musleabihf': 4.34.6 - '@rollup/rollup-linux-arm64-gnu': 4.34.6 - '@rollup/rollup-linux-arm64-musl': 4.34.6 - '@rollup/rollup-linux-loongarch64-gnu': 4.34.6 - '@rollup/rollup-linux-powerpc64le-gnu': 4.34.6 - '@rollup/rollup-linux-riscv64-gnu': 4.34.6 - '@rollup/rollup-linux-s390x-gnu': 4.34.6 - '@rollup/rollup-linux-x64-gnu': 4.34.6 - '@rollup/rollup-linux-x64-musl': 4.34.6 - '@rollup/rollup-win32-arm64-msvc': 4.34.6 - '@rollup/rollup-win32-ia32-msvc': 4.34.6 - '@rollup/rollup-win32-x64-msvc': 4.34.6 + '@rollup/rollup-android-arm-eabi': 4.40.1 + '@rollup/rollup-android-arm64': 4.40.1 + '@rollup/rollup-darwin-arm64': 4.40.1 + '@rollup/rollup-darwin-x64': 4.40.1 + '@rollup/rollup-freebsd-arm64': 4.40.1 + '@rollup/rollup-freebsd-x64': 4.40.1 + '@rollup/rollup-linux-arm-gnueabihf': 4.40.1 + '@rollup/rollup-linux-arm-musleabihf': 4.40.1 + '@rollup/rollup-linux-arm64-gnu': 4.40.1 + '@rollup/rollup-linux-arm64-musl': 4.40.1 + '@rollup/rollup-linux-loongarch64-gnu': 4.40.1 + '@rollup/rollup-linux-powerpc64le-gnu': 4.40.1 + '@rollup/rollup-linux-riscv64-gnu': 4.40.1 + '@rollup/rollup-linux-riscv64-musl': 4.40.1 + '@rollup/rollup-linux-s390x-gnu': 4.40.1 + '@rollup/rollup-linux-x64-gnu': 4.40.1 + '@rollup/rollup-linux-x64-musl': 4.40.1 + '@rollup/rollup-win32-arm64-msvc': 4.40.1 + '@rollup/rollup-win32-ia32-msvc': 4.40.1 + '@rollup/rollup-win32-x64-msvc': 4.40.1 fsevents: 2.3.3 rtl-css-js@1.16.1: @@ -10128,6 +10301,11 @@ snapshots: tinyexec@0.3.2: {} + tinyglobby@0.2.13: + dependencies: + fdir: 6.4.4(picomatch@4.0.2) + picomatch: 4.0.2 + tinypool@1.0.2: {} tinyrainbow@2.0.0: {} @@ -10165,14 +10343,14 @@ snapshots: ts-interface-checker@0.1.13: {} - ts-node@10.9.2(@types/node@22.14.1)(typescript@5.8.3): + ts-node@10.9.2(@types/node@22.15.3)(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.14.1 + '@types/node': 22.15.3 acorn: 8.14.0 acorn-walk: 8.3.4 arg: 4.1.3 @@ -10256,7 +10434,7 @@ snapshots: undici-types@6.21.0: {} - unicorn-magic@0.1.0: {} + unicorn-magic@0.3.0: {} unified@11.0.5: dependencies: @@ -10311,11 +10489,11 @@ snapshots: querystringify: 2.2.0 requires-port: 1.0.0 - use-isomorphic-layout-effect@1.2.0(@types/react@19.1.1)(react@19.1.0): + use-isomorphic-layout-effect@1.2.0(@types/react@19.1.2)(react@19.1.0): dependencies: react: 19.1.0 optionalDependencies: - '@types/react': 19.1.1 + '@types/react': 19.1.2 use-resize-observer@9.1.0(react-dom@19.1.0(react@19.1.0))(react@19.1.0): dependencies: @@ -10351,13 +10529,13 @@ snapshots: '@types/unist': 3.0.3 vfile-message: 4.0.2 - vite-node@3.1.1(@types/node@22.14.1)(jiti@2.4.2)(terser@5.39.0)(yaml@2.7.0): + vite-node@3.1.2(@types/node@22.15.3)(jiti@2.4.2)(terser@5.39.0)(yaml@2.7.0): dependencies: cac: 6.7.14 debug: 4.4.0 es-module-lexer: 1.6.0 pathe: 2.0.3 - vite: 6.2.6(@types/node@22.14.1)(jiti@2.4.2)(terser@5.39.0)(yaml@2.7.0) + vite: 6.3.4(@types/node@22.15.3)(jiti@2.4.2)(terser@5.39.0)(yaml@2.7.0) transitivePeerDependencies: - '@types/node' - jiti @@ -10372,27 +10550,30 @@ snapshots: - tsx - yaml - vite@6.2.6(@types/node@22.14.1)(jiti@2.4.2)(terser@5.39.0)(yaml@2.7.0): + vite@6.3.4(@types/node@22.15.3)(jiti@2.4.2)(terser@5.39.0)(yaml@2.7.0): dependencies: esbuild: 0.25.1 + fdir: 6.4.4(picomatch@4.0.2) + picomatch: 4.0.2 postcss: 8.5.3 - rollup: 4.34.6 + rollup: 4.40.1 + tinyglobby: 0.2.13 optionalDependencies: - '@types/node': 22.14.1 + '@types/node': 22.15.3 fsevents: 2.3.3 jiti: 2.4.2 terser: 5.39.0 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.39.0)(yaml@2.7.0): + vitest@3.1.2(@types/debug@4.1.12)(@types/node@22.15.3)(jiti@2.4.2)(jsdom@20.0.3)(terser@5.39.0)(yaml@2.7.0): dependencies: - '@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.39.0)(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 + '@vitest/expect': 3.1.2 + '@vitest/mocker': 3.1.2(vite@6.3.4(@types/node@22.15.3)(jiti@2.4.2)(terser@5.39.0)(yaml@2.7.0)) + '@vitest/pretty-format': 3.1.2 + '@vitest/runner': 3.1.2 + '@vitest/snapshot': 3.1.2 + '@vitest/spy': 3.1.2 + '@vitest/utils': 3.1.2 chai: 5.2.0 debug: 4.4.0 expect-type: 1.2.1 @@ -10401,14 +10582,15 @@ snapshots: std-env: 3.9.0 tinybench: 2.9.0 tinyexec: 0.3.2 + tinyglobby: 0.2.13 tinypool: 1.0.2 tinyrainbow: 2.0.0 - vite: 6.2.6(@types/node@22.14.1)(jiti@2.4.2)(terser@5.39.0)(yaml@2.7.0) - vite-node: 3.1.1(@types/node@22.14.1)(jiti@2.4.2)(terser@5.39.0)(yaml@2.7.0) + vite: 6.3.4(@types/node@22.15.3)(jiti@2.4.2)(terser@5.39.0)(yaml@2.7.0) + vite-node: 3.1.2(@types/node@22.15.3)(jiti@2.4.2)(terser@5.39.0)(yaml@2.7.0) why-is-node-running: 2.3.0 optionalDependencies: '@types/debug': 4.1.12 - '@types/node': 22.14.1 + '@types/node': 22.15.3 jsdom: 20.0.3 transitivePeerDependencies: - jiti @@ -10432,11 +10614,6 @@ snapshots: dependencies: makeerror: 1.0.12 - wcwidth@1.0.1: - dependencies: - defaults: 1.0.4 - optional: true - web-streams-polyfill@3.3.3: {} webidl-conversions@7.0.0: {} @@ -10567,15 +10744,15 @@ snapshots: yocto-queue@0.1.0: {} - zod-validation-error@3.4.0(zod@3.24.2): + zod-validation-error@3.4.0(zod@3.24.3): dependencies: - zod: 3.24.2 + zod: 3.24.3 - zod@3.24.2: {} + zod@3.24.3: {} - zustand@5.0.3(@types/react@19.1.1)(react@19.1.0): + zustand@5.0.3(@types/react@19.1.2)(react@19.1.0): optionalDependencies: - '@types/react': 19.1.1 + '@types/react': 19.1.2 react: 19.1.0 zwitch@2.0.4: {} diff --git a/front/src/back-api/api/album-resource.ts b/front/src/back-api/api/album-resource.ts index fd3bdda..6f7ec2c 100644 --- a/front/src/back-api/api/album-resource.ts +++ b/front/src/back-api/api/album-resource.ts @@ -15,7 +15,6 @@ import { Album, AlbumCreate, AlbumUpdate, - Long, ObjectId, ZodAlbum, isAlbum, @@ -32,12 +31,12 @@ export namespace AlbumResource { }: { restConfig: RESTConfig, params: { - id: Long, + oid: ObjectId, }, }): Promise { return RESTRequestJson({ restModel: { - endPoint: "/album/{id}", + endPoint: "/album/{oid}", requestType: HTTPRequestModel.GET, accept: HTTPMimeType.JSON, }, @@ -107,13 +106,13 @@ export namespace AlbumResource { }: { restConfig: RESTConfig, params: { - id: Long, + oid: ObjectId, }, data: AlbumUpdate, }): Promise { return RESTRequestJson({ restModel: { - endPoint: "/album/{id}", + endPoint: "/album/{oid}", requestType: HTTPRequestModel.PUT, contentType: HTTPMimeType.JSON, accept: HTTPMimeType.JSON, @@ -132,12 +131,12 @@ export namespace AlbumResource { }: { restConfig: RESTConfig, params: { - id: Long, + oid: ObjectId, }, }): Promise { return RESTRequestVoid({ restModel: { - endPoint: "/album/{id}", + endPoint: "/album/{oid}", requestType: HTTPRequestModel.DELETE, contentType: HTTPMimeType.TEXT_PLAIN, }, @@ -155,12 +154,12 @@ export namespace AlbumResource { restConfig: RESTConfig, params: { coverId: ObjectId, - id: Long, + oid: ObjectId, }, }): Promise { return RESTRequestJson({ restModel: { - endPoint: "/album/{id}/cover/{coverId}", + endPoint: "/album/{oid}/cover/{coverId}", requestType: HTTPRequestModel.DELETE, contentType: HTTPMimeType.TEXT_PLAIN, accept: HTTPMimeType.JSON, @@ -180,7 +179,7 @@ export namespace AlbumResource { }: { restConfig: RESTConfig, params: { - id: Long, + oid: ObjectId, }, data: { file?: File, @@ -190,7 +189,7 @@ export namespace AlbumResource { }): Promise { return RESTRequestJson({ restModel: { - endPoint: "/album/{id}/cover", + endPoint: "/album/{oid}/cover", requestType: HTTPRequestModel.POST, contentType: HTTPMimeType.MULTIPART, accept: HTTPMimeType.JSON, diff --git a/front/src/back-api/api/artist-resource.ts b/front/src/back-api/api/artist-resource.ts index cfc5c04..5344e9a 100644 --- a/front/src/back-api/api/artist-resource.ts +++ b/front/src/back-api/api/artist-resource.ts @@ -15,7 +15,6 @@ import { Artist, ArtistCreate, ArtistUpdate, - Long, ObjectId, ZodArtist, isArtist, @@ -29,12 +28,12 @@ export namespace ArtistResource { }: { restConfig: RESTConfig, params: { - id: Long, + oid: ObjectId, }, }): Promise { return RESTRequestJson({ restModel: { - endPoint: "/artist/{id}", + endPoint: "/artist/{oid}", requestType: HTTPRequestModel.GET, accept: HTTPMimeType.JSON, }, @@ -95,13 +94,13 @@ export namespace ArtistResource { }: { restConfig: RESTConfig, params: { - id: Long, + oid: ObjectId, }, data: ArtistUpdate, }): Promise { return RESTRequestJson({ restModel: { - endPoint: "/artist/{id}", + endPoint: "/artist/{oid}", requestType: HTTPRequestModel.PUT, contentType: HTTPMimeType.JSON, accept: HTTPMimeType.JSON, @@ -117,12 +116,12 @@ export namespace ArtistResource { }: { restConfig: RESTConfig, params: { - id: Long, + oid: ObjectId, }, }): Promise { return RESTRequestVoid({ restModel: { - endPoint: "/artist/{id}", + endPoint: "/artist/{oid}", requestType: HTTPRequestModel.DELETE, contentType: HTTPMimeType.TEXT_PLAIN, }, @@ -137,12 +136,12 @@ export namespace ArtistResource { restConfig: RESTConfig, params: { coverId: ObjectId, - id: Long, + oid: ObjectId, }, }): Promise { return RESTRequestJson({ restModel: { - endPoint: "/artist/{id}/cover/{coverId}", + endPoint: "/artist/{oid}/cover/{coverId}", requestType: HTTPRequestModel.DELETE, contentType: HTTPMimeType.TEXT_PLAIN, accept: HTTPMimeType.JSON, @@ -159,7 +158,7 @@ export namespace ArtistResource { }: { restConfig: RESTConfig, params: { - id: Long, + oid: ObjectId, }, data: { file?: File, @@ -169,7 +168,7 @@ export namespace ArtistResource { }): Promise { return RESTRequestJson({ restModel: { - endPoint: "/artist/{id}/cover", + endPoint: "/artist/{oid}/cover", requestType: HTTPRequestModel.POST, contentType: HTTPMimeType.MULTIPART, accept: HTTPMimeType.JSON, diff --git a/front/src/back-api/api/gender-resource.ts b/front/src/back-api/api/gender-resource.ts index a163274..955871d 100644 --- a/front/src/back-api/api/gender-resource.ts +++ b/front/src/back-api/api/gender-resource.ts @@ -15,7 +15,6 @@ import { Gender, GenderCreate, GenderUpdate, - Long, ObjectId, ZodGender, isGender, @@ -29,12 +28,12 @@ export namespace GenderResource { }: { restConfig: RESTConfig, params: { - id: Long, + oid: ObjectId, }, }): Promise { return RESTRequestJson({ restModel: { - endPoint: "/gender/{id}", + endPoint: "/gender/{oid}", requestType: HTTPRequestModel.GET, accept: HTTPMimeType.JSON, }, @@ -77,13 +76,13 @@ export namespace GenderResource { }: { restConfig: RESTConfig, params: { - id: Long, + oid: ObjectId, }, data: GenderUpdate, }): Promise { return RESTRequestJson({ restModel: { - endPoint: "/gender/{id}", + endPoint: "/gender/{oid}", requestType: HTTPRequestModel.PUT, contentType: HTTPMimeType.JSON, accept: HTTPMimeType.JSON, @@ -117,12 +116,12 @@ export namespace GenderResource { }: { restConfig: RESTConfig, params: { - id: Long, + oid: ObjectId, }, }): Promise { return RESTRequestVoid({ restModel: { - endPoint: "/gender/{id}", + endPoint: "/gender/{oid}", requestType: HTTPRequestModel.DELETE, contentType: HTTPMimeType.TEXT_PLAIN, }, @@ -137,12 +136,12 @@ export namespace GenderResource { restConfig: RESTConfig, params: { coverId: ObjectId, - id: Long, + oid: ObjectId, }, }): Promise { return RESTRequestJson({ restModel: { - endPoint: "/gender/{id}/cover/{coverId}", + endPoint: "/gender/{oid}/cover/{coverId}", requestType: HTTPRequestModel.DELETE, contentType: HTTPMimeType.TEXT_PLAIN, accept: HTTPMimeType.JSON, @@ -159,7 +158,7 @@ export namespace GenderResource { }: { restConfig: RESTConfig, params: { - id: Long, + oid: ObjectId, }, data: { file?: File, @@ -169,7 +168,7 @@ export namespace GenderResource { }): Promise { return RESTRequestJson({ restModel: { - endPoint: "/gender/{id}/cover", + endPoint: "/gender/{oid}/cover", requestType: HTTPRequestModel.POST, contentType: HTTPMimeType.MULTIPART, accept: HTTPMimeType.JSON, diff --git a/front/src/back-api/api/playlist-resource.ts b/front/src/back-api/api/playlist-resource.ts index 6d8dd9d..4b197c7 100644 --- a/front/src/back-api/api/playlist-resource.ts +++ b/front/src/back-api/api/playlist-resource.ts @@ -11,7 +11,6 @@ import { import { z as zod } from "zod" import { - Long, ObjectId, Playlist, PlaylistCreate, @@ -28,7 +27,7 @@ export namespace PlaylistResource { }: { restConfig: RESTConfig, params: { - id: Long, + id: ObjectId, }, }): Promise { return RESTRequestJson({ @@ -94,13 +93,13 @@ export namespace PlaylistResource { }: { restConfig: RESTConfig, params: { - id: Long, + oid: ObjectId, }, data: PlaylistUpdate, }): Promise { return RESTRequestJson({ restModel: { - endPoint: "/playlist/{id}", + endPoint: "/playlist/{oid}", requestType: HTTPRequestModel.PUT, contentType: HTTPMimeType.JSON, accept: HTTPMimeType.JSON, @@ -116,12 +115,12 @@ export namespace PlaylistResource { }: { restConfig: RESTConfig, params: { - id: Long, + oid: ObjectId, }, }): Promise { return RESTRequestVoid({ restModel: { - endPoint: "/playlist/{id}", + endPoint: "/playlist/{oid}", requestType: HTTPRequestModel.DELETE, contentType: HTTPMimeType.TEXT_PLAIN, }, @@ -136,12 +135,12 @@ export namespace PlaylistResource { restConfig: RESTConfig, params: { coverId: ObjectId, - id: Long, + oid: ObjectId, }, }): Promise { return RESTRequestJson({ restModel: { - endPoint: "/playlist/{id}/cover/{coverId}", + endPoint: "/playlist/{oid}/cover/{coverId}", requestType: HTTPRequestModel.DELETE, contentType: HTTPMimeType.TEXT_PLAIN, accept: HTTPMimeType.JSON, @@ -157,7 +156,7 @@ export namespace PlaylistResource { }: { restConfig: RESTConfig, params: { - id: Long, + oid: ObjectId, }, data: { file: File, @@ -165,7 +164,7 @@ export namespace PlaylistResource { }): Promise { return RESTRequestJson({ restModel: { - endPoint: "/playlist/{id}/cover", + endPoint: "/playlist/{oid}/cover", requestType: HTTPRequestModel.POST, contentType: HTTPMimeType.MULTIPART, accept: HTTPMimeType.JSON, diff --git a/front/src/back-api/api/track-resource.ts b/front/src/back-api/api/track-resource.ts index 1ec59ef..a4a3e71 100644 --- a/front/src/back-api/api/track-resource.ts +++ b/front/src/back-api/api/track-resource.ts @@ -29,12 +29,12 @@ export namespace TrackResource { }: { restConfig: RESTConfig, params: { - id: Long, + oid: ObjectId, }, }): Promise { return RESTRequestJson({ restModel: { - endPoint: "/track/{id}", + endPoint: "/track/{oid}", requestType: HTTPRequestModel.GET, accept: HTTPMimeType.JSON, }, @@ -95,13 +95,13 @@ export namespace TrackResource { }: { restConfig: RESTConfig, params: { - id: Long, + oid: ObjectId, }, data: TrackUpdate, }): Promise { return RESTRequestJson({ restModel: { - endPoint: "/track/{id}", + endPoint: "/track/{oid}", requestType: HTTPRequestModel.PUT, contentType: HTTPMimeType.JSON, accept: HTTPMimeType.JSON, @@ -117,12 +117,12 @@ export namespace TrackResource { }: { restConfig: RESTConfig, params: { - id: Long, + oid: ObjectId, }, }): Promise { return RESTRequestVoid({ restModel: { - endPoint: "/track/{id}", + endPoint: "/track/{oid}", requestType: HTTPRequestModel.DELETE, contentType: HTTPMimeType.TEXT_PLAIN, }, @@ -137,12 +137,12 @@ export namespace TrackResource { restConfig: RESTConfig, params: { coverId: ObjectId, - id: Long, + oid: ObjectId, }, }): Promise { return RESTRequestJson({ restModel: { - endPoint: "/track/{id}/cover/{coverId}", + endPoint: "/track/{oid}/cover/{coverId}", requestType: HTTPRequestModel.DELETE, contentType: HTTPMimeType.TEXT_PLAIN, accept: HTTPMimeType.JSON, @@ -159,7 +159,7 @@ export namespace TrackResource { }: { restConfig: RESTConfig, params: { - id: Long, + oid: ObjectId, }, data: { file: File, @@ -169,7 +169,7 @@ export namespace TrackResource { }): Promise { return RESTRequestJson({ restModel: { - endPoint: "/track/{id}/cover", + endPoint: "/track/{oid}/cover", requestType: HTTPRequestModel.POST, contentType: HTTPMimeType.MULTIPART, accept: HTTPMimeType.JSON, @@ -189,9 +189,9 @@ export namespace TrackResource { data: { file: File, trackId?: Long, - genderId?: Long, - albumId?: Long, - artistId?: Long, + genderId?: ObjectId, + albumId?: ObjectId, + artistId?: ObjectId, title: string, }, callbacks?: RESTCallbacks, diff --git a/front/src/back-api/model/album.ts b/front/src/back-api/model/album.ts index 7eadb34..05b8f52 100644 --- a/front/src/back-api/model/album.ts +++ b/front/src/back-api/model/album.ts @@ -5,9 +5,9 @@ import { z as zod } from "zod"; import {ZodIsoDate} from "./iso-date"; import {ZodObjectId} from "./object-id"; -import {ZodGenericDataSoftDelete, ZodGenericDataSoftDeleteUpdate , ZodGenericDataSoftDeleteCreate } from "./generic-data-soft-delete"; +import {ZodOIDGenericDataSoftDelete, ZodOIDGenericDataSoftDeleteUpdate , ZodOIDGenericDataSoftDeleteCreate } from "./oid-generic-data-soft-delete"; -export const ZodAlbum = ZodGenericDataSoftDelete.extend({ +export const ZodAlbum = ZodOIDGenericDataSoftDelete.extend({ name: zod.string().min(1).max(256).optional(), description: zod.string().max(8192).optional(), /** @@ -29,7 +29,7 @@ export function isAlbum(data: any): data is Album { return false; } } -export const ZodAlbumUpdate = ZodGenericDataSoftDeleteUpdate.extend({ +export const ZodAlbumUpdate = ZodOIDGenericDataSoftDeleteUpdate.extend({ name: zod.string().min(1).max(256).nullable().optional(), description: zod.string().max(8192).nullable().optional(), publication: ZodIsoDate.nullable().optional(), @@ -47,7 +47,7 @@ export function isAlbumUpdate(data: any): data is AlbumUpdate { return false; } } -export const ZodAlbumCreate = ZodGenericDataSoftDeleteCreate.extend({ +export const ZodAlbumCreate = ZodOIDGenericDataSoftDeleteCreate.extend({ name: zod.string().min(1).max(256).nullable().optional(), description: zod.string().max(8192).nullable().optional(), publication: ZodIsoDate.nullable().optional(), diff --git a/front/src/back-api/model/artist.ts b/front/src/back-api/model/artist.ts index ec01aac..09b4084 100644 --- a/front/src/back-api/model/artist.ts +++ b/front/src/back-api/model/artist.ts @@ -5,9 +5,9 @@ import { z as zod } from "zod"; import {ZodIsoDate} from "./iso-date"; import {ZodObjectId} from "./object-id"; -import {ZodGenericDataSoftDelete, ZodGenericDataSoftDeleteUpdate , ZodGenericDataSoftDeleteCreate } from "./generic-data-soft-delete"; +import {ZodOIDGenericDataSoftDelete, ZodOIDGenericDataSoftDeleteUpdate , ZodOIDGenericDataSoftDeleteCreate } from "./oid-generic-data-soft-delete"; -export const ZodArtist = ZodGenericDataSoftDelete.extend({ +export const ZodArtist = ZodOIDGenericDataSoftDelete.extend({ name: zod.string().min(1).max(256).optional(), description: zod.string().max(8192).optional(), /** @@ -32,7 +32,7 @@ export function isArtist(data: any): data is Artist { return false; } } -export const ZodArtistUpdate = ZodGenericDataSoftDeleteUpdate.extend({ +export const ZodArtistUpdate = ZodOIDGenericDataSoftDeleteUpdate.extend({ name: zod.string().min(1).max(256).nullable().optional(), description: zod.string().max(8192).nullable().optional(), firstName: zod.string().min(1).max(256).nullable().optional(), @@ -53,7 +53,7 @@ export function isArtistUpdate(data: any): data is ArtistUpdate { return false; } } -export const ZodArtistCreate = ZodGenericDataSoftDeleteCreate.extend({ +export const ZodArtistCreate = ZodOIDGenericDataSoftDeleteCreate.extend({ name: zod.string().min(1).max(256).nullable().optional(), description: zod.string().max(8192).nullable().optional(), firstName: zod.string().min(1).max(256).nullable().optional(), diff --git a/front/src/back-api/model/gender.ts b/front/src/back-api/model/gender.ts index 88fdc71..9f752f9 100644 --- a/front/src/back-api/model/gender.ts +++ b/front/src/back-api/model/gender.ts @@ -4,9 +4,9 @@ import { z as zod } from "zod"; import {ZodObjectId} from "./object-id"; -import {ZodGenericDataSoftDelete, ZodGenericDataSoftDeleteUpdate , ZodGenericDataSoftDeleteCreate } from "./generic-data-soft-delete"; +import {ZodOIDGenericDataSoftDelete, ZodOIDGenericDataSoftDeleteUpdate , ZodOIDGenericDataSoftDeleteCreate } from "./oid-generic-data-soft-delete"; -export const ZodGender = ZodGenericDataSoftDelete.extend({ +export const ZodGender = ZodOIDGenericDataSoftDelete.extend({ name: zod.string().min(1).max(256).optional(), description: zod.string().max(8192).optional(), /** @@ -27,7 +27,7 @@ export function isGender(data: any): data is Gender { return false; } } -export const ZodGenderUpdate = ZodGenericDataSoftDeleteUpdate.extend({ +export const ZodGenderUpdate = ZodOIDGenericDataSoftDeleteUpdate.extend({ name: zod.string().min(1).max(256).nullable().optional(), description: zod.string().max(8192).nullable().optional(), @@ -44,7 +44,7 @@ export function isGenderUpdate(data: any): data is GenderUpdate { return false; } } -export const ZodGenderCreate = ZodGenericDataSoftDeleteCreate.extend({ +export const ZodGenderCreate = ZodOIDGenericDataSoftDeleteCreate.extend({ name: zod.string().min(1).max(256).nullable().optional(), description: zod.string().max(8192).nullable().optional(), diff --git a/front/src/back-api/model/index.ts b/front/src/back-api/model/index.ts index b0b292f..c3feb71 100644 --- a/front/src/back-api/model/index.ts +++ b/front/src/back-api/model/index.ts @@ -15,6 +15,8 @@ export * from "./jwt-payload" export * from "./jwt-token" export * from "./long" export * from "./object-id" +export * from "./oid-generic-data" +export * from "./oid-generic-data-soft-delete" export * from "./part-right" export * from "./part-right" export * from "./playlist" @@ -25,4 +27,3 @@ export * from "./track" export * from "./user" export * from "./user-karusic" export * from "./user-me" -export * from "./uuid" diff --git a/front/src/back-api/model/jwt-token.ts b/front/src/back-api/model/jwt-token.ts index 0a35d77..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 {ZodJwtPayload} from "./jwt-payload"; import {ZodJwtHeader} from "./jwt-header"; +import {ZodJwtPayload} from "./jwt-payload"; export const ZodJwtToken = zod.object({ header: ZodJwtHeader, diff --git a/front/src/back-api/model/oid-generic-data-soft-delete.ts b/front/src/back-api/model/oid-generic-data-soft-delete.ts new file mode 100644 index 0000000..826a2df --- /dev/null +++ b/front/src/back-api/model/oid-generic-data-soft-delete.ts @@ -0,0 +1,52 @@ +/** + * Interface of the server (auto-generated code) + */ +import { z as zod } from "zod"; + +import {ZodOIDGenericData, ZodOIDGenericDataUpdate , ZodOIDGenericDataCreate } from "./oid-generic-data"; + +export const ZodOIDGenericDataSoftDelete = ZodOIDGenericData.extend({ + /** + * Deleted state + */ + deleted: zod.boolean().readonly().optional(), + +}); + +export type OIDGenericDataSoftDelete = zod.infer; + +export function isOIDGenericDataSoftDelete(data: any): data is OIDGenericDataSoftDelete { + try { + ZodOIDGenericDataSoftDelete.parse(data); + return true; + } catch (e: any) { + console.log(`Fail to parse data type='ZodOIDGenericDataSoftDelete' error=${e}`); + return false; + } +} +export const ZodOIDGenericDataSoftDeleteUpdate = ZodOIDGenericDataUpdate; + +export type OIDGenericDataSoftDeleteUpdate = zod.infer; + +export function isOIDGenericDataSoftDeleteUpdate(data: any): data is OIDGenericDataSoftDeleteUpdate { + try { + ZodOIDGenericDataSoftDeleteUpdate.parse(data); + return true; + } catch (e: any) { + console.log(`Fail to parse data type='ZodOIDGenericDataSoftDeleteUpdate' error=${e}`); + return false; + } +} +export const ZodOIDGenericDataSoftDeleteCreate = ZodOIDGenericDataCreate; + +export type OIDGenericDataSoftDeleteCreate = zod.infer; + +export function isOIDGenericDataSoftDeleteCreate(data: any): data is OIDGenericDataSoftDeleteCreate { + try { + ZodOIDGenericDataSoftDeleteCreate.parse(data); + return true; + } catch (e: any) { + console.log(`Fail to parse data type='ZodOIDGenericDataSoftDeleteCreate' error=${e}`); + return false; + } +} diff --git a/front/src/back-api/model/oid-generic-data.ts b/front/src/back-api/model/oid-generic-data.ts new file mode 100644 index 0000000..e3b98f8 --- /dev/null +++ b/front/src/back-api/model/oid-generic-data.ts @@ -0,0 +1,53 @@ +/** + * Interface of the server (auto-generated code) + */ +import { z as zod } from "zod"; + +import {ZodGenericTiming, ZodGenericTimingUpdate , ZodGenericTimingCreate } from "./generic-timing"; +import {ZodObjectId} from "./object-id"; + +export const ZodOIDGenericData = ZodGenericTiming.extend({ + /** + * Unique ObjectID of the object + */ + oid: ZodObjectId.readonly(), + +}); + +export type OIDGenericData = zod.infer; + +export function isOIDGenericData(data: any): data is OIDGenericData { + try { + ZodOIDGenericData.parse(data); + return true; + } catch (e: any) { + console.log(`Fail to parse data type='ZodOIDGenericData' error=${e}`); + return false; + } +} +export const ZodOIDGenericDataUpdate = ZodGenericTimingUpdate; + +export type OIDGenericDataUpdate = zod.infer; + +export function isOIDGenericDataUpdate(data: any): data is OIDGenericDataUpdate { + try { + ZodOIDGenericDataUpdate.parse(data); + return true; + } catch (e: any) { + console.log(`Fail to parse data type='ZodOIDGenericDataUpdate' error=${e}`); + return false; + } +} +export const ZodOIDGenericDataCreate = ZodGenericTimingCreate; + +export type OIDGenericDataCreate = zod.infer; + +export function isOIDGenericDataCreate(data: any): data is OIDGenericDataCreate { + try { + ZodOIDGenericDataCreate.parse(data); + return true; + } catch (e: any) { + console.log(`Fail to parse data type='ZodOIDGenericDataCreate' error=${e}`); + return false; + } +} diff --git a/front/src/back-api/model/playlist.ts b/front/src/back-api/model/playlist.ts index beb8d2a..98ae314 100644 --- a/front/src/back-api/model/playlist.ts +++ b/front/src/back-api/model/playlist.ts @@ -3,18 +3,17 @@ */ import { z as zod } from "zod"; -import {ZodLong} from "./long"; import {ZodObjectId} from "./object-id"; -import {ZodGenericDataSoftDelete, ZodGenericDataSoftDeleteUpdate , ZodGenericDataSoftDeleteCreate } from "./generic-data-soft-delete"; +import {ZodOIDGenericDataSoftDelete, ZodOIDGenericDataSoftDeleteUpdate , ZodOIDGenericDataSoftDeleteCreate } from "./oid-generic-data-soft-delete"; -export const ZodPlaylist = ZodGenericDataSoftDelete.extend({ +export const ZodPlaylist = ZodOIDGenericDataSoftDelete.extend({ name: zod.string().min(1).max(256).optional(), description: zod.string().max(8192).optional(), /** * List of Id of the specific covers */ covers: zod.array(ZodObjectId).readonly().optional(), - tracks: zod.array(ZodLong), + tracks: zod.array(ZodObjectId).optional(), }); @@ -29,10 +28,10 @@ export function isPlaylist(data: any): data is Playlist { return false; } } -export const ZodPlaylistUpdate = ZodGenericDataSoftDeleteUpdate.extend({ +export const ZodPlaylistUpdate = ZodOIDGenericDataSoftDeleteUpdate.extend({ name: zod.string().min(1).max(256).nullable().optional(), description: zod.string().max(8192).nullable().optional(), - tracks: zod.array(ZodLong), + tracks: zod.array(ZodObjectId).nullable().optional(), }); @@ -47,10 +46,10 @@ export function isPlaylistUpdate(data: any): data is PlaylistUpdate { return false; } } -export const ZodPlaylistCreate = ZodGenericDataSoftDeleteCreate.extend({ +export const ZodPlaylistCreate = ZodOIDGenericDataSoftDeleteCreate.extend({ name: zod.string().min(1).max(256).nullable().optional(), description: zod.string().max(8192).nullable().optional(), - tracks: zod.array(ZodLong), + tracks: zod.array(ZodObjectId).nullable().optional(), }); diff --git a/front/src/back-api/model/rest-error-response.ts b/front/src/back-api/model/rest-error-response.ts index b4cf789..d83aaa0 100644 --- a/front/src/back-api/model/rest-error-response.ts +++ b/front/src/back-api/model/rest-error-response.ts @@ -3,9 +3,9 @@ */ import { z as zod } from "zod"; -import {ZodRestInputError} from "./rest-input-error"; import {ZodInteger} from "./integer"; import {ZodObjectId} from "./object-id"; +import {ZodRestInputError} from "./rest-input-error"; export const ZodRestErrorResponse = zod.object({ oid: ZodObjectId.optional(), diff --git a/front/src/back-api/model/track.ts b/front/src/back-api/model/track.ts index 5571f4f..a460c79 100644 --- a/front/src/back-api/model/track.ts +++ b/front/src/back-api/model/track.ts @@ -5,20 +5,20 @@ import { z as zod } from "zod"; import {ZodLong} from "./long"; import {ZodObjectId} from "./object-id"; -import {ZodGenericDataSoftDelete, ZodGenericDataSoftDeleteUpdate , ZodGenericDataSoftDeleteCreate } from "./generic-data-soft-delete"; +import {ZodOIDGenericDataSoftDelete, ZodOIDGenericDataSoftDeleteUpdate , ZodOIDGenericDataSoftDeleteCreate } from "./oid-generic-data-soft-delete"; -export const ZodTrack = ZodGenericDataSoftDelete.extend({ +export const ZodTrack = ZodOIDGenericDataSoftDelete.extend({ name: zod.string().min(1).max(256).optional(), description: zod.string().max(8192).optional(), /** * List of Id of the specific covers */ covers: zod.array(ZodObjectId).readonly().optional(), - genderId: ZodLong.optional(), - albumId: ZodLong.optional(), + genderId: ZodObjectId.optional(), + albumId: ZodObjectId.optional(), track: ZodLong.optional(), dataId: ZodObjectId.optional(), - artists: zod.array(ZodLong), + artists: zod.array(ZodObjectId).optional(), }); @@ -33,14 +33,14 @@ export function isTrack(data: any): data is Track { return false; } } -export const ZodTrackUpdate = ZodGenericDataSoftDeleteUpdate.extend({ +export const ZodTrackUpdate = ZodOIDGenericDataSoftDeleteUpdate.extend({ name: zod.string().min(1).max(256).nullable().optional(), description: zod.string().max(8192).nullable().optional(), - genderId: ZodLong.nullable().optional(), - albumId: ZodLong.nullable().optional(), + genderId: ZodObjectId.nullable().optional(), + albumId: ZodObjectId.nullable().optional(), track: ZodLong.nullable().optional(), dataId: ZodObjectId.nullable().optional(), - artists: zod.array(ZodLong), + artists: zod.array(ZodObjectId).nullable().optional(), }); @@ -55,14 +55,14 @@ export function isTrackUpdate(data: any): data is TrackUpdate { return false; } } -export const ZodTrackCreate = ZodGenericDataSoftDeleteCreate.extend({ +export const ZodTrackCreate = ZodOIDGenericDataSoftDeleteCreate.extend({ name: zod.string().min(1).max(256).nullable().optional(), description: zod.string().max(8192).nullable().optional(), - genderId: ZodLong.nullable().optional(), - albumId: ZodLong.nullable().optional(), + genderId: ZodObjectId.nullable().optional(), + albumId: ZodObjectId.nullable().optional(), track: ZodLong.nullable().optional(), dataId: ZodObjectId.nullable().optional(), - artists: zod.array(ZodLong), + artists: zod.array(ZodObjectId).nullable().optional(), }); diff --git a/front/src/back-api/model/user-me.ts b/front/src/back-api/model/user-me.ts index 1f8a625..18b4388 100644 --- a/front/src/back-api/model/user-me.ts +++ b/front/src/back-api/model/user-me.ts @@ -12,7 +12,7 @@ export const ZodUserMe = zod.object({ /** * Map> */ - rights: zod.record(zod.string(), zod.record(zod.string(), ZodPartRight)), + rights: zod.record(zod.string(), zod.record(zod.string(), ZodPartRight)).optional(), }); diff --git a/front/src/back-api/model/user.ts b/front/src/back-api/model/user.ts index 98c453f..abefbcb 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 {ZodUUID} from "./uuid"; -import {ZodTimestamp} from "./timestamp"; import {ZodGenericDataSoftDelete, ZodGenericDataSoftDeleteUpdate , ZodGenericDataSoftDeleteCreate } from "./generic-data-soft-delete"; +import {ZodObjectId} from "./object-id"; +import {ZodTimestamp} from "./timestamp"; export const ZodUser = ZodGenericDataSoftDelete.extend({ login: zod.string().min(3).max(128), @@ -15,7 +15,7 @@ export const ZodUser = ZodGenericDataSoftDelete.extend({ /** * List of Id of the specific covers */ - covers: zod.array(ZodUUID).optional(), + covers: zod.array(ZodObjectId).optional(), }); @@ -38,7 +38,7 @@ export const ZodUserUpdate = ZodGenericDataSoftDeleteUpdate.extend({ /** * List of Id of the specific covers */ - covers: zod.array(ZodUUID).nullable().optional(), + covers: zod.array(ZodObjectId).nullable().optional(), }); @@ -61,7 +61,7 @@ export const ZodUserCreate = ZodGenericDataSoftDeleteCreate.extend({ /** * List of Id of the specific covers */ - covers: zod.array(ZodUUID).nullable().optional(), + covers: zod.array(ZodObjectId).nullable().optional(), }); diff --git a/front/src/components/album/DisplayAlbum.tsx b/front/src/components/album/DisplayAlbum.tsx index dc56a68..544824b 100644 --- a/front/src/components/album/DisplayAlbum.tsx +++ b/front/src/components/album/DisplayAlbum.tsx @@ -10,7 +10,7 @@ export type DisplayAlbumProps = { dataAlbum?: Album; }; export const DisplayAlbum = ({ dataAlbum }: DisplayAlbumProps) => { - const { countTracksOfAnAlbum } = useCountTracksWithAlbumId(dataAlbum?.id); + const { countTracksOfAnAlbum } = useCountTracksWithAlbumId(dataAlbum?.oid); if (!dataAlbum) { return ( diff --git a/front/src/components/album/DisplayAlbumId.tsx b/front/src/components/album/DisplayAlbumId.tsx index e26feab..a169b9e 100644 --- a/front/src/components/album/DisplayAlbumId.tsx +++ b/front/src/components/album/DisplayAlbumId.tsx @@ -1,10 +1,11 @@ +import { ObjectId } from '@/back-api'; import { DisplayAlbum } from '@/components/album/DisplayAlbum'; import { useSpecificAlbum } from '@/service/Album'; export type DisplayAlbumIdProps = { - id: number; + oid: ObjectId; }; -export const DisplayAlbumId = ({ id }: DisplayAlbumIdProps) => { - const { dataAlbum } = useSpecificAlbum(id); +export const DisplayAlbumId = ({ oid }: DisplayAlbumIdProps) => { + const { dataAlbum } = useSpecificAlbum(oid); return ; }; diff --git a/front/src/components/gender/DisplayGender.tsx b/front/src/components/gender/DisplayGender.tsx index c5c79a6..9140b7c 100644 --- a/front/src/components/gender/DisplayGender.tsx +++ b/front/src/components/gender/DisplayGender.tsx @@ -9,7 +9,7 @@ export type DisplayGenderProps = { dataGender?: Gender; }; export const DisplayGender = ({ dataGender }: DisplayGenderProps) => { - const { countTracksOnAGender } = useCountTracksOfAGender(dataGender?.id); + const { countTracksOnAGender } = useCountTracksOfAGender(dataGender?.oid); if (!dataGender) { return ( diff --git a/front/src/components/gender/DisplayGenderId.tsx b/front/src/components/gender/DisplayGenderId.tsx index 175cf2b..8e19f48 100644 --- a/front/src/components/gender/DisplayGenderId.tsx +++ b/front/src/components/gender/DisplayGenderId.tsx @@ -1,8 +1,9 @@ +import { ObjectId } from '@/back-api'; import { DisplayGender } from '@/components/gender/DisplayGender'; import { useSpecificGender } from '@/service/Gender'; export type DisplayGenderIdProps = { - id: number; + id: ObjectId; }; export const DisplayGenderId = ({ id }: DisplayGenderIdProps) => { const { dataGender } = useSpecificGender(id); diff --git a/front/src/components/popup/AlbumEditPopUp.tsx b/front/src/components/popup/AlbumEditPopUp.tsx index c78ac06..84f225c 100644 --- a/front/src/components/popup/AlbumEditPopUp.tsx +++ b/front/src/components/popup/AlbumEditPopUp.tsx @@ -34,13 +34,10 @@ export type AlbumEditPopUpProps = {}; export const AlbumEditPopUp = ({}: AlbumEditPopUpProps) => { const { albumId } = useParams(); - const albumIdInt = isNullOrUndefined(albumId) - ? undefined - : parseInt(albumId, 10); const { session } = useServiceContext(); - const { countTracksOfAnAlbum } = useCountTracksWithAlbumId(albumIdInt); + const { countTracksOfAnAlbum } = useCountTracksWithAlbumId(albumId); const { store } = useAlbumService(); - const { dataAlbum } = useSpecificAlbum(albumIdInt); + const { dataAlbum } = useSpecificAlbum(albumId); const [admin, setAdmin] = useState(false); const navigate = useNavigate(); const disclosure = useDisclosure(); @@ -48,15 +45,15 @@ export const AlbumEditPopUp = ({}: AlbumEditPopUpProps) => { navigate('../../', { relative: 'path' }); }; const onRemove = () => { - if (isNullOrUndefined(albumIdInt)) { + if (isNullOrUndefined(albumId)) { return; } store.remove( - albumIdInt, + albumId, AlbumResource.remove({ restConfig: session.getRestConfig(), params: { - id: albumIdInt, + oid: albumId, }, }) ); @@ -69,7 +66,7 @@ export const AlbumEditPopUp = ({}: AlbumEditPopUpProps) => { deltaConfig: { omit: ['covers'] }, }); const onSave = async (delta: AlbumUpdate) => { - if (isNullOrUndefined(albumIdInt)) { + if (isNullOrUndefined(albumId)) { return; } console.log(`onSave = ${JSON.stringify(delta, null, 2)}`); @@ -78,14 +75,14 @@ export const AlbumEditPopUp = ({}: AlbumEditPopUpProps) => { restConfig: session.getRestConfig(), data: ZodAlbumUpdate.parse(delta), params: { - id: albumIdInt, + oid: albumId, }, }) ); }; const onUriSelected = (uri: string) => { - if (isNullOrUndefined(albumIdInt)) { + if (isNullOrUndefined(albumId)) { return; } store.update( @@ -95,7 +92,7 @@ export const AlbumEditPopUp = ({}: AlbumEditPopUpProps) => { uri: uri, }, params: { - id: albumIdInt, + oid: albumId, }, }) ); @@ -105,7 +102,7 @@ export const AlbumEditPopUp = ({}: AlbumEditPopUpProps) => { files.forEach((element) => { console.log(`Select file: '${element.name}'`); }); - if (isNullOrUndefined(albumIdInt)) { + if (isNullOrUndefined(albumId)) { return; } store.update( @@ -115,7 +112,7 @@ export const AlbumEditPopUp = ({}: AlbumEditPopUpProps) => { file: files[0], }, params: { - id: albumIdInt, + oid: albumId, }, }) ); @@ -124,14 +121,14 @@ export const AlbumEditPopUp = ({}: AlbumEditPopUpProps) => { if (isNullOrUndefined(dataAlbum?.covers)) { return; } - if (isNullOrUndefined(albumIdInt)) { + if (isNullOrUndefined(albumId)) { return; } store.update( AlbumResource.removeCover({ restConfig: session.getRestConfig(), params: { - id: albumIdInt, + oid: albumId, coverId: dataAlbum.covers[index], }, }) @@ -155,7 +152,7 @@ export const AlbumEditPopUp = ({}: AlbumEditPopUpProps) => { {admin && ( <> - {dataAlbum?.id} + {dataAlbum?.oid} {countTracksOfAnAlbum !== 0 && ( @@ -179,7 +176,7 @@ export const AlbumEditPopUp = ({}: AlbumEditPopUpProps) => { diff --git a/front/src/components/popup/ArtistEditPopUp.tsx b/front/src/components/popup/ArtistEditPopUp.tsx index 6aa2fe8..ef56525 100644 --- a/front/src/components/popup/ArtistEditPopUp.tsx +++ b/front/src/components/popup/ArtistEditPopUp.tsx @@ -33,13 +33,10 @@ export type ArtistEditPopUpProps = {}; export const ArtistEditPopUp = ({}: ArtistEditPopUpProps) => { const { artistId } = useParams(); - const artistIdInt = isNullOrUndefined(artistId) - ? undefined - : parseInt(artistId, 10); const { session } = useServiceContext(); - const { countTracksOnAnArtist } = useCountTracksOfAnArtist(artistIdInt); + const { countTracksOnAnArtist } = useCountTracksOfAnArtist(artistId); const { store } = useArtistService(); - const { dataArtist } = useSpecificArtist(artistIdInt); + const { dataArtist } = useSpecificArtist(artistId); const [admin, setAdmin] = useState(false); const navigate = useNavigate(); const disclosure = useDisclosure(); @@ -47,15 +44,15 @@ export const ArtistEditPopUp = ({}: ArtistEditPopUpProps) => { navigate('../../', { relative: 'path' }); }; const onRemove = () => { - if (isNullOrUndefined(artistIdInt)) { + if (isNullOrUndefined(artistId)) { return; } store.remove( - artistIdInt, + artistId, ArtistResource.remove({ restConfig: session.getRestConfig(), params: { - id: artistIdInt, + oid: artistId, }, }) ); @@ -68,7 +65,7 @@ export const ArtistEditPopUp = ({}: ArtistEditPopUpProps) => { deltaConfig: { omit: ['covers'] }, }); const onSave = async (data: ArtistUpdate) => { - if (isNullOrUndefined(artistIdInt)) { + if (isNullOrUndefined(artistId)) { return; } console.log(`onSave = ${JSON.stringify(data, null, 2)}`); @@ -77,14 +74,14 @@ export const ArtistEditPopUp = ({}: ArtistEditPopUpProps) => { restConfig: session.getRestConfig(), data: ZodArtistUpdate.parse(data), params: { - id: artistIdInt, + oid: artistId, }, }) ); }; const onUriSelected = (uri: string) => { - if (isNullOrUndefined(artistIdInt)) { + if (isNullOrUndefined(artistId)) { return; } store.update( @@ -94,7 +91,7 @@ export const ArtistEditPopUp = ({}: ArtistEditPopUpProps) => { uri: uri, }, params: { - id: artistIdInt, + oid: artistId, }, }) ); @@ -103,7 +100,7 @@ export const ArtistEditPopUp = ({}: ArtistEditPopUpProps) => { files.forEach((element) => { console.log(`Select file: '${element.name}'`); }); - if (isNullOrUndefined(artistIdInt)) { + if (isNullOrUndefined(artistId)) { return; } store.update( @@ -113,7 +110,7 @@ export const ArtistEditPopUp = ({}: ArtistEditPopUpProps) => { file: files[0], }, params: { - id: artistIdInt, + oid: artistId, }, }) ); @@ -122,14 +119,14 @@ export const ArtistEditPopUp = ({}: ArtistEditPopUpProps) => { if (isNullOrUndefined(dataArtist?.covers)) { return; } - if (isNullOrUndefined(artistIdInt)) { + if (isNullOrUndefined(artistId)) { return; } store.update( ArtistResource.removeCover({ restConfig: session.getRestConfig(), params: { - id: artistIdInt, + oid: artistId, coverId: dataArtist.covers[index], }, }) @@ -154,7 +151,7 @@ export const ArtistEditPopUp = ({}: ArtistEditPopUpProps) => { {admin && ( <> - {dataArtist?.id} + {dataArtist?.oid} {countTracksOnAnArtist !== 0 && ( @@ -178,7 +175,7 @@ export const ArtistEditPopUp = ({}: ArtistEditPopUpProps) => { diff --git a/front/src/components/popup/GenderEditPopUp.tsx b/front/src/components/popup/GenderEditPopUp.tsx index b41db25..87432a1 100644 --- a/front/src/components/popup/GenderEditPopUp.tsx +++ b/front/src/components/popup/GenderEditPopUp.tsx @@ -33,13 +33,10 @@ export type GenderEditPopUpProps = {}; export const GenderEditPopUp = ({}: GenderEditPopUpProps) => { const { genderId } = useParams(); - const genderIdInt = isNullOrUndefined(genderId) - ? undefined - : parseInt(genderId, 10); const { session } = useServiceContext(); - const { countTracksOnAGender } = useCountTracksOfAGender(genderIdInt); + const { countTracksOnAGender } = useCountTracksOfAGender(genderId); const { store } = useGenderService(); - const { dataGender } = useSpecificGender(genderIdInt); + const { dataGender } = useSpecificGender(genderId); const [admin, setAdmin] = useState(false); const navigate = useNavigate(); const disclosure = useDisclosure(); @@ -47,15 +44,15 @@ export const GenderEditPopUp = ({}: GenderEditPopUpProps) => { navigate('../../', { relative: 'path' }); }; const onRemove = () => { - if (isNullOrUndefined(genderIdInt)) { + if (isNullOrUndefined(genderId)) { return; } store.remove( - genderIdInt, + genderId, GenderResource.remove({ restConfig: session.getRestConfig(), params: { - id: genderIdInt, + oid: genderId, }, }) ); @@ -68,7 +65,7 @@ export const GenderEditPopUp = ({}: GenderEditPopUpProps) => { deltaConfig: { omit: ['covers'] }, }); const onSave = async (data: GenderUpdate) => { - if (isNullOrUndefined(genderIdInt)) { + if (isNullOrUndefined(genderId)) { return; } console.log(`onSave = ${JSON.stringify(data, null, 2)}`); @@ -77,13 +74,13 @@ export const GenderEditPopUp = ({}: GenderEditPopUpProps) => { restConfig: session.getRestConfig(), data: ZodGenderUpdate.parse(data), params: { - id: genderIdInt, + oid: genderId, }, }) ); }; const onUriSelected = (uri: string) => { - if (isNullOrUndefined(genderIdInt)) { + if (isNullOrUndefined(genderId)) { return; } store.update( @@ -93,7 +90,7 @@ export const GenderEditPopUp = ({}: GenderEditPopUpProps) => { uri: uri, }, params: { - id: genderIdInt, + oid: genderId, }, }) ); @@ -102,7 +99,7 @@ export const GenderEditPopUp = ({}: GenderEditPopUpProps) => { files.forEach((element) => { console.log(`Select file: '${element.name}'`); }); - if (isNullOrUndefined(genderIdInt)) { + if (isNullOrUndefined(genderId)) { return; } store.update( @@ -112,7 +109,7 @@ export const GenderEditPopUp = ({}: GenderEditPopUpProps) => { file: files[0], }, params: { - id: genderIdInt, + oid: genderId, }, }) ); @@ -121,14 +118,14 @@ export const GenderEditPopUp = ({}: GenderEditPopUpProps) => { if (isNullOrUndefined(dataGender?.covers)) { return; } - if (isNullOrUndefined(genderIdInt)) { + if (isNullOrUndefined(genderId)) { return; } store.update( GenderResource.removeCover({ restConfig: session.getRestConfig(), params: { - id: genderIdInt, + oid: genderId, coverId: dataGender.covers[index], }, }) @@ -153,7 +150,7 @@ export const GenderEditPopUp = ({}: GenderEditPopUpProps) => { {admin && ( <> - {dataGender?.id} + {dataGender?.oid} {countTracksOnAGender !== 0 && ( @@ -177,7 +174,7 @@ export const GenderEditPopUp = ({}: GenderEditPopUpProps) => { diff --git a/front/src/components/popup/TrackEditPopUp.tsx b/front/src/components/popup/TrackEditPopUp.tsx index ab8c8a9..b3b9491 100644 --- a/front/src/components/popup/TrackEditPopUp.tsx +++ b/front/src/components/popup/TrackEditPopUp.tsx @@ -32,15 +32,12 @@ export type TrackEditPopUpProps = {}; export const TrackEditPopUp = ({}: TrackEditPopUpProps) => { const { trackId } = useParams(); - const trackIdInt = isNullOrUndefined(trackId) - ? undefined - : parseInt(trackId, 10); const { session } = useServiceContext(); const { dataGenders } = useOrderedGenders(undefined); const { dataArtist } = useOrderedArtists(undefined); const { dataAlbums } = useOrderedAlbums(undefined); const { store } = useTrackService(); - const { dataTrack } = useSpecificTrack(trackIdInt); + const { dataTrack } = useSpecificTrack(trackId); const [admin, setAdmin] = useState(false); const navigate = useNavigate(); const disclosure = useDisclosure(); @@ -48,15 +45,15 @@ export const TrackEditPopUp = ({}: TrackEditPopUpProps) => { navigate('../../', { relative: 'path' }); }; const onRemove = () => { - if (isNullOrUndefined(trackIdInt)) { + if (isNullOrUndefined(trackId)) { return; } store.remove( - trackIdInt, + trackId, TrackResource.remove({ restConfig: session.getRestConfig(), params: { - id: trackIdInt, + oid: trackId, }, }) ); @@ -69,7 +66,7 @@ export const TrackEditPopUp = ({}: TrackEditPopUpProps) => { deltaConfig: { omit: ['covers'] }, }); const onSave = async (data: TrackUpdate) => { - if (isNullOrUndefined(trackIdInt)) { + if (isNullOrUndefined(trackId)) { return; } console.log(`onSave = ${JSON.stringify(data, null, 2)}`); @@ -83,7 +80,7 @@ export const TrackEditPopUp = ({}: TrackEditPopUpProps) => { restConfig: session.getRestConfig(), data: ZodTrackUpdate.parse({ track: trackNumber, ...rest }), params: { - id: trackIdInt, + oid: trackId, }, }) ); @@ -107,7 +104,7 @@ export const TrackEditPopUp = ({}: TrackEditPopUpProps) => { {admin && ( <> - {dataTrack?.id} + {dataTrack?.oid} {dataTrack?.dataId} @@ -124,7 +121,7 @@ export const TrackEditPopUp = ({}: TrackEditPopUpProps) => { diff --git a/front/src/components/track/DisplayTrack.tsx b/front/src/components/track/DisplayTrack.tsx index 2354f92..fcb3426 100644 --- a/front/src/components/track/DisplayTrack.tsx +++ b/front/src/components/track/DisplayTrack.tsx @@ -23,7 +23,7 @@ export const DisplayTrack = ({ data={track?.covers} size="50" height="full" - iconEmpty={trackActive?.id === track.id ? : } + iconEmpty={trackActive?.oid === track.oid ? : } onClick={onClick} /> [{track.track}] {track.name} diff --git a/front/src/components/track/DisplayTrackFull.tsx b/front/src/components/track/DisplayTrackFull.tsx index d0bc1a1..63e1d36 100644 --- a/front/src/components/track/DisplayTrackFull.tsx +++ b/front/src/components/track/DisplayTrackFull.tsx @@ -34,7 +34,7 @@ export const DisplayTrackFull = ({ data={track?.covers} size="60px" marginY="auto" - iconEmpty={trackActive?.id === track.id ? : } + iconEmpty={trackActive?.oid === track.oid ? : } onClick={onClick} /> {track.name} {track.track && ` [${track.track}]`} @@ -69,7 +69,7 @@ export const DisplayTrackFull = ({ overflow="hidden" //noOfLines={1} marginY="auto" - color={trackActive?.id === track.id ? 'green.700' : undefined} + color={trackActive?.oid === track.oid ? 'green.700' : undefined} > Album: @@ -88,7 +88,7 @@ export const DisplayTrackFull = ({ overflow="hidden" //noOfLines={1} marginY="auto" - color={trackActive?.id === track.id ? 'green.700' : undefined} + color={trackActive?.oid === track.oid ? 'green.700' : undefined} > Artist(s): @@ -107,7 +107,7 @@ export const DisplayTrackFull = ({ overflow="hidden" //noOfLines={1} marginY="auto" - color={trackActive?.id === track.id ? 'green.700' : undefined} + color={trackActive?.oid === track.oid ? 'green.700' : undefined} > Gender: diff --git a/front/src/components/track/DisplayTrackFullId.tsx b/front/src/components/track/DisplayTrackFullId.tsx index 9b87711..a88dc04 100644 --- a/front/src/components/track/DisplayTrackFullId.tsx +++ b/front/src/components/track/DisplayTrackFullId.tsx @@ -6,7 +6,7 @@ import { DisplayTrackFull } from './DisplayTrackFull'; import { DisplayTrackSkeleton } from './DisplayTrackSkeleton'; export type DisplayTrackProps = { - trackId: Track['id']; + trackId: Track['oid']; onClick?: () => void; contextMenu?: MenuElement[]; }; diff --git a/front/src/environment.ts b/front/src/environment.ts index 0a0c886..5ae3fea 100644 --- a/front/src/environment.ts +++ b/front/src/environment.ts @@ -45,7 +45,7 @@ const environment_local: Environment = { ssoSignUp: `${serverSSOAddress}/karso/signup/karusic-dev/`, ssoSignOut: `${serverSSOAddress}/karso/signout/karusic-dev/`, tokenStoredInPermanentStorage: false, - //replaceDataToRealServer: true, + replaceDataToRealServer: true, }; /** diff --git a/front/src/scene/album/AlbumDetailPage.tsx b/front/src/scene/album/AlbumDetailPage.tsx index 6a72afe..3fa78e8 100644 --- a/front/src/scene/album/AlbumDetailPage.tsx +++ b/front/src/scene/album/AlbumDetailPage.tsx @@ -3,6 +3,7 @@ import { LuDisc3 } from 'react-icons/lu'; import { MdAdd, MdEdit } from 'react-icons/md'; import { Route, Routes, useNavigate, useParams } from 'react-router-dom'; +import { ObjectId } from '@/back-api'; import { Covers } from '@/components/Cover'; import { EmptyEnd } from '@/components/EmptyEnd'; import { PageLayout } from '@/components/Layout/PageLayout'; @@ -19,22 +20,21 @@ import { useTracksOfAnAlbum } from '@/service/Track'; export const AlbumDetailPage = () => { const { albumId } = useParams(); - const albumIdInt = albumId ? parseInt(albumId, 10) : undefined; const { playInList } = useActivePlaylistService(); - const { dataAlbum } = useSpecificAlbum(albumIdInt); - const { tracksOnAnAlbum } = useTracksOfAnAlbum(albumIdInt); + const { dataAlbum } = useSpecificAlbum(albumId); + const { tracksOnAnAlbum } = useTracksOfAnAlbum(albumId); const navigate = useNavigate(); - const onSelectItem = (trackId: number) => { + const onSelectItem = (trackId: ObjectId) => { //navigate(`/artist/${artistIdInt}/album/${albumId}`); let currentPlay = 0; - const listTrackId: number[] = []; + const listTrackId: ObjectId[] = []; if (!tracksOnAnAlbum) { console.log('Fail to get album...'); return; } for (let iii = 0; iii < tracksOnAnAlbum.length; iii++) { - listTrackId.push(tracksOnAnAlbum[iii].id); - if (tracksOnAnAlbum[iii].id === trackId) { + listTrackId.push(tracksOnAnAlbum[iii].oid); + if (tracksOnAnAlbum[iii].oid === trackId) { currentPlay = iii; } } @@ -58,7 +58,7 @@ export const AlbumDetailPage = () => {