diff --git a/backend/drizzle/0000_modern_black_queen.sql b/backend/drizzle/0000_white_mandroid.sql similarity index 87% rename from backend/drizzle/0000_modern_black_queen.sql rename to backend/drizzle/0000_white_mandroid.sql index b28638873..cff2892f2 100644 --- a/backend/drizzle/0000_modern_black_queen.sql +++ b/backend/drizzle/0000_white_mandroid.sql @@ -30,15 +30,24 @@ CREATE TABLE "emails" ( CONSTRAINT "emails_email_unique" UNIQUE("email") ); --> statement-breakpoint +CREATE TABLE "inactive_memberships" ( + "created_at" timestamp DEFAULT now() NOT NULL, + "id" varchar PRIMARY KEY NOT NULL, + "context_type" varchar NOT NULL, + "user_id" varchar, + "role" varchar DEFAULT 'member' NOT NULL, + "rejected_at" timestamp, + "created_by" varchar NOT NULL, + "organization_id" varchar NOT NULL +); +--> statement-breakpoint CREATE TABLE "memberships" ( "created_at" timestamp DEFAULT now() NOT NULL, "id" varchar PRIMARY KEY NOT NULL, "context_type" varchar NOT NULL, "user_id" varchar NOT NULL, "role" varchar DEFAULT 'member' NOT NULL, - "token_id" varchar, - "activated_at" timestamp, - "created_by" varchar, + "created_by" varchar NOT NULL, "modified_at" timestamp, "modified_by" varchar, "archived" boolean DEFAULT false NOT NULL, @@ -140,14 +149,12 @@ CREATE TABLE "tokens" ( "single_use_token" varchar, "type" varchar NOT NULL, "email" varchar NOT NULL, - "entity_type" varchar, - "role" varchar, "user_id" varchar, "oauth_account_id" varchar, + "inactive_membership_id" varchar, "created_by" varchar, "expires_at" timestamp with time zone NOT NULL, - "invoked_at" timestamp with time zone, - "organization_id" varchar + "invoked_at" timestamp with time zone ); --> statement-breakpoint CREATE TABLE "totps" ( @@ -197,8 +204,10 @@ ALTER TABLE "attachments" ADD CONSTRAINT "attachments_modified_by_users_id_fk" F ALTER TABLE "attachments" ADD CONSTRAINT "attachments_organization_id_organizations_id_fk" FOREIGN KEY ("organization_id") REFERENCES "public"."organizations"("id") ON DELETE cascade ON UPDATE no action;--> statement-breakpoint ALTER TABLE "emails" ADD CONSTRAINT "emails_token_id_tokens_id_fk" FOREIGN KEY ("token_id") REFERENCES "public"."tokens"("id") ON DELETE set null ON UPDATE no action;--> statement-breakpoint ALTER TABLE "emails" ADD CONSTRAINT "emails_user_id_users_id_fk" FOREIGN KEY ("user_id") REFERENCES "public"."users"("id") ON DELETE cascade ON UPDATE no action;--> statement-breakpoint +ALTER TABLE "inactive_memberships" ADD CONSTRAINT "inactive_memberships_user_id_users_id_fk" FOREIGN KEY ("user_id") REFERENCES "public"."users"("id") ON DELETE cascade ON UPDATE no action;--> statement-breakpoint +ALTER TABLE "inactive_memberships" ADD CONSTRAINT "inactive_memberships_created_by_users_id_fk" FOREIGN KEY ("created_by") REFERENCES "public"."users"("id") ON DELETE cascade ON UPDATE no action;--> statement-breakpoint +ALTER TABLE "inactive_memberships" ADD CONSTRAINT "inactive_memberships_organization_id_organizations_id_fk" FOREIGN KEY ("organization_id") REFERENCES "public"."organizations"("id") ON DELETE cascade ON UPDATE no action;--> statement-breakpoint ALTER TABLE "memberships" ADD CONSTRAINT "memberships_user_id_users_id_fk" FOREIGN KEY ("user_id") REFERENCES "public"."users"("id") ON DELETE cascade ON UPDATE no action;--> statement-breakpoint -ALTER TABLE "memberships" ADD CONSTRAINT "memberships_token_id_tokens_id_fk" FOREIGN KEY ("token_id") REFERENCES "public"."tokens"("id") ON DELETE cascade ON UPDATE no action;--> statement-breakpoint ALTER TABLE "memberships" ADD CONSTRAINT "memberships_created_by_users_id_fk" FOREIGN KEY ("created_by") REFERENCES "public"."users"("id") ON DELETE set null ON UPDATE no action;--> statement-breakpoint ALTER TABLE "memberships" ADD CONSTRAINT "memberships_modified_by_users_id_fk" FOREIGN KEY ("modified_by") REFERENCES "public"."users"("id") ON DELETE set null ON UPDATE no action;--> statement-breakpoint ALTER TABLE "memberships" ADD CONSTRAINT "memberships_organization_id_organizations_id_fk" FOREIGN KEY ("organization_id") REFERENCES "public"."organizations"("id") ON DELETE cascade ON UPDATE no action;--> statement-breakpoint @@ -210,9 +219,9 @@ ALTER TABLE "passwords" ADD CONSTRAINT "passwords_user_id_users_id_fk" FOREIGN K ALTER TABLE "requests" ADD CONSTRAINT "requests_token_id_tokens_id_fk" FOREIGN KEY ("token_id") REFERENCES "public"."tokens"("id") ON DELETE cascade ON UPDATE no action;--> statement-breakpoint ALTER TABLE "sessions" ADD CONSTRAINT "sessions_user_id_users_id_fk" FOREIGN KEY ("user_id") REFERENCES "public"."users"("id") ON DELETE cascade ON UPDATE no action;--> statement-breakpoint ALTER TABLE "tokens" ADD CONSTRAINT "tokens_user_id_users_id_fk" FOREIGN KEY ("user_id") REFERENCES "public"."users"("id") ON DELETE cascade ON UPDATE no action;--> statement-breakpoint -ALTER TABLE "tokens" ADD CONSTRAINT "tokens_oauth_account_id_oauth_accounts_id_fk" FOREIGN KEY ("oauth_account_id") REFERENCES "public"."oauth_accounts"("id") ON DELETE set null ON UPDATE no action;--> statement-breakpoint -ALTER TABLE "tokens" ADD CONSTRAINT "tokens_created_by_users_id_fk" FOREIGN KEY ("created_by") REFERENCES "public"."users"("id") ON DELETE set null ON UPDATE no action;--> statement-breakpoint -ALTER TABLE "tokens" ADD CONSTRAINT "tokens_organization_id_organizations_id_fk" FOREIGN KEY ("organization_id") REFERENCES "public"."organizations"("id") ON DELETE cascade ON UPDATE no action;--> statement-breakpoint +ALTER TABLE "tokens" ADD CONSTRAINT "tokens_oauth_account_id_oauth_accounts_id_fk" FOREIGN KEY ("oauth_account_id") REFERENCES "public"."oauth_accounts"("id") ON DELETE cascade ON UPDATE no action;--> statement-breakpoint +ALTER TABLE "tokens" ADD CONSTRAINT "tokens_inactive_membership_id_inactive_memberships_id_fk" FOREIGN KEY ("inactive_membership_id") REFERENCES "public"."inactive_memberships"("id") ON DELETE cascade ON UPDATE no action;--> statement-breakpoint +ALTER TABLE "tokens" ADD CONSTRAINT "tokens_created_by_users_id_fk" FOREIGN KEY ("created_by") REFERENCES "public"."users"("id") ON DELETE cascade ON UPDATE no action;--> statement-breakpoint ALTER TABLE "totps" ADD CONSTRAINT "totps_user_id_users_id_fk" FOREIGN KEY ("user_id") REFERENCES "public"."users"("id") ON DELETE cascade ON UPDATE no action;--> statement-breakpoint ALTER TABLE "unsubscribe_tokens" ADD CONSTRAINT "unsubscribe_tokens_user_id_users_id_fk" FOREIGN KEY ("user_id") REFERENCES "public"."users"("id") ON DELETE cascade ON UPDATE no action;--> statement-breakpoint ALTER TABLE "users" ADD CONSTRAINT "users_modified_by_users_id_fk" FOREIGN KEY ("modified_by") REFERENCES "public"."users"("id") ON DELETE no action ON UPDATE no action;--> statement-breakpoint diff --git a/backend/drizzle/0001_absurd_whiplash.sql b/backend/drizzle/0001_absurd_whiplash.sql deleted file mode 100644 index 6ddc36461..000000000 --- a/backend/drizzle/0001_absurd_whiplash.sql +++ /dev/null @@ -1,3 +0,0 @@ -ALTER TABLE "memberships" DROP CONSTRAINT "memberships_token_id_tokens_id_fk"; ---> statement-breakpoint -ALTER TABLE "memberships" DROP COLUMN "token_id"; \ No newline at end of file diff --git a/backend/drizzle/meta/0000_snapshot.json b/backend/drizzle/meta/0000_snapshot.json index e863c8aae..a79f801bd 100644 --- a/backend/drizzle/meta/0000_snapshot.json +++ b/backend/drizzle/meta/0000_snapshot.json @@ -1,5 +1,5 @@ { - "id": "eb63c351-3bd9-470d-a7ae-afb456ca323a", + "id": "75889fe0-7d35-4d97-8fda-974acbbaaaa2", "prevId": "00000000-0000-0000-0000-000000000000", "version": "7", "dialect": "postgresql", @@ -277,8 +277,8 @@ "checkConstraints": {}, "isRLSEnabled": false }, - "public.memberships": { - "name": "memberships", + "public.inactive_memberships": { + "name": "inactive_memberships", "schema": "", "columns": { "created_at": { @@ -304,7 +304,7 @@ "name": "user_id", "type": "varchar", "primaryKey": false, - "notNull": true + "notNull": false }, "role": { "name": "role", @@ -313,23 +313,114 @@ "notNull": true, "default": "'member'" }, - "token_id": { - "name": "token_id", - "type": "varchar", + "rejected_at": { + "name": "rejected_at", + "type": "timestamp", "primaryKey": false, "notNull": false }, - "activated_at": { - "name": "activated_at", + "created_by": { + "name": "created_by", + "type": "varchar", + "primaryKey": false, + "notNull": true + }, + "organization_id": { + "name": "organization_id", + "type": "varchar", + "primaryKey": false, + "notNull": true + } + }, + "indexes": {}, + "foreignKeys": { + "inactive_memberships_user_id_users_id_fk": { + "name": "inactive_memberships_user_id_users_id_fk", + "tableFrom": "inactive_memberships", + "tableTo": "users", + "columnsFrom": [ + "user_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "inactive_memberships_created_by_users_id_fk": { + "name": "inactive_memberships_created_by_users_id_fk", + "tableFrom": "inactive_memberships", + "tableTo": "users", + "columnsFrom": [ + "created_by" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "inactive_memberships_organization_id_organizations_id_fk": { + "name": "inactive_memberships_organization_id_organizations_id_fk", + "tableFrom": "inactive_memberships", + "tableTo": "organizations", + "columnsFrom": [ + "organization_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.memberships": { + "name": "memberships", + "schema": "", + "columns": { + "created_at": { + "name": "created_at", "type": "timestamp", "primaryKey": false, - "notNull": false + "notNull": true, + "default": "now()" + }, + "id": { + "name": "id", + "type": "varchar", + "primaryKey": true, + "notNull": true + }, + "context_type": { + "name": "context_type", + "type": "varchar", + "primaryKey": false, + "notNull": true + }, + "user_id": { + "name": "user_id", + "type": "varchar", + "primaryKey": false, + "notNull": true + }, + "role": { + "name": "role", + "type": "varchar", + "primaryKey": false, + "notNull": true, + "default": "'member'" }, "created_by": { "name": "created_by", "type": "varchar", "primaryKey": false, - "notNull": false + "notNull": true }, "modified_at": { "name": "modified_at", @@ -385,19 +476,6 @@ "onDelete": "cascade", "onUpdate": "no action" }, - "memberships_token_id_tokens_id_fk": { - "name": "memberships_token_id_tokens_id_fk", - "tableFrom": "memberships", - "tableTo": "tokens", - "columnsFrom": [ - "token_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, "memberships_created_by_users_id_fk": { "name": "memberships_created_by_users_id_fk", "tableFrom": "memberships", @@ -1155,18 +1233,6 @@ "primaryKey": false, "notNull": true }, - "entity_type": { - "name": "entity_type", - "type": "varchar", - "primaryKey": false, - "notNull": false - }, - "role": { - "name": "role", - "type": "varchar", - "primaryKey": false, - "notNull": false - }, "user_id": { "name": "user_id", "type": "varchar", @@ -1179,6 +1245,12 @@ "primaryKey": false, "notNull": false }, + "inactive_membership_id": { + "name": "inactive_membership_id", + "type": "varchar", + "primaryKey": false, + "notNull": false + }, "created_by": { "name": "created_by", "type": "varchar", @@ -1196,12 +1268,6 @@ "type": "timestamp with time zone", "primaryKey": false, "notNull": false - }, - "organization_id": { - "name": "organization_id", - "type": "varchar", - "primaryKey": false, - "notNull": false } }, "indexes": {}, @@ -1229,28 +1295,28 @@ "columnsTo": [ "id" ], - "onDelete": "set null", + "onDelete": "cascade", "onUpdate": "no action" }, - "tokens_created_by_users_id_fk": { - "name": "tokens_created_by_users_id_fk", + "tokens_inactive_membership_id_inactive_memberships_id_fk": { + "name": "tokens_inactive_membership_id_inactive_memberships_id_fk", "tableFrom": "tokens", - "tableTo": "users", + "tableTo": "inactive_memberships", "columnsFrom": [ - "created_by" + "inactive_membership_id" ], "columnsTo": [ "id" ], - "onDelete": "set null", + "onDelete": "cascade", "onUpdate": "no action" }, - "tokens_organization_id_organizations_id_fk": { - "name": "tokens_organization_id_organizations_id_fk", + "tokens_created_by_users_id_fk": { + "name": "tokens_created_by_users_id_fk", "tableFrom": "tokens", - "tableTo": "organizations", + "tableTo": "users", "columnsFrom": [ - "organization_id" + "created_by" ], "columnsTo": [ "id" diff --git a/backend/drizzle/meta/0001_snapshot.json b/backend/drizzle/meta/0001_snapshot.json deleted file mode 100644 index fcdd7e916..000000000 --- a/backend/drizzle/meta/0001_snapshot.json +++ /dev/null @@ -1,1617 +0,0 @@ -{ - "id": "75cf029a-b353-4de8-bf6a-7a58f15def8a", - "prevId": "eb63c351-3bd9-470d-a7ae-afb456ca323a", - "version": "7", - "dialect": "postgresql", - "tables": { - "public.attachments": { - "name": "attachments", - "schema": "", - "columns": { - "created_at": { - "name": "created_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "id": { - "name": "id", - "type": "varchar", - "primaryKey": true, - "notNull": true - }, - "name": { - "name": "name", - "type": "varchar", - "primaryKey": false, - "notNull": true, - "default": "'attachment'" - }, - "entity_type": { - "name": "entity_type", - "type": "varchar", - "primaryKey": false, - "notNull": true, - "default": "'attachment'" - }, - "public": { - "name": "public", - "type": "boolean", - "primaryKey": false, - "notNull": true, - "default": false - }, - "bucket_name": { - "name": "bucket_name", - "type": "varchar", - "primaryKey": false, - "notNull": true - }, - "group_id": { - "name": "group_id", - "type": "varchar", - "primaryKey": false, - "notNull": false - }, - "filename": { - "name": "filename", - "type": "varchar", - "primaryKey": false, - "notNull": true - }, - "content_type": { - "name": "content_type", - "type": "varchar", - "primaryKey": false, - "notNull": true - }, - "converted_content_type": { - "name": "converted_content_type", - "type": "varchar", - "primaryKey": false, - "notNull": false - }, - "size": { - "name": "size", - "type": "varchar", - "primaryKey": false, - "notNull": true - }, - "original_key": { - "name": "original_key", - "type": "varchar", - "primaryKey": false, - "notNull": true - }, - "converted_key": { - "name": "converted_key", - "type": "varchar", - "primaryKey": false, - "notNull": false - }, - "thumbnail_key": { - "name": "thumbnail_key", - "type": "varchar", - "primaryKey": false, - "notNull": false - }, - "created_by": { - "name": "created_by", - "type": "varchar", - "primaryKey": false, - "notNull": false - }, - "modified_at": { - "name": "modified_at", - "type": "timestamp", - "primaryKey": false, - "notNull": false - }, - "modified_by": { - "name": "modified_by", - "type": "varchar", - "primaryKey": false, - "notNull": false - }, - "organization_id": { - "name": "organization_id", - "type": "varchar", - "primaryKey": false, - "notNull": true - } - }, - "indexes": { - "attachments_organization_id_index": { - "name": "attachments_organization_id_index", - "columns": [ - { - "expression": "organization_id", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": false, - "concurrently": false, - "method": "btree", - "with": {} - } - }, - "foreignKeys": { - "attachments_created_by_users_id_fk": { - "name": "attachments_created_by_users_id_fk", - "tableFrom": "attachments", - "tableTo": "users", - "columnsFrom": [ - "created_by" - ], - "columnsTo": [ - "id" - ], - "onDelete": "set null", - "onUpdate": "no action" - }, - "attachments_modified_by_users_id_fk": { - "name": "attachments_modified_by_users_id_fk", - "tableFrom": "attachments", - "tableTo": "users", - "columnsFrom": [ - "modified_by" - ], - "columnsTo": [ - "id" - ], - "onDelete": "set null", - "onUpdate": "no action" - }, - "attachments_organization_id_organizations_id_fk": { - "name": "attachments_organization_id_organizations_id_fk", - "tableFrom": "attachments", - "tableTo": "organizations", - "columnsFrom": [ - "organization_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.emails": { - "name": "emails", - "schema": "", - "columns": { - "created_at": { - "name": "created_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "id": { - "name": "id", - "type": "varchar", - "primaryKey": true, - "notNull": true - }, - "email": { - "name": "email", - "type": "varchar", - "primaryKey": false, - "notNull": true - }, - "verified": { - "name": "verified", - "type": "boolean", - "primaryKey": false, - "notNull": true, - "default": false - }, - "token_id": { - "name": "token_id", - "type": "varchar", - "primaryKey": false, - "notNull": false - }, - "user_id": { - "name": "user_id", - "type": "varchar", - "primaryKey": false, - "notNull": true - }, - "verified_at": { - "name": "verified_at", - "type": "timestamp", - "primaryKey": false, - "notNull": false - } - }, - "indexes": {}, - "foreignKeys": { - "emails_token_id_tokens_id_fk": { - "name": "emails_token_id_tokens_id_fk", - "tableFrom": "emails", - "tableTo": "tokens", - "columnsFrom": [ - "token_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "set null", - "onUpdate": "no action" - }, - "emails_user_id_users_id_fk": { - "name": "emails_user_id_users_id_fk", - "tableFrom": "emails", - "tableTo": "users", - "columnsFrom": [ - "user_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": { - "emails_email_unique": { - "name": "emails_email_unique", - "nullsNotDistinct": false, - "columns": [ - "email" - ] - } - }, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.memberships": { - "name": "memberships", - "schema": "", - "columns": { - "created_at": { - "name": "created_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "id": { - "name": "id", - "type": "varchar", - "primaryKey": true, - "notNull": true - }, - "context_type": { - "name": "context_type", - "type": "varchar", - "primaryKey": false, - "notNull": true - }, - "user_id": { - "name": "user_id", - "type": "varchar", - "primaryKey": false, - "notNull": true - }, - "role": { - "name": "role", - "type": "varchar", - "primaryKey": false, - "notNull": true, - "default": "'member'" - }, - "activated_at": { - "name": "activated_at", - "type": "timestamp", - "primaryKey": false, - "notNull": false - }, - "created_by": { - "name": "created_by", - "type": "varchar", - "primaryKey": false, - "notNull": false - }, - "modified_at": { - "name": "modified_at", - "type": "timestamp", - "primaryKey": false, - "notNull": false - }, - "modified_by": { - "name": "modified_by", - "type": "varchar", - "primaryKey": false, - "notNull": false - }, - "archived": { - "name": "archived", - "type": "boolean", - "primaryKey": false, - "notNull": true, - "default": false - }, - "muted": { - "name": "muted", - "type": "boolean", - "primaryKey": false, - "notNull": true, - "default": false - }, - "order": { - "name": "order", - "type": "double precision", - "primaryKey": false, - "notNull": true - }, - "organization_id": { - "name": "organization_id", - "type": "varchar", - "primaryKey": false, - "notNull": true - } - }, - "indexes": {}, - "foreignKeys": { - "memberships_user_id_users_id_fk": { - "name": "memberships_user_id_users_id_fk", - "tableFrom": "memberships", - "tableTo": "users", - "columnsFrom": [ - "user_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "memberships_created_by_users_id_fk": { - "name": "memberships_created_by_users_id_fk", - "tableFrom": "memberships", - "tableTo": "users", - "columnsFrom": [ - "created_by" - ], - "columnsTo": [ - "id" - ], - "onDelete": "set null", - "onUpdate": "no action" - }, - "memberships_modified_by_users_id_fk": { - "name": "memberships_modified_by_users_id_fk", - "tableFrom": "memberships", - "tableTo": "users", - "columnsFrom": [ - "modified_by" - ], - "columnsTo": [ - "id" - ], - "onDelete": "set null", - "onUpdate": "no action" - }, - "memberships_organization_id_organizations_id_fk": { - "name": "memberships_organization_id_organizations_id_fk", - "tableFrom": "memberships", - "tableTo": "organizations", - "columnsFrom": [ - "organization_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.oauth_accounts": { - "name": "oauth_accounts", - "schema": "", - "columns": { - "created_at": { - "name": "created_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "id": { - "name": "id", - "type": "varchar", - "primaryKey": true, - "notNull": true - }, - "provider": { - "name": "provider", - "type": "varchar", - "primaryKey": false, - "notNull": true - }, - "provider_user_id": { - "name": "provider_user_id", - "type": "varchar", - "primaryKey": false, - "notNull": true - }, - "email": { - "name": "email", - "type": "varchar", - "primaryKey": false, - "notNull": true - }, - "verified": { - "name": "verified", - "type": "boolean", - "primaryKey": false, - "notNull": true, - "default": false - }, - "verified_at": { - "name": "verified_at", - "type": "timestamp", - "primaryKey": false, - "notNull": false - }, - "user_id": { - "name": "user_id", - "type": "varchar", - "primaryKey": false, - "notNull": true - } - }, - "indexes": {}, - "foreignKeys": { - "oauth_accounts_user_id_users_id_fk": { - "name": "oauth_accounts_user_id_users_id_fk", - "tableFrom": "oauth_accounts", - "tableTo": "users", - "columnsFrom": [ - "user_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": { - "oauth_accounts_provider_providerUserId_email_unique": { - "name": "oauth_accounts_provider_providerUserId_email_unique", - "nullsNotDistinct": false, - "columns": [ - "provider", - "provider_user_id", - "email" - ] - } - }, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.organizations": { - "name": "organizations", - "schema": "", - "columns": { - "created_at": { - "name": "created_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "id": { - "name": "id", - "type": "varchar", - "primaryKey": true, - "notNull": true - }, - "entity_type": { - "name": "entity_type", - "type": "varchar", - "primaryKey": false, - "notNull": true, - "default": "'organization'" - }, - "name": { - "name": "name", - "type": "varchar", - "primaryKey": false, - "notNull": true - }, - "description": { - "name": "description", - "type": "varchar", - "primaryKey": false, - "notNull": false - }, - "slug": { - "name": "slug", - "type": "varchar", - "primaryKey": false, - "notNull": true - }, - "thumbnail_url": { - "name": "thumbnail_url", - "type": "varchar", - "primaryKey": false, - "notNull": false - }, - "banner_url": { - "name": "banner_url", - "type": "varchar", - "primaryKey": false, - "notNull": false - }, - "short_name": { - "name": "short_name", - "type": "varchar", - "primaryKey": false, - "notNull": false - }, - "country": { - "name": "country", - "type": "varchar", - "primaryKey": false, - "notNull": false - }, - "timezone": { - "name": "timezone", - "type": "varchar", - "primaryKey": false, - "notNull": false - }, - "default_language": { - "name": "default_language", - "type": "varchar", - "primaryKey": false, - "notNull": true, - "default": "'en'" - }, - "languages": { - "name": "languages", - "type": "json", - "primaryKey": false, - "notNull": true, - "default": "'[\"en\"]'::json" - }, - "restrictions": { - "name": "restrictions", - "type": "json", - "primaryKey": false, - "notNull": true, - "default": "'{\"user\":1000,\"attachment\":100}'::json" - }, - "notification_email": { - "name": "notification_email", - "type": "varchar", - "primaryKey": false, - "notNull": false - }, - "email_domains": { - "name": "email_domains", - "type": "json", - "primaryKey": false, - "notNull": true, - "default": "'[]'::json" - }, - "color": { - "name": "color", - "type": "varchar", - "primaryKey": false, - "notNull": false - }, - "logo_url": { - "name": "logo_url", - "type": "varchar", - "primaryKey": false, - "notNull": false - }, - "website_url": { - "name": "website_url", - "type": "varchar", - "primaryKey": false, - "notNull": false - }, - "welcome_text": { - "name": "welcome_text", - "type": "varchar", - "primaryKey": false, - "notNull": false - }, - "auth_strategies": { - "name": "auth_strategies", - "type": "json", - "primaryKey": false, - "notNull": true, - "default": "'[]'::json" - }, - "chat_support": { - "name": "chat_support", - "type": "boolean", - "primaryKey": false, - "notNull": true, - "default": false - }, - "created_by": { - "name": "created_by", - "type": "varchar", - "primaryKey": false, - "notNull": false - }, - "modified_at": { - "name": "modified_at", - "type": "timestamp", - "primaryKey": false, - "notNull": false - }, - "modified_by": { - "name": "modified_by", - "type": "varchar", - "primaryKey": false, - "notNull": false - } - }, - "indexes": { - "organizations_name_index": { - "name": "organizations_name_index", - "columns": [ - { - "expression": "name", - "isExpression": false, - "asc": false, - "nulls": "last" - } - ], - "isUnique": false, - "concurrently": false, - "method": "btree", - "with": {} - }, - "organizations_created_at_index": { - "name": "organizations_created_at_index", - "columns": [ - { - "expression": "created_at", - "isExpression": false, - "asc": false, - "nulls": "last" - } - ], - "isUnique": false, - "concurrently": false, - "method": "btree", - "with": {} - } - }, - "foreignKeys": { - "organizations_created_by_users_id_fk": { - "name": "organizations_created_by_users_id_fk", - "tableFrom": "organizations", - "tableTo": "users", - "columnsFrom": [ - "created_by" - ], - "columnsTo": [ - "id" - ], - "onDelete": "set null", - "onUpdate": "no action" - }, - "organizations_modified_by_users_id_fk": { - "name": "organizations_modified_by_users_id_fk", - "tableFrom": "organizations", - "tableTo": "users", - "columnsFrom": [ - "modified_by" - ], - "columnsTo": [ - "id" - ], - "onDelete": "set null", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": { - "organizations_slug_unique": { - "name": "organizations_slug_unique", - "nullsNotDistinct": false, - "columns": [ - "slug" - ] - } - }, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.passkeys": { - "name": "passkeys", - "schema": "", - "columns": { - "id": { - "name": "id", - "type": "varchar", - "primaryKey": true, - "notNull": true - }, - "user_id": { - "name": "user_id", - "type": "varchar", - "primaryKey": false, - "notNull": true - }, - "credential_id": { - "name": "credential_id", - "type": "varchar", - "primaryKey": false, - "notNull": true - }, - "public_key": { - "name": "public_key", - "type": "varchar", - "primaryKey": false, - "notNull": true - }, - "device_name": { - "name": "device_name", - "type": "varchar", - "primaryKey": false, - "notNull": false - }, - "device_type": { - "name": "device_type", - "type": "varchar", - "primaryKey": false, - "notNull": true, - "default": "'desktop'" - }, - "device_os": { - "name": "device_os", - "type": "varchar", - "primaryKey": false, - "notNull": false - }, - "browser": { - "name": "browser", - "type": "varchar", - "primaryKey": false, - "notNull": false - }, - "name_on_device": { - "name": "name_on_device", - "type": "varchar", - "primaryKey": false, - "notNull": true - }, - "created_at": { - "name": "created_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "default": "now()" - } - }, - "indexes": {}, - "foreignKeys": { - "passkeys_user_id_users_id_fk": { - "name": "passkeys_user_id_users_id_fk", - "tableFrom": "passkeys", - "tableTo": "users", - "columnsFrom": [ - "user_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.passwords": { - "name": "passwords", - "schema": "", - "columns": { - "id": { - "name": "id", - "type": "varchar", - "primaryKey": true, - "notNull": true - }, - "hashed_password": { - "name": "hashed_password", - "type": "varchar", - "primaryKey": false, - "notNull": true - }, - "user_id": { - "name": "user_id", - "type": "varchar", - "primaryKey": false, - "notNull": true - }, - "created_at": { - "name": "created_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "modified_at": { - "name": "modified_at", - "type": "timestamp", - "primaryKey": false, - "notNull": false - } - }, - "indexes": {}, - "foreignKeys": { - "passwords_user_id_users_id_fk": { - "name": "passwords_user_id_users_id_fk", - "tableFrom": "passwords", - "tableTo": "users", - "columnsFrom": [ - "user_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": { - "passwords_userId_unique": { - "name": "passwords_userId_unique", - "nullsNotDistinct": false, - "columns": [ - "user_id" - ] - } - }, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.requests": { - "name": "requests", - "schema": "", - "columns": { - "created_at": { - "name": "created_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "id": { - "name": "id", - "type": "varchar", - "primaryKey": true, - "notNull": true - }, - "message": { - "name": "message", - "type": "varchar", - "primaryKey": false, - "notNull": false - }, - "email": { - "name": "email", - "type": "varchar", - "primaryKey": false, - "notNull": true - }, - "type": { - "name": "type", - "type": "varchar", - "primaryKey": false, - "notNull": true - }, - "token_id": { - "name": "token_id", - "type": "varchar", - "primaryKey": false, - "notNull": false - } - }, - "indexes": { - "requests_emails": { - "name": "requests_emails", - "columns": [ - { - "expression": "email", - "isExpression": false, - "asc": false, - "nulls": "last" - } - ], - "isUnique": false, - "concurrently": false, - "method": "btree", - "with": {} - }, - "requests_created_at": { - "name": "requests_created_at", - "columns": [ - { - "expression": "created_at", - "isExpression": false, - "asc": false, - "nulls": "last" - } - ], - "isUnique": false, - "concurrently": false, - "method": "btree", - "with": {} - } - }, - "foreignKeys": { - "requests_token_id_tokens_id_fk": { - "name": "requests_token_id_tokens_id_fk", - "tableFrom": "requests", - "tableTo": "tokens", - "columnsFrom": [ - "token_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.sessions": { - "name": "sessions", - "schema": "", - "columns": { - "created_at": { - "name": "created_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "id": { - "name": "id", - "type": "varchar", - "primaryKey": true, - "notNull": true - }, - "token": { - "name": "token", - "type": "varchar", - "primaryKey": false, - "notNull": true - }, - "type": { - "name": "type", - "type": "varchar", - "primaryKey": false, - "notNull": true, - "default": "'regular'" - }, - "user_id": { - "name": "user_id", - "type": "varchar", - "primaryKey": false, - "notNull": true - }, - "device_name": { - "name": "device_name", - "type": "varchar", - "primaryKey": false, - "notNull": false - }, - "device_type": { - "name": "device_type", - "type": "varchar", - "primaryKey": false, - "notNull": true, - "default": "'desktop'" - }, - "device_os": { - "name": "device_os", - "type": "varchar", - "primaryKey": false, - "notNull": false - }, - "browser": { - "name": "browser", - "type": "varchar", - "primaryKey": false, - "notNull": false - }, - "auth_strategy": { - "name": "auth_strategy", - "type": "varchar", - "primaryKey": false, - "notNull": true - }, - "expires_at": { - "name": "expires_at", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true - } - }, - "indexes": {}, - "foreignKeys": { - "sessions_user_id_users_id_fk": { - "name": "sessions_user_id_users_id_fk", - "tableFrom": "sessions", - "tableTo": "users", - "columnsFrom": [ - "user_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.tokens": { - "name": "tokens", - "schema": "", - "columns": { - "created_at": { - "name": "created_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "id": { - "name": "id", - "type": "varchar", - "primaryKey": true, - "notNull": true - }, - "token": { - "name": "token", - "type": "varchar", - "primaryKey": false, - "notNull": true - }, - "single_use_token": { - "name": "single_use_token", - "type": "varchar", - "primaryKey": false, - "notNull": false - }, - "type": { - "name": "type", - "type": "varchar", - "primaryKey": false, - "notNull": true - }, - "email": { - "name": "email", - "type": "varchar", - "primaryKey": false, - "notNull": true - }, - "entity_type": { - "name": "entity_type", - "type": "varchar", - "primaryKey": false, - "notNull": false - }, - "role": { - "name": "role", - "type": "varchar", - "primaryKey": false, - "notNull": false - }, - "user_id": { - "name": "user_id", - "type": "varchar", - "primaryKey": false, - "notNull": false - }, - "oauth_account_id": { - "name": "oauth_account_id", - "type": "varchar", - "primaryKey": false, - "notNull": false - }, - "created_by": { - "name": "created_by", - "type": "varchar", - "primaryKey": false, - "notNull": false - }, - "expires_at": { - "name": "expires_at", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true - }, - "invoked_at": { - "name": "invoked_at", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": false - }, - "organization_id": { - "name": "organization_id", - "type": "varchar", - "primaryKey": false, - "notNull": false - } - }, - "indexes": {}, - "foreignKeys": { - "tokens_user_id_users_id_fk": { - "name": "tokens_user_id_users_id_fk", - "tableFrom": "tokens", - "tableTo": "users", - "columnsFrom": [ - "user_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "tokens_oauth_account_id_oauth_accounts_id_fk": { - "name": "tokens_oauth_account_id_oauth_accounts_id_fk", - "tableFrom": "tokens", - "tableTo": "oauth_accounts", - "columnsFrom": [ - "oauth_account_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "set null", - "onUpdate": "no action" - }, - "tokens_created_by_users_id_fk": { - "name": "tokens_created_by_users_id_fk", - "tableFrom": "tokens", - "tableTo": "users", - "columnsFrom": [ - "created_by" - ], - "columnsTo": [ - "id" - ], - "onDelete": "set null", - "onUpdate": "no action" - }, - "tokens_organization_id_organizations_id_fk": { - "name": "tokens_organization_id_organizations_id_fk", - "tableFrom": "tokens", - "tableTo": "organizations", - "columnsFrom": [ - "organization_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.totps": { - "name": "totps", - "schema": "", - "columns": { - "id": { - "name": "id", - "type": "varchar", - "primaryKey": true, - "notNull": true - }, - "user_id": { - "name": "user_id", - "type": "varchar", - "primaryKey": false, - "notNull": true - }, - "secret": { - "name": "secret", - "type": "varchar", - "primaryKey": false, - "notNull": true - }, - "created_at": { - "name": "created_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "default": "now()" - } - }, - "indexes": {}, - "foreignKeys": { - "totps_user_id_users_id_fk": { - "name": "totps_user_id_users_id_fk", - "tableFrom": "totps", - "tableTo": "users", - "columnsFrom": [ - "user_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.unsubscribe_tokens": { - "name": "unsubscribe_tokens", - "schema": "", - "columns": { - "id": { - "name": "id", - "type": "varchar", - "primaryKey": true, - "notNull": true - }, - "user_id": { - "name": "user_id", - "type": "varchar", - "primaryKey": false, - "notNull": true - }, - "token": { - "name": "token", - "type": "varchar", - "primaryKey": false, - "notNull": true - }, - "created_at": { - "name": "created_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "default": "now()" - } - }, - "indexes": { - "users_token_index": { - "name": "users_token_index", - "columns": [ - { - "expression": "token", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": false, - "concurrently": false, - "method": "btree", - "with": {} - } - }, - "foreignKeys": { - "unsubscribe_tokens_user_id_users_id_fk": { - "name": "unsubscribe_tokens_user_id_users_id_fk", - "tableFrom": "unsubscribe_tokens", - "tableTo": "users", - "columnsFrom": [ - "user_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": { - "unsubscribe_tokens_userId_unique": { - "name": "unsubscribe_tokens_userId_unique", - "nullsNotDistinct": false, - "columns": [ - "user_id" - ] - }, - "unsubscribe_tokens_token_unique": { - "name": "unsubscribe_tokens_token_unique", - "nullsNotDistinct": false, - "columns": [ - "token" - ] - } - }, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.users": { - "name": "users", - "schema": "", - "columns": { - "created_at": { - "name": "created_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "id": { - "name": "id", - "type": "varchar", - "primaryKey": true, - "notNull": true - }, - "entity_type": { - "name": "entity_type", - "type": "varchar", - "primaryKey": false, - "notNull": true, - "default": "'user'" - }, - "name": { - "name": "name", - "type": "varchar", - "primaryKey": false, - "notNull": true - }, - "description": { - "name": "description", - "type": "varchar", - "primaryKey": false, - "notNull": false - }, - "slug": { - "name": "slug", - "type": "varchar", - "primaryKey": false, - "notNull": true - }, - "thumbnail_url": { - "name": "thumbnail_url", - "type": "varchar", - "primaryKey": false, - "notNull": false - }, - "banner_url": { - "name": "banner_url", - "type": "varchar", - "primaryKey": false, - "notNull": false - }, - "email": { - "name": "email", - "type": "varchar", - "primaryKey": false, - "notNull": true - }, - "mfa_required": { - "name": "mfa_required", - "type": "boolean", - "primaryKey": false, - "notNull": true, - "default": false - }, - "first_name": { - "name": "first_name", - "type": "varchar", - "primaryKey": false, - "notNull": false - }, - "last_name": { - "name": "last_name", - "type": "varchar", - "primaryKey": false, - "notNull": false - }, - "language": { - "name": "language", - "type": "varchar", - "primaryKey": false, - "notNull": true, - "default": "'en'" - }, - "newsletter": { - "name": "newsletter", - "type": "boolean", - "primaryKey": false, - "notNull": true, - "default": false - }, - "role": { - "name": "role", - "type": "varchar", - "primaryKey": false, - "notNull": true, - "default": "'user'" - }, - "user_flags": { - "name": "user_flags", - "type": "jsonb", - "primaryKey": false, - "notNull": true, - "default": "'{}'::jsonb" - }, - "modified_at": { - "name": "modified_at", - "type": "timestamp", - "primaryKey": false, - "notNull": false - }, - "last_seen_at": { - "name": "last_seen_at", - "type": "timestamp", - "primaryKey": false, - "notNull": false - }, - "last_started_at": { - "name": "last_started_at", - "type": "timestamp", - "primaryKey": false, - "notNull": false - }, - "last_sign_in_at": { - "name": "last_sign_in_at", - "type": "timestamp", - "primaryKey": false, - "notNull": false - }, - "modified_by": { - "name": "modified_by", - "type": "varchar", - "primaryKey": false, - "notNull": false - } - }, - "indexes": { - "users_name_index": { - "name": "users_name_index", - "columns": [ - { - "expression": "name", - "isExpression": false, - "asc": false, - "nulls": "last" - } - ], - "isUnique": false, - "concurrently": false, - "method": "btree", - "with": {} - }, - "users_email_index": { - "name": "users_email_index", - "columns": [ - { - "expression": "email", - "isExpression": false, - "asc": false, - "nulls": "last" - } - ], - "isUnique": false, - "concurrently": false, - "method": "btree", - "with": {} - }, - "users_created_at_index": { - "name": "users_created_at_index", - "columns": [ - { - "expression": "created_at", - "isExpression": false, - "asc": false, - "nulls": "last" - } - ], - "isUnique": false, - "concurrently": false, - "method": "btree", - "with": {} - } - }, - "foreignKeys": { - "users_modified_by_users_id_fk": { - "name": "users_modified_by_users_id_fk", - "tableFrom": "users", - "tableTo": "users", - "columnsFrom": [ - "modified_by" - ], - "columnsTo": [ - "id" - ], - "onDelete": "no action", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": { - "users_slug_unique": { - "name": "users_slug_unique", - "nullsNotDistinct": false, - "columns": [ - "slug" - ] - }, - "users_email_unique": { - "name": "users_email_unique", - "nullsNotDistinct": false, - "columns": [ - "email" - ] - } - }, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - } - }, - "enums": {}, - "schemas": {}, - "sequences": {}, - "roles": {}, - "policies": {}, - "views": {}, - "_meta": { - "columns": {}, - "schemas": {}, - "tables": {} - } -} \ No newline at end of file diff --git a/backend/drizzle/meta/_journal.json b/backend/drizzle/meta/_journal.json index 80a627c15..6cc3c5281 100644 --- a/backend/drizzle/meta/_journal.json +++ b/backend/drizzle/meta/_journal.json @@ -5,15 +5,8 @@ { "idx": 0, "version": "7", - "when": 1758835199217, - "tag": "0000_modern_black_queen", - "breakpoints": true - }, - { - "idx": 1, - "version": "7", - "when": 1760949896936, - "tag": "0001_absurd_whiplash", + "when": 1761859075070, + "tag": "0000_white_mandroid", "breakpoints": true } ] diff --git a/backend/mocks/basic.ts b/backend/mocks/basic.ts index 31541ab02..7913088d5 100644 --- a/backend/mocks/basic.ts +++ b/backend/mocks/basic.ts @@ -176,7 +176,7 @@ export const mockOrganizationMembership = (organization: OrganizationModel, user role: faker.helpers.arrayElement(appConfig.roles.entityRoles), order: getMembershipOrderOffset(organization.id) * 10, createdAt: pastIsoDate(), - activatedAt: pastIsoDate(), + createdBy: user.id, } } diff --git a/backend/package.json b/backend/package.json index d2b4ed6b1..5e2a3a2cc 100644 --- a/backend/package.json +++ b/backend/package.json @@ -40,79 +40,79 @@ }, "dependencies": { "@asteasolutions/zod-to-openapi": "8.1.0", - "@aws-sdk/client-s3": "^3.908.0", - "@aws-sdk/cloudfront-signer": "^3.901.0", - "@aws-sdk/lib-storage": "^3.908.0", - "@aws-sdk/s3-request-presigner": "^3.908.0", + "@aws-sdk/client-s3": "^3.920.0", + "@aws-sdk/cloudfront-signer": "^3.916.0", + "@aws-sdk/lib-storage": "^3.920.0", + "@aws-sdk/s3-request-presigner": "^3.920.0", "@cellajs/permission-manager": "^0.1.0", "@dotenv-run/core": "^1.3.8", - "@electric-sql/pglite": "^0.3.10", + "@electric-sql/pglite": "^0.3.11", "@getbrevo/brevo": "2.5.0", "@hono/node-server": "^1.19.5", - "@hono/zod-openapi": "1.1.3", + "@hono/zod-openapi": "1.1.4", "@logtail/node": "^0.5.6", "@node-rs/argon2": "^2.0.2", - "@novu/api": "^1.7.1", + "@novu/api": "^1.8.0", "@opentelemetry/api": "^1.9.0", "@opentelemetry/instrumentation-http": "^0.206.0", - "@opentelemetry/resources": "^2.1.0", + "@opentelemetry/resources": "^2.2.0", "@opentelemetry/sdk-node": "^0.206.0", - "@opentelemetry/sdk-trace-node": "^2.1.0", + "@opentelemetry/sdk-trace-node": "^2.2.0", "@opentelemetry/semantic-conventions": "^1.37.0", "@oslojs/crypto": "^1.0.1", "@oslojs/encoding": "^1.1.0", "@oslojs/otp": "^1.1.0", "@oslojs/webauthn": "^1.0.0", "@paddle/paddle-node-sdk": "^3.3.0", - "@scalar/hono-api-reference": "^0.9.21", + "@scalar/hono-api-reference": "^0.9.22", "@sendgrid/mail": "^8.1.6", - "@sentry/cli": "^2.56.1", + "@sentry/cli": "^2.57.0", "@sentry/node": "^9.46.0", "@sentry/profiling-node": "^9.46.0", "@t3-oss/env-core": "^0.13.8", "arctic": "^3.7.0", "config": "workspace:*", - "drizzle-orm": "^0.44.6", + "drizzle-orm": "^0.44.7", "drizzle-zod": "0.8.3", "enforce-unique": "^1.3.0", - "hono": "4.9.11", + "hono": "4.10.4", "i18next": "^25.6.0", "isbot": "^5.1.31", - "jsdom": "^27.0.0", + "jsdom": "^27.0.1", "jsonwebtoken": "^9.0.2", - "jsx-email": "^2.7.4", + "jsx-email": "^2.8.1", "locales": "workspace:*", "nanoid": "^5.1.6", "node-html-parser": "^7.0.1", "pg": "^8.16.3", - "pino": "^10.0.0", + "pino": "^10.1.0", "pino-http": "^11.0.0", "prom-client": "^15.1.3", - "rate-limiter-flexible": "^8.0.1", + "rate-limiter-flexible": "^8.1.0", "react": "^19.2.0", "react-dom": "^19.2.0", - "react-i18next": "^16.0.0", + "react-i18next": "^16.2.2", "slugify": "^1.6.6", "ua-parser-js": "^2.0.6", "zod": "4.1.12" }, "devDependencies": { "@commander-js/extra-typings": "^14.0.0", - "@faker-js/faker": "^10.0.0", + "@faker-js/faker": "^10.1.0", "@ngrok/ngrok": "^1.5.2", "@types/jsdom": "^27.0.0", "@types/jsonwebtoken": "^9.0.10", - "@types/node": "^24.7.2", + "@types/node": "^24.9.2", "@types/papaparse": "^5.3.16", - "@types/pg": "^8.15.5", + "@types/pg": "^8.15.6", "@types/react": "^19.2.2", "@types/ua-parser-js": "^0.7.39", "@typescript/native-preview": "7.0.0-dev.20250910.1", "chalk": "^5.6.2", - "commander": "^14.0.1", + "commander": "^14.0.2", "cross-env": "^10.1.0", "dotenv": "^17.2.3", - "drizzle-kit": "^0.31.5", + "drizzle-kit": "^0.31.6", "papaparse": "^5.5.3", "pino-pretty": "^13.1.2", "tsup": "^8.5.0", diff --git a/backend/src/db/schema/attachments.ts b/backend/src/db/schema/attachments.ts index 80c04cdc2..6c2538eef 100644 --- a/backend/src/db/schema/attachments.ts +++ b/backend/src/db/schema/attachments.ts @@ -4,6 +4,9 @@ import { usersTable } from '#/db/schema/users'; import { timestampColumns } from '#/db/utils/timestamp-columns'; import { nanoid } from '#/utils/nanoid'; +/** + * Attachments table to store file metadata and relations. + */ export const attachmentsTable = pgTable( 'attachments', { diff --git a/backend/src/db/schema/emails.ts b/backend/src/db/schema/emails.ts index 197611a12..f0292b1fc 100644 --- a/backend/src/db/schema/emails.ts +++ b/backend/src/db/schema/emails.ts @@ -4,6 +4,9 @@ import { usersTable } from '#/db/schema/users'; import { timestampColumns } from '#/db/utils/timestamp-columns'; import { nanoid } from '#/utils/nanoid'; +/** + * Emails table. Users can have multiple emails, each needing verification. They can be linked to tokens for verification purposes. + */ export const emailsTable = pgTable('emails', { createdAt: timestampColumns.createdAt, id: varchar().primaryKey().$defaultFn(nanoid), diff --git a/backend/src/db/schema/inactive-memberships.ts b/backend/src/db/schema/inactive-memberships.ts new file mode 100644 index 000000000..60204206b --- /dev/null +++ b/backend/src/db/schema/inactive-memberships.ts @@ -0,0 +1,30 @@ +import { appConfig } from 'config'; +import { timestamp, varchar } from 'drizzle-orm/pg-core'; +import { usersTable } from '#/db/schema/users'; +import { generateContextEntityTypeFields } from '#/db/utils/generate-context-entity-fields'; +import { generateTable } from '#/db/utils/generate-table'; +import { timestampColumns } from '#/db/utils/timestamp-columns'; +import { nanoid } from '#/utils/nanoid'; + +const roleEnum = appConfig.roles.entityRoles; + +const { organizationId, ...otherEntityIdColumns } = generateContextEntityTypeFields(); + +const baseColumns = { + createdAt: timestampColumns.createdAt, + id: varchar().primaryKey().$defaultFn(nanoid), + contextType: varchar({ enum: appConfig.contextEntityTypes }).notNull(), + userId: varchar().references(() => usersTable.id, { onDelete: 'cascade' }), + role: varchar({ enum: roleEnum }).notNull().default('member'), + rejectedAt: timestamp({ mode: 'string' }), + createdBy: varchar() + .notNull() + .references(() => usersTable.id, { onDelete: 'cascade' }), + organizationId: organizationId.notNull(), +}; + +// Generate entity id columns based on entity-config +export const inactiveMembershipsTable = generateTable('inactive_memberships', baseColumns, otherEntityIdColumns); + +export type InactiveMembershipModel = typeof inactiveMembershipsTable.$inferSelect; +export type InsertInactiveMembershipModel = typeof inactiveMembershipsTable.$inferInsert; diff --git a/backend/src/db/schema/memberships.ts b/backend/src/db/schema/memberships.ts index 5fef1dd8b..204e369e1 100644 --- a/backend/src/db/schema/memberships.ts +++ b/backend/src/db/schema/memberships.ts @@ -1,5 +1,5 @@ import { appConfig } from 'config'; -import { boolean, doublePrecision, timestamp, varchar } from 'drizzle-orm/pg-core'; +import { boolean, doublePrecision, varchar } from 'drizzle-orm/pg-core'; import { usersTable } from '#/db/schema/users'; import { generateContextEntityTypeFields } from '#/db/utils/generate-context-entity-fields'; import { generateTable } from '#/db/utils/generate-table'; @@ -18,8 +18,9 @@ const baseColumns = { .notNull() .references(() => usersTable.id, { onDelete: 'cascade' }), role: varchar({ enum: roleEnum }).notNull().default('member'), - activatedAt: timestamp({ mode: 'string' }), - createdBy: varchar().references(() => usersTable.id, { onDelete: 'set null' }), + createdBy: varchar() + .notNull() + .references(() => usersTable.id, { onDelete: 'set null' }), modifiedAt: timestampColumns.modifiedAt, modifiedBy: varchar().references(() => usersTable.id, { onDelete: 'set null' }), archived: boolean().default(false).notNull(), diff --git a/backend/src/db/schema/oauth-accounts.ts b/backend/src/db/schema/oauth-accounts.ts index 9f0435e11..4c52fd679 100644 --- a/backend/src/db/schema/oauth-accounts.ts +++ b/backend/src/db/schema/oauth-accounts.ts @@ -5,6 +5,10 @@ import { nanoid } from '#/utils/nanoid'; export const supportedOAuthProviders = ['github', 'google', 'microsoft'] as const; +/** + * OAuth accounts table to store third-party authentication details. + * Users can link multiple an OAuth accounts to their profile. + */ export const oauthAccountsTable = pgTable( 'oauth_accounts', { diff --git a/backend/src/db/schema/tokens.ts b/backend/src/db/schema/tokens.ts index 20044147a..950254fde 100644 --- a/backend/src/db/schema/tokens.ts +++ b/backend/src/db/schema/tokens.ts @@ -1,41 +1,32 @@ import { appConfig } from 'config'; -import { timestamp, varchar } from 'drizzle-orm/pg-core'; +import { pgTable, timestamp, varchar } from 'drizzle-orm/pg-core'; +import { inactiveMembershipsTable } from '#/db/schema/inactive-memberships'; import { oauthAccountsTable } from '#/db/schema/oauth-accounts'; import { usersTable } from '#/db/schema/users'; -import { generateContextEntityTypeFields } from '#/db/utils/generate-context-entity-fields'; -import { generateTable } from '#/db/utils/generate-table'; import { timestampColumns } from '#/db/utils/timestamp-columns'; import { nanoid } from '#/utils/nanoid'; const tokenTypeEnum = appConfig.tokenTypes; -const roleEnum = appConfig.roles.entityRoles; -// Base columns for tokens table -const baseColumns = { +/** + * Tokens table contains tokens of different types: email verification, invitation, password reset. + * A token is always related to a userId. It can also be related to an entityId (e.g. organizationId, projectId, etc.). + * + * @link http://localhost:4000/docs#tag/tokens + */ +export const tokensTable = pgTable('tokens', { createdAt: timestampColumns.createdAt, id: varchar().primaryKey().$defaultFn(nanoid), token: varchar().notNull(), singleUseToken: varchar(), type: varchar({ enum: tokenTypeEnum }).notNull(), email: varchar().notNull(), - entityType: varchar({ enum: appConfig.contextEntityTypes }), - role: varchar({ enum: roleEnum }), userId: varchar().references(() => usersTable.id, { onDelete: 'cascade' }), - oauthAccountId: varchar().references(() => oauthAccountsTable.id, { onDelete: 'set null' }), - createdBy: varchar().references(() => usersTable.id, { onDelete: 'set null' }), + oauthAccountId: varchar().references(() => oauthAccountsTable.id, { onDelete: 'cascade' }), + inactiveMembershipId: varchar().references(() => inactiveMembershipsTable.id, { onDelete: 'cascade' }), + createdBy: varchar().references(() => usersTable.id, { onDelete: 'cascade' }), expiresAt: timestampColumns.expiresAt, invokedAt: timestamp({ withTimezone: true, mode: 'date' }), -}; - -// Generate entity id columns based on entity-config -const additionalColumns = generateContextEntityTypeFields(); - -/** - * Tokens table contains tokens of different types: email verification, invitation, password reset. - * A token is always related to a userId. It can also be related to an entityId (e.g. organizationId, projectId, etc.). - * - * @link http://localhost:4000/docs#tag/tokens - */ -export const tokensTable = generateTable('tokens', baseColumns, additionalColumns); +}); export type TokenModel = typeof tokensTable.$inferSelect; diff --git a/backend/src/db/utils/generate-context-entity-fields.ts b/backend/src/db/utils/generate-context-entity-fields.ts index 1ec35ea25..8b25d9642 100644 --- a/backend/src/db/utils/generate-context-entity-fields.ts +++ b/backend/src/db/utils/generate-context-entity-fields.ts @@ -4,7 +4,7 @@ import type { ContextEntityTypeColumns } from '#/db/types'; import { entityTables } from '#/entity-config'; /** - * Helper function to generate fields dynamically based on `appConfig.contextEntityTypes`, + * Generate fields dynamically based on `appConfig.contextEntityTypes`, * loops through and create references for each entity type, ensuring proper relational mapping. * * @returns A set of dynamically generated fields for context entities. diff --git a/backend/src/lib/docs.ts b/backend/src/lib/docs.ts index 4c1647646..d6087ac1f 100644 --- a/backend/src/lib/docs.ts +++ b/backend/src/lib/docs.ts @@ -8,7 +8,7 @@ import { apiModulesList, registerAppSchema } from '#/lib/docs-config'; import { attachmentSchema } from '#/modules/attachments/schema'; import { contextEntityBaseSchema } from '#/modules/entities/schema-base'; import { menuSchema } from '#/modules/me/schema'; -import { membershipBaseSchema, membershipSchema } from '#/modules/memberships/schema'; +import { inactiveMembershipSchema, membershipBaseSchema, membershipSchema } from '#/modules/memberships/schema'; import { organizationSchema } from '#/modules/organizations/schema'; import { userSchema } from '#/modules/users/schema'; import { userBaseSchema } from '#/modules/users/schema-base'; @@ -47,17 +47,18 @@ const docs = async (app: OpenAPIHono, skipScalar = false) => { }); // Register lower-level (base) schemas - registry.register('UserBaseSchema', userBaseSchema); - registry.register('ContextEntityBaseSchema', contextEntityBaseSchema); - registry.register('MembershipBaseSchema', membershipBaseSchema); + registry.register('UserBase', userBaseSchema); + registry.register('ContextEntityBase', contextEntityBaseSchema); + registry.register('MembershipBase', membershipBaseSchema); // Register entity schemas registry.register('User', userSchema); registry.register('Organization', organizationSchema); registry.register('Membership', membershipSchema); + registry.register('InactiveMembership', inactiveMembershipSchema); registry.register('Attachment', attachmentSchema); - registry.register('MenuSchema', menuSchema); + registry.register('Menu', menuSchema); registry.register('ApiError', apiErrorSchema); registerAppSchema(registry); diff --git a/backend/src/middlewares/guard/is-authenticated.ts b/backend/src/middlewares/guard/is-authenticated.ts index 47937bfd6..3c9098136 100644 --- a/backend/src/middlewares/guard/is-authenticated.ts +++ b/backend/src/middlewares/guard/is-authenticated.ts @@ -1,5 +1,5 @@ import * as Sentry from '@sentry/node'; -import { and, eq, isNotNull } from 'drizzle-orm'; +import { eq } from 'drizzle-orm'; import type { MiddlewareHandler } from 'hono'; import { createMiddleware } from 'hono/factory'; import { db } from '#/db/db'; @@ -44,10 +44,7 @@ export const isAuthenticated: MiddlewareHandler = createMiddleware(asy }); // Fetch user's memberships from the database - const memberships = await db - .select() - .from(membershipsTable) - .where(and(eq(membershipsTable.userId, user.id), isNotNull(membershipsTable.activatedAt))); + const memberships = await db.select().from(membershipsTable).where(eq(membershipsTable.userId, user.id)); ctx.set('memberships', memberships); } catch (err) { diff --git a/backend/src/modules/auth/general/handlers.ts b/backend/src/modules/auth/general/handlers.ts index 3939271ff..682ee0b90 100644 --- a/backend/src/modules/auth/general/handlers.ts +++ b/backend/src/modules/auth/general/handlers.ts @@ -1,10 +1,11 @@ import { OpenAPIHono } from '@hono/zod-openapi'; import { appConfig } from 'config'; -import { and, desc, eq, isNotNull, isNull } from 'drizzle-orm'; +import { and, desc, eq } from 'drizzle-orm'; import i18n from 'i18next'; import { nanoid } from 'nanoid'; import { db } from '#/db/db'; import { emailsTable } from '#/db/schema/emails'; +import { inactiveMembershipsTable } from '#/db/schema/inactive-memberships'; import { sessionsTable } from '#/db/schema/sessions'; import { tokensTable } from '#/db/schema/tokens'; import { usersTable } from '#/db/schema/users'; @@ -17,7 +18,7 @@ import { getParsedSessionCookie, setUserSession, validateSession } from '#/modul import authGeneralRoutes from '#/modules/auth/general/routes'; import { handleOAuthVerification } from '#/modules/auth/oauth/helpers/handle-oauth-verification'; import { handleEmailVerification } from '#/modules/auth/passwords/helpers/handle-email-verification'; -import { usersBaseQuery } from '#/modules/users/helpers/select'; +import { userSelect } from '#/modules/users/helpers/select'; import { defaultHook } from '#/utils/default-hook'; import { getValidSingleUseToken } from '#/utils/get-valid-single-use-token'; import { getValidToken } from '#/utils/get-valid-token'; @@ -27,6 +28,7 @@ import { encodeLowerCased } from '#/utils/oslo'; import { slugFromEmail } from '#/utils/slug-from-email'; import { createDate, TimeSpan } from '#/utils/time-span'; import { MemberInviteWithTokenEmail, MemberInviteWithTokenEmailProps } from '../../../../emails/member-invite-with-token'; +import { SystemInviteEmail, SystemInviteEmailProps } from '../../../../emails/system-invite'; const app = new OpenAPIHono({ defaultHook }); @@ -39,26 +41,10 @@ const authGeneralRouteHandlers = app const normalizedEmail = email.toLowerCase().trim(); - // If entering while having an unclaimed invitation token, abort and resend that invitation instead to prevent conflicts later - const [inviteToken] = await db - .select() - .from(tokensTable) - .where( - and( - eq(tokensTable.email, normalizedEmail), - eq(tokensTable.type, 'invitation'), - isNull(tokensTable.userId), - isNotNull(tokensTable.entityType), - isNotNull(tokensTable.role), - isNull(tokensTable.invokedAt), - ), - ) - .limit(1); - - if (inviteToken) throw new AppError({ status: 403, type: 'invite_takes_priority', severity: 'warn' }); - // User not found, go to sign up if registration is enabled - const [user] = await usersBaseQuery() + const [user] = await db + .select(userSelect) + .from(usersTable) .leftJoin(emailsTable, eq(usersTable.id, emailsTable.userId)) .where(eq(emailsTable.email, normalizedEmail)) .limit(1); @@ -103,7 +89,6 @@ const authGeneralRouteHandlers = app * Get token data by single use token in cookie */ .openapi(authGeneralRoutes.getTokenData, async (ctx) => { - // Find token in request const { type: tokenType, id: tokenId } = ctx.req.valid('param'); // Check if token session is valid @@ -114,16 +99,15 @@ const authGeneralRouteHandlers = app const data = { email: tokenRecord.email, - role: tokenRecord.role, userId: tokenRecord.userId || '', - organizationId: tokenRecord.organizationId || '', + inactiveMembershipId: tokenRecord.inactiveMembershipId || '', }; - // If its NOT an organization invitation, return base data - if (!tokenRecord.organizationId) return ctx.json(data, 200); + // If its NOT an membership invitation, return base data + if (!tokenRecord.inactiveMembershipId) return ctx.json(data, 200); // If it is a membership invitation, check if a new user has been created since invitation was sent (without verifying email) - const [existingUser] = await usersBaseQuery().where(eq(usersTable.email, tokenRecord.email)); + const [existingUser] = await db.select(userSelect).from(usersTable).where(eq(usersTable.email, tokenRecord.email)); if (!tokenRecord.userId && existingUser) { await db.update(tokensTable).set({ userId: existingUser.id }).where(eq(tokensTable.id, tokenRecord.id)); data.userId = existingUser.id; @@ -137,7 +121,7 @@ const authGeneralRouteHandlers = app .openapi(authGeneralRoutes.startImpersonation, async (ctx) => { const { targetUserId } = ctx.req.valid('query'); - const [user] = await usersBaseQuery().where(eq(usersTable.id, targetUserId)).limit(1); + const [user] = await db.select(userSelect).from(usersTable).where(eq(usersTable.id, targetUserId)).limit(1); if (!user) throw new AppError({ status: 404, type: 'not_found', severity: 'warn', entityType: 'user', meta: { targetUserId } }); @@ -178,14 +162,13 @@ const authGeneralRouteHandlers = app }) /** * Resend invitation email with token for entity invites and system invites. - * TODO system invites not yet implemented, move entire sending email logic to helper */ .openapi(authGeneralRoutes.resendInvitationWithToken, async (ctx) => { const { email, tokenId } = ctx.req.valid('json'); const normalizedEmail = email?.toLowerCase().trim(); - const filters = [eq(tokensTable.type, 'invitation'), isNotNull(tokensTable.entityType), isNotNull(tokensTable.role)]; + const filters = [eq(tokensTable.type, 'invitation')]; if (normalizedEmail) filters.push(eq(tokensTable.email, normalizedEmail)); else if (tokenId) filters.push(eq(tokensTable.id, tokenId)); @@ -201,16 +184,7 @@ const authGeneralRouteHandlers = app if (!oldToken) throw new AppError({ status: 404, type: 'token_not_found', severity: 'error' }); - const { entityType, role, email: userEmail } = oldToken; - - if (!entityType || !role) throw new AppError({ status: 500, type: 'server_error', severity: 'error' }); - - const entityIdField = appConfig.entityIdFields[entityType]; - const entityId = oldToken[entityIdField]; - if (!entityId) throw new AppError({ status: 500, type: 'server_error', entityType, severity: 'error' }); - - const entity = await resolveEntity(entityType, entityId); - if (!entity) throw new AppError({ status: 404, type: 'not_found', severity: 'error', entityType }); + const { email: userEmail } = oldToken; // Generate token and store hashed const newToken = nanoid(40); @@ -232,32 +206,48 @@ const authGeneralRouteHandlers = app memberInviteLink: `${appConfig.backendAuthUrl}/invoke-token/${oldToken.type}/${newToken}`, }; - let senderName = 'System'; - let senderThumbnailUrl: null | string = null; + // Prepare email props, default is system invite + const defaultEmailProps = { + senderName: 'System', + senderThumbnailUrl: null as string | null, + subject: i18n.t('backend:email.system_invite.subject', { + lng: appConfig.defaultLanguage, + }), + lng: appConfig.defaultLanguage, + }; // Get original sender if (oldToken.createdBy) { - const [sender] = await usersBaseQuery().where(eq(usersTable.id, oldToken.createdBy)).limit(1); - - senderName = sender.name; - senderThumbnailUrl = sender.thumbnailUrl; + const [sender] = await db.select(userSelect).from(usersTable).where(eq(usersTable.id, oldToken.createdBy)).limit(1); + defaultEmailProps.senderName = sender.name; + defaultEmailProps.senderThumbnailUrl = sender.thumbnailUrl; } - const emailProps = { - senderName, - senderThumbnailUrl, - entityName: entity.name, - role, - subject: i18n.t('backend:email.member_invite.subject', { - lng: 'defaultLanguage' in entity ? entity.defaultLanguage : appConfig.defaultLanguage, - entityName: entity.name, - }), - lng: 'defaultLanguage' in entity ? entity.defaultLanguage : appConfig.defaultLanguage, - }; + // Get entity info + if (oldToken.inactiveMembershipId) { + const [inactiveMembership] = await db + .select() + .from(inactiveMembershipsTable) + .where(eq(inactiveMembershipsTable.id, oldToken.inactiveMembershipId)); - await mailer.prepareEmails(MemberInviteWithTokenEmail, emailProps, [recipient], userEmail); + const entityIdField = appConfig.entityIdFields[inactiveMembership.contextType]; + const entity = await resolveEntity(inactiveMembership.contextType, inactiveMembership[entityIdField]); + if (!entity) throw new AppError({ status: 400, type: 'invalid_request', severity: 'error' }); - logEvent('info', 'Invitation has been resent', { [entityIdField]: entity.id }); + defaultEmailProps.subject = i18n.t('backend:email.member_invite.subject', { entityName: entity.name, lng: appConfig.defaultLanguage }); + const emailProps = { + ...defaultEmailProps, + entityName: entity.name, + role: inactiveMembership.role, + lng: entity.defaultLanguage || appConfig.defaultLanguage, + }; + + await mailer.prepareEmails(MemberInviteWithTokenEmail, emailProps, [recipient], userEmail); + logEvent('info', 'Membership invitation has been resent', { [entityIdField]: entity.id }); + } else { + await mailer.prepareEmails(SystemInviteEmail, defaultEmailProps, [recipient], userEmail); + logEvent('info', 'System invitation has been resent'); + } return ctx.body(null, 204); }) diff --git a/backend/src/modules/auth/general/helpers/mfa.ts b/backend/src/modules/auth/general/helpers/mfa.ts index 056c780ef..2efc02662 100644 --- a/backend/src/modules/auth/general/helpers/mfa.ts +++ b/backend/src/modules/auth/general/helpers/mfa.ts @@ -6,7 +6,7 @@ import { type UserModel, usersTable } from '#/db/schema/users'; import { Env } from '#/lib/context'; import { AppError } from '#/lib/errors'; import { getAuthCookie, setAuthCookie } from '#/modules/auth/general/helpers/cookie'; -import { usersBaseQuery } from '#/modules/users/helpers/select'; +import { userSelect } from '#/modules/users/helpers/select'; import { getValidToken } from '#/utils/get-valid-token'; import { nanoid } from '#/utils/nanoid'; import { encodeLowerCased } from '#/utils/oslo'; @@ -68,7 +68,7 @@ export const validateConfirmMfaToken = async (ctx: Context): Promise { - const [user] = await usersBaseQuery().where(eq(usersTable.id, userId)).limit(1); + const [user] = await db.select(userSelect).from(usersTable).where(eq(usersTable.id, userId)).limit(1); // User not found if (!user) throw new AppError({ status: 404, type: 'not_found', severity: 'warn', entityType: 'user' }); diff --git a/backend/src/modules/auth/general/helpers/session.ts b/backend/src/modules/auth/general/helpers/session.ts index 96356f6ea..7cba1f90e 100644 --- a/backend/src/modules/auth/general/helpers/session.ts +++ b/backend/src/modules/auth/general/helpers/session.ts @@ -32,18 +32,6 @@ export const setUserSession = async (ctx: Context, user: UserModel, strateg if (!allowAll && (!ip || !allowList.includes(ip))) throw new AppError({ status: 403, type: 'system_access_forbidden', severity: 'warn' }); } - // TODO why is this commented out? // Delete previous session (skip if impersonation) - // if (type !== 'impersonation') { - // const existingSession = deleteAuthCookie(ctx, 'session'); - - // if (existingSession) { - // const [existingSessionToken] = existingSession.split('.'); - - // // Remove previous session from DB - // await db.delete(sessionsTable).where(eq(sessionsTable.token, existingSessionToken)); - // } - // } - // Get device information const device = deviceInfo(ctx); diff --git a/backend/src/modules/auth/general/helpers/user.ts b/backend/src/modules/auth/general/helpers/user.ts index f6326e8e0..8fdbefc99 100644 --- a/backend/src/modules/auth/general/helpers/user.ts +++ b/backend/src/modules/auth/general/helpers/user.ts @@ -2,21 +2,18 @@ import { appConfig } from 'config'; import { and, eq } from 'drizzle-orm'; import { db } from '#/db/db'; import { emailsTable } from '#/db/schema/emails'; -import { tokensTable } from '#/db/schema/tokens'; +import { inactiveMembershipsTable } from '#/db/schema/inactive-memberships'; import { unsubscribeTokensTable } from '#/db/schema/unsubscribe-tokens'; import { type InsertUserModel, type UserModel, usersTable } from '#/db/schema/users'; -import { resolveEntity } from '#/lib/entity'; import { AppError } from '#/lib/errors'; import { checkSlugAvailable } from '#/modules/entities/helpers/check-slug'; -import { insertMemberships } from '#/modules/memberships/helpers'; import { getIsoDate } from '#/utils/iso-date'; -import { logError } from '#/utils/logger'; import { nanoid } from '#/utils/nanoid'; import { generateUnsubscribeToken } from '#/utils/unsubscribe-token'; interface HandleCreateUserProps { newUser: InsertUserModel; - membershipInviteTokenId?: string | null; + inactiveMembershipId?: string | null; emailVerified?: boolean; } @@ -30,7 +27,7 @@ interface HandleCreateUserProps { * @param emailVerified - Optional, new user email verified. * @returns Error response or Redirect response or Response */ -export const handleCreateUser = async ({ newUser, membershipInviteTokenId, emailVerified }: HandleCreateUserProps): Promise => { +export const handleCreateUser = async ({ newUser, inactiveMembershipId, emailVerified }: HandleCreateUserProps): Promise => { // Check if slug is available const slugAvailable = await checkSlugAvailable(newUser.slug); @@ -51,8 +48,8 @@ export const handleCreateUser = async ({ newUser, membershipInviteTokenId, email await db.insert(unsubscribeTokensTable).values({ token: generateUnsubscribeToken(normalizedEmail), userId: user.id }); - // If signing up with token, update it with new user id and insert membership if applicable - if (membershipInviteTokenId) await handleMembershipTokenUpdate(user.id, membershipInviteTokenId); + // If signing up with token with an inactive membership, update it with new user id + if (inactiveMembershipId) await handleSetUserOnInactiveMembership(user.id, inactiveMembershipId); // If email is verified, create verified email record if (emailVerified) { @@ -75,27 +72,17 @@ export const handleCreateUser = async ({ newUser, membershipInviteTokenId, email } }; -export const handleMembershipTokenUpdate = async (userId: string, tokenId: string) => { - try { - // Update the token with the new userId - const [token] = await db.update(tokensTable).set({ userId }).where(eq(tokensTable.id, tokenId)).returning(); - - const { entityType, role } = token; - // Validate if the token has an entityType and role (must be a membership invite) - if (!entityType || !role) throw new Error('Token is not a valid membership invite.'); - - const entityIdField = appConfig.entityIdFields[entityType]; - // Validate if the token contains the required entity ID field - if (!token[entityIdField]) throw new Error(`Token is missing entity ID field for ${entityType}.`); - - const entity = await resolveEntity(entityType, token[entityIdField]); - // If the entity cannot be found, throw an error - if (!entity) throw new Error(`Unable to resolve entity (${entityType}) using the token's entity ID.`); - - // Insert membership for user into entity, but not yet activated - await insertMemberships([{ userId, role, entity, activate: false }]); - } catch (error) { - logError('Error inserting membership from token data', error); - throw error; - } +/** + * Handles updating an inactive membership with the new user ID upon user creation. + * + * @param userId - The ID of the newly created user. + * @param inactiveMembershipId - The ID of the inactive membership to update. + */ +export const handleSetUserOnInactiveMembership = async (userId: string, inactiveMembershipId: string) => { + const [inactiveMembership] = await db + .update(inactiveMembershipsTable) + .set({ userId }) + .where(eq(inactiveMembershipsTable.id, inactiveMembershipId)) + .returning(); + if (!inactiveMembership) throw new Error('No inactive membership found for token.'); }; diff --git a/backend/src/modules/auth/general/routes.ts b/backend/src/modules/auth/general/routes.ts index e193a71a9..3d96eaf09 100644 --- a/backend/src/modules/auth/general/routes.ts +++ b/backend/src/modules/auth/general/routes.ts @@ -3,7 +3,7 @@ import { appConfig } from 'config'; import { createCustomRoute } from '#/lib/custom-routes'; import { hasSystemAccess, isAuthenticated, isPublicAccess } from '#/middlewares/guard'; import { isNoBot } from '#/middlewares/is-no-bot'; -import { emailEnumLimiter, spamLimiter } from '#/middlewares/rate-limiter/limiters'; +import { emailEnumLimiter, spamLimiter, tokenLimiter } from '#/middlewares/rate-limiter/limiters'; import { emailBodySchema, tokenWithDataSchema } from '#/modules/auth/general/schema'; import { cookieSchema, emailOrTokenIdQuerySchema, idSchema, locationSchema } from '#/utils/schema/common'; import { errorResponses } from '#/utils/schema/responses'; @@ -67,8 +67,7 @@ const authGeneralRoutes = { method: 'get', path: '/invoke-token/{type}/{token}', guard: isPublicAccess, - // TODO add brute rate limiter, - middleware: isNoBot, + middleware: [isNoBot, tokenLimiter('token')], tags: ['auth'], summary: 'Invoke token session', description: @@ -90,8 +89,7 @@ const authGeneralRoutes = { method: 'get', path: '/token/{type}/{id}', guard: isPublicAccess, - // TODO add brute rate limiter - middleware: isNoBot, + middleware: [isNoBot, tokenLimiter('token')], tags: ['auth'], summary: 'Get token data', description: 'Get basic token data from single-use token session, It returns basic data if the session is still valid.', diff --git a/backend/src/modules/auth/general/schema.ts b/backend/src/modules/auth/general/schema.ts index ebeea68ae..e360043ee 100644 --- a/backend/src/modules/auth/general/schema.ts +++ b/backend/src/modules/auth/general/schema.ts @@ -1,14 +1,11 @@ import { z } from '@hono/zod-openapi'; -import { membershipSchema } from '#/modules/memberships/schema'; import { userSchema } from '#/modules/users/schema'; -import { idSchema } from '#/utils/schema/common'; export const emailBodySchema = z.object({ email: userSchema.shape.email, }); export const tokenWithDataSchema = z.object({ email: z.email(), - role: z.union([membershipSchema.shape.role, z.null()]), - userId: idSchema.optional(), - organizationId: idSchema.optional(), + userId: z.string().optional(), + inactiveMembershipId: z.string().optional(), }); diff --git a/backend/src/modules/auth/oauth/handlers.ts b/backend/src/modules/auth/oauth/handlers.ts index eb3837153..b5bdd04f5 100644 --- a/backend/src/modules/auth/oauth/handlers.ts +++ b/backend/src/modules/auth/oauth/handlers.ts @@ -88,7 +88,6 @@ const authOAuthRouteHandlers = app // Start the OAuth session & flow (Persist `state` and `codeVerifier`) return await handleOAuthInitiation(ctx, 'microsoft', url, state, codeVerifier); }) - /** * GitHub callback */ diff --git a/backend/src/modules/auth/oauth/helpers/callback.ts b/backend/src/modules/auth/oauth/helpers/callback.ts index 2ebb7547b..f9a8a4508 100644 --- a/backend/src/modules/auth/oauth/helpers/callback.ts +++ b/backend/src/modules/auth/oauth/helpers/callback.ts @@ -15,7 +15,7 @@ import type { Provider } from '#/modules/auth/oauth/helpers/providers'; import { sendOAuthVerificationEmail } from '#/modules/auth/oauth/helpers/send-oauth-verification-email'; import type { TransformedUser } from '#/modules/auth/oauth/helpers/transform-user-data'; import { OAuthFlowType } from '#/modules/auth/oauth/schema'; -import { usersBaseQuery } from '#/modules/users/helpers/select'; +import { userSelect } from '#/modules/users/helpers/select'; import { getValidSingleUseToken } from '#/utils/get-valid-single-use-token'; import { isValidRedirectPath } from '#/utils/is-redirect-url'; import { getIsoDate } from '#/utils/iso-date'; @@ -49,13 +49,13 @@ export const handleOAuthCallback = async ( // User already has a verified OAuth account → sign in if (oauthAccount?.verified) { - const [user] = await usersBaseQuery().where(eq(usersTable.id, oauthAccount.userId)); + const [user] = await db.select(userSelect).from(usersTable).where(eq(usersTable.id, oauthAccount.userId)); return await handleVerifiedOAuthAccount(ctx, user, oauthAccount); } // User has an unverified OAuth account → prompt oauth (re-)verification if (oauthAccount) { - const [user] = await usersBaseQuery().where(eq(usersTable.id, oauthAccount.userId)); + const [user] = await db.select(userSelect).from(usersTable).where(eq(usersTable.id, oauthAccount.userId)); const type = user.lastSignInAt ? 'connect' : 'signup'; return await handleUnverifiedOAuthAccount(ctx, oauthAccount, type); } @@ -80,11 +80,7 @@ export const handleOAuthCallback = async ( } // No user match → create a new user and OAuth account - const user = await handleCreateUser({ - newUser: providerUser, - membershipInviteTokenId: null, - emailVerified: false, - }); + const user = await handleCreateUser({ newUser: providerUser, emailVerified: false }); const newOAuthAccount = await createOAuthAccount(user.id, providerUser.id, provider, providerUser.email); @@ -134,7 +130,11 @@ const connectCallbackFlow = async ( } // New OAuth account connection → validate email isn't used by another user - const users = await usersBaseQuery().leftJoin(emailsTable, eq(usersTable.id, emailsTable.userId)).where(eq(emailsTable.email, providerUser.email)); + const users = await db + .select(userSelect) + .from(usersTable) + .leftJoin(emailsTable, eq(usersTable.id, emailsTable.userId)) + .where(eq(emailsTable.email, providerUser.email)); if (users.some((u) => u.id !== connectUserId)) { throw new AppError({ status: 409, type: 'oauth_conflict', severity: 'error', redirectPath }); } @@ -172,17 +172,18 @@ const inviteCallbackFlow = async ( if (oauthAccount) throw new AppError({ status: 409, type: 'oauth_conflict', severity: 'error', redirectPath }); // No linked OAuth account and email already in use by an existing user - const users = await usersBaseQuery().leftJoin(emailsTable, eq(usersTable.id, emailsTable.userId)).where(eq(emailsTable.email, providerUser.email)); + const users = await db + .select(userSelect) + .from(usersTable) + .leftJoin(emailsTable, eq(usersTable.id, emailsTable.userId)) + .where(eq(emailsTable.email, providerUser.email)); if (users.length) throw new AppError({ status: 409, type: 'oauth_email_exists', severity: 'error', redirectPath }); // TODO User already signed up meanwhile? // No user match → create a new user - const user = await handleCreateUser({ - newUser: providerUser, - membershipInviteTokenId: invitationToken.entityType ? invitationToken.id : null, - emailVerified: false, - }); + const inactiveMembershipId = invitationToken.inactiveMembershipId || null; + const user = await handleCreateUser({ newUser: providerUser, inactiveMembershipId, emailVerified: false }); // link user to new OAuth account and prompt email verification const newOAuthAccount = await createOAuthAccount(user.id, providerUser.id, provider, providerUser.email); @@ -211,7 +212,7 @@ const verifyCallbackFlow = async ( throw new AppError({ status: 400, type: 'oauth_failed', severity: 'error', redirectPath }); } - const [user] = await usersBaseQuery().where(eq(usersTable.id, oauthAccount.userId)); + const [user] = await db.select(userSelect).from(usersTable).where(eq(usersTable.id, oauthAccount.userId)); // Somehow already linked + verified → log in the user if (oauthAccount.verified) { diff --git a/backend/src/modules/auth/oauth/helpers/initiation.ts b/backend/src/modules/auth/oauth/helpers/initiation.ts index ff92ae335..455f5f316 100644 --- a/backend/src/modules/auth/oauth/helpers/initiation.ts +++ b/backend/src/modules/auth/oauth/helpers/initiation.ts @@ -2,11 +2,10 @@ import { appConfig } from 'config'; import type { Context } from 'hono'; import { Env } from '#/lib/context'; import { AppError } from '#/lib/errors'; -import { getAuthCookie, setAuthCookie } from '#/modules/auth/general/helpers/cookie'; +import { setAuthCookie } from '#/modules/auth/general/helpers/cookie'; import { getParsedSessionCookie, validateSession } from '#/modules/auth/general/helpers/session'; import { OAuthFlowType } from '#/modules/auth/oauth/schema'; import { getValidSingleUseToken } from '#/utils/get-valid-single-use-token'; -import { getValidToken } from '#/utils/get-valid-token'; import { isValidRedirectPath } from '#/utils/is-redirect-url'; import { logEvent } from '#/utils/logger'; import { TimeSpan } from '#/utils/time-span'; @@ -31,15 +30,15 @@ export interface OAuthCookiePayload { * @returns redirect response */ export const handleOAuthInitiation = async ( - ctx: Context, + ctx: Context, provider: string, url: URL, state: string, codeVerifier?: string, ) => { - const { type } = ctx.req.valid('query'); + const { type, redirect } = ctx.req.valid('query'); - const redirectPath = await prepareOAuthByContext(ctx); + const redirectPath = await prepareOAuthByContext(ctx, type, redirect); const cookieContent = JSON.stringify({ codeVerifier, type }); await Promise.all([ @@ -67,22 +66,12 @@ export const handleOAuthInitiation = async ( * */ // TODO this doesnt look very clean in the cookie when inspecting it in devtools, maybe hash it or encode it? -const prepareOAuthByContext = async (ctx: Context): Promise => { - const { type, redirect } = ctx.req.query(); - +const prepareOAuthByContext = async (ctx: Context, type: OAuthFlowType, redirect?: string): Promise => { // Helper to resolve safe default redirect const safeRedirect = redirect ? isValidRedirectPath(decodeURIComponent(redirect)) || appConfig.defaultRedirectPath : appConfig.defaultRedirectPath; switch (type) { case 'invite': { - const token = await getAuthCookie(ctx, 'invitation'); - if (!token) throw new AppError({ status: 400, type: 'invalid_request', severity: 'error', redirectPath: '/auth/authenticate' }); - - const tokenRecord = await getValidToken({ ctx, token, tokenType: 'invitation', redirectPath: '/auth/authenticate', invokeToken: false }); - - if (tokenRecord.entityType) - return `${appConfig.backendAuthUrl}/invoke-token/${tokenRecord.type}/${tokenRecord.token}?tokenId=${tokenRecord.id}`; - return safeRedirect; } @@ -96,8 +85,7 @@ const prepareOAuthByContext = async (ctx: Context): Promise => { case 'verify': { const tokenRecord = await getValidSingleUseToken({ ctx, tokenType: 'oauth-verification', redirectPath: safeRedirect }); - - if (tokenRecord) return `${appConfig.frontendUrl}/home?invitationTokenId=${tokenRecord.id}&skipWelcome=true`; + if (tokenRecord) return `${appConfig.frontendUrl}/home?&skipWelcome=true`; return safeRedirect; } diff --git a/backend/src/modules/auth/oauth/helpers/send-oauth-verification-email.ts b/backend/src/modules/auth/oauth/helpers/send-oauth-verification-email.ts index 6999f00c5..fe698c80f 100644 --- a/backend/src/modules/auth/oauth/helpers/send-oauth-verification-email.ts +++ b/backend/src/modules/auth/oauth/helpers/send-oauth-verification-email.ts @@ -9,7 +9,7 @@ import { usersTable } from '#/db/schema/users'; import { AppError } from '#/lib/errors'; import { mailer } from '#/lib/mailer'; import { deleteVerificationTokens } from '#/modules/auth/general/helpers/send-verification-email'; -import { usersBaseQuery } from '#/modules/users/helpers/select'; +import { userSelect } from '#/modules/users/helpers/select'; import { logEvent } from '#/utils/logger'; import { nanoid } from '#/utils/nanoid'; import { createDate, TimeSpan } from '#/utils/time-span'; @@ -26,7 +26,7 @@ interface Props { * This is done to be sure that the oauth account holder also owns the email address. */ export const sendOAuthVerificationEmail = async ({ userId, oauthAccountId, redirectPath }: Props) => { - const [user] = await usersBaseQuery().where(eq(usersTable.id, userId)).limit(1); + const [user] = await db.select(userSelect).from(usersTable).where(eq(usersTable.id, userId)).limit(1); // User not found if (!user) throw new AppError({ status: 404, type: 'not_found', severity: 'warn', entityType: 'user' }); diff --git a/backend/src/modules/auth/passkeys/handlers.ts b/backend/src/modules/auth/passkeys/handlers.ts index 33ac02a67..e330ed47d 100644 --- a/backend/src/modules/auth/passkeys/handlers.ts +++ b/backend/src/modules/auth/passkeys/handlers.ts @@ -16,7 +16,7 @@ import { validateConfirmMfaToken } from '#/modules/auth/general/helpers/mfa'; import { setUserSession } from '#/modules/auth/general/helpers/session'; import { parseAndValidatePasskeyAttestation, validatePasskey } from '#/modules/auth/passkeys/helpers/passkey'; import authPasskeysRoutes from '#/modules/auth/passkeys/routes'; -import { usersBaseQuery } from '#/modules/users/helpers/select'; +import { userSelect } from '#/modules/users/helpers/select'; import { defaultHook } from '#/utils/default-hook'; import { TimeSpan } from '#/utils/time-span'; @@ -98,7 +98,9 @@ const authPasskeysRouteHandlers = app if (email && type === 'authentication') { const normalizedEmail = email.toLowerCase().trim(); - const [tableUser] = await usersBaseQuery() + const [tableUser] = await db + .select(userSelect) + .from(usersTable) .leftJoin(emailsTable, eq(usersTable.id, emailsTable.userId)) .where(eq(emailsTable.email, normalizedEmail)) .limit(1); @@ -139,7 +141,9 @@ const authPasskeysRouteHandlers = app if (email) { const normalizedEmail = email.toLowerCase().trim(); - const [tableUser] = await usersBaseQuery() + const [tableUser] = await db + .select(userSelect) + .from(usersTable) .leftJoin(emailsTable, eq(usersTable.id, emailsTable.userId)) .where(eq(emailsTable.email, normalizedEmail)) .limit(1); diff --git a/backend/src/modules/auth/passwords/handlers.ts b/backend/src/modules/auth/passwords/handlers.ts index 9b34c95a5..d9f2be0b0 100644 --- a/backend/src/modules/auth/passwords/handlers.ts +++ b/backend/src/modules/auth/passwords/handlers.ts @@ -4,7 +4,6 @@ import { and, eq } from 'drizzle-orm'; import i18n from 'i18next'; import { db } from '#/db/db'; import { emailsTable } from '#/db/schema/emails'; -import { membershipsTable } from '#/db/schema/memberships'; import { passwordsTable } from '#/db/schema/passwords'; import { tokensTable } from '#/db/schema/tokens'; import { usersTable } from '#/db/schema/users'; @@ -17,7 +16,7 @@ import { setUserSession } from '#/modules/auth/general/helpers/session'; import { handleCreateUser } from '#/modules/auth/general/helpers/user'; import { hashPassword, verifyPasswordHash } from '#/modules/auth/passwords/helpers/argon2id'; import authPasswordsRoutes from '#/modules/auth/passwords/routes'; -import { usersBaseQuery } from '#/modules/users/helpers/select'; +import { userSelect } from '#/modules/users/helpers/select'; import { defaultHook } from '#/utils/default-hook'; import { getIsoDate } from '#/utils/iso-date'; import { logEvent } from '#/utils/logger'; @@ -74,7 +73,7 @@ const authPasswordsRouteHandlers = app const validToken = getContextToken(); if (!validToken) throw new AppError({ status: 400, type: 'invalid_request', severity: 'error' }); - const isMembershipInvite = validToken.type === 'invitation' && validToken.entityType; + const isMembershipInvite = validToken.type === 'invitation' && validToken.inactiveMembershipId; // Verify if strategy allowed const strategy = 'password'; @@ -83,13 +82,12 @@ const authPasswordsRouteHandlers = app } // add token if it's membership invitation - const membershipInviteTokenId = isMembershipInvite ? validToken.id : undefined; + const inactiveMembershipId = validToken.inactiveMembershipId || null; const slug = slugFromEmail(validToken.email); - // Create user & send verification email + // Create user const newUser = { slug, name: slug, email: validToken.email }; - - const user = await handleCreateUser({ newUser, membershipInviteTokenId, emailVerified: true }); + const user = await handleCreateUser({ newUser, inactiveMembershipId, emailVerified: true }); // Separately insert password const hashedPassword = await hashPassword(password); @@ -101,13 +99,8 @@ const authPasswordsRouteHandlers = app // If no membership invitation, we are done if (!isMembershipInvite) return ctx.json({ shouldRedirect: true, redirectPath: appConfig.defaultRedirectPath }, 201); - // If membership invitation, get membership to forward - const [invitationMembership] = await db.select({ id: membershipsTable.id }).from(membershipsTable).limit(1); - - if (!invitationMembership) throw new AppError({ status: 400, type: 'membership_not_found', severity: 'error' }); - // Redirect to accept invitation if membership invite - const redirectPath = `/home?invitationMembershipId=${invitationMembership.id}&skipWelcome=true`; + const redirectPath = `/home?skipWelcome=true`; return ctx.json({ shouldRedirect: true, redirectPath }, 201); }) @@ -119,7 +112,9 @@ const authPasswordsRouteHandlers = app const normalizedEmail = email.toLowerCase().trim(); - const [user] = await usersBaseQuery() + const [user] = await db + .select(userSelect) + .from(usersTable) .leftJoin(emailsTable, eq(usersTable.id, emailsTable.userId)) .where(eq(emailsTable.email, normalizedEmail)) .limit(1); @@ -175,7 +170,7 @@ const authPasswordsRouteHandlers = app // If the token is not found or expired if (!token || !token.userId) throw new AppError({ status: 401, type: 'invalid_token', severity: 'warn' }); - const [user] = await usersBaseQuery().where(eq(usersTable.id, token.userId)).limit(1); + const [user] = await db.select(userSelect).from(usersTable).where(eq(usersTable.id, token.userId)).limit(1); // If the user is not found if (!user) { diff --git a/backend/src/modules/auth/passwords/helpers/handle-email-verification.ts b/backend/src/modules/auth/passwords/helpers/handle-email-verification.ts index b7f8f1541..26e75cbc8 100644 --- a/backend/src/modules/auth/passwords/helpers/handle-email-verification.ts +++ b/backend/src/modules/auth/passwords/helpers/handle-email-verification.ts @@ -9,7 +9,7 @@ import { Env } from '#/lib/context'; import { AppError } from '#/lib/errors'; import { initiateMfa } from '#/modules/auth/general/helpers/mfa'; import { setUserSession } from '#/modules/auth/general/helpers/session'; -import { usersBaseQuery } from '#/modules/users/helpers/select'; +import { userSelect } from '#/modules/users/helpers/select'; import { getIsoDate } from '#/utils/iso-date'; export const handleEmailVerification = async (ctx: Context, token: TokenModel) => { @@ -17,7 +17,7 @@ export const handleEmailVerification = async (ctx: Context, token: TokenMod if (!token.userId) throw new AppError({ status: 400, type: 'invalid_request', severity: 'error' }); // Get user - const [user] = await usersBaseQuery().where(eq(usersTable.id, token.userId)).limit(1); + const [user] = await db.select(userSelect).from(usersTable).where(eq(usersTable.id, token.userId)).limit(1); if (!user) throw new AppError({ status: 404, type: 'not_found', severity: 'error', entityType: 'user', meta: { userId: token.userId } }); // Set email verified if it exists diff --git a/backend/src/modules/entities/handlers.ts b/backend/src/modules/entities/handlers.ts index 8d099e30a..9888c97c1 100644 --- a/backend/src/modules/entities/handlers.ts +++ b/backend/src/modules/entities/handlers.ts @@ -1,6 +1,6 @@ import { OpenAPIHono, type z } from '@hono/zod-openapi'; import { appConfig } from 'config'; -import { and, count, eq, ilike, isNotNull, type SQLWrapper, sql } from 'drizzle-orm'; +import { and, count, eq, ilike, type SQLWrapper, sql } from 'drizzle-orm'; import { alias } from 'drizzle-orm/pg-core'; import { db } from '#/db/db'; import { membershipsTable } from '#/db/schema/memberships'; @@ -35,7 +35,7 @@ const entityRouteHandlers = app const selectedTypes = new Set(types ?? appConfig.contextEntityTypes); // Shared filters for active memberships (used across entity types) - const baseMembershipQueryFilters = [eq(membershipsTable.userId, userId), isNotNull(membershipsTable.activatedAt)]; + const baseMembershipQueryFilters = [eq(membershipsTable.userId, userId)]; // Subquery to get all organizations the user is a member of (optionally narrowed down if `targetOrgId` is passed) const orgMembershipsSubquery = db @@ -109,7 +109,6 @@ const entityRouteHandlers = app orgMembershipsAlias, and( eq(orgMembershipsAlias.userId, userId), - isNotNull(orgMembershipsAlias.activatedAt), eq(table.id, orgMembershipsAlias.organizationId), eq(orgMembershipsAlias.contextType, 'organization'), ), diff --git a/backend/src/modules/entities/helpers/counts/member.ts b/backend/src/modules/entities/helpers/counts/member.ts index 43991be70..d712b6fa8 100644 --- a/backend/src/modules/entities/helpers/counts/member.ts +++ b/backend/src/modules/entities/helpers/counts/member.ts @@ -1,11 +1,18 @@ import { appConfig, type ContextEntityType } from 'config'; -import { and, count, eq, isNotNull, sql } from 'drizzle-orm'; +import { count, eq, isNull, sql } from 'drizzle-orm'; import { db } from '#/db/db'; +import { inactiveMembershipsTable } from '#/db/schema/inactive-memberships'; import { membershipsTable } from '#/db/schema/memberships'; -import { tokensTable } from '#/db/schema/tokens'; type EntityIdColumnNames = keyof (typeof membershipsTable)['_']['columns']; +function getEntityIdColumn(entityType: ContextEntityType) { + const targetEntityIdField = appConfig.entityIdFields[entityType]; + const entityIdColumn = membershipsTable[targetEntityIdField as EntityIdColumnNames]; + if (!entityIdColumn) throw new Error(`Entity ${entityType} does not have an ID column defined`); + return entityIdColumn; +} + /** * Generates a query to count the number of admins and members for a specific entity. * If an entity is provided, counts are filtered by entity. Otherwise, counts are for all entities. @@ -15,36 +22,32 @@ type EntityIdColumnNames = keyof (typeof membershipsTable)['_']['columns']; */ export const getMemberCountsQuery = (entityType: ContextEntityType) => { const targetEntityIdField = appConfig.entityIdFields[entityType]; - const entityIdColumn = membershipsTable[targetEntityIdField as EntityIdColumnNames]; + const entityIdColumn = getEntityIdColumn(entityType); + if (!entityIdColumn) throw new Error(`Entity ${entityType} does not have an ID column defined`); - // Subquery to count pending invitations const inviteCountSubquery = db .select({ - id: tokensTable[targetEntityIdField], + id: inactiveMembershipsTable[targetEntityIdField], invites: count().as('invites'), }) - .from(tokensTable) - .where(and(eq(tokensTable.type, 'invitation'), isNotNull(tokensTable.entityType))) - .groupBy(tokensTable[targetEntityIdField]) + .from(inactiveMembershipsTable) + .where(isNull(inactiveMembershipsTable.rejectedAt)) + .groupBy(inactiveMembershipsTable[targetEntityIdField]) .as('invites'); return db .select({ id: entityIdColumn, - admin: count(sql`CASE WHEN ${membershipsTable.activatedAt} IS NOT NULL AND ${membershipsTable.role} = 'admin' THEN 1 END`).as('admin'), - member: count(sql`CASE WHEN ${membershipsTable.activatedAt} IS NOT NULL AND ${membershipsTable.role} = 'member' THEN 1 END`).as('member'), - pending: - sql`CAST(${count(sql`CASE WHEN ${membershipsTable.activatedAt} IS NULL THEN 1 END`)} + COALESCE(${inviteCountSubquery.invites}, 0) AS INTEGER)`.as( - 'pending', - ), - - total: count().as('total'), // Fixed alias to avoid confusion + admin: count(sql`CASE WHEN ${membershipsTable.role} = 'admin' THEN 1 END`).as('admin'), + member: count(sql`CASE WHEN ${membershipsTable.role} = 'member' THEN 1 END`).as('member'), + pending: sql`CAST(COALESCE(MAX(${inviteCountSubquery.invites}), 0) AS INTEGER)`.as('pending'), + total: count().as('total'), }) .from(membershipsTable) .leftJoin(inviteCountSubquery, eq(entityIdColumn, inviteCountSubquery.id)) - .where(and(eq(membershipsTable.contextType, entityType))) - .groupBy(entityIdColumn, inviteCountSubquery.invites) + .where(eq(membershipsTable.contextType, entityType)) + .groupBy(entityIdColumn) .as('membership_counts'); }; @@ -66,7 +69,7 @@ export function getMemberCounts(entityType: ContextEntityType, id: string) { total: query.total, }) .from(query) - .where(eq(query.id, id)) + .where(eq(getEntityIdColumn(entityType), id)) .limit(1) .then((rows) => rows[0] || { admin: 0, member: 0, pending: 0, total: 0 }); } diff --git a/backend/src/modules/entities/helpers/select.ts b/backend/src/modules/entities/helpers/select.ts index 5e1f84676..bb041c59e 100644 --- a/backend/src/modules/entities/helpers/select.ts +++ b/backend/src/modules/entities/helpers/select.ts @@ -1,7 +1,7 @@ import { getTableColumns } from 'drizzle-orm'; import { organizationsTable } from '#/db/schema/organizations'; import { pickColumns } from '#/db/utils/pick-columns'; -import { contextEntityBaseSchema } from '../schema-base'; +import { contextEntityBaseSchema } from '#/modules/entities/schema-base'; // Infer types of context entity base columns type TableColumns = (typeof organizationsTable)['_']['columns']; diff --git a/backend/src/modules/entities/routes.ts b/backend/src/modules/entities/routes.ts index cc33effa9..a5231e9f2 100644 --- a/backend/src/modules/entities/routes.ts +++ b/backend/src/modules/entities/routes.ts @@ -2,9 +2,9 @@ import { z } from '@hono/zod-openapi'; import { createCustomRoute } from '#/lib/custom-routes'; import { isAuthenticated } from '#/middlewares/guard'; import { contextEntitiesQuerySchema, contextEntityWithCountsSchema } from '#/modules/entities/schema'; +import { contextEntityBaseSchema } from '#/modules/entities/schema-base'; import { contextEntityTypeSchema, entityParamSchema, entityTypeSchema, slugSchema } from '#/utils/schema/common'; import { errorResponses, paginationSchema } from '#/utils/schema/responses'; -import { contextEntityBaseSchema } from './schema-base'; const entityRoutes = { checkSlug: createCustomRoute({ diff --git a/backend/src/modules/entities/schema-base.ts b/backend/src/modules/entities/schema-base.ts index 79c439f52..6d4707df6 100644 --- a/backend/src/modules/entities/schema-base.ts +++ b/backend/src/modules/entities/schema-base.ts @@ -13,4 +13,4 @@ export const contextEntityBaseSchema = z thumbnailUrl: imageUrlSchema.nullable().optional(), bannerUrl: imageUrlSchema.nullable().optional(), }) - .openapi('ContextEntityBaseSchema'); + .openapi('ContextEntityBase'); diff --git a/backend/src/modules/entities/schema.ts b/backend/src/modules/entities/schema.ts index 31466d11f..47260ab36 100644 --- a/backend/src/modules/entities/schema.ts +++ b/backend/src/modules/entities/schema.ts @@ -1,9 +1,9 @@ import { z } from '@hono/zod-openapi'; import { appConfig } from 'config'; +import { contextEntityBaseSchema } from '#/modules/entities/schema-base'; import { membershipBaseSchema } from '#/modules/memberships/schema'; import { membershipCountSchema } from '#/modules/organizations/schema'; import { contextEntityTypeSchema, idSchema, paginationQuerySchema } from '#/utils/schema/common'; -import { contextEntityBaseSchema } from './schema-base'; // Extend base entity schema with membership base data export const contextEntityWithMembershipSchema = contextEntityBaseSchema.extend({ diff --git a/backend/src/modules/me/handlers.ts b/backend/src/modules/me/handlers.ts index 583963d24..f1121fb0d 100644 --- a/backend/src/modules/me/handlers.ts +++ b/backend/src/modules/me/handlers.ts @@ -4,6 +4,7 @@ import { appConfig } from 'config'; import { and, eq, inArray, isNull, sql } from 'drizzle-orm'; import { type SSEStreamingApi, streamSSE } from 'hono/streaming'; import { db } from '#/db/db'; +import { inactiveMembershipsTable } from '#/db/schema/inactive-memberships'; import { membershipsTable } from '#/db/schema/memberships'; import { AuthStrategy, sessionsTable } from '#/db/schema/sessions'; import { unsubscribeTokensTable } from '#/db/schema/unsubscribe-tokens'; @@ -20,19 +21,18 @@ import { getParsedSessionCookie, setUserSession, validateSession } from '#/modul import { validatePasskey } from '#/modules/auth/passkeys/helpers/passkey'; import { validateTOTP } from '#/modules/auth/totps/helpers/totps'; import { checkSlugAvailable } from '#/modules/entities/helpers/check-slug'; +import { contextEntityBaseSelect } from '#/modules/entities/helpers/select'; import { contextEntityWithMembershipSchema } from '#/modules/entities/schema'; import { getAuthInfo, getUserSessions } from '#/modules/me/helpers/get-user-info'; import { getUserMenuEntities } from '#/modules/me/helpers/get-user-menu-entities'; import meRoutes from '#/modules/me/routes'; import type { menuSchema } from '#/modules/me/schema'; -import { userBaseSelect, usersBaseQuery } from '#/modules/users/helpers/select'; +import { userBaseSelect, userSelect } from '#/modules/users/helpers/select'; import permissionManager from '#/permissions/permissions-config'; import { defaultHook } from '#/utils/default-hook'; import { getIsoDate } from '#/utils/iso-date'; import { logEvent } from '#/utils/logger'; import { verifyUnsubscribeToken } from '#/utils/unsubscribe-token'; -import { contextEntityBaseSelect } from '../entities/helpers/select'; -import { membershipBaseSelect } from '../memberships/helpers/select'; type UserMenu = z.infer; type MenuItem = z.infer; @@ -167,12 +167,18 @@ const meRouteHandlers = app .select({ entity: contextEntityBaseSelect, createdByUser: userBaseSelect, - membership: membershipBaseSelect, + inactiveMembership: inactiveMembershipsTable, }) - .from(membershipsTable) - .leftJoin(usersTable, eq(usersTable.id, membershipsTable.createdBy)) - .innerJoin(entityTable, eq(entityTable.id, membershipsTable[entityIdField])) - .where(and(eq(membershipsTable.contextType, entityType), eq(membershipsTable.userId, user.id), isNull(membershipsTable.activatedAt))); + .from(inactiveMembershipsTable) + .leftJoin(usersTable, eq(usersTable.id, inactiveMembershipsTable.createdBy)) + .innerJoin(entityTable, eq(entityTable.id, inactiveMembershipsTable[entityIdField])) + .where( + and( + eq(inactiveMembershipsTable.contextType, entityType), + eq(inactiveMembershipsTable.userId, user.id), + isNull(inactiveMembershipsTable.rejectedAt), + ), + ); }), ); @@ -313,7 +319,9 @@ const meRouteHandlers = app const { token } = ctx.req.valid('query'); // Check if token exists - const [user] = await usersBaseQuery() + const [user] = await db + .select(userSelect) + .from(usersTable) .innerJoin(unsubscribeTokensTable, eq(usersTable.id, unsubscribeTokensTable.userId)) .where(eq(unsubscribeTokensTable.token, token)) .limit(1); diff --git a/backend/src/modules/me/helpers/get-user-menu-entities.ts b/backend/src/modules/me/helpers/get-user-menu-entities.ts index 9fe41c234..4cc01f2a7 100644 --- a/backend/src/modules/me/helpers/get-user-menu-entities.ts +++ b/backend/src/modules/me/helpers/get-user-menu-entities.ts @@ -1,5 +1,5 @@ import { appConfig, type ContextEntityType } from 'config'; -import { and, asc, eq, isNotNull } from 'drizzle-orm'; +import { and, asc, eq } from 'drizzle-orm'; import { db } from '#/db/db'; import { membershipsTable } from '#/db/schema/memberships'; import { entityTables } from '#/entity-config'; @@ -25,5 +25,5 @@ export const getUserMenuEntities = async (entityType: ContextEntityType, userId: .from(table) .where(and(eq(membershipsTable.userId, userId), eq(membershipsTable.contextType, entityType))) .orderBy(asc(membershipsTable.order)) - .innerJoin(membershipsTable, and(eq(membershipsTable[entityIdField], table.id), isNotNull(membershipsTable.activatedAt))); + .innerJoin(membershipsTable, eq(membershipsTable[entityIdField], table.id)); }; diff --git a/backend/src/modules/me/routes.ts b/backend/src/modules/me/routes.ts index 15325f6ed..d849155de 100644 --- a/backend/src/modules/me/routes.ts +++ b/backend/src/modules/me/routes.ts @@ -57,7 +57,7 @@ const meRoutes = { guard: isAuthenticated, tags: ['me'], summary: 'Get list of invitations', - description: 'Returns a list of pending memberships with entity data - meaning activatedAt is still null.', + description: 'Returns a list of pending memberships with entity data.', responses: { 200: { description: 'Invitations pending', diff --git a/backend/src/modules/me/schema.ts b/backend/src/modules/me/schema.ts index fa6438fc9..1c675eeeb 100644 --- a/backend/src/modules/me/schema.ts +++ b/backend/src/modules/me/schema.ts @@ -5,11 +5,11 @@ import { sessionsTable } from '#/db/schema/sessions'; import { passkeySchema, webAuthnAssertionSchema } from '#/modules/auth/passkeys/schema'; import { totpCreateBodySchema } from '#/modules/auth/totps/schema'; import { contextEntityWithMembershipSchema } from '#/modules/entities/schema'; +import { contextEntityBaseSchema } from '#/modules/entities/schema-base'; +import { inactiveMembershipSchema } from '#/modules/memberships/schema'; import { enabledOAuthProvidersEnum } from '#/modules/users/schema'; +import { userBaseSchema } from '#/modules/users/schema-base'; import { booleanTransformSchema } from '#/utils/schema/common'; -import { contextEntityBaseSchema } from '../entities/schema-base'; -import { membershipBaseSchema } from '../memberships/schema'; -import { userBaseSchema } from '../users/schema-base'; export const sessionSchema = createSelectSchema(sessionsTable).omit({ token: true }).extend({ isCurrent: z.boolean() }); @@ -38,7 +38,7 @@ export const menuSchema = z {} as Record, ), ) - .openapi('MenuSchema'); + .openapi('Menu'); export const uploadTokenSchema = z.object({ public: z.boolean(), @@ -70,12 +70,6 @@ export const toggleMfaBodySchema = z.object({ export const mePendingInvitationSchema = z.object({ entity: contextEntityBaseSchema, - membership: membershipBaseSchema.nullable(), - createdByUser: userBaseSchema.nullable(), -}); - -export const pendingMembershipSchema = z.object({ - user: userBaseSchema.nullable(), - membership: membershipBaseSchema.nullable(), + inactiveMembership: inactiveMembershipSchema.nullable(), createdByUser: userBaseSchema.nullable(), }); diff --git a/backend/src/modules/memberships/handlers.ts b/backend/src/modules/memberships/handlers.ts index c833cdec0..20f0bae26 100644 --- a/backend/src/modules/memberships/handlers.ts +++ b/backend/src/modules/memberships/handlers.ts @@ -1,21 +1,23 @@ import { OpenAPIHono } from '@hono/zod-openapi'; import { appConfig } from 'config'; -import { and, count, eq, ilike, inArray, isNotNull, isNull, or, sql } from 'drizzle-orm'; +import { and, count, eq, ilike, inArray, or, sql } from 'drizzle-orm'; +import { alias } from 'drizzle-orm/pg-core'; import i18n from 'i18next'; import { db } from '#/db/db'; import { emailsTable } from '#/db/schema/emails'; -import { MembershipModel, membershipsTable } from '#/db/schema/memberships'; +import { inactiveMembershipsTable } from '#/db/schema/inactive-memberships'; +import { membershipsTable } from '#/db/schema/memberships'; import { requestsTable } from '#/db/schema/requests'; import { tokensTable } from '#/db/schema/tokens'; import { usersTable } from '#/db/schema/users'; import { type Env, getContextMemberships, getContextOrganization, getContextUser } from '#/lib/context'; import { resolveEntity } from '#/lib/entity'; import { AppError } from '#/lib/errors'; -import { eventManager } from '#/lib/events'; +// import { eventManager } from '#/lib/events'; import { mailer } from '#/lib/mailer'; import { sendSSEToUsers } from '#/lib/sse'; import { getAssociatedEntityDetails, insertMemberships } from '#/modules/memberships/helpers'; -import { membershipBaseQuery, membershipBaseSelect } from '#/modules/memberships/helpers/select'; +import { membershipBaseSelect } from '#/modules/memberships/helpers/select'; import membershipRoutes from '#/modules/memberships/routes'; import { memberSelect, userBaseSelect } from '#/modules/users/helpers/select'; import { getValidContextEntity } from '#/permissions/get-context-entity'; @@ -35,32 +37,32 @@ const app = new OpenAPIHono({ defaultHook }); const membershipRouteHandlers = app /** - * Create memberships (invite members) for an entity such as an organization, by list of emails - * 1. email exists in membershipsTable for this entity with activatedAt -> user is already is member of entity so we remove it from recipients. - * 1b. email exists in membershipsTable, but no activatedAt -> user will receive a reminder email invitation. - * 2. email exists in emailsTable -> user is already active in system so no token invitation but create inactive membership send a email invitation with a link to the entity. - * 3. add to recipients and create another token with email and an inactive membership. + * Create memberships (invite members) for an entity such as an organization, by list of emails. + * It will create multiple (inactive) memberships for each user if the entity has associated (parent) entities. + * For example, inviting a user to a project creates an inactive project membership but it will also create an + * inactive organization membership if the user is not already a member of the associated organization. * - * | Scenario | Description | Membership created? | Token created? | - | -------- | -------------------------------------------------- | ------------------------------------ | ------------------------------ | - | **1** | Already has `activatedAt` → skip | ❌ | ❌ | - | **1b** | Has membership but not activated → reminder only | ❌ | ❌ | - | **2** | Existing user (verified) but **no membership yet** | ✅ | ❌ | - | **3** | New email address (no user in system) | ❌ (deferred until token is claimed) | ✅ token created in **Step 5** | + * | Scenario | Description | (Inactive) Memberships? | Token? | + | -------- | -------------------------------------------------- | ----------------------------- | ---------- | + | **1** | Already has active membership → skip | ❌ | ❌ | + | **1b** | Has inactive membership → reminder only | ❌ | ❌ | + | **2** | Existing user but no (org) membership yet | ✅ inactive membership | ❌ | + | **2b** | Existing user with active org membership | ✅ direct membership | ❌ | + | **3** | New email address (no user in system) | ✅ inactive membership | ✅ | */ .openapi(membershipRoutes.createMemberships, async (ctx) => { // Step 0: Parse and normalize input const { emails, role } = ctx.req.valid('json'); - const { idOrSlug, entityType: passedEntityType } = ctx.req.valid('query'); + const { idOrSlug, entityType } = ctx.req.valid('query'); const normalizedEmails = [...new Set(emails.map((e: string) => e.toLowerCase().trim()))]; if (!normalizedEmails.length) throw new AppError({ status: 400, type: 'no_recipients', severity: 'warn' }); // Step 0: Validate target entity and caller permission (update) - const { entity } = await getValidContextEntity(idOrSlug, passedEntityType, 'update'); + const { entity } = await getValidContextEntity(idOrSlug, entityType, 'update'); // Step 0: Extract entity context - const { entityType, id: entityId, slug: entitySlug, name: entityName } = entity; + const { id: entityId, slug: entitySlug, name: entityName } = entity; const targetEntityIdField = appConfig.entityIdFields[entityType]; // Step 0: Contextual user and organization @@ -73,11 +75,8 @@ const membershipRouteHandlers = app // Step 0: Scenario buckets const rejectedItems: string[] = []; // Scenario 1: already active members const reminderEmails: string[] = []; // Scenario 1b: pending members (no token email) - const existingUsersToActivate: Array<{ - // Scenario 2: create inactive membership, email link - userId: string; - email: string; - }> = []; + const existingUsersToActivate: Array<{ userId: string; email: string }> = []; // Scenario 2: existing users to activate memberships + const existingUsersToDirectAdd: Array<{ userId: string; email: string }> = []; // Scenario 2b: existing users with active org membership to directly add const newUserTokenEmails: string[] = []; // Scenario 3: new users -> create token + email with token // Step 0: Email meta for outgoing messages @@ -87,13 +86,17 @@ const membershipRouteHandlers = app const subject = i18n.t('backend:email.member_invite.subject', { lng, entityName }); // Step 1: Single membership-aware lookup for all emails (email -> user -> membership for this entity) + // [2b] We also need to know if the user has an active organization membership when inviting to a child entity. + const orgMemberships = alias(membershipsTable, 'org_memberships'); // drizzle alias + const membershipAwareRows = await db .select({ email: emailsTable.email, // email identifier userId: usersTable.id, // nullable if no user language: usersTable.language || ('defaultLanguage' in entity ? entity.defaultLanguage : appConfig.defaultLanguage), // use user's language or entity's or app default membershipId: membershipsTable.id, // nullable if no membership - activatedAt: membershipsTable.activatedAt, // nullable if not activated + inactiveMembershipId: inactiveMembershipsTable.id, // nullable if no inactive membership + orgMembershipId: orgMemberships.id, }) .from(emailsTable) .leftJoin(usersTable, eq(usersTable.id, emailsTable.userId)) @@ -101,8 +104,24 @@ const membershipRouteHandlers = app membershipsTable, and( eq(membershipsTable.userId, usersTable.id), - eq(membershipsTable.contextType, entityType as any), - eq(membershipsTable[targetEntityIdField as keyof typeof membershipsTable] as any, entityId), + eq(membershipsTable.contextType, entityType), + eq(membershipsTable[targetEntityIdField], entityId), + ), + ) + .leftJoin( + inactiveMembershipsTable, + and( + eq(inactiveMembershipsTable.userId, usersTable.id), + eq(inactiveMembershipsTable.contextType, entityType), + eq(inactiveMembershipsTable[targetEntityIdField], entityId), + ), + ) + .leftJoin( + orgMemberships, + and( + eq(orgMemberships.userId, usersTable.id), + eq(orgMemberships.contextType, 'organization'), + eq(orgMemberships.organizationId, organization.id), ), ) .where(and(inArray(emailsTable.email, normalizedEmails))); @@ -116,61 +135,99 @@ const membershipRouteHandlers = app for (const email of normalizedEmails) { const rows = rowsByEmail.get(email)!; // array (possibly empty) - // Step 1c.i: If we have any row with an activated membership, Scenario 1 - if (rows.some((r) => r.membershipId && r.activatedAt)) { + // If we have any row with an activated membership, Scenario 1 + if (rows.some((r) => r.membershipId)) { rejectedItems.push(email); continue; } - // Step 1c.ii: If we have a membership but not activated, Scenario 1b - if (rows.some((r) => r.membershipId && !r.activatedAt)) { + // If we have a membership but not activated, Scenario 1b + if (rows.some((r) => r.inactiveMembershipId)) { reminderEmails.push(email); continue; } - // Step 1c.iii: If we have a user (but no membership), Scenario 2 + // If we have a user (but no membership), Scenario 2 const userRow = rows.find((r) => r.userId); if (userRow?.userId) { - existingUsersToActivate.push({ userId: userRow.userId, email }); + // Check if admin is inviting themselves + const isAdminInvitingSelf = user.email === email && user.role === 'admin'; + + if (isAdminInvitingSelf) { + existingUsersToDirectAdd.push({ userId: userRow.userId, email }); // Direct add for admin self-invite + } else { + // User could still have an active organization membership + const hasActiveOrgMembership = entityType !== 'organization' && !!rows.find((r) => r.orgMembershipId); + + if (hasActiveOrgMembership) { + existingUsersToDirectAdd.push({ userId: userRow.userId, email }); // Scenario 2b + } else { + existingUsersToActivate.push({ userId: userRow.userId, email }); // Scenario 2a + } + } continue; } - // Step 1c.iv: Otherwise, brand-new user, Scenario 3 + // Otherwise, brand-new user, Scenario 3 newUserTokenEmails.push(email); } - // Step 2: Bulk create inactive memberships for Scenario 2 (existing users) + // Step 2: Bulk create memberships + // For Scenario 2a (existing users to activate) if (existingUsersToActivate.length > 0) { - // Step 2a: Build bulk insert rows for membershipsTable const membershipsToInsert = existingUsersToActivate.map(({ userId }) => ({ userId, role, entity, - activate: false, + createdBy: user.id, + contextType: entityType, + organizationId: organization.id, + ...(associatedEntity && { [associatedEntity.field]: associatedEntity.id }), + })); + + await db.insert(inactiveMembershipsTable).values(membershipsToInsert); + } + // For Scenario 2b (existing users to directly add) + if (existingUsersToDirectAdd.length > 0) { + const membershipsToInsert = existingUsersToDirectAdd.map(({ userId }) => ({ + userId, + role, + entity, createdBy: user.id, })); - // Step 2b: Insert in one shot await insertMemberships(membershipsToInsert); } // Step 3: Prepare no-token recipients (Scenario 1b + Scenario 2) - const buildRecipient = (email: string) => ({ - email, - lng, - name: slugFromEmail(email), - // TODO find better way to do it(not just add s) - memberInviteLink: `${appConfig.frontendUrl}/${entityType}s/${entitySlug}`, - }); + const memberInviteNoTokenLink = `${appConfig.frontendUrl}/${entityType}/${entitySlug}`; const noTokenRecipients = [ - // Step 3a: Scenario 2 invitations for existing users (inactive memberships were created) - ...existingUsersToActivate.map(({ email }) => buildRecipient(email)), - // Step 3b: Scenario 1b reminders for pending members - ...reminderEmails.map(buildRecipient), + // Scenario 2 invitations for existing users (inactive memberships were created) + ...existingUsersToActivate.map(({ email }) => { + return { email, lng, name: slugFromEmail(email), memberInviteLink: memberInviteNoTokenLink }; + }), + // Scenario 1b reminders for pending members + ...reminderEmails.map((email) => { + return { email, lng, name: slugFromEmail(email), memberInviteLink: memberInviteNoTokenLink }; + }), ]; - // Step 4: Bulk-create fresh invitation tokens for Scenario 3 (no tokensTable lookup) + // Step 4: Prepare inactive memberships for new users and generate tokens + const membershipsToInsert = newUserTokenEmails.map((email) => ({ + email, + id: nanoid(), + role, + entity, + createdBy: user.id, + contextType: entityType, + organizationId: organization.id, + ...(associatedEntity && { [associatedEntity.field]: associatedEntity.id }), + })); + + if (newUserTokenEmails.length > 0) await db.insert(inactiveMembershipsTable).values(membershipsToInsert).returning(); + + // Step 4: Bulk-create fresh invitation tokens for Scenario 3 (new users) const rawTokens: Array<{ email: string; raw: string }> = []; const tokensToInsert = newUserTokenEmails.map((email) => { // Step 4a: Generate raw + hashed token @@ -183,13 +240,13 @@ const membershipRouteHandlers = app token: hashed, type: 'invitation' as const, email, + inactiveMembershipId: membershipsToInsert.find((m) => m.email === email)!.id, createdBy: user.id, expiresAt: createDate(new TimeSpan(7, 'd')), role, entityType, [targetEntityIdField]: entityId, ...(associatedEntity && { [associatedEntity.field]: associatedEntity.id }), - ...(entityType !== 'organization' && { organizationId: organization.id }), }; }); @@ -202,6 +259,7 @@ const membershipRouteHandlers = app .returning({ id: tokensTable.id, email: tokensTable.email, token: tokensTable.token, type: tokensTable.type }); // Step 5b: Link waitlist requests to new tokens (if any) + // TODO consider dropping this to simplify await Promise.all( insertedTokens.map(({ id, email }) => db @@ -222,9 +280,11 @@ const membershipRouteHandlers = app return { email, lng, name: slugFromEmail(email), memberInviteLink }; }); - // Step 7: Send no-token emails for Scenarios 1b + 2 + // Static email props are same for each scenario + const staticProps = { senderName, senderThumbnailUrl, subject, lng, role, entityName }; + + // Step 7: Send basic invite emails for Scenarios 1b + 2a if (noTokenRecipients.length > 0) { - const staticProps = { senderName, senderThumbnailUrl, subject, lng, role, entityName }; await mailer.prepareEmails( MemberInviteEmail, staticProps, @@ -233,9 +293,10 @@ const membershipRouteHandlers = app ); } - // Step 8: Send with-token emails for Scenario 3 + // TODO for scenario 2b we might want to send a different email notifying user of direct addition + + // Step 8: Send invite with token emails for Scenario 3 if (withTokenRecipients.length > 0) { - const staticProps = { senderName, senderThumbnailUrl, subject, lng }; await mailer.prepareEmails( MemberInviteWithTokenEmail, staticProps, @@ -276,9 +337,10 @@ const membershipRouteHandlers = app const membershipIds = Array.isArray(ids) ? ids : [ids]; // Get target memberships - const targets = await membershipBaseQuery().where( - and(inArray(membershipsTable.userId, membershipIds), eq(membershipsTable[entityIdField], entity.id)), - ); + const targets = await db + .select(membershipBaseSelect) + .from(membershipsTable) + .where(and(inArray(membershipsTable.userId, membershipIds), eq(membershipsTable[entityIdField], entity.id))); // Check if membership exist const rejectedItems: string[] = []; @@ -320,10 +382,10 @@ const membershipRouteHandlers = app let orderToUpdate = order; // Get the membership in valid organization - const [membershipToUpdate] = await membershipBaseQuery() - .where( - and(eq(membershipsTable.id, membershipId), isNotNull(membershipsTable.activatedAt), eq(membershipsTable.organizationId, organization.id)), - ) + const [membershipToUpdate] = await db + .select(membershipBaseSelect) + .from(membershipsTable) + .where(and(eq(membershipsTable.id, membershipId), eq(membershipsTable.organizationId, organization.id))) .limit(1); if (!membershipToUpdate) { @@ -382,40 +444,51 @@ const membershipRouteHandlers = app * Accept - or reject - organization membership invitation */ .openapi(membershipRoutes.handleMembershipInvitation, async (ctx) => { - const { id: membershipId, acceptOrReject } = ctx.req.valid('param'); + const { id: inactiveMembershipId, acceptOrReject } = ctx.req.valid('param'); const user = getContextUser(); - const [organizationMembership] = await db + const [inactiveMembership] = await db .select() - .from(membershipsTable) - .where(and(eq(membershipsTable.id, membershipId), eq(membershipsTable.userId, user.id), eq(membershipsTable.contextType, 'organization'))) + .from(inactiveMembershipsTable) + .where( + and( + eq(inactiveMembershipsTable.id, inactiveMembershipId), + eq(inactiveMembershipsTable.userId, user.id), + eq(inactiveMembershipsTable.contextType, 'organization'), + ), + ) .limit(1); - if (!organizationMembership) throw new AppError({ status: 404, type: 'membership_not_found', severity: 'error', meta: { membershipId } }); - - // Can't accept already active membership - if (organizationMembership.activatedAt) - throw new AppError({ status: 400, type: 'membership_already_active', severity: 'error', meta: { membershipId } }); + if (!inactiveMembership) + throw new AppError({ status: 404, type: 'inactive_membership_not_found', severity: 'error', meta: { id: inactiveMembershipId } }); if (acceptOrReject === 'accept') { // Activate memberships, can be multiple if there are nested entity memberships. Eg. organization and project - // TODO test this in raak for projects and edge cases - const activatedMemberships = await db - .update(membershipsTable) - .set({ activatedAt: getIsoDate() }) - .where(and(eq(membershipsTable.id, organizationMembership.id))) - .returning(); + // TODO(DAVID) test this in raak for projects and edge cases + const entity = await resolveEntity('organization', inactiveMembership.organizationId); + if (!entity) throw new AppError({ status: 404, type: 'not_found', severity: 'error', entityType: 'organization' }); + + const activatedMemberships = await insertMemberships([ + { entity, userId: user.id, role: inactiveMembership.role, createdBy: inactiveMembership.createdBy }, + ]); + + await db.delete(inactiveMembershipsTable).where(eq(inactiveMembershipsTable.id, inactiveMembership.id)); - eventManager.emit('acceptedMembership', organizationMembership); + // TODO(DAVID) eventManager.emit('acceptedMembership', membership); logEvent('info', 'Accepted memberships', { ids: activatedMemberships.map((m) => m.id) }); } // Reject membership simply deletes the membership - if (acceptOrReject === 'reject') await db.delete(membershipsTable).where(and(eq(membershipsTable.id, organizationMembership.id))); + if (acceptOrReject === 'reject') { + await db + .update(inactiveMembershipsTable) + .set({ rejectedAt: getIsoDate() }) + .where(and(eq(inactiveMembershipsTable.id, inactiveMembership.id))); + } - const entity = await resolveEntity('organization', organizationMembership.organizationId); + const entity = await resolveEntity('organization', inactiveMembership.organizationId); if (!entity) throw new AppError({ status: 404, type: 'not_found', severity: 'error', entityType: 'organization' }); return ctx.json(entity, 200); @@ -440,7 +513,6 @@ const membershipRouteHandlers = app eq(membershipsTable.organizationId, organization.id), eq(membershipsTable[entityIdField], entity.id), eq(membershipsTable.contextType, entityType), - isNotNull(membershipsTable.activatedAt), ]; if (role) membersFilters.push(eq(membershipsTable.role, role)); @@ -484,68 +556,27 @@ const membershipRouteHandlers = app const { entity } = await getValidContextEntity(idOrSlug, entityType, 'read'); const entityIdField = appConfig.entityIdFields[entity.entityType]; - type SourceKind = 'membership' | 'invite'; + const table = inactiveMembershipsTable; + const orderColumn = getOrderColumn({ createdAt: table.createdAt }, sort, table.createdAt, order); - // Shape A: pending memberships (existing users) - const pendingMembersShape = db + const pendingMembershipsQuery = db .select({ - source: sql`'membership'`.as('source'), - - membershipId: sql`${membershipsTable.id}`.as('membershipId'), - role: sql`${membershipsTable.role}`.as('role'), - userId: sql`${membershipsTable.userId}`.as('userId'), - tokenId: sql`NULL`.as('tokenId'), - - email: sql`${userBaseSelect.email}`.as('email'), + id: table.id, + role: table.role, + userId: table.userId, + email: userBaseSelect.email, thumbnailUrl: sql`${userBaseSelect.thumbnailUrl}`.as('thumbnailUrl'), - - createdAt: membershipsTable.createdAt, - createdBy: membershipsTable.createdBy, - }) - .from(membershipsTable) - .innerJoin(usersTable, eq(usersTable.id, membershipsTable.userId)) - .where( - and( - eq(membershipsTable[entityIdField], entity.id), - eq(membershipsTable.organizationId, organization.id), - isNull(membershipsTable.activatedAt), - ), - ); - - // Shape B: token-only invites (no user record yet) - const inviteShape = db - .select({ - source: sql`'invite'`.as('source'), - - membershipId: sql`NULL`.as('membershipId'), - role: sql`${tokensTable.role}`.as('role'), - userId: sql`NULL`.as('userId'), - tokenId: sql`${tokensTable.id}`.as('tokenId'), - - email: sql`${tokensTable.email}`.as('email'), - thumbnailUrl: sql`NULL`.as('thumbnailUrl'), - - createdAt: tokensTable.createdAt, - createdBy: tokensTable.createdBy, + createdAt: table.createdAt, + createdBy: table.createdBy, }) - .from(tokensTable) - .where( - and( - eq(tokensTable[entityIdField], entity.id), - eq(tokensTable.organizationId, organization.id), - // add more filters (accepted/expired) if needed - ), - ); - - // Build union with identical shapes - const combinedCte = db.$with('combined').as(pendingMembersShape.unionAll(inviteShape)); - - // Order by the CTE alias' column so types are clear - const itemsOrderColumn = getOrderColumn({ createdAt: combinedCte.createdAt }, sort, combinedCte.createdAt, order); + .from(table) + .innerJoin(usersTable, eq(usersTable.id, table.userId)) + .where(and(eq(table[entityIdField], entity.id), eq(table.organizationId, organization.id))) + .orderBy(orderColumn); - const items = await db.with(combinedCte).select().from(combinedCte).orderBy(itemsOrderColumn).limit(limit).offset(offset); + const items = await pendingMembershipsQuery.limit(limit).offset(offset); - const [{ total }] = await db.with(combinedCte).select({ total: count() }).from(combinedCte); + const [{ total }] = await db.select({ total: count() }).from(pendingMembershipsQuery.as('pendingMemberships')); return ctx.json({ items, total }, 200); }); diff --git a/backend/src/modules/memberships/helpers/index.ts b/backend/src/modules/memberships/helpers/index.ts index d8713fc99..557e35a9f 100644 --- a/backend/src/modules/memberships/helpers/index.ts +++ b/backend/src/modules/memberships/helpers/index.ts @@ -11,7 +11,7 @@ type BaseEntityModel = EntityModel & { organizationId?: string; }; -interface Props { +interface InsertSingleProps { userId: string; role: MembershipModel['role']; entity: T; @@ -31,7 +31,14 @@ interface Props { * @param info.tokenId - Optional, Id of a token if it's and invite membership (default: null). * @returns Inserted target membership. */ -export const insertMembership = async ({ userId, role, entity, createdBy = userId, tokenId = null }: Props) => { +// TODO not used anywhere +export const insertMembership = async ({ + userId, + role, + entity, + createdBy = userId, + tokenId = null, +}: InsertSingleProps) => { // Get max order number const [{ maxOrder }] = await db .select({ maxOrder: max(membershipsTable.order) }) @@ -120,26 +127,25 @@ export const getAssociatedEntityDetails = (entity: return { id, type, field }; }; -interface Props { +interface InsertMultipleProps { userId: string; role: MembershipModel['role']; entity: T; - activate: boolean; - createdBy?: string; + createdBy: string; } /** - * Batch insert memberships for existing users. + * Batch insert direct memberships for existing users. * * - Ensures organization membership exists for non-organization entities. * - Ensures associated parent membership exists when applicable. - * - Inserts the target entity membership (inactive if activate=false). + * - Inserts the target entity memberships. * - Computes per-user 'order' in a single grouped query and increments by 10. * * @param items - membership requests for existing users * @returns inserted target memberships (MembershipBaseModel) */ -export const insertMemberships = async (items: Array>): Promise> => { +export const insertMemberships = async (items: Array>): Promise> => { // Early exit: nothing to insert if (!items.length) return []; @@ -168,7 +174,7 @@ export const insertMemberships = async (items: Array< // Precompute per-item resolved details (entity fields, associated relation, base row) const prepared = items.map((info) => { // Resolve defaults and contextual fields - const { userId, role, entity, activate } = info; + const { userId, role, entity } = info; const createdBy = info.createdBy ?? userId; const entityIdField = appConfig.entityIdFields[entity.entityType]; const associatedEntity = getAssociatedEntityDetails(entity); @@ -188,7 +194,6 @@ export const insertMemberships = async (items: Array< userId, role, createdBy, - activatedAt: activate ? getIsoDate() : null, order: nextOrder, }; diff --git a/backend/src/modules/memberships/helpers/select.ts b/backend/src/modules/memberships/helpers/select.ts index b434e9bcf..e7a4119a2 100644 --- a/backend/src/modules/memberships/helpers/select.ts +++ b/backend/src/modules/memberships/helpers/select.ts @@ -1,6 +1,5 @@ import type { z } from '@hono/zod-openapi'; import { getTableColumns } from 'drizzle-orm/utils'; -import { db } from '#/db/db'; import { membershipsTable } from '#/db/schema/memberships'; import { pickColumns } from '#/db/utils/pick-columns'; import { membershipBaseSchema } from '#/modules/memberships/schema'; @@ -20,14 +19,3 @@ export const membershipBaseSelect = (() => { const keys = Object.keys(membershipBaseSchema.shape) as MembershipBaseKeys[]; return pickColumns(cols, keys); })() satisfies MembershipBaseSelect; - -// TODO remove not a pattern I like -/** - * Base query for selecting membership summary to embed membership in an entity. - * - * - Always selects from `membershipsTable` using the predefined `membershipBaseSelect` shape. - * - * This query is meant to be extended (e.g., with additional joins or filters) - * wherever user data needs to be fetched consistently. - */ -export const membershipBaseQuery = () => db.select(membershipBaseSelect).from(membershipsTable); diff --git a/backend/src/modules/memberships/routes.ts b/backend/src/modules/memberships/routes.ts index 72254086f..6f3a3371f 100644 --- a/backend/src/modules/memberships/routes.ts +++ b/backend/src/modules/memberships/routes.ts @@ -1,6 +1,7 @@ import { z } from '@hono/zod-openapi'; import { createCustomRoute } from '#/lib/custom-routes'; import { hasOrgAccess, isAuthenticated } from '#/middlewares/guard'; +import { contextEntityBaseSchema } from '#/modules/entities/schema-base'; import { memberListQuerySchema, membershipCreateBodySchema, @@ -12,7 +13,6 @@ import { import { memberSchema } from '#/modules/users/schema'; import { entityWithTypeQuerySchema, idInOrgParamSchema, idOrSlugSchema, idSchema, idsBodySchema, inOrgParamSchema } from '#/utils/schema/common'; import { errorResponses, paginationSchema, successWithRejectedItemsSchema } from '#/utils/schema/responses'; -import { contextEntityBaseSchema } from '../entities/schema-base'; const membershipRoutes = { createMemberships: createCustomRoute({ @@ -96,11 +96,11 @@ const membershipRoutes = { operationId: 'handleMembershipInvitation', method: 'post', path: '/{id}/{acceptOrReject}', - guard: isAuthenticated, + guard: [isAuthenticated], tags: ['membership'], summary: 'Respond to membership invitation', description: 'Accepting activates the associated membership. Rejecting simply removes the invitation token.', - request: { params: z.object({ id: idSchema, acceptOrReject: z.enum(['accept', 'reject']) }) }, + request: { params: z.object({ id: idSchema, acceptOrReject: z.enum(['accept', 'reject']), orgIdOrSlug: idOrSlugSchema }) }, responses: { 200: { description: 'Invitation was accepted', @@ -119,7 +119,7 @@ const membershipRoutes = { summary: 'Get list of members', description: 'Retrieves members (users) of a context entity by ID or slug, including their associated *membership* data.', request: { - params: z.object({ orgIdOrSlug: idOrSlugSchema.optional() }), + params: inOrgParamSchema, query: memberListQuerySchema, }, responses: { diff --git a/backend/src/modules/memberships/schema.ts b/backend/src/modules/memberships/schema.ts index 6bb2d48bd..3059c9546 100644 --- a/backend/src/modules/memberships/schema.ts +++ b/backend/src/modules/memberships/schema.ts @@ -1,11 +1,14 @@ import { z } from '@hono/zod-openapi'; import { appConfig } from 'config'; import { createSelectSchema } from 'drizzle-zod'; +import { inactiveMembershipsTable } from '#/db/schema/inactive-memberships'; import { membershipsTable } from '#/db/schema/memberships'; +import { userBaseSchema } from '#/modules/users/schema-base'; import { contextEntityTypeSchema, idOrSlugSchema, paginationQuerySchema, validEmailSchema } from '#/utils/schema/common'; -import { userBaseSchema } from '../users/schema-base'; -export const membershipSchema = createSelectSchema(membershipsTable).openapi('MembershipSchema'); +export const membershipSchema = createSelectSchema(membershipsTable).openapi('Membership'); + +export const inactiveMembershipSchema = createSelectSchema(inactiveMembershipsTable).openapi('InactiveMembership'); export const membershipBaseSchema = membershipSchema .omit({ @@ -14,7 +17,7 @@ export const membershipBaseSchema = membershipSchema modifiedAt: true, modifiedBy: true, }) - .openapi('MembershipBaseSchema'); + .openapi('MembershipBase'); export const membershipCreateBodySchema = z.object({ emails: validEmailSchema.array().min(1).max(50), @@ -42,8 +45,7 @@ export const pendingMembershipListQuerySchema = paginationQuerySchema.extend({ }); export const pendingMembershipSchema = z.object({ - membershipId: z.string().nullable(), - tokenId: z.string().nullable(), + id: z.string(), email: userBaseSchema.shape.email, thumbnailUrl: userBaseSchema.shape.thumbnailUrl.nullable(), role: membershipSchema.shape.role.nullable(), diff --git a/backend/src/modules/organizations/handlers.ts b/backend/src/modules/organizations/handlers.ts index cc54a70e8..1ea0909b8 100644 --- a/backend/src/modules/organizations/handlers.ts +++ b/backend/src/modules/organizations/handlers.ts @@ -1,6 +1,6 @@ import { OpenAPIHono, type z } from '@hono/zod-openapi'; import { appConfig } from 'config'; -import { and, count, eq, getTableColumns, ilike, inArray, isNotNull, type SQL, sql } from 'drizzle-orm'; +import { and, count, eq, getTableColumns, ilike, inArray, type SQL, sql } from 'drizzle-orm'; import { db } from '#/db/db'; import { membershipsTable } from '#/db/schema/memberships'; import { organizationsTable } from '#/db/schema/organizations'; @@ -13,7 +13,7 @@ import { getMemberCountsQuery } from '#/modules/entities/helpers/counts/member'; import { getRelatedEntityCountsQuery } from '#/modules/entities/helpers/counts/related-entities'; import { getAssociatedEntities } from '#/modules/entities/helpers/get-related-entities'; import { insertMemberships } from '#/modules/memberships/helpers'; -import { membershipBaseQuery, membershipBaseSelect } from '#/modules/memberships/helpers/select'; +import { membershipBaseSelect } from '#/modules/memberships/helpers/select'; import organizationRoutes from '#/modules/organizations/routes'; import type { membershipCountSchema } from '#/modules/organizations/schema'; import { getValidContextEntity } from '#/permissions/get-context-entity'; @@ -62,7 +62,7 @@ const organizationRouteHandlers = app logEvent('info', 'Organization created', { organizationId: createdOrganization.id }); // Insert membership - const [createdMembership] = await insertMemberships([{ userId: user.id, role: 'admin', entity: createdOrganization, activate: true }]); + const [createdMembership] = await insertMemberships([{ userId: user.id, createdBy: user.id, role: 'admin', entity: createdOrganization }]); // Get default linked entities const validEntities = getAssociatedEntities(createdOrganization.entityType); @@ -94,8 +94,10 @@ const organizationRouteHandlers = app const [{ total }] = await db.select({ total: count() }).from(organizationsQuery.as('organizations')); - const memberships = membershipBaseQuery() - .where(and(eq(membershipsTable.userId, user.id), eq(membershipsTable.contextType, entityType), isNotNull(membershipsTable.activatedAt))) + const memberships = db + .select(membershipBaseSelect) + .from(membershipsTable) + .where(and(eq(membershipsTable.userId, user.id), eq(membershipsTable.contextType, entityType))) .as('memberships'); const orderColumn = getOrderColumn( @@ -184,14 +186,16 @@ const organizationRouteHandlers = app .returning(); // notify members (unchanged) - const organizationMemberships = await membershipBaseQuery().where( - and( - eq(membershipsTable.contextType, 'organization'), - eq(membershipsTable.organizationId, organization.id), - eq(membershipsTable.archived, false), - isNotNull(membershipsTable.activatedAt), - ), - ); + const organizationMemberships = await db + .select(membershipBaseSelect) + .from(membershipsTable) + .where( + and( + eq(membershipsTable.contextType, 'organization'), + eq(membershipsTable.organizationId, organization.id), + eq(membershipsTable.archived, false), + ), + ); for (const member of organizationMemberships) sendSSEToUsers([member.userId], 'entity_updated', { ...updatedOrganization, member }); logEvent('info', 'Organization updated', { organizationId: updatedOrganization.id }); @@ -226,7 +230,6 @@ const organizationRouteHandlers = app eq(membershipsTable.contextType, 'organization'), inArray(membershipsTable.organizationId, allowedIds), eq(membershipsTable.archived, false), - isNotNull(membershipsTable.activatedAt), ), ); diff --git a/backend/src/modules/requests/handlers.ts b/backend/src/modules/requests/handlers.ts index 4acab02af..14194c3ff 100644 --- a/backend/src/modules/requests/handlers.ts +++ b/backend/src/modules/requests/handlers.ts @@ -12,7 +12,7 @@ import { mailer } from '#/lib/mailer'; import { sendMatrixMessage } from '#/lib/notifications/send-matrix-message'; import { sendSlackMessage } from '#/lib/notifications/send-slack-message'; import requestRoutes from '#/modules/requests/routes'; -import { usersBaseQuery } from '#/modules/users/helpers/select'; +import { userSelect } from '#/modules/users/helpers/select'; import { defaultHook } from '#/utils/default-hook'; import { getOrderColumn } from '#/utils/order-column'; import { prepareStringForILikeFilter } from '#/utils/sql'; @@ -33,7 +33,9 @@ const requestRouteHandlers = app const normalizedEmail = email.toLowerCase().trim(); if (type === 'waitlist') { - const [existingUser] = await usersBaseQuery() + const [existingUser] = await db + .select(userSelect) + .from(usersTable) .leftJoin(emailsTable, eq(usersTable.id, emailsTable.userId)) .where(eq(emailsTable.email, normalizedEmail)) .limit(1); diff --git a/backend/src/modules/system/handlers.ts b/backend/src/modules/system/handlers.ts index e669d03be..be519775d 100644 --- a/backend/src/modules/system/handlers.ts +++ b/backend/src/modules/system/handlers.ts @@ -1,7 +1,7 @@ import { OpenAPIHono } from '@hono/zod-openapi'; import { EventName, Paddle } from '@paddle/paddle-node-sdk'; import { appConfig } from 'config'; -import { and, eq, inArray, isNotNull, isNull, or } from 'drizzle-orm'; +import { and, eq, inArray, isNull, or } from 'drizzle-orm'; import i18n from 'i18next'; import { db } from '#/db/db'; import { attachmentsTable } from '#/db/schema/attachments'; @@ -18,7 +18,8 @@ import { AppError } from '#/lib/errors'; import { mailer } from '#/lib/mailer'; import { getSignedUrlFromKey } from '#/lib/signed-url'; import { getParsedSessionCookie, validateSession } from '#/modules/auth/general/helpers/session'; -import { membershipBaseQuery } from '#/modules/memberships/helpers/select'; +import { membershipBaseSelect } from '#/modules/memberships/helpers/select'; +import { replaceSignedSrcs } from '#/modules/system/helpers/get-signed-src'; import systemRoutes from '#/modules/system/routes'; import permissionManager from '#/permissions/permissions-config'; import { defaultHook } from '#/utils/default-hook'; @@ -78,7 +79,7 @@ const systemRouteHandlers = app and( inArray(tokensTable.email, normalizedEmails), eq(tokensTable.type, 'invitation'), - isNull(tokensTable.entityType), // system invite + isNull(tokensTable.inactiveMembershipId), // system invite isNull(tokensTable.invokedAt), // pending (not used) ), ); @@ -133,7 +134,6 @@ const systemRouteHandlers = app email, createdBy: user.id, expiresAt: createDate(new TimeSpan(7, 'd')), - // entityType stays NULL => system-level })); const insertedTokens = await db.insert(tokensTable).values(tokens).returning(); @@ -187,7 +187,7 @@ const systemRouteHandlers = app const { user } = await validateSession(sessionToken); if (attachment) { - const memberships = await membershipBaseQuery().where(and(eq(membershipsTable.userId, user.id), isNotNull(membershipsTable.activatedAt))); + const memberships = await db.select(membershipBaseSelect).from(membershipsTable).where(eq(membershipsTable.userId, user.id)); const isSystemAdmin = user.role === 'admin'; const isAllowed = permissionManager.isPermissionAllowed(memberships, 'read', attachment); @@ -251,7 +251,6 @@ const systemRouteHandlers = app eq(membershipsTable.contextType, 'organization'), inArray(membershipsTable.organizationId, organizationIds), inArray(membershipsTable.role, roles), - isNotNull(membershipsTable.activatedAt), eq(usersTable.newsletter, true), ), ); @@ -276,30 +275,8 @@ const systemRouteHandlers = app }, ]; - // Regex to match src="..." or src='...' - // Captures quote type in g 1 and actual URL in g 2 - const srcRegex = /src\s*=\s*(['"])(.*?)\1/gi; - - const srcs = [...content.matchAll(srcRegex)].map(([_, src]) => src); - - // Map to hold original -> signed URL replacements - const replacements = new Map(); - - // For each unique src, fetch its signed URL - // TODO can we put all this in a helper folder? - await Promise.all( - srcs.map(async (src) => { - try { - const signed = await getSignedUrlFromKey(src, { isPublic: true, bucketName: appConfig.s3PublicBucket }); - replacements.set(src, signed); - } catch (e) { - replacements.set(src, src); - } - }), - ); - // Replace all src attributes in content - const newContent = content.replace(srcRegex, (_, quote, src) => `src=${quote}${replacements.get(src) ?? src}${quote}`); + const newContent = await replaceSignedSrcs(content); type Recipient = (typeof recipients)[number]; diff --git a/backend/src/modules/system/helpers/get-signed-src.ts b/backend/src/modules/system/helpers/get-signed-src.ts new file mode 100644 index 000000000..e919b8a95 --- /dev/null +++ b/backend/src/modules/system/helpers/get-signed-src.ts @@ -0,0 +1,33 @@ +import { appConfig } from 'config'; +import { getSignedUrlFromKey } from '#/lib/signed-url'; + +export const replaceSignedSrcs = async (content: string): Promise => { + // Regex to match src="..." or src='...' + // Captures quote type in g1 and actual URL in g2 + const srcRegex = /src\s*=\s*(['"])(.*?)\1/gi; + + // Extract all src URLs + const srcs = [...content.matchAll(srcRegex)].map(([_, __, src]) => src); + + // Map to hold original -> signed URL replacements + const replacements = new Map(); + + // Fetch signed URLs for all unique srcs + await Promise.all( + Array.from(new Set(srcs)).map(async (src) => { + try { + const signed = await getSignedUrlFromKey(src, { + isPublic: true, + bucketName: appConfig.s3PublicBucket, + }); + replacements.set(src, signed); + } catch { + // fallback to original if signing fails + replacements.set(src, src); + } + }), + ); + + // Replace all src attributes in content + return content.replace(srcRegex, (_, quote, src) => `src=${quote}${replacements.get(src) ?? src}${quote}`); +}; diff --git a/backend/src/modules/users/handlers.ts b/backend/src/modules/users/handlers.ts index 4d1d3c2d1..e83b444f4 100644 --- a/backend/src/modules/users/handlers.ts +++ b/backend/src/modules/users/handlers.ts @@ -1,6 +1,6 @@ import { OpenAPIHono } from '@hono/zod-openapi'; import { appConfig } from 'config'; -import { and, count, eq, ilike, inArray, isNotNull, ne, or } from 'drizzle-orm'; +import { and, count, eq, ilike, inArray, ne, or } from 'drizzle-orm'; import { alias } from 'drizzle-orm/pg-core'; import { db } from '#/db/db'; import { membershipsTable } from '#/db/schema/memberships'; @@ -8,8 +8,8 @@ import { usersTable } from '#/db/schema/users'; import { type Env, getContextMemberships, getContextUser } from '#/lib/context'; import { AppError } from '#/lib/errors'; import { checkSlugAvailable } from '#/modules/entities/helpers/check-slug'; -import { membershipBaseQuery } from '#/modules/memberships/helpers/select'; -import { userSelect, usersBaseQuery } from '#/modules/users/helpers/select'; +import { membershipBaseSelect } from '#/modules/memberships/helpers/select'; +import { userSelect } from '#/modules/users/helpers/select'; import userRoutes from '#/modules/users/routes'; import { defaultHook } from '#/utils/default-hook'; import { getIsoDate } from '#/utils/iso-date'; @@ -62,12 +62,12 @@ const usersRouteHandlers = app ? db .selectDistinct({ ...userSelect }) .from(usersTable) - .innerJoin(targetMembership, and(eq(usersTable.id, targetMembership.userId), isNotNull(targetMembership.activatedAt))) + .innerJoin(targetMembership, and(eq(usersTable.id, targetMembership.userId))) .innerJoin( requesterMembership, and(eq(requesterMembership.organizationId, targetMembership.organizationId), eq(requesterMembership.userId, user.id)), ) - : usersBaseQuery(); + : db.select(userSelect).from(usersTable); const usersQuery = baseUsersQuery.where(and(...filters)).orderBy(orderColumn); @@ -88,7 +88,10 @@ const usersRouteHandlers = app membershipFilters.push(eq(membershipsTable.contextType, targetEntityType), eq(membershipsTable[entityFieldId], targetEntityId)); } - const memberships = await membershipBaseQuery().where(and(...membershipFilters)); + const memberships = await db + .select(membershipBaseSelect) + .from(membershipsTable) + .where(and(...membershipFilters)); // Group memberships by userId in a type-safe way const membershipsByUser = memberships.reduce>((acc, m) => { @@ -118,7 +121,7 @@ const usersRouteHandlers = app // Fetch users by IDs - const targets = await usersBaseQuery().where(inArray(usersTable.id, toDeleteIds)); + const targets = await db.select(userSelect).from(usersTable).where(inArray(usersTable.id, toDeleteIds)); const foundIds = new Set(targets.map(({ id }) => id)); const allowedIds: string[] = []; @@ -156,7 +159,9 @@ const usersRouteHandlers = app if (idOrSlug === requestingUser.id || idOrSlug === requestingUser.slug) return ctx.json(requestingUser, 200); - const [targetUser] = await usersBaseQuery() + const [targetUser] = await db + .select(userSelect) + .from(usersTable) .where(or(eq(usersTable.id, idOrSlug), eq(usersTable.slug, idOrSlug))) .limit(1); @@ -171,7 +176,6 @@ const usersRouteHandlers = app and( eq(membershipsTable.userId, targetUser.id), eq(membershipsTable.contextType, 'organization'), - isNotNull(membershipsTable.activatedAt), inArray(membershipsTable.organizationId, requesterOrgIds), ), ) @@ -197,7 +201,9 @@ const usersRouteHandlers = app const user = getContextUser(); - const [targetUser] = await usersBaseQuery() + const [targetUser] = await db + .select(userSelect) + .from(usersTable) .where(or(eq(usersTable.id, idOrSlug), eq(usersTable.slug, idOrSlug))) .limit(1); diff --git a/backend/src/modules/users/helpers/select.ts b/backend/src/modules/users/helpers/select.ts index 0534e42ca..789b31b27 100644 --- a/backend/src/modules/users/helpers/select.ts +++ b/backend/src/modules/users/helpers/select.ts @@ -1,6 +1,5 @@ import { appConfig, type UserFlags } from 'config'; import { getTableColumns, sql } from 'drizzle-orm'; -import { db } from '#/db/db'; import { usersTable } from '#/db/schema/users'; import { pickColumns } from '#/db/utils/pick-columns'; import { userBaseSchema } from '#/modules/users/schema-base'; @@ -39,15 +38,3 @@ export const userBaseSelect = (() => { const keys = Object.keys(userBaseSchema.shape) as UserBaseKeys[]; return pickColumns(cols, keys); })() satisfies UserBaseSelect; - -// TODO perhaps remove since it it an uncommon pattern to export a base query in our codebase? - -/** - * Base query for selecting users. - * - * - Always selects from `usersTable` using the predefined `userSelect` shape. - * - * This query is meant to be extended (e.g., with additional joins or filters) - * wherever user data needs to be fetched consistently. - */ -export const usersBaseQuery = () => db.select(userSelect).from(usersTable); diff --git a/backend/src/modules/users/schema-base.ts b/backend/src/modules/users/schema-base.ts index d6c808b3f..175af65ec 100644 --- a/backend/src/modules/users/schema-base.ts +++ b/backend/src/modules/users/schema-base.ts @@ -10,4 +10,4 @@ export const userBaseSchema = contextEntityBaseSchema email: z.email(), entityType: z.literal('user'), }) - .openapi('UserBaseSchema'); + .openapi('UserBase'); diff --git a/backend/src/utils/get-valid-token.ts b/backend/src/utils/get-valid-token.ts index 5688f461c..db9fa9f1d 100644 --- a/backend/src/utils/get-valid-token.ts +++ b/backend/src/utils/get-valid-token.ts @@ -8,8 +8,8 @@ import { getAuthCookie } from '#/modules/auth/general/helpers/cookie'; import { getParsedSessionCookie, validateSession } from '#/modules/auth/general/helpers/session'; import { isExpiredDate } from '#/utils/is-expired-date'; import { nanoid } from '#/utils/nanoid'; +import { encodeLowerCased } from '#/utils/oslo'; import { createDate, TimeSpan } from '#/utils/time-span'; -import { encodeLowerCased } from './oslo'; type BaseProps = { ctx: Context; diff --git a/backend/tests/setup.ts b/backend/tests/setup.ts index ae7f66206..adb75e303 100644 --- a/backend/tests/setup.ts +++ b/backend/tests/setup.ts @@ -39,35 +39,38 @@ type ConfigOverride = { * Mock the global fetch request to avoid actual network calls during tests. */ export function mockFetchRequest() { - globalThis.fetch = vi.fn().mockImplementation((input) => { - // Handle Request objects (like those from rate limiter) - if (input instanceof Request) { + vi.stubGlobal( + 'fetch', + vi.fn().mockImplementation((input) => { + // Handle Request objects (like those from rate limiter) + if (input instanceof Request) { + return Promise.resolve({ + ok: true, + status: 200, + json: async () => { + try { + return await input.clone().json(); + } catch { + return {}; + } + }, + text: async () => '', + clone: () => input.clone(), + }); + } + return Promise.resolve({ ok: true, status: 200, - json: async () => { - try { - return await input.clone().json(); - } catch { - return {}; - } - }, - text: async () => '', - clone: () => input.clone(), - }); - } - - return Promise.resolve({ - ok: true, - status: 200, - json: async () => ({}), - text: async () => '', - clone: () => ({ json: async () => ({}), text: async () => '', - }), - }); - }); + clone: () => ({ + json: async () => ({}), + text: async () => '', + }), + }); + }), + ); } /** diff --git a/biome.json b/biome.json index 2ef8bc6ee..fdc1f380e 100644 --- a/biome.json +++ b/biome.json @@ -11,6 +11,11 @@ "frontend/openapi-ts.config.ts" ] }, + "css": { + "parser": { + "tailwindDirectives": true + } + }, "linter": { "includes": ["!frontend/src/api.gen/**"], "enabled": true, @@ -58,7 +63,8 @@ "formatter": { "enabled": true, "indentStyle": "space", - "lineWidth": 150 + "lineWidth": 150, + "bracketSpacing": true }, "javascript": { "formatter": { diff --git a/compose.yaml b/compose.yaml index 603f325c0..8e134ca26 100644 --- a/compose.yaml +++ b/compose.yaml @@ -4,7 +4,7 @@ volumes: services: db: container_name: cella_db - image: postgres:latest + image: postgres:17 environment: POSTGRES_DB: postgres POSTGRES_USER: postgres diff --git a/frontend/package.json b/frontend/package.json index 2b44c11ed..a3abf817b 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -34,8 +34,8 @@ "@blocknote/core": "0.41.1", "@blocknote/react": "0.41.1", "@blocknote/shadcn": "0.41.1", - "@electric-sql/client": "1.0.14", - "@electric-sql/react": "1.0.14", + "@electric-sql/client": "1.1.1", + "@electric-sql/react": "1.0.16", "@floating-ui/dom": "^1.7.4", "@floating-ui/react": "^0.27.16", "@github/mini-throttle": "^2.1.1", @@ -67,33 +67,33 @@ "@radix-ui/react-toggle-group": "^1.1.11", "@radix-ui/react-tooltip": "^1.2.8", "@radix-ui/react-visually-hidden": "^1.2.3", - "@sentry/react": "^9.46.0", + "@sentry/react": "^10.22.0", "@t3-oss/env-core": "^0.13.8", "@tailwindcss/typography": "^0.5.19", - "@tanstack/query-sync-storage-persister": "^5.90.4", - "@tanstack/react-query": "^5.90.2", + "@tanstack/query-sync-storage-persister": "^5.90.7", + "@tanstack/react-query": "^5.90.5", "@tanstack/react-query-devtools": "^5.90.2", - "@tanstack/react-query-persist-client": "^5.90.4", - "@tanstack/react-router": "^1.132.47", - "@tanstack/react-router-devtools": "^1.132.51", + "@tanstack/react-query-persist-client": "^5.90.7", + "@tanstack/react-router": "^1.133.36", + "@tanstack/react-router-devtools": "^1.133.36", "@uppy/audio": "^3.0.1", - "@uppy/core": "^5.1.0", - "@uppy/dashboard": "^5.0.2", + "@uppy/core": "^5.1.1", + "@uppy/dashboard": "^5.0.3", "@uppy/drag-drop": "^5.0.2", "@uppy/file-input": "^4.2.2", - "@uppy/image-editor": "^4.0.1", + "@uppy/image-editor": "^4.0.2", "@uppy/progress-bar": "^4.3.2", - "@uppy/provider-views": "^5.1.0", - "@uppy/react": "^5.1.0", + "@uppy/provider-views": "5.1.1", + "@uppy/react": "5.1.0", "@uppy/remote-sources": "^3.0.1", "@uppy/screen-capture": "^5.0.1", - "@uppy/status-bar": "^5.0.1", - "@uppy/transloadit": "5.0.1", - "@uppy/tus": "^5.0.1", - "@uppy/url": "^5.0.1", - "@uppy/webcam": "^5.0.1", - "@vis.gl/react-google-maps": "^1.5.5", - "canvas-confetti": "^1.9.3", + "@uppy/status-bar": "^5.0.2", + "@uppy/transloadit": "5.2.0", + "@uppy/tus": "^5.0.2", + "@uppy/url": "^5.0.2", + "@uppy/webcam": "^5.0.2", + "@vis.gl/react-google-maps": "^1.6.1", + "canvas-confetti": "^1.9.4", "class-variance-authority": "^0.7.1", "clsx": "^2.1.1", "cmdk": "^1.1.1", @@ -108,7 +108,7 @@ "i18next-hmr": "^3.1.5", "i18next-http-backend": "^3.0.2", "idb-keyval": "^6.2.2", - "immer": "^10.1.3", + "immer": "^10.2.0", "input-otp": "^1.4.2", "jspdf": "^3.0.3", "jspdf-autotable": "^5.0.2", @@ -132,15 +132,15 @@ "react-pdf": "^9.2.1", "react-resizable-panels": "^3.0.6", "react-use-downloader": "^1.3.0", - "recharts": "^3.2.1", + "recharts": "^3.3.0", "slugify": "1.6.6", "sonner": "^2.0.7", "tailwind-merge": "^3.3.1", - "tailwindcss": "^4.1.14", + "tailwindcss": "^4.1.16", "tailwindcss-animate": "^1.0.7", "use-count-up": "^3.0.1", "vaul": "^1.1.2", - "virtua": "^0.45.2", + "virtua": "^0.46.4", "vitest": "^3.2.4", "workbox-window": "^7.3.0", "zod": "4.1.12", @@ -148,42 +148,42 @@ "zxcvbn": "^4.4.2" }, "devDependencies": { - "@chromatic-com/storybook": "^4.1.1", - "@hey-api/openapi-ts": "^0.85.1", + "@chromatic-com/storybook": "^4.1.2", + "@hey-api/openapi-ts": "^0.86.11", "@react-scan/vite-plugin-react-scan": "^0.1.8", "@rollup/plugin-terser": "^0.4.4", - "@sentry/vite-plugin": "^3.6.1", - "@storybook/addon-a11y": "^9.1.10", - "@storybook/addon-docs": "^9.1.10", - "@storybook/addon-vitest": "^9.1.10", - "@storybook/react-vite": "^9.1.10", - "@tailwindcss/vite": "^4.1.14", - "@tanstack/router-core": "^1.132.47", - "@tanstack/router-plugin": "^1.132.51", + "@sentry/vite-plugin": "^4.6.0", + "@storybook/addon-a11y": "^9.1.16", + "@storybook/addon-docs": "^9.1.16", + "@storybook/addon-vitest": "^9.1.16", + "@storybook/react-vite": "^9.1.16", + "@tailwindcss/vite": "^4.1.16", + "@tanstack/router-core": "^1.133.36", + "@tanstack/router-plugin": "^1.133.36", "@types/canvas-confetti": "^1.9.0", - "@types/node": "^24.7.2", + "@types/node": "^24.9.2", "@types/react": "^19.2.2", - "@types/react-dom": "^19.2.1", + "@types/react-dom": "^19.2.2", "@types/zxcvbn": "^4.4.5", "@typescript/native-preview": "7.0.0-dev.20250910.1", "@vitejs/plugin-basic-ssl": "^2.1.0", - "@vitejs/plugin-react": "^5.0.4", + "@vitejs/plugin-react": "^5.1.0", "@vitest/browser": "^3.2.4", "@vitest/coverage-v8": "^3.2.4", "babel-plugin-react-compiler": "19.1.0-rc.3", "cross-env": "^10.1.0", - "hono": "4.9.11", - "playwright": "^1.56.0", + "hono": "4.10.4", + "playwright": "^1.56.1", "postgres": "^3.4.7", "react-scan": "^0.4.3", - "rollup-plugin-visualizer": "^6.0.4", - "storybook": "^9.1.10", + "rollup-plugin-visualizer": "^6.0.5", + "storybook": "^9.1.16", "tsx": "^4.20.6", "typescript": "^5.9.3", - "vite": "^7.1.9", + "vite": "^7.1.12", "vite-plugin-html": "^3.2.2", - "vite-plugin-pwa": "^1.0.3", - "vite-plugin-static-copy": "^3.1.3", + "vite-plugin-pwa": "^1.1.0", + "vite-plugin-static-copy": "^3.1.4", "vite-tsconfig-paths": "^5.1.4", "wait-on": "^9.0.1", "workbox-build": "^7.3.0" diff --git a/frontend/src/api.gen/client/utils.gen.ts b/frontend/src/api.gen/client/utils.gen.ts index 71d8160ae..676d146cf 100644 --- a/frontend/src/api.gen/client/utils.gen.ts +++ b/frontend/src/api.gen/client/utils.gen.ts @@ -7,7 +7,7 @@ import { serializeArrayParam, serializeObjectParam, serializePrimitiveParam } fr import { getUrl } from '../core/utils.gen'; import type { Client, ClientOptions, Config, RequestOptions } from './types.gen'; -export const createQuerySerializer = ({ allowReserved, array, object }: QuerySerializerOptions = {}) => { +export const createQuerySerializer = ({ parameters = {}, ...args }: QuerySerializerOptions = {}) => { const querySerializer = (queryParams: T) => { const search: string[] = []; if (queryParams && typeof queryParams === 'object') { @@ -18,29 +18,31 @@ export const createQuerySerializer = ({ allowReserved, array, objec continue; } + const options = parameters[name] || args; + if (Array.isArray(value)) { const serializedArray = serializeArrayParam({ - allowReserved, + allowReserved: options.allowReserved, explode: true, name, style: 'form', value, - ...array, + ...options.array, }); if (serializedArray) search.push(serializedArray); } else if (typeof value === 'object') { const serializedObject = serializeObjectParam({ - allowReserved, + allowReserved: options.allowReserved, explode: true, name, style: 'deepObject', value: value as Record, - ...object, + ...options.object, }); if (serializedObject) search.push(serializedObject); } else { const serializedPrimitive = serializePrimitiveParam({ - allowReserved, + allowReserved: options.allowReserved, name, value: value as string, }); diff --git a/frontend/src/api.gen/core/bodySerializer.gen.ts b/frontend/src/api.gen/core/bodySerializer.gen.ts index 96aa3d988..81ffd512f 100644 --- a/frontend/src/api.gen/core/bodySerializer.gen.ts +++ b/frontend/src/api.gen/core/bodySerializer.gen.ts @@ -6,11 +6,19 @@ export type QuerySerializer = (query: Record) => string; export type BodySerializer = (body: any) => any; -export interface QuerySerializerOptions { +type QuerySerializerOptionsObject = { allowReserved?: boolean; - array?: SerializerOptions; - object?: SerializerOptions; -} + array?: Partial>; + object?: Partial>; +}; + +export type QuerySerializerOptions = QuerySerializerOptionsObject & { + /** + * Per-parameter serialization overrides. When provided, these settings + * override the global array/object settings for specific parameter names. + */ + parameters?: Record; +}; const serializeFormDataPair = (data: FormData, key: string, value: unknown): void => { if (typeof value === 'string' || value instanceof Blob) { diff --git a/frontend/src/api.gen/sdk.gen.ts b/frontend/src/api.gen/sdk.gen.ts index f6b4a970e..004b94e4b 100644 --- a/frontend/src/api.gen/sdk.gen.ts +++ b/frontend/src/api.gen/sdk.gen.ts @@ -226,6 +226,7 @@ export type Options(options: Options /** * Invoke token session + * * 🌐 Public access + * ⏳ token_token (10/h) * * Validates and invokes a token (for password reset, email verification, invitations, mfa) and redirects user to backend with a one-purpose, single-use token session in a cookie. * @@ -272,7 +275,9 @@ export const invokeToken = (options: Option /** * Get token data + * * 🌐 Public access + * ⏳ token_token (10/h) * * Get basic token data from single-use token session, It returns basic data if the session is still valid. * @@ -293,6 +298,7 @@ export const getTokenData = (options: Optio /** * Start impersonating + * * 🛡️ Requires authentication (system access) * * Allows a system admin to impersonate a specific user by ID, returning a temporary impersonation session. @@ -320,6 +326,7 @@ export const startImpersonation = (options: /** * Stop impersonating + * * 🛡️ Requires authentication * * Ends impersonation by clearing the current impersonation session and restoring the admin context. @@ -346,6 +353,7 @@ export const stopImpersonation = (options?: /** * Resend invitation + * * 🌐 Public access * ⏳ Spam (10/h) * @@ -370,6 +378,7 @@ export const resendInvitationWithToken = (o /** * Sign out + * * 🌐 Public access * * Signs out the *current user* and clears the active session. @@ -389,6 +398,7 @@ export const signOut = (options?: Options(options?: O /** * Delete TOTP + * * 🛡️ Requires authentication * * Delete TOTP credential for current user. @@ -441,6 +452,7 @@ export const deleteTotp = (options?: Option /** * Set TOTP + * * 🛡️ Requires authentication * * Confirms TOTP setup by verifying a code from the authenticator app for the first time. On success, TOTP is registered for current user. @@ -472,6 +484,7 @@ export const createTotp = (options: Options /** * Verify TOTP + * * 🌐 Public access * ⏳ Spam (10/h) * @@ -497,6 +510,7 @@ export const signInWithTotp = (options: Opt /** * Sign up with password + * * 🌐 Public access * ⏳ Spam (10/h), Email (5/h) * @@ -523,6 +537,7 @@ export const signUp = (options?: Options(options: Op /** * Request new password + * * 🌐 Public access * ⏳ Spam (10/h), Email (5/h) * @@ -575,6 +591,7 @@ export const requestPassword = (options: Op /** * Create password + * * 🌐 Public access * ⏳ token_password-reset (10/h) * @@ -601,6 +618,7 @@ export const createPassword = (options: Opt /** * Sign in with password + * * 🌐 Public access * ⏳ Password (5/h) * @@ -627,6 +645,7 @@ export const signIn = (options: Options(options: Opti /** * Delete passkey + * * 🛡️ Requires authentication * * Delete a passkey by id from the *current user*. @@ -687,6 +707,7 @@ export const deletePasskey = (options: Opti /** * Generate passkey challenge + * * 🌐 Public access * ⏳ Spam (10/h) * @@ -713,6 +734,7 @@ export const generatePasskeyChallenge = (op /** * Verify passkey + * * 🌐 Public access * ⏳ token_passkey (10/h) * @@ -743,6 +765,7 @@ export const signInWithPasskey = (options: /** * Authenticate with GitHub + * * 🌐 Public access * * Starts OAuth authentication with GitHub. Can be used for account connection, email verification, invitation process, defaults to authentication. @@ -764,6 +787,7 @@ export const github = (options?: Options(options?: Options(options?: Options /** * Callback for GitHub + * * 🌐 Public access * ⏳ token_github (10/h) * @@ -831,6 +857,7 @@ export const githubCallback = (options: Opt /** * Callback for Google + * * 🌐 Public access * ⏳ token_google (10/h) * @@ -853,6 +880,7 @@ export const googleCallback = (options: Opt /** * Callback for Microsoft + * * 🌐 Public access * ⏳ token_microsoft (10/h) * @@ -875,6 +903,7 @@ export const microsoftCallback = (options: /** * Delete self + * * 🛡️ Requires authentication * * Deletes the *current user*. This also removes the user's memberships (cascade) and sets references to the user to `null` where applicable. @@ -901,6 +930,7 @@ export const deleteMe = (options?: Options< /** * Get self + * * 🛡️ Requires authentication * * Returns the *current user*. @@ -927,6 +957,7 @@ export const getMe = (options?: Options(options: Options(options?: Options /** * Get auth data + * * 🛡️ Requires authentication * * Returns authentication related data of *current user*, including sessions, OAuth accounts, and sign in options. @@ -1024,6 +1057,7 @@ export const getMyAuth = (options?: Options /** * Get menu + * * 🛡️ Requires authentication * * Returns a structured list of context entities the *current user* is a member of, grouped by the entity type and enriched with both `memebrship` and `entity` data. @@ -1050,9 +1084,10 @@ export const getMyMenu = (options?: Options /** * Get list of invitations + * * 🛡️ Requires authentication * - * Returns a list of pending memberships with entity data - meaning activatedAt is still null. + * Returns a list of pending memberships with entity data. * * **GET /me/invitations** ·· [getMyInvitations](http://localhost:4000/docs#tag/me/get/me/invitations) ·· _me_ * @@ -1076,6 +1111,7 @@ export const getMyInvitations = (options?: /** * Terminate sessions + * * 🛡️ Requires authentication * * Ends one or more sessions for the *current user* based on provided session IDs. @@ -1107,6 +1143,7 @@ export const deleteMySessions = (options?: /** * Leave entity + * * 🛡️ Requires authentication * * Removes the *current user* from an entity they are a member of. @@ -1135,6 +1172,7 @@ export const deleteMyMembership = (options: /** * Get upload token + * * 🛡️ Requires authentication * * Generates and returns an upload token for uploading files or images to a private S3 bucket, scoped to the *current user* and organization @@ -1164,6 +1202,7 @@ export const getUploadToken = (options: Opt /** * Unsubscribe + * * 🌐 Public access * ⏳ token_unsubscribe (10/h) * @@ -1185,6 +1224,7 @@ export const unsubscribeMe = (options: Opti /** * Delete users + * * 🛡️ Requires authentication (system access) * * Deletes one or more *users* from the system based on a list of IDs. This also removes the user's memberships (cascade) and sets references to the user to `null` where applicable. @@ -1216,6 +1256,7 @@ export const deleteUsers = (options: Option /** * Get list of users + * * 🛡️ Requires authentication * * Returns a list of *users* at the system level. @@ -1251,6 +1292,7 @@ export const getUsers = (options?: Options< /** * Get user + * * 🛡️ Requires authentication * * Retrieves a *user* by ID or slug. @@ -1278,6 +1320,7 @@ export const getUser = (options: Options(options: Options /** * Delete organizations + * * 🛡️ Requires authentication * * Deletes one or more *organizations* by ID. @@ -1347,6 +1391,7 @@ export const deleteOrganizations = (options /** * Get list of organizations + * * 🛡️ Requires authentication (system access) * * Returns a list of *organizations* at the system level. @@ -1378,6 +1423,7 @@ export const getOrganizations = (options?: /** * Create organization + * * 🛡️ Requires authentication * * Creates a new *organization*. @@ -1410,6 +1456,7 @@ export const createOrganization = (options: /** * Get organization + * * 🛡️ Requires authentication * * Retrieves an *organization* by ID or slug. @@ -1437,6 +1484,7 @@ export const getOrganization = (options: Op /** * Update organization + * * 🛡️ Requires authentication * * Updates an *organization* by ID or slug. @@ -1485,6 +1533,7 @@ export const updateOrganization = (options: /** * Get list of context entities + * * 🛡️ Requires authentication * * Returns a paginated list of *context entities* (e.g. *users*, *organizations*) the current user has access to. @@ -1525,6 +1574,7 @@ export const getContextEntities = (options? /** * Get a context entity + * * 🛡️ Requires authentication * * Retrieve detailed information about a single context entity by its ID or slug. @@ -1554,6 +1604,7 @@ export const getContextEntity = (options: O /** * Check slug availability + * * 🛡️ Requires authentication * * Checks whether a given slug is available across all entity types (e.g. *organizations*, *users*). @@ -1587,6 +1638,7 @@ export const checkSlug = (options: Options< /** * Invite to system + * * 🛡️ Requires authentication (system access) * * Invites one or more users to the system via email. Can be used to onboard system level users or admins. @@ -1618,6 +1670,7 @@ export const systemInvite = (options: Optio /** * Get presigned URL + * * 🌐 Public access * * Generates and returns a presigned URL for uploading files to an S3 bucket. @@ -1639,6 +1692,7 @@ export const getPresignedUrl = (options: Op /** * Paddle webhook (WIP) + * * 🌐 Public access * ⏳ token_paddle (10/h) * @@ -1663,6 +1717,7 @@ export const paddleWebhook = (options?: Opt /** * Newsletter to members + * * 🛡️ Requires authentication (system access) * * Sends a newsletter to members of one or more specified organizations. @@ -1698,6 +1753,7 @@ export const sendNewsletter = (options: Opt /** * Delete requests + * * 🛡️ Requires authentication (system access) * * Deletes one or more *requests* from the system by their IDs. @@ -1729,6 +1785,7 @@ export const deleteRequests = (options: Opt /** * Get list of requests + * * 🛡️ Requires authentication (system access) * * Returns a list of submitted *requests* across all types: contact form, newsletter, and waitlist. @@ -1760,6 +1817,7 @@ export const getRequests = (options?: Optio /** * Create request + * * 🌐 Public access * ⏳ Email (5/h), Spam (10/h) * @@ -1787,6 +1845,7 @@ export const createRequest = (options: Opti /** * Get metrics + * * 🛡️ Requires authentication (system access) * * EXPERIMENTAL. Returns raw system observability data (e.g. node level statistics or runtime insights). @@ -1814,6 +1873,7 @@ export const getMetrics = (options?: Option /** * Get public counts + * * 🌐 Public access * * Returns basic count metrics for entity types such as `users` and `organizations`. @@ -1834,6 +1894,7 @@ export const getPublicCounts = (options?: O /** * Shape proxy + * * 🛡️ Requires authentication (org access) * * Proxies requests to ElectricSQL's shape endpoint for the `attachments` table. @@ -1869,6 +1930,7 @@ export const shapeProxy = (options: Options /** * Delete attachments + * * 🛡️ Requires authentication (org access) * * Deletes one or more *attachment* records by ID. This does not delete the underlying file in storage. @@ -1901,6 +1963,7 @@ export const deleteAttachments = (options: /** * Get list of attachments + * * 🛡️ Requires authentication (org access) * * Retrieves all *attachments* associated with a specific entity, such as an organization. @@ -1934,6 +1997,7 @@ export const getAttachments = (options: Opt /** * Create attachments + * * 🛡️ Requires authentication (org access) * * Registers one or more new *attachments* after client side upload. Includes metadata like name, type, and linked entity. @@ -1965,6 +2029,7 @@ export const createAttachment = (options: O /** * Get attachment + * * 🛡️ Requires authentication (org access) * * Fetches metadata and access details for a single *attachment* by ID. @@ -1993,6 +2058,7 @@ export const getAttachment = (options: Opti /** * Update attachment + * * 🛡️ Requires authentication (org access) * * Updates metadata of an *attachment*, such as its name or associated entity. @@ -2027,6 +2093,7 @@ export const updateAttachment = (options: O /** * Redirect to attachment + * * 🌐 Public access * ⏳ token_attachment_redirect (10/h) * @@ -2048,6 +2115,7 @@ export const redirectToAttachment = (option /** * Delete memberships + * * 🛡️ Requires authentication (org access) * * Deletes one or more *memberships* by ID. This removes the membership but does not delete the associated user(s). @@ -2082,6 +2150,7 @@ export const deleteMemberships = (options: /** * Create memberships + * * 🛡️ Requires authentication (org access) * * Creates one or more *memberships*, inviting users (existing or new) to a context entity such as an organization. @@ -2117,6 +2186,7 @@ export const membershipInvite = (options: O /** * Update membership + * * 🛡️ Requires authentication (org access) * * Updates the *membership* metadata, such as role, `muted`, or `archived` status. @@ -2153,6 +2223,7 @@ export const updateMembership = (options: O /** * Respond to membership invitation + * * 🛡️ Requires authentication * * Accepting activates the associated membership. Rejecting simply removes the invitation token. @@ -2162,6 +2233,7 @@ export const updateMembership = (options: O * @param {handleMembershipInvitationData} options * @param {string} options.path.id - `string` * @param {enum} options.path.acceptorreject - `enum` + * @param {string | string} options.path.orgidorslug - `string | string` * @returns Possible status codes: 200, 400, 401, 403, 404, 429 */ export const handleMembershipInvitation = (options: Options) => { @@ -2181,6 +2253,7 @@ export const handleMembershipInvitation = ( /** * Get list of members + * * 🛡️ Requires authentication (org access) * * Retrieves members (users) of a context entity by ID or slug, including their associated *membership* data. @@ -2188,7 +2261,7 @@ export const handleMembershipInvitation = ( * **GET /{orgIdOrSlug}/memberships/members** ·· [getMembers](http://localhost:4000/docs#tag/memberships/get/{orgIdOrSlug}/memberships/members) ·· _memberships_ * * @param {getMembersData} options - * @param {string | string=} options.path.orgidorslug - `string | string` (optional) + * @param {string | string} options.path.orgidorslug - `string | string` * @param {string=} options.query.q - `string` (optional) * @param {enum=} options.query.sort - `enum` (optional) * @param {enum=} options.query.order - `enum` (optional) @@ -2216,6 +2289,7 @@ export const getMembers = (options: Options /** * Get list of pending memberships + * * 🛡️ Requires authentication (org access) * * Returns pending memberships for a context entity, identified by ID or slug. This does not include pending invitations for non-existing users. diff --git a/frontend/src/api.gen/types.gen.ts b/frontend/src/api.gen/types.gen.ts index a812e5057..af0574044 100644 --- a/frontend/src/api.gen/types.gen.ts +++ b/frontend/src/api.gen/types.gen.ts @@ -4,7 +4,7 @@ export type ClientOptions = { baseUrl: 'http://localhost:4000' | (string & {}); }; -export type UserBaseSchema = { +export type UserBase = { id: string; slug: string; name: string; @@ -14,7 +14,7 @@ export type UserBaseSchema = { entityType: 'user'; }; -export type ContextEntityBaseSchema = { +export type ContextEntityBase = { id: string; entityType: 'organization'; slug: string; @@ -23,12 +23,11 @@ export type ContextEntityBaseSchema = { bannerUrl?: string | null; }; -export type MembershipBaseSchema = { +export type MembershipBase = { id: string; contextType: 'organization'; userId: string; role: 'member' | 'admin'; - activatedAt: string | null; archived: boolean; muted: boolean; order: number; @@ -91,7 +90,6 @@ export type Organization = { contextType: 'organization'; userId: string; role: 'member' | 'admin'; - activatedAt: string | null; archived: boolean; muted: boolean; order: number; @@ -116,8 +114,7 @@ export type Membership = { contextType: 'organization'; userId: string; role: 'member' | 'admin'; - activatedAt: string | null; - createdBy: string | null; + createdBy: string; modifiedAt: string | null; modifiedBy: string | null; archived: boolean; @@ -126,6 +123,17 @@ export type Membership = { organizationId: string; }; +export type InactiveMembership = { + createdAt: string; + id: string; + contextType: 'organization'; + userId: string | null; + role: 'member' | 'admin'; + rejectedAt: string | null; + createdBy: string; + organizationId: string; +}; + export type Attachment = { createdAt: string; id: string; @@ -147,7 +155,7 @@ export type Attachment = { convertedUrl: string | null; }; -export type MenuSchema = { +export type Menu = { organization: Array<{ id: string; entityType: 'organization'; @@ -155,11 +163,11 @@ export type MenuSchema = { name: string; thumbnailUrl?: string | null; bannerUrl?: string | null; - membership: MembershipBaseSchema; + membership: MembershipBase; createdAt: string; submenu?: Array< - ContextEntityBaseSchema & { - membership: MembershipBaseSchema; + ContextEntityBase & { + membership: MembershipBase; createdAt: string; } >; @@ -221,22 +229,6 @@ export type ApiError = { organizationId?: string; }; -export type MembershipSchema = { - createdAt: string; - id: string; - contextType: 'organization'; - userId: string; - role: 'member' | 'admin'; - activatedAt: string | null; - createdBy: string | null; - modifiedAt: string | null; - modifiedBy: string | null; - archived: boolean; - muted: boolean; - order: number; - organizationId: string; -}; - export type CheckEmailData = { body: { email: string; @@ -386,9 +378,8 @@ export type GetTokenDataResponses = { */ 200: { email: string; - role: 'member' | 'admin' | null; userId?: string; - organizationId?: string; + inactiveMembershipId?: string; }; }; @@ -1949,7 +1940,7 @@ export type GetMyMenuResponses = { /** * Menu of user */ - 200: MenuSchema; + 200: Menu; }; export type GetMyMenuResponse = GetMyMenuResponses[keyof GetMyMenuResponses]; @@ -2002,12 +1993,12 @@ export type GetMyInvitationsResponses = { */ 200: { items: Array<{ - entity: ContextEntityBaseSchema; - membership: MembershipBaseSchema & + entity: ContextEntityBase; + inactiveMembership: InactiveMembership & ({ [key: string]: unknown; } | null); - createdByUser: UserBaseSchema & + createdByUser: UserBase & ({ [key: string]: unknown; } | null); @@ -2359,7 +2350,7 @@ export type GetUsersResponses = { 200: { items: Array< User & { - memberships: Array; + memberships: Array; } >; total: number; @@ -2653,7 +2644,6 @@ export type CreateOrganizationResponses = { contextType: 'organization'; userId: string; role: 'member' | 'admin'; - activatedAt: string | null; archived: boolean; muted: boolean; order: number; @@ -2848,13 +2838,12 @@ export type GetContextEntitiesResponses = { */ 200: { items: Array< - ContextEntityBaseSchema & { + ContextEntityBase & { membership: { id: string; contextType: 'organization'; userId: string; role: 'member' | 'admin'; - activatedAt: string | null; archived: boolean; muted: boolean; order: number; @@ -2925,7 +2914,7 @@ export type GetContextEntityResponses = { /** * Context entities */ - 200: ContextEntityBaseSchema; + 200: ContextEntityBase; }; export type GetContextEntityResponse = GetContextEntityResponses[keyof GetContextEntityResponses]; @@ -4080,7 +4069,7 @@ export type UpdateMembershipResponses = { /** * Membership updated */ - 200: MembershipSchema; + 200: Membership; }; export type UpdateMembershipResponse = UpdateMembershipResponses[keyof UpdateMembershipResponses]; @@ -4090,6 +4079,7 @@ export type HandleMembershipInvitationData = { path: { id: string; acceptOrReject: 'accept' | 'reject'; + orgIdOrSlug: string; }; query?: never; url: '/{orgIdOrSlug}/memberships/{id}/{acceptOrReject}'; @@ -4134,15 +4124,15 @@ export type HandleMembershipInvitationResponses = { /** * Invitation was accepted */ - 200: ContextEntityBaseSchema; + 200: ContextEntityBase; }; export type HandleMembershipInvitationResponse = HandleMembershipInvitationResponses[keyof HandleMembershipInvitationResponses]; export type GetMembersData = { body?: never; - path?: { - orgIdOrSlug?: string; + path: { + orgIdOrSlug: string; }; query: { q?: string; @@ -4217,7 +4207,7 @@ export type GetMembersResponses = { lastStartedAt: string | null; lastSignInAt: string | null; modifiedBy: string | null; - membership: MembershipBaseSchema; + membership: MembershipBase; }>; total: number; }; @@ -4283,8 +4273,7 @@ export type GetPendingMembershipsResponses = { */ 200: { items: Array<{ - membershipId: string | null; - tokenId: string | null; + id: string; email: string; thumbnailUrl?: string | null; role: 'member' | 'admin'; diff --git a/frontend/src/api.gen/zod.gen.ts b/frontend/src/api.gen/zod.gen.ts index 8c2dc0136..5d5e6e5f2 100644 --- a/frontend/src/api.gen/zod.gen.ts +++ b/frontend/src/api.gen/zod.gen.ts @@ -2,7 +2,7 @@ import { z } from 'zod'; -export const zUserBaseSchema = z.object({ +export const zUserBase = z.object({ id: z.string(), slug: z.string(), name: z.string(), @@ -12,7 +12,7 @@ export const zUserBaseSchema = z.object({ entityType: z.enum(['user']), }); -export const zContextEntityBaseSchema = z.object({ +export const zContextEntityBase = z.object({ id: z.string(), entityType: z.enum(['organization']), slug: z.string(), @@ -21,12 +21,11 @@ export const zContextEntityBaseSchema = z.object({ bannerUrl: z.optional(z.union([z.string(), z.null()])), }); -export const zMembershipBaseSchema = z.object({ +export const zMembershipBase = z.object({ id: z.string(), contextType: z.enum(['organization']), userId: z.string(), role: z.enum(['member', 'admin']), - activatedAt: z.union([z.string(), z.null()]), archived: z.boolean(), muted: z.boolean(), order: z.number().gte(-140737488355328).lte(140737488355327), @@ -90,7 +89,6 @@ export const zOrganization = z.object({ contextType: z.enum(['organization']), userId: z.string(), role: z.enum(['member', 'admin']), - activatedAt: z.union([z.string(), z.null()]), archived: z.boolean(), muted: z.boolean(), order: z.number().gte(-140737488355328).lte(140737488355327), @@ -117,8 +115,7 @@ export const zMembership = z.object({ contextType: z.enum(['organization']), userId: z.string(), role: z.enum(['member', 'admin']), - activatedAt: z.union([z.string(), z.null()]), - createdBy: z.union([z.string(), z.null()]), + createdBy: z.string(), modifiedAt: z.union([z.string(), z.null()]), modifiedBy: z.union([z.string(), z.null()]), archived: z.boolean(), @@ -127,6 +124,17 @@ export const zMembership = z.object({ organizationId: z.string(), }); +export const zInactiveMembership = z.object({ + createdAt: z.string(), + id: z.string(), + contextType: z.enum(['organization']), + userId: z.union([z.string(), z.null()]), + role: z.enum(['member', 'admin']), + rejectedAt: z.union([z.string(), z.null()]), + createdBy: z.string(), + organizationId: z.string(), +}); + export const zAttachment = z.object({ createdAt: z.string(), id: z.string(), @@ -148,7 +156,7 @@ export const zAttachment = z.object({ convertedUrl: z.union([z.string(), z.null()]), }); -export const zMenuSchema = z.object({ +export const zMenu = z.object({ organization: z.array( z.object({ id: z.string(), @@ -157,13 +165,13 @@ export const zMenuSchema = z.object({ name: z.string(), thumbnailUrl: z.optional(z.union([z.string(), z.null()])), bannerUrl: z.optional(z.union([z.string(), z.null()])), - membership: zMembershipBaseSchema, + membership: zMembershipBase, createdAt: z.string(), submenu: z.optional( z.array( - zContextEntityBaseSchema.and( + zContextEntityBase.and( z.object({ - membership: zMembershipBaseSchema, + membership: zMembershipBase, createdAt: z.string(), }), ), @@ -229,22 +237,6 @@ export const zApiError = z.object({ organizationId: z.optional(z.string()), }); -export const zMembershipSchema = z.object({ - createdAt: z.string(), - id: z.string(), - contextType: z.enum(['organization']), - userId: z.string(), - role: z.enum(['member', 'admin']), - activatedAt: z.union([z.string(), z.null()]), - createdBy: z.union([z.string(), z.null()]), - modifiedAt: z.union([z.string(), z.null()]), - modifiedBy: z.union([z.string(), z.null()]), - archived: z.boolean(), - muted: z.boolean(), - order: z.number().gte(-140737488355328).lte(140737488355327), - organizationId: z.string(), -}); - export const zCheckEmailData = z.object({ body: z.object({ email: z.email(), @@ -281,9 +273,8 @@ export const zGetTokenDataData = z.object({ */ export const zGetTokenDataResponse = z.object({ email: z.email(), - role: z.union([z.enum(['member', 'admin']), z.null()]), userId: z.optional(z.string()), - organizationId: z.optional(z.string()), + inactiveMembershipId: z.optional(z.string()), }); export const zStartImpersonationData = z.object({ @@ -721,7 +712,7 @@ export const zGetMyMenuData = z.object({ /** * Menu of user */ -export const zGetMyMenuResponse = zMenuSchema; +export const zGetMyMenuResponse = zMenu; export const zGetMyInvitationsData = z.object({ body: z.optional(z.never()), @@ -735,9 +726,9 @@ export const zGetMyInvitationsData = z.object({ export const zGetMyInvitationsResponse = z.object({ items: z.array( z.object({ - entity: zContextEntityBaseSchema, - membership: zMembershipBaseSchema.and(z.union([z.record(z.string(), z.unknown()), z.null()])), - createdByUser: zUserBaseSchema.and(z.union([z.record(z.string(), z.unknown()), z.null()])), + entity: zContextEntityBase, + inactiveMembership: zInactiveMembership.and(z.union([z.record(z.string(), z.unknown()), z.null()])), + createdByUser: zUserBase.and(z.union([z.record(z.string(), z.unknown()), z.null()])), }), ), total: z.number(), @@ -850,7 +841,7 @@ export const zGetUsersResponse = z.object({ items: z.array( zUser.and( z.object({ - memberships: z.array(zMembershipBaseSchema), + memberships: z.array(zMembershipBase), }), ), ), @@ -951,7 +942,6 @@ export const zCreateOrganizationResponse = zOrganization.and( contextType: z.enum(['organization']), userId: z.string(), role: z.enum(['member', 'admin']), - activatedAt: z.union([z.string(), z.null()]), archived: z.boolean(), muted: z.boolean(), order: z.number().gte(-140737488355328).lte(140737488355327), @@ -1032,7 +1022,7 @@ export const zGetContextEntitiesData = z.object({ */ export const zGetContextEntitiesResponse = z.object({ items: z.array( - zContextEntityBaseSchema.and( + zContextEntityBase.and( z.object({ membership: z.union([ z.object({ @@ -1040,7 +1030,6 @@ export const zGetContextEntitiesResponse = z.object({ contextType: z.enum(['organization']), userId: z.string(), role: z.enum(['member', 'admin']), - activatedAt: z.union([z.string(), z.null()]), archived: z.boolean(), muted: z.boolean(), order: z.number().gte(-140737488355328).lte(140737488355327), @@ -1074,7 +1063,7 @@ export const zGetContextEntityData = z.object({ /** * Context entities */ -export const zGetContextEntityResponse = zContextEntityBaseSchema; +export const zGetContextEntityResponse = zContextEntityBase; export const zCheckSlugData = z.object({ body: z.object({ @@ -1440,13 +1429,14 @@ export const zUpdateMembershipData = z.object({ /** * Membership updated */ -export const zUpdateMembershipResponse = zMembershipSchema; +export const zUpdateMembershipResponse = zMembership; export const zHandleMembershipInvitationData = z.object({ body: z.optional(z.never()), path: z.object({ id: z.string(), acceptOrReject: z.enum(['accept', 'reject']), + orgIdOrSlug: z.string(), }), query: z.optional(z.never()), }); @@ -1454,15 +1444,13 @@ export const zHandleMembershipInvitationData = z.object({ /** * Invitation was accepted */ -export const zHandleMembershipInvitationResponse = zContextEntityBaseSchema; +export const zHandleMembershipInvitationResponse = zContextEntityBase; export const zGetMembersData = z.object({ body: z.optional(z.never()), - path: z.optional( - z.object({ - orgIdOrSlug: z.optional(z.string()), - }), - ), + path: z.object({ + orgIdOrSlug: z.string(), + }), query: z.object({ q: z.optional(z.string()), sort: z.optional(z.enum(['id', 'name', 'email', 'role', 'createdAt', 'lastSeenAt'])), @@ -1500,7 +1488,7 @@ export const zGetMembersResponse = z.object({ lastStartedAt: z.union([z.string(), z.null()]), lastSignInAt: z.union([z.string(), z.null()]), modifiedBy: z.union([z.string(), z.null()]), - membership: zMembershipBaseSchema, + membership: zMembershipBase, }), ), total: z.number(), @@ -1528,8 +1516,7 @@ export const zGetPendingMembershipsData = z.object({ export const zGetPendingMembershipsResponse = z.object({ items: z.array( z.object({ - membershipId: z.union([z.string(), z.null()]), - tokenId: z.union([z.string(), z.null()]), + id: z.string(), email: z.email(), thumbnailUrl: z.optional(z.union([z.string(), z.null()])), role: z.enum(['member', 'admin']), diff --git a/frontend/src/menu-config.tsx b/frontend/src/menu-config.tsx index e2effba58..9aa442baf 100644 --- a/frontend/src/menu-config.tsx +++ b/frontend/src/menu-config.tsx @@ -15,7 +15,7 @@ import CreateOrganizationForm from '~/modules/organizations/create-organization- const createOrganizationAction = (triggerRef: RefObject) => { const callback = (args: CallbackArgs) => { useDialoger.getState().remove('create-organization'); - if (args.status === 'success') router.navigate({ to: '/organizations/$idOrSlug/members', params: { idOrSlug: args.data.slug } }); + if (args.status === 'success') router.navigate({ to: '/organization/$idOrSlug/members', params: { idOrSlug: args.data.slug } }); }; return useDialoger.getState().create(, { diff --git a/frontend/src/modules/attachments/hooks/use-attachment-url.tsx b/frontend/src/modules/attachments/hooks/use-attachment-url.tsx index 4bca8509c..c129a5cec 100644 --- a/frontend/src/modules/attachments/hooks/use-attachment-url.tsx +++ b/frontend/src/modules/attachments/hooks/use-attachment-url.tsx @@ -49,13 +49,16 @@ export const useAttachmentUrl = (id: string, baseUrl: string, type: string) => { const fetchLocal = async () => { try { const file = await LocalFileStorage.getFile(id); - if (!file) { + if (!file || !file.data) { setError(i18n.t('error:local_file_not_found')); setUrl(null); // Make sure URL is null if file not found return; } if (isMounted.current) { + if (!(file.data instanceof Blob) && !(file.data instanceof File)) { + throw Error('Invalid file data: expected Blob or File'); + } const blob = new Blob([file.data], { type: type || 'application/octet-stream' }); const objectUrl = URL.createObjectURL(blob); useBlobStore.getState().setBlobUrl(id, objectUrl); diff --git a/frontend/src/modules/attachments/hooks/use-local-sync-attachments.tsx b/frontend/src/modules/attachments/hooks/use-local-sync-attachments.tsx index 56b55d1f5..f2bae5d70 100644 --- a/frontend/src/modules/attachments/hooks/use-local-sync-attachments.tsx +++ b/frontend/src/modules/attachments/hooks/use-local-sync-attachments.tsx @@ -8,7 +8,7 @@ import type { AttachmentToInsert } from '~/modules/attachments/types'; import { createBaseTransloaditUppy } from '~/modules/common/uploader/helpers'; import type { UploadedUppyFile } from '~/modules/common/uploader/types'; -// TODO(improvement) make uploaded attachment naming right, if it was changed during offline update it on upload +// TODO(DAVID)(improvement) make uploaded attachment naming right, if it was changed during offline update it on upload export const useLocalSyncAttachments = (organizationId: string) => { const { isOnline } = useOnlineManager(); const { mutate: createAttachments } = useAttachmentCreateMutation(); @@ -82,7 +82,11 @@ export const useLocalSyncAttachments = (organizationId: string) => { isSyncingRef.current = false; }); - for (const file of files) localUppy.addFile({ ...file, name: file.name || `${file.type}-${file.id}` }); + for (const file of files) { + // TODO(DAVID) all types around file/custom uppy file look a bit confusing. can we do something about it? Ensure `data` is non-null to satisfy Uppy types: fall back to a size-only object when missing. + const data = file.data ?? { size: file.size ?? null }; + localUppy.addFile({ ...file, name: file.name || `${file.type}-${file.id}`, data }); + } await localUppy.upload(); } catch (err) { diff --git a/frontend/src/modules/attachments/hooks/use-merge-local-attachments.ts b/frontend/src/modules/attachments/hooks/use-merge-local-attachments.ts index afcebd677..e4bfaf326 100644 --- a/frontend/src/modules/attachments/hooks/use-merge-local-attachments.ts +++ b/frontend/src/modules/attachments/hooks/use-merge-local-attachments.ts @@ -27,10 +27,10 @@ export const useMergeLocalAttachments = (organizationId: string, { q, sort, orde const groupId = files.length > 1 ? nanoid() : null; - // TODO(IMPROVE)local file info(add createdAt/By, groupId into the file?) + // TODO(DAVID)(IMPROVE)local file info(add createdAt/By, groupId into the file?) const localAttachments: Attachment[] = files.map(({ size, preview, id, type, data, name, meta }) => ({ id, - size: String(size || data.size), + size: String(size || data?.size || 0), url: preview || '', thumbnailUrl: null, convertedUrl: null, diff --git a/frontend/src/modules/attachments/query-mutations.ts b/frontend/src/modules/attachments/query-mutations.ts index 9cdf8d5b1..1f7cafdd1 100644 --- a/frontend/src/modules/attachments/query-mutations.ts +++ b/frontend/src/modules/attachments/query-mutations.ts @@ -166,7 +166,7 @@ export const useAttachmentUpdateMutation = () => // TODO(IMPROVE)offline update responce(add createdAt/By, groupId into the file?) const localAttachment: Attachment = { id: file.id, - size: String(file.data.size ?? 0), + size: String(file.data?.size ?? 0), url: file.preview || '', thumbnailUrl: null, convertedUrl: null, diff --git a/frontend/src/modules/auth/auth-error-page.tsx b/frontend/src/modules/auth/auth-error-page.tsx index 212c818cc..5d186b474 100644 --- a/frontend/src/modules/auth/auth-error-page.tsx +++ b/frontend/src/modules/auth/auth-error-page.tsx @@ -17,7 +17,7 @@ const AuthErrorPage = () => { const { email, error } = useAuthStore(); // Show a resend invitation button if necessary - const showResendButton = error?.type === 'invite_takes_priority' || errorType === 'invitation_expired'; + const showResendButton = errorType === 'invitation_expired'; const resendData = tokenId ? { tokenId } : email ? { email } : false; return ( diff --git a/frontend/src/modules/auth/authenticate-page.tsx b/frontend/src/modules/auth/authenticate-page.tsx index 0bf39cf6a..79ff889a7 100644 --- a/frontend/src/modules/auth/authenticate-page.tsx +++ b/frontend/src/modules/auth/authenticate-page.tsx @@ -50,7 +50,7 @@ const AuthenticatePage = () => { if (lastUser?.email && !tokenId) return setStep('signIn', lastUser.email); if (!tokenData?.email) return; - setStep(tokenData.userId ? 'signIn' : 'signUp', tokenData.email); + setStep('signUp', tokenData.email); }, [tokenData, lastUser]); // Loading invitation token diff --git a/frontend/src/modules/auth/steps/check-email.tsx b/frontend/src/modules/auth/steps/check-email.tsx index 4fd646ed3..29c5cbdbb 100644 --- a/frontend/src/modules/auth/steps/check-email.tsx +++ b/frontend/src/modules/auth/steps/check-email.tsx @@ -1,6 +1,5 @@ import { zodResolver } from '@hookform/resolvers/zod'; import { useMutation } from '@tanstack/react-query'; -import { useNavigate } from '@tanstack/react-router'; import { appConfig } from 'config'; import { ArrowRightIcon } from 'lucide-react'; import { useForm } from 'react-hook-form'; @@ -29,9 +28,8 @@ type FormValues = z.infer; */ export const CheckEmailStep = () => { const { t } = useTranslation(); - const navigate = useNavigate(); - const { setStep, setError } = useAuthStore(); + const { setStep } = useAuthStore(); const isMobile = window.innerWidth < 640; const title = appConfig.has.registrationEnabled ? t('common:sign_in_or_up') : t('common:sign_in'); @@ -47,11 +45,6 @@ export const CheckEmailStep = () => { onError: (error: ApiError) => { let nextStep: AuthStep = 'inviteOnly'; - // If there is an unclaimed invitation token, redirect to auth error page - if (error.type === 'invite_takes_priority') { - setError(error); - navigate({ to: '/auth/error' }); - } // If registration is enabled or user has a token, proceed to sign up if (appConfig.has.registrationEnabled) nextStep = 'signUp'; // If registration is disabled and user has no token, proceed to waitlist diff --git a/frontend/src/modules/auth/steps/sign-in.tsx b/frontend/src/modules/auth/steps/sign-in.tsx index d394c8431..60f497beb 100644 --- a/frontend/src/modules/auth/steps/sign-in.tsx +++ b/frontend/src/modules/auth/steps/sign-in.tsx @@ -51,18 +51,14 @@ export const SignInStep = () => { mutationFn: (body) => signIn({ body }), onSuccess: ({ redirectPath: apiRedirectPath }) => { if (apiRedirectPath) { - // TODO refactor conditional like this + // TODO(DAVID) refactor conditional like this, not very safe to use path matching, is there a better way? if (apiRedirectPath === '/auth/mfa') setLastUser({ email, mfaRequired: true }); navigate({ to: apiRedirectPath, replace: true }); return; } - // Go to invitation if token is provided, otherwise use provided redirect or default path - const redirectPath = tokenId - ? `/home?invitationTokenId=${tokenId}&skipWelcome=true` - : redirect?.startsWith('/') - ? redirect - : appConfig.defaultRedirectPath; + // Go to pending invitation in home if token is provided, otherwise use provided redirect or default path + const redirectPath = tokenId ? `/home?skipWelcome=true` : redirect?.startsWith('/') ? redirect : appConfig.defaultRedirectPath; navigate({ to: redirectPath, @@ -142,7 +138,7 @@ export const SignInStep = () => { {t('common:sign_in')} - {/* TODO: add callback to reset auth steps forgot email is different from current email state */} + {/* TODO(DAVID): add callback to reset auth steps if forgot email is different from current email state */} - )} + diff --git a/frontend/src/modules/common/data-table/index.tsx b/frontend/src/modules/common/data-table/index.tsx index c88d9348f..97bbff9b9 100644 --- a/frontend/src/modules/common/data-table/index.tsx +++ b/frontend/src/modules/common/data-table/index.tsx @@ -3,7 +3,7 @@ import { type Key, type ReactNode, useRef } from 'react'; import { type CellMouseArgs, type CellMouseEvent, DataGrid, type RenderRowProps, type RowsChangeData, type SortColumn } from 'react-data-grid'; import 'react-data-grid/lib/styles.css'; import { useBreakpoints } from '~/hooks/use-breakpoints'; -import { InfiniteLoader } from '~/modules/common/data-table/infinine-loader'; +import { InfiniteLoader } from '~/modules/common/data-table/infinite-loader'; import { NoRows } from '~/modules/common/data-table/no-rows'; import '~/modules/common/data-table/style.css'; import { DataTableSkeleton } from '~/modules/common/data-table/table-skeleton'; @@ -76,7 +76,7 @@ export const DataTable = ({ ) : !rows.length ? ( ) : ( -
+
{isFetching && hasNextPage && } - {!isFetching && !hasNextPage && } + {fetchMore && !isFetching && !hasNextPage && } ); }; diff --git a/frontend/src/modules/common/data-table/style.css b/frontend/src/modules/common/data-table/style.css index 2f85411f5..441e294de 100644 --- a/frontend/src/modules/common/data-table/style.css +++ b/frontend/src/modules/common/data-table/style.css @@ -19,6 +19,15 @@ grid-template-rows: none !important; } +.rdg-readonly .grid.rdg-wrapper > .rdg { + --rdg-background-color: none; + --rdg-header-background-color: none; + --rdg-header-draggable-background-color: none; + --rdg-row-hover-background-color: none; + --rdg-row-selected-background-color: none; + --rdg-row-selected-hover-background-color: none; +} + @media (max-width: 480px) { .rdg-cell[aria-selected="true"] { outline: none !important; @@ -66,3 +75,8 @@ right: 0.5rem; } } + +.rdg-readonly .rdg-cell[aria-selected="true"] { + outline: none !important; + background: none !important; +} diff --git a/frontend/src/modules/common/dropdowner/dropdown-action-item.tsx b/frontend/src/modules/common/dropdowner/dropdown-action-item.tsx index ca7417aac..63ec50c06 100644 --- a/frontend/src/modules/common/dropdowner/dropdown-action-item.tsx +++ b/frontend/src/modules/common/dropdowner/dropdown-action-item.tsx @@ -1,6 +1,6 @@ import type { LucideIcon } from 'lucide-react'; import type { ReactNode } from 'react'; -import { Button } from '~/modules/ui/button'; +import { Button, ButtonProps } from '~/modules/ui/button'; import { DropdownMenuItem } from '~/modules/ui/dropdown-menu'; interface Props { @@ -8,10 +8,11 @@ interface Props { onSelect?: () => void; icon?: LucideIcon; children: ReactNode; - className?: string; + variant?: ButtonProps['variant']; + className?: ButtonProps['className']; } -export function DropdownActionItem({ isMobile, onSelect, icon: Icon, children, className }: Props) { +export function DropdownActionItem({ isMobile, onSelect, icon: Icon, children, variant = 'secondary', className }: Props) { const sharedProps = { onClick: onSelect, onSelect, @@ -20,9 +21,8 @@ export function DropdownActionItem({ isMobile, onSelect, icon: Icon, children, c if (isMobile) { return ( - // TODO can we make variant configurable from outside?
- diff --git a/frontend/src/modules/common/form-fields/avatar.tsx b/frontend/src/modules/common/form-fields/avatar.tsx index 3a751a88f..0865995bf 100644 --- a/frontend/src/modules/common/form-fields/avatar.tsx +++ b/frontend/src/modules/common/form-fields/avatar.tsx @@ -63,7 +63,7 @@ const AvatarFormField = ({ form, label, name, entity, type }: Props) => { {label}
- +
{appConfig.has.uploadEnabled ? ( diff --git a/frontend/src/modules/common/form-fields/select-emails.tsx b/frontend/src/modules/common/form-fields/select-emails.tsx index 018b98d7b..6869e84be 100644 --- a/frontend/src/modules/common/form-fields/select-emails.tsx +++ b/frontend/src/modules/common/form-fields/select-emails.tsx @@ -39,7 +39,7 @@ export interface SelectEmailsProps { allowDuplicate?: boolean; } -// TODO replace some of this with TagInput? +// TODO(FLIP) replace some of this with TagInput? export const SelectEmails = (props: SelectEmailsProps) => { const { id, diff --git a/frontend/src/modules/common/form-fields/slug.tsx b/frontend/src/modules/common/form-fields/slug.tsx index 2a59b650a..2dc8d409e 100644 --- a/frontend/src/modules/common/form-fields/slug.tsx +++ b/frontend/src/modules/common/form-fields/slug.tsx @@ -37,7 +37,7 @@ export const SlugFormField = ({ const [isDeviating, setDeviating] = useState(false); const [isSlugAvailable, setSlugAvailable] = useState<'available' | 'blank' | 'notAvailable'>('blank'); - const prefix = `${appConfig.frontendUrl.replace(/^https?:\/\//, '')}/${entityType === 'organization' ? '' : `${entityType}s/`}`; + const prefix = `${appConfig.frontendUrl.replace(/^https?:\/\//, '')}/${entityType}/`; const inputClassName = `${isSlugAvailable !== 'blank' && 'ring-2 sm:focus-visible:ring-2'} ${isSlugAvailable === 'available' && 'ring-green-500 focus-visible:ring-green-500'} diff --git a/frontend/src/modules/common/page/header.tsx b/frontend/src/modules/common/page/header.tsx index 0d16a8df1..a25c606a8 100644 --- a/frontend/src/modules/common/page/header.tsx +++ b/frontend/src/modules/common/page/header.tsx @@ -3,7 +3,7 @@ import { appConfig, ContextEntityType } from 'config'; import { ChevronRightIcon, HomeIcon } from 'lucide-react'; import { useRef } from 'react'; import { useTranslation } from 'react-i18next'; -import type { UserBaseSchema } from '~/api.gen'; +import type { UserBase } from '~/api.gen'; import useScrollTo from '~/hooks/use-scroll-to'; import { AvatarWrap } from '~/modules/common/avatar-wrap'; import { PageCover, type PageCoverProps } from '~/modules/common/page/cover'; @@ -14,7 +14,7 @@ import { Breadcrumb, BreadcrumbItem, BreadcrumbLink, BreadcrumbList, BreadcrumbS import { baseEntityRoutes } from '~/routes-config'; type PageHeaderProps = Omit & { - entity: EntityPage | UserBaseSchema; + entity: EntityPage | UserBase; panel?: React.ReactNode; parent?: { idOrSlug: string; entityType: ContextEntityType | 'user' }; disableScroll?: boolean; diff --git a/frontend/src/modules/common/uploader/helpers/prepare-for-offline.ts b/frontend/src/modules/common/uploader/helpers/prepare-for-offline.ts index 583a6ddcc..02a1354e2 100644 --- a/frontend/src/modules/common/uploader/helpers/prepare-for-offline.ts +++ b/frontend/src/modules/common/uploader/helpers/prepare-for-offline.ts @@ -10,7 +10,7 @@ import type { UploadTokenQuery } from '~/modules/me/types'; * @param files - Fle object containing metadata and upload details. * @returns An array of files that were successfully prepared for offline storage. */ -export const prepareFilesForOffline = async (files: Record, tokenQuery: UploadTokenQuery) => { +export const prepareFilesForOffline = async (files: Record, tokenQuery: UploadTokenQuery): Promise => { console.warn('Files will be stored offline in indexedDB.'); const template = uploadTemplates.attachment; @@ -52,7 +52,7 @@ export const prepareFilesForOffline = async (files: Record { return (
-
+
-
-
+
+
@@ -35,7 +35,7 @@ const GridSkeletonItem = ({ membersCount }: { membersCount: number }) => {
{Array.from({ length: membersCount }).map((_, index) => ( // biome-ignore lint/suspicious/noArrayIndexKey: static keys are fine here as this is a skeleton -
+
))}
diff --git a/frontend/src/modules/entities/types.ts b/frontend/src/modules/entities/types.ts index 371414f9d..f7ea9c6dd 100644 --- a/frontend/src/modules/entities/types.ts +++ b/frontend/src/modules/entities/types.ts @@ -1,7 +1,7 @@ -import type { ContextEntityBaseSchema, GetContextEntitiesResponse, MembershipBaseSchema, Organization } from '~/api.gen'; +import type { ContextEntityBase, GetContextEntitiesResponse, MembershipBase, Organization } from '~/api.gen'; -export type EntityPage = ContextEntityBaseSchema & { - membership?: MembershipBaseSchema | null; +export type EntityPage = ContextEntityBase & { + membership?: MembershipBase | null; organizationId?: string | null; counts?: Organization['counts']; }; diff --git a/frontend/src/modules/entities/use-get-entity-base-data.tsx b/frontend/src/modules/entities/use-get-entity-base-data.tsx index 2c99532c3..d29512e31 100644 --- a/frontend/src/modules/entities/use-get-entity-base-data.tsx +++ b/frontend/src/modules/entities/use-get-entity-base-data.tsx @@ -1,7 +1,7 @@ import { useQuery } from '@tanstack/react-query'; import { appConfig, type ContextEntityType } from 'config'; import { useMemo } from 'react'; -import { type ContextEntityBaseSchema, getContextEntity, getUser, type UserBaseSchema } from '~/api.gen'; +import { type ContextEntityBase, getContextEntity, getUser, type UserBase } from '~/api.gen'; import { entitiesKeys } from '~/modules/entities/query'; import { queryClient } from '~/query/query-client'; import { isInfiniteQueryData, isQueryData } from '~/query/utils/mutate-query'; @@ -16,11 +16,7 @@ function isContextEntityType(t: ContextEntityType | 'user'): t is ContextEntityT type WithIdSlug = { id?: string | null; slug?: string | null }; // user overload -export function useGetEntityBaseData(args: { - idOrSlug: string; - entityType: ContextEntityType | 'user'; - cacheOnly?: boolean; -}): UserBaseSchema | undefined; +export function useGetEntityBaseData(args: { idOrSlug: string; entityType: ContextEntityType | 'user'; cacheOnly?: boolean }): UserBase | undefined; // TODO can we batch this using getContextEntities, so that it waits 100ms and batches multiple calls into one API request? @@ -29,7 +25,7 @@ export function useGetEntityBaseData(args: { idOrSlug: string; entityType: T; cacheOnly?: boolean; -}): ContextEntityBaseSchema | undefined; +}): ContextEntityBase | undefined; // ——— implementation ——— export function useGetEntityBaseData(args: { idOrSlug: string; entityType: ContextEntityType | 'user'; cacheOnly?: boolean }) { @@ -73,7 +69,7 @@ export function useGetEntityBaseData(args: { idOrSlug: string; entityType: Conte if (!isContext) return undefined; const menuItems = Object.values(menu).flat(); const submenuItems = menuItems.flatMap(({ submenu }) => submenu ?? []); - return (menuItems.find(matchEntity) || submenuItems.find(matchEntity)) as ContextEntityBaseSchema | undefined; + return (menuItems.find(matchEntity) || submenuItems.find(matchEntity)) as ContextEntityBase | undefined; }; const cachedEntity = useMemo(() => { @@ -85,7 +81,7 @@ export function useGetEntityBaseData(args: { idOrSlug: string; entityType: Conte return undefined; }, [entityType, idOrSlug, menu]); - if (cacheOnly) return cachedEntity as UserBaseSchema | ContextEntityBaseSchema | undefined; + if (cacheOnly) return cachedEntity as UserBase | ContextEntityBase | undefined; const { data } = useQuery({ queryKey: entitiesKeys.single(idOrSlug, entityType), diff --git a/frontend/src/modules/home/index.tsx b/frontend/src/modules/home/index.tsx index 88f22adda..eeeb1253e 100644 --- a/frontend/src/modules/home/index.tsx +++ b/frontend/src/modules/home/index.tsx @@ -2,7 +2,8 @@ import { appConfig } from 'config'; import { useEffect } from 'react'; import { useTranslation } from 'react-i18next'; import { SimpleHeader } from '~/modules/common/simple-header'; -import { EntityInvitations } from '~/modules/me/entity-invitations'; +import InvitationsTable from '~/modules/me/invitations-table'; +import { Card, CardContent, CardHeader, CardTitle } from '~/modules/ui/card'; import { useAlertStore } from '~/store/alert'; import { useUserStore } from '~/store/user'; @@ -14,10 +15,20 @@ const Home = () => { const { user } = useUserStore.getState(); if (user.role === 'admin' && !user.mfaRequired && appConfig.mode === 'production') setDownAlert('enable_mfa'); }, []); + return (
- +
+ + + {t('common:pending_invitations')} + + + + + +
); }; diff --git a/frontend/src/modules/marketing/marketing-config.tsx b/frontend/src/modules/marketing/marketing-config.tsx index e509022ba..86fd77ce4 100644 --- a/frontend/src/modules/marketing/marketing-config.tsx +++ b/frontend/src/modules/marketing/marketing-config.tsx @@ -1,11 +1,11 @@ import { appConfig, type EntityType } from 'config'; import { Building2Icon, CloudIcon, type LucideIcon, UsersIcon } from 'lucide-react'; +import { ElementIcon } from '~/modules/icons/elemet'; import { GithubIcon } from '~/modules/icons/github'; import type { AboutCard } from '~/modules/marketing/about/cards'; import type { PricingPlan } from '~/modules/marketing/about/pricing'; import { ShowcaseItem } from '~/modules/marketing/about/showcase'; import { nanoid } from '~/utils/nanoid'; -import { ElementIcon } from '../icons/elemet'; /************************************************************************************************* * Nav diff --git a/frontend/src/modules/me/entity-invitations.tsx b/frontend/src/modules/me/entity-invitations.tsx deleted file mode 100644 index 35aef4d37..000000000 --- a/frontend/src/modules/me/entity-invitations.tsx +++ /dev/null @@ -1,101 +0,0 @@ -import { useMutation, useSuspenseQuery } from '@tanstack/react-query'; -import { Link } from '@tanstack/react-router'; -import { useTranslation } from 'react-i18next'; -import { - type ApiError, - type GetMyInvitationsResponse, - HandleMembershipInvitationData, - type HandleMembershipInvitationResponse, - handleMembershipInvitation, -} from '~/api.gen'; -import { AvatarWrap } from '~/modules/common/avatar-wrap'; -import { ExpandableList } from '~/modules/common/expandable-list'; -import { toaster } from '~/modules/common/toaster/service'; -import { getAndSetMenu } from '~/modules/me/helpers'; -import { meInvitationsQueryOptions, meKeys } from '~/modules/me/query'; -import { Button } from '~/modules/ui/button'; -import { Card, CardContent, CardHeader, CardTitle } from '~/modules/ui/card'; -import { UserCell } from '~/modules/users/user-cell'; -import { queryClient } from '~/query/query-client'; -import { getEntityRoute } from '~/routes-resolver'; - -/** - * Component to show a list of pending entity invitations for the current user - */ -export const EntityInvitations = () => { - const { t } = useTranslation(); - - const queryOptions = meInvitationsQueryOptions(); - const { data: invites } = useSuspenseQuery(queryOptions); - - const { mutate: handleInvitation } = useMutation({ - mutationFn: ({ id, acceptOrReject }) => handleMembershipInvitation({ path: { id, acceptOrReject } }), - onSuccess: async (settledEntity, { acceptOrReject }) => { - await getAndSetMenu(); - queryClient.setQueryData(meKeys.invites, (oldData) => { - if (!oldData) return oldData; - return { ...oldData, items: oldData.items.filter((invite) => invite.entity.id !== settledEntity.id) }; - }); - - toaster(t(`common:invitation_settled`, { action: acceptOrReject === 'accept' ? 'accepted' : 'rejected' }), 'success'); - }, - }); - - if (!invites?.items.length) return null; - - return ( - - - {t('common:pending_invitations')} - - -
- { - const { to, params, search } = getEntityRoute({ ...entity, membership: null }); - const actionButtons = [ - { label: t('common:accept'), variant: 'darkSuccess', action: 'accept' }, - { label: t('common:reject'), variant: 'destructive', action: 'reject' }, - ] as const; - - return ( -
- - - - {entity.name} - - - {createdByUser ? : '-'} - -
- {actionButtons.map(({ label, variant, action }) => ( - - ))} -
-
- ); - }} - initialDisplayCount={2} - expandText="common:show_all_invites" - /> -
-
-
- ); -}; diff --git a/frontend/src/modules/me/invitations-table/columns.tsx b/frontend/src/modules/me/invitations-table/columns.tsx new file mode 100644 index 000000000..107aa00a1 --- /dev/null +++ b/frontend/src/modules/me/invitations-table/columns.tsx @@ -0,0 +1,120 @@ +import { useTranslation } from 'react-i18next'; +import { + ApiError, + GetMyInvitationsResponse, + HandleMembershipInvitationData, + HandleMembershipInvitationResponse, + handleMembershipInvitation, +} from '~/api.gen'; +import { useBreakpoints } from '~/hooks/use-breakpoints'; +import { useMutation } from '~/hooks/use-mutations'; +import { AvatarWrap } from '~/modules/common/avatar-wrap'; +import HeaderCell from '~/modules/common/data-table/header-cell'; +import type { ColumnOrColumnGroup } from '~/modules/common/data-table/types'; +import { toaster } from '~/modules/common/toaster/service'; +import { getAndSetMenu } from '~/modules/me/helpers'; +import { meKeys } from '~/modules/me/query'; +import { Invitation } from '~/modules/me/types'; +import { Button } from '~/modules/ui/button'; +import { UserCellById } from '~/modules/users/user-cell'; +import { queryClient } from '~/query/query-client'; +import { dateShort } from '~/utils/date-short'; + +export const useColumns = () => { + const { t } = useTranslation(); + + const isMobile = useBreakpoints('max', 'sm', false); + + const actionButtons = [ + { label: t('common:accept'), variant: 'darkSuccess', action: 'accept' }, + { label: t('common:reject'), variant: 'destructive', action: 'reject' }, + ] as const; + + const { mutate: handleInvitation } = useMutation({ + mutationFn: ({ id, acceptOrReject, orgIdOrSlug }) => handleMembershipInvitation({ path: { id, acceptOrReject, orgIdOrSlug } }), + onSuccess: async (settledEntity, { acceptOrReject }) => { + await getAndSetMenu(); + queryClient.setQueryData(meKeys.invites, (oldData) => { + if (!oldData) return oldData; + return { ...oldData, items: oldData.items.filter((invite) => invite.entity.id !== settledEntity.id) }; + }); + + toaster(t(`common:invitation_settled`, { action: acceptOrReject === 'accept' ? 'accepted' : 'rejected' }), 'success'); + }, + }); + + const columns: ColumnOrColumnGroup[] = [ + { + key: 'name', + name: t('common:organization'), + visible: true, + sortable: false, + renderHeaderCell: HeaderCell, + renderCell: ({ row }) => ( + <> + + {row.entity.name || '-'} + + ), + }, + { + key: 'role', + name: t('common:role'), + sortable: false, + visible: true, + minWidth: 100, + renderHeaderCell: HeaderCell, + renderCell: ({ row }) => ( +
+ {row.inactiveMembership.role ? t(row.inactiveMembership.role, { ns: ['app', 'common'] }) : -} +
+ ), + }, + { + key: 'createdAt', + name: t('common:invited_at'), + sortable: false, + visible: !isMobile, + minWidth: 160, + renderHeaderCell: HeaderCell, + renderCell: ({ row }) => + row.inactiveMembership.createdAt ? dateShort(row.inactiveMembership.createdAt) : -, + }, + { + key: 'createdBy', + name: t('common:invited_by'), + sortable: false, + visible: !isMobile, + minWidth: 120, + renderHeaderCell: HeaderCell, + renderCell: ({ row, tabIndex }) => , + }, + { + key: 'actions', + name: '', + sortable: false, + visible: true, + width: 200, + renderHeaderCell: HeaderCell, + renderCell: ({ row }) => ( +
+ {actionButtons.map(({ label, variant, action }) => ( + + ))} +
+ ), + }, + ]; + + return columns; +}; diff --git a/frontend/src/modules/me/invitations-table/index.tsx b/frontend/src/modules/me/invitations-table/index.tsx new file mode 100644 index 000000000..3a9d33422 --- /dev/null +++ b/frontend/src/modules/me/invitations-table/index.tsx @@ -0,0 +1,82 @@ +import { useQuery } from '@tanstack/react-query'; +import { InfoIcon } from 'lucide-react'; +import { AnimatePresence, motion } from 'motion/react'; +import { useTranslation } from 'react-i18next'; +import { AlertWrap } from '~/modules/common/alert-wrap'; +import { DataTable } from '~/modules/common/data-table'; +import { useColumns } from '~/modules/me/invitations-table/columns'; +import { meInvitationsQueryOptions } from '~/modules/me/query'; +import { Invitation } from '~/modules/me/types'; + +const InvitationsTable = () => { + const { t } = useTranslation(); + + // Build columns + const columns = useColumns(); + + const queryOptions = meInvitationsQueryOptions(); + const { data, isLoading, isFetching, error } = useQuery({ + ...queryOptions, + }); + + // Update rows + // const onRowsChange = (changedRows: Attachment[], { indexes, column }: RowsChangeData) => { + // if (column.key !== 'name') return; + + // // If name is changed, update the attachment + // for (const index of indexes) { + // const attachment = changedRows[index]; + // attachmentUpdateMutation.mutate({ + // id: attachment.id, + // orgIdOrSlug: entity.id, + // name: attachment.name, + // localUpdate: !isCDNUrl(attachment.url), + // }); + // } + // }; + + return ( +
+ {/* Explainer alert box */} + + { + + + {t('common:accept_invitations.text')} + + + } + + +
+ + {...{ + rows: data?.items, + rowHeight: 52, + // onRowsChange, + rowKeyGetter: (row) => row.inactiveMembership.id, + columns: columns.filter((column) => column.visible), + enableVirtualization: false, + error, + isLoading, + isFetching, + hasNextPage: false, + NoRowsComponent: <>, + }} + /> +
+
+ ); +}; + +export default InvitationsTable; diff --git a/frontend/src/modules/me/query.ts b/frontend/src/modules/me/query.ts index 99f49c13d..c5ff5dba2 100644 --- a/frontend/src/modules/me/query.ts +++ b/frontend/src/modules/me/query.ts @@ -34,28 +34,28 @@ export const meKeys = { }; /** - * Query options for fetching the current authenticated user's data. + * Query options for fetching the current user's data. * * @returns Query options. */ export const meQueryOptions = () => queryOptions({ queryKey: meKeys.all, queryFn: getAndSetMe }); /** - * Query options for fetching the authentication information of the current authenticated user. + * Query options for fetching the auth information of the current user. * * @returns Query options. */ export const meAuthQueryOptions = () => queryOptions({ queryKey: meKeys.auth, queryFn: getAndSetMeAuthData }); /** - * Query options for fetching the current authenticated user's menu. + * Query options for fetching the current user's menu. * * @returns Query options. */ export const menuQueryOptions = () => queryOptions({ queryKey: meKeys.menu, queryFn: getAndSetMenu }); /** - * Query options for fetching the current authenticated user's invites. + * Query options for fetching the current user's invites. * * @returns Query options. */ diff --git a/frontend/src/modules/me/types.ts b/frontend/src/modules/me/types.ts index 797e7a188..2971bfb84 100644 --- a/frontend/src/modules/me/types.ts +++ b/frontend/src/modules/me/types.ts @@ -1,11 +1,13 @@ -import type { GetMyAuthResponse, GetUploadTokenData, MenuSchema, User } from '~/api.gen'; +import type { GetMyAuthResponse, GetMyInvitationsResponse, GetUploadTokenData, Menu, User } from '~/api.gen'; export type MeAuthData = GetMyAuthResponse; export type Session = MeAuthData['sessions'][number]; export type Passkey = MeAuthData['passkeys'][number]; export type MeUser = User; -export type UserMenu = MenuSchema; +export type UserMenu = Menu; export type UserMenuItem = UserMenu[keyof UserMenu][number]; export type UploadTokenQuery = GetUploadTokenData['query'] & { public: boolean }; + +export type Invitation = GetMyInvitationsResponse['items'][number]; diff --git a/frontend/src/modules/memberships/leave-entity-button.tsx b/frontend/src/modules/memberships/leave-entity-button.tsx index fe753a9b2..e438abce7 100644 --- a/frontend/src/modules/memberships/leave-entity-button.tsx +++ b/frontend/src/modules/memberships/leave-entity-button.tsx @@ -3,7 +3,7 @@ import { useNavigate } from '@tanstack/react-router'; import { appConfig } from 'config'; import { UserRoundXIcon } from 'lucide-react'; import { useTranslation } from 'react-i18next'; -import { type ContextEntityBaseSchema, deleteMyMembership } from '~/api.gen'; +import { type ContextEntityBase, deleteMyMembership } from '~/api.gen'; import { CallbackArgs } from '~/modules/common/data-table/types'; import { toaster } from '~/modules/common/toaster/service'; import { deleteMenuItem } from '~/modules/navigation/menu-sheet/helpers/menu-operations'; @@ -12,7 +12,7 @@ import { queryClient } from '~/query/query-client'; import { cn } from '~/utils/cn'; export type LeaveEntityButtonProps = { - entity: ContextEntityBaseSchema; + entity: ContextEntityBase; redirectPath?: string; buttonProps?: ButtonProps; callback?: (args: CallbackArgs) => void; diff --git a/frontend/src/modules/memberships/pending-table/index.tsx b/frontend/src/modules/memberships/pending-table/index.tsx index 5c129ee3e..ad4c6ca26 100644 --- a/frontend/src/modules/memberships/pending-table/index.tsx +++ b/frontend/src/modules/memberships/pending-table/index.tsx @@ -71,8 +71,7 @@ export const PendingMembershipsTable = ({ entity }: PendingMembershipsTableProps {...{ rows, rowHeight: 52, - // Its either a membershipId or tokenId - rowKeyGetter: (row) => row.membershipId || (row.tokenId as string), + rowKeyGetter: (row) => row.id, columns: columns.filter((column) => column.visible), enableVirtualization: false, limit, diff --git a/frontend/src/modules/metrics/requests-per-minute.tsx b/frontend/src/modules/metrics/requests-per-minute.tsx index 644a3d40a..bceaab55c 100644 --- a/frontend/src/modules/metrics/requests-per-minute.tsx +++ b/frontend/src/modules/metrics/requests-per-minute.tsx @@ -23,13 +23,11 @@ function RequestsPerMinute() { return ( - -
- {t('common:requests')} - {t('common:requests.text')} -
+ + {t('common:requests')} + {t('common:requests.text')} - + diff --git a/frontend/src/modules/navigation/account-sheet.tsx b/frontend/src/modules/navigation/account-sheet.tsx index 45613c057..a6a21c360 100644 --- a/frontend/src/modules/navigation/account-sheet.tsx +++ b/frontend/src/modules/navigation/account-sheet.tsx @@ -63,7 +63,7 @@ export const AccountSheet = () => { return (
- +
{ icon={UserRoundIcon} id="btn-profile" label={t('common:view_resource', { resource: t('common:profile').toLowerCase() })} - action={`/users/${user.slug}`} + action={`/user/${user.slug}`} /> { * @param entityIdOrSlug - ID or slug of entity. * @param entityType - Context entity type */ -export const updateMenuItemMembership = (membershipData: Partial, entityIdOrSlug: string, entityType: ContextEntityType) => { +export const updateMenuItemMembership = (membershipData: Partial, entityIdOrSlug: string, entityType: ContextEntityType) => { // Get the current menu state from the navigation store (without using hooks) const menu = useNavigationStore.getState().menu; diff --git a/frontend/src/modules/navigation/menu-sheet/index.tsx b/frontend/src/modules/navigation/menu-sheet/index.tsx index 82bbf48b4..f9b812df9 100644 --- a/frontend/src/modules/navigation/menu-sheet/index.tsx +++ b/frontend/src/modules/navigation/menu-sheet/index.tsx @@ -29,7 +29,7 @@ import { cn } from '~/utils/cn'; const pwaEnabled = appConfig.has.pwa; -// TODO can we merge this into one component and is memo necessary since we have react compiler? +// TODO(DAVID) can we merge this into one component and is memo necessary since we have react compiler? export const MenuSheet = memo(() => { const menu = useNavigationStore((state) => state.menu); diff --git a/frontend/src/modules/navigation/menu-sheet/item.tsx b/frontend/src/modules/navigation/menu-sheet/item.tsx index 5872198c7..3a46a2458 100644 --- a/frontend/src/modules/navigation/menu-sheet/item.tsx +++ b/frontend/src/modules/navigation/menu-sheet/item.tsx @@ -81,7 +81,7 @@ export const MenuSheetItem = ({ item, icon: Icon, className, searchResults }: Me )} {item.submenu?.length - ? `${item.submenu?.length} ${t(item.submenu?.length > 1 ? `${item.submenu[0].entityType}s` : item.submenu[0].entityType, { ns: ['app', 'common'] }).toLowerCase()}` + ? `${item.submenu?.length} ${t(item.submenu?.length > 1 ? item.submenu[0].entityType : item.submenu[0].entityType, { ns: ['app', 'common'] }).toLowerCase()}` : item.membership.role ? t(item.membership.role, { ns: ['app', 'common'] }) : ''} diff --git a/frontend/src/modules/navigation/search-result-block.tsx b/frontend/src/modules/navigation/search-result-block.tsx index 3c8ebe14d..3a902b606 100644 --- a/frontend/src/modules/navigation/search-result-block.tsx +++ b/frontend/src/modules/navigation/search-result-block.tsx @@ -1,13 +1,13 @@ import { appConfig, ContextEntityType } from 'config'; import { UserIcon } from 'lucide-react'; import { useTranslation } from 'react-i18next'; -import type { ContextEntityBaseSchema, UserBaseSchema } from '~/api.gen'; +import type { ContextEntityBase, UserBase } from '~/api.gen'; import { AvatarWrap } from '~/modules/common/avatar-wrap'; import StickyBox from '~/modules/common/sticky-box'; import { Badge } from '~/modules/ui/badge'; import { CommandGroup, CommandItem, CommandSeparator } from '~/modules/ui/command'; -type SearchBlockResult = ContextEntityBaseSchema | UserBaseSchema; +type SearchBlockResult = ContextEntityBase | UserBase; type SearchBlockProps = { results: SearchBlockResult[]; diff --git a/frontend/src/modules/navigation/search.tsx b/frontend/src/modules/navigation/search.tsx index 8a63c893d..a7eca1a02 100644 --- a/frontend/src/modules/navigation/search.tsx +++ b/frontend/src/modules/navigation/search.tsx @@ -4,7 +4,7 @@ import { appConfig, ContextEntityType } from 'config'; import { HistoryIcon, SearchIcon, XIcon } from 'lucide-react'; import { useRef, useState } from 'react'; import { useTranslation } from 'react-i18next'; -import type { ContextEntityBaseSchema, GetContextEntitiesResponse, UserBaseSchema } from '~/api.gen'; +import type { ContextEntityBase, GetContextEntitiesResponse, UserBase } from '~/api.gen'; import useFocusByRef from '~/hooks/use-focus-by-ref'; import ContentPlaceholder from '~/modules/common/content-placeholder'; import { useDialoger } from '~/modules/common/dialoger/use-dialoger'; @@ -84,7 +84,7 @@ export const AppSearch = () => { }, }); - const onSelectItem = (item: ContextEntityBaseSchema | UserBaseSchema) => { + const onSelectItem = (item: ContextEntityBase | UserBase) => { // Update recent searches with the search value updateRecentSearches(searchValue); diff --git a/frontend/src/modules/organizations/organization-page.tsx b/frontend/src/modules/organizations/organization-page.tsx index 93cd8e620..ff272a633 100644 --- a/frontend/src/modules/organizations/organization-page.tsx +++ b/frontend/src/modules/organizations/organization-page.tsx @@ -12,14 +12,14 @@ import { useUserStore } from '~/store/user'; const LeaveOrgButton = lazy(() => import('~/modules/organizations/leave-organization')); const organizationTabs: PageTab[] = [ - { id: 'members', label: 'common:members', path: '/organizations/$idOrSlug/members' }, - { id: 'attachments', label: 'common:attachments', path: '/organizations/$idOrSlug/attachments' }, - { id: 'settings', label: 'common:settings', path: '/organizations/$idOrSlug/settings' }, + { id: 'members', label: 'common:members', path: '/organization/$idOrSlug/members' }, + { id: 'attachments', label: 'common:attachments', path: '/organization/$idOrSlug/attachments' }, + { id: 'settings', label: 'common:settings', path: '/organization/$idOrSlug/settings' }, ]; const OrganizationPage = () => { const { t } = useTranslation(); - const { idOrSlug } = useParams({ from: '/appLayout/organizations/$idOrSlug' }); + const { idOrSlug } = useParams({ from: '/appLayout/organization/$idOrSlug' }); const user = useUserStore((state) => state.user); const orgQueryOptions = organizationQueryOptions(idOrSlug); diff --git a/frontend/src/modules/organizations/organization-settings.tsx b/frontend/src/modules/organizations/organization-settings.tsx index 4d0e57bf7..b8f864c7d 100644 --- a/frontend/src/modules/organizations/organization-settings.tsx +++ b/frontend/src/modules/organizations/organization-settings.tsx @@ -28,7 +28,7 @@ const tabs = [ const OrganizationSettings = ({ organization }: { organization: Organization }) => { const { t } = useTranslation(); const navigate = useNavigate(); - const { idOrSlug } = useParams({ from: '/appLayout/organizations/$idOrSlug/settings' }); + const { idOrSlug } = useParams({ from: '/appLayout/organization/$idOrSlug/settings' }); const deleteButtonRef = useRef(null); @@ -57,7 +57,7 @@ const OrganizationSettings = ({ organization }: { organization: Organization }) const callback = (args: CallbackArgs) => { if (args.status === 'success' && idOrSlug !== args.data.slug) { navigate({ - to: '/organizations/$idOrSlug/settings', + to: '/organization/$idOrSlug/settings', params: { idOrSlug: organization.slug }, replace: true, }); diff --git a/frontend/src/modules/organizations/table/columns.tsx b/frontend/src/modules/organizations/table/columns.tsx index ca8634bef..980e10454 100644 --- a/frontend/src/modules/organizations/table/columns.tsx +++ b/frontend/src/modules/organizations/table/columns.tsx @@ -28,7 +28,7 @@ export const useColumns = () => { renderHeaderCell: HeaderCell, renderCell: ({ row, tabIndex }) => ( { name={row.name} url={row.thumbnailUrl} /> + {/* TODO(FLIP) isCompact_ should perhaps be a data-is-compact attribute? */} {row.name || '-'} diff --git a/frontend/src/modules/organizations/table/index.tsx b/frontend/src/modules/organizations/table/index.tsx index 34d22d3fc..7709c52c3 100644 --- a/frontend/src/modules/organizations/table/index.tsx +++ b/frontend/src/modules/organizations/table/index.tsx @@ -23,6 +23,7 @@ const LIMIT = appConfig.requestLimits.organizations; const OrganizationsTable = () => { const { t } = useTranslation(); const { user } = useUserStore(); + const updateMemberMembership = useMemberUpdateMutation(); const { search, setSearch } = useSearchParams({ from: '/appLayout/system/organizations' }); @@ -55,6 +56,7 @@ const OrganizationsTable = () => { return; } + // If role is changed, update the membership for (const index of indexes) { const organization = changedRows[index]; const membership = organization.membership; @@ -63,10 +65,7 @@ const OrganizationsTable = () => { const newRole = membership.role; const partOfOrganization = !!membership.id; - const mutationVariables = { - idOrSlug: organization.slug, - entityType: organization.entityType, - }; + const mutationVariables = { idOrSlug: organization.slug, entityType: organization.entityType }; const orgIdOrSlug = organization.id; try { diff --git a/frontend/src/modules/organizations/types.ts b/frontend/src/modules/organizations/types.ts index bb6b006dd..09342e85e 100644 --- a/frontend/src/modules/organizations/types.ts +++ b/frontend/src/modules/organizations/types.ts @@ -1,7 +1,7 @@ import type z from 'zod'; -import type { MembershipBaseSchema, Organization } from '~/api.gen'; +import type { MembershipBase, Organization } from '~/api.gen'; import type { organizationsRouteSearchParamsSchema } from '~/routes/search-params-schemas'; export type OrganizationsRouteSearchParams = z.infer; -export type OrganizationWithMembership = Organization & { membership: NonNullable }; +export type OrganizationWithMembership = Organization & { membership: NonNullable }; diff --git a/frontend/src/modules/ui/combobox.tsx b/frontend/src/modules/ui/combobox.tsx index 65471f4e6..728b2ce6d 100644 --- a/frontend/src/modules/ui/combobox.tsx +++ b/frontend/src/modules/ui/combobox.tsx @@ -124,7 +124,7 @@ const Combobox = ({ - + {filteredOptions.map((option, index) => ( ) { - return
; + return
; } export { Skeleton }; diff --git a/frontend/src/modules/users/table/update-row.tsx b/frontend/src/modules/users/table/update-row.tsx index 780c3cd2c..f79392056 100644 --- a/frontend/src/modules/users/table/update-row.tsx +++ b/frontend/src/modules/users/table/update-row.tsx @@ -18,7 +18,6 @@ export const openUpdateUserSheet = (user: User, buttonRef: RefObject diff --git a/frontend/src/modules/users/types.ts b/frontend/src/modules/users/types.ts index 1847ff5d5..2bc89820f 100644 --- a/frontend/src/modules/users/types.ts +++ b/frontend/src/modules/users/types.ts @@ -1,7 +1,7 @@ import type z from 'zod'; -import type { MembershipBaseSchema, User } from '~/api.gen'; +import type { MembershipBase, User } from '~/api.gen'; import type { usersRouteSearchParamsSchema } from '~/routes/search-params-schemas'; -export type UserWithMemberships = User & { memberships: MembershipBaseSchema[] }; +export type UserWithMemberships = User & { memberships: MembershipBase[] }; export type UsersRouteSearchParams = z.infer; diff --git a/frontend/src/modules/users/user-cell.tsx b/frontend/src/modules/users/user-cell.tsx index 7de3c953a..278d7ca80 100644 --- a/frontend/src/modules/users/user-cell.tsx +++ b/frontend/src/modules/users/user-cell.tsx @@ -2,7 +2,7 @@ import { onlineManager } from '@tanstack/react-query'; import { Link, useNavigate } from '@tanstack/react-router'; import { useRef } from 'react'; import { useTranslation } from 'react-i18next'; -import type { UserBaseSchema } from '~/api.gen'; +import type { UserBase } from '~/api.gen'; import { AvatarWrap } from '~/modules/common/avatar-wrap'; import { useSheeter } from '~/modules/common/sheeter/use-sheeter'; import { toaster } from '~/modules/common/toaster/service'; @@ -16,7 +16,7 @@ type BaseProps = { /** * Render a user cell with avatar and name, wrapped in a link to open user sheet. */ -export const UserCell = ({ user, orgIdOrSlug, tabIndex }: BaseProps & { user: UserBaseSchema }) => { +export const UserCell = ({ user, orgIdOrSlug, tabIndex }: BaseProps & { user: UserBase }) => { const { t } = useTranslation(); const navigate = useNavigate(); const cellRef = useRef(null); @@ -26,7 +26,7 @@ export const UserCell = ({ user, orgIdOrSlug, tabIndex }: BaseProps & { user: Us return ( { +export const getEntityRoute = (item: UserMenuItem | EntityPage | UserBase): EntityRoute => { const { entityType, id, slug } = item; const to = baseEntityRoutes[entityType]; diff --git a/frontend/src/routes/auth-routes.tsx b/frontend/src/routes/auth-routes.tsx index bb3ef1169..fd33c4881 100644 --- a/frontend/src/routes/auth-routes.tsx +++ b/frontend/src/routes/auth-routes.tsx @@ -18,7 +18,6 @@ import appTitle from '~/utils/app-title'; const authenticateRouteSearch = z.object({ tokenId: z.string().optional(), - token: z.string().optional(), redirect: z.string().optional(), fromRoot: z.boolean().optional(), }); diff --git a/frontend/src/routes/home-routes.tsx b/frontend/src/routes/home-routes.tsx index 86e0b40b5..631dad243 100644 --- a/frontend/src/routes/home-routes.tsx +++ b/frontend/src/routes/home-routes.tsx @@ -24,8 +24,6 @@ export const HomeRoute = createRoute({ export const HomeAliasRoute = createRoute({ path: '/home', validateSearch: z.object({ - invitationTokenId: z.string().optional(), - invitationMembershipId: z.string().optional(), skipWelcome: z.boolean().optional(), }), staticData: { isAuth: true }, diff --git a/frontend/src/routes/organization-routes.tsx b/frontend/src/routes/organization-routes.tsx index 3aaff55db..d89197876 100644 --- a/frontend/src/routes/organization-routes.tsx +++ b/frontend/src/routes/organization-routes.tsx @@ -18,7 +18,7 @@ const AttachmentsTable = lazy(() => import('~/modules/attachments/table')); const OrganizationSettings = lazy(() => import('~/modules/organizations/organization-settings')); export const OrganizationRoute = createRoute({ - path: '/organizations/$idOrSlug', + path: '/organization/$idOrSlug', staticData: { isAuth: true }, beforeLoad: async ({ params: { idOrSlug } }) => { noDirectAccess(OrganizationRoute.to, OrganizationMembersRoute.to); diff --git a/frontend/src/routes/user-routes.tsx b/frontend/src/routes/user-routes.tsx index d802fa6e0..dd242b2bd 100644 --- a/frontend/src/routes/user-routes.tsx +++ b/frontend/src/routes/user-routes.tsx @@ -12,7 +12,7 @@ const UserProfilePage = lazy(() => import('~/modules/users/profile-page')); const UserAccountPage = lazy(() => import('~/modules/me/account-page')); export const UserProfileRoute = createRoute({ - path: '/users/$idOrSlug', + path: '/user/$idOrSlug', staticData: { isAuth: true }, getParentRoute: () => AppLayoutRoute, loader: async ({ params: { idOrSlug } }) => { @@ -26,7 +26,7 @@ export const UserProfileRoute = createRoute({ }, errorComponent: ({ error }) => , component: () => { - const { idOrSlug } = useParams({ from: '/appLayout/users/$idOrSlug' }); + const { idOrSlug } = useParams({ from: '/appLayout/user/$idOrSlug' }); return ( @@ -36,7 +36,7 @@ export const UserProfileRoute = createRoute({ }); export const UserInOrganizationProfileRoute = createRoute({ - path: '/$orgIdOrSlug/users/$idOrSlug', + path: '/$orgIdOrSlug/user/$idOrSlug', staticData: { isAuth: true }, getParentRoute: () => AppLayoutRoute, loader: async ({ params: { idOrSlug } }) => { @@ -50,7 +50,7 @@ export const UserInOrganizationProfileRoute = createRoute({ }, errorComponent: ({ error }) => , component: () => { - const { idOrSlug, orgIdOrSlug } = useParams({ from: '/appLayout/$orgIdOrSlug/users/$idOrSlug' }); + const { idOrSlug, orgIdOrSlug } = useParams({ from: '/appLayout/$orgIdOrSlug/user/$idOrSlug' }); return ( diff --git a/frontend/src/stories/menu-sheet/index.stories.tsx b/frontend/src/stories/menu-sheet/index.stories.tsx index 5bb7b0e21..f23c7d474 100644 --- a/frontend/src/stories/menu-sheet/index.stories.tsx +++ b/frontend/src/stories/menu-sheet/index.stories.tsx @@ -1,7 +1,7 @@ import type { Meta, StoryObj } from '@storybook/react-vite'; import { UserMenu } from '~/modules/me/types'; -import { MockMenuSheet } from './mock'; -import { mockFullMenuWithSubteams, mockMenu, mockOrganizationsAndTeamsMenu } from './mock/data'; +import { MockMenuSheet } from '~/stories/menu-sheet/mock'; +import { mockFullMenuWithSubteams, mockMenu, mockOrganizationsAndTeamsMenu } from '~/stories/menu-sheet/mock/data'; const meta: Meta = { title: 'Navigation/MenuSheet', diff --git a/frontend/src/stories/menu-sheet/mock/data.tsx b/frontend/src/stories/menu-sheet/mock/data.tsx index 392970555..800cebb8f 100644 --- a/frontend/src/stories/menu-sheet/mock/data.tsx +++ b/frontend/src/stories/menu-sheet/mock/data.tsx @@ -46,7 +46,6 @@ export const mockOrganizations: UserMenuItem[] = [ archived: false, muted: false, organizationId: 'org-1', - activatedAt: '2024-01-01T00:00:00Z', } as Membership, submenu: [], }, @@ -67,7 +66,6 @@ export const mockOrganizations: UserMenuItem[] = [ archived: false, muted: false, organizationId: 'org-2', - activatedAt: '2024-01-01T00:00:00Z', } as Membership, submenu: [], }, @@ -88,7 +86,6 @@ export const mockOrganizations: UserMenuItem[] = [ archived: false, muted: true, organizationId: 'org-3', - activatedAt: '2024-01-01T00:00:00Z', } as Membership, submenu: [], }, @@ -109,7 +106,6 @@ export const mockOrganizations: UserMenuItem[] = [ archived: false, muted: true, organizationId: 'org-4', - activatedAt: '2024-01-01T00:00:00Z', } as Membership, submenu: [], }, @@ -130,7 +126,6 @@ export const mockOrganizations: UserMenuItem[] = [ archived: false, muted: false, organizationId: 'org-5', - activatedAt: '2024-01-01T00:00:00Z', } as Membership, submenu: [], }, @@ -151,7 +146,6 @@ export const mockOrganizations: UserMenuItem[] = [ archived: false, muted: false, organizationId: 'org-6', - activatedAt: '2024-01-01T00:00:00Z', } as Membership, submenu: [], }, @@ -172,7 +166,6 @@ export const mockOrganizations: UserMenuItem[] = [ archived: false, muted: true, organizationId: 'org-7', - activatedAt: '2024-01-01T00:00:00Z', } as Membership, submenu: [], }, @@ -193,7 +186,6 @@ export const mockOrganizations: UserMenuItem[] = [ archived: false, muted: false, organizationId: 'org-8', - activatedAt: '2024-01-01T00:00:00Z', } as Membership, submenu: [], }, @@ -214,7 +206,6 @@ export const mockOrganizations: UserMenuItem[] = [ archived: true, muted: false, organizationId: 'org-9', - activatedAt: '2024-01-01T00:00:00Z', } as Membership, submenu: [], }, @@ -235,7 +226,6 @@ export const mockOrganizations: UserMenuItem[] = [ archived: true, muted: true, organizationId: 'org-10', - activatedAt: '2024-01-01T00:00:00Z', } as Membership, submenu: [], }, @@ -256,7 +246,6 @@ export const mockOrganizations: UserMenuItem[] = [ archived: true, muted: false, organizationId: 'org-11', - activatedAt: '2024-01-01T00:00:00Z', } as Membership, submenu: [], }, @@ -277,7 +266,6 @@ export const mockOrganizations: UserMenuItem[] = [ archived: false, muted: true, organizationId: 'org-12', - activatedAt: '2024-01-01T00:00:00Z', } as Membership, submenu: [], }, @@ -302,7 +290,6 @@ export const mockTeams: UserMenuItem[] = [ archived: false, muted: false, organizationId: 'org-1', - activatedAt: '2024-01-01T00:00:00Z', } as Membership, submenu: [ { @@ -322,7 +309,6 @@ export const mockTeams: UserMenuItem[] = [ archived: false, muted: false, organizationId: 'team-1', - activatedAt: '2024-01-01T00:00:00Z', } as Membership, }, { @@ -342,7 +328,6 @@ export const mockTeams: UserMenuItem[] = [ archived: false, muted: false, organizationId: 'team-1', - activatedAt: '2024-01-01T00:00:00Z', } as Membership, }, { @@ -362,7 +347,6 @@ export const mockTeams: UserMenuItem[] = [ archived: false, muted: false, organizationId: 'team-1', - activatedAt: '2024-01-01T00:00:00Z', } as Membership, }, ], @@ -384,7 +368,6 @@ export const mockTeams: UserMenuItem[] = [ archived: false, muted: false, organizationId: 'org-1', - activatedAt: '2024-01-01T00:00:00Z', } as Membership, submenu: [ { @@ -404,7 +387,6 @@ export const mockTeams: UserMenuItem[] = [ archived: false, muted: false, organizationId: 'team-2', - activatedAt: '2024-01-01T00:00:00Z', } as Membership, }, { @@ -424,7 +406,6 @@ export const mockTeams: UserMenuItem[] = [ archived: false, muted: false, organizationId: 'team-2', - activatedAt: '2024-01-01T00:00:00Z', } as Membership, }, ], @@ -446,7 +427,6 @@ export const mockTeams: UserMenuItem[] = [ archived: false, muted: true, organizationId: 'org-1', - activatedAt: '2024-01-01T00:00:00Z', } as Membership, submenu: [], }, @@ -467,7 +447,6 @@ export const mockTeams: UserMenuItem[] = [ archived: true, muted: false, organizationId: 'org-2', - activatedAt: '2024-01-01T00:00:00Z', } as Membership, submenu: [ { @@ -487,7 +466,6 @@ export const mockTeams: UserMenuItem[] = [ archived: false, muted: false, organizationId: 'team-4', - activatedAt: '2024-01-01T00:00:00Z', } as Membership, }, { @@ -507,7 +485,6 @@ export const mockTeams: UserMenuItem[] = [ archived: false, muted: false, organizationId: 'team-4', - activatedAt: '2024-01-01T00:00:00Z', } as Membership, }, ], @@ -533,7 +510,6 @@ export const mockOrganizationsWithTeams: UserMenuItem[] = [ archived: false, muted: false, organizationId: 'org-1', - activatedAt: '2024-01-01T00:00:00Z', } as Membership, submenu: mockTeams.slice(0, 3), // Engineering, Design, Product teams }, @@ -554,7 +530,6 @@ export const mockOrganizationsWithTeams: UserMenuItem[] = [ archived: false, muted: false, organizationId: 'org-2', - activatedAt: '2024-01-01T00:00:00Z', } as Membership, submenu: mockTeams.slice(3, 4), // Marketing team (archived) }, diff --git a/frontend/src/stories/menu-sheet/mock/index.tsx b/frontend/src/stories/menu-sheet/mock/index.tsx index 1eaa26339..c6fd402be 100644 --- a/frontend/src/stories/menu-sheet/mock/index.tsx +++ b/frontend/src/stories/menu-sheet/mock/index.tsx @@ -393,7 +393,7 @@ function MockMenuItem({ )} {item.submenu?.length - ? `${item.submenu?.length} ${item.submenu?.length > 1 ? `${item.submenu[0].entityType}s` : item.submenu[0].entityType}` + ? `${item.submenu?.length} ${item.submenu?.length > 1 ? item.submenu[0].entityType : item.submenu[0].entityType}` : item.membership.role ? item.membership.role : ''} diff --git a/frontend/src/stories/menu-sheet/providers.tsx b/frontend/src/stories/menu-sheet/providers.tsx index 8010b8d07..942287c93 100644 --- a/frontend/src/stories/menu-sheet/providers.tsx +++ b/frontend/src/stories/menu-sheet/providers.tsx @@ -3,7 +3,7 @@ import { appConfig } from 'config'; import { ReactNode } from 'react'; import { I18nextProvider } from 'react-i18next'; import type { UserMenu } from '~/modules/me/types'; -import { createMockNavigationStore, createMockSheeterStore, createMockUIStore, createMockUserStore } from './stores'; +import { createMockNavigationStore, createMockSheeterStore, createMockUIStore, createMockUserStore } from '~/stories/menu-sheet/stores'; // Mock i18n const mockI18n = { diff --git a/frontend/src/styling/tailwind.css b/frontend/src/styling/tailwind.css index 064820c0b..93d2eae3c 100755 --- a/frontend/src/styling/tailwind.css +++ b/frontend/src/styling/tailwind.css @@ -4,7 +4,7 @@ @import "./gradients.css" layer(base); @import "../modules/common/blocknote/styles.css" layer(base); -@config '../../tailwind.config.ts'; +@config "../../tailwind.config.ts"; @layer base { *, diff --git a/frontend/src/utils/no-direct-access.ts b/frontend/src/utils/no-direct-access.ts index c5e40a164..13089aeed 100644 --- a/frontend/src/utils/no-direct-access.ts +++ b/frontend/src/utils/no-direct-access.ts @@ -10,7 +10,7 @@ import router from '~/lib/router'; * @throws Throws a redirect to `redirectTo` preserving current query parameters and replacing the history entry. * * @example - * // Redirect users from `/organizations/$idOrSlug` to its `/members` child route if accessed directly + * // Redirect users from `/organization/$idOrSlug` to its `/members` child route if accessed directly * noDirectAccess(OrganizationRoute.to, OrganizationMembersRoute.to); */ export const noDirectAccess = (currentTo: string, redirectTo: string) => { diff --git a/frontend/vite.config.ts b/frontend/vite.config.ts index 7d1f8b5d0..0da708cb5 100644 --- a/frontend/vite.config.ts +++ b/frontend/vite.config.ts @@ -6,7 +6,7 @@ import basicSsl from '@vitejs/plugin-basic-ssl'; import react from '@vitejs/plugin-react'; import path from 'node:path'; // import { visualizer } from 'rollup-plugin-visualizer'; -import { defineConfig, type UserConfig } from 'vite'; +import { defineConfig, Plugin, type UserConfig } from 'vite'; import { createHtmlPlugin } from 'vite-plugin-html'; import { VitePWA } from 'vite-plugin-pwa'; import { viteStaticCopy } from 'vite-plugin-static-copy'; @@ -93,7 +93,7 @@ const viteConfig = { compress: { pure_funcs: ['console.debug'], // Removes console.debug }, - }), + }) as Plugin, // visualizer({ open: true, gzipSize: true }), ], resolve: { diff --git a/locales/en/common.json b/locales/en/common.json index 2bc6ce4bb..fcd9a6a8b 100644 --- a/locales/en/common.json +++ b/locales/en/common.json @@ -486,5 +486,6 @@ "mfa_enable_confirmation.text": "Enabling Multi-Factor Authentication adds an extra layer of security to your account.", "reject": "Reject", "my_account": "My account", - "chat_with_us": "Chat with us" + "chat_with_us": "Chat with us", + "accept_invitations.text": "Here you can accept or reject invitations to new organizations." } diff --git a/locales/en/errors.json b/locales/en/errors.json index a0f759137..db3cf5df9 100644 --- a/locales/en/errors.json +++ b/locales/en/errors.json @@ -99,13 +99,13 @@ "invitation_not_for_you": "The user currently signed in doesn't match with the invitation. Please sign out and click the link in your email again or contact support.", "invitation_not_found": "Invitation not found", "invitation_not_found.text": "The token is used or doesn't exist. Please sign in directly or use reply-to in the invitation email to request a new one.", - "invite_takes_priority": "Invitation pending", - "invite_takes_priority.text": "You should already have an invitation in your email inbox. Please use the link in the email to proceed. Can't find it? Click 'Resend' to receive a new invitation link.", "load_more_failed": "Could not load more data. Try reloading or come back later.", "maybe_bot": "Suspicious activity.", "maybe_bot.text": "We have detected unusual activity. Please try again or contact support.", "membership_already_active": "Membership active", "membership_already_active.text": "This membership has already been activated.", + "inactive_membership_not_found": "Inactive membership not found", + "inactive_membership_not_found.text": "The inactive membership you are trying to access does not exist or has been deleted.", "membership_not_found": "Membership not found", "membership_not_found.text": "The membership you are trying to access does not exist or has been deleted.", "membership_without_token": "Membership cannot be activated", diff --git a/package.json b/package.json index 796cda6c1..4419983ad 100644 --- a/package.json +++ b/package.json @@ -55,11 +55,11 @@ "test": "pnpm -r --parallel test" }, "devDependencies": { - "@biomejs/biome": "^2.2.5", + "@biomejs/biome": "^2.3.2", "@evilmartians/lefthook": "^1.13.6", "@typescript/native-preview": "7.0.0-dev.20250910.1", "cross-env": "^10.1.0", - "knip": "^5.64.3", + "knip": "^5.66.4", "rimraf": "^6.0.1", "tsx": "^4.20.6", "typescript": "^5.9.3", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index c73a6ea89..11e77900e 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -13,8 +13,8 @@ importers: version: 17.2.3 devDependencies: '@biomejs/biome': - specifier: ^2.2.5 - version: 2.2.5 + specifier: ^2.3.2 + version: 2.3.2 '@evilmartians/lefthook': specifier: ^1.13.6 version: 1.13.6 @@ -25,8 +25,8 @@ importers: specifier: ^10.1.0 version: 10.1.0 knip: - specifier: ^5.64.3 - version: 5.64.3(@types/node@24.7.2)(typescript@5.9.3) + specifier: ^5.66.4 + version: 5.66.4(@types/node@24.9.2)(typescript@5.9.3) rimraf: specifier: ^6.0.1 version: 6.0.1 @@ -38,7 +38,7 @@ importers: version: 5.9.3 vitest: specifier: ^3.2.4 - version: 3.2.4(@types/debug@4.1.12)(@types/node@24.7.2)(@vitest/browser@3.2.4)(jiti@2.6.1)(jsdom@27.0.0(canvas@3.2.0)(postcss@8.5.6))(lightningcss@1.30.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1) + version: 3.2.4(@types/debug@4.1.12)(@types/node@24.9.2)(@vitest/browser@3.2.4)(jiti@2.6.1)(jsdom@27.0.1(canvas@3.2.0)(postcss@8.5.6))(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1) backend: dependencies: @@ -46,17 +46,17 @@ importers: specifier: 8.1.0 version: 8.1.0(zod@4.1.12) '@aws-sdk/client-s3': - specifier: ^3.908.0 - version: 3.908.0 + specifier: ^3.920.0 + version: 3.920.0 '@aws-sdk/cloudfront-signer': - specifier: ^3.901.0 - version: 3.901.0 + specifier: ^3.916.0 + version: 3.916.0 '@aws-sdk/lib-storage': - specifier: ^3.908.0 - version: 3.908.0(@aws-sdk/client-s3@3.908.0) + specifier: ^3.920.0 + version: 3.920.0(@aws-sdk/client-s3@3.920.0) '@aws-sdk/s3-request-presigner': - specifier: ^3.908.0 - version: 3.908.0 + specifier: ^3.920.0 + version: 3.920.0 '@cellajs/permission-manager': specifier: ^0.1.0 version: 0.1.0(@swc/core@1.7.26)(jiti@2.6.1)(postcss@8.5.6)(tsx@4.20.6)(yaml@2.8.1) @@ -64,17 +64,17 @@ importers: specifier: ^1.3.8 version: 1.3.8 '@electric-sql/pglite': - specifier: ^0.3.10 - version: 0.3.10 + specifier: ^0.3.11 + version: 0.3.11 '@getbrevo/brevo': specifier: 2.5.0 version: 2.5.0 '@hono/node-server': specifier: ^1.19.5 - version: 1.19.5(hono@4.9.11) + version: 1.19.5(hono@4.10.4) '@hono/zod-openapi': - specifier: 1.1.3 - version: 1.1.3(hono@4.9.11)(zod@4.1.12) + specifier: 1.1.4 + version: 1.1.4(hono@4.10.4)(zod@4.1.12) '@logtail/node': specifier: ^0.5.6 version: 0.5.6 @@ -82,8 +82,8 @@ importers: specifier: ^2.0.2 version: 2.0.2 '@novu/api': - specifier: ^1.7.1 - version: 1.7.1 + specifier: ^1.8.0 + version: 1.8.0 '@opentelemetry/api': specifier: ^1.9.0 version: 1.9.0 @@ -91,14 +91,14 @@ importers: specifier: ^0.206.0 version: 0.206.0(@opentelemetry/api@1.9.0) '@opentelemetry/resources': - specifier: ^2.1.0 - version: 2.1.0(@opentelemetry/api@1.9.0) + specifier: ^2.2.0 + version: 2.2.0(@opentelemetry/api@1.9.0) '@opentelemetry/sdk-node': specifier: ^0.206.0 version: 0.206.0(@opentelemetry/api@1.9.0) '@opentelemetry/sdk-trace-node': - specifier: ^2.1.0 - version: 2.1.0(@opentelemetry/api@1.9.0) + specifier: ^2.2.0 + version: 2.2.0(@opentelemetry/api@1.9.0) '@opentelemetry/semantic-conventions': specifier: ^1.37.0 version: 1.37.0 @@ -118,14 +118,14 @@ importers: specifier: ^3.3.0 version: 3.3.0 '@scalar/hono-api-reference': - specifier: ^0.9.21 - version: 0.9.21(hono@4.9.11) + specifier: ^0.9.22 + version: 0.9.22(hono@4.10.4) '@sendgrid/mail': specifier: ^8.1.6 version: 8.1.6 '@sentry/cli': - specifier: ^2.56.1 - version: 2.56.1 + specifier: ^2.57.0 + version: 2.57.0 '@sentry/node': specifier: ^9.46.0 version: 9.46.0 @@ -142,17 +142,17 @@ importers: specifier: workspace:* version: link:../config drizzle-orm: - specifier: ^0.44.6 - version: 0.44.6(@electric-sql/pglite@0.3.10)(@libsql/client-wasm@0.14.0)(@opentelemetry/api@1.9.0)(@types/pg@8.15.5)(gel@2.0.2)(pg@8.16.3)(postgres@3.4.7) + specifier: ^0.44.7 + version: 0.44.7(@electric-sql/pglite@0.3.11)(@libsql/client-wasm@0.14.0)(@opentelemetry/api@1.9.0)(@types/pg@8.15.6)(gel@2.0.2)(pg@8.16.3)(postgres@3.4.7) drizzle-zod: specifier: 0.8.3 - version: 0.8.3(drizzle-orm@0.44.6(@electric-sql/pglite@0.3.10)(@libsql/client-wasm@0.14.0)(@opentelemetry/api@1.9.0)(@types/pg@8.15.5)(gel@2.0.2)(pg@8.16.3)(postgres@3.4.7))(zod@4.1.12) + version: 0.8.3(drizzle-orm@0.44.7(@electric-sql/pglite@0.3.11)(@libsql/client-wasm@0.14.0)(@opentelemetry/api@1.9.0)(@types/pg@8.15.6)(gel@2.0.2)(pg@8.16.3)(postgres@3.4.7))(zod@4.1.12) enforce-unique: specifier: ^1.3.0 version: 1.3.0 hono: - specifier: 4.9.11 - version: 4.9.11 + specifier: 4.10.4 + version: 4.10.4 i18next: specifier: ^25.6.0 version: 25.6.0(typescript@5.9.3) @@ -160,14 +160,14 @@ importers: specifier: ^5.1.31 version: 5.1.31 jsdom: - specifier: ^27.0.0 - version: 27.0.0(canvas@3.2.0)(postcss@8.5.6) + specifier: ^27.0.1 + version: 27.0.1(canvas@3.2.0)(postcss@8.5.6) jsonwebtoken: specifier: ^9.0.2 version: 9.0.2 jsx-email: - specifier: ^2.7.4 - version: 2.7.4(@emotion/is-prop-valid@1.3.1)(@jsx-email/plugin-inline@1.0.1)(@jsx-email/plugin-minify@1.0.1)(@jsx-email/plugin-pretty@1.0.0)(@types/node@24.7.2)(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(lightningcss@1.30.1)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(terser@5.44.0)(ts-node@10.9.2(@swc/core@1.7.26)(@types/node@24.7.2)(typescript@5.9.3))(typescript@5.9.3) + specifier: ^2.8.1 + version: 2.8.1(@emotion/is-prop-valid@1.3.1)(@jsx-email/plugin-inline@1.0.1)(@jsx-email/plugin-minify@1.0.1)(@jsx-email/plugin-pretty@1.0.0)(@types/node@24.9.2)(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(jiti@2.6.1)(lightningcss@1.30.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(terser@5.44.0)(ts-node@10.9.2(@swc/core@1.7.26)(@types/node@24.9.2)(typescript@5.9.3))(tsx@4.20.6)(typescript@5.9.3)(yaml@2.8.1) locales: specifier: workspace:* version: link:../locales @@ -181,8 +181,8 @@ importers: specifier: ^8.16.3 version: 8.16.3 pino: - specifier: ^10.0.0 - version: 10.0.0 + specifier: ^10.1.0 + version: 10.1.0 pino-http: specifier: ^11.0.0 version: 11.0.0 @@ -190,8 +190,8 @@ importers: specifier: ^15.1.3 version: 15.1.3 rate-limiter-flexible: - specifier: ^8.0.1 - version: 8.0.1 + specifier: ^8.1.0 + version: 8.1.0 react: specifier: ^19.2.0 version: 19.2.0 @@ -199,8 +199,8 @@ importers: specifier: ^19.2.0 version: 19.2.0(react@19.2.0) react-i18next: - specifier: ^16.0.0 - version: 16.0.0(i18next@25.6.0(typescript@5.9.3))(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(typescript@5.9.3) + specifier: ^16.2.2 + version: 16.2.2(i18next@25.6.0(typescript@5.9.3))(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(typescript@5.9.3) slugify: specifier: ^1.6.6 version: 1.6.6 @@ -213,10 +213,10 @@ importers: devDependencies: '@commander-js/extra-typings': specifier: ^14.0.0 - version: 14.0.0(commander@14.0.1) + version: 14.0.0(commander@14.0.2) '@faker-js/faker': - specifier: ^10.0.0 - version: 10.0.0 + specifier: ^10.1.0 + version: 10.1.0 '@ngrok/ngrok': specifier: ^1.5.2 version: 1.5.2 @@ -227,14 +227,14 @@ importers: specifier: ^9.0.10 version: 9.0.10 '@types/node': - specifier: ^24.7.2 - version: 24.7.2 + specifier: ^24.9.2 + version: 24.9.2 '@types/papaparse': specifier: ^5.3.16 version: 5.3.16 '@types/pg': - specifier: ^8.15.5 - version: 8.15.5 + specifier: ^8.15.6 + version: 8.15.6 '@types/react': specifier: ^19.2.2 version: 19.2.2 @@ -248,8 +248,8 @@ importers: specifier: ^5.6.2 version: 5.6.2 commander: - specifier: ^14.0.1 - version: 14.0.1 + specifier: ^14.0.2 + version: 14.0.2 cross-env: specifier: ^10.1.0 version: 10.1.0 @@ -257,8 +257,8 @@ importers: specifier: ^17.2.3 version: 17.2.3 drizzle-kit: - specifier: ^0.31.5 - version: 0.31.5 + specifier: ^0.31.6 + version: 0.31.6 papaparse: specifier: ^5.5.3 version: 5.5.3 @@ -352,22 +352,22 @@ importers: version: 1.1.0 '@blocknote/code-block': specifier: 0.41.1 - version: 0.41.1(@blocknote/core@0.41.1(@hocuspocus/provider@2.15.2(y-protocols@1.0.6(yjs@13.6.27))(yjs@13.6.27))(@tiptap/extensions@3.6.5(@tiptap/core@3.6.6(@tiptap/pm@3.6.6))(@tiptap/pm@3.6.6))(@types/hast@3.0.4)(highlight.js@11.11.1)(lowlight@3.3.0)) + version: 0.41.1(@blocknote/core@0.41.1(@hocuspocus/provider@2.15.2(y-protocols@1.0.6(yjs@13.6.27))(yjs@13.6.27))(@tiptap/extensions@3.6.5(@tiptap/core@3.9.1(@tiptap/pm@3.9.1))(@tiptap/pm@3.9.1))(@types/hast@3.0.4)(highlight.js@11.11.1)(lowlight@3.3.0)) '@blocknote/core': specifier: 0.41.1 - version: 0.41.1(@hocuspocus/provider@2.15.2(y-protocols@1.0.6(yjs@13.6.27))(yjs@13.6.27))(@tiptap/extensions@3.6.5(@tiptap/core@3.6.6(@tiptap/pm@3.6.6))(@tiptap/pm@3.6.6))(@types/hast@3.0.4)(highlight.js@11.11.1)(lowlight@3.3.0) + version: 0.41.1(@hocuspocus/provider@2.15.2(y-protocols@1.0.6(yjs@13.6.27))(yjs@13.6.27))(@tiptap/extensions@3.6.5(@tiptap/core@3.9.1(@tiptap/pm@3.9.1))(@tiptap/pm@3.9.1))(@types/hast@3.0.4)(highlight.js@11.11.1)(lowlight@3.3.0) '@blocknote/react': specifier: 0.41.1 - version: 0.41.1(@floating-ui/dom@1.7.4)(@hocuspocus/provider@2.15.2(y-protocols@1.0.6(yjs@13.6.27))(yjs@13.6.27))(@tiptap/extensions@3.6.5(@tiptap/core@3.6.6(@tiptap/pm@3.6.6))(@tiptap/pm@3.6.6))(@types/hast@3.0.4)(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(highlight.js@11.11.1)(lowlight@3.3.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + version: 0.41.1(@floating-ui/dom@1.7.4)(@hocuspocus/provider@2.15.2(y-protocols@1.0.6(yjs@13.6.27))(yjs@13.6.27))(@tiptap/extensions@3.6.5(@tiptap/core@3.9.1(@tiptap/pm@3.9.1))(@tiptap/pm@3.9.1))(@types/hast@3.0.4)(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(highlight.js@11.11.1)(lowlight@3.3.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) '@blocknote/shadcn': specifier: 0.41.1 - version: 0.41.1(@floating-ui/dom@1.7.4)(@hocuspocus/provider@2.15.2(y-protocols@1.0.6(yjs@13.6.27))(yjs@13.6.27))(@tiptap/extensions@3.6.5(@tiptap/core@3.6.6(@tiptap/pm@3.6.6))(@tiptap/pm@3.6.6))(@types/hast@3.0.4)(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(highlight.js@11.11.1)(lowlight@3.3.0)(postcss@8.5.6)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(tailwindcss@4.1.14) + version: 0.41.1(@floating-ui/dom@1.7.4)(@hocuspocus/provider@2.15.2(y-protocols@1.0.6(yjs@13.6.27))(yjs@13.6.27))(@tiptap/extensions@3.6.5(@tiptap/core@3.9.1(@tiptap/pm@3.9.1))(@tiptap/pm@3.9.1))(@types/hast@3.0.4)(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(highlight.js@11.11.1)(lowlight@3.3.0)(postcss@8.5.6)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(tailwindcss@4.1.16) '@electric-sql/client': - specifier: 1.0.14 - version: 1.0.14 + specifier: 1.1.1 + version: 1.1.1 '@electric-sql/react': - specifier: 1.0.14 - version: 1.0.14(react@19.2.0) + specifier: 1.0.16 + version: 1.0.16(react@19.2.0) '@floating-ui/dom': specifier: ^1.7.4 version: 1.7.4 @@ -388,160 +388,160 @@ importers: version: 1.4.2 '@radix-ui/react-accordion': specifier: ^1.2.12 - version: 1.2.12(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + version: 1.2.12(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) '@radix-ui/react-alert-dialog': specifier: ^1.1.15 - version: 1.1.15(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + version: 1.1.15(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) '@radix-ui/react-avatar': specifier: ^1.1.10 - version: 1.1.10(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + version: 1.1.10(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) '@radix-ui/react-checkbox': specifier: ^1.3.3 - version: 1.3.3(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + version: 1.3.3(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) '@radix-ui/react-collapsible': specifier: ^1.1.12 - version: 1.1.12(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + version: 1.1.12(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) '@radix-ui/react-context-menu': specifier: ^2.2.16 - version: 2.2.16(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + version: 2.2.16(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) '@radix-ui/react-dialog': specifier: ^1.1.15 - version: 1.1.15(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + version: 1.1.15(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) '@radix-ui/react-dropdown-menu': specifier: ^2.1.16 - version: 2.1.16(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + version: 2.1.16(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) '@radix-ui/react-hover-card': specifier: ^1.1.15 - version: 1.1.15(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + version: 1.1.15(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) '@radix-ui/react-label': specifier: ^2.1.7 - version: 2.1.7(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + version: 2.1.7(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) '@radix-ui/react-popover': specifier: ^1.1.15 - version: 1.1.15(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + version: 1.1.15(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) '@radix-ui/react-progress': specifier: ^1.1.7 - version: 1.1.7(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + version: 1.1.7(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) '@radix-ui/react-radio-group': specifier: ^1.3.8 - version: 1.3.8(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + version: 1.3.8(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) '@radix-ui/react-scroll-area': specifier: ^1.2.10 - version: 1.2.10(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + version: 1.2.10(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) '@radix-ui/react-select': specifier: ^2.2.6 - version: 2.2.6(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + version: 2.2.6(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) '@radix-ui/react-separator': specifier: ^1.1.7 - version: 1.1.7(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + version: 1.1.7(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) '@radix-ui/react-slider': specifier: ^1.3.6 - version: 1.3.6(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + version: 1.3.6(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) '@radix-ui/react-slot': specifier: ^1.2.3 version: 1.2.3(@types/react@19.2.2)(react@19.2.0) '@radix-ui/react-switch': specifier: ^1.2.6 - version: 1.2.6(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + version: 1.2.6(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) '@radix-ui/react-tabs': specifier: ^1.1.13 - version: 1.1.13(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + version: 1.1.13(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) '@radix-ui/react-toast': specifier: ^1.2.15 - version: 1.2.15(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + version: 1.2.15(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) '@radix-ui/react-toggle': specifier: ^1.1.10 - version: 1.1.10(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + version: 1.1.10(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) '@radix-ui/react-toggle-group': specifier: ^1.1.11 - version: 1.1.11(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + version: 1.1.11(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) '@radix-ui/react-tooltip': specifier: ^1.2.8 - version: 1.2.8(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + version: 1.2.8(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) '@radix-ui/react-visually-hidden': specifier: ^1.2.3 - version: 1.2.3(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + version: 1.2.3(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) '@sentry/react': - specifier: ^9.46.0 - version: 9.46.0(react@19.2.0) + specifier: ^10.22.0 + version: 10.22.0(react@19.2.0) '@t3-oss/env-core': specifier: ^0.13.8 version: 0.13.8(arktype@2.1.20)(typescript@5.9.3)(zod@4.1.12) '@tailwindcss/typography': specifier: ^0.5.19 - version: 0.5.19(tailwindcss@4.1.14) + version: 0.5.19(tailwindcss@4.1.16) '@tanstack/query-sync-storage-persister': - specifier: ^5.90.4 - version: 5.90.4 + specifier: ^5.90.7 + version: 5.90.7 '@tanstack/react-query': - specifier: ^5.90.2 - version: 5.90.2(react@19.2.0) + specifier: ^5.90.5 + version: 5.90.5(react@19.2.0) '@tanstack/react-query-devtools': specifier: ^5.90.2 - version: 5.90.2(@tanstack/react-query@5.90.2(react@19.2.0))(react@19.2.0) + version: 5.90.2(@tanstack/react-query@5.90.5(react@19.2.0))(react@19.2.0) '@tanstack/react-query-persist-client': - specifier: ^5.90.4 - version: 5.90.4(@tanstack/react-query@5.90.2(react@19.2.0))(react@19.2.0) + specifier: ^5.90.7 + version: 5.90.7(@tanstack/react-query@5.90.5(react@19.2.0))(react@19.2.0) '@tanstack/react-router': - specifier: ^1.132.47 - version: 1.132.47(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + specifier: ^1.133.36 + version: 1.133.36(react-dom@19.2.0(react@19.2.0))(react@19.2.0) '@tanstack/react-router-devtools': - specifier: ^1.132.51 - version: 1.132.51(@tanstack/react-router@1.132.47(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(@tanstack/router-core@1.132.47)(@types/node@24.7.2)(csstype@3.1.3)(jiti@2.6.1)(lightningcss@1.30.1)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(solid-js@1.9.9)(terser@5.44.0)(tiny-invariant@1.3.3)(tsx@4.20.6)(yaml@2.8.1) + specifier: ^1.133.36 + version: 1.133.36(@tanstack/react-router@1.133.36(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(@tanstack/router-core@1.133.36)(@types/node@24.9.2)(csstype@3.1.3)(jiti@2.6.1)(lightningcss@1.30.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(solid-js@1.9.9)(terser@5.44.0)(tiny-invariant@1.3.3)(tsx@4.20.6)(yaml@2.8.1) '@uppy/audio': specifier: ^3.0.1 - version: 3.0.1(@uppy/core@5.1.0) + version: 3.0.1(@uppy/core@5.1.1) '@uppy/core': - specifier: ^5.1.0 - version: 5.1.0 + specifier: ^5.1.1 + version: 5.1.1 '@uppy/dashboard': - specifier: ^5.0.2 - version: 5.0.2(@uppy/core@5.1.0) + specifier: ^5.0.3 + version: 5.0.3(@uppy/core@5.1.1) '@uppy/drag-drop': specifier: ^5.0.2 - version: 5.0.2(@uppy/core@5.1.0) + version: 5.0.2(@uppy/core@5.1.1) '@uppy/file-input': specifier: ^4.2.2 - version: 4.2.2(@uppy/core@5.1.0) + version: 4.2.2(@uppy/core@5.1.1) '@uppy/image-editor': - specifier: ^4.0.1 - version: 4.0.1(@uppy/core@5.1.0) + specifier: ^4.0.2 + version: 4.0.2(@uppy/core@5.1.1) '@uppy/progress-bar': specifier: ^4.3.2 - version: 4.3.2(@uppy/core@5.1.0) + version: 4.3.2(@uppy/core@5.1.1) '@uppy/provider-views': - specifier: ^5.1.0 - version: 5.1.0(@uppy/core@5.1.0) + specifier: 5.1.1 + version: 5.1.1(@uppy/core@5.1.1) '@uppy/react': - specifier: ^5.1.0 - version: 5.1.0(@uppy/core@5.1.0)(@uppy/dashboard@5.0.2(@uppy/core@5.1.0))(@uppy/screen-capture@5.0.1(@uppy/core@5.1.0))(@uppy/status-bar@5.0.1(@uppy/core@5.1.0))(@uppy/webcam@5.0.1(@uppy/core@5.1.0))(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + specifier: 5.1.0 + version: 5.1.0(@uppy/core@5.1.1)(@uppy/dashboard@5.0.3(@uppy/core@5.1.1))(@uppy/image-editor@4.0.2(@uppy/core@5.1.1))(@uppy/screen-capture@5.0.1(@uppy/core@5.1.1))(@uppy/status-bar@5.0.2(@uppy/core@5.1.1))(@uppy/webcam@5.0.2(@uppy/core@5.1.1))(react-dom@19.2.0(react@19.2.0))(react@19.2.0) '@uppy/remote-sources': specifier: ^3.0.1 - version: 3.0.1(@uppy/core@5.1.0) + version: 3.0.1(@uppy/core@5.1.1) '@uppy/screen-capture': specifier: ^5.0.1 - version: 5.0.1(@uppy/core@5.1.0) + version: 5.0.1(@uppy/core@5.1.1) '@uppy/status-bar': - specifier: ^5.0.1 - version: 5.0.1(@uppy/core@5.1.0) + specifier: ^5.0.2 + version: 5.0.2(@uppy/core@5.1.1) '@uppy/transloadit': - specifier: 5.0.1 - version: 5.0.1(@uppy/core@5.1.0) + specifier: 5.2.0 + version: 5.2.0(@uppy/core@5.1.1) '@uppy/tus': - specifier: ^5.0.1 - version: 5.0.1(@uppy/core@5.1.0) + specifier: ^5.0.2 + version: 5.0.2(@uppy/core@5.1.1) '@uppy/url': - specifier: ^5.0.1 - version: 5.0.1(@uppy/core@5.1.0) + specifier: ^5.0.2 + version: 5.0.2(@uppy/core@5.1.1) '@uppy/webcam': - specifier: ^5.0.1 - version: 5.0.1(@uppy/core@5.1.0) + specifier: ^5.0.2 + version: 5.0.2(@uppy/core@5.1.1) '@vis.gl/react-google-maps': - specifier: ^1.5.5 - version: 1.5.5(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + specifier: ^1.6.1 + version: 1.6.1(react-dom@19.2.0(react@19.2.0))(react@19.2.0) canvas-confetti: - specifier: ^1.9.3 - version: 1.9.3 + specifier: ^1.9.4 + version: 1.9.4 class-variance-authority: specifier: ^0.7.1 version: 0.7.1 @@ -550,7 +550,7 @@ importers: version: 2.1.1 cmdk: specifier: ^1.1.1 - version: 1.1.1(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + version: 1.1.1(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) concurrently: specifier: ^9.2.1 version: 9.2.1 @@ -585,8 +585,8 @@ importers: specifier: ^6.2.2 version: 6.2.2 immer: - specifier: ^10.1.3 - version: 10.1.3 + specifier: ^10.2.0 + version: 10.2.0 input-otp: specifier: ^1.4.2 version: 1.4.2(react-dom@19.2.0(react@19.2.0))(react@19.2.0) @@ -657,8 +657,8 @@ importers: specifier: ^1.3.0 version: 1.3.0(react@19.2.0) recharts: - specifier: ^3.2.1 - version: 3.2.1(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react-is@18.3.1)(react@19.2.0)(redux@5.0.1) + specifier: ^3.3.0 + version: 3.3.0(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react-is@18.3.1)(react@19.2.0)(redux@5.0.1) slugify: specifier: 1.6.6 version: 1.6.6 @@ -669,23 +669,23 @@ importers: specifier: ^3.3.1 version: 3.3.1 tailwindcss: - specifier: ^4.1.14 - version: 4.1.14 + specifier: ^4.1.16 + version: 4.1.16 tailwindcss-animate: specifier: ^1.0.7 - version: 1.0.7(tailwindcss@4.1.14) + version: 1.0.7(tailwindcss@4.1.16) use-count-up: specifier: ^3.0.1 version: 3.0.1(react@19.2.0) vaul: specifier: ^1.1.2 - version: 1.1.2(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + version: 1.1.2(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) virtua: - specifier: ^0.45.2 - version: 0.45.2(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(solid-js@1.9.9)(vue@3.5.13(typescript@5.9.3)) + specifier: ^0.46.4 + version: 0.46.4(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(solid-js@1.9.9)(vue@3.5.13(typescript@5.9.3)) vitest: specifier: ^3.2.4 - version: 3.2.4(@types/debug@4.1.12)(@types/node@24.7.2)(@vitest/browser@3.2.4)(jiti@2.6.1)(jsdom@27.0.0(canvas@3.2.0)(postcss@8.5.6))(lightningcss@1.30.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1) + version: 3.2.4(@types/debug@4.1.12)(@types/node@24.9.2)(@vitest/browser@3.2.4)(jiti@2.6.1)(jsdom@27.0.1(canvas@3.2.0)(postcss@8.5.6))(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1) workbox-window: specifier: ^7.3.0 version: 7.3.0 @@ -694,59 +694,59 @@ importers: version: 4.1.12 zustand: specifier: ^5.0.8 - version: 5.0.8(@types/react@19.2.2)(immer@10.1.3)(react@19.2.0)(use-sync-external-store@1.6.0(react@19.2.0)) + version: 5.0.8(@types/react@19.2.2)(immer@10.2.0)(react@19.2.0)(use-sync-external-store@1.6.0(react@19.2.0)) zxcvbn: specifier: ^4.4.2 version: 4.4.2 devDependencies: '@chromatic-com/storybook': - specifier: ^4.1.1 - version: 4.1.1(storybook@9.1.10(@testing-library/dom@10.4.1)(prettier@3.6.2)(vite@7.1.9(@types/node@24.7.2)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1))) + specifier: ^4.1.2 + version: 4.1.2(storybook@9.1.16(@testing-library/dom@10.4.1)(prettier@3.6.2)(vite@7.1.12(@types/node@24.9.2)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1))) '@hey-api/openapi-ts': - specifier: ^0.85.1 - version: 0.85.1(magicast@0.3.5)(typescript@5.9.3) + specifier: ^0.86.11 + version: 0.86.11(magicast@0.3.5)(typescript@5.9.3) '@react-scan/vite-plugin-react-scan': specifier: ^0.1.8 - version: 0.1.8(react-scan@0.4.3(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react-router-dom@7.5.2(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(react-router@7.5.2(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(react@19.2.0)(rollup@2.79.2))(vite@7.1.9(@types/node@24.7.2)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)) + version: 0.1.8(react-scan@0.4.3(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react-router-dom@7.5.2(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(react-router@7.5.2(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(react@19.2.0)(rollup@2.79.2))(vite@7.1.12(@types/node@24.9.2)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)) '@rollup/plugin-terser': specifier: ^0.4.4 version: 0.4.4(rollup@2.79.2) '@sentry/vite-plugin': - specifier: ^3.6.1 - version: 3.6.1 + specifier: ^4.6.0 + version: 4.6.0 '@storybook/addon-a11y': - specifier: ^9.1.10 - version: 9.1.10(storybook@9.1.10(@testing-library/dom@10.4.1)(prettier@3.6.2)(vite@7.1.9(@types/node@24.7.2)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1))) + specifier: ^9.1.16 + version: 9.1.16(storybook@9.1.16(@testing-library/dom@10.4.1)(prettier@3.6.2)(vite@7.1.12(@types/node@24.9.2)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1))) '@storybook/addon-docs': - specifier: ^9.1.10 - version: 9.1.10(@types/react@19.2.2)(storybook@9.1.10(@testing-library/dom@10.4.1)(prettier@3.6.2)(vite@7.1.9(@types/node@24.7.2)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1))) + specifier: ^9.1.16 + version: 9.1.16(@types/react@19.2.2)(storybook@9.1.16(@testing-library/dom@10.4.1)(prettier@3.6.2)(vite@7.1.12(@types/node@24.9.2)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1))) '@storybook/addon-vitest': - specifier: ^9.1.10 - version: 9.1.10(@vitest/browser@3.2.4)(@vitest/runner@3.2.4)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(storybook@9.1.10(@testing-library/dom@10.4.1)(prettier@3.6.2)(vite@7.1.9(@types/node@24.7.2)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)))(vitest@3.2.4) + specifier: ^9.1.16 + version: 9.1.16(@vitest/browser@3.2.4)(@vitest/runner@3.2.4)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(storybook@9.1.16(@testing-library/dom@10.4.1)(prettier@3.6.2)(vite@7.1.12(@types/node@24.9.2)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)))(vitest@3.2.4) '@storybook/react-vite': - specifier: ^9.1.10 - version: 9.1.10(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(rollup@2.79.2)(storybook@9.1.10(@testing-library/dom@10.4.1)(prettier@3.6.2)(vite@7.1.9(@types/node@24.7.2)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)))(typescript@5.9.3)(vite@7.1.9(@types/node@24.7.2)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)) + specifier: ^9.1.16 + version: 9.1.16(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(rollup@2.79.2)(storybook@9.1.16(@testing-library/dom@10.4.1)(prettier@3.6.2)(vite@7.1.12(@types/node@24.9.2)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)))(typescript@5.9.3)(vite@7.1.12(@types/node@24.9.2)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)) '@tailwindcss/vite': - specifier: ^4.1.14 - version: 4.1.14(vite@7.1.9(@types/node@24.7.2)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)) + specifier: ^4.1.16 + version: 4.1.16(vite@7.1.12(@types/node@24.9.2)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)) '@tanstack/router-core': - specifier: ^1.132.47 - version: 1.132.47 + specifier: ^1.133.36 + version: 1.133.36 '@tanstack/router-plugin': - specifier: ^1.132.51 - version: 1.132.51(@tanstack/react-router@1.132.47(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(vite@7.1.9(@types/node@24.7.2)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)) + specifier: ^1.133.36 + version: 1.133.36(@tanstack/react-router@1.133.36(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(vite@7.1.12(@types/node@24.9.2)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)) '@types/canvas-confetti': specifier: ^1.9.0 version: 1.9.0 '@types/node': - specifier: ^24.7.2 - version: 24.7.2 + specifier: ^24.9.2 + version: 24.9.2 '@types/react': specifier: ^19.2.2 version: 19.2.2 '@types/react-dom': - specifier: ^19.2.1 - version: 19.2.1(@types/react@19.2.2) + specifier: ^19.2.2 + version: 19.2.2(@types/react@19.2.2) '@types/zxcvbn': specifier: ^4.4.5 version: 4.4.5 @@ -755,13 +755,13 @@ importers: version: 7.0.0-dev.20250910.1 '@vitejs/plugin-basic-ssl': specifier: ^2.1.0 - version: 2.1.0(vite@7.1.9(@types/node@24.7.2)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)) + version: 2.1.0(vite@7.1.12(@types/node@24.9.2)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)) '@vitejs/plugin-react': - specifier: ^5.0.4 - version: 5.0.4(vite@7.1.9(@types/node@24.7.2)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)) + specifier: ^5.1.0 + version: 5.1.0(vite@7.1.12(@types/node@24.9.2)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)) '@vitest/browser': specifier: ^3.2.4 - version: 3.2.4(playwright@1.56.0)(vite@7.1.9(@types/node@24.7.2)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1))(vitest@3.2.4) + version: 3.2.4(playwright@1.56.1)(vite@7.1.12(@types/node@24.9.2)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1))(vitest@3.2.4) '@vitest/coverage-v8': specifier: ^3.2.4 version: 3.2.4(@vitest/browser@3.2.4)(vitest@3.2.4) @@ -772,11 +772,11 @@ importers: specifier: ^10.1.0 version: 10.1.0 hono: - specifier: 4.9.11 - version: 4.9.11 + specifier: 4.10.4 + version: 4.10.4 playwright: - specifier: ^1.56.0 - version: 1.56.0 + specifier: ^1.56.1 + version: 1.56.1 postgres: specifier: ^3.4.7 version: 3.4.7 @@ -784,11 +784,11 @@ importers: specifier: ^0.4.3 version: 0.4.3(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react-router-dom@7.5.2(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(react-router@7.5.2(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(react@19.2.0)(rollup@2.79.2) rollup-plugin-visualizer: - specifier: ^6.0.4 - version: 6.0.4(rollup@2.79.2) + specifier: ^6.0.5 + version: 6.0.5(rollup@2.79.2) storybook: - specifier: ^9.1.10 - version: 9.1.10(@testing-library/dom@10.4.1)(prettier@3.6.2)(vite@7.1.9(@types/node@24.7.2)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)) + specifier: ^9.1.16 + version: 9.1.16(@testing-library/dom@10.4.1)(prettier@3.6.2)(vite@7.1.12(@types/node@24.9.2)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)) tsx: specifier: ^4.20.6 version: 4.20.6 @@ -796,20 +796,20 @@ importers: specifier: ^5.9.3 version: 5.9.3 vite: - specifier: ^7.1.9 - version: 7.1.9(@types/node@24.7.2)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1) + specifier: ^7.1.12 + version: 7.1.12(@types/node@24.9.2)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1) vite-plugin-html: specifier: ^3.2.2 - version: 3.2.2(vite@7.1.9(@types/node@24.7.2)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)) + version: 3.2.2(vite@7.1.12(@types/node@24.9.2)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)) vite-plugin-pwa: - specifier: ^1.0.3 - version: 1.0.3(vite@7.1.9(@types/node@24.7.2)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1))(workbox-build@7.3.0(@types/babel__core@7.20.5))(workbox-window@7.3.0) + specifier: ^1.1.0 + version: 1.1.0(vite@7.1.12(@types/node@24.9.2)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1))(workbox-build@7.3.0(@types/babel__core@7.20.5))(workbox-window@7.3.0) vite-plugin-static-copy: - specifier: ^3.1.3 - version: 3.1.3(vite@7.1.9(@types/node@24.7.2)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)) + specifier: ^3.1.4 + version: 3.1.4(vite@7.1.12(@types/node@24.9.2)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)) vite-tsconfig-paths: specifier: ^5.1.4 - version: 5.1.4(typescript@5.9.3)(vite@7.1.9(@types/node@24.7.2)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)) + version: 5.1.4(typescript@5.9.3)(vite@7.1.12(@types/node@24.9.2)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)) wait-on: specifier: ^9.0.1 version: 9.0.1 @@ -865,8 +865,8 @@ packages: '@asamuzakjp/css-color@4.0.5': resolution: {integrity: sha512-lMrXidNhPGsDjytDy11Vwlb6OIGrT3CmLg3VWNFyWkLWtijKl7xjvForlh8vuj0SHGjgl4qZEQzUmYTeQA2JFQ==} - '@asamuzakjp/dom-selector@6.6.2': - resolution: {integrity: sha512-+AG0jN9HTwfDLBhjhX1FKi6zlIAc/YGgEHlN/OMaHD1pOPFsC5CpYQpLkPX0aFjyaVmoq9330cQDCU4qnSL1qA==} + '@asamuzakjp/dom-selector@6.7.3': + resolution: {integrity: sha512-kiGFeY+Hxf5KbPpjRLf+ffWbkos1aGo8MBfd91oxS3O57RgU3XhZrt/6UzoVF9VMpWbC3v87SRc9jxGrc9qHtQ==} '@asamuzakjp/nwsapi@2.3.9': resolution: {integrity: sha512-n8GuYSrI9bF7FFZ/SjhwevlHc8xaVlb/7HmHelnc/PZXBD2ZR49NnN9sMMuDdEGPeeRQ5d0hqlSlEpgCX3Wl0Q==} @@ -908,141 +908,141 @@ packages: '@aws-crypto/util@5.2.0': resolution: {integrity: sha512-4RkU9EsI6ZpBve5fseQlGNUWKMa1RLPQ1dnjnQoe07ldfIzcsGb5hC5W0Dm7u423KWzawlrpbjXBrXCEv9zazQ==} - '@aws-sdk/client-s3@3.908.0': - resolution: {integrity: sha512-c/89iG3of8UEiWbRK014DoHLy8PLLTJtM9IvYLPsvrf83kpV2P/K9WrdbjW4h6e5qt9XPgfNTZ8U607mt7pdmA==} + '@aws-sdk/client-s3@3.920.0': + resolution: {integrity: sha512-doFql/xFH8XryfH07H/TBRs54QhRIn1mFqonfEOOB8k7gLv47hIyQm//wrd31Y85WynV/MkyT3bDIcD8gJxQ3w==} engines: {node: '>=18.0.0'} - '@aws-sdk/client-sso@3.908.0': - resolution: {integrity: sha512-PseFMWvtac+Q+zaY9DMISE+2+glNh0ROJ1yR4gMzeafNHSwkdYu4qcgxLWIOnIodGydBv/tQ6nzHPzExXnUUgw==} + '@aws-sdk/client-sso@3.920.0': + resolution: {integrity: sha512-m/Gb/ojGX4uqJAcvFWCbutVBnRXAKnlU+rrHUy3ugmg4lmMl1RjP4mwqlj+p+thCq2OmoEJtqZIuO2a/5N/NPA==} engines: {node: '>=18.0.0'} - '@aws-sdk/cloudfront-signer@3.901.0': - resolution: {integrity: sha512-+yOAdoL57A9Y5OZJcU8m5zMoYCSHTzGp7StXsdt2h2oYLTa5r+fQXJU+P+6DVmVbDpy1ApeuZJOU4Q5LiiOpYg==} + '@aws-sdk/cloudfront-signer@3.916.0': + resolution: {integrity: sha512-R7QET9bdRNbA/t3nh3IHdbMRV9GLUZhp/ZEC8BFh1Lk67dREVU4vJrvNYX8M2mgRGwjODF6IbEjedZM4lbyg0g==} engines: {node: '>=18.0.0'} - '@aws-sdk/core@3.908.0': - resolution: {integrity: sha512-okl6FC2cQT1Oidvmnmvyp/IEvqENBagKO0ww4YV5UtBkf0VlhAymCWkZqhovtklsqgq0otag2VRPAgnrMt6nVQ==} + '@aws-sdk/core@3.920.0': + resolution: {integrity: sha512-vETnyaBJgIK6dh0hXzxw8e6v9SEFs/NgP6fJOn87QC+0M8U/omaB298kJ+i7P3KJafW6Pv/CWTsciMP/NNrg6A==} engines: {node: '>=18.0.0'} - '@aws-sdk/credential-provider-env@3.908.0': - resolution: {integrity: sha512-FK2YuxoI5CxUflPOIMbVAwDbi6Xvu+2sXopXLmrHc2PfI39M3vmjEoQwYCP8WuQSRb+TbAP3xAkxHjFSBFR35w==} + '@aws-sdk/credential-provider-env@3.920.0': + resolution: {integrity: sha512-f8AcW9swaoJnJIj43TNyUVCR7ToEbUftD9y5Ht6IwNhRq2iPwZ7uTvgrkjfdxOayj1uD7Gw5MkeC3Ki5lcsasA==} engines: {node: '>=18.0.0'} - '@aws-sdk/credential-provider-http@3.908.0': - resolution: {integrity: sha512-eLbz0geVW9EykujQNnYfR35Of8MreI6pau5K6XDFDUSWO9GF8wqH7CQwbXpXHBlCTHtq4QSLxzorD8U5CROhUw==} + '@aws-sdk/credential-provider-http@3.920.0': + resolution: {integrity: sha512-C75OGAnyHuILiIFfwbSUyV1YIJvcQt2U63IqlZ25eufV1NA+vP3Y60nvaxrzSxvditxXL95+YU3iLa4n2M0Omw==} engines: {node: '>=18.0.0'} - '@aws-sdk/credential-provider-ini@3.908.0': - resolution: {integrity: sha512-7Cgnv5wabgFtsgr+Uc/76EfPNGyxmbG8aICn3g3D3iJlcO4uuOZI8a77i0afoDdchZrTC6TG6UusS/NAW6zEoQ==} + '@aws-sdk/credential-provider-ini@3.920.0': + resolution: {integrity: sha512-rwTWfPhE2cs1kQ5dBpOEedhlzNcXf9LRzd9K4rn577pLJiWUc/n/Ibh4Hvw8Px1cp9krIk1q6wo+iK+kLQD8YA==} engines: {node: '>=18.0.0'} - '@aws-sdk/credential-provider-node@3.908.0': - resolution: {integrity: sha512-8OKbykpGw5bdfF/pLTf8YfUi1Kl8o1CTjBqWQTsLOkE3Ho3hsp1eQx8Cz4ttrpv0919kb+lox62DgmAOEmTr1w==} + '@aws-sdk/credential-provider-node@3.920.0': + resolution: {integrity: sha512-PGlmTe22KOLzk79urV7ILRF2ka3RXkiS6B5dgJC+OUjf209plcI+fs/p/sGdKCGCrPCYWgTHgqpyY2c8nO9B2A==} engines: {node: '>=18.0.0'} - '@aws-sdk/credential-provider-process@3.908.0': - resolution: {integrity: sha512-sWnbkGjDPBi6sODUzrAh5BCDpnPw0wpK8UC/hWI13Q8KGfyatAmCBfr+9OeO3+xBHa8N5AskMncr7C4qS846yQ==} + '@aws-sdk/credential-provider-process@3.920.0': + resolution: {integrity: sha512-7dc0L0BCme4P17BgK/RtWLmwnM/R+si4Xd1cZe1oBLWRV+s++AXU/nDwfy1ErOLVpE9+lGG3Iw5zEPA/pJc7gQ==} engines: {node: '>=18.0.0'} - '@aws-sdk/credential-provider-sso@3.908.0': - resolution: {integrity: sha512-WV/aOzuS6ZZhrkPty6TJ3ZG24iS8NXP0m3GuTVuZ5tKi9Guss31/PJ1CrKPRCYGm15CsIjf+mrUxVnNYv9ap5g==} + '@aws-sdk/credential-provider-sso@3.920.0': + resolution: {integrity: sha512-+g1ajAa7nZGyLjKvQTzbasFvBwVWqMYSJl/3GbM61rpgjyHjeTPDZy2WXpQcpVGeCp6fWJG3J36Qjj7f9pfNeQ==} engines: {node: '>=18.0.0'} - '@aws-sdk/credential-provider-web-identity@3.908.0': - resolution: {integrity: sha512-9xWrFn6nWlF5KlV4XYW+7E6F33S3wUUEGRZ/+pgDhkIZd527ycT2nPG2dZ3fWUZMlRmzijP20QIJDqEbbGWe1Q==} + '@aws-sdk/credential-provider-web-identity@3.920.0': + resolution: {integrity: sha512-B/YX/5A9LcYBLMjb9Fjn88KEJXdl22dSGwLfW/iHr/ET7XrZgc2Vh+f0KtsH+0GOa/uq7m1G6rIuvQ6FojpJ1A==} engines: {node: '>=18.0.0'} - '@aws-sdk/lib-storage@3.908.0': - resolution: {integrity: sha512-tWYvGPAImOHSGYyau5rrVQA3OS0MV8ZCgf5ywtRIAmMEV4CSctDBP8WR2FrO7shAPKMRkjgdul5f0pZAjOYd2Q==} + '@aws-sdk/lib-storage@3.920.0': + resolution: {integrity: sha512-OgCjbdgdS4x/uN8qZegXzGlqLBBTrQe2wnrsdr4Z58ch802fVaBPlxGOIPpA4LzhnDYr61m/fR7lsVi88/wE/Q==} engines: {node: '>=18.0.0'} peerDependencies: - '@aws-sdk/client-s3': ^3.908.0 + '@aws-sdk/client-s3': ^3.920.0 - '@aws-sdk/middleware-bucket-endpoint@3.901.0': - resolution: {integrity: sha512-mPF3N6eZlVs9G8aBSzvtoxR1RZqMo1aIwR+X8BAZSkhfj55fVF2no4IfPXfdFO3I66N+zEQ8nKoB0uTATWrogQ==} + '@aws-sdk/middleware-bucket-endpoint@3.920.0': + resolution: {integrity: sha512-hcVmeAuzaXIWzSkkvELgs6J/N4G8QNa8k83pxZFkgWcc7k2LIw4Itr0Kou01rfQGR12AnKpIm0Nq1ta6D9/qDw==} engines: {node: '>=18.0.0'} - '@aws-sdk/middleware-expect-continue@3.901.0': - resolution: {integrity: sha512-bwq9nj6MH38hlJwOY9QXIDwa6lI48UsaZpaXbdD71BljEIRlxDzfB4JaYb+ZNNK7RIAdzsP/K05mJty6KJAQHw==} + '@aws-sdk/middleware-expect-continue@3.920.0': + resolution: {integrity: sha512-jbSkaid8sDa92kiJMAdkmwBcJHwCYk6fk0OINReD8bpUv4aAxSScU5mWMMyi/zjOik9j+cqLwsfqVnxothnn+g==} engines: {node: '>=18.0.0'} - '@aws-sdk/middleware-flexible-checksums@3.908.0': - resolution: {integrity: sha512-hYGhNBvdfnxhhywYRkesdxIZD8rvhsp2CBci5kCqrR2o5VvEkn5+waUQtkREtkciEpC4ent4fadg7N9XfTKvgQ==} + '@aws-sdk/middleware-flexible-checksums@3.920.0': + resolution: {integrity: sha512-+MlF9LV1B47sEwvCNl5A62uGlZr8T3XeGuaktYyHYwjav2OdSO7j+MyZ5DZNgTxNcDzzvmnb+e02476HrQvSNA==} engines: {node: '>=18.0.0'} - '@aws-sdk/middleware-host-header@3.901.0': - resolution: {integrity: sha512-yWX7GvRmqBtbNnUW7qbre3GvZmyYwU0WHefpZzDTYDoNgatuYq6LgUIQ+z5C04/kCRoFkAFrHag8a3BXqFzq5A==} + '@aws-sdk/middleware-host-header@3.920.0': + resolution: {integrity: sha512-XQv9GRKGhXuWv797l/GnE9pt4UhlbzY39f2G3prcsLJCLyeIMeZ00QACIyshlArQ3ZhJp5FCRGGBcoSPQ2nk0Q==} engines: {node: '>=18.0.0'} - '@aws-sdk/middleware-location-constraint@3.901.0': - resolution: {integrity: sha512-MuCS5R2ngNoYifkVt05CTULvYVWX0dvRT0/Md4jE3a0u0yMygYy31C1zorwfE/SUgAQXyLmUx8ATmPp9PppImQ==} + '@aws-sdk/middleware-location-constraint@3.920.0': + resolution: {integrity: sha512-tQpSkmkFGRWX9XyV9wN7hjH64QdPYCXmFzvLBk45ptUp7aLMev0irVvHwJrctClD7T74j1xeHNx6l1iwmzUZmA==} engines: {node: '>=18.0.0'} - '@aws-sdk/middleware-logger@3.901.0': - resolution: {integrity: sha512-UoHebjE7el/tfRo8/CQTj91oNUm+5Heus5/a4ECdmWaSCHCS/hXTsU3PTTHAY67oAQR8wBLFPfp3mMvXjB+L2A==} + '@aws-sdk/middleware-logger@3.920.0': + resolution: {integrity: sha512-96v4hvJ9Cg/+XTYtM2aVTwZPzDOwyUiBh+FLioMng32mR64ofO1lvet4Zi1Uer9j7s086th3DJWkvqpi3K83dQ==} engines: {node: '>=18.0.0'} - '@aws-sdk/middleware-recursion-detection@3.901.0': - resolution: {integrity: sha512-Wd2t8qa/4OL0v/oDpCHHYkgsXJr8/ttCxrvCKAt0H1zZe2LlRhY9gpDVKqdertfHrHDj786fOvEQA28G1L75Dg==} + '@aws-sdk/middleware-recursion-detection@3.920.0': + resolution: {integrity: sha512-5OfZ4RDYAW08kxMaGxIebJoUhzH7/MpGOoPzVMfxxfGbf+e4p0DNHJ9EL6msUAsbGBhGccDl1b4aytnYW+IkgA==} engines: {node: '>=18.0.0'} - '@aws-sdk/middleware-sdk-s3@3.908.0': - resolution: {integrity: sha512-23MbAOHsGaD0kTVMVLumaIM1f9vtDImIn2lSvPullbjFHKS4XxfrKuPumtKDzl8gzcux+98XnmfDRKH0fzkOUA==} + '@aws-sdk/middleware-sdk-s3@3.920.0': + resolution: {integrity: sha512-VmqcDyuZweqplI9XtDSg5JJfNs6BMuf6x0W3MxFeiTQu89b6RP0ATNsHYGLIp8dx7xuNNnHcRKZW0xAXqj1yDQ==} engines: {node: '>=18.0.0'} - '@aws-sdk/middleware-ssec@3.901.0': - resolution: {integrity: sha512-YiLLJmA3RvjL38mFLuu8fhTTGWtp2qT24VqpucgfoyziYcTgIQkJJmKi90Xp6R6/3VcArqilyRgM1+x8i/em+Q==} + '@aws-sdk/middleware-ssec@3.920.0': + resolution: {integrity: sha512-vqJRln5iL1yHpkViylIAT2x0XvNzvcmu6uRbu89NuqHfiZMEUhh+4lbuuyeZ/MTGqh+nwrmbjwxcmx8qhHU9rQ==} engines: {node: '>=18.0.0'} - '@aws-sdk/middleware-user-agent@3.908.0': - resolution: {integrity: sha512-R0ePEOku72EvyJWy/D0Z5f/Ifpfxa0U9gySO3stpNhOox87XhsILpcIsCHPy0OHz1a7cMoZsF6rMKSzDeCnogQ==} + '@aws-sdk/middleware-user-agent@3.920.0': + resolution: {integrity: sha512-7kvJyz7a1v0C243DJUZTu4C++4U5gyFYKN35Ng7rBR03kQC8oE10qHfWNNc39Lj3urabjRvQ80e06pA/vCZ8xA==} engines: {node: '>=18.0.0'} - '@aws-sdk/nested-clients@3.908.0': - resolution: {integrity: sha512-ZxDYrfxOKXNFHLyvJtT96TJ0p4brZOhwRE4csRXrezEVUN+pNgxuem95YvMALPVhlVqON2CTzr8BX+CcBKvX9Q==} + '@aws-sdk/nested-clients@3.920.0': + resolution: {integrity: sha512-1JlzZJ0qp68zr6wPoLFwZ0+EH6HQvKMJjF8e2y9yO82LC3CsetaMxLUC2em7uY+3Gp0TMSA/Yxy4rTShf0vmng==} engines: {node: '>=18.0.0'} - '@aws-sdk/region-config-resolver@3.901.0': - resolution: {integrity: sha512-7F0N888qVLHo4CSQOsnkZ4QAp8uHLKJ4v3u09Ly5k4AEStrSlFpckTPyUx6elwGL+fxGjNE2aakK8vEgzzCV0A==} + '@aws-sdk/region-config-resolver@3.920.0': + resolution: {integrity: sha512-4g88FyRN+O4iFe8azt/9IEGeyktQcJPgjwpCCFwGL9QmOIOJja+F+Og05ydjnMBcUxH4CrWXJm0a54MXS2C9Fg==} engines: {node: '>=18.0.0'} - '@aws-sdk/s3-request-presigner@3.908.0': - resolution: {integrity: sha512-MN/0kk2ZDazemXm5FHtB4sfefamIjxrtvPZtCkGYrxopAqoHEkHKS7WqflWz4dtvPtc1A1uMDDZMXTNQbjRkYw==} + '@aws-sdk/s3-request-presigner@3.920.0': + resolution: {integrity: sha512-2AQpHq9JJ5Nvf1sf/v+HYtEa4US/syTSzwznBoZMPIrsnICrnD6CQ6iJSQbDycBYyvJncZMkAGR7ngQl5bdo+w==} engines: {node: '>=18.0.0'} - '@aws-sdk/signature-v4-multi-region@3.908.0': - resolution: {integrity: sha512-8OodflIzZM2GVuCGiGK6hqwsbfHRDl4kQcEYzHRg9p91H4h5Y876DPvLRkwM7pSC7LKUL0XkKWWVVjwJbp6/Ig==} + '@aws-sdk/signature-v4-multi-region@3.920.0': + resolution: {integrity: sha512-qrCYhUHtjsV6TpcuRiG0Wlu0jphAE752x18lKtkLZ0ZX33jPWbUkW7stmM/ahwDMrCK4eI7X2b7F3RrI/HnmMw==} engines: {node: '>=18.0.0'} - '@aws-sdk/token-providers@3.908.0': - resolution: {integrity: sha512-4SosHWRQ8hj1X2yDenCYHParcCjHcd7S+Mdb/lelwF0JBFCNC+dNCI9ws3cP/dFdZO/AIhJQGUBzEQtieloixw==} + '@aws-sdk/token-providers@3.920.0': + resolution: {integrity: sha512-ESDgN6oTq9ypqxK2qVAs5+LJMJCjky41B52k38LDfgyjgrZwqHcRgCQhH2L9/gC4MVOaE4fI24TgZsJlfyJ5dA==} engines: {node: '>=18.0.0'} - '@aws-sdk/types@3.901.0': - resolution: {integrity: sha512-FfEM25hLEs4LoXsLXQ/q6X6L4JmKkKkbVFpKD4mwfVHtRVQG6QxJiCPcrkcPISquiy6esbwK2eh64TWbiD60cg==} + '@aws-sdk/types@3.920.0': + resolution: {integrity: sha512-W8FI6HteaMwACb49IQzNABjbaGM/fP0t4lLBHeL6KXBmXung2S9FMIBHGxoZvBCRt5omFF31yDCbFaDN/1BPYQ==} engines: {node: '>=18.0.0'} '@aws-sdk/util-arn-parser@3.893.0': resolution: {integrity: sha512-u8H4f2Zsi19DGnwj5FSZzDMhytYF/bCh37vAtBsn3cNDL3YG578X5oc+wSX54pM3tOxS+NY7tvOAo52SW7koUA==} engines: {node: '>=18.0.0'} - '@aws-sdk/util-endpoints@3.901.0': - resolution: {integrity: sha512-5nZP3hGA8FHEtKvEQf4Aww5QZOkjLW1Z+NixSd+0XKfHvA39Ah5sZboScjLx0C9kti/K3OGW1RCx5K9Zc3bZqg==} + '@aws-sdk/util-endpoints@3.920.0': + resolution: {integrity: sha512-PuoK3xl27LPLkm6VaeajBBTEtIF24aY+EfBWRKr/zqUJ6lTqicBLbxY0MqhsQ9KXALg/Ju0Aq7O4G0jpLu5S8w==} engines: {node: '>=18.0.0'} - '@aws-sdk/util-format-url@3.901.0': - resolution: {integrity: sha512-GGUnJKrh3OF1F3YRSWtwPLbN904Fcfxf03gujyq1rcrDRPEkzoZB+2BzNkB27SsU6lAlwNq+4aRlZRVUloPiag==} + '@aws-sdk/util-format-url@3.920.0': + resolution: {integrity: sha512-ht2QNzgbRUjAJYmf+4vy+tciMNC9qFx4zuQA/8/t5Lv+f1J37XrNhzOgRMQO3CRyjPTRx6ZtCyMP5XxClzVVTw==} engines: {node: '>=18.0.0'} '@aws-sdk/util-locate-window@3.893.0': resolution: {integrity: sha512-T89pFfgat6c8nMmpI8eKjBcDcgJq36+m9oiXbcUzeU55MP9ZuGgBomGjGnHaEyF36jenW9gmg3NfZDm0AO2XPg==} engines: {node: '>=18.0.0'} - '@aws-sdk/util-user-agent-browser@3.907.0': - resolution: {integrity: sha512-Hus/2YCQmtCEfr4Ls88d07Q99Ex59uvtktiPTV963Q7w7LHuIT/JBjrbwNxtSm2KlJR9PHNdqxwN+fSuNsMGMQ==} + '@aws-sdk/util-user-agent-browser@3.920.0': + resolution: {integrity: sha512-7nMoQjTa1SwULoUXBHm1hx24cb969e98AwPbrSmGwEZl2ZYXULOX3EZuDaX9QTzHutw8AMOgoI6JxCXhRQfmAg==} - '@aws-sdk/util-user-agent-node@3.908.0': - resolution: {integrity: sha512-l6AEaKUAYarcEy8T8NZ+dNZ00VGLs3fW2Cqu1AuPENaSad0/ahEU+VU7MpXS8FhMRGPgplxKVgCTLyTY0Lbssw==} + '@aws-sdk/util-user-agent-node@3.920.0': + resolution: {integrity: sha512-JJykxGXilkeUeU5x3g8bXvkyedtmZ/gXZVwCnWfe/DHxoUDHgYhF0VAz+QJoh2lSN/lRnUV08K0ILmEzGQzY4A==} engines: {node: '>=18.0.0'} peerDependencies: aws-crt: '>=1.0.0' @@ -1050,28 +1050,28 @@ packages: aws-crt: optional: true - '@aws-sdk/xml-builder@3.901.0': - resolution: {integrity: sha512-pxFCkuAP7Q94wMTNPAwi6hEtNrp/BdFf+HOrIEeFQsk4EoOmpKY3I6S+u6A9Wg295J80Kh74LqDWM22ux3z6Aw==} + '@aws-sdk/xml-builder@3.914.0': + resolution: {integrity: sha512-k75evsBD5TcIjedycYS7QXQ98AmOtbnxRJOPtCo0IwYRmy7UvqgS/gBL5SmrIqeV6FDSYRQMgdBxSMp6MLmdew==} engines: {node: '>=18.0.0'} - '@aws/lambda-invoke-store@0.0.1': - resolution: {integrity: sha512-ORHRQ2tmvnBXc8t/X9Z8IcSbBA4xTLKuN873FopzklHMeqBst7YG0d+AX97inkvDX+NChYtSr+qGfcqGFaI8Zw==} + '@aws/lambda-invoke-store@0.1.1': + resolution: {integrity: sha512-RcLam17LdlbSOSp9VxmUu1eI6Mwxp+OwhD2QhiSNmNCzoDb0EeUXTD2n/WbcnrAYMGlmf05th6QYq23VqvJqpA==} engines: {node: '>=18.0.0'} '@babel/code-frame@7.27.1': resolution: {integrity: sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg==} engines: {node: '>=6.9.0'} - '@babel/compat-data@7.28.4': - resolution: {integrity: sha512-YsmSKC29MJwf0gF8Rjjrg5LQCmyh+j/nD8/eP7f+BeoQTKYqs9RoWbjGOdy0+1Ekr68RJZMUOPVQaQisnIo4Rw==} + '@babel/compat-data@7.28.5': + resolution: {integrity: sha512-6uFXyCayocRbqhZOB+6XcuZbkMNimwfVGFji8CTZnCzOHVGvDqzvitu1re2AU5LROliz7eQPhB8CpAMvnx9EjA==} engines: {node: '>=6.9.0'} - '@babel/core@7.28.4': - resolution: {integrity: sha512-2BCOP7TN8M+gVDj7/ht3hsaO/B/n5oDbiAyyvnRlNOs+u1o+JWNYTQrmpuNp1/Wq2gcFrI01JAW+paEKDMx/CA==} + '@babel/core@7.28.5': + resolution: {integrity: sha512-e7jT4DxYvIDLk1ZHmU/m/mB19rex9sv0c2ftBtjSBv+kVM/902eh0fINUzD7UwLLNR+jU585GxUJ8/EBfAM5fw==} engines: {node: '>=6.9.0'} - '@babel/generator@7.28.3': - resolution: {integrity: sha512-3lSpxGgvnmZznmBkCRnVREPUFJv2wrv9iAoFDvADJc0ypmdOxdUtcLeBgBJ6zE0PMeTKnxeQzyk0xTBq4Ep7zw==} + '@babel/generator@7.28.5': + resolution: {integrity: sha512-3EwLFhZ38J4VyIP6WNtt2kUdW9dokXA9Cr4IVIFHuCpZ3H8/YFOl5JjZHisrn1fATPBmKKqXzDFvh9fUwHz6CQ==} engines: {node: '>=6.9.0'} '@babel/helper-annotate-as-pure@7.27.3': @@ -1082,14 +1082,14 @@ packages: resolution: {integrity: sha512-2+1thGUUWWjLTYTHZWK1n8Yga0ijBz1XAhUXcKy81rd5g6yh7hGqMp45v7cadSbEHc9G3OTv45SyneRN3ps4DQ==} engines: {node: '>=6.9.0'} - '@babel/helper-create-class-features-plugin@7.28.3': - resolution: {integrity: sha512-V9f6ZFIYSLNEbuGA/92uOvYsGCJNsuA8ESZ4ldc09bWk/j8H8TKiPw8Mk1eG6olpnO0ALHJmYfZvF4MEE4gajg==} + '@babel/helper-create-class-features-plugin@7.28.5': + resolution: {integrity: sha512-q3WC4JfdODypvxArsJQROfupPBq9+lMwjKq7C33GhbFYJsufD0yd/ziwD+hJucLeWsnFPWZjsU2DNFqBPE7jwQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 - '@babel/helper-create-regexp-features-plugin@7.27.1': - resolution: {integrity: sha512-uVDC72XVf8UbrH5qQTc18Agb8emwjTiZrQE11Nv3CuBEZmVvTwwE9CBUEvHku06gQCAyYf8Nv6ja1IN+6LMbxQ==} + '@babel/helper-create-regexp-features-plugin@7.28.5': + resolution: {integrity: sha512-N1EhvLtHzOvj7QQOUCCS3NrPJP8c5W6ZXCHDn7Yialuy1iu4r5EmIYkXlKNqT99Ciw+W0mDqWoR6HWMZlFP3hw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 @@ -1103,8 +1103,8 @@ packages: resolution: {integrity: sha512-+W6cISkXFa1jXsDEdYA8HeevQT/FULhxzR99pxphltZcVaugps53THCeiWA8SguxxpSp3gKPiuYfSWopkLQ4hw==} engines: {node: '>=6.9.0'} - '@babel/helper-member-expression-to-functions@7.27.1': - resolution: {integrity: sha512-E5chM8eWjTp/aNoVpcbfM7mLxu9XGLWYise2eBKGQomAk/Mb4XoxyqXTZbuTohbsl8EKqdlMhnDI2CCLfcs9wA==} + '@babel/helper-member-expression-to-functions@7.28.5': + resolution: {integrity: sha512-cwM7SBRZcPCLgl8a7cY0soT1SptSzAlMH39vwiRpOQkJlh53r5hdHwLSCZpQdVLT39sZt+CRpNwYG4Y2v77atg==} engines: {node: '>=6.9.0'} '@babel/helper-module-imports@7.27.1': @@ -1145,8 +1145,8 @@ packages: resolution: {integrity: sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==} engines: {node: '>=6.9.0'} - '@babel/helper-validator-identifier@7.27.1': - resolution: {integrity: sha512-D2hP9eA+Sqx1kBZgzxZh0y1trbuU+JoDkiEwqhQ36nodYqJwyEIhPSdMNd7lOm/4io72luTPWH20Yda0xOuUow==} + '@babel/helper-validator-identifier@7.28.5': + resolution: {integrity: sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q==} engines: {node: '>=6.9.0'} '@babel/helper-validator-option@7.27.1': @@ -1161,13 +1161,13 @@ packages: resolution: {integrity: sha512-HFN59MmQXGHVyYadKLVumYsA9dBFun/ldYxipEjzA4196jpLZd8UjEEBLkbEkvfYreDqJhZxYAWFPtrfhNpj4w==} engines: {node: '>=6.9.0'} - '@babel/parser@7.28.4': - resolution: {integrity: sha512-yZbBqeM6TkpP9du/I2pUZnJsRMGGvOuIrhjzC1AwHwW+6he4mni6Bp/m8ijn0iOuZuPI2BfkCoSRunpyjnrQKg==} + '@babel/parser@7.28.5': + resolution: {integrity: sha512-KKBU1VGYR7ORr3At5HAtUQ+TV3SzRCXmA/8OdDZiLDBIZxVyzXuztPjfLd3BV1PRAQGCMWWSHYhL0F8d5uHBDQ==} engines: {node: '>=6.0.0'} hasBin: true - '@babel/plugin-bugfix-firefox-class-in-computed-class-key@7.27.1': - resolution: {integrity: sha512-QPG3C9cCVRQLxAVwmefEmwdTanECuUBMQZ/ym5kiw3XKCGA7qkuQLcjWWHcrD/GKbn/WmJwaezfuuAOcyKlRPA==} + '@babel/plugin-bugfix-firefox-class-in-computed-class-key@7.28.5': + resolution: {integrity: sha512-87GDMS3tsmMSi/3bWOte1UblL+YUTFMV8SZPZ2eSEL17s74Cw/l63rR6NmGVKMYW2GYi85nE+/d6Hw5N0bEk2Q==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 @@ -1256,8 +1256,8 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-block-scoping@7.28.4': - resolution: {integrity: sha512-1yxmvN0MJHOhPVmAsmoW5liWwoILobu/d/ShymZmj867bAdxGbehIrew1DuLpw2Ukv+qDSSPQdYW1dLNE7t11A==} + '@babel/plugin-transform-block-scoping@7.28.5': + resolution: {integrity: sha512-45DmULpySVvmq9Pj3X9B+62Xe+DJGov27QravQJU1LLcapR6/10i+gYVAucGGJpHBp5mYxIMK4nDAT/QDLr47g==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 @@ -1286,8 +1286,8 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-destructuring@7.28.0': - resolution: {integrity: sha512-v1nrSMBiKcodhsyJ4Gf+Z0U/yawmJDBOTpEB3mcQY52r9RIyPneGyAS/yM6seP/8I+mWI3elOMtT5dB8GJVs+A==} + '@babel/plugin-transform-destructuring@7.28.5': + resolution: {integrity: sha512-Kl9Bc6D0zTUcFUvkNuQh4eGXPKKNDOJQXVyyM4ZAQPMveniJdxi8XMJwLo+xSoW3MIq81bD33lcUe9kZpl0MCw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 @@ -1322,8 +1322,8 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-exponentiation-operator@7.27.1': - resolution: {integrity: sha512-uspvXnhHvGKf2r4VVtBpeFnuDWsJLQ6MF6lGJLC89jBR1uoVeqM416AZtTuhTezOfgHicpJQmoD5YUakO/YmXQ==} + '@babel/plugin-transform-exponentiation-operator@7.28.5': + resolution: {integrity: sha512-D4WIMaFtwa2NizOp+dnoFjRez/ClKiC2BqqImwKd1X28nqBtZEyCYJ2ozQrrzlxAFrcrjxo39S6khe9RNDlGzw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 @@ -1358,8 +1358,8 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-logical-assignment-operators@7.27.1': - resolution: {integrity: sha512-SJvDs5dXxiae4FbSL1aBJlG4wvl594N6YEVVn9e3JGulwioy6z3oPjx/sQBO3Y4NwUu5HNix6KJ3wBZoewcdbw==} + '@babel/plugin-transform-logical-assignment-operators@7.28.5': + resolution: {integrity: sha512-axUuqnUTBuXyHGcJEVVh9pORaN6wC5bYfE7FGzPiaWa3syib9m7g+/IT/4VgCOe2Upef43PHzeAvcrVek6QuuA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 @@ -1382,8 +1382,8 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-modules-systemjs@7.27.1': - resolution: {integrity: sha512-w5N1XzsRbc0PQStASMksmUeqECuzKuTJer7kFagK8AXgpCMkeDMO5S+aaFb7A51ZYDF7XI34qsTX+fkHiIm5yA==} + '@babel/plugin-transform-modules-systemjs@7.28.5': + resolution: {integrity: sha512-vn5Jma98LCOeBy/KpeQhXcV2WZgaRUtjwQmjoBuLNlOmkg0fB5pdvYVeWRYI69wWKwK2cD1QbMiUQnoujWvrew==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 @@ -1436,8 +1436,8 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-optional-chaining@7.27.1': - resolution: {integrity: sha512-BQmKPPIuc8EkZgNKsv0X4bPmOoayeu4F1YCwx2/CfmDSXDbp7GnzlUH+/ul5VGfRg1AoFPsrIThlEBj2xb4CAg==} + '@babel/plugin-transform-optional-chaining@7.28.5': + resolution: {integrity: sha512-N6fut9IZlPnjPwgiQkXNhb+cT8wQKFlJNqcZkWlcTqkcqx6/kU4ynGmLFoa4LViBSirn05YAwk+sQBbPfxtYzQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 @@ -1532,8 +1532,8 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-typescript@7.28.0': - resolution: {integrity: sha512-4AEiDEBPIZvLQaWlc9liCavE0xRM0dNca41WtBeM3jgFptfUOSG9z0uteLhq6+3rq+WB6jIvUwKDTpXEHPJ2Vg==} + '@babel/plugin-transform-typescript@7.28.5': + resolution: {integrity: sha512-x2Qa+v/CuEoX7Dr31iAfr0IhInrVOWZU/2vJMJ00FOR/2nM0BcBEclpaf9sWCDc+v5e9dMrhSH8/atq/kX7+bA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 @@ -1562,8 +1562,8 @@ packages: peerDependencies: '@babel/core': ^7.0.0 - '@babel/preset-env@7.28.3': - resolution: {integrity: sha512-ROiDcM+GbYVPYBOeCR6uBXKkQpBExLl8k9HO1ygXEyds39j+vCCsjmj7S8GOniZQlEs81QlkdJZe76IpLSiqpg==} + '@babel/preset-env@7.28.5': + resolution: {integrity: sha512-S36mOoi1Sb6Fz98fBfE+UZSpYw5mJm0NUHtIKrOuNcqeFauy1J6dIvXm2KRVKobOSaGq4t/hBXdN4HGU3wL9Wg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 @@ -1573,8 +1573,8 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 || ^8.0.0-0 <8.0.0 - '@babel/preset-typescript@7.27.1': - resolution: {integrity: sha512-l7WfQfX0WK4M0v2RudjuQK4u99BS6yLHYEmdtVPP7lKV013zr9DygFuWNlnbvQ9LR+LS0Egz/XAvGx5U9MX0fQ==} + '@babel/preset-typescript@7.28.5': + resolution: {integrity: sha512-+bQy5WOI2V6LJZpPVxY+yp66XdZ2yifu0Mc1aP5CQKgjn4QM5IN2i5fAZ4xKop47pr8rpVhiAeu+nDQa12C8+g==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 @@ -1587,67 +1587,67 @@ packages: resolution: {integrity: sha512-LPDZ85aEJyYSd18/DkjNh4/y1ntkE5KwUHWTiqgRxruuZL2F1yuHligVHLvcHY2vMHXttKFpJn6LwfI7cw7ODw==} engines: {node: '>=6.9.0'} - '@babel/traverse@7.28.4': - resolution: {integrity: sha512-YEzuboP2qvQavAcjgQNVgsvHIDv6ZpwXvcvjmyySP2DIMuByS/6ioU5G9pYrWHM6T2YDfc7xga9iNzYOs12CFQ==} + '@babel/traverse@7.28.5': + resolution: {integrity: sha512-TCCj4t55U90khlYkVV/0TfkJkAkUg3jZFA3Neb7unZT8CPok7iiRfaX0F+WnqWqt7OxhOn0uBKXCw4lbL8W0aQ==} engines: {node: '>=6.9.0'} - '@babel/types@7.28.4': - resolution: {integrity: sha512-bkFqkLhh3pMBUQQkpVgWDWq/lqzc2678eUyDlTBhRqhCHFguYYGM0Efga7tYk4TogG/3x0EEl66/OQ+WGbWB/Q==} + '@babel/types@7.28.5': + resolution: {integrity: sha512-qQ5m48eI/MFLQ5PxQj4PFaprjyCTLI37ElWMmNs0K8Lk3dVeOdNpB3ks8jc7yM5CDmVC73eMVk/trk3fgmrUpA==} engines: {node: '>=6.9.0'} '@bcoe/v8-coverage@1.0.2': resolution: {integrity: sha512-6zABk/ECA/QYSCQ1NGiVwwbQerUCZ+TQbp64Q3AgmfNvurHH0j8TtXa1qbShXA6qqkpAj4V5W8pP6mLe1mcMqA==} engines: {node: '>=18'} - '@biomejs/biome@2.2.5': - resolution: {integrity: sha512-zcIi+163Rc3HtyHbEO7CjeHq8DjQRs40HsGbW6vx2WI0tg8mYQOPouhvHSyEnCBAorfYNnKdR64/IxO7xQ5faw==} + '@biomejs/biome@2.3.2': + resolution: {integrity: sha512-8e9tzamuDycx7fdrcJ/F/GDZ8SYukc5ud6tDicjjFqURKYFSWMl0H0iXNXZEGmcmNUmABgGuHThPykcM41INgg==} engines: {node: '>=14.21.3'} hasBin: true - '@biomejs/cli-darwin-arm64@2.2.5': - resolution: {integrity: sha512-MYT+nZ38wEIWVcL5xLyOhYQQ7nlWD0b/4mgATW2c8dvq7R4OQjt/XGXFkXrmtWmQofaIM14L7V8qIz/M+bx5QQ==} + '@biomejs/cli-darwin-arm64@2.3.2': + resolution: {integrity: sha512-4LECm4kc3If0JISai4c3KWQzukoUdpxy4fRzlrPcrdMSRFksR9ZoXK7JBcPuLBmd2SoT4/d7CQS33VnZpgBjew==} engines: {node: '>=14.21.3'} cpu: [arm64] os: [darwin] - '@biomejs/cli-darwin-x64@2.2.5': - resolution: {integrity: sha512-FLIEl73fv0R7dI10EnEiZLw+IMz3mWLnF95ASDI0kbx6DDLJjWxE5JxxBfmG+udz1hIDd3fr5wsuP7nwuTRdAg==} + '@biomejs/cli-darwin-x64@2.3.2': + resolution: {integrity: sha512-jNMnfwHT4N3wi+ypRfMTjLGnDmKYGzxVr1EYAPBcauRcDnICFXN81wD6wxJcSUrLynoyyYCdfW6vJHS/IAoTDA==} engines: {node: '>=14.21.3'} cpu: [x64] os: [darwin] - '@biomejs/cli-linux-arm64-musl@2.2.5': - resolution: {integrity: sha512-5Ov2wgAFwqDvQiESnu7b9ufD1faRa+40uwrohgBopeY84El2TnBDoMNXx6iuQdreoFGjwW8vH6k68G21EpNERw==} + '@biomejs/cli-linux-arm64-musl@2.3.2': + resolution: {integrity: sha512-2Zz4usDG1GTTPQnliIeNx6eVGGP2ry5vE/v39nT73a3cKN6t5H5XxjcEoZZh62uVZvED7hXXikclvI64vZkYqw==} engines: {node: '>=14.21.3'} cpu: [arm64] os: [linux] - '@biomejs/cli-linux-arm64@2.2.5': - resolution: {integrity: sha512-5DjiiDfHqGgR2MS9D+AZ8kOfrzTGqLKywn8hoXpXXlJXIECGQ32t+gt/uiS2XyGBM2XQhR6ztUvbjZWeccFMoQ==} + '@biomejs/cli-linux-arm64@2.3.2': + resolution: {integrity: sha512-amnqvk+gWybbQleRRq8TMe0rIv7GHss8mFJEaGuEZYWg1Tw14YKOkeo8h6pf1c+d3qR+JU4iT9KXnBKGON4klw==} engines: {node: '>=14.21.3'} cpu: [arm64] os: [linux] - '@biomejs/cli-linux-x64-musl@2.2.5': - resolution: {integrity: sha512-AVqLCDb/6K7aPNIcxHaTQj01sl1m989CJIQFQEaiQkGr2EQwyOpaATJ473h+nXDUuAcREhccfRpe/tu+0wu0eQ==} + '@biomejs/cli-linux-x64-musl@2.3.2': + resolution: {integrity: sha512-gzB19MpRdTuOuLtPpFBGrV3Lq424gHyq2lFj8wfX9tvLMLdmA/R9C7k/mqBp/spcbWuHeIEKgEs3RviOPcWGBA==} engines: {node: '>=14.21.3'} cpu: [x64] os: [linux] - '@biomejs/cli-linux-x64@2.2.5': - resolution: {integrity: sha512-fq9meKm1AEXeAWan3uCg6XSP5ObA6F/Ovm89TwaMiy1DNIwdgxPkNwxlXJX8iM6oRbFysYeGnT0OG8diCWb9ew==} + '@biomejs/cli-linux-x64@2.3.2': + resolution: {integrity: sha512-8BG/vRAhFz1pmuyd24FQPhNeueLqPtwvZk6yblABY2gzL2H8fLQAF/Z2OPIc+BPIVPld+8cSiKY/KFh6k81xfA==} engines: {node: '>=14.21.3'} cpu: [x64] os: [linux] - '@biomejs/cli-win32-arm64@2.2.5': - resolution: {integrity: sha512-xaOIad4wBambwJa6mdp1FigYSIF9i7PCqRbvBqtIi9y29QtPVQ13sDGtUnsRoe6SjL10auMzQ6YAe+B3RpZXVg==} + '@biomejs/cli-win32-arm64@2.3.2': + resolution: {integrity: sha512-lCruqQlfWjhMlOdyf5pDHOxoNm4WoyY2vZ4YN33/nuZBRstVDuqPPjS0yBkbUlLEte11FbpW+wWSlfnZfSIZvg==} engines: {node: '>=14.21.3'} cpu: [arm64] os: [win32] - '@biomejs/cli-win32-x64@2.2.5': - resolution: {integrity: sha512-F/jhuXCssPFAuciMhHKk00xnCAxJRS/pUzVfXYmOMUp//XW7mO6QeCjsjvnm8L4AO/dG2VOB0O+fJPiJ2uXtIw==} + '@biomejs/cli-win32-x64@2.3.2': + resolution: {integrity: sha512-6Ee9P26DTb4D8sN9nXxgbi9Dw5vSOfH98M7UlmkjKB2vtUbrRqCbZiNfryGiwnPIpd6YUoTl7rLVD2/x1CyEHQ==} engines: {node: '>=14.21.3'} cpu: [x64] os: [win32] @@ -1682,11 +1682,11 @@ packages: resolution: {integrity: sha512-+vGHLdGrR5Jez+dp6yHsgij8hIuZbdU88IU4JAV8nO4FzH1RDNkkj++O9RhMf3CKKDslYn7QiwI8D16u379+0A==} engines: {node: '>=20.9.0'} - '@chromatic-com/storybook@4.1.1': - resolution: {integrity: sha512-+Ib4cHtEjKl/Do+4LyU0U1FhLPbIU2Q/zgbOKHBCV+dTC4T3/vGzPqiGsgkdnZyTsK/zXg96LMPSPC4jjOiapg==} + '@chromatic-com/storybook@4.1.2': + resolution: {integrity: sha512-QAWGtHwib0qsP5CcO64aJCF75zpFgpKK3jNpxILzQiPK3sVo4EmnVGJVdwcZWpWrGdH8E4YkncGoitw4EXzKMg==} engines: {node: '>=20.0.0', yarn: '>=1.22.18'} peerDependencies: - storybook: ^0.0.0-0 || ^9.0.0 || ^9.1.0-0 || ^9.2.0-0 || ^10.0.0-0 + storybook: ^0.0.0-0 || ^9.0.0 || ^9.1.0-0 || ^9.2.0-0 || ^10.0.0-0 || ^10.1.0-0 || ^10.2.0-0 || ^10.3.0-0 '@clack/core@0.3.5': resolution: {integrity: sha512-5cfhQNH+1VQ2xLQlmzXMqUoiaH0lRBq9/CLW9lTyMbuKLC3+xEK01tHVvyut++mLOn5urSHmkm6I0Lg9MaJSTQ==} @@ -1750,25 +1750,25 @@ packages: '@drizzle-team/brocli@0.10.2': resolution: {integrity: sha512-z33Il7l5dKjUgGULTqBsQBQwckHh5AbIuxhdsIxDDiZAzBOrZO6q9ogcWC65kU382AfynTfgNumVcNIjuIua6w==} - '@electric-sql/client@1.0.14': - resolution: {integrity: sha512-LtPAfeMxXRiYS0hyDQ5hue2PjljUiK9stvzsVyVb4nwxWQxfOWTSF42bHTs/o5i3x1T4kAQ7mwHpxa4A+f8X7Q==} + '@electric-sql/client@1.1.1': + resolution: {integrity: sha512-E9aZ3PJ/kBRmuxth9fKNt72wTqP5XjXUPu3V2SxNugAFWMgdJ++ErwGtskuUG8W3js7fGeP545yNQTeVlCQRmg==} - '@electric-sql/pglite@0.3.10': - resolution: {integrity: sha512-1XtXXprd848aR4hvjNqBc3Gc86zNGmd60x+MgOUShbHYxt+J76N8A81DqTEl275T8xBD0vdTgqR/dJ4yJyz0NQ==} + '@electric-sql/pglite@0.3.11': + resolution: {integrity: sha512-FJtjnEyez8XgmgyE5Ewmx89TGVN+75ZjykFoExApRIbJBMT4dsbsuZkF/YWLuymGDfGFHDACjvENPMEqg4FoWg==} - '@electric-sql/react@1.0.14': - resolution: {integrity: sha512-Cbi1Nacluhq1EC1QoIMnYfKij4UR516R39QvzMS6cMaetFqf1k0ZXpmPNhDiNG7HgleYA/0vYkTBkPa29gNJjA==} + '@electric-sql/react@1.0.16': + resolution: {integrity: sha512-14jsGrcFft02NqOEIOhdd3CP5tBScpPq4Jlyvj6Q6+LeWTk1VRr9oiQS8UX73MBB1wHmy9xCeGxWvnBakJO7bg==} peerDependencies: react: '>=18.3.1 <20.0.0' peerDependenciesMeta: react: optional: true - '@emnapi/core@1.5.0': - resolution: {integrity: sha512-sbP8GzB1WDzacS8fgNPpHlp6C9VZe+SJP3F90W9rLemaQj2PzIuTEl1qDOYQf58YIpyjViI24y9aPWCjEzY2cg==} + '@emnapi/core@1.6.0': + resolution: {integrity: sha512-zq/ay+9fNIJJtJiZxdTnXS20PllcYMX3OE23ESc4HK/bdYu3cOWYVhsOhVnXALfU/uqJIxn5NBPd9z4v+SfoSg==} - '@emnapi/runtime@1.5.0': - resolution: {integrity: sha512-97/BJ3iXHww3djw6hYIfErCZFee7qCtrneuLa20UXFCOTCfBM2cvQHjWJ2EG0s0MtdNwInarqCTz35i4wWXHsQ==} + '@emnapi/runtime@1.6.0': + resolution: {integrity: sha512-obtUmAHTMjll499P+D9A3axeJFlhdjOWdKUNs/U6QIGT7V5RjcUW1xToAzjvmgTSQhDbYn/NwfTRoJcQ2rNBxA==} '@emnapi/wasi-threads@1.1.0': resolution: {integrity: sha512-WI0DdZ8xFSbgMjR1sFsKABJ/C5OnRrjT06JXbZKexJGrDuPTzZdDYfFlsgcCXCyf+suG5QU2e/y1Wo2V/OapLQ==} @@ -1799,20 +1799,14 @@ packages: cpu: [ppc64] os: [aix] - '@esbuild/aix-ppc64@0.21.5': - resolution: {integrity: sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ==} - engines: {node: '>=12'} - cpu: [ppc64] - os: [aix] - '@esbuild/aix-ppc64@0.24.2': resolution: {integrity: sha512-thpVCb/rhxE/BnMLQ7GReQLLN8q9qbHmI55F4489/ByVg2aQaQ6kbcLb6FHkocZzQhxc4gx0sCk0tJkKBFzDhA==} engines: {node: '>=18'} cpu: [ppc64] os: [aix] - '@esbuild/aix-ppc64@0.25.10': - resolution: {integrity: sha512-0NFWnA+7l41irNuaSVlLfgNT12caWJVLzp5eAVhZ0z1qpxbockccEt3s+149rE64VUI3Ml2zt8Nv5JVc4QXTsw==} + '@esbuild/aix-ppc64@0.25.11': + resolution: {integrity: sha512-Xt1dOL13m8u0WE8iplx9Ibbm+hFAO0GsU2P34UNoDGvZYkY8ifSiy6Zuc1lYxfG7svWE2fzqCUmFp5HCn51gJg==} engines: {node: '>=18'} cpu: [ppc64] os: [aix] @@ -1829,20 +1823,14 @@ packages: cpu: [arm64] os: [android] - '@esbuild/android-arm64@0.21.5': - resolution: {integrity: sha512-c0uX9VAUBQ7dTDCjq+wdyGLowMdtR/GoC2U5IYk/7D1H1JYC0qseD7+11iMP2mRLN9RcCMRcjC4YMclCzGwS/A==} - engines: {node: '>=12'} - cpu: [arm64] - os: [android] - '@esbuild/android-arm64@0.24.2': resolution: {integrity: sha512-cNLgeqCqV8WxfcTIOeL4OAtSmL8JjcN6m09XIgro1Wi7cF4t/THaWEa7eL5CMoMBdjoHOTh/vwTO/o2TRXIyzg==} engines: {node: '>=18'} cpu: [arm64] os: [android] - '@esbuild/android-arm64@0.25.10': - resolution: {integrity: sha512-LSQa7eDahypv/VO6WKohZGPSJDq5OVOo3UoFR1E4t4Gj1W7zEQMUhI+lo81H+DtB+kP+tDgBp+M4oNCwp6kffg==} + '@esbuild/android-arm64@0.25.11': + resolution: {integrity: sha512-9slpyFBc4FPPz48+f6jyiXOx/Y4v34TUeDDXJpZqAWQn/08lKGeD8aDp9TMn9jDz2CiEuHwfhRmGBvpnd/PWIQ==} engines: {node: '>=18'} cpu: [arm64] os: [android] @@ -1859,20 +1847,14 @@ packages: cpu: [arm] os: [android] - '@esbuild/android-arm@0.21.5': - resolution: {integrity: sha512-vCPvzSjpPHEi1siZdlvAlsPxXl7WbOVUBBAowWug4rJHb68Ox8KualB+1ocNvT5fjv6wpkX6o/iEpbDrf68zcg==} - engines: {node: '>=12'} - cpu: [arm] - os: [android] - '@esbuild/android-arm@0.24.2': resolution: {integrity: sha512-tmwl4hJkCfNHwFB3nBa8z1Uy3ypZpxqxfTQOcHX+xRByyYgunVbZ9MzUUfb0RxaHIMnbHagwAxuTL+tnNM+1/Q==} engines: {node: '>=18'} cpu: [arm] os: [android] - '@esbuild/android-arm@0.25.10': - resolution: {integrity: sha512-dQAxF1dW1C3zpeCDc5KqIYuZ1tgAdRXNoZP7vkBIRtKZPYe2xVr/d3SkirklCHudW1B45tGiUlz2pUWDfbDD4w==} + '@esbuild/android-arm@0.25.11': + resolution: {integrity: sha512-uoa7dU+Dt3HYsethkJ1k6Z9YdcHjTrSb5NUy66ZfZaSV8hEYGD5ZHbEMXnqLFlbBflLsl89Zke7CAdDJ4JI+Gg==} engines: {node: '>=18'} cpu: [arm] os: [android] @@ -1889,20 +1871,14 @@ packages: cpu: [x64] os: [android] - '@esbuild/android-x64@0.21.5': - resolution: {integrity: sha512-D7aPRUUNHRBwHxzxRvp856rjUHRFW1SdQATKXH2hqA0kAZb1hKmi02OpYRacl0TxIGz/ZmXWlbZgjwWYaCakTA==} - engines: {node: '>=12'} - cpu: [x64] - os: [android] - '@esbuild/android-x64@0.24.2': resolution: {integrity: sha512-B6Q0YQDqMx9D7rvIcsXfmJfvUYLoP722bgfBlO5cGvNVb5V/+Y7nhBE3mHV9OpxBf4eAS2S68KZztiPaWq4XYw==} engines: {node: '>=18'} cpu: [x64] os: [android] - '@esbuild/android-x64@0.25.10': - resolution: {integrity: sha512-MiC9CWdPrfhibcXwr39p9ha1x0lZJ9KaVfvzA0Wxwz9ETX4v5CHfF09bx935nHlhi+MxhA63dKRRQLiVgSUtEg==} + '@esbuild/android-x64@0.25.11': + resolution: {integrity: sha512-Sgiab4xBjPU1QoPEIqS3Xx+R2lezu0LKIEcYe6pftr56PqPygbB7+szVnzoShbx64MUupqoE0KyRlN7gezbl8g==} engines: {node: '>=18'} cpu: [x64] os: [android] @@ -1919,20 +1895,14 @@ packages: cpu: [arm64] os: [darwin] - '@esbuild/darwin-arm64@0.21.5': - resolution: {integrity: sha512-DwqXqZyuk5AiWWf3UfLiRDJ5EDd49zg6O9wclZ7kUMv2WRFr4HKjXp/5t8JZ11QbQfUS6/cRCKGwYhtNAY88kQ==} - engines: {node: '>=12'} - cpu: [arm64] - os: [darwin] - '@esbuild/darwin-arm64@0.24.2': resolution: {integrity: sha512-kj3AnYWc+CekmZnS5IPu9D+HWtUI49hbnyqk0FLEJDbzCIQt7hg7ucF1SQAilhtYpIujfaHr6O0UHlzzSPdOeA==} engines: {node: '>=18'} cpu: [arm64] os: [darwin] - '@esbuild/darwin-arm64@0.25.10': - resolution: {integrity: sha512-JC74bdXcQEpW9KkV326WpZZjLguSZ3DfS8wrrvPMHgQOIEIG/sPXEN/V8IssoJhbefLRcRqw6RQH2NnpdprtMA==} + '@esbuild/darwin-arm64@0.25.11': + resolution: {integrity: sha512-VekY0PBCukppoQrycFxUqkCojnTQhdec0vevUL/EDOCnXd9LKWqD/bHwMPzigIJXPhC59Vd1WFIL57SKs2mg4w==} engines: {node: '>=18'} cpu: [arm64] os: [darwin] @@ -1949,20 +1919,14 @@ packages: cpu: [x64] os: [darwin] - '@esbuild/darwin-x64@0.21.5': - resolution: {integrity: sha512-se/JjF8NlmKVG4kNIuyWMV/22ZaerB+qaSi5MdrXtd6R08kvs2qCN4C09miupktDitvh8jRFflwGFBQcxZRjbw==} - engines: {node: '>=12'} - cpu: [x64] - os: [darwin] - '@esbuild/darwin-x64@0.24.2': resolution: {integrity: sha512-WeSrmwwHaPkNR5H3yYfowhZcbriGqooyu3zI/3GGpF8AyUdsrrP0X6KumITGA9WOyiJavnGZUwPGvxvwfWPHIA==} engines: {node: '>=18'} cpu: [x64] os: [darwin] - '@esbuild/darwin-x64@0.25.10': - resolution: {integrity: sha512-tguWg1olF6DGqzws97pKZ8G2L7Ig1vjDmGTwcTuYHbuU6TTjJe5FXbgs5C1BBzHbJ2bo1m3WkQDbWO2PvamRcg==} + '@esbuild/darwin-x64@0.25.11': + resolution: {integrity: sha512-+hfp3yfBalNEpTGp9loYgbknjR695HkqtY3d3/JjSRUyPg/xd6q+mQqIb5qdywnDxRZykIHs3axEqU6l1+oWEQ==} engines: {node: '>=18'} cpu: [x64] os: [darwin] @@ -1979,20 +1943,14 @@ packages: cpu: [arm64] os: [freebsd] - '@esbuild/freebsd-arm64@0.21.5': - resolution: {integrity: sha512-5JcRxxRDUJLX8JXp/wcBCy3pENnCgBR9bN6JsY4OmhfUtIHe3ZW0mawA7+RDAcMLrMIZaf03NlQiX9DGyB8h4g==} - engines: {node: '>=12'} - cpu: [arm64] - os: [freebsd] - '@esbuild/freebsd-arm64@0.24.2': resolution: {integrity: sha512-UN8HXjtJ0k/Mj6a9+5u6+2eZ2ERD7Edt1Q9IZiB5UZAIdPnVKDoG7mdTVGhHJIeEml60JteamR3qhsr1r8gXvg==} engines: {node: '>=18'} cpu: [arm64] os: [freebsd] - '@esbuild/freebsd-arm64@0.25.10': - resolution: {integrity: sha512-3ZioSQSg1HT2N05YxeJWYR+Libe3bREVSdWhEEgExWaDtyFbbXWb49QgPvFH8u03vUPX10JhJPcz7s9t9+boWg==} + '@esbuild/freebsd-arm64@0.25.11': + resolution: {integrity: sha512-CmKjrnayyTJF2eVuO//uSjl/K3KsMIeYeyN7FyDBjsR3lnSJHaXlVoAK8DZa7lXWChbuOk7NjAc7ygAwrnPBhA==} engines: {node: '>=18'} cpu: [arm64] os: [freebsd] @@ -2009,20 +1967,14 @@ packages: cpu: [x64] os: [freebsd] - '@esbuild/freebsd-x64@0.21.5': - resolution: {integrity: sha512-J95kNBj1zkbMXtHVH29bBriQygMXqoVQOQYA+ISs0/2l3T9/kj42ow2mpqerRBxDJnmkUDCaQT/dfNXWX/ZZCQ==} - engines: {node: '>=12'} - cpu: [x64] - os: [freebsd] - '@esbuild/freebsd-x64@0.24.2': resolution: {integrity: sha512-TvW7wE/89PYW+IevEJXZ5sF6gJRDY/14hyIGFXdIucxCsbRmLUcjseQu1SyTko+2idmCw94TgyaEZi9HUSOe3Q==} engines: {node: '>=18'} cpu: [x64] os: [freebsd] - '@esbuild/freebsd-x64@0.25.10': - resolution: {integrity: sha512-LLgJfHJk014Aa4anGDbh8bmI5Lk+QidDmGzuC2D+vP7mv/GeSN+H39zOf7pN5N8p059FcOfs2bVlrRr4SK9WxA==} + '@esbuild/freebsd-x64@0.25.11': + resolution: {integrity: sha512-Dyq+5oscTJvMaYPvW3x3FLpi2+gSZTCE/1ffdwuM6G1ARang/mb3jvjxs0mw6n3Lsw84ocfo9CrNMqc5lTfGOw==} engines: {node: '>=18'} cpu: [x64] os: [freebsd] @@ -2039,20 +1991,14 @@ packages: cpu: [arm64] os: [linux] - '@esbuild/linux-arm64@0.21.5': - resolution: {integrity: sha512-ibKvmyYzKsBeX8d8I7MH/TMfWDXBF3db4qM6sy+7re0YXya+K1cem3on9XgdT2EQGMu4hQyZhan7TeQ8XkGp4Q==} - engines: {node: '>=12'} - cpu: [arm64] - os: [linux] - '@esbuild/linux-arm64@0.24.2': resolution: {integrity: sha512-7HnAD6074BW43YvvUmE/35Id9/NB7BeX5EoNkK9obndmZBUk8xmJJeU7DwmUeN7tkysslb2eSl6CTrYz6oEMQg==} engines: {node: '>=18'} cpu: [arm64] os: [linux] - '@esbuild/linux-arm64@0.25.10': - resolution: {integrity: sha512-5luJWN6YKBsawd5f9i4+c+geYiVEw20FVW5x0v1kEMWNq8UctFjDiMATBxLvmmHA4bf7F6hTRaJgtghFr9iziQ==} + '@esbuild/linux-arm64@0.25.11': + resolution: {integrity: sha512-Qr8AzcplUhGvdyUF08A1kHU3Vr2O88xxP0Tm8GcdVOUm25XYcMPp2YqSVHbLuXzYQMf9Bh/iKx7YPqECs6ffLA==} engines: {node: '>=18'} cpu: [arm64] os: [linux] @@ -2069,20 +2015,14 @@ packages: cpu: [arm] os: [linux] - '@esbuild/linux-arm@0.21.5': - resolution: {integrity: sha512-bPb5AHZtbeNGjCKVZ9UGqGwo8EUu4cLq68E95A53KlxAPRmUyYv2D6F0uUI65XisGOL1hBP5mTronbgo+0bFcA==} - engines: {node: '>=12'} - cpu: [arm] - os: [linux] - '@esbuild/linux-arm@0.24.2': resolution: {integrity: sha512-n0WRM/gWIdU29J57hJyUdIsk0WarGd6To0s+Y+LwvlC55wt+GT/OgkwoXCXvIue1i1sSNWblHEig00GBWiJgfA==} engines: {node: '>=18'} cpu: [arm] os: [linux] - '@esbuild/linux-arm@0.25.10': - resolution: {integrity: sha512-oR31GtBTFYCqEBALI9r6WxoU/ZofZl962pouZRTEYECvNF/dtXKku8YXcJkhgK/beU+zedXfIzHijSRapJY3vg==} + '@esbuild/linux-arm@0.25.11': + resolution: {integrity: sha512-TBMv6B4kCfrGJ8cUPo7vd6NECZH/8hPpBHHlYI3qzoYFvWu2AdTvZNuU/7hsbKWqu/COU7NIK12dHAAqBLLXgw==} engines: {node: '>=18'} cpu: [arm] os: [linux] @@ -2099,20 +2039,14 @@ packages: cpu: [ia32] os: [linux] - '@esbuild/linux-ia32@0.21.5': - resolution: {integrity: sha512-YvjXDqLRqPDl2dvRODYmmhz4rPeVKYvppfGYKSNGdyZkA01046pLWyRKKI3ax8fbJoK5QbxblURkwK/MWY18Tg==} - engines: {node: '>=12'} - cpu: [ia32] - os: [linux] - '@esbuild/linux-ia32@0.24.2': resolution: {integrity: sha512-sfv0tGPQhcZOgTKO3oBE9xpHuUqguHvSo4jl+wjnKwFpapx+vUDcawbwPNuBIAYdRAvIDBfZVvXprIj3HA+Ugw==} engines: {node: '>=18'} cpu: [ia32] os: [linux] - '@esbuild/linux-ia32@0.25.10': - resolution: {integrity: sha512-NrSCx2Kim3EnnWgS4Txn0QGt0Xipoumb6z6sUtl5bOEZIVKhzfyp/Lyw4C1DIYvzeW/5mWYPBFJU3a/8Yr75DQ==} + '@esbuild/linux-ia32@0.25.11': + resolution: {integrity: sha512-TmnJg8BMGPehs5JKrCLqyWTVAvielc615jbkOirATQvWWB1NMXY77oLMzsUjRLa0+ngecEmDGqt5jiDC6bfvOw==} engines: {node: '>=18'} cpu: [ia32] os: [linux] @@ -2129,20 +2063,14 @@ packages: cpu: [loong64] os: [linux] - '@esbuild/linux-loong64@0.21.5': - resolution: {integrity: sha512-uHf1BmMG8qEvzdrzAqg2SIG/02+4/DHB6a9Kbya0XDvwDEKCoC8ZRWI5JJvNdUjtciBGFQ5PuBlpEOXQj+JQSg==} - engines: {node: '>=12'} - cpu: [loong64] - os: [linux] - '@esbuild/linux-loong64@0.24.2': resolution: {integrity: sha512-CN9AZr8kEndGooS35ntToZLTQLHEjtVB5n7dl8ZcTZMonJ7CCfStrYhrzF97eAecqVbVJ7APOEe18RPI4KLhwQ==} engines: {node: '>=18'} cpu: [loong64] os: [linux] - '@esbuild/linux-loong64@0.25.10': - resolution: {integrity: sha512-xoSphrd4AZda8+rUDDfD9J6FUMjrkTz8itpTITM4/xgerAZZcFW7Dv+sun7333IfKxGG8gAq+3NbfEMJfiY+Eg==} + '@esbuild/linux-loong64@0.25.11': + resolution: {integrity: sha512-DIGXL2+gvDaXlaq8xruNXUJdT5tF+SBbJQKbWy/0J7OhU8gOHOzKmGIlfTTl6nHaCOoipxQbuJi7O++ldrxgMw==} engines: {node: '>=18'} cpu: [loong64] os: [linux] @@ -2159,20 +2087,14 @@ packages: cpu: [mips64el] os: [linux] - '@esbuild/linux-mips64el@0.21.5': - resolution: {integrity: sha512-IajOmO+KJK23bj52dFSNCMsz1QP1DqM6cwLUv3W1QwyxkyIWecfafnI555fvSGqEKwjMXVLokcV5ygHW5b3Jbg==} - engines: {node: '>=12'} - cpu: [mips64el] - os: [linux] - '@esbuild/linux-mips64el@0.24.2': resolution: {integrity: sha512-iMkk7qr/wl3exJATwkISxI7kTcmHKE+BlymIAbHO8xanq/TjHaaVThFF6ipWzPHryoFsesNQJPE/3wFJw4+huw==} engines: {node: '>=18'} cpu: [mips64el] os: [linux] - '@esbuild/linux-mips64el@0.25.10': - resolution: {integrity: sha512-ab6eiuCwoMmYDyTnyptoKkVS3k8fy/1Uvq7Dj5czXI6DF2GqD2ToInBI0SHOp5/X1BdZ26RKc5+qjQNGRBelRA==} + '@esbuild/linux-mips64el@0.25.11': + resolution: {integrity: sha512-Osx1nALUJu4pU43o9OyjSCXokFkFbyzjXb6VhGIJZQ5JZi8ylCQ9/LFagolPsHtgw6himDSyb5ETSfmp4rpiKQ==} engines: {node: '>=18'} cpu: [mips64el] os: [linux] @@ -2189,20 +2111,14 @@ packages: cpu: [ppc64] os: [linux] - '@esbuild/linux-ppc64@0.21.5': - resolution: {integrity: sha512-1hHV/Z4OEfMwpLO8rp7CvlhBDnjsC3CttJXIhBi+5Aj5r+MBvy4egg7wCbe//hSsT+RvDAG7s81tAvpL2XAE4w==} - engines: {node: '>=12'} - cpu: [ppc64] - os: [linux] - '@esbuild/linux-ppc64@0.24.2': resolution: {integrity: sha512-shsVrgCZ57Vr2L8mm39kO5PPIb+843FStGt7sGGoqiiWYconSxwTiuswC1VJZLCjNiMLAMh34jg4VSEQb+iEbw==} engines: {node: '>=18'} cpu: [ppc64] os: [linux] - '@esbuild/linux-ppc64@0.25.10': - resolution: {integrity: sha512-NLinzzOgZQsGpsTkEbdJTCanwA5/wozN9dSgEl12haXJBzMTpssebuXR42bthOF3z7zXFWH1AmvWunUCkBE4EA==} + '@esbuild/linux-ppc64@0.25.11': + resolution: {integrity: sha512-nbLFgsQQEsBa8XSgSTSlrnBSrpoWh7ioFDUmwo158gIm5NNP+17IYmNWzaIzWmgCxq56vfr34xGkOcZ7jX6CPw==} engines: {node: '>=18'} cpu: [ppc64] os: [linux] @@ -2219,20 +2135,14 @@ packages: cpu: [riscv64] os: [linux] - '@esbuild/linux-riscv64@0.21.5': - resolution: {integrity: sha512-2HdXDMd9GMgTGrPWnJzP2ALSokE/0O5HhTUvWIbD3YdjME8JwvSCnNGBnTThKGEB91OZhzrJ4qIIxk/SBmyDDA==} - engines: {node: '>=12'} - cpu: [riscv64] - os: [linux] - '@esbuild/linux-riscv64@0.24.2': resolution: {integrity: sha512-4eSFWnU9Hhd68fW16GD0TINewo1L6dRrB+oLNNbYyMUAeOD2yCK5KXGK1GH4qD/kT+bTEXjsyTCiJGHPZ3eM9Q==} engines: {node: '>=18'} cpu: [riscv64] os: [linux] - '@esbuild/linux-riscv64@0.25.10': - resolution: {integrity: sha512-FE557XdZDrtX8NMIeA8LBJX3dC2M8VGXwfrQWU7LB5SLOajfJIxmSdyL/gU1m64Zs9CBKvm4UAuBp5aJ8OgnrA==} + '@esbuild/linux-riscv64@0.25.11': + resolution: {integrity: sha512-HfyAmqZi9uBAbgKYP1yGuI7tSREXwIb438q0nqvlpxAOs3XnZ8RsisRfmVsgV486NdjD7Mw2UrFSw51lzUk1ww==} engines: {node: '>=18'} cpu: [riscv64] os: [linux] @@ -2249,20 +2159,14 @@ packages: cpu: [s390x] os: [linux] - '@esbuild/linux-s390x@0.21.5': - resolution: {integrity: sha512-zus5sxzqBJD3eXxwvjN1yQkRepANgxE9lgOW2qLnmr8ikMTphkjgXu1HR01K4FJg8h1kEEDAqDcZQtbrRnB41A==} - engines: {node: '>=12'} - cpu: [s390x] - os: [linux] - '@esbuild/linux-s390x@0.24.2': resolution: {integrity: sha512-S0Bh0A53b0YHL2XEXC20bHLuGMOhFDO6GN4b3YjRLK//Ep3ql3erpNcPlEFed93hsQAjAQDNsvcK+hV90FubSw==} engines: {node: '>=18'} cpu: [s390x] os: [linux] - '@esbuild/linux-s390x@0.25.10': - resolution: {integrity: sha512-3BBSbgzuB9ajLoVZk0mGu+EHlBwkusRmeNYdqmznmMc9zGASFjSsxgkNsqmXugpPk00gJ0JNKh/97nxmjctdew==} + '@esbuild/linux-s390x@0.25.11': + resolution: {integrity: sha512-HjLqVgSSYnVXRisyfmzsH6mXqyvj0SA7pG5g+9W7ESgwA70AXYNpfKBqh1KbTxmQVaYxpzA/SvlB9oclGPbApw==} engines: {node: '>=18'} cpu: [s390x] os: [linux] @@ -2279,20 +2183,14 @@ packages: cpu: [x64] os: [linux] - '@esbuild/linux-x64@0.21.5': - resolution: {integrity: sha512-1rYdTpyv03iycF1+BhzrzQJCdOuAOtaqHTWJZCWvijKD2N5Xu0TtVC8/+1faWqcP9iBCWOmjmhoH94dH82BxPQ==} - engines: {node: '>=12'} - cpu: [x64] - os: [linux] - '@esbuild/linux-x64@0.24.2': resolution: {integrity: sha512-8Qi4nQcCTbLnK9WoMjdC9NiTG6/E38RNICU6sUNqK0QFxCYgoARqVqxdFmWkdonVsvGqWhmm7MO0jyTqLqwj0Q==} engines: {node: '>=18'} cpu: [x64] os: [linux] - '@esbuild/linux-x64@0.25.10': - resolution: {integrity: sha512-QSX81KhFoZGwenVyPoberggdW1nrQZSvfVDAIUXr3WqLRZGZqWk/P4T8p2SP+de2Sr5HPcvjhcJzEiulKgnxtA==} + '@esbuild/linux-x64@0.25.11': + resolution: {integrity: sha512-HSFAT4+WYjIhrHxKBwGmOOSpphjYkcswF449j6EjsjbinTZbp8PJtjsVK1XFJStdzXdy/jaddAep2FGY+wyFAQ==} engines: {node: '>=18'} cpu: [x64] os: [linux] @@ -2303,8 +2201,8 @@ packages: cpu: [arm64] os: [netbsd] - '@esbuild/netbsd-arm64@0.25.10': - resolution: {integrity: sha512-AKQM3gfYfSW8XRk8DdMCzaLUFB15dTrZfnX8WXQoOUpUBQ+NaAFCP1kPS/ykbbGYz7rxn0WS48/81l9hFl3u4A==} + '@esbuild/netbsd-arm64@0.25.11': + resolution: {integrity: sha512-hr9Oxj1Fa4r04dNpWr3P8QKVVsjQhqrMSUzZzf+LZcYjZNqhA3IAfPQdEh1FLVUJSiu6sgAwp3OmwBfbFgG2Xg==} engines: {node: '>=18'} cpu: [arm64] os: [netbsd] @@ -2321,20 +2219,14 @@ packages: cpu: [x64] os: [netbsd] - '@esbuild/netbsd-x64@0.21.5': - resolution: {integrity: sha512-Woi2MXzXjMULccIwMnLciyZH4nCIMpWQAs049KEeMvOcNADVxo0UBIQPfSmxB3CWKedngg7sWZdLvLczpe0tLg==} - engines: {node: '>=12'} - cpu: [x64] - os: [netbsd] - '@esbuild/netbsd-x64@0.24.2': resolution: {integrity: sha512-VefFaQUc4FMmJuAxmIHgUmfNiLXY438XrL4GDNV1Y1H/RW3qow68xTwjZKfj/+Plp9NANmzbH5R40Meudu8mmw==} engines: {node: '>=18'} cpu: [x64] os: [netbsd] - '@esbuild/netbsd-x64@0.25.10': - resolution: {integrity: sha512-7RTytDPGU6fek/hWuN9qQpeGPBZFfB4zZgcz2VK2Z5VpdUxEI8JKYsg3JfO0n/Z1E/6l05n0unDCNc4HnhQGig==} + '@esbuild/netbsd-x64@0.25.11': + resolution: {integrity: sha512-u7tKA+qbzBydyj0vgpu+5h5AeudxOAGncb8N6C9Kh1N4n7wU1Xw1JDApsRjpShRpXRQlJLb9wY28ELpwdPcZ7A==} engines: {node: '>=18'} cpu: [x64] os: [netbsd] @@ -2345,8 +2237,8 @@ packages: cpu: [arm64] os: [openbsd] - '@esbuild/openbsd-arm64@0.25.10': - resolution: {integrity: sha512-5Se0VM9Wtq797YFn+dLimf2Zx6McttsH2olUBsDml+lm0GOCRVebRWUvDtkY4BWYv/3NgzS8b/UM3jQNh5hYyw==} + '@esbuild/openbsd-arm64@0.25.11': + resolution: {integrity: sha512-Qq6YHhayieor3DxFOoYM1q0q1uMFYb7cSpLD2qzDSvK1NAvqFi8Xgivv0cFC6J+hWVw2teCYltyy9/m/14ryHg==} engines: {node: '>=18'} cpu: [arm64] os: [openbsd] @@ -2363,26 +2255,20 @@ packages: cpu: [x64] os: [openbsd] - '@esbuild/openbsd-x64@0.21.5': - resolution: {integrity: sha512-HLNNw99xsvx12lFBUwoT8EVCsSvRNDVxNpjZ7bPn947b8gJPzeHWyNVhFsaerc0n3TsbOINvRP2byTZ5LKezow==} - engines: {node: '>=12'} - cpu: [x64] - os: [openbsd] - '@esbuild/openbsd-x64@0.24.2': resolution: {integrity: sha512-+iDS6zpNM6EnJyWv0bMGLWSWeXGN/HTaF/LXHXHwejGsVi+ooqDfMCCTerNFxEkM3wYVcExkeGXNqshc9iMaOA==} engines: {node: '>=18'} cpu: [x64] os: [openbsd] - '@esbuild/openbsd-x64@0.25.10': - resolution: {integrity: sha512-XkA4frq1TLj4bEMB+2HnI0+4RnjbuGZfet2gs/LNs5Hc7D89ZQBHQ0gL2ND6Lzu1+QVkjp3x1gIcPKzRNP8bXw==} + '@esbuild/openbsd-x64@0.25.11': + resolution: {integrity: sha512-CN+7c++kkbrckTOz5hrehxWN7uIhFFlmS/hqziSFVWpAzpWrQoAG4chH+nN3Be+Kzv/uuo7zhX716x3Sn2Jduw==} engines: {node: '>=18'} cpu: [x64] os: [openbsd] - '@esbuild/openharmony-arm64@0.25.10': - resolution: {integrity: sha512-AVTSBhTX8Y/Fz6OmIVBip9tJzZEUcY8WLh7I59+upa5/GPhh2/aM6bvOMQySspnCCHvFi79kMtdJS1w0DXAeag==} + '@esbuild/openharmony-arm64@0.25.11': + resolution: {integrity: sha512-rOREuNIQgaiR+9QuNkbkxubbp8MSO9rONmwP5nKncnWJ9v5jQ4JxFnLu4zDSRPf3x4u+2VN4pM4RdyIzDty/wQ==} engines: {node: '>=18'} cpu: [arm64] os: [openharmony] @@ -2399,20 +2285,14 @@ packages: cpu: [x64] os: [sunos] - '@esbuild/sunos-x64@0.21.5': - resolution: {integrity: sha512-6+gjmFpfy0BHU5Tpptkuh8+uw3mnrvgs+dSPQXQOv3ekbordwnzTVEb4qnIvQcYXq6gzkyTnoZ9dZG+D4garKg==} - engines: {node: '>=12'} - cpu: [x64] - os: [sunos] - '@esbuild/sunos-x64@0.24.2': resolution: {integrity: sha512-hTdsW27jcktEvpwNHJU4ZwWFGkz2zRJUz8pvddmXPtXDzVKTTINmlmga3ZzwcuMpUvLw7JkLy9QLKyGpD2Yxig==} engines: {node: '>=18'} cpu: [x64] os: [sunos] - '@esbuild/sunos-x64@0.25.10': - resolution: {integrity: sha512-fswk3XT0Uf2pGJmOpDB7yknqhVkJQkAQOcW/ccVOtfx05LkbWOaRAtn5SaqXypeKQra1QaEa841PgrSL9ubSPQ==} + '@esbuild/sunos-x64@0.25.11': + resolution: {integrity: sha512-nq2xdYaWxyg9DcIyXkZhcYulC6pQ2FuCgem3LI92IwMgIZ69KHeY8T4Y88pcwoLIjbed8n36CyKoYRDygNSGhA==} engines: {node: '>=18'} cpu: [x64] os: [sunos] @@ -2429,20 +2309,14 @@ packages: cpu: [arm64] os: [win32] - '@esbuild/win32-arm64@0.21.5': - resolution: {integrity: sha512-Z0gOTd75VvXqyq7nsl93zwahcTROgqvuAcYDUr+vOv8uHhNSKROyU961kgtCD1e95IqPKSQKH7tBTslnS3tA8A==} - engines: {node: '>=12'} - cpu: [arm64] - os: [win32] - '@esbuild/win32-arm64@0.24.2': resolution: {integrity: sha512-LihEQ2BBKVFLOC9ZItT9iFprsE9tqjDjnbulhHoFxYQtQfai7qfluVODIYxt1PgdoyQkz23+01rzwNwYfutxUQ==} engines: {node: '>=18'} cpu: [arm64] os: [win32] - '@esbuild/win32-arm64@0.25.10': - resolution: {integrity: sha512-ah+9b59KDTSfpaCg6VdJoOQvKjI33nTaQr4UluQwW7aEwZQsbMCfTmfEO4VyewOxx4RaDT/xCy9ra2GPWmO7Kw==} + '@esbuild/win32-arm64@0.25.11': + resolution: {integrity: sha512-3XxECOWJq1qMZ3MN8srCJ/QfoLpL+VaxD/WfNRm1O3B4+AZ/BnLVgFbUV3eiRYDMXetciH16dwPbbHqwe1uU0Q==} engines: {node: '>=18'} cpu: [arm64] os: [win32] @@ -2459,20 +2333,14 @@ packages: cpu: [ia32] os: [win32] - '@esbuild/win32-ia32@0.21.5': - resolution: {integrity: sha512-SWXFF1CL2RVNMaVs+BBClwtfZSvDgtL//G/smwAc5oVK/UPu2Gu9tIaRgFmYFFKrmg3SyAjSrElf0TiJ1v8fYA==} - engines: {node: '>=12'} - cpu: [ia32] - os: [win32] - '@esbuild/win32-ia32@0.24.2': resolution: {integrity: sha512-q+iGUwfs8tncmFC9pcnD5IvRHAzmbwQ3GPS5/ceCyHdjXubwQWI12MKWSNSMYLJMq23/IUCvJMS76PDqXe1fxA==} engines: {node: '>=18'} cpu: [ia32] os: [win32] - '@esbuild/win32-ia32@0.25.10': - resolution: {integrity: sha512-QHPDbKkrGO8/cz9LKVnJU22HOi4pxZnZhhA2HYHez5Pz4JeffhDjf85E57Oyco163GnzNCVkZK0b/n4Y0UHcSw==} + '@esbuild/win32-ia32@0.25.11': + resolution: {integrity: sha512-3ukss6gb9XZ8TlRyJlgLn17ecsK4NSQTmdIXRASVsiS2sQ6zPPZklNJT5GR5tE/MUarymmy8kCEf5xPCNCqVOA==} engines: {node: '>=18'} cpu: [ia32] os: [win32] @@ -2489,20 +2357,14 @@ packages: cpu: [x64] os: [win32] - '@esbuild/win32-x64@0.21.5': - resolution: {integrity: sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw==} - engines: {node: '>=12'} - cpu: [x64] - os: [win32] - '@esbuild/win32-x64@0.24.2': resolution: {integrity: sha512-7VTgWzgMGvup6aSqDPLiW5zHaxYJGTO4OokMjIlrCtf+VpEL+cXKtCvg723iguPYI5oaUNdS+/V7OU2gvXVWEg==} engines: {node: '>=18'} cpu: [x64] os: [win32] - '@esbuild/win32-x64@0.25.10': - resolution: {integrity: sha512-9KpxSVFCu0iK1owoez6aC/s/EdUQLDN3adTxGCqxMVhrPDj6bt5dbrHDXUuq+Bs2vATFBBrQS5vdQ/Ed2P+nbw==} + '@esbuild/win32-x64@0.25.11': + resolution: {integrity: sha512-D7Hpz6A2L4hzsRpPaCYkQnGOotdUpDzSGRIv9I+1ITdHROSFUWW95ZPZWQmGka1Fg7W3zFJowyn9WGwMJ0+KPA==} engines: {node: '>=18'} cpu: [x64] os: [win32] @@ -2513,8 +2375,8 @@ packages: peerDependencies: eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 - '@eslint-community/regexpp@4.12.1': - resolution: {integrity: sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==} + '@eslint-community/regexpp@4.12.2': + resolution: {integrity: sha512-EriSTlt5OC9/7SXkRSCAhfSxxoSUgBm33OH+IkwbdpgoqsSsUg7y3uh+IICI/Qg4BBWr3U2i39RpmycbxMq4ew==} engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} '@eslint/eslintrc@2.1.4': @@ -2531,8 +2393,8 @@ packages: os: [darwin, linux, win32] hasBin: true - '@faker-js/faker@10.0.0': - resolution: {integrity: sha512-UollFEUkVXutsaP+Vndjxar40Gs5JL2HeLcl8xO1QAjJgOdhc3OmBFWyEylS+RddWaaBiAzH+5/17PLQJwDiLw==} + '@faker-js/faker@10.1.0': + resolution: {integrity: sha512-C3mrr3b5dRVlKPJdfrAXS8+dq+rq8Qm5SNRazca0JKgw1HQERFmrVb0towvMmw5uu8hHKNiQasMaR/tydf3Zsg==} engines: {node: ^20.19.0 || ^22.13.0 || ^23.5.0 || >=24.0.0, npm: '>=10'} '@floating-ui/core@1.7.3': @@ -2584,26 +2446,26 @@ packages: '@hapi/pinpoint@2.0.1': resolution: {integrity: sha512-EKQmr16tM8s16vTT3cA5L0kZZcTMU5DUOZTuvpnY738m+jyP3JIUj+Mm1xc1rsLkGBQ/gVnfKYPwOmPg1tUR4Q==} - '@hapi/tlds@1.1.3': - resolution: {integrity: sha512-QIvUMB5VZ8HMLZF9A2oWr3AFM430QC8oGd0L35y2jHpuW6bIIca6x/xL7zUf4J7L9WJ3qjz+iJII8ncaeMbpSg==} + '@hapi/tlds@1.1.4': + resolution: {integrity: sha512-Fq+20dxsxLaUn5jSSWrdtSRcIUba2JquuorF9UW1wIJS5cSUwxIsO2GIhaWynPRflvxSzFN+gxKte2HEW1OuoA==} engines: {node: '>=14.0.0'} '@hapi/topo@6.0.2': resolution: {integrity: sha512-KR3rD5inZbGMrHmgPxsJ9dbi6zEK+C3ZwUwTa+eMwWLz7oijWUTWD2pMSNNYJAU6Qq+65NkxXjqHr/7LM2Xkqg==} - '@hey-api/codegen-core@0.2.0': - resolution: {integrity: sha512-c7VjBy/8ed0EVLNgaeS9Xxams1Tuv/WK/b4xXH3Qr4wjzYeJUtxOcoP8YdwNLavqKP8pGiuctjX2Z1Pwc4jMgQ==} - engines: {node: ^18.18.0 || ^20.9.0 || >=22.10.0} + '@hey-api/codegen-core@0.3.2': + resolution: {integrity: sha512-DhfftvmoJyfMiiNHhfU7xrDxrjMjPKex1g064RfE6HjNEsFYwK36J2yKfkn8I1mrYWHPmS5ZV3GarMZajsYEEQ==} + engines: {node: '>=20.19.0'} peerDependencies: typescript: '>=5.5.3' - '@hey-api/json-schema-ref-parser@1.2.0': - resolution: {integrity: sha512-BMnIuhVgNmSudadw1GcTsP18Yk5l8FrYrg/OSYNxz0D2E0vf4D5e4j5nUbuY8MU6p1vp7ev0xrfP6A/NWazkzQ==} + '@hey-api/json-schema-ref-parser@1.2.1': + resolution: {integrity: sha512-inPeksRLq+j3ArnuGOzQPQE//YrhezQG0+9Y9yizScBN2qatJ78fIByhEgKdNAbtguDCn4RPxmEhcrePwHxs4A==} engines: {node: '>= 16'} - '@hey-api/openapi-ts@0.85.1': - resolution: {integrity: sha512-1pWQzOO/MXiE6BhyIZ88xJAVt82WJ775wNwRKjvQesNdUsFOJm4SKxzKEu/rn6mlpfiDkdxWlEHJ0SrcM2CUXQ==} - engines: {node: ^18.18.0 || ^20.9.0 || >=22.10.0} + '@hey-api/openapi-ts@0.86.11': + resolution: {integrity: sha512-H3W+mlTuX+zNy435bz3ZAxUDo12pv+Mpr2zlLWHyrbthgURBZm5OHwPCA1o261eCOof57DvfKVwSjw6XTUxI1Q==} + engines: {node: '>=20.19.0'} hasBin: true peerDependencies: typescript: '>=5.5.3' @@ -2623,8 +2485,8 @@ packages: peerDependencies: hono: ^4 - '@hono/zod-openapi@1.1.3': - resolution: {integrity: sha512-ikA8p0Jt7yplxOqbYwdh8rCQWaGN4bu8zK1HbCWqfWT9clo87L32D0eAQ/r0tJodtZbTV5d1vPB75FCkUt1Jdg==} + '@hono/zod-openapi@1.1.4': + resolution: {integrity: sha512-4BbOtd6oKg20yo6HLluVbEycBLLIfdKX5o/gUSoKZ2uBmeP4Og/VDfIX3k9pbNEX5W3fRkuPeVjGA+zaQDVY1A==} engines: {node: '>=16.0.0'} peerDependencies: hono: '>=4.3.6' @@ -2727,10 +2589,6 @@ packages: resolution: {integrity: sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==} engines: {node: '>=12'} - '@isaacs/fs-minipass@4.0.1': - resolution: {integrity: sha512-wgm9Ehl2jpeqP3zw/7mo3kRHFp5MEDhqAdwy1fTGkHAwnkGOVsgpvQhL8B5n1qlb01jV3n/bI0ZfZp5lWA1k4w==} - engines: {node: '>=18.0.0'} - '@istanbuljs/schema@0.1.3': resolution: {integrity: sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==} engines: {node: '>=8'} @@ -3019,8 +2877,8 @@ packages: resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} engines: {node: '>= 8'} - '@novu/api@1.7.1': - resolution: {integrity: sha512-jROuSbzuP4kXeixIZdub1OMrV6l/RiHvTtx8RIcA5UH3CV6RYdsZHrbWfosh6QPmvrUmskGEeLfzdKZdYaZMHw==} + '@novu/api@1.8.0': + resolution: {integrity: sha512-ba/+fogM+a380AfJ2SSGBQSnHJe0H2Io2NWOf7LeJwFhWIjiYlNAZ1N5DaFv+jNRkaKh33jXDoWWkqqgQUu5lw==} hasBin: true peerDependencies: '@modelcontextprotocol/sdk': '>=1.5.0 <1.10.0' @@ -3055,6 +2913,12 @@ packages: peerDependencies: '@opentelemetry/api': '>=1.0.0 <1.10.0' + '@opentelemetry/context-async-hooks@2.2.0': + resolution: {integrity: sha512-qRkLWiUEZNAmYapZ7KGS5C4OmBLcP/H2foXeOEaowYCR0wi89fHejrfYfbuLVCMLp/dWZXKvQusdbUEZjERfwQ==} + engines: {node: ^18.19.0 || >=20.6.0} + peerDependencies: + '@opentelemetry/api': '>=1.0.0 <1.10.0' + '@opentelemetry/core@1.30.1': resolution: {integrity: sha512-OOCM2C/QIURhJMuKaekP3TRBxBKxG/TWWA0TL2J6nXUtDnuCtccy49LUJF8xPFXMX+0LMcxFpCo8M9cGY1W6rQ==} engines: {node: '>=14'} @@ -3067,6 +2931,12 @@ packages: peerDependencies: '@opentelemetry/api': '>=1.0.0 <1.10.0' + '@opentelemetry/core@2.2.0': + resolution: {integrity: sha512-FuabnnUm8LflnieVxs6eP7Z383hgQU4W1e3KJS6aOG3RxWxcHyBxH8fDMHNgu/gFx/M2jvTOW/4/PHhLz6bjWw==} + engines: {node: ^18.19.0 || >=20.6.0} + peerDependencies: + '@opentelemetry/api': '>=1.0.0 <1.10.0' + '@opentelemetry/exporter-logs-otlp-grpc@0.206.0': resolution: {integrity: sha512-kJKxKBaGwqWop95d6tcluz260IWwIgOG0BH8oVm6429tg8LxY2PJb7Om8d5s+5vOFM8DkUYCnIpn9d/13/RcKQ==} engines: {node: ^18.19.0 || >=20.6.0} @@ -3329,6 +3199,12 @@ packages: peerDependencies: '@opentelemetry/api': '>=1.3.0 <1.10.0' + '@opentelemetry/resources@2.2.0': + resolution: {integrity: sha512-1pNQf/JazQTMA0BiO5NINUzH0cbLbbl7mntLa4aJNmCCXSj0q03T5ZXXL0zw4G55TjdL9Tz32cznGClf+8zr5A==} + engines: {node: ^18.19.0 || >=20.6.0} + peerDependencies: + '@opentelemetry/api': '>=1.3.0 <1.10.0' + '@opentelemetry/sdk-logs@0.206.0': resolution: {integrity: sha512-SQ2yTmqe4Mw9RI3a/glVkfjWPsXh6LySvnljXubiZq4zu+UP8NMJt2j82ZsYb+KpD7Eu+/41/7qlJnjdeVjz7Q==} engines: {node: ^18.19.0 || >=20.6.0} @@ -3359,12 +3235,24 @@ packages: peerDependencies: '@opentelemetry/api': '>=1.3.0 <1.10.0' + '@opentelemetry/sdk-trace-base@2.2.0': + resolution: {integrity: sha512-xWQgL0Bmctsalg6PaXExmzdedSp3gyKV8mQBwK/j9VGdCDu2fmXIb2gAehBKbkXCpJ4HPkgv3QfoJWRT4dHWbw==} + engines: {node: ^18.19.0 || >=20.6.0} + peerDependencies: + '@opentelemetry/api': '>=1.3.0 <1.10.0' + '@opentelemetry/sdk-trace-node@2.1.0': resolution: {integrity: sha512-SvVlBFc/jI96u/mmlKm86n9BbTCbQ35nsPoOohqJX6DXH92K0kTe73zGY5r8xoI1QkjR9PizszVJLzMC966y9Q==} engines: {node: ^18.19.0 || >=20.6.0} peerDependencies: '@opentelemetry/api': '>=1.0.0 <1.10.0' + '@opentelemetry/sdk-trace-node@2.2.0': + resolution: {integrity: sha512-+OaRja3f0IqGG2kptVeYsrZQK9nKRSpfFrKtRBq4uh6nIB8bTBgaGvYQrQoRrQWQMA5dK5yLhDMDc0dvYvCOIQ==} + engines: {node: ^18.19.0 || >=20.6.0} + peerDependencies: + '@opentelemetry/api': '>=1.0.0 <1.10.0' + '@opentelemetry/semantic-conventions@1.28.0': resolution: {integrity: sha512-lp4qAiMTD4sNWW4DbKLBkfiMZ4jbAboJIGOQr5DvciMRI494OapieI9qiODpOt0XBr1LjIDy1xAGAnVs5supTA==} engines: {node: '>=14'} @@ -3412,98 +3300,98 @@ packages: '@oslojs/webauthn@1.0.0': resolution: {integrity: sha512-2ZRpbt3msNURwvjmavzq9vrNlxUnWFBGMYqbC1kO3fYBLskL7r4DiLJT1wbtLoI+hclFwjhl48YhRFBl6RWg1A==} - '@oxc-resolver/binding-android-arm-eabi@11.9.0': - resolution: {integrity: sha512-4AxaG6TkSBQ2FiC5oGZEJQ35DjsSfAbW6/AJauebq4EzIPVOIgDJCF4de+PvX/Xi9BkNw6VtJuMXJdWW97iEAA==} + '@oxc-resolver/binding-android-arm-eabi@11.12.0': + resolution: {integrity: sha512-/IfGWLNdmS1kVYM2g+Xw4qXNWtCPZ/i5YMprflA8FC3vAjT4N0VucQcDxUPHxatQwre4qnhbFFWqRa1mz6Cgkw==} cpu: [arm] os: [android] - '@oxc-resolver/binding-android-arm64@11.9.0': - resolution: {integrity: sha512-oOEg7rUd2M6YlmRkvPcszJ6KO6TaLGN21oDdcs27gbTVYbQQtCWYbZz5jRW5zEBJu6dopoWVx+shJNGtG1qDFw==} + '@oxc-resolver/binding-android-arm64@11.12.0': + resolution: {integrity: sha512-H3Ehyinfx2VO8F5TwdaD/WY686Ia6J1H3LP0tgpNjlPGH2TrTniPERiwjqtOm/xHEef0KJvb/yfmUKLbHudhCA==} cpu: [arm64] os: [android] - '@oxc-resolver/binding-darwin-arm64@11.9.0': - resolution: {integrity: sha512-fM6zE/j6o3C1UIkcZPV7C1f186R7w97guY2N4lyNLlhlgwwhd46acnOezLARvRNU5oyKNev4PvOJhGCCDnFMGg==} + '@oxc-resolver/binding-darwin-arm64@11.12.0': + resolution: {integrity: sha512-hmm+A/0WdEtIeBrPtUHoSTzJefrZkhGSrmv5pwELKiqNqd+/gctzmTlt6wWrU8BMIryDMT9fWqLSQ3+NYfqAEA==} cpu: [arm64] os: [darwin] - '@oxc-resolver/binding-darwin-x64@11.9.0': - resolution: {integrity: sha512-Bg3Orw7gAxbUqQlt64YPWvHDVo3bo2JfI26Qmzv6nKo7mIMTDhQKl7YmywtLNMYbX0IgUM4qu1V90euu+WCDOw==} + '@oxc-resolver/binding-darwin-x64@11.12.0': + resolution: {integrity: sha512-g1tVu53EMfuRKs67o0PZR0+y/WXl/Tfn3d2ggjK3Hj17pQPcb9x1+Y6W7n4EjIDttwLZbCPCEr06X+aC03I45A==} cpu: [x64] os: [darwin] - '@oxc-resolver/binding-freebsd-x64@11.9.0': - resolution: {integrity: sha512-eBqVZqTETH6miBfIZXvpzUe98WATz2+Sh+LEFwuRpGsTsKkIpTyb4p1kwylCLkxrd3Yx7wkxQku+L0AMEGBiAA==} + '@oxc-resolver/binding-freebsd-x64@11.12.0': + resolution: {integrity: sha512-TiMatzvcVMSOiAx8sbnAw7UCfQpZDlm91ItywZrSHlQIJqDBipOmjIEYUMc2p823Y+fJ2ADL5UBjUB2kfqpedw==} cpu: [x64] os: [freebsd] - '@oxc-resolver/binding-linux-arm-gnueabihf@11.9.0': - resolution: {integrity: sha512-QgCk/IJnGBvpbc8rYTVgO+A3m3edJjH1zfv8Nvx7fmsxpbXwWH2l4b4tY3/SLMzasxsp7x7k87+HWt095bI5Lg==} + '@oxc-resolver/binding-linux-arm-gnueabihf@11.12.0': + resolution: {integrity: sha512-zU+9UgxPIvfReqmRr/dqZt3387HPgcH0hA4u0QGE+280EFjBYYL2rxGDxK0L+keO6vc2+ITWVDXm9KIj+alofg==} cpu: [arm] os: [linux] - '@oxc-resolver/binding-linux-arm-musleabihf@11.9.0': - resolution: {integrity: sha512-xkJH0jldIXD2GwoHpCDEF0ucJ7fvRETCL+iFLctM679o7qeDXvtzsO/E401EgFFXcWBJNKXWvH+ZfdYMKyowfA==} + '@oxc-resolver/binding-linux-arm-musleabihf@11.12.0': + resolution: {integrity: sha512-dfO1rrOeELYWD/BewMCp81k1I3pOdtAi2VCKg/A1I8z0uI4OR6cThb5dV9fpHkj7zlb0Y5iZFPe+NTbI/u1MgQ==} cpu: [arm] os: [linux] - '@oxc-resolver/binding-linux-arm64-gnu@11.9.0': - resolution: {integrity: sha512-TWq+y2psMzbMtZB9USAq2bSA7NV1TMmh9lhAFbMGQ8Yp2YV4BRC/HilD6qF++efQl6shueGBFOv0LVe9BUXaIA==} + '@oxc-resolver/binding-linux-arm64-gnu@11.12.0': + resolution: {integrity: sha512-JJNyN1ueryETKTUsG57+u0GDbtHKVcwcUoC6YyJmDdWE0o/3twXtHuS+F/121a2sVK8PKlROqGAev+STx3AuuQ==} cpu: [arm64] os: [linux] - '@oxc-resolver/binding-linux-arm64-musl@11.9.0': - resolution: {integrity: sha512-8WwGLfXk7yttc6rD6g53+RnYfX5B8xOot1ffthLn8oCXzVRO4cdChlmeHStxwLD/MWx8z8BGeyfyINNrsh9N2w==} + '@oxc-resolver/binding-linux-arm64-musl@11.12.0': + resolution: {integrity: sha512-rQHoxL0H0WwYUuukPUscLyzWwTl/hyogptYsY+Ye6AggJEOuvgJxMum2glY7etGIGOXxrfjareHnNO1tNY7WYg==} cpu: [arm64] os: [linux] - '@oxc-resolver/binding-linux-ppc64-gnu@11.9.0': - resolution: {integrity: sha512-ZWiAXfan6actlSzayaFS/kYO2zD6k1k0fmLb1opbujXYMKepEnjjVOvKdzCIYR/zKzudqI39dGc+ywqVdsPIpQ==} + '@oxc-resolver/binding-linux-ppc64-gnu@11.12.0': + resolution: {integrity: sha512-XPUZSctO+FrC0314Tcth+GrTtzy2yaYqyl8weBMAbKFMwuV8VnR2SHg9dmtI9vkukmM3auOLj0Kqjpl3YXwXiw==} cpu: [ppc64] os: [linux] - '@oxc-resolver/binding-linux-riscv64-gnu@11.9.0': - resolution: {integrity: sha512-p9mCSb+Bym+eycNo9k+81wQ5SAE31E+/rtfbDmF4/7krPotkEjPsEBSc3rqunRwO+FtsUn7H68JLY7hlai49eQ==} + '@oxc-resolver/binding-linux-riscv64-gnu@11.12.0': + resolution: {integrity: sha512-AmMjcP+6zHLF1JNq/p3yPEcXmZW/Xw5Xl19Zd0eBCSyGORJRuUOkcnyC8bwMO43b/G7PtausB83fclnFL5KZ3w==} cpu: [riscv64] os: [linux] - '@oxc-resolver/binding-linux-riscv64-musl@11.9.0': - resolution: {integrity: sha512-/SePuVxgFhLPciRwsJ8kLVltr+rxh0b6riGFuoPnFXBbHFclKnjNIt3TfqzUj0/vOnslXw3cVGPpmtkm2TgCgg==} + '@oxc-resolver/binding-linux-riscv64-musl@11.12.0': + resolution: {integrity: sha512-K2/yFBqFQOKyVwQxYDAKqDtk2kS4g58aGyj/R1bvYPr2P7v7971aUG/5m2WD5u2zSqWBfu1o4PdhX0lsqvA3vQ==} cpu: [riscv64] os: [linux] - '@oxc-resolver/binding-linux-s390x-gnu@11.9.0': - resolution: {integrity: sha512-zLuEjlYIzfnr1Ei2UZYQBbCTa/9deh+BEjO9rh1ai8BfEq4uj6RupTtNpgHfgAsEYdqOBVExw9EU1S6SW3RCAw==} + '@oxc-resolver/binding-linux-s390x-gnu@11.12.0': + resolution: {integrity: sha512-uSl4jo78tONGZtwsOA4ldT/OI7/hoHJhSMlGYE4Z/lzwMjkAaBdX4soAK5P/rL+U2yCJlRMnnoUckhXlZvDbSw==} cpu: [s390x] os: [linux] - '@oxc-resolver/binding-linux-x64-gnu@11.9.0': - resolution: {integrity: sha512-cxdg73WG+aVlPu/k4lEQPRVOhWunYOUglW6OSzclZLJJAXZU0tSZ5ymKaqPRkfTsyNSAafj1cA1XYd+P9UxBgw==} + '@oxc-resolver/binding-linux-x64-gnu@11.12.0': + resolution: {integrity: sha512-YjL8VAkbPyQ1kUuR6pOBk1O+EkxOoLROTa+ia1/AmFLuXYNltLGI1YxOY14i80cKpOf0Z59IXnlrY3coAI9NDQ==} cpu: [x64] os: [linux] - '@oxc-resolver/binding-linux-x64-musl@11.9.0': - resolution: {integrity: sha512-sy5nkVdMvNgqcx9sIY7G6U9TYZUZC4cmMGw/wKhJNuuD2/HFGtbje62ttXSwBAbVbmJ2GgZ4ZUo/S1OMyU+/OA==} + '@oxc-resolver/binding-linux-x64-musl@11.12.0': + resolution: {integrity: sha512-qpHPU0qqeJXh7cPzA+I+WWA6RxtRArfmSrhTXidbiQ08G5A1e55YQwExWkitB2rSqN6YFxnpfhHKo9hyhpyfSg==} cpu: [x64] os: [linux] - '@oxc-resolver/binding-wasm32-wasi@11.9.0': - resolution: {integrity: sha512-dfi/a0Xh6o6nOLbJdaYuy7txncEcwkRHp9DGGZaAP7zxDiepkBZ6ewSJODQrWwhjVmMteXo+XFzEOMjsC7WUtQ==} + '@oxc-resolver/binding-wasm32-wasi@11.12.0': + resolution: {integrity: sha512-oqg80bERZAagWLqYmngnesE0/2miv4lST7+wiiZniD6gyb1SoRckwEkbTsytGutkudFtw7O61Pon6pNlOvyFaA==} engines: {node: '>=14.0.0'} cpu: [wasm32] - '@oxc-resolver/binding-win32-arm64-msvc@11.9.0': - resolution: {integrity: sha512-b1yKr+eFwyi8pZMjAQwW352rXpaHAmz7FLK03vFIxdyWzWiiL6S3UrfMu+nKQud38963zu4wNNLm7rdXQazgRA==} + '@oxc-resolver/binding-win32-arm64-msvc@11.12.0': + resolution: {integrity: sha512-qKH816ycEN9yR/TX91CP1/i6xyVNHKX9VEOYa3XzQROPVtcYG2F6A3ng/PhwpJvS1cmL/DlilhglZe9KWkhNjg==} cpu: [arm64] os: [win32] - '@oxc-resolver/binding-win32-ia32-msvc@11.9.0': - resolution: {integrity: sha512-DxRT+1HjCpRH8qYCmGHzgsRCYiK+X14PUM9Fb+aD4TljplA7MdDQXqMISTb4zBZ70AuclvlXKTbW+K1GZop3xA==} + '@oxc-resolver/binding-win32-ia32-msvc@11.12.0': + resolution: {integrity: sha512-3bgxubTlhzF6BwBnhGz5BTboarl1upuanEr6i0dncjfEcU+Z9xAOgbtA7Ip3G3EKDjE1objRKK+ny8PKJZ3b7Q==} cpu: [ia32] os: [win32] - '@oxc-resolver/binding-win32-x64-msvc@11.9.0': - resolution: {integrity: sha512-gE3QJvhh0Yj9cSAkkHjRLKPmC7BTJeiaB5YyhVKVUwbnWQgTszV92lZ9pvZtNPEghP7jPbhEs4c6983A0ojQwA==} + '@oxc-resolver/binding-win32-x64-msvc@11.12.0': + resolution: {integrity: sha512-rbiWYQWxwy+x7+KgNAoAGYIPB3xUclQlFVV3L5lwfsbp4PQPomJohHowlWgi3GRAEybM5+ZL9xny0YfpJOsthA==} cpu: [x64] os: [win32] @@ -3599,6 +3487,9 @@ packages: '@petamoriken/float16@3.9.3': resolution: {integrity: sha512-8awtpHXCx/bNpFt4mt2xdkgtgVvKqty8VbjHI/WWWQuEw+KLzFot3f4+LkQY9YmOtq7A5GdOnqoIC8Pdygjk2g==} + '@pinojs/redact@0.4.0': + resolution: {integrity: sha512-k2ENnmBugE/rzQfEcdWHcCY+/FM3VLzH9cYEsbdsoqrvzAKRhUZeRNhAZvB8OitQJ1TBed3yqWtdjzS6wJKBwg==} + '@pivanov/utils@0.0.2': resolution: {integrity: sha512-q9CN0bFWxWgMY5hVVYyBgez1jGiLBa6I+LkG37ycylPhFvEGOOeaADGtUSu46CaZasPnlY8fCdVJZmrgKb1EPA==} peerDependencies: @@ -4547,8 +4438,8 @@ packages: react-scan: ^0.1.0 vite: ^2 || ^3 || ^4 || ^5 || ^6 - '@reduxjs/toolkit@2.9.0': - resolution: {integrity: sha512-fSfQlSRu9Z5yBkvsNhYF2rPS8cGXn/TZVrlwN1948QyZ8xMZ0JvP50S2acZNaf+o63u6aEeMjipFyksjIcWrog==} + '@reduxjs/toolkit@2.9.2': + resolution: {integrity: sha512-ZAYu/NXkl/OhqTz7rfPaAhY0+e8Fr15jqNxte/2exKUxvHyQ/hcqmdekiN1f+Lcw3pE+34FCgX+26zcUE3duCg==} peerDependencies: react: ^16.9.0 || ^17.0.0 || ^18 || ^19 react-redux: ^7.2.1 || ^8.1.3 || ^9.0.0 @@ -4561,11 +4452,8 @@ packages: '@remirror/core-constants@3.0.0': resolution: {integrity: sha512-42aWfPrimMfDKDi4YegyS7x+/0tlzaqwPQCULLanv3DMIlu96KTJR0fM5isWX2UViOqlGnX6YFgqWepcX+XMNg==} - '@rolldown/pluginutils@1.0.0-beta.27': - resolution: {integrity: sha512-+d0F4MKMCbeVUJwG96uQ4SgAznZNSq93I3V+9NHA4OpvqG8mRCpGdKmK8l/dl02h2CCDHwW2FqilnTyDcAnqjA==} - - '@rolldown/pluginutils@1.0.0-beta.38': - resolution: {integrity: sha512-N/ICGKleNhA5nc9XXQG/kkKHJ7S55u0x0XUJbbkmdCnFuoRkM1Il12q9q0eX19+M7KKUEPw/daUPIRnxhcxAIw==} + '@rolldown/pluginutils@1.0.0-beta.43': + resolution: {integrity: sha512-5Uxg7fQUCmfhax7FJke2+8B6cqgeUJUD9o2uXIKXhD+mG0mL6NObmVoi9wXEU1tY89mZKgAYA6fTbftx3q2ZPQ==} '@rollup/plugin-babel@5.3.1': resolution: {integrity: sha512-WFfdLWU/xVWKeRQnKmIAQULUI7Il0gZnBIH/ZFO069wYIfPu+8zrfp/KMW0atmELoRDq8FbiP3VCss9MhCut7Q==} @@ -4620,113 +4508,113 @@ packages: rollup: optional: true - '@rollup/rollup-android-arm-eabi@4.52.4': - resolution: {integrity: sha512-BTm2qKNnWIQ5auf4deoetINJm2JzvihvGb9R6K/ETwKLql/Bb3Eg2H1FBp1gUb4YGbydMA3jcmQTR73q7J+GAA==} + '@rollup/rollup-android-arm-eabi@4.52.5': + resolution: {integrity: sha512-8c1vW4ocv3UOMp9K+gToY5zL2XiiVw3k7f1ksf4yO1FlDFQ1C2u72iACFnSOceJFsWskc2WZNqeRhFRPzv+wtQ==} cpu: [arm] os: [android] - '@rollup/rollup-android-arm64@4.52.4': - resolution: {integrity: sha512-P9LDQiC5vpgGFgz7GSM6dKPCiqR3XYN1WwJKA4/BUVDjHpYsf3iBEmVz62uyq20NGYbiGPR5cNHI7T1HqxNs2w==} + '@rollup/rollup-android-arm64@4.52.5': + resolution: {integrity: sha512-mQGfsIEFcu21mvqkEKKu2dYmtuSZOBMmAl5CFlPGLY94Vlcm+zWApK7F/eocsNzp8tKmbeBP8yXyAbx0XHsFNA==} cpu: [arm64] os: [android] - '@rollup/rollup-darwin-arm64@4.52.4': - resolution: {integrity: sha512-QRWSW+bVccAvZF6cbNZBJwAehmvG9NwfWHwMy4GbWi/BQIA/laTIktebT2ipVjNncqE6GLPxOok5hsECgAxGZg==} + '@rollup/rollup-darwin-arm64@4.52.5': + resolution: {integrity: sha512-takF3CR71mCAGA+v794QUZ0b6ZSrgJkArC+gUiG6LB6TQty9T0Mqh3m2ImRBOxS2IeYBo4lKWIieSvnEk2OQWA==} cpu: [arm64] os: [darwin] - '@rollup/rollup-darwin-x64@4.52.4': - resolution: {integrity: sha512-hZgP05pResAkRJxL1b+7yxCnXPGsXU0fG9Yfd6dUaoGk+FhdPKCJ5L1Sumyxn8kvw8Qi5PvQ8ulenUbRjzeCTw==} + '@rollup/rollup-darwin-x64@4.52.5': + resolution: {integrity: sha512-W901Pla8Ya95WpxDn//VF9K9u2JbocwV/v75TE0YIHNTbhqUTv9w4VuQ9MaWlNOkkEfFwkdNhXgcLqPSmHy0fA==} cpu: [x64] os: [darwin] - '@rollup/rollup-freebsd-arm64@4.52.4': - resolution: {integrity: sha512-xmc30VshuBNUd58Xk4TKAEcRZHaXlV+tCxIXELiE9sQuK3kG8ZFgSPi57UBJt8/ogfhAF5Oz4ZSUBN77weM+mQ==} + '@rollup/rollup-freebsd-arm64@4.52.5': + resolution: {integrity: sha512-QofO7i7JycsYOWxe0GFqhLmF6l1TqBswJMvICnRUjqCx8b47MTo46W8AoeQwiokAx3zVryVnxtBMcGcnX12LvA==} cpu: [arm64] os: [freebsd] - '@rollup/rollup-freebsd-x64@4.52.4': - resolution: {integrity: sha512-WdSLpZFjOEqNZGmHflxyifolwAiZmDQzuOzIq9L27ButpCVpD7KzTRtEG1I0wMPFyiyUdOO+4t8GvrnBLQSwpw==} + '@rollup/rollup-freebsd-x64@4.52.5': + resolution: {integrity: sha512-jr21b/99ew8ujZubPo9skbrItHEIE50WdV86cdSoRkKtmWa+DDr6fu2c/xyRT0F/WazZpam6kk7IHBerSL7LDQ==} cpu: [x64] os: [freebsd] - '@rollup/rollup-linux-arm-gnueabihf@4.52.4': - resolution: {integrity: sha512-xRiOu9Of1FZ4SxVbB0iEDXc4ddIcjCv2aj03dmW8UrZIW7aIQ9jVJdLBIhxBI+MaTnGAKyvMwPwQnoOEvP7FgQ==} + '@rollup/rollup-linux-arm-gnueabihf@4.52.5': + resolution: {integrity: sha512-PsNAbcyv9CcecAUagQefwX8fQn9LQ4nZkpDboBOttmyffnInRy8R8dSg6hxxl2Re5QhHBf6FYIDhIj5v982ATQ==} cpu: [arm] os: [linux] - '@rollup/rollup-linux-arm-musleabihf@4.52.4': - resolution: {integrity: sha512-FbhM2p9TJAmEIEhIgzR4soUcsW49e9veAQCziwbR+XWB2zqJ12b4i/+hel9yLiD8pLncDH4fKIPIbt5238341Q==} + '@rollup/rollup-linux-arm-musleabihf@4.52.5': + resolution: {integrity: sha512-Fw4tysRutyQc/wwkmcyoqFtJhh0u31K+Q6jYjeicsGJJ7bbEq8LwPWV/w0cnzOqR2m694/Af6hpFayLJZkG2VQ==} cpu: [arm] os: [linux] - '@rollup/rollup-linux-arm64-gnu@4.52.4': - resolution: {integrity: sha512-4n4gVwhPHR9q/g8lKCyz0yuaD0MvDf7dV4f9tHt0C73Mp8h38UCtSCSE6R9iBlTbXlmA8CjpsZoujhszefqueg==} + '@rollup/rollup-linux-arm64-gnu@4.52.5': + resolution: {integrity: sha512-a+3wVnAYdQClOTlyapKmyI6BLPAFYs0JM8HRpgYZQO02rMR09ZcV9LbQB+NL6sljzG38869YqThrRnfPMCDtZg==} cpu: [arm64] os: [linux] - '@rollup/rollup-linux-arm64-musl@4.52.4': - resolution: {integrity: sha512-u0n17nGA0nvi/11gcZKsjkLj1QIpAuPFQbR48Subo7SmZJnGxDpspyw2kbpuoQnyK+9pwf3pAoEXerJs/8Mi9g==} + '@rollup/rollup-linux-arm64-musl@4.52.5': + resolution: {integrity: sha512-AvttBOMwO9Pcuuf7m9PkC1PUIKsfaAJ4AYhy944qeTJgQOqJYJ9oVl2nYgY7Rk0mkbsuOpCAYSs6wLYB2Xiw0Q==} cpu: [arm64] os: [linux] - '@rollup/rollup-linux-loong64-gnu@4.52.4': - resolution: {integrity: sha512-0G2c2lpYtbTuXo8KEJkDkClE/+/2AFPdPAbmaHoE870foRFs4pBrDehilMcrSScrN/fB/1HTaWO4bqw+ewBzMQ==} + '@rollup/rollup-linux-loong64-gnu@4.52.5': + resolution: {integrity: sha512-DkDk8pmXQV2wVrF6oq5tONK6UHLz/XcEVow4JTTerdeV1uqPeHxwcg7aFsfnSm9L+OO8WJsWotKM2JJPMWrQtA==} cpu: [loong64] os: [linux] - '@rollup/rollup-linux-ppc64-gnu@4.52.4': - resolution: {integrity: sha512-teSACug1GyZHmPDv14VNbvZFX779UqWTsd7KtTM9JIZRDI5NUwYSIS30kzI8m06gOPB//jtpqlhmraQ68b5X2g==} + '@rollup/rollup-linux-ppc64-gnu@4.52.5': + resolution: {integrity: sha512-W/b9ZN/U9+hPQVvlGwjzi+Wy4xdoH2I8EjaCkMvzpI7wJUs8sWJ03Rq96jRnHkSrcHTpQe8h5Tg3ZzUPGauvAw==} cpu: [ppc64] os: [linux] - '@rollup/rollup-linux-riscv64-gnu@4.52.4': - resolution: {integrity: sha512-/MOEW3aHjjs1p4Pw1Xk4+3egRevx8Ji9N6HUIA1Ifh8Q+cg9dremvFCUbOX2Zebz80BwJIgCBUemjqhU5XI5Eg==} + '@rollup/rollup-linux-riscv64-gnu@4.52.5': + resolution: {integrity: sha512-sjQLr9BW7R/ZiXnQiWPkErNfLMkkWIoCz7YMn27HldKsADEKa5WYdobaa1hmN6slu9oWQbB6/jFpJ+P2IkVrmw==} cpu: [riscv64] os: [linux] - '@rollup/rollup-linux-riscv64-musl@4.52.4': - resolution: {integrity: sha512-1HHmsRyh845QDpEWzOFtMCph5Ts+9+yllCrREuBR/vg2RogAQGGBRC8lDPrPOMnrdOJ+mt1WLMOC2Kao/UwcvA==} + '@rollup/rollup-linux-riscv64-musl@4.52.5': + resolution: {integrity: sha512-hq3jU/kGyjXWTvAh2awn8oHroCbrPm8JqM7RUpKjalIRWWXE01CQOf/tUNWNHjmbMHg/hmNCwc/Pz3k1T/j/Lg==} cpu: [riscv64] os: [linux] - '@rollup/rollup-linux-s390x-gnu@4.52.4': - resolution: {integrity: sha512-seoeZp4L/6D1MUyjWkOMRU6/iLmCU2EjbMTyAG4oIOs1/I82Y5lTeaxW0KBfkUdHAWN7j25bpkt0rjnOgAcQcA==} + '@rollup/rollup-linux-s390x-gnu@4.52.5': + resolution: {integrity: sha512-gn8kHOrku8D4NGHMK1Y7NA7INQTRdVOntt1OCYypZPRt6skGbddska44K8iocdpxHTMMNui5oH4elPH4QOLrFQ==} cpu: [s390x] os: [linux] - '@rollup/rollup-linux-x64-gnu@4.52.4': - resolution: {integrity: sha512-Wi6AXf0k0L7E2gteNsNHUs7UMwCIhsCTs6+tqQ5GPwVRWMaflqGec4Sd8n6+FNFDw9vGcReqk2KzBDhCa1DLYg==} + '@rollup/rollup-linux-x64-gnu@4.52.5': + resolution: {integrity: sha512-hXGLYpdhiNElzN770+H2nlx+jRog8TyynpTVzdlc6bndktjKWyZyiCsuDAlpd+j+W+WNqfcyAWz9HxxIGfZm1Q==} cpu: [x64] os: [linux] - '@rollup/rollup-linux-x64-musl@4.52.4': - resolution: {integrity: sha512-dtBZYjDmCQ9hW+WgEkaffvRRCKm767wWhxsFW3Lw86VXz/uJRuD438/XvbZT//B96Vs8oTA8Q4A0AfHbrxP9zw==} + '@rollup/rollup-linux-x64-musl@4.52.5': + resolution: {integrity: sha512-arCGIcuNKjBoKAXD+y7XomR9gY6Mw7HnFBv5Rw7wQRvwYLR7gBAgV7Mb2QTyjXfTveBNFAtPt46/36vV9STLNg==} cpu: [x64] os: [linux] - '@rollup/rollup-openharmony-arm64@4.52.4': - resolution: {integrity: sha512-1ox+GqgRWqaB1RnyZXL8PD6E5f7YyRUJYnCqKpNzxzP0TkaUh112NDrR9Tt+C8rJ4x5G9Mk8PQR3o7Ku2RKqKA==} + '@rollup/rollup-openharmony-arm64@4.52.5': + resolution: {integrity: sha512-QoFqB6+/9Rly/RiPjaomPLmR/13cgkIGfA40LHly9zcH1S0bN2HVFYk3a1eAyHQyjs3ZJYlXvIGtcCs5tko9Cw==} cpu: [arm64] os: [openharmony] - '@rollup/rollup-win32-arm64-msvc@4.52.4': - resolution: {integrity: sha512-8GKr640PdFNXwzIE0IrkMWUNUomILLkfeHjXBi/nUvFlpZP+FA8BKGKpacjW6OUUHaNI6sUURxR2U2g78FOHWQ==} + '@rollup/rollup-win32-arm64-msvc@4.52.5': + resolution: {integrity: sha512-w0cDWVR6MlTstla1cIfOGyl8+qb93FlAVutcor14Gf5Md5ap5ySfQ7R9S/NjNaMLSFdUnKGEasmVnu3lCMqB7w==} cpu: [arm64] os: [win32] - '@rollup/rollup-win32-ia32-msvc@4.52.4': - resolution: {integrity: sha512-AIy/jdJ7WtJ/F6EcfOb2GjR9UweO0n43jNObQMb6oGxkYTfLcnN7vYYpG+CN3lLxrQkzWnMOoNSHTW54pgbVxw==} + '@rollup/rollup-win32-ia32-msvc@4.52.5': + resolution: {integrity: sha512-Aufdpzp7DpOTULJCuvzqcItSGDH73pF3ko/f+ckJhxQyHtp67rHw3HMNxoIdDMUITJESNE6a8uh4Lo4SLouOUg==} cpu: [ia32] os: [win32] - '@rollup/rollup-win32-x64-gnu@4.52.4': - resolution: {integrity: sha512-UF9KfsH9yEam0UjTwAgdK0anlQ7c8/pWPU2yVjyWcF1I1thABt6WXE47cI71pGiZ8wGvxohBoLnxM04L/wj8mQ==} + '@rollup/rollup-win32-x64-gnu@4.52.5': + resolution: {integrity: sha512-UGBUGPFp1vkj6p8wCRraqNhqwX/4kNQPS57BCFc8wYh0g94iVIW33wJtQAx3G7vrjjNtRaxiMUylM0ktp/TRSQ==} cpu: [x64] os: [win32] - '@rollup/rollup-win32-x64-msvc@4.52.4': - resolution: {integrity: sha512-bf9PtUa0u8IXDVxzRToFQKsNCRz9qLYfR/MpECxl4mRoWYjAeFjgxj1XdZr2M/GNVpT05p+LgQOHopYDlUu6/w==} + '@rollup/rollup-win32-x64-msvc@4.52.5': + resolution: {integrity: sha512-TAcgQh2sSkykPRWLrdyy2AiceMckNf5loITqXxFI5VuQjS5tSuw3WlwdN8qv8vzjLAUTvYaH/mVjSFpbkFbpTg==} cpu: [x64] os: [win32] @@ -4739,24 +4627,27 @@ packages: '@rrweb/utils@2.0.0-alpha.18': resolution: {integrity: sha512-qV8azQYo9RuwW4NGRtOiQfTBdHNL1B0Q//uRLMbCSjbaKqJYd88Js17Bdskj65a0Vgp2dwTLPIZ0gK47dfjfaA==} - '@scalar/core@0.3.19': - resolution: {integrity: sha512-pxyvpDqOc17W0IcvbqJMLfax5ovQzDpljxFH50njXIOcDcgDMcrLxnl3nXXNWQBTWStiZq4RoPP/qCpE2ecUNQ==} + '@scalar/core@0.3.20': + resolution: {integrity: sha512-bIlrePx41pSvjDcaJPa9YVVhbSm0N9SKQm2Fzl489S0bUVToyXIQtMFVR4i+BmXGjOcATm/66ELW4vdXRjHoRA==} engines: {node: '>=20'} - '@scalar/hono-api-reference@0.9.21': - resolution: {integrity: sha512-Mum7m3OhmMc9LXAIG/J6H6CrrZ1BDPiRaE3SUjXqfddooMX6V0yhP1X9oXBZ30/cWtW58SntZG+6fuL+QZO+vg==} + '@scalar/hono-api-reference@0.9.22': + resolution: {integrity: sha512-utIz4F6YZj3QU/9HK4P1wIcHY8ceMbL7w+VahFbnmZbE3Gy+haaaHfhZOs2nAfdx1cKOhkm11/inZTtw8+I2bw==} engines: {node: '>=20'} peerDependencies: hono: ^4.0.0 - '@scalar/openapi-types@0.4.1': - resolution: {integrity: sha512-JCXCbs/Sty/qosplTFP0YdR2yD7Jkzfy44+3Om3dlzNtOu92lVTcvcVU3MIn1J4zY4/gk23DhI3m137xxNITRw==} + '@scalar/openapi-types@0.5.0': + resolution: {integrity: sha512-HJBcLa+/mPP+3TCcQngj/iW5UqynRosOQdEETXjmdy6Ngw8wBjwIcT6C86J5jufJ6sI8++HYnt+e7pAvp5FO6A==} engines: {node: '>=20'} - '@scalar/types@0.3.1': - resolution: {integrity: sha512-wTxhK6ByAcJRuSTJSwu3CCy0JvxxekAk1hHlseSnZ6/jKSANPmkCY/804wrRUW6A5TgyFx/4nVl4Vb3ymymHvg==} + '@scalar/types@0.3.2': + resolution: {integrity: sha512-+X10CCvG57nAqYbTGteiSzRFQcMYm7DLfCRMeEfiWQ9Bq2ladat17XsMSvkvwcfpOSlsoepWf3P5dErERUSOQQ==} engines: {node: '>=20'} + '@sec-ant/readable-stream@0.4.1': + resolution: {integrity: sha512-831qok9r2t8AlxLko40y2ebgSDhenenCatLVeW/uBtnHPyhHOvG0C7TvfgecV+wHzIm5KUICgzmVpWS+IMEAeg==} + '@selderee/plugin-htmlparser2@0.11.0': resolution: {integrity: sha512-P33hHGdldxGabLFjPPpaTxVolMrzrcegejx+0GxjrIb9Zv48D8yAIA/QTDR2dFl7Uz7urX8aX6+5bCZslr+gWQ==} @@ -4772,90 +4663,94 @@ packages: resolution: {integrity: sha512-/ZqxUvKeEztU9drOoPC/8opEPOk+jLlB2q4+xpx6HVLq6aFu3pMpalkTpAQz8XfRfpLp8O25bh6pGPcHDCYpqg==} engines: {node: '>=12.*'} - '@sentry-internal/browser-utils@9.46.0': - resolution: {integrity: sha512-Q0CeHym9wysku8mYkORXmhtlBE0IrafAI+NiPSqxOBKXGOCWKVCvowHuAF56GwPFic2rSrRnub5fWYv7T1jfEQ==} + '@sentry-internal/browser-utils@10.22.0': + resolution: {integrity: sha512-BpJoLZEyJr7ORzkCrIjxRTnFWwO1mJNICVh3B9g5d9245niGT4OJvRozmLz89WgJkZFHWu84ls6Xfq5b/3tGFQ==} engines: {node: '>=18'} - '@sentry-internal/feedback@9.46.0': - resolution: {integrity: sha512-KLRy3OolDkGdPItQ3obtBU2RqDt9+KE8z7r7Gsu7c6A6A89m8ZVlrxee3hPQt6qp0YY0P8WazpedU3DYTtaT8w==} + '@sentry-internal/feedback@10.22.0': + resolution: {integrity: sha512-zXySOin/gGHPV+yKaHqjN9YZ7psEJwzLn8PzCLeo+4REzF1eQwbYZIgOxJFD32z8s3nZiABSWFM/n1CvVfMEsQ==} engines: {node: '>=18'} '@sentry-internal/node-cpu-profiler@2.2.0': resolution: {integrity: sha512-oLHVYurqZfADPh5hvmQYS5qx8t0UZzT2u6+/68VXsFruQEOnYJTODKgU3BVLmemRs3WE6kCJjPeFdHVYOQGSzQ==} engines: {node: '>=18'} - '@sentry-internal/replay-canvas@9.46.0': - resolution: {integrity: sha512-QcBjrdRWFJrrrjbmrr2bbrp2R9RYj1KMEbhHNT2Lm1XplIQw+tULEKOHxNtkUFSLR1RNje7JQbxhzM1j95FxVQ==} + '@sentry-internal/replay-canvas@10.22.0': + resolution: {integrity: sha512-DE4JNUskJg+O+wFq42W5gAa/99aD5k7TfGOwABxvnzFv8vkKA7pqXwPbFFPzypdKIkln+df7RmbnDwQRNg6/lA==} engines: {node: '>=18'} - '@sentry-internal/replay@9.46.0': - resolution: {integrity: sha512-+8JUblxSSnN0FXcmOewbN+wIc1dt6/zaSeAvt2xshrfrLooVullcGsuLAiPhY0d/e++Fk06q1SAl9g4V0V13gg==} + '@sentry-internal/replay@10.22.0': + resolution: {integrity: sha512-JNE4kHAQSG4/V+J+Zog3vKBWgOe9H33ol/MEU1RuLM/4I+uLf4mTetwnS9ilpnnW/Z/gQYfA+R3CiMrZtqTivw==} engines: {node: '>=18'} - '@sentry/babel-plugin-component-annotate@3.6.1': - resolution: {integrity: sha512-zmvUa4RpzDG3LQJFpGCE8lniz8Rk1Wa6ZvvK+yEH+snZeaHHRbSnAQBMR607GOClP+euGHNO2YtaY4UAdNTYbg==} + '@sentry/babel-plugin-component-annotate@4.6.0': + resolution: {integrity: sha512-3soTX50JPQQ51FSbb4qvNBf4z/yP7jTdn43vMTp9E4IxvJ9HKJR7OEuKkCMszrZmWsVABXl02msqO7QisePdiQ==} engines: {node: '>= 14'} - '@sentry/browser@9.46.0': - resolution: {integrity: sha512-NOnCTQCM0NFuwbyt4DYWDNO2zOTj1mCf43hJqGDFb1XM9F++7zAmSNnCx4UrEoBTiFOy40McJwBBk9D1blSktA==} + '@sentry/browser@10.22.0': + resolution: {integrity: sha512-wD2XqN+yeBpQFfdPo6+wlKDMyyuDctVGzZWE4qTPntICKQuwMdAfeq5Ma89ad0Dw+bzG9UijGeyuJQlswF87Mw==} engines: {node: '>=18'} - '@sentry/bundler-plugin-core@3.6.1': - resolution: {integrity: sha512-/ubWjPwgLep84sUPzHfKL2Ns9mK9aQrEX4aBFztru7ygiJidKJTxYGtvjh4dL2M1aZ0WRQYp+7PF6+VKwdZXcQ==} + '@sentry/bundler-plugin-core@4.6.0': + resolution: {integrity: sha512-Fub2XQqrS258jjS8qAxLLU1k1h5UCNJ76i8m4qZJJdogWWaF8t00KnnTyp9TEDJzrVD64tRXS8+HHENxmeUo3g==} engines: {node: '>= 14'} - '@sentry/cli-darwin@2.56.1': - resolution: {integrity: sha512-zfhT8MrvB5x/xRdIVGwg+sG0Cx3i0G6RH2zCrdQ/moWn8TfkwsM0O1k/AxpwbpcRfAHCkVb04CU/yKciKwg2KA==} + '@sentry/cli-darwin@2.57.0': + resolution: {integrity: sha512-v1wYQU3BcCO+Z3OVxxO+EnaW4oQhuOza6CXeYZ0z5ftza9r0QQBLz3bcZKTVta86xraNm0z8GDlREwinyddOxQ==} engines: {node: '>=10'} os: [darwin] - '@sentry/cli-linux-arm64@2.56.1': - resolution: {integrity: sha512-AypXIwZvOMJb9RgjI/98hTAd06FcOjqjIm6G9IR0OI4pJCOcaAXz9NKXdJqxpZd7phSMJnD+Bx/8iYOUPeY73A==} + '@sentry/cli-linux-arm64@2.57.0': + resolution: {integrity: sha512-Kh1jTsMV5Fy/RvB381N/woXe1qclRMqsG6kM3Gq6m6afEF/+k3PyQdNW3HXAola6d63EptokLtxPG2xjWQ+w9Q==} engines: {node: '>=10'} cpu: [arm64] os: [linux, freebsd, android] - '@sentry/cli-linux-arm@2.56.1': - resolution: {integrity: sha512-fNB/Ng11HrkGOSEIDg+fc3zfTCV7q6kJddp6ndK3QlYFsCffRSnclaX1SMp+mqxdWkHqe1kkp85OY8G/x5uAWw==} + '@sentry/cli-linux-arm@2.57.0': + resolution: {integrity: sha512-uNHB8xyygqfMd1/6tFzl9NUkuVefg7jdZtM/vVCQVaF/rJLWZ++Wms+LLhYyKXKN8yd7J9wy7kTEl4Qu4jWbGQ==} engines: {node: '>=10'} cpu: [arm] os: [linux, freebsd, android] - '@sentry/cli-linux-i686@2.56.1': - resolution: {integrity: sha512-vnH+WJEsUq7Lf7xc9udzE/M4hoDXXsniFFYr/7BvdnXtCQlNNaWFMXHbEDYAql3baIlHkWoG8cEHWuB/YKyniw==} + '@sentry/cli-linux-i686@2.57.0': + resolution: {integrity: sha512-EYXghoK/tKd0zqz+KD/ewXXE3u1HLCwG89krweveytBy/qw7M5z58eFvw+iGb1Vnbl1f/fRD0G4E0AbEsPfmpg==} engines: {node: '>=10'} cpu: [x86, ia32] os: [linux, freebsd, android] - '@sentry/cli-linux-x64@2.56.1': - resolution: {integrity: sha512-3/BlKe5Vdnia36MeovghHJD8lbcum5TFIxLp+PSfH2sVb09+5Jo0L95oRTI2JkD8Fs+QNssvTqTxJj5eIo/n+A==} + '@sentry/cli-linux-x64@2.57.0': + resolution: {integrity: sha512-CyZrP/ssHmAPLSzfd4ydy7icDnwmDD6o3QjhkWwVFmCd+9slSBMQxpIqpamZmrWE6X4R+xBRbSUjmdoJoZ5yMw==} engines: {node: '>=10'} cpu: [x64] os: [linux, freebsd, android] - '@sentry/cli-win32-arm64@2.56.1': - resolution: {integrity: sha512-Gg8RV7CV7Tz4fiR1EN1Af5AVhJsnEXiZvfvfQXI4lp51MKAhcxZIMtEfg9HaWsn3Dm/wgwYBinyeywfWbTXYDg==} + '@sentry/cli-win32-arm64@2.57.0': + resolution: {integrity: sha512-wji/GGE4Lh5I/dNCsuVbg6fRvttvZRG6db1yPW1BSvQRh8DdnVy1CVp+HMqSq0SRy/S4z60j2u+m4yXMoCL+5g==} engines: {node: '>=10'} cpu: [arm64] os: [win32] - '@sentry/cli-win32-i686@2.56.1': - resolution: {integrity: sha512-6u6a060yC3i76Ze1apqgWr5luQSyhuD5ND84eWfh/UbddsEa42UHjoVHOiBwmpZqf/hvNZAtzLnE4NCvU4zOMg==} + '@sentry/cli-win32-i686@2.57.0': + resolution: {integrity: sha512-hWvzyD7bTPh3b55qvJ1Okg3Wbl0Km8xcL6KvS7gfBl6uss+I6RldmQTP0gJKdHSdf/QlJN1FK0b7bLnCB3wHsg==} engines: {node: '>=10'} cpu: [x86, ia32] os: [win32] - '@sentry/cli-win32-x64@2.56.1': - resolution: {integrity: sha512-11cdflajBrDWlRZqI9MOu7ok2vnPzFjKmbU3YvBYWQapNE+HHAsWdsRL/u/P1RmU62vj7Y42iSUcj6x1SNrdPw==} + '@sentry/cli-win32-x64@2.57.0': + resolution: {integrity: sha512-QWYV/Y0sbpDSTyA4XQBOTaid4a6H2Iwa1Z8UI+qNxFlk0ADSEgIqo2NrRHDU8iRnghTkecQNX1NTt/7mXN3f/A==} engines: {node: '>=10'} cpu: [x64] os: [win32] - '@sentry/cli@2.56.1': - resolution: {integrity: sha512-VDAIg+gmjNtJS5VUZQMDSK9RaKC9hYQi3PoXpNa+owNfQNk60bCi8z8jkbWRcKbNGn3V51WqvrQAqLoNAdPc9w==} + '@sentry/cli@2.57.0': + resolution: {integrity: sha512-oC4HPrVIX06GvUTgK0i+WbNgIA9Zl5YEcwf9N4eWFJJmjonr2j4SML9Hn2yNENbUWDgwepy4MLod3P8rM4bk/w==} engines: {node: '>= 10'} hasBin: true + '@sentry/core@10.22.0': + resolution: {integrity: sha512-V1oeHbrOKzxadsCmgtPku3v3Emo/Bpb3VSuKmlLrQefiHX98MWtjJ3XDGfduzD5/dCdh0r/OOLwjcmrO/PZ2aw==} + engines: {node: '>=18'} + '@sentry/core@9.46.0': resolution: {integrity: sha512-it7JMFqxVproAgEtbLgCVBYtQ9fIb+Bu0JD+cEplTN/Ukpe6GaolyYib5geZqslVxhp2sQgT+58aGvfd/k0N8Q==} engines: {node: '>=18'} @@ -4891,46 +4786,46 @@ packages: engines: {node: '>=18'} hasBin: true - '@sentry/react@9.46.0': - resolution: {integrity: sha512-2NTlke1rKAJO2JIY1RCrv8EjfXXkLc+AC61PpgF1QjH/cz0NuCZ6gpQi6M5qS7anAGPjaOE1t3QdLeOEI/Q3kA==} + '@sentry/react@10.22.0': + resolution: {integrity: sha512-XByOjtW30LMNibmCPJF5LNYFmETNOUmWByECADox8GYV4BEX18WGXl4K1fpPDTSk+y4vUCHbltHa4GkyTRwG8Q==} engines: {node: '>=18'} peerDependencies: react: ^16.14.0 || 17.x || 18.x || 19.x - '@sentry/vite-plugin@3.6.1': - resolution: {integrity: sha512-x8WMdv2K2HcGS2ezEUIEZXpT/fNeWQ9rsEeF0K9DfKXK8Z9lzRmCr6TVA6I9+yW39Is+1/0cv1Rsu0LhO7lHzg==} + '@sentry/vite-plugin@4.6.0': + resolution: {integrity: sha512-fMR2d+EHwbzBa0S1fp45SNUTProxmyFBp+DeBWWQOSP9IU6AH6ea2rqrpMAnp/skkcdW4z4LSRrOEpMZ5rWXLw==} engines: {node: '>= 14'} '@shikijs/core@1.29.2': resolution: {integrity: sha512-vju0lY9r27jJfOY4Z7+Rt/nIOjzJpZ3y+nYpqtUZInVoXQ/TJZcfGnNOGnKjFdVZb8qexiCuSlZRKcGfhhTTZQ==} - '@shikijs/core@3.13.0': - resolution: {integrity: sha512-3P8rGsg2Eh2qIHekwuQjzWhKI4jV97PhvYjYUzGqjvJfqdQPz+nMlfWahU24GZAyW1FxFI1sYjyhfh5CoLmIUA==} + '@shikijs/core@3.14.0': + resolution: {integrity: sha512-qRSeuP5vlYHCNUIrpEBQFO7vSkR7jn7Kv+5X3FO/zBKVDGQbcnlScD3XhkrHi/R8Ltz0kEjvFR9Szp/XMRbFMw==} '@shikijs/engine-javascript@1.29.2': resolution: {integrity: sha512-iNEZv4IrLYPv64Q6k7EPpOCE/nuvGiKl7zxdq0WFuRPF5PAE9PRo2JGq/d8crLusM59BRemJ4eOqrFrC4wiQ+A==} - '@shikijs/engine-javascript@3.13.0': - resolution: {integrity: sha512-Ty7xv32XCp8u0eQt8rItpMs6rU9Ki6LJ1dQOW3V/56PKDcpvfHPnYFbsx5FFUP2Yim34m/UkazidamMNVR4vKg==} + '@shikijs/engine-javascript@3.14.0': + resolution: {integrity: sha512-3v1kAXI2TsWQuwv86cREH/+FK9Pjw3dorVEykzQDhwrZj0lwsHYlfyARaKmn6vr5Gasf8aeVpb8JkzeWspxOLQ==} '@shikijs/engine-oniguruma@1.29.2': resolution: {integrity: sha512-7iiOx3SG8+g1MnlzZVDYiaeHe7Ez2Kf2HrJzdmGwkRisT7r4rak0e655AcM/tF9JG/kg5fMNYlLLKglbN7gBqA==} - '@shikijs/langs-precompiled@3.13.0': - resolution: {integrity: sha512-B2xmXar8IdCy2Gf+VtWmcv8tWpfeFPxPP3eKDa13dKshERbxHHVe0gCV+NrlcWbyVxBm22IUqqj7TIewJstNBQ==} + '@shikijs/langs-precompiled@3.14.0': + resolution: {integrity: sha512-5lwHRc7BQ5Tkge6960yvbX6IsTLvCvTV4Fz72A4LR974qfgkGVZb6MZ9gxcsAT8b6KowWdeY6sQOkTwsORD+vA==} engines: {node: '>=20'} '@shikijs/langs@1.29.2': resolution: {integrity: sha512-FIBA7N3LZ+223U7cJDUYd5shmciFQlYkFXlkKVaHsCPgfVLiO+e12FmQE6Tf9vuyEsFe3dIl8qGWKXgEHL9wmQ==} - '@shikijs/langs@3.13.0': - resolution: {integrity: sha512-672c3WAETDYHwrRP0yLy3W1QYB89Hbpj+pO4KhxK6FzIrDI2FoEXNiNCut6BQmEApYLfuYfpgOZaqbY+E9b8wQ==} + '@shikijs/langs@3.14.0': + resolution: {integrity: sha512-DIB2EQY7yPX1/ZH7lMcwrK5pl+ZkP/xoSpUzg9YC8R+evRCCiSQ7yyrvEyBsMnfZq4eBzLzBlugMyTAf13+pzg==} '@shikijs/themes@1.29.2': resolution: {integrity: sha512-i9TNZlsq4uoyqSbluIcZkmPL9Bfi3djVxRnofUHwvx/h6SRW3cwgBC5SML7vsDcWyukY0eCzVN980rqP6qNl9g==} - '@shikijs/themes@3.13.0': - resolution: {integrity: sha512-Vxw1Nm1/Od8jyA7QuAenaV78BG2nSr3/gCGdBkLpfLscddCkzkL36Q5b67SrLLfvAJTOUzW39x4FHVCFriPVgg==} + '@shikijs/themes@3.14.0': + resolution: {integrity: sha512-fAo/OnfWckNmv4uBoUu6dSlkcBc+SA1xzj5oUSaz5z3KqHtEbUypg/9xxgJARtM6+7RVm0Q6Xnty41xA1ma1IA==} '@shikijs/types@1.29.2': resolution: {integrity: sha512-VJjK0eIijTZf0QSTODEXCqinjBn0joAHQ+aPSBzrv4O2d/QSbsMw+ZeSRx03kV34Hy7NzUvV/7NqfYGRLrASmw==} @@ -4938,15 +4833,22 @@ packages: '@shikijs/types@3.13.0': resolution: {integrity: sha512-oM9P+NCFri/mmQ8LoFGVfVyemm5Hi27330zuOBp0annwJdKH1kOLndw3zCtAVDehPLg9fKqoEx3Ht/wNZxolfw==} + '@shikijs/types@3.14.0': + resolution: {integrity: sha512-bQGgC6vrY8U/9ObG1Z/vTro+uclbjjD/uG58RvfxKZVD5p9Yc1ka3tVyEFy7BNJLzxuWyHH5NWynP9zZZS59eQ==} + '@shikijs/vscode-textmate@10.0.2': resolution: {integrity: sha512-83yeghZ2xxin3Nj8z1NMd/NCuca+gsYXswywDy5bHvwlWL8tpTQmzGeUuHd9FC3E/SBEMvzJRwWEOz5gGes9Qg==} + '@sindresorhus/is@7.1.0': + resolution: {integrity: sha512-7F/yz2IphV39hiS2zB4QYVkivrptHHh0K8qJJd9HhuWSdvf8AN7NpebW3CcDZDBQsUPMoDKWsY2WWgW7bqOcfA==} + engines: {node: '>=18'} + '@sindresorhus/merge-streams@2.3.0': resolution: {integrity: sha512-LtoMMhxAlorcGhmFYI+LhPgbPZCkgP6ra1YL604EeF6U98pLlQ3iWIGMdWSC+vWmPBWBNgmDBAhnAobLROJmwg==} engines: {node: '>=18'} - '@smithy/abort-controller@4.2.0': - resolution: {integrity: sha512-PLUYa+SUKOEZtXFURBu/CNxlsxfaFGxSBPcStL13KpVeVWIfdezWyDqkz7iDLmwnxojXD0s5KzuB5HGHvt4Aeg==} + '@smithy/abort-controller@4.2.4': + resolution: {integrity: sha512-Z4DUr/AkgyFf1bOThW2HwzREagee0sB5ycl+hDiSZOfRLW8ZgrOjDi6g8mHH19yyU5E2A/64W3z6SMIf5XiUSQ==} engines: {node: '>=18.0.0'} '@smithy/chunked-blob-reader-native@4.2.1': @@ -4957,56 +4859,56 @@ packages: resolution: {integrity: sha512-WmU0TnhEAJLWvfSeMxBNe5xtbselEO8+4wG0NtZeL8oR21WgH1xiO37El+/Y+H/Ie4SCwBy3MxYWmOYaGgZueA==} engines: {node: '>=18.0.0'} - '@smithy/config-resolver@4.3.0': - resolution: {integrity: sha512-9oH+n8AVNiLPK/iK/agOsoWfrKZ3FGP3502tkksd6SRsKMYiu7AFX0YXo6YBADdsAj7C+G/aLKdsafIJHxuCkQ==} + '@smithy/config-resolver@4.4.1': + resolution: {integrity: sha512-BciDJ5hkyYEGBBKMbjGB1A/Zq8bYZ41Zo9BMnGdKF6QD1fY4zIkYx6zui/0CHaVGnv6h0iy8y4rnPX9CPCAPyQ==} engines: {node: '>=18.0.0'} - '@smithy/core@3.15.0': - resolution: {integrity: sha512-VJWncXgt+ExNn0U2+Y7UywuATtRYaodGQKFo9mDyh70q+fJGedfrqi2XuKU1BhiLeXgg6RZrW7VEKfeqFhHAJA==} + '@smithy/core@3.17.2': + resolution: {integrity: sha512-n3g4Nl1Te+qGPDbNFAYf+smkRVB+JhFsGy9uJXXZQEufoP4u0r+WLh6KvTDolCswaagysDc/afS1yvb2jnj1gQ==} engines: {node: '>=18.0.0'} - '@smithy/credential-provider-imds@4.2.0': - resolution: {integrity: sha512-SOhFVvFH4D5HJZytb0bLKxCrSnwcqPiNlrw+S4ZXjMnsC+o9JcUQzbZOEQcA8yv9wJFNhfsUiIUKiEnYL68Big==} + '@smithy/credential-provider-imds@4.2.4': + resolution: {integrity: sha512-YVNMjhdz2pVto5bRdux7GMs0x1m0Afz3OcQy/4Yf9DH4fWOtroGH7uLvs7ZmDyoBJzLdegtIPpXrpJOZWvUXdw==} engines: {node: '>=18.0.0'} - '@smithy/eventstream-codec@4.2.0': - resolution: {integrity: sha512-XE7CtKfyxYiNZ5vz7OvyTf1osrdbJfmUy+rbh+NLQmZumMGvY0mT0Cq1qKSfhrvLtRYzMsOBuRpi10dyI0EBPg==} + '@smithy/eventstream-codec@4.2.4': + resolution: {integrity: sha512-aV8blR9RBDKrOlZVgjOdmOibTC2sBXNiT7WA558b4MPdsLTV6sbyc1WIE9QiIuYMJjYtnPLciefoqSW8Gi+MZQ==} engines: {node: '>=18.0.0'} - '@smithy/eventstream-serde-browser@4.2.0': - resolution: {integrity: sha512-U53p7fcrk27k8irLhOwUu+UYnBqsXNLKl1XevOpsxK3y1Lndk8R7CSiZV6FN3fYFuTPuJy5pP6qa/bjDzEkRvA==} + '@smithy/eventstream-serde-browser@4.2.4': + resolution: {integrity: sha512-d5T7ZS3J/r8P/PDjgmCcutmNxnSRvPH1U6iHeXjzI50sMr78GLmFcrczLw33Ap92oEKqa4CLrkAPeSSOqvGdUA==} engines: {node: '>=18.0.0'} - '@smithy/eventstream-serde-config-resolver@4.3.0': - resolution: {integrity: sha512-uwx54t8W2Yo9Jr3nVF5cNnkAAnMCJ8Wrm+wDlQY6rY/IrEgZS3OqagtCu/9ceIcZFQ1zVW/zbN9dxb5esuojfA==} + '@smithy/eventstream-serde-config-resolver@4.3.4': + resolution: {integrity: sha512-lxfDT0UuSc1HqltOGsTEAlZ6H29gpfDSdEPTapD5G63RbnYToZ+ezjzdonCCH90j5tRRCw3aLXVbiZaBW3VRVg==} engines: {node: '>=18.0.0'} - '@smithy/eventstream-serde-node@4.2.0': - resolution: {integrity: sha512-yjM2L6QGmWgJjVu/IgYd6hMzwm/tf4VFX0lm8/SvGbGBwc+aFl3hOzvO/e9IJ2XI+22Tx1Zg3vRpFRs04SWFcg==} + '@smithy/eventstream-serde-node@4.2.4': + resolution: {integrity: sha512-TPhiGByWnYyzcpU/K3pO5V7QgtXYpE0NaJPEZBCa1Y5jlw5SjqzMSbFiLb+ZkJhqoQc0ImGyVINqnq1ze0ZRcQ==} engines: {node: '>=18.0.0'} - '@smithy/eventstream-serde-universal@4.2.0': - resolution: {integrity: sha512-C3jxz6GeRzNyGKhU7oV656ZbuHY93mrfkT12rmjDdZch142ykjn8do+VOkeRNjSGKw01p4g+hdalPYPhmMwk1g==} + '@smithy/eventstream-serde-universal@4.2.4': + resolution: {integrity: sha512-GNI/IXaY/XBB1SkGBFmbW033uWA0tj085eCxYih0eccUe/PFR7+UBQv9HNDk2fD9TJu7UVsCWsH99TkpEPSOzQ==} engines: {node: '>=18.0.0'} - '@smithy/fetch-http-handler@5.3.1': - resolution: {integrity: sha512-3AvYYbB+Dv5EPLqnJIAgYw/9+WzeBiUYS8B+rU0pHq5NMQMvrZmevUROS4V2GAt0jEOn9viBzPLrZE+riTNd5Q==} + '@smithy/fetch-http-handler@5.3.5': + resolution: {integrity: sha512-mg83SM3FLI8Sa2ooTJbsh5MFfyMTyNRwxqpKHmE0ICRIa66Aodv80DMsTQI02xBLVJ0hckwqTRr5IGAbbWuFLQ==} engines: {node: '>=18.0.0'} - '@smithy/hash-blob-browser@4.2.1': - resolution: {integrity: sha512-Os9cg1fTXMwuqbvjemELlf+HB5oEeVyZmYsTbAtDQBmjGyibjmbeeqcaw7xOJLIHrkH/u0wAYabNcN6FRTqMRg==} + '@smithy/hash-blob-browser@4.2.5': + resolution: {integrity: sha512-kCdgjD2J50qAqycYx0imbkA9tPtyQr1i5GwbK/EOUkpBmJGSkJe4mRJm+0F65TUSvvui1HZ5FFGFCND7l8/3WQ==} engines: {node: '>=18.0.0'} - '@smithy/hash-node@4.2.0': - resolution: {integrity: sha512-ugv93gOhZGysTctZh9qdgng8B+xO0cj+zN0qAZ+Sgh7qTQGPOJbMdIuyP89KNfUyfAqFSNh5tMvC+h2uCpmTtA==} + '@smithy/hash-node@4.2.4': + resolution: {integrity: sha512-kKU0gVhx/ppVMntvUOZE7WRMFW86HuaxLwvqileBEjL7PoILI8/djoILw3gPQloGVE6O0oOzqafxeNi2KbnUJw==} engines: {node: '>=18.0.0'} - '@smithy/hash-stream-node@4.2.0': - resolution: {integrity: sha512-8dELAuGv+UEjtzrpMeNBZc1sJhO8GxFVV/Yh21wE35oX4lOE697+lsMHBoUIFAUuYkTMIeu0EuJSEsH7/8Y+UQ==} + '@smithy/hash-stream-node@4.2.4': + resolution: {integrity: sha512-amuh2IJiyRfO5MV0X/YFlZMD6banjvjAwKdeJiYGUbId608x+oSNwv3vlyW2Gt6AGAgl3EYAuyYLGRX/xU8npQ==} engines: {node: '>=18.0.0'} - '@smithy/invalid-dependency@4.2.0': - resolution: {integrity: sha512-ZmK5X5fUPAbtvRcUPtk28aqIClVhbfcmfoS4M7UQBTnDdrNxhsrxYVv0ZEl5NaPSyExsPWqL4GsPlRvtlwg+2A==} + '@smithy/invalid-dependency@4.2.4': + resolution: {integrity: sha512-z6aDLGiHzsMhbS2MjetlIWopWz//K+mCoPXjW6aLr0mypF+Y7qdEh5TyJ20Onf9FbWHiWl4eC+rITdizpnXqOw==} engines: {node: '>=18.0.0'} '@smithy/is-array-buffer@2.2.0': @@ -5017,76 +4919,76 @@ packages: resolution: {integrity: sha512-DZZZBvC7sjcYh4MazJSGiWMI2L7E0oCiRHREDzIxi/M2LY79/21iXt6aPLHge82wi5LsuRF5A06Ds3+0mlh6CQ==} engines: {node: '>=18.0.0'} - '@smithy/md5-js@4.2.0': - resolution: {integrity: sha512-LFEPniXGKRQArFmDQ3MgArXlClFJMsXDteuQQY8WG1/zzv6gVSo96+qpkuu1oJp4MZsKrwchY0cuAoPKzEbaNA==} + '@smithy/md5-js@4.2.4': + resolution: {integrity: sha512-h7kzNWZuMe5bPnZwKxhVbY1gan5+TZ2c9JcVTHCygB14buVGOZxLl+oGfpY2p2Xm48SFqEWdghpvbBdmaz3ncQ==} engines: {node: '>=18.0.0'} - '@smithy/middleware-content-length@4.2.0': - resolution: {integrity: sha512-6ZAnwrXFecrA4kIDOcz6aLBhU5ih2is2NdcZtobBDSdSHtE9a+MThB5uqyK4XXesdOCvOcbCm2IGB95birTSOQ==} + '@smithy/middleware-content-length@4.2.4': + resolution: {integrity: sha512-hJRZuFS9UsElX4DJSJfoX4M1qXRH+VFiLMUnhsWvtOOUWRNvvOfDaUSdlNbjwv1IkpVjj/Rd/O59Jl3nhAcxow==} engines: {node: '>=18.0.0'} - '@smithy/middleware-endpoint@4.3.1': - resolution: {integrity: sha512-JtM4SjEgImLEJVXdsbvWHYiJ9dtuKE8bqLlvkvGi96LbejDL6qnVpVxEFUximFodoQbg0Gnkyff9EKUhFhVJFw==} + '@smithy/middleware-endpoint@4.3.6': + resolution: {integrity: sha512-PXehXofGMFpDqr933rxD8RGOcZ0QBAWtuzTgYRAHAL2BnKawHDEdf/TnGpcmfPJGwonhginaaeJIKluEojiF/w==} engines: {node: '>=18.0.0'} - '@smithy/middleware-retry@4.4.1': - resolution: {integrity: sha512-wXxS4ex8cJJteL0PPQmWYkNi9QKDWZIpsndr0wZI2EL+pSSvA/qqxXU60gBOJoIc2YgtZSWY/PE86qhKCCKP1w==} + '@smithy/middleware-retry@4.4.6': + resolution: {integrity: sha512-OhLx131znrEDxZPAvH/OYufR9d1nB2CQADyYFN4C3V/NQS7Mg4V6uvxHC/Dr96ZQW8IlHJTJ+vAhKt6oxWRndA==} engines: {node: '>=18.0.0'} - '@smithy/middleware-serde@4.2.0': - resolution: {integrity: sha512-rpTQ7D65/EAbC6VydXlxjvbifTf4IH+sADKg6JmAvhkflJO2NvDeyU9qsWUNBelJiQFcXKejUHWRSdmpJmEmiw==} + '@smithy/middleware-serde@4.2.4': + resolution: {integrity: sha512-jUr3x2CDhV15TOX2/Uoz4gfgeqLrRoTQbYAuhLS7lcVKNev7FeYSJ1ebEfjk+l9kbb7k7LfzIR/irgxys5ZTOg==} engines: {node: '>=18.0.0'} - '@smithy/middleware-stack@4.2.0': - resolution: {integrity: sha512-G5CJ//eqRd9OARrQu9MK1H8fNm2sMtqFh6j8/rPozhEL+Dokpvi1Og+aCixTuwDAGZUkJPk6hJT5jchbk/WCyg==} + '@smithy/middleware-stack@4.2.4': + resolution: {integrity: sha512-Gy3TKCOnm9JwpFooldwAboazw+EFYlC+Bb+1QBsSi5xI0W5lX81j/P5+CXvD/9ZjtYKRgxq+kkqd/KOHflzvgA==} engines: {node: '>=18.0.0'} - '@smithy/node-config-provider@4.3.0': - resolution: {integrity: sha512-5QgHNuWdT9j9GwMPPJCKxy2KDxZ3E5l4M3/5TatSZrqYVoEiqQrDfAq8I6KWZw7RZOHtVtCzEPdYz7rHZixwcA==} + '@smithy/node-config-provider@4.3.4': + resolution: {integrity: sha512-3X3w7qzmo4XNNdPKNS4nbJcGSwiEMsNsRSunMA92S4DJLLIrH5g1AyuOA2XKM9PAPi8mIWfqC+fnfKNsI4KvHw==} engines: {node: '>=18.0.0'} - '@smithy/node-http-handler@4.3.0': - resolution: {integrity: sha512-RHZ/uWCmSNZ8cneoWEVsVwMZBKy/8123hEpm57vgGXA3Irf/Ja4v9TVshHK2ML5/IqzAZn0WhINHOP9xl+Qy6Q==} + '@smithy/node-http-handler@4.4.4': + resolution: {integrity: sha512-VXHGfzCXLZeKnFp6QXjAdy+U8JF9etfpUXD1FAbzY1GzsFJiDQRQIt2CnMUvUdz3/YaHNqT3RphVWMUpXTIODA==} engines: {node: '>=18.0.0'} - '@smithy/property-provider@4.2.0': - resolution: {integrity: sha512-rV6wFre0BU6n/tx2Ztn5LdvEdNZ2FasQbPQmDOPfV9QQyDmsCkOAB0osQjotRCQg+nSKFmINhyda0D3AnjSBJw==} + '@smithy/property-provider@4.2.4': + resolution: {integrity: sha512-g2DHo08IhxV5GdY3Cpt/jr0mkTlAD39EJKN27Jb5N8Fb5qt8KG39wVKTXiTRCmHHou7lbXR8nKVU14/aRUf86w==} engines: {node: '>=18.0.0'} - '@smithy/protocol-http@5.3.0': - resolution: {integrity: sha512-6POSYlmDnsLKb7r1D3SVm7RaYW6H1vcNcTWGWrF7s9+2noNYvUsm7E4tz5ZQ9HXPmKn6Hb67pBDRIjrT4w/d7Q==} + '@smithy/protocol-http@5.3.4': + resolution: {integrity: sha512-3sfFd2MAzVt0Q/klOmjFi3oIkxczHs0avbwrfn1aBqtc23WqQSmjvk77MBw9WkEQcwbOYIX5/2z4ULj8DuxSsw==} engines: {node: '>=18.0.0'} - '@smithy/querystring-builder@4.2.0': - resolution: {integrity: sha512-Q4oFD0ZmI8yJkiPPeGUITZj++4HHYCW3pYBYfIobUCkYpI6mbkzmG1MAQQ3lJYYWj3iNqfzOenUZu+jqdPQ16A==} + '@smithy/querystring-builder@4.2.4': + resolution: {integrity: sha512-KQ1gFXXC+WsbPFnk7pzskzOpn4s+KheWgO3dzkIEmnb6NskAIGp/dGdbKisTPJdtov28qNDohQrgDUKzXZBLig==} engines: {node: '>=18.0.0'} - '@smithy/querystring-parser@4.2.0': - resolution: {integrity: sha512-BjATSNNyvVbQxOOlKse0b0pSezTWGMvA87SvoFoFlkRsKXVsN3bEtjCxvsNXJXfnAzlWFPaT9DmhWy1vn0sNEA==} + '@smithy/querystring-parser@4.2.4': + resolution: {integrity: sha512-aHb5cqXZocdzEkZ/CvhVjdw5l4r1aU/9iMEyoKzH4eXMowT6M0YjBpp7W/+XjkBnY8Xh0kVd55GKjnPKlCwinQ==} engines: {node: '>=18.0.0'} - '@smithy/service-error-classification@4.2.0': - resolution: {integrity: sha512-Ylv1ttUeKatpR0wEOMnHf1hXMktPUMObDClSWl2TpCVT4DwtJhCeighLzSLbgH3jr5pBNM0LDXT5yYxUvZ9WpA==} + '@smithy/service-error-classification@4.2.4': + resolution: {integrity: sha512-fdWuhEx4+jHLGeew9/IvqVU/fxT/ot70tpRGuOLxE3HzZOyKeTQfYeV1oaBXpzi93WOk668hjMuuagJ2/Qs7ng==} engines: {node: '>=18.0.0'} - '@smithy/shared-ini-file-loader@4.3.0': - resolution: {integrity: sha512-VCUPPtNs+rKWlqqntX0CbVvWyjhmX30JCtzO+s5dlzzxrvSfRh5SY0yxnkirvc1c80vdKQttahL71a9EsdolSQ==} + '@smithy/shared-ini-file-loader@4.3.4': + resolution: {integrity: sha512-y5ozxeQ9omVjbnJo9dtTsdXj9BEvGx2X8xvRgKnV+/7wLBuYJQL6dOa/qMY6omyHi7yjt1OA97jZLoVRYi8lxA==} engines: {node: '>=18.0.0'} - '@smithy/signature-v4@5.3.0': - resolution: {integrity: sha512-MKNyhXEs99xAZaFhm88h+3/V+tCRDQ+PrDzRqL0xdDpq4gjxcMmf5rBA3YXgqZqMZ/XwemZEurCBQMfxZOWq/g==} + '@smithy/signature-v4@5.3.4': + resolution: {integrity: sha512-ScDCpasxH7w1HXHYbtk3jcivjvdA1VICyAdgvVqKhKKwxi+MTwZEqFw0minE+oZ7F07oF25xh4FGJxgqgShz0A==} engines: {node: '>=18.0.0'} - '@smithy/smithy-client@4.7.1': - resolution: {integrity: sha512-WXVbiyNf/WOS/RHUoFMkJ6leEVpln5ojCjNBnzoZeMsnCg3A0BRhLK3WYc4V7PmYcYPZh9IYzzAg9XcNSzYxYQ==} + '@smithy/smithy-client@4.9.2': + resolution: {integrity: sha512-gZU4uAFcdrSi3io8U99Qs/FvVdRxPvIMToi+MFfsy/DN9UqtknJ1ais+2M9yR8e0ASQpNmFYEKeIKVcMjQg3rg==} engines: {node: '>=18.0.0'} - '@smithy/types@4.6.0': - resolution: {integrity: sha512-4lI9C8NzRPOv66FaY1LL1O/0v0aLVrq/mXP/keUa9mJOApEeae43LsLd2kZRUJw91gxOQfLIrV3OvqPgWz1YsA==} + '@smithy/types@4.8.1': + resolution: {integrity: sha512-N0Zn0OT1zc+NA+UVfkYqQzviRh5ucWwO7mBV3TmHHprMnfcJNfhlPicDkBHi0ewbh+y3evR6cNAW0Raxvb01NA==} engines: {node: '>=18.0.0'} - '@smithy/url-parser@4.2.0': - resolution: {integrity: sha512-AlBmD6Idav2ugmoAL6UtR6ItS7jU5h5RNqLMZC7QrLCoITA9NzIN3nx9GWi8g4z1pfWh2r9r96SX/jHiNwPJ9A==} + '@smithy/url-parser@4.2.4': + resolution: {integrity: sha512-w/N/Iw0/PTwJ36PDqU9PzAwVElo4qXxCC0eCTlUtIz/Z5V/2j/cViMHi0hPukSBHp4DVwvUlUhLgCzqSJ6plrg==} engines: {node: '>=18.0.0'} '@smithy/util-base64@4.3.0': @@ -5113,32 +5015,32 @@ packages: resolution: {integrity: sha512-YEjpl6XJ36FTKmD+kRJJWYvrHeUvm5ykaUS5xK+6oXffQPHeEM4/nXlZPe+Wu0lsgRUcNZiliYNh/y7q9c2y6Q==} engines: {node: '>=18.0.0'} - '@smithy/util-defaults-mode-browser@4.3.0': - resolution: {integrity: sha512-H4MAj8j8Yp19Mr7vVtGgi7noJjvjJbsKQJkvNnLlrIFduRFT5jq5Eri1k838YW7rN2g5FTnXpz5ktKVr1KVgPQ==} + '@smithy/util-defaults-mode-browser@4.3.5': + resolution: {integrity: sha512-GwaGjv/QLuL/QHQaqhf/maM7+MnRFQQs7Bsl6FlaeK6lm6U7mV5AAnVabw68cIoMl5FQFyKK62u7RWRzWL25OQ==} engines: {node: '>=18.0.0'} - '@smithy/util-defaults-mode-node@4.2.1': - resolution: {integrity: sha512-PuDcgx7/qKEMzV1QFHJ7E4/MMeEjaA7+zS5UNcHCLPvvn59AeZQ0DSDGMpqC2xecfa/1cNGm4l8Ec/VxCuY7Ug==} + '@smithy/util-defaults-mode-node@4.2.7': + resolution: {integrity: sha512-6hinjVqec0WYGsqN7h9hL/ywfULmJJNXGXnNZW7jrIn/cFuC/aVlVaiDfBIJEvKcOrmN8/EgsW69eY0gXABeHw==} engines: {node: '>=18.0.0'} - '@smithy/util-endpoints@3.2.0': - resolution: {integrity: sha512-TXeCn22D56vvWr/5xPqALc9oO+LN+QpFjrSM7peG/ckqEPoI3zaKZFp+bFwfmiHhn5MGWPaLCqDOJPPIixk9Wg==} + '@smithy/util-endpoints@3.2.4': + resolution: {integrity: sha512-f+nBDhgYRCmUEDKEQb6q0aCcOTXRDqH5wWaFHJxt4anB4pKHlgGoYP3xtioKXH64e37ANUkzWf6p4Mnv1M5/Vg==} engines: {node: '>=18.0.0'} '@smithy/util-hex-encoding@4.2.0': resolution: {integrity: sha512-CCQBwJIvXMLKxVbO88IukazJD9a4kQ9ZN7/UMGBjBcJYvatpWk+9g870El4cB8/EJxfe+k+y0GmR9CAzkF+Nbw==} engines: {node: '>=18.0.0'} - '@smithy/util-middleware@4.2.0': - resolution: {integrity: sha512-u9OOfDa43MjagtJZ8AapJcmimP+K2Z7szXn8xbty4aza+7P1wjFmy2ewjSbhEiYQoW1unTlOAIV165weYAaowA==} + '@smithy/util-middleware@4.2.4': + resolution: {integrity: sha512-fKGQAPAn8sgV0plRikRVo6g6aR0KyKvgzNrPuM74RZKy/wWVzx3BMk+ZWEueyN3L5v5EDg+P582mKU+sH5OAsg==} engines: {node: '>=18.0.0'} - '@smithy/util-retry@4.2.0': - resolution: {integrity: sha512-BWSiuGbwRnEE2SFfaAZEX0TqaxtvtSYPM/J73PFVm+A29Fg1HTPiYFb8TmX1DXp4hgcdyJcNQmprfd5foeORsg==} + '@smithy/util-retry@4.2.4': + resolution: {integrity: sha512-yQncJmj4dtv/isTXxRb4AamZHy4QFr4ew8GxS6XLWt7sCIxkPxPzINWd7WLISEFPsIan14zrKgvyAF+/yzfwoA==} engines: {node: '>=18.0.0'} - '@smithy/util-stream@4.5.0': - resolution: {integrity: sha512-0TD5M5HCGu5diEvZ/O/WquSjhJPasqv7trjoqHyWjNh/FBeBl7a0ztl9uFMOsauYtRfd8jvpzIAQhDHbx+nvZw==} + '@smithy/util-stream@4.5.5': + resolution: {integrity: sha512-7M5aVFjT+HPilPOKbOmQfCIPchZe4DSBc1wf1+NvHvSoFTiFtauZzT+onZvCj70xhXd0AEmYnZYmdJIuwxOo4w==} engines: {node: '>=18.0.0'} '@smithy/util-uri-escape@4.2.0': @@ -5153,8 +5055,8 @@ packages: resolution: {integrity: sha512-zBPfuzoI8xyBtR2P6WQj63Rz8i3AmfAaJLuNG8dWsfvPe8lO4aCPYLn879mEgHndZH1zQ2oXmG8O1GGzzaoZiw==} engines: {node: '>=18.0.0'} - '@smithy/util-waiter@4.2.0': - resolution: {integrity: sha512-0Z+nxUU4/4T+SL8BCNN4ztKdQjToNvUYmkF1kXO5T7Yz3Gafzh0HeIG6mrkN8Fz3gn9hSyxuAT+6h4vM+iQSBQ==} + '@smithy/util-waiter@4.2.4': + resolution: {integrity: sha512-roKXtXIC6fopFvVOju8VYHtguc/jAcMlK8IlDOHsrQn0ayMkHynjm/D2DCMRf7MJFXzjHhlzg2edr3QPEakchQ==} engines: {node: '>=18.0.0'} '@smithy/uuid@1.1.0': @@ -5167,41 +5069,44 @@ packages: '@standard-schema/utils@0.3.0': resolution: {integrity: sha512-e7Mew686owMaPJVNNLs55PUvgz371nKgwsc4vxE49zsODpJEnxgxRo2y/OKrqueavXgZNMDVj3DdHFlaSAeU8g==} - '@storybook/addon-a11y@9.1.10': - resolution: {integrity: sha512-RhYYtk8nePxVNfP/voW8vS7AiQxWWBgOLNMTeDr9Anjh06mpSWZ/U/zEUNC9TrId5BxnyZJW5Lkg0JUMwvyfjw==} + '@storybook/addon-a11y@9.1.16': + resolution: {integrity: sha512-DpUqAMOgkC/K/DgB9osqbBYmiWWj7V444HeYLHcx7GdPtg2guq1jAcalsOnQeU3wXgUE+wNuyMm6qZKm7of11g==} peerDependencies: - storybook: ^9.1.10 + storybook: ^9.1.16 - '@storybook/addon-docs@9.1.10': - resolution: {integrity: sha512-LYK3oXy/0PgY39FhkYVd9D0bzatLGTsMhaPPwSjBOmZgK0f0yBLqaePy7urUFeHYm/rjwAaRmDJNBqUnGTVoig==} + '@storybook/addon-docs@9.1.16': + resolution: {integrity: sha512-JfaUD6fC7ySLg5duRdaWZ0FUUXrgUvqbZe/agCbSyOaIHOtJdhGaPjOC3vuXTAcV8/8/wWmbu0iXFMD08iKvdw==} peerDependencies: - storybook: ^9.1.10 + storybook: ^9.1.16 - '@storybook/addon-vitest@9.1.10': - resolution: {integrity: sha512-Ag5OQxOl+1g8jPOWoXJPneuqVNxoQAP1XEOl3/89m1PJhmvxBMkMynBKWqN3LQcDM3YYkMbpO0u1mvcDfhU5Jg==} + '@storybook/addon-vitest@9.1.16': + resolution: {integrity: sha512-X0rOOUMb5UHbfekcjnTeiDTarZdsg5irXXPxxL//8QQCFyCLF6Bdm1YNlCdF560PtwaaQPXzlxByD0FfGbtdWA==} peerDependencies: - '@vitest/browser': ^3.0.0 - '@vitest/runner': ^3.0.0 - storybook: ^9.1.10 - vitest: ^3.0.0 + '@vitest/browser': ^3.0.0 || ^4.0.0 + '@vitest/browser-playwright': ^4.0.0 + '@vitest/runner': ^3.0.0 || ^4.0.0 + storybook: ^9.1.16 + vitest: ^3.0.0 || ^4.0.0 peerDependenciesMeta: '@vitest/browser': optional: true + '@vitest/browser-playwright': + optional: true '@vitest/runner': optional: true vitest: optional: true - '@storybook/builder-vite@9.1.10': - resolution: {integrity: sha512-0ogI+toZJYaFptcFpRcRPOZ9/NrFUYhiaI09ggeEB1FF9ygHMVsobp4eaj4HjZI6V3x7cQwkd2ZmxAMQDBQuMA==} + '@storybook/builder-vite@9.1.16': + resolution: {integrity: sha512-CyvYA5w1BKeSVaRavKi+euWxLffshq0v9Rz/5E9MKCitbYtjwkDH6UMIYmcbTs906mEBuYqrbz3nygDP0ppodw==} peerDependencies: - storybook: ^9.1.10 + storybook: ^9.1.16 vite: ^5.0.0 || ^6.0.0 || ^7.0.0 - '@storybook/csf-plugin@9.1.10': - resolution: {integrity: sha512-247F/JU0Naxm/RIUnQYpqXeCL0wG8UNJkZe+/GkLjdqzsyML0lb+8OwBsWFfG8zfj6fkjmRU2mF44TnNkzoQcg==} + '@storybook/csf-plugin@9.1.16': + resolution: {integrity: sha512-GKlNNlmWeFBQxhQY5hZOSnFGbeKq69jal0dYNWoSImTjor28eYRHb9iQkDzRpijLPizBaB9MlxLsLrgFDp7adA==} peerDependencies: - storybook: ^9.1.10 + storybook: ^9.1.16 '@storybook/global@5.0.0': resolution: {integrity: sha512-FcOqPAXACP0I3oJ/ws6/rrPT9WGhu915Cg8D02a9YxLo0DE9zI+a9A5gRGvmQ09fiWPukqI8ZAEoQEdWUKMQdQ==} @@ -5213,29 +5118,29 @@ packages: react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta - '@storybook/react-dom-shim@9.1.10': - resolution: {integrity: sha512-cxy8GTj73RMJIFPrgqdnMXePGX5iFohM5pDCZ63Te5m5GtzKqsILRXtBBLO6Ouexm/ZYRVznkKiwNKX/Fu24fQ==} + '@storybook/react-dom-shim@9.1.16': + resolution: {integrity: sha512-MsI4qTxdT6lMXQmo3IXhw3EaCC+vsZboyEZBx4pOJ+K/5cDJ6ZoQ3f0d4yGpVhumDxaxlnNAg954+f8WWXE1rQ==} peerDependencies: react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta - storybook: ^9.1.10 + storybook: ^9.1.16 - '@storybook/react-vite@9.1.10': - resolution: {integrity: sha512-k0wWlfoWakoHL3NZ1+38oxRH3WYyprFFX+WUb/4W8axrvpKogvdnxKCul/YB1HH5FcTagIfguamsPjKwB1ZkJg==} + '@storybook/react-vite@9.1.16': + resolution: {integrity: sha512-WRKSq0XfQ/Qx66aKisQCfa/1UKwN9HjVbY6xrmsX7kI5zBdITxIcKInq6PWoPv91SJD7+Et956yX+F86R1aEXw==} engines: {node: '>=20.0.0'} peerDependencies: react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta - storybook: ^9.1.10 + storybook: ^9.1.16 vite: ^5.0.0 || ^6.0.0 || ^7.0.0 - '@storybook/react@9.1.10': - resolution: {integrity: sha512-flG3Gn3EHZnxn92C7vrA2U4aGqpOKdf85fL43+J/2k9HF5AIyOFGlcv4LGVyKZ3LOAow/nGBVSXL9961h+ICRA==} + '@storybook/react@9.1.16': + resolution: {integrity: sha512-M/SkHJJdtiGpodBJq9+DYmSkEOD+VqlPxKI+FvbHESTNs//1IgqFIjEWetd8quhd9oj/gvo4ICBAPu+UmD6M9w==} engines: {node: '>=20.0.0'} peerDependencies: react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta - storybook: ^9.1.10 + storybook: ^9.1.16 typescript: '>= 4.9.x' peerDependenciesMeta: typescript: @@ -5319,6 +5224,10 @@ packages: '@swc/types@0.1.25': resolution: {integrity: sha512-iAoY/qRhNH8a/hBvm3zKj9qQ4oc2+3w1unPJa2XvTK3XjeLXtzcCingVPw/9e5mn1+0yPqxcBGp9Jf0pkfMb1g==} + '@szmarczak/http-timer@5.0.1': + resolution: {integrity: sha512-+PmQX0PiAYPMeVYe237LJAYvOMYW1j2rH5YROyS3b4CTVJum34HfRvKvAzozHAQG0TnHNdUfY9nCeUyRAs//cw==} + engines: {node: '>=14.16'} + '@t3-oss/env-core@0.13.8': resolution: {integrity: sha512-L1inmpzLQyYu4+Q1DyrXsGJYCXbtXjC4cICw1uAKv0ppYPQv656lhZPU91Qd1VS6SO/bou1/q5ufVzBGbNsUpw==} peerDependencies: @@ -5336,65 +5245,65 @@ packages: zod: optional: true - '@tailwindcss/node@4.1.14': - resolution: {integrity: sha512-hpz+8vFk3Ic2xssIA3e01R6jkmsAhvkQdXlEbRTk6S10xDAtiQiM3FyvZVGsucefq764euO/b8WUW9ysLdThHw==} + '@tailwindcss/node@4.1.16': + resolution: {integrity: sha512-BX5iaSsloNuvKNHRN3k2RcCuTEgASTo77mofW0vmeHkfrDWaoFAFvNHpEgtu0eqyypcyiBkDWzSMxJhp3AUVcw==} - '@tailwindcss/oxide-android-arm64@4.1.14': - resolution: {integrity: sha512-a94ifZrGwMvbdeAxWoSuGcIl6/DOP5cdxagid7xJv6bwFp3oebp7y2ImYsnZBMTwjn5Ev5xESvS3FFYUGgPODQ==} + '@tailwindcss/oxide-android-arm64@4.1.16': + resolution: {integrity: sha512-8+ctzkjHgwDJ5caq9IqRSgsP70xhdhJvm+oueS/yhD5ixLhqTw9fSL1OurzMUhBwE5zK26FXLCz2f/RtkISqHA==} engines: {node: '>= 10'} cpu: [arm64] os: [android] - '@tailwindcss/oxide-darwin-arm64@4.1.14': - resolution: {integrity: sha512-HkFP/CqfSh09xCnrPJA7jud7hij5ahKyWomrC3oiO2U9i0UjP17o9pJbxUN0IJ471GTQQmzwhp0DEcpbp4MZTA==} + '@tailwindcss/oxide-darwin-arm64@4.1.16': + resolution: {integrity: sha512-C3oZy5042v2FOALBZtY0JTDnGNdS6w7DxL/odvSny17ORUnaRKhyTse8xYi3yKGyfnTUOdavRCdmc8QqJYwFKA==} engines: {node: '>= 10'} cpu: [arm64] os: [darwin] - '@tailwindcss/oxide-darwin-x64@4.1.14': - resolution: {integrity: sha512-eVNaWmCgdLf5iv6Qd3s7JI5SEFBFRtfm6W0mphJYXgvnDEAZ5sZzqmI06bK6xo0IErDHdTA5/t7d4eTfWbWOFw==} + '@tailwindcss/oxide-darwin-x64@4.1.16': + resolution: {integrity: sha512-vjrl/1Ub9+JwU6BP0emgipGjowzYZMjbWCDqwA2Z4vCa+HBSpP4v6U2ddejcHsolsYxwL5r4bPNoamlV0xDdLg==} engines: {node: '>= 10'} cpu: [x64] os: [darwin] - '@tailwindcss/oxide-freebsd-x64@4.1.14': - resolution: {integrity: sha512-QWLoRXNikEuqtNb0dhQN6wsSVVjX6dmUFzuuiL09ZeXju25dsei2uIPl71y2Ic6QbNBsB4scwBoFnlBfabHkEw==} + '@tailwindcss/oxide-freebsd-x64@4.1.16': + resolution: {integrity: sha512-TSMpPYpQLm+aR1wW5rKuUuEruc/oOX3C7H0BTnPDn7W/eMw8W+MRMpiypKMkXZfwH8wqPIRKppuZoedTtNj2tg==} engines: {node: '>= 10'} cpu: [x64] os: [freebsd] - '@tailwindcss/oxide-linux-arm-gnueabihf@4.1.14': - resolution: {integrity: sha512-VB4gjQni9+F0VCASU+L8zSIyjrLLsy03sjcR3bM0V2g4SNamo0FakZFKyUQ96ZVwGK4CaJsc9zd/obQy74o0Fw==} + '@tailwindcss/oxide-linux-arm-gnueabihf@4.1.16': + resolution: {integrity: sha512-p0GGfRg/w0sdsFKBjMYvvKIiKy/LNWLWgV/plR4lUgrsxFAoQBFrXkZ4C0w8IOXfslB9vHK/JGASWD2IefIpvw==} engines: {node: '>= 10'} cpu: [arm] os: [linux] - '@tailwindcss/oxide-linux-arm64-gnu@4.1.14': - resolution: {integrity: sha512-qaEy0dIZ6d9vyLnmeg24yzA8XuEAD9WjpM5nIM1sUgQ/Zv7cVkharPDQcmm/t/TvXoKo/0knI3me3AGfdx6w1w==} + '@tailwindcss/oxide-linux-arm64-gnu@4.1.16': + resolution: {integrity: sha512-DoixyMmTNO19rwRPdqviTrG1rYzpxgyYJl8RgQvdAQUzxC1ToLRqtNJpU/ATURSKgIg6uerPw2feW0aS8SNr/w==} engines: {node: '>= 10'} cpu: [arm64] os: [linux] - '@tailwindcss/oxide-linux-arm64-musl@4.1.14': - resolution: {integrity: sha512-ISZjT44s59O8xKsPEIesiIydMG/sCXoMBCqsphDm/WcbnuWLxxb+GcvSIIA5NjUw6F8Tex7s5/LM2yDy8RqYBQ==} + '@tailwindcss/oxide-linux-arm64-musl@4.1.16': + resolution: {integrity: sha512-H81UXMa9hJhWhaAUca6bU2wm5RRFpuHImrwXBUvPbYb+3jo32I9VIwpOX6hms0fPmA6f2pGVlybO6qU8pF4fzQ==} engines: {node: '>= 10'} cpu: [arm64] os: [linux] - '@tailwindcss/oxide-linux-x64-gnu@4.1.14': - resolution: {integrity: sha512-02c6JhLPJj10L2caH4U0zF8Hji4dOeahmuMl23stk0MU1wfd1OraE7rOloidSF8W5JTHkFdVo/O7uRUJJnUAJg==} + '@tailwindcss/oxide-linux-x64-gnu@4.1.16': + resolution: {integrity: sha512-ZGHQxDtFC2/ruo7t99Qo2TTIvOERULPl5l0K1g0oK6b5PGqjYMga+FcY1wIUnrUxY56h28FxybtDEla+ICOyew==} engines: {node: '>= 10'} cpu: [x64] os: [linux] - '@tailwindcss/oxide-linux-x64-musl@4.1.14': - resolution: {integrity: sha512-TNGeLiN1XS66kQhxHG/7wMeQDOoL0S33x9BgmydbrWAb9Qw0KYdd8o1ifx4HOGDWhVmJ+Ul+JQ7lyknQFilO3Q==} + '@tailwindcss/oxide-linux-x64-musl@4.1.16': + resolution: {integrity: sha512-Oi1tAaa0rcKf1Og9MzKeINZzMLPbhxvm7rno5/zuP1WYmpiG0bEHq4AcRUiG2165/WUzvxkW4XDYCscZWbTLZw==} engines: {node: '>= 10'} cpu: [x64] os: [linux] - '@tailwindcss/oxide-wasm32-wasi@4.1.14': - resolution: {integrity: sha512-uZYAsaW/jS/IYkd6EWPJKW/NlPNSkWkBlaeVBi/WsFQNP05/bzkebUL8FH1pdsqx4f2fH/bWFcUABOM9nfiJkQ==} + '@tailwindcss/oxide-wasm32-wasi@4.1.16': + resolution: {integrity: sha512-B01u/b8LteGRwucIBmCQ07FVXLzImWESAIMcUU6nvFt/tYsQ6IHz8DmZ5KtvmwxD+iTYBtM1xwoGXswnlu9v0Q==} engines: {node: '>=14.0.0'} cpu: [wasm32] bundledDependencies: @@ -5405,20 +5314,20 @@ packages: - '@emnapi/wasi-threads' - tslib - '@tailwindcss/oxide-win32-arm64-msvc@4.1.14': - resolution: {integrity: sha512-Az0RnnkcvRqsuoLH2Z4n3JfAef0wElgzHD5Aky/e+0tBUxUhIeIqFBTMNQvmMRSP15fWwmvjBxZ3Q8RhsDnxAA==} + '@tailwindcss/oxide-win32-arm64-msvc@4.1.16': + resolution: {integrity: sha512-zX+Q8sSkGj6HKRTMJXuPvOcP8XfYON24zJBRPlszcH1Np7xuHXhWn8qfFjIujVzvH3BHU+16jBXwgpl20i+v9A==} engines: {node: '>= 10'} cpu: [arm64] os: [win32] - '@tailwindcss/oxide-win32-x64-msvc@4.1.14': - resolution: {integrity: sha512-ttblVGHgf68kEE4om1n/n44I0yGPkCPbLsqzjvybhpwa6mKKtgFfAzy6btc3HRmuW7nHe0OOrSeNP9sQmmH9XA==} + '@tailwindcss/oxide-win32-x64-msvc@4.1.16': + resolution: {integrity: sha512-m5dDFJUEejbFqP+UXVstd4W/wnxA4F61q8SoL+mqTypId2T2ZpuxosNSgowiCnLp2+Z+rivdU0AqpfgiD7yCBg==} engines: {node: '>= 10'} cpu: [x64] os: [win32] - '@tailwindcss/oxide@4.1.14': - resolution: {integrity: sha512-23yx+VUbBwCg2x5XWdB8+1lkPajzLmALEfMb51zZUBYaYVPDQvBSD/WYDqiVyBIo2BZFa3yw1Rpy3G2Jp+K0dw==} + '@tailwindcss/oxide@4.1.16': + resolution: {integrity: sha512-2OSv52FRuhdlgyOQqgtQHuCgXnS8nFSYRp2tJ+4WZXKgTxqPy7SMSls8c3mPT5pkZ17SBToGM5LHEJBO7miEdg==} engines: {node: '>= 10'} '@tailwindcss/typography@0.5.19': @@ -5426,26 +5335,26 @@ packages: peerDependencies: tailwindcss: '>=3.0.0 || insiders || >=4.0.0-alpha.20 || >=4.0.0-beta.1' - '@tailwindcss/vite@4.1.14': - resolution: {integrity: sha512-BoFUoU0XqgCUS1UXWhmDJroKKhNXeDzD7/XwabjkDIAbMnc4ULn5e2FuEuBbhZ6ENZoSYzKlzvZ44Yr6EUDUSA==} + '@tailwindcss/vite@4.1.16': + resolution: {integrity: sha512-bbguNBcDxsRmi9nnlWJxhfDWamY3lmcyACHcdO1crxfzuLpOhHLLtEIN/nCbbAtj5rchUgQD17QVAKi1f7IsKg==} peerDependencies: vite: ^5.2.0 || ^6 || ^7 - '@tanstack/history@1.132.31': - resolution: {integrity: sha512-UCHM2uS0t/uSszqPEo+SBSSoQVeQ+LlOWAVBl5SA7+AedeAbKafIPjFn8huZCXNLAYb0WKV2+wETr7lDK9uz7g==} + '@tanstack/history@1.133.28': + resolution: {integrity: sha512-B7+x7eP2FFvi3fgd3rNH9o/Eixt+pp0zCIdGhnQbAJjFrlwIKGjGnwyJjhWJ5fMQlGks/E2LdDTqEV4W9Plx7g==} engines: {node: '>=12'} - '@tanstack/query-core@5.90.2': - resolution: {integrity: sha512-k/TcR3YalnzibscALLwxeiLUub6jN5EDLwKDiO7q5f4ICEoptJ+n9+7vcEFy5/x/i6Q+Lb/tXrsKCggf5uQJXQ==} + '@tanstack/query-core@5.90.5': + resolution: {integrity: sha512-wLamYp7FaDq6ZnNehypKI5fNvxHPfTYylE0m/ZpuuzJfJqhR5Pxg9gvGBHZx4n7J+V5Rg5mZxHHTlv25Zt5u+w==} '@tanstack/query-devtools@5.90.1': resolution: {integrity: sha512-GtINOPjPUH0OegJExZ70UahT9ykmAhmtNVcmtdnOZbxLwT7R5OmRztR5Ahe3/Cu7LArEmR6/588tAycuaWb1xQ==} - '@tanstack/query-persist-client-core@5.91.1': - resolution: {integrity: sha512-/aLUfL2CG8F/sk5BO7ITIgo556v2amgq0ThgVnch9dWvoFqUY9DrlQxM7ocSCh2xDOiNjZsSUiL9hNfWYz912A==} + '@tanstack/query-persist-client-core@5.91.4': + resolution: {integrity: sha512-HZ8kvAbhttLZKUO4ASHl49u7dQXzRVEogi7/6CCZ5BBItWh2hoEUqy9QHUS4ji7iZiuXe4jwTJNzq2VIuxlnsQ==} - '@tanstack/query-sync-storage-persister@5.90.4': - resolution: {integrity: sha512-B6a6ehg6u0zje+XNTppxeVJ36olJTfWVwjlJSK7j3wgtvRi4q1kLezF1sCG+K6H7iguzoQDqic3HHe3N5zV5Og==} + '@tanstack/query-sync-storage-persister@5.90.7': + resolution: {integrity: sha512-Go4QSOv0wz5RNaJR54wvCp5D+mVUBYidKTYj4zvUU8GGkLxL1E+yx0lBkGNvfRmFRjdgWrJb5XS+0Clc5tKzpQ==} '@tanstack/react-query-devtools@5.90.2': resolution: {integrity: sha512-vAXJzZuBXtCQtrY3F/yUNJCV4obT/A/n81kb3+YqLbro5Z2+phdAbceO+deU3ywPw8B42oyJlp4FhO0SoivDFQ==} @@ -5453,47 +5362,47 @@ packages: '@tanstack/react-query': ^5.90.2 react: ^18 || ^19 - '@tanstack/react-query-persist-client@5.90.4': - resolution: {integrity: sha512-xVXeC5kb9rqfDl/FpW/RGkGf2QXAVkshKJL6hdLvhdLQtv7ys1CmVo2QO/GklR9PHruwOEBXYBhyNH2u9LLt8Q==} + '@tanstack/react-query-persist-client@5.90.7': + resolution: {integrity: sha512-TlEzewa4YN51ZhbLZ9HzIBTY/b1K7xFJGSm1cUCE+tNnzSUwiLWhoD6H7EvgWb/KJePYDIJ3hGWLwQPdP86fmA==} peerDependencies: - '@tanstack/react-query': ^5.90.2 + '@tanstack/react-query': ^5.90.5 react: ^18 || ^19 - '@tanstack/react-query@5.90.2': - resolution: {integrity: sha512-CLABiR+h5PYfOWr/z+vWFt5VsOA2ekQeRQBFSKlcoW6Ndx/f8rfyVmq4LbgOM4GG2qtxAxjLYLOpCNTYm4uKzw==} + '@tanstack/react-query@5.90.5': + resolution: {integrity: sha512-pN+8UWpxZkEJ/Rnnj2v2Sxpx1WFlaa9L6a4UO89p6tTQbeo+m0MS8oYDjbggrR8QcTyjKoYWKS3xJQGr3ExT8Q==} peerDependencies: react: ^18 || ^19 - '@tanstack/react-router-devtools@1.132.51': - resolution: {integrity: sha512-09gHGUE9BVE6O+7u4ICnKigdPP0vZAYI70dKNqGp8bEy9jaMmHGlUxVV6pKqBLVgcPmwT9YMRAeJ5+QrcznXGA==} + '@tanstack/react-router-devtools@1.133.36': + resolution: {integrity: sha512-il+DNzc8Ia54N+HOmIlY10NBk7rp0N7Nyysk8eeC1ZSIXImC3MPchdAspwioE6DI7WfK+MfpTav2m9zoOL8wSQ==} engines: {node: '>=12'} peerDependencies: - '@tanstack/react-router': ^1.132.47 + '@tanstack/react-router': ^1.133.36 react: '>=18.0.0 || >=19.0.0' react-dom: '>=18.0.0 || >=19.0.0' - '@tanstack/react-router@1.132.47': - resolution: {integrity: sha512-mjCN1ueVLHBOK1gqLeacCrUPBZietMKTkr7xZlC32dCGn4e+83zMSlRTS2TrEl7+wEH+bqjnoyx8ALYTSiQ1Cg==} + '@tanstack/react-router@1.133.36': + resolution: {integrity: sha512-pT4d2uEucDQ3SAIQ0pLUw6RUKwkB5pHzpBB6otaoKpO0cAwHkRPi+p59DivuzSANJLHLVEiXyJCCk72EeHMRxA==} engines: {node: '>=12'} peerDependencies: react: '>=18.0.0 || >=19.0.0' react-dom: '>=18.0.0 || >=19.0.0' - '@tanstack/react-store@0.7.7': - resolution: {integrity: sha512-qqT0ufegFRDGSof9D/VqaZgjNgp4tRPHZIJq2+QIHkMUtHjaJ0lYrrXjeIUJvjnTbgPfSD1XgOMEt0lmANn6Zg==} + '@tanstack/react-store@0.8.0': + resolution: {integrity: sha512-1vG9beLIuB7q69skxK9r5xiLN3ztzIPfSQSs0GfeqWGO2tGIyInZx0x1COhpx97RKaONSoAb8C3dxacWksm1ow==} peerDependencies: react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 - '@tanstack/router-core@1.132.47': - resolution: {integrity: sha512-8YKFHmG6VUqXaWAJzEqjyW6w31dARS2USd2mtI5ZeZcihqMbskK28N4iotBXNn+sSKJnPRjc7A4jTnnEf8Mn8Q==} + '@tanstack/router-core@1.133.36': + resolution: {integrity: sha512-VJ9kFduePsxgjhDW+uKxL6ol9ZpJlaUO2EI9Zmq8AA6uhW/LRg+0/365OZOZaVqNqvx2eKt3MZKHLN+29jd5Uw==} engines: {node: '>=12'} - '@tanstack/router-devtools-core@1.132.51': - resolution: {integrity: sha512-uhbk4rSeUpYaqOJLZwOwfyysSoeedIEiRWz37sTVM4tUBFsWqA/p9gO2kVSx/Xmcu8grLy512KNDDeji3QhdwQ==} + '@tanstack/router-devtools-core@1.133.36': + resolution: {integrity: sha512-jgXSCfWPLukcjXDf4thpk/0QgLXv61mrvmfh9xc8+xeC5TMeLyz2xBaTghniD2PtdF6eII3vMaTWOpMHj4+cVQ==} engines: {node: '>=12'} peerDependencies: - '@tanstack/router-core': ^1.132.47 + '@tanstack/router-core': ^1.133.36 csstype: ^3.0.10 solid-js: '>=1.9.5' tiny-invariant: ^1.3.3 @@ -5501,18 +5410,18 @@ packages: csstype: optional: true - '@tanstack/router-generator@1.132.51': - resolution: {integrity: sha512-iAGz2IZ2rr38o+7cgE33qPyNFJFx7PcPOvUXk5kcX1TtXeyTgVLoe7vqQzKYbungZmht2V8xSFmy6kakUJhxOA==} + '@tanstack/router-generator@1.133.36': + resolution: {integrity: sha512-3+pJBqkm95/zV7INyhbr688lp1PklZT3wtNNwW9oIxmsBiUJg5hqHWh7z4JgP9E+0D0KAwT535wncWUFfMMZwA==} engines: {node: '>=12'} - '@tanstack/router-plugin@1.132.51': - resolution: {integrity: sha512-eAC22XJmfJJU1f/wdW9j3e/U/74KFxUZfb38fVTugNAo+TUw58krS/XRrpOjZFnsg4lO4HseGntC4SxKD3agHw==} + '@tanstack/router-plugin@1.133.36': + resolution: {integrity: sha512-y0vttpDRFbniPk2EOS93wxfNA0SqvD/anj6kXTIl/3caW0rvOC4MzMXV09atJ+3jMSOgHFniljKQj/66AY5dZg==} engines: {node: '>=12'} peerDependencies: '@rsbuild/core': '>=1.0.2' - '@tanstack/react-router': ^1.132.47 + '@tanstack/react-router': ^1.133.36 vite: '>=5.0.0 || >=6.0.0 || >=7.0.0' - vite-plugin-solid: ^2.11.8 + vite-plugin-solid: ^2.11.10 webpack: '>=5.92.0' peerDependenciesMeta: '@rsbuild/core': @@ -5526,15 +5435,15 @@ packages: webpack: optional: true - '@tanstack/router-utils@1.132.51': - resolution: {integrity: sha512-8wmYmc8LY0MhgNw1jfwjTdpYgl5CmvvkamoHOUcz4odFiAWOXLhwo3UBOwKihw+6SxJ/M7l9tEcq5PdLUOUi0Q==} + '@tanstack/router-utils@1.133.19': + resolution: {integrity: sha512-WEp5D2gPxvlLDRXwD/fV7RXjYtqaqJNXKB/L6OyZEbT+9BG/Ib2d7oG9GSUZNNMGPGYAlhBUOi3xutySsk6rxA==} engines: {node: '>=12'} - '@tanstack/store@0.7.7': - resolution: {integrity: sha512-xa6pTan1bcaqYDS9BDpSiS63qa6EoDkPN9RsRaxHuDdVDNntzq3xNwR5YKTU/V3SkSyC9T4YVOPh2zRQN0nhIQ==} + '@tanstack/store@0.8.0': + resolution: {integrity: sha512-Om+BO0YfMZe//X2z0uLF2j+75nQga6TpTJgLJQBiq85aOyZNIhkCgleNcud2KQg4k4v9Y9l+Uhru3qWMPGTOzQ==} - '@tanstack/virtual-file-routes@1.132.31': - resolution: {integrity: sha512-rxS8Cm2nIXroLqkm9pE/8X2lFNuvcTIIiFi5VH4PwzvKscAuaW3YRMN1WmaGDI2mVEn+GLaoY6Kc3jOczL5i4w==} + '@tanstack/virtual-file-routes@1.133.19': + resolution: {integrity: sha512-IKwZENsK7owmW1Lm5FhuHegY/SyQ8KqtL/7mTSnzoKJgfzhrrf9qwKB1rmkKkt+svUuy/Zw3uVEpZtUzQruWtA==} engines: {node: '>=12'} '@testing-library/dom@10.4.1': @@ -5551,80 +5460,80 @@ packages: peerDependencies: '@testing-library/dom': '>=7.21.4' - '@tiptap/core@3.6.6': - resolution: {integrity: sha512-7Mx3Vc2qS9IpT6s/Xarxot1PKvbNIq6Avp3vU/BubyrH6gaGApd4UOvTMwGfS4itpradzd/DfwkmB4/r6wAjNQ==} + '@tiptap/core@3.9.1': + resolution: {integrity: sha512-qfqeR2WN9qr/3+29ocT7EgEBNP2sLHWwGYOEd++hgYixC3tOY4Juw90z1MUqVEOcUqswPDE1CrBNSgbFAitTDQ==} peerDependencies: - '@tiptap/pm': ^3.6.6 + '@tiptap/pm': ^3.9.1 - '@tiptap/extension-bold@3.6.6': - resolution: {integrity: sha512-ABUBUYvVJxND5SjlpX7aDECuZlqCRQ0A4s2r+z/+iXUZRKVIP3cH2YleMIsX48fZdktdqGFv1fin0ElVYMHL+Q==} + '@tiptap/extension-bold@3.9.1': + resolution: {integrity: sha512-48jgjazCkvQh0sOmiDi8xQQg62o3iGEcZci0Qow3MRGKetVC0aSwmV0VuF4ai3rABPDxrlZbBP2EGq5PBoIfQw==} peerDependencies: - '@tiptap/core': ^3.6.6 + '@tiptap/core': ^3.9.1 - '@tiptap/extension-bubble-menu@3.6.6': - resolution: {integrity: sha512-O+V+9T4encURWEccn17koU4rPBHA9QuyWErvx+XnVnC+cabhAcEVJEeCD5SjU4KarLBmnmw+bhDARe+AuR8WSw==} + '@tiptap/extension-bubble-menu@3.9.1': + resolution: {integrity: sha512-rUV7Q/dLxYX1CS0RqSYIYRXGZ4ePFbmzQlzYsCfGKmTVTMNinJXQnltq92iVXa2/dfgg/iWNS73azPaJ0NP1Bg==} peerDependencies: - '@tiptap/core': ^3.6.6 - '@tiptap/pm': ^3.6.6 + '@tiptap/core': ^3.9.1 + '@tiptap/pm': ^3.9.1 - '@tiptap/extension-code@3.6.6': - resolution: {integrity: sha512-ihnhlxO3sz/E1nep57JsRRgfZW4mlp0ghHNrV8PEKw99Q7S2MSXRV3o8zkw/ZHgvTbzPrT6854GwvOLGSiHOyQ==} + '@tiptap/extension-code@3.9.1': + resolution: {integrity: sha512-fNhNDzZ7WQU7MdafH1XruoxCBQdVaUoevnOfH+CtXebbXnSw6LWZ/l9LHTP9Ng3bVijcoloxqtkfBNXinQeouA==} peerDependencies: - '@tiptap/core': ^3.6.6 + '@tiptap/core': ^3.9.1 - '@tiptap/extension-floating-menu@3.6.6': - resolution: {integrity: sha512-2ZKhBIgCs88Mju/9Kv4ngY5D1luwX7Fb8yemc6kXp9pYNFfJnXYeVP/110dRHJUbRrKtGXmnz8I5cgL/nqGEVQ==} + '@tiptap/extension-floating-menu@3.9.1': + resolution: {integrity: sha512-9T1wkfDsGbm+uMlN9OcwRAefrbAOYxE2hWB+mW2J4qoDl3BZLdFjH/HW11xBHz+sjekDw/4xx+zyDNVwqu1RMA==} peerDependencies: '@floating-ui/dom': ^1.0.0 - '@tiptap/core': ^3.6.6 - '@tiptap/pm': ^3.6.6 + '@tiptap/core': ^3.9.1 + '@tiptap/pm': ^3.9.1 - '@tiptap/extension-gapcursor@3.6.6': - resolution: {integrity: sha512-aaYvK4/a5lg1k1fwIqzRz1TqokVZATRMzs0pvAcAXIqrM0Dsou1IzVGocIukmzPoesCysGwI5021FSH+ilo54A==} + '@tiptap/extension-gapcursor@3.9.1': + resolution: {integrity: sha512-+POd1gdTU+OOwWN544BoIOBN/WwRKE+WGGwUNY7mmCai9gLDxCXKXkY89yQW5rwzOHdHU/GapgjkSPNTstWG1g==} peerDependencies: - '@tiptap/extensions': ^3.6.6 + '@tiptap/extensions': ^3.9.1 - '@tiptap/extension-history@3.6.6': - resolution: {integrity: sha512-Pv5HwhrAEF8aSaFBIUcXvURzBMPVndFoAXxFcoMEuHDFtlKLVZ2y8UA+uz6S3f+caCOQTB/7EWgeiENzaQHR1w==} + '@tiptap/extension-history@3.9.1': + resolution: {integrity: sha512-5VM6OIapiKsdquGHfnqFVhOpRcy8zf17fwfNbNyCGX5mzuQiltcID+d6QNUnyJxiFAgu84y9fYOA5lL7UPRYhQ==} peerDependencies: - '@tiptap/extensions': ^3.6.6 + '@tiptap/extensions': ^3.9.1 - '@tiptap/extension-horizontal-rule@3.6.6': - resolution: {integrity: sha512-SprNpSoz2or/Ju3qXHrD3NbqL3xCHxdPk9uJsrbIDvB+1ZANKN3gxB40lyxf9mIYMcNavYVE6fzjGyODk0iAEg==} + '@tiptap/extension-horizontal-rule@3.9.1': + resolution: {integrity: sha512-Ar4jRvsQXgE6oUxWGrNrSUXO/Q6yHNjLqdEKXvZw1KeahbHwtgsgDscVSCr8Oi6JS8z9JWfh7Xm2fAqb5Xdgkg==} peerDependencies: - '@tiptap/core': ^3.6.6 - '@tiptap/pm': ^3.6.6 + '@tiptap/core': ^3.9.1 + '@tiptap/pm': ^3.9.1 - '@tiptap/extension-italic@3.6.6': - resolution: {integrity: sha512-yhKIVRcfEAmoB3ri4RDAOvtVklIN4Bwc8GqN2n4ISYiaxvjyiKvCUcgyqpzKBx5EbIEYJxgYgcUS6zykD86hpQ==} + '@tiptap/extension-italic@3.9.1': + resolution: {integrity: sha512-0OTn+ZZcI/9CIDVMQH3byilzIUgfDkX/l5NhWpLeUBlqrGfgt61g5jwkYyy49uuVQfbxHwZHpDptkdnJGrfpkw==} peerDependencies: - '@tiptap/core': ^3.6.6 + '@tiptap/core': ^3.9.1 - '@tiptap/extension-link@3.6.6': - resolution: {integrity: sha512-Uq41J6WpbZkyZinbikVxLNqu2WfwUJcErTmNkPdel1gvYoQajkXZkHz2NzQ2jS9DicHHPV1cJel5f/YvX7nm5w==} + '@tiptap/extension-link@3.9.1': + resolution: {integrity: sha512-Q+5uYN8rvC+O00ec5m8mRTm5MZnvtkvhKq6bhgdPnQGggN3PIQ1+OSP0/9wu+leB+Ydk4PZMTPVxMtOhj55hRA==} peerDependencies: - '@tiptap/core': ^3.6.6 - '@tiptap/pm': ^3.6.6 + '@tiptap/core': ^3.9.1 + '@tiptap/pm': ^3.9.1 - '@tiptap/extension-paragraph@3.6.6': - resolution: {integrity: sha512-xfqK19PwD8YNIylRduYF3VCjSFrvhiUGBogj6Vf5OaogkUWSkpHxR0yd1Ftb1jOMYo9z1hp2Zg+6cNkXwx/e2g==} + '@tiptap/extension-paragraph@3.9.1': + resolution: {integrity: sha512-1p/teor132DpJoc8krgSRH6tdgA+0VysUAGfH7Cqq177bi6A0QFC1tF1reBdEmUg5dFrVs4sAIKdIbS6ayw0Hg==} peerDependencies: - '@tiptap/core': ^3.6.6 + '@tiptap/core': ^3.9.1 - '@tiptap/extension-strike@3.6.6': - resolution: {integrity: sha512-sVRdOH7wRNz9Kz0KH1+/4Uaj0Z2gPNbGVq6FKy9tgh/MXwAhUzbUdnv37wBuSy0xLeBkO54+/tQrjUEtOXqpbg==} + '@tiptap/extension-strike@3.9.1': + resolution: {integrity: sha512-CiprEfK1daPMQDKlnqEXpsJRIu2VepMVTiOwx1H/gV4Ug/pDE06fgPWvI0XV03mN2/+d9sDWpF5gSqIV5ZtVjw==} peerDependencies: - '@tiptap/core': ^3.6.6 + '@tiptap/core': ^3.9.1 - '@tiptap/extension-text@3.6.6': - resolution: {integrity: sha512-dlD1cNuouaPNeF6iXfaHuGt4aXaxROQMkfuhbYXeImcQMzO+tjPF4WESxahBC+VPpKvi3H9tUv1CVqwrRJL5Qw==} + '@tiptap/extension-text@3.9.1': + resolution: {integrity: sha512-giNTcXxG2DP/B5xU8wNM9d441f6FNMYCkbW6bUtjg3USLUWazYmEvp/F6vJ2wa4PSnahH+mNiiylUi2imTnzDg==} peerDependencies: - '@tiptap/core': ^3.6.6 + '@tiptap/core': ^3.9.1 - '@tiptap/extension-underline@3.6.6': - resolution: {integrity: sha512-PXhWYTZHM9IvGr3ElJl25qsyvKUejlul9TpFeBHv2awTY+0xoUL9FeEwOWOGx3sk8XTrz15b0/gjsgOV6U6Hiw==} + '@tiptap/extension-underline@3.9.1': + resolution: {integrity: sha512-0TmC2gR+VAUvqhJvdHamqTcwC+sBo3uO0X7A45xpWuECUlBFD22VJB8aQg892FyfsRGxIuPFaAS5W7WaLGp9Tw==} peerDependencies: - '@tiptap/core': ^3.6.6 + '@tiptap/core': ^3.9.1 '@tiptap/extensions@3.6.5': resolution: {integrity: sha512-7aadEaRjSbFAIp3WGYR1LXrvtVprmBNxw3FakEUMJ+XKmGNErDJgDMZh+siAYw5MWwCCGa5kKu8Qi/i+DU+ILg==} @@ -5632,14 +5541,14 @@ packages: '@tiptap/core': ^3.6.5 '@tiptap/pm': ^3.6.5 - '@tiptap/pm@3.6.6': - resolution: {integrity: sha512-E/rtpPEqPiQJrchdOUDcMPR69x96a+JeMWLL12fos4KfF7YVzQ5oUIij21RffV+qeHxug7HMUpQKBtCuJfek/Q==} + '@tiptap/pm@3.9.1': + resolution: {integrity: sha512-9GnmyMgC0sZYxqgmoZ1ULETl+J+IRC2noG2+bVYHjxeQn3G3+R5W/APKmIA1DDWG1ShY1LP/htHlrCWswYMozA==} - '@tiptap/react@3.6.6': - resolution: {integrity: sha512-x1pGju+D/vazuBptE8ztsH55sXgF7CTOCAzSc7/6b4dXCZc1IrrciHOEbZLZix/UInPu4HgrPiVA+6xUj7e3+A==} + '@tiptap/react@3.9.1': + resolution: {integrity: sha512-mT+aaZc5wkrIsCB3kO6cz1HHDH6Bp7lQHTCnwq4kvilvRewVUaAX2qUXaVPzTLUixXFwO9ugQLdaDcY7CdSHKw==} peerDependencies: - '@tiptap/core': ^3.6.6 - '@tiptap/pm': ^3.6.6 + '@tiptap/core': ^3.9.1 + '@tiptap/pm': ^3.9.1 '@types/react': ^17.0.0 || ^18.0.0 || ^19.0.0 '@types/react-dom': ^17.0.0 || ^18.0.0 || ^19.0.0 react: ^17.0.0 || ^18.0.0 || ^19.0.0 @@ -5681,8 +5590,8 @@ packages: '@types/canvas-confetti@1.9.0': resolution: {integrity: sha512-aBGj/dULrimR1XDZLtG9JwxX1b4HPRF6CX9Yfwh3NvstZEm1ZL7RBnel4keCPSqs1ANRu1u2Aoz9R+VmtjYuTg==} - '@types/chai@5.2.2': - resolution: {integrity: sha512-8kB30R7Hwqf40JPiKhVzodJs2Qc1ZJ5zuT3uzw5Hq/dhNCl3G3l83jfpdI1e20BP348+fV7VIL/+FxaXkqBmWg==} + '@types/chai@5.2.3': + resolution: {integrity: sha512-Mw558oeA9fFbv65/y4mHtXDs9bPnFMZAL/jxdPFUpOHHIXX91mcgEHbS5Lahr+pwZFR8A7GQleRWeI6cGFC2UA==} '@types/connect@3.4.38': resolution: {integrity: sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==} @@ -5738,6 +5647,9 @@ packages: '@types/hast@3.0.4': resolution: {integrity: sha512-WPs+bbQw5aCj+x6laNGWLH3wviHtoCv/P3+otBhbOhJgG8qtpdAMlTCxLtsTWA7LH1Oh/bFCHsBn0TPS5m30EQ==} + '@types/http-cache-semantics@4.0.4': + resolution: {integrity: sha512-1m0bIFVc7eJWyve9S0RnuRgcQqF/Xd5QsUZAZeQFr1Q3/p9JWoQQEqmVy+DPTNpGXwhgIetAoYF8JSc33q29QA==} + '@types/jsdom@27.0.0': resolution: {integrity: sha512-NZyFl/PViwKzdEkQg96gtnB8wm+1ljhdDay9ahn4hgb+SfVtPCbm3TlmDUFXTA+MGN3CijicnMhG18SI5H3rFw==} @@ -5771,14 +5683,14 @@ packages: '@types/mysql@2.15.26': resolution: {integrity: sha512-DSLCOXhkvfS5WNNPbfn2KdICAmk8lLc+/PNvnPnF7gOdMZCxopXduqv0OQ13y/yA/zXTSikZZqVgybUxOEg6YQ==} - '@types/node@20.19.21': - resolution: {integrity: sha512-CsGG2P3I5y48RPMfprQGfy4JPRZ6csfC3ltBZSRItG3ngggmNY/qs2uZKp4p9VbrpqNNSMzUZNFZKzgOGnd/VA==} + '@types/node@20.19.24': + resolution: {integrity: sha512-FE5u0ezmi6y9OZEzlJfg37mqqf6ZDSF2V/NLjUyGrR9uTZ7Sb9F7bLNZ03S4XVUNRWGA7Ck4c1kK+YnuWjl+DA==} - '@types/node@22.18.10': - resolution: {integrity: sha512-anNG/V/Efn/YZY4pRzbACnKxNKoBng2VTFydVu8RRs5hQjikP8CQfaeAV59VFSCzKNp90mXiVXW2QzV56rwMrg==} + '@types/node@22.18.13': + resolution: {integrity: sha512-Bo45YKIjnmFtv6I1TuC8AaHBbqXtIo+Om5fE4QiU1Tj8QR/qt+8O3BAtOimG5IFmwaWiPmB3Mv3jtYzBA4Us2A==} - '@types/node@24.7.2': - resolution: {integrity: sha512-/NbVmcGTP+lj5oa4yiYxxeBjRivKQ5Ns1eSZeB99ExsEQ6rX5XYU1Zy/gGxY/ilqtD4Etx9mKyrPxZRetiahhA==} + '@types/node@24.9.2': + resolution: {integrity: sha512-uWN8YqxXxqFMX2RqGOrumsKeti4LlmIMIyV0lgut4jx7KQBcBiW6vkDtIBvHnHIquwNfJhk8v2OtmO8zXWHfPA==} '@types/pako@2.0.4': resolution: {integrity: sha512-VWDCbrLeVXJM9fihYodcLiIv0ku+AlOa/TQ1SvYOaBuyrSKgEcro95LJyIsJ4vSo6BXIxOKxiJAat04CmST9Fw==} @@ -5789,8 +5701,8 @@ packages: '@types/pg-pool@2.0.6': resolution: {integrity: sha512-TaAUE5rq2VQYxab5Ts7WZhKNmuN78Q6PiFonTDdpbx8a1H0M1vhy3rhiMjl+e2iHmogyMw7jZF4FrE6eJUy5HQ==} - '@types/pg@8.15.5': - resolution: {integrity: sha512-LF7lF6zWEKxuT3/OR8wAZGzkg4ENGXFNyiV/JeOt9z5B+0ZVwbql9McqX5c/WStFq1GaGso7H1AzP/qSzmlCKQ==} + '@types/pg@8.15.6': + resolution: {integrity: sha512-NoaMtzhxOrubeL/7UZuNTrejB4MPAJ0RpxZqXQf2qXuVlTPuG6Y8p4u9dKRaue4yjmC7ZhzVO2/Yyyn25znrPQ==} '@types/pg@8.6.1': resolution: {integrity: sha512-1Kc4oAGzAl7uqUStZCDvaLFqZrW9qWSjXOmBfdgyBP5La7Us6Mg4GBvRlSoaZMhQF/zSj1C8CtKMBkoiT8eL8w==} @@ -5798,8 +5710,8 @@ packages: '@types/raf@3.4.3': resolution: {integrity: sha512-c4YAvMedbPZ5tEyxzQdMoOhhJ4RD3rngZIdwC2/qDN3d7JpEhB6fiBRKVY1lg5B7Wk+uPBjn5f39j1/2MY1oOw==} - '@types/react-dom@19.2.1': - resolution: {integrity: sha512-/EEvYBdT3BflCWvTMO7YkYBHVE9Ci6XdqZciZANQgKpaiDRGOLIlRo91jbTNRQjgPFWVaRxcYc0luVNFitz57A==} + '@types/react-dom@19.2.2': + resolution: {integrity: sha512-9KQPoO6mZCi7jcIStSnlOWn2nEF3mNmyr3rIAsGnAbQKYbRLyqmeSc39EVgtxXVia+LMT8j3knZLAZAh+xLmrw==} peerDependencies: '@types/react': ^19.2.0 @@ -5941,21 +5853,33 @@ packages: peerDependencies: '@uppy/core': ^5.0.2 - '@uppy/companion-client@5.1.0': - resolution: {integrity: sha512-/wEqD035syMmZz/9waQoJTpI0nElZjO0IO+KxxQ6JT6Z4mpNNzV6gBrWOUF5WpGK79hF5kdWlKrE+gpSQyQQQA==} + '@uppy/companion-client@5.1.1': + resolution: {integrity: sha512-DzrOWTbIZHvtgAFXBMYHk2wD27NjpBSVhY2tEiEIUhPd2CxbFRZjHM/N3HOt3VwZEAP471QWFLlJRWPcIY3A2Q==} peerDependencies: - '@uppy/core': ^5.1.0 + '@uppy/core': ^5.1.1 - '@uppy/components@1.0.3': - resolution: {integrity: sha512-94+kddevrHqYbyjPzV5p2Gv1rn0a20kknaJbUs6FEIJzXxSpVu3qA+5JXEVa/HapvS1NVBTmBw8JvnG4FtnC2w==} + '@uppy/components@1.1.0': + resolution: {integrity: sha512-omiNBzJn49FQznkSwOIGn3TKz+3r4T+y8sxWIBDMO6De2genzywRk1drAWO9GbSAF3htlVuvamNojQ2pSLeh3w==} + peerDependencies: + '@uppy/core': ^5.1.1 + '@uppy/image-editor': ^4.0.2 + '@uppy/screen-capture': ^5.0.1 + '@uppy/webcam': ^5.0.2 + peerDependenciesMeta: + '@uppy/image-editor': + optional: true + '@uppy/screen-capture': + optional: true + '@uppy/webcam': + optional: true - '@uppy/core@5.1.0': - resolution: {integrity: sha512-LlwSg26hZXEVCvf4OCUVPJ3mM3L+1VZWFPHDya4KSt1aWJnAyYLz099QYqhy1XLGGDjjQMAX4n1xcK8eiakcNw==} + '@uppy/core@5.1.1': + resolution: {integrity: sha512-a0EDB+KBENB1+jkeY3oeZLMJfLhMSMsA1EfeAr6XUtKIN2uu2YHFhut5psQlYfLNOL7qtRWmG0jAa03ew1TvEw==} - '@uppy/dashboard@5.0.2': - resolution: {integrity: sha512-mW/bl4w1W3AUFpNHup0jJG+rAdavROyvVdLjXIr3az1Q2Hzu2IN0HgCpeVD4YEUhdLB6ToRYY4z91gyoRSZdQg==} + '@uppy/dashboard@5.0.3': + resolution: {integrity: sha512-FJXEMnfwpovXS+3arndSYno3cv6QW2bgsXaMveqKAQ5FeZ9WlkwLCXPR3QHOvBXLDK7RDLkfzOJIio35/7yuFg==} peerDependencies: - '@uppy/core': ^5.0.2 + '@uppy/core': ^5.1.1 '@uppy/drag-drop@5.0.2': resolution: {integrity: sha512-ZuupN+zOVDlAKMpEsTKxPilzxb/RlQyKx95WPlxgBraGO6zkKHt4B/KlGfxQ6d6Fi6gAvwKzZzxPZXerbw0rNA==} @@ -5982,30 +5906,30 @@ packages: peerDependencies: '@uppy/core': ^5.0.2 - '@uppy/image-editor@4.0.1': - resolution: {integrity: sha512-FcC433I584CuuqCQH0kJHKl/qDQ1SCSUqAuZ34sKGoN1RPKsCRGeZrFjWQEtKd+C5q7cAz6Icp6AaVVP8ZKh2w==} + '@uppy/image-editor@4.0.2': + resolution: {integrity: sha512-RpD23Wu0KLFKMnCAFPZxZLMSWg8bHISGZnk9Q1scrcxJbVyEkpBs836tJFFiKWMFUvW1FVqua38HHPu1cGneFg==} peerDependencies: - '@uppy/core': ^5.0.2 + '@uppy/core': ^5.1.1 '@uppy/instagram@5.0.1': resolution: {integrity: sha512-Y3UD9e5UUgQ/EOimpAbwKvPYGwGBDyeaxIZyTIRrd6lODfCsVr4qOjWxH/2yJ/Eo+LSrh4IcWI71sb2T6LN0iA==} peerDependencies: '@uppy/core': ^5.0.2 - '@uppy/onedrive@5.0.1': - resolution: {integrity: sha512-jvTy7CE+M2SMRDH/b8RYB4vQb+BMloIdC1vEw3tNh9UyKpPWJjKCwSUk2sqCu1cT9Qv5bNgvU0/GOKxsZkv2tA==} + '@uppy/onedrive@5.0.2': + resolution: {integrity: sha512-yZ3ArPs6TwmwqmjC/YAfiVkTFx7hMCvwvRsVMTLFD7cA/mddySZLaoZ1PSOOPXj9JYturpAEmQoy74nZPE2VAA==} peerDependencies: - '@uppy/core': ^5.0.2 + '@uppy/core': ^5.1.1 '@uppy/progress-bar@4.3.2': resolution: {integrity: sha512-5BOhq49xPpBTlEVsEIRLkV+Hgb0qTuey8XKyrmrSetcgtolKLwtlDjrOWmUcxGYI3bkMbdeJulF9aiR8sSqQ6A==} peerDependencies: '@uppy/core': ^4.5.2 - '@uppy/provider-views@5.1.0': - resolution: {integrity: sha512-iScuLW1VnpJXOogqxLdLliBdnoYIqGBWwRlzf2jpVducHJSGnAaFRqDuS/rki81ZzU781MGYDh5ETyyNMbam5A==} + '@uppy/provider-views@5.1.1': + resolution: {integrity: sha512-V7wZxJddrDjhQ1CVqg1WVuhh+cvklUp6OltjoUmJTRP0EcMxj4RdTisoBt5Ls+zi1rLMeTfrhOlYWvTTyurg/g==} peerDependencies: - '@uppy/core': ^5.1.0 + '@uppy/core': ^5.1.1 '@uppy/react@5.1.0': resolution: {integrity: sha512-KkGP7pKdSx+7WPik+a2HjnPq80MPakjIw0AoBbkqQUlyXhOkF7GYtzfJ13ng4odtYob+d7H+MP3EIxX7Bq/09w==} @@ -6037,57 +5961,57 @@ packages: peerDependencies: '@uppy/core': ^5.0.2 - '@uppy/status-bar@5.0.1': - resolution: {integrity: sha512-NMc7sP9KG2WFtvQyXw4ZqGWpuDcRB6t6gQdv/mcxcb0Umy3jg85cKyAelAywmKnVuW3c63IqTq5b7V2lnWRv8w==} + '@uppy/status-bar@5.0.2': + resolution: {integrity: sha512-kWG7+X4fz82/biO3GczDpGreVO/qrCZ3ql7geydqWNlEsC+BiE65A4V761+ui385jJaD+4noUbjn3wtayck5FA==} peerDependencies: - '@uppy/core': ^5.0.2 + '@uppy/core': ^5.1.1 '@uppy/store-default@5.0.0': resolution: {integrity: sha512-hQtCSQ1yGiaval/wVYUWquYGDJ+bpQ7e4FhUUAsRQz1x1K+o7NBtjfp63O9I4Ks1WRoKunpkarZ+as09l02cPw==} - '@uppy/thumbnail-generator@5.0.1': - resolution: {integrity: sha512-kmRpZKGS+xCdXU66weLHZ30F8UYEW3U5amtZE8l/ZoDJf/mVevae0RBE8qQsEPXjs6IFH3MCgb4fZ/s/itc3QA==} + '@uppy/thumbnail-generator@5.0.2': + resolution: {integrity: sha512-MRNZEgjNO0gYC/CPji2ngmDx9dCZyHuXkeLQmZen986f+rHcOkeVXim163PBbkFT5CF1xavez03yNDJSeWl6PA==} peerDependencies: - '@uppy/core': ^5.0.2 + '@uppy/core': ^5.1.1 - '@uppy/transloadit@5.0.1': - resolution: {integrity: sha512-5PkAtgmLri35wTTP/WMLGXMRFz64C46OfqjLH70aCu8icI0dDBqmvON39iUi1si480ggdUq7mlYg4lkeRwrklQ==} + '@uppy/transloadit@5.2.0': + resolution: {integrity: sha512-+a9gTuGTYG4eKiYZB9SLr2B9nyj+kN6+Cy16O9JhJT9GmEY2xHS8rOe+928/P2cvCvPJlWtlJ8GG8DxCSYGfYw==} peerDependencies: - '@uppy/core': ^5.0.2 + '@uppy/core': ^5.1.1 - '@uppy/tus@5.0.1': - resolution: {integrity: sha512-4BQA2UFjznXrJhmjsgT/m8WDThoSX2vxKZJH/aF1Xj4GmB46+a5kas6ttCsMDcPq918/sdRJsqCMGj1r4oXKLQ==} + '@uppy/tus@5.0.2': + resolution: {integrity: sha512-sW1EEaCJJqyzzRm05XTmJCRl7gYBThWMXa6X6SmXUgNQo6WnKlyQ/6pVB7dypsVW8u2uzWpWfyUMfUNRFKleNw==} peerDependencies: - '@uppy/core': ^5.0.2 + '@uppy/core': ^5.1.1 '@uppy/unsplash@5.0.1': resolution: {integrity: sha512-Iiy8904TQbM9FN0Sx1B8mXAP0iTS7464MxoJUJuMaHNQzPs6IlOs5In/6T0VX36OJ8hFmOG2hM3Q3xB2fGU0yQ==} peerDependencies: '@uppy/core': ^5.0.2 - '@uppy/url@5.0.1': - resolution: {integrity: sha512-hc7Sv/3p1aZIS0SebA10HO5T9022MWjr14NkNpdb1EfoeUzjjmr2xwQpnQNU1mo3UJFP4ULYWTlF3SH4cE8Deg==} + '@uppy/url@5.0.2': + resolution: {integrity: sha512-P0KcuAAo9zNunUZSpxBm5t3ATCcaDs7YqTjDFXbDk2dSVAsYNrfvd6wVgdnwECs+nLi5vXGyf1oGFQYHfW1Vuw==} peerDependencies: - '@uppy/core': ^5.0.2 + '@uppy/core': ^5.1.1 '@uppy/utils@6.2.2': resolution: {integrity: sha512-9mYJtbcngv2HOJIECkyfmdXTI5dW/ObCyvWP1Iti3E5bKtsa4sMmbx5Yh/tGCj8k/lBNhfvWyZuYnvnjmzNLSQ==} - '@uppy/utils@7.1.0': - resolution: {integrity: sha512-yVM1j082QeIh8jB4XvBWDbIRgpvktozwK1vmo9Xe1F4N+7doIDYFyBQmrmmxKJwSUJwAKNDrLmu8uqb+7mMCqQ==} + '@uppy/utils@7.1.2': + resolution: {integrity: sha512-fBfXk3gLg9yksM8p2QKYOyzLqvFbZ5No1oDwwnerbWtgy9PBE8xwbhf2br7HUYpOe7sdG+KLcLJ5v9Ic2RWHGQ==} - '@uppy/webcam@5.0.1': - resolution: {integrity: sha512-zjt3g5E6g5NbufEtYBnK6IS5uBABQnuVixAiwfTYe9of1GkZJpOAe6qeg+zoRad0K/twt2YGqkGyhwzVL9ipuQ==} + '@uppy/webcam@5.0.2': + resolution: {integrity: sha512-22/mMef4bzvzVTBsetuK/B0Uj4NYjUvnygTiGZsV4nHNerLjKyd9aAORfSFpCGBs5r1lJpn22a0NPe5CEUArLg==} peerDependencies: - '@uppy/core': ^5.0.2 + '@uppy/core': ^5.1.1 '@uppy/zoom@4.0.1': resolution: {integrity: sha512-O6zseYdZ4KP29n2o6htXth3P7tChyoNVaH43yeT1l9o3+ODTqcUJRdcYxi4vqs6jBUiCGAFhCVk0mETf0VkaLg==} peerDependencies: '@uppy/core': ^5.0.2 - '@vis.gl/react-google-maps@1.5.5': - resolution: {integrity: sha512-LgHtK1AtE2/BN4dPoK05oWu0jWmeDdyX0Ffqi+mZc+M4apaHn2sUxxKXAxhPF90O9vcsiou/ntm6/XBWX+gpqw==} + '@vis.gl/react-google-maps@1.6.1': + resolution: {integrity: sha512-y9qI1m8E5Zn55xh+J5MM1kdFLEE/ttOF2bOFLVd99TiKBYUNwG6doOC1JEc6lf7Zum2MT3GQ9aeEOAPzukRLxA==} peerDependencies: react: '>=16.8.0 || ^19.0 || ^19.0.0-rc' react-dom: '>=16.8.0 || ^19.0 || ^19.0.0-rc' @@ -6098,14 +6022,8 @@ packages: peerDependencies: vite: ^6.0.0 || ^7.0.0 - '@vitejs/plugin-react@4.7.0': - resolution: {integrity: sha512-gUu9hwfWvvEDBBmgtAowQCojwZmJ5mcLn3aufeCsitijs3+f2NsrPtlAWIR6OPiqljl96GVCUbLe0HyqIpVaoA==} - engines: {node: ^14.18.0 || >=16.0.0} - peerDependencies: - vite: ^4.2.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 - - '@vitejs/plugin-react@5.0.4': - resolution: {integrity: sha512-La0KD0vGkVkSk6K+piWDKRUyg8Rl5iAIKRMH0vMJI0Eg47bq1eOxmoObAaQG37WMW9MSyk7Cs8EIWwJC1PtzKA==} + '@vitejs/plugin-react@5.1.0': + resolution: {integrity: sha512-4LuWrg7EKWgQaMJfnN+wcmbAW+VSsCmqGohftWjuct47bv8uE4n/nPpq4XjJPsxgq00GGG5J8dvBczp8uxScew==} engines: {node: ^20.19.0 || >=22.12.0} peerDependencies: vite: ^4.2.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 @@ -6320,8 +6238,8 @@ packages: resolution: {integrity: sha512-6t10qk83GOG8p0vKmaCr8eiilZwO171AvbROMtvvNiwrTly62t+7XkA8RdIIVbpMhCASAsxgAzdRSwh6nw/5Dg==} engines: {node: '>=4'} - ast-v8-to-istanbul@0.3.5: - resolution: {integrity: sha512-9SdXjNheSiE8bALAQCQQuT6fgQaoxJh7IRYrRGZ8/9nv8WhJeC1aXAwN8TbaOssGOukUvyvnkgD9+Yuykvl1aA==} + ast-v8-to-istanbul@0.3.8: + resolution: {integrity: sha512-szgSZqUxI5T8mLKvS7WTjF9is+MVbOeLADU73IseOcrqhxr/VAvy6wfoVE39KnKzA7JRhjF5eUagNlHwvZPlKQ==} async-function@1.0.0: resolution: {integrity: sha512-hsU18Ae8CDTR6Kgu9DYf0EbCr/a5iGL0rytQDobUcdpYOKokk8LEjVphnXkDkgpi0wYVsqrXuP0bZxJaTqdgoA==} @@ -6365,6 +6283,9 @@ packages: axios@1.12.2: resolution: {integrity: sha512-vMJzPewAlRyOgxV2dU0Cuz2O8zzzx9VYtbJOaBgXFeLc4IV/Eg50n4LowmehOOR61S8ZMpc2K5Sa7g6A4jfkUw==} + axios@1.13.1: + resolution: {integrity: sha512-hU4EGxxt+j7TQijx1oYdAjw4xuIp1wRQSsbMFwSthCWeBQur1eF+qJ5iQ5sN3Tw8YRzQNKb8jszgBdMDVqwJcw==} + babel-dead-code-elimination@1.0.10: resolution: {integrity: sha512-DV5bdJZTzZ0zn0DC24v3jD7Mnidh6xhKa4GfKCbq3sfW8kaWhDdZjP3i81geA8T33tdYqWKw4D3fVv0CwEgKVA==} @@ -6405,8 +6326,8 @@ packages: base64-js@1.5.1: resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==} - baseline-browser-mapping@2.8.16: - resolution: {integrity: sha512-OMu3BGQ4E7P1ErFsIPpbJh0qvDudM/UuJeHgkAvfWe+0HFJCXh+t/l8L6fVLR55RI/UbKrVLnAXZSVwd9ysWYw==} + baseline-browser-mapping@2.8.21: + resolution: {integrity: sha512-JU0h5APyQNsHOlAM7HnQnPToSDQoEBZqzu/YBlqDnEeymPnZDREeXJA3KBMQee+dKteAxZ2AtvQEvVYdZf241Q==} hasBin: true bcp-47-match@2.0.3: @@ -6432,8 +6353,8 @@ packages: bintrees@1.0.2: resolution: {integrity: sha512-VOMgTMwjAaUG580SXn3LacVgjurrbMme7ZZNYGSSV7mmtY6QQRh0Eg3pwIcntQ77DErK1L0NxkbetjcoXzVwKw==} - bippy@0.3.28: - resolution: {integrity: sha512-PLx8DjkjQuEGa4jROpdkV7xOPfFw1SRnNnkKQgXXbTR1dJmUHvH4MG4T+QCscIQufQj2tOolQsetDkTPATrXRw==} + bippy@0.3.34: + resolution: {integrity: sha512-vmptmU/20UdIWHHhq7qCSHhHzK7Ro3YJ1utU0fBG7ujUc58LEfTtilKxcF0IOgSjT5XLcm7CBzDjbv4lcKApGQ==} peerDependencies: react: '>=17.0.1' @@ -6459,8 +6380,8 @@ packages: resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==} engines: {node: '>=8'} - browserslist@4.26.3: - resolution: {integrity: sha512-lAUU+02RFBuCKQPj/P6NgjlbCnLBMp4UtgTx7vNHd3XSIJF87s9a5rA3aH2yw3GS9DqZAUbOtZdCCiZeVRqt0w==} + browserslist@4.27.0: + resolution: {integrity: sha512-AXVQwdhot1eqLihwasPElhX2tAZiBjWdJ9i/Zcj2S6QYIjkx62OKSfnobkriB81C3l4w0rVy3Nt4jaTBltYEpw==} engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} hasBin: true @@ -6486,8 +6407,8 @@ packages: peerDependencies: esbuild: '>=0.18' - c12@3.3.0: - resolution: {integrity: sha512-K9ZkuyeJQeqLEyqldbYLG3wjqwpw4BVaAqvmxq3GYKK0b1A/yYQdIcJxkzAOWcNVWhJpRXAPfZFueekiY/L8Dw==} + c12@3.3.1: + resolution: {integrity: sha512-LcWQ01LT9tkoUINHgpIOv3mMs+Abv7oVCrtpMRi1PaapVEpWoMga5WuT7/DqFTu7URP9ftbOmimNw1KNIGh9DQ==} peerDependencies: magicast: ^0.3.5 peerDependenciesMeta: @@ -6498,6 +6419,14 @@ packages: resolution: {integrity: sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==} engines: {node: '>=8'} + cacheable-lookup@7.0.0: + resolution: {integrity: sha512-+qJyx4xiKra8mZrcwhjMRMUhD5NR1R8esPkzIYxX96JiecFoxAXFuz/GpR3+ev4PE1WamHip78wV0vcmPQtp8w==} + engines: {node: '>=14.16'} + + cacheable-request@12.0.1: + resolution: {integrity: sha512-Yo9wGIQUaAfIbk+qY0X4cDQgCosecfBe3V9NSyeY4qPC2SAkbCS4Xj79VP8WOzitpJUZKc/wsRCYF5ariDIwkg==} + engines: {node: '>=18'} + call-bind-apply-helpers@1.0.2: resolution: {integrity: sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==} engines: {node: '>= 0.4'} @@ -6521,11 +6450,11 @@ packages: resolution: {integrity: sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==} engines: {node: '>= 6'} - caniuse-lite@1.0.30001749: - resolution: {integrity: sha512-0rw2fJOmLfnzCRbkm8EyHL8SvI2Apu5UbnQuTsJ0ClgrH8hcwFooJ1s5R0EP8o8aVrFu8++ae29Kt9/gZAZp/Q==} + caniuse-lite@1.0.30001751: + resolution: {integrity: sha512-A0QJhug0Ly64Ii3eIqHu5X51ebln3k4yTUkY1j8drqpWHVreg/VLijN48cZ1bYPiqOQuqpkIKnzr/Ul8V+p6Cw==} - canvas-confetti@1.9.3: - resolution: {integrity: sha512-rFfTURMvmVEX1gyXFgn5QMn81bYk70qa0HLzcIOSVEyl57n6o9ItHeBtUSWdvKAPY0xlvBHno4/v3QPrT83q9g==} + canvas-confetti@1.9.4: + resolution: {integrity: sha512-yxQbJkAVrFXWNbTUjPqjF7G+g6pDotOUHGbkZq2NELZUMDpiJ85rIEazVb8GTaAptNW2miJAXbs1BtioA251Pw==} canvas@3.2.0: resolution: {integrity: sha512-jk0GxrLtUEmW/TmFsk2WghvgHe8B0pxGilqCL21y8lHkPUGa6FTsnCNtHPOzT8O3y+N+m3espawV80bbBlgfTA==} @@ -6596,10 +6525,6 @@ packages: resolution: {integrity: sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==} engines: {node: '>=10'} - chownr@3.0.0: - resolution: {integrity: sha512-+IxzY9BZOQd/XuYPRmrvEVjF/nqj5kgT4kEq7VofrDoM1MxoRjEWkrCC3EtLi59TVawxTAn+orJwFQcrqEN1+g==} - engines: {node: '>=18'} - chromatic@12.2.0: resolution: {integrity: sha512-GswmBW9ZptAoTns1BMyjbm55Z7EsIJnUvYKdQqXIBZIKbGErmpA+p4c0BYA+nzw5B0M+rb3Iqp1IaH8TFwIQew==} hasBin: true @@ -6681,14 +6606,14 @@ packages: resolution: {integrity: sha512-Vw8qHK3bZM9y/P10u3Vib8o/DdkvA2OtPtZvD871QKjy74Wj1WSKFILMPRPSdUSx5RFK1arlJzEtA4PkFgnbuA==} engines: {node: '>=18'} - commander@13.0.0: - resolution: {integrity: sha512-oPYleIY8wmTVzkvQq10AEok6YcTC4sRUBl8F9gVuwchGVUCTbl/vhLTaQqutuuySYOsu8YTgV+OxKc/8Yvx+mQ==} - engines: {node: '>=18'} - commander@14.0.1: resolution: {integrity: sha512-2JkV3gUZUVrbNA+1sjBOYLsMZ5cEEl8GTFP2a4AVz5hvasAMCQ1D2l2le/cX+pV4N6ZU17zjUahLpIXRrnWL8A==} engines: {node: '>=20'} + commander@14.0.2: + resolution: {integrity: sha512-TywoWNNRbhoD0BXs1P3ZEScW8W5iKrnbithIl0YH+uCmBd0QpPOA8yc82DS3BIE5Ma6FnBVUsJ7wVUDz4dvOWQ==} + engines: {node: '>=20'} + commander@2.20.3: resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==} @@ -6943,6 +6868,10 @@ packages: resolution: {integrity: sha512-WY/3TUME0x3KPYdRRxEJJvXRHV4PyPoUsxtZa78lwItwRQRHhd2U9xOscaT/YTf8uCXIAjeJOFBVEh/7FtD8Xg==} engines: {node: '>=18'} + defer-to-connect@2.0.1: + resolution: {integrity: sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg==} + engines: {node: '>=10'} + define-data-property@1.1.4: resolution: {integrity: sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==} engines: {node: '>= 0.4'} @@ -7036,8 +6965,8 @@ packages: resolution: {integrity: sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==} engines: {node: '>= 4'} - dompurify@3.2.7: - resolution: {integrity: sha512-WhL/YuveyGXJaerVlMYGWhvQswa7myDG17P7Vu65EWC05o8vfeNbvNf4d/BOvH99+ZW+LlQsc1GDKMa1vNK6dw==} + dompurify@3.3.0: + resolution: {integrity: sha512-r+f6MYR1gGN1eJv0TVQbhA7if/U7P87cdPl3HN5rikqaBSBxLiCb/b9O+2eG0cxz0ghyU+mU1QkbsOwERMYlWQ==} domutils@2.8.0: resolution: {integrity: sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==} @@ -7072,12 +7001,12 @@ packages: resolution: {integrity: sha512-kT8sgyC2hZrtOh5okhEBiwgx8jx+EjLUFoANFVVkBbxIjcb8XjaUorZ0rwCEUEd7THclI3ZARR64pmxloMW3Aw==} hasBin: true - drizzle-kit@0.31.5: - resolution: {integrity: sha512-+CHgPFzuoTQTt7cOYCV6MOw2w8vqEn/ap1yv4bpZOWL03u7rlVRQhUY0WYT3rHsgVTXwYQDZaSUJSQrMBUKuWg==} + drizzle-kit@0.31.6: + resolution: {integrity: sha512-/B4e/4pwnx25QwD5xXgdpo1S+077a2VZdosXbItE/oNmUgQwZydGDz9qJYmnQl/b+5IX0rLfwRhrPnroGtrg8Q==} hasBin: true - drizzle-orm@0.44.6: - resolution: {integrity: sha512-uy6uarrrEOc9K1u5/uhBFJbdF5VJ5xQ/Yzbecw3eAYOunv5FDeYkR2m8iitocdHBOHbvorviKOW5GVw0U1j4LQ==} + drizzle-orm@0.44.7: + resolution: {integrity: sha512-quIpnYznjU9lHshEOAYLoZ9s3jweleHlZIAWR/jX9gAWNg/JhQ1wj0KGRf7/Zm+obRrYd9GjPVJg790QY9N5AQ==} peerDependencies: '@aws-sdk/client-rds-data': '>=3' '@cloudflare/workers-types': '>=4' @@ -7197,8 +7126,8 @@ packages: engines: {node: '>=0.10.0'} hasBin: true - electron-to-chromium@1.5.234: - resolution: {integrity: sha512-RXfEp2x+VRYn8jbKfQlRImzoJU01kyDvVPBmG39eU2iuRVhuS6vQNocB8J0/8GrIMLnPzgz4eW6WiRnJkTuNWg==} + electron-to-chromium@1.5.243: + resolution: {integrity: sha512-ZCphxFW3Q1TVhcgS9blfut1PX8lusVi2SvXQgmEEnK4TCmE1JhH2JkjJN+DNt0pJJwfBri5AROBnz2b/C+YU9g==} embla-carousel-autoplay@8.6.0: resolution: {integrity: sha512-OBu5G3nwaSXkZCo1A6LTaFMZ8EpkYbwIaH+bPqdBnDGQ2fh4+NbzjXjs2SktoPNKCtflfVMc75njaDHOYXcrsA==} @@ -7285,8 +7214,8 @@ packages: resolution: {integrity: sha512-w+5mJ3GuFL+NjVtJlvydShqE1eN3h3PbI7/5LAsYJP/2qtuMXjfL2LpHSRqo4b4eSF5K/DH1JXKUAHSB2UW50g==} engines: {node: '>= 0.4'} - es-toolkit@1.40.0: - resolution: {integrity: sha512-8o6w0KFmU0CiIl0/Q/BCEOabF2IJaELM1T2PWj6e8KqzHv1gdx+7JtFnDwOx1kJH/isJ5NwlDG1nCr1HrRF94Q==} + es-toolkit@1.41.0: + resolution: {integrity: sha512-bDd3oRmbVgqZCJS6WmeQieOrzpl3URcWBUVDXxOELlUW2FuW+0glPOz1n0KnRie+PdyvUZcXz2sOn00c6pPRIA==} esbuild-register@3.6.0: resolution: {integrity: sha512-H2/S7Pm8a9CL1uhp9OvjwrBh5Pvx0H8qVOxNu8Wed9Y7qv56MPtq+GGM8RJpq6glYJn9Wspr8uw7l55uyinNeg==} @@ -7303,18 +7232,13 @@ packages: engines: {node: '>=12'} hasBin: true - esbuild@0.21.5: - resolution: {integrity: sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw==} - engines: {node: '>=12'} - hasBin: true - esbuild@0.24.2: resolution: {integrity: sha512-+9egpBW8I3CD5XPe0n6BfT5fxLzxrlDzqydF3aviG+9ni1lDC/OvMHcxqEFV0+LANZG5R1bFMWfUrjVsdwxJvA==} engines: {node: '>=18'} hasBin: true - esbuild@0.25.10: - resolution: {integrity: sha512-9RiGKvCwaqxO2owP61uQ4BgNborAQskMR6QusfWzQqv7AZOg5oGehdY2pRJMTKuwxd1IDBP4rSbI5lHzU7SMsQ==} + esbuild@0.25.11: + resolution: {integrity: sha512-KohQwyzrKTQmhXDW1PjCv3Tyspn9n5GcY2RTDqeORIdIJY8yKIF7sTSopFmn/wpMPW4rdPXI0UE5LJLuq3bx0Q==} engines: {node: '>=18'} hasBin: true @@ -7514,6 +7438,10 @@ packages: forever-agent@0.6.1: resolution: {integrity: sha512-j0KLYPhm6zeac4lz3oJ3o65qvgQCcPubiyotZrXqEaG4hNagNYO8qdlUrX5vwqv9ohqeT/Z3j6+yW067yWWdUw==} + form-data-encoder@4.1.0: + resolution: {integrity: sha512-G6NsmEW15s0Uw9XnCg+33H3ViYRyiM0hMrMhhqQOR8NFc5GhYrI+6I3u7OTw7b91J2g8rtvMBZJDbcGb2YUniw==} + engines: {node: '>= 18'} + form-data@2.3.3: resolution: {integrity: sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==} engines: {node: '>= 0.12'} @@ -7568,10 +7496,6 @@ packages: resolution: {integrity: sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==} engines: {node: '>=12'} - fs-extra@11.3.2: - resolution: {integrity: sha512-Xr9F6z6up6Ws+NjzMCZc6WXg2YFRlrLP9NQDO3VQrWrfiojdhS56TzueT88ze0uBdCTwEIhQ3ptnmKeWGFAe0A==} - engines: {node: '>=14.14'} - fs-extra@9.1.0: resolution: {integrity: sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==} engines: {node: '>=10'} @@ -7635,12 +7559,16 @@ packages: resolution: {integrity: sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==} engines: {node: '>= 0.4'} + get-stream@9.0.1: + resolution: {integrity: sha512-kVCxPF3vQM/N0B1PmoqVUqgHP+EeVjmZSQn+1oCRPxd2P21P2F19lIgbR3HBosbB1PUhOAoctJnfEn2GbN2eZA==} + engines: {node: '>=18'} + get-symbol-description@1.1.0: resolution: {integrity: sha512-w9UMqWwJxHNOvoNzSJ2oPF5wvYcvP7jUvYzhp67yEhTi17ZDBBC1z9pTdGuzjD+EFIqLSYRweZjqfiPzQ06Ebg==} engines: {node: '>= 0.4'} - get-tsconfig@4.12.0: - resolution: {integrity: sha512-LScr2aNr2FbjAjZh2C6X6BxRx1/x+aTDExct/xyq2XKbYOiG5c0aK7pMsSuyc0brz3ibr/lbQiHD9jzt4lccJw==} + get-tsconfig@4.13.0: + resolution: {integrity: sha512-1VKTZJCwBrvbd+Wn3AOgQP/2Av+TfTCOlE4AcRJE72W1ksZXbAx8PPBR9RzgTeSPzlPMHrbANMH3LbltH73wxQ==} getpass@0.1.7: resolution: {integrity: sha512-0fzj9JxOLfJ+XGLhR8ze3unN0KZCgZwiSSDz168VERjK8Wl8kVSdcu2kspd4s4wtAa1y/qrVRiAA0WclVsu0ng==} @@ -7708,6 +7636,10 @@ packages: resolution: {integrity: sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==} engines: {node: '>= 0.4'} + got@14.4.9: + resolution: {integrity: sha512-Dbu075Jwm3QwNCIoCenqkqY8l2gd7e/TanuhMbzZIEsb1mpAneImSusKhZ+XdqqC3S91SDV/1SdWpGXKAlm8tA==} + engines: {node: '>=20'} + graceful-fs@4.2.11: resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} @@ -7844,8 +7776,8 @@ packages: hoist-non-react-statics@3.3.2: resolution: {integrity: sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==} - hono@4.9.11: - resolution: {integrity: sha512-MyJ4xop3boTyXl8bJBh4i20AAZTLM3AXUJphyrUb0CpgTKYb1N703z53XiKUKchGUpcPqiiYkiLOXA3kqK3icA==} + hono@4.10.4: + resolution: {integrity: sha512-YG/fo7zlU3KwrBL5vDpWKisLYiM+nVstBQqfr7gCPbSYURnNEP9BDxEMz8KfsDR9JX0lJWDRNc6nXX31v7ZEyg==} engines: {node: '>=16.9.0'} html-encoding-sniffer@4.0.0: @@ -7889,6 +7821,9 @@ packages: htmlparser2@9.1.0: resolution: {integrity: sha512-5zfg6mHUoaer/97TxnGpxmbR7zJtPwIYFMZ/H5ucTlPZhKvtum05yiPK3Mgai3a0DyVxv7qYqoweaEd2nrYQzQ==} + http-cache-semantics@4.2.0: + resolution: {integrity: sha512-dTxcvPXqPvXBQpq5dUr6mEMJX4oIEFv6bwom3FDwKRDsuIjjJGANqhBuoAn9c1RQJIdAKav33ED65E2ys+87QQ==} + http-proxy-agent@7.0.2: resolution: {integrity: sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==} engines: {node: '>= 14'} @@ -7897,6 +7832,10 @@ packages: resolution: {integrity: sha512-CAbnr6Rz4CYQkLYUtSNXxQPUH2gK8f3iWexVlsnMeD+GjlsQ0Xsy1cOX+mN3dtxYomRy21CiOzU8Uhw6OwncEQ==} engines: {node: '>=0.8', npm: '>=1.3.7'} + http2-wrapper@2.2.1: + resolution: {integrity: sha512-V5nVw1PAOgfI3Lmeaj2Exmeg7fenjhRUgz1lPSezy1CuhPYbgQtbQj4jZfEAEMlaL+vupsvhjqCyjzob0yxsmQ==} + engines: {node: '>=10.19.0'} + https-proxy-agent@5.0.1: resolution: {integrity: sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==} engines: {node: '>= 6'} @@ -7943,8 +7882,8 @@ packages: resolution: {integrity: sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==} engines: {node: '>= 4'} - immer@10.1.3: - resolution: {integrity: sha512-tmjF/k8QDKydUlm3mZU+tjM6zeq9/fFpPqH9SzWmBnVVKsPBg/V66qsMwb3/Bo90cgUN+ghdVBess+hPsxUyRw==} + immer@10.2.0: + resolution: {integrity: sha512-d/+XTN3zfODyjr89gM3mPq1WNX2B8pYsu7eORitdwyA2sBubnTl3laYlBk4sXY5FUa5qTZGBDPJICVbvqzjlbw==} import-fresh@3.3.1: resolution: {integrity: sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==} @@ -7971,8 +7910,8 @@ packages: ini@1.3.8: resolution: {integrity: sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==} - inline-style-parser@0.2.4: - resolution: {integrity: sha512-0aO8FkhNZlj/ZIbNi7Lxxr12obT7cL1moPfE4tg1LkX7LlLfC6DeX4l2ZEud1ukP9jNQyNnfzQVqwbwmAATY4Q==} + inline-style-parser@0.2.6: + resolution: {integrity: sha512-gtGXVaBdl5mAes3rPcMedEBm12ibjt1kDMFfheul1wUAOVEJW60voNdMVzVkfLN06O7ZaD/rxhfKgtlgtTbMjg==} input-otp@1.4.2: resolution: {integrity: sha512-l3jWwYNvrEa6NTCt7BECfCm48GvwuZzkoeG3gBL2w4CHeOXW3eKFmf9UNYkNfYc3mxMrthMnxjIE07MT0zLBQA==} @@ -7992,6 +7931,10 @@ packages: resolution: {integrity: sha512-5Hh7Y1wQbvY5ooGgPbDaL5iYLAPzMTUrjMulskHLH6wnv/A+1q5rgEaiuqEjB+oxGXIVZs1FF+R/KPN3ZSQYYg==} engines: {node: '>=12'} + into-stream@9.0.0: + resolution: {integrity: sha512-0cHFlRvRr8nxUf0kipkPQSYQ3WCrwG95zX76o9S2Vdmw02ZFh3oD3qsVv9vVTzD0hA96sXS414UfxeYh35yTrg==} + engines: {node: '>=20'} + iobuffer@5.4.0: resolution: {integrity: sha512-DRebOWuqDvxunfkNJAlc3IzWIPD5xVxwUNbHr7xKB8E6aLJxIPfNX3CoMJghcFjpv6RWQsrcJbghtEwSPoJqMA==} @@ -8137,6 +8080,10 @@ packages: resolution: {integrity: sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==} engines: {node: '>=8'} + is-stream@4.0.1: + resolution: {integrity: sha512-Dnz92NInDqYckGEUJv689RbRiTSEHCQ7wOVeALbkOz999YpqT46yMRIGtSNl2iCL1waAZSx40+h59NV/EwzV/A==} + engines: {node: '>=18'} + is-string@1.1.1: resolution: {integrity: sha512-BtEeSsoaQjlSPBemMQIrY1MY0uM6vnS1g5fmufYOtnxLGUZM2178PKbhsk7Ffv58IX+ZtcvoGwccYsh0PglkAA==} engines: {node: '>= 0.4'} @@ -8265,8 +8212,8 @@ packages: jsbn@0.1.1: resolution: {integrity: sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg==} - jsdom@27.0.0: - resolution: {integrity: sha512-lIHeR1qlIRrIN5VMccd8tI2Sgw6ieYXSVktcSHaNe3Z5nE/tcPQYQWOq00wxMvYOsz+73eAkNenVvmPC6bba9A==} + jsdom@27.0.1: + resolution: {integrity: sha512-SNSQteBL1IlV2zqhwwolaG9CwhIhTvVHWg3kTss/cLE7H/X4644mtPQqYvCfsSrGQWt9hSZcgOXX8bOZaMN+kA==} engines: {node: '>=20'} peerDependencies: canvas: ^3.0.0 @@ -8325,8 +8272,8 @@ packages: resolution: {integrity: sha512-P2bSOMAc/ciLz6DzgjVlGJP9+BrJWu5UDGK70C2iweC5QBIeFf0ZXRvGjEj2uYgrY2MkAAhsSWHDWlFtEroZWw==} engines: {node: '>=0.6.0'} - jsx-email@2.7.4: - resolution: {integrity: sha512-HgMj9CqxqvKnjn40m2Yjkpc50NuVhviM1Y0HgkSABlDVZRbToavExwTy8NioMiKjjfmUO0hS8Lle9UxqoKcjDw==} + jsx-email@2.8.1: + resolution: {integrity: sha512-HJhUqMdl79j8pYm29IdrFH5Yi6ZsZDdftCpJaYzL8lIuIawiISMOSRf4WwO4vi0nnMQpF1aFNtWUEDtmbwo6oA==} engines: {node: '>=18.0.0'} hasBin: true peerDependencies: @@ -8357,8 +8304,8 @@ packages: resolution: {integrity: sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==} engines: {node: '>=6'} - knip@5.64.3: - resolution: {integrity: sha512-P9dZetEZfSBwNBFwj55CAnPAMdzVLTTscWx6rdB8eBmPqXPji8F3L+hhWi+Xp+u9O6Xp2ClRDq2JENSK8Z04Qg==} + knip@5.66.4: + resolution: {integrity: sha512-HmTnxdmoHAvwKmFktRGY1++tXRI8J36eVrOpfj/ybTVVT1QBKBlbBEN1s3cJBx9UL+hXTZDNQif+gs7fUKldbw==} engines: {node: '>=18.18.0'} hasBin: true peerDependencies: @@ -8381,68 +8328,74 @@ packages: engines: {node: '>=16'} hasBin: true - lightningcss-darwin-arm64@1.30.1: - resolution: {integrity: sha512-c8JK7hyE65X1MHMN+Viq9n11RRC7hgin3HhYKhrMyaXflk5GVplZ60IxyoVtzILeKr+xAJwg6zK6sjTBJ0FKYQ==} + lightningcss-android-arm64@1.30.2: + resolution: {integrity: sha512-BH9sEdOCahSgmkVhBLeU7Hc9DWeZ1Eb6wNS6Da8igvUwAe0sqROHddIlvU06q3WyXVEOYDZ6ykBZQnjTbmo4+A==} + engines: {node: '>= 12.0.0'} + cpu: [arm64] + os: [android] + + lightningcss-darwin-arm64@1.30.2: + resolution: {integrity: sha512-ylTcDJBN3Hp21TdhRT5zBOIi73P6/W0qwvlFEk22fkdXchtNTOU4Qc37SkzV+EKYxLouZ6M4LG9NfZ1qkhhBWA==} engines: {node: '>= 12.0.0'} cpu: [arm64] os: [darwin] - lightningcss-darwin-x64@1.30.1: - resolution: {integrity: sha512-k1EvjakfumAQoTfcXUcHQZhSpLlkAuEkdMBsI/ivWw9hL+7FtilQc0Cy3hrx0AAQrVtQAbMI7YjCgYgvn37PzA==} + lightningcss-darwin-x64@1.30.2: + resolution: {integrity: sha512-oBZgKchomuDYxr7ilwLcyms6BCyLn0z8J0+ZZmfpjwg9fRVZIR5/GMXd7r9RH94iDhld3UmSjBM6nXWM2TfZTQ==} engines: {node: '>= 12.0.0'} cpu: [x64] os: [darwin] - lightningcss-freebsd-x64@1.30.1: - resolution: {integrity: sha512-kmW6UGCGg2PcyUE59K5r0kWfKPAVy4SltVeut+umLCFoJ53RdCUWxcRDzO1eTaxf/7Q2H7LTquFHPL5R+Gjyig==} + lightningcss-freebsd-x64@1.30.2: + resolution: {integrity: sha512-c2bH6xTrf4BDpK8MoGG4Bd6zAMZDAXS569UxCAGcA7IKbHNMlhGQ89eRmvpIUGfKWNVdbhSbkQaWhEoMGmGslA==} engines: {node: '>= 12.0.0'} cpu: [x64] os: [freebsd] - lightningcss-linux-arm-gnueabihf@1.30.1: - resolution: {integrity: sha512-MjxUShl1v8pit+6D/zSPq9S9dQ2NPFSQwGvxBCYaBYLPlCWuPh9/t1MRS8iUaR8i+a6w7aps+B4N0S1TYP/R+Q==} + lightningcss-linux-arm-gnueabihf@1.30.2: + resolution: {integrity: sha512-eVdpxh4wYcm0PofJIZVuYuLiqBIakQ9uFZmipf6LF/HRj5Bgm0eb3qL/mr1smyXIS1twwOxNWndd8z0E374hiA==} engines: {node: '>= 12.0.0'} cpu: [arm] os: [linux] - lightningcss-linux-arm64-gnu@1.30.1: - resolution: {integrity: sha512-gB72maP8rmrKsnKYy8XUuXi/4OctJiuQjcuqWNlJQ6jZiWqtPvqFziskH3hnajfvKB27ynbVCucKSm2rkQp4Bw==} + lightningcss-linux-arm64-gnu@1.30.2: + resolution: {integrity: sha512-UK65WJAbwIJbiBFXpxrbTNArtfuznvxAJw4Q2ZGlU8kPeDIWEX1dg3rn2veBVUylA2Ezg89ktszWbaQnxD/e3A==} engines: {node: '>= 12.0.0'} cpu: [arm64] os: [linux] - lightningcss-linux-arm64-musl@1.30.1: - resolution: {integrity: sha512-jmUQVx4331m6LIX+0wUhBbmMX7TCfjF5FoOH6SD1CttzuYlGNVpA7QnrmLxrsub43ClTINfGSYyHe2HWeLl5CQ==} + lightningcss-linux-arm64-musl@1.30.2: + resolution: {integrity: sha512-5Vh9dGeblpTxWHpOx8iauV02popZDsCYMPIgiuw97OJ5uaDsL86cnqSFs5LZkG3ghHoX5isLgWzMs+eD1YzrnA==} engines: {node: '>= 12.0.0'} cpu: [arm64] os: [linux] - lightningcss-linux-x64-gnu@1.30.1: - resolution: {integrity: sha512-piWx3z4wN8J8z3+O5kO74+yr6ze/dKmPnI7vLqfSqI8bccaTGY5xiSGVIJBDd5K5BHlvVLpUB3S2YCfelyJ1bw==} + lightningcss-linux-x64-gnu@1.30.2: + resolution: {integrity: sha512-Cfd46gdmj1vQ+lR6VRTTadNHu6ALuw2pKR9lYq4FnhvgBc4zWY1EtZcAc6EffShbb1MFrIPfLDXD6Xprbnni4w==} engines: {node: '>= 12.0.0'} cpu: [x64] os: [linux] - lightningcss-linux-x64-musl@1.30.1: - resolution: {integrity: sha512-rRomAK7eIkL+tHY0YPxbc5Dra2gXlI63HL+v1Pdi1a3sC+tJTcFrHX+E86sulgAXeI7rSzDYhPSeHHjqFhqfeQ==} + lightningcss-linux-x64-musl@1.30.2: + resolution: {integrity: sha512-XJaLUUFXb6/QG2lGIW6aIk6jKdtjtcffUT0NKvIqhSBY3hh9Ch+1LCeH80dR9q9LBjG3ewbDjnumefsLsP6aiA==} engines: {node: '>= 12.0.0'} cpu: [x64] os: [linux] - lightningcss-win32-arm64-msvc@1.30.1: - resolution: {integrity: sha512-mSL4rqPi4iXq5YVqzSsJgMVFENoa4nGTT/GjO2c0Yl9OuQfPsIfncvLrEW6RbbB24WtZ3xP/2CCmI3tNkNV4oA==} + lightningcss-win32-arm64-msvc@1.30.2: + resolution: {integrity: sha512-FZn+vaj7zLv//D/192WFFVA0RgHawIcHqLX9xuWiQt7P0PtdFEVaxgF9rjM/IRYHQXNnk61/H/gb2Ei+kUQ4xQ==} engines: {node: '>= 12.0.0'} cpu: [arm64] os: [win32] - lightningcss-win32-x64-msvc@1.30.1: - resolution: {integrity: sha512-PVqXh48wh4T53F/1CCu8PIPCxLzWyCnn/9T5W1Jpmdy5h9Cwd+0YQS6/LwhHXSafuc61/xg9Lv5OrCby6a++jg==} + lightningcss-win32-x64-msvc@1.30.2: + resolution: {integrity: sha512-5g1yc73p+iAkid5phb4oVFMB45417DkRevRbt/El/gKXJk4jid+vPFF/AXbxn05Aky8PapwzZrdJShv5C0avjw==} engines: {node: '>= 12.0.0'} cpu: [x64] os: [win32] - lightningcss@1.30.1: - resolution: {integrity: sha512-xi6IyHML+c9+Q3W0S4fCQJOym42pyurFiJUHEcEyHS0CeKzia4yZDEsLlqOFykxOdHpNy0NmvVO31vcSqAxJCg==} + lightningcss@1.30.2: + resolution: {integrity: sha512-utfs7Pr5uJyyvDETitgsaqSyjCb2qNRAtuqUeWIAKztsOYdcACf2KtARYXg2pSvhkt+9NfoaNY7fxjl6nuMjIQ==} engines: {node: '>= 12.0.0'} lilconfig@2.1.0: @@ -8554,6 +8507,10 @@ packages: lower-case@2.0.2: resolution: {integrity: sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==} + lowercase-keys@3.0.0: + resolution: {integrity: sha512-ozCC6gdQ+glXOQsveKD0YsDy8DSQFjDTz4zyzEHNV5+JP5D62LmfDZ6o1cycFx9ouG940M5dE8C8CTewdj2YWQ==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + lowlight@3.3.0: resolution: {integrity: sha512-0JNhgFoPvP6U6lE/UdVsSq99tn6DhjjpAj5MxG49ewd2mOBVtwWYIT8ClyABhq198aXXODMU6Ox8DrGy/CpTZQ==} @@ -8584,8 +8541,8 @@ packages: magic-string@0.25.9: resolution: {integrity: sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ==} - magic-string@0.30.19: - resolution: {integrity: sha512-2N21sPY9Ws53PZvsEpVtNuSW+ScYbQdp4b9qUaL+9QkHUrGFKo56Lg9Emg5s9V/qrtNBmiR01sYhUOwu3H+VOw==} + magic-string@0.30.21: + resolution: {integrity: sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==} magic-string@0.30.8: resolution: {integrity: sha512-ISQTe55T2ao7XtlAStud6qwYPZjE4GK1S/BeVPus4jrq6JuOnQ00YKQC581RWhR122W7msZV263KzVeLoqidyQ==} @@ -8788,12 +8745,16 @@ packages: resolution: {integrity: sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==} engines: {node: '>=10'} + mimic-response@4.0.0: + resolution: {integrity: sha512-e5ISH9xMYU0DzrT+jl8q2ze9D6eWBto+I8CNpe+VI+K2J/F/k3PdkdTdz4wvGVH4NTpo+NRYTVIuMQEMMcsLqg==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + min-indent@1.0.1: resolution: {integrity: sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==} engines: {node: '>=4'} - minimatch@10.0.3: - resolution: {integrity: sha512-IPZ167aShDZZUMdRk66cyQAW3qr0WzbHkPdMYa8bzZhlHhO3jALbKdxcaak7W9FfT2rZNpQuUu4Od7ILEpXSaw==} + minimatch@10.1.1: + resolution: {integrity: sha512-enIvLvRAFZYXJzkCYG5RKmPfrFArdLv+R+lbQ53BmIMLIry74bjKzX6iHAm8WYamJkhSSEabrWN5D97XnKObjQ==} engines: {node: 20 || >=22} minimatch@3.1.2: @@ -8838,10 +8799,6 @@ packages: resolution: {integrity: sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==} engines: {node: '>= 8'} - minizlib@3.1.0: - resolution: {integrity: sha512-KZxYo1BUkWD2TVFLr0MQoM8vUUigWD3LlD83a/75BqC+4qE0Hb1Vo5v1FgcfaNXvfXzr+5EhQ6ing/CaBijTlw==} - engines: {node: '>= 18'} - mitt@3.0.1: resolution: {integrity: sha512-vKivATfr97l2/QBCYAkXYDbrIWPM2IIKEl7YPhjCvKlG3kE2gm+uBo6nEXK3M5/Ffh/FLpKExzOQ3JJoJGFKBw==} @@ -8931,8 +8888,8 @@ packages: no-case@3.0.4: resolution: {integrity: sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==} - node-abi@3.78.0: - resolution: {integrity: sha512-E2wEyrgX/CqvicaQYU3Ze1PFGjc4QYPGsjUrlYkqAE0WjHEZwgOsGMPMzkMse4LjJbDmaEuDX3CM036j5K2DSQ==} + node-abi@3.80.0: + resolution: {integrity: sha512-LyPuZJcI9HVwzXK1GPxWNzrr+vr8Hp/3UqlmWxxh8p54U1ZbclOqbSog9lWHaCX+dBaiGi6n/hIX+mKu74GmPA==} engines: {node: '>=10'} node-addon-api@7.1.1: @@ -8959,8 +8916,8 @@ packages: node-html-parser@7.0.1: resolution: {integrity: sha512-KGtmPY2kS0thCWGK0VuPyOS+pBKhhe8gXztzA2ilAOhbUbxa9homF1bOyKvhGzMLXUoRds9IOmr/v5lr/lqNmA==} - node-releases@2.0.23: - resolution: {integrity: sha512-cCmFDMSm26S6tQSDpBCg/NR8NENrVPhAJSf+XbxBG4rPFaaonlEoE9wHQmun+cls499TQGSb7ZyPBRlzgKfpeg==} + node-releases@2.0.27: + resolution: {integrity: sha512-nmh3lCkYZ3grZvqcCH+fjmQ7X+H0OeZgP40OierEaAptX4XofMh5kwNbWh7lBduUzCcV/8kZ+NDLCwm2iorIlA==} nopt@7.2.1: resolution: {integrity: sha512-taM24ViiimT/XntxbPyJQzCG+p4EKOpgD3mxFwW38mGjVUrfERQOeY4EDHjdnptttfHuHQXFx+lTP08Q+mLa/w==} @@ -8975,6 +8932,10 @@ packages: resolution: {integrity: sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==} engines: {node: '>=0.10.0'} + normalize-url@8.1.0: + resolution: {integrity: sha512-X06Mfd/5aKsRHc0O0J5CUedwnPmnDtLF2+nq+KN9KSDlJHkPuh0JUviWjEWMe0SW/9TDdSLVPuk7L5gGTIA1/w==} + engines: {node: '>=14.16'} + nth-check@2.1.1: resolution: {integrity: sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==} @@ -9033,8 +8994,8 @@ packages: oniguruma-to-es@4.3.3: resolution: {integrity: sha512-rPiZhzC3wXwE59YQMRDodUwwT9FZ9nNBwQQfsd1wfdtlKEyCdRV0avrTcSZ5xlIvGRVPd/cx6ZN45ECmS39xvg==} - open@10.1.2: - resolution: {integrity: sha512-cxN6aIDPz6rm8hbebcP7vrQNhvRcveZoJU72Y7vskh4oIm+BZwBECnx5nTmrlres1Qapvx27Qo1Auukpf8PKXw==} + open@10.2.0: + resolution: {integrity: sha512-YgBpdJHPyQ2UE5x+hlSXcnejzAvD0b22U2OuAP+8OnlJT+PjWPxtgmGqKKc+RgTM63U9gN0YzrYc71R2WT/hTA==} engines: {node: '>=18'} open@8.4.2: @@ -9059,8 +9020,12 @@ packages: resolution: {integrity: sha512-qFOyK5PjiWZd+QQIh+1jhdb9LpxTF0qs7Pm8o5QHYZ0M3vKqSqzsZaEB6oWlxZ+q2sJBMI/Ktgd2N5ZwQoRHfg==} engines: {node: '>= 0.4'} - oxc-resolver@11.9.0: - resolution: {integrity: sha512-u714L0DBBXpD0ERErCQlun2XwinuBfIGo2T8bA7xE8WLQ4uaJudO/VOEQCWslOmcDY2nEkS+UVir5PpyvSG23w==} + oxc-resolver@11.12.0: + resolution: {integrity: sha512-zmS2q2txiB+hS2u0aiIwmvITIJN8c8ThlWoWB762Wx5nUw8WBlttp0rzt8nnuP1cGIq9YJ7sGxfsgokm+SQk5Q==} + + p-cancelable@4.0.1: + resolution: {integrity: sha512-wBowNApzd45EIKdO1LaU+LrMBwAcjfPaYtVzV3lmfM3gf8Z4CHZsiIqlM8TZZ8okYvh5A1cP6gTfCRQtwUpaUg==} + engines: {node: '>=14.16'} p-defer@3.0.0: resolution: {integrity: sha512-ugZxsxmtTln604yeYd29EGrNhazN2lywetzpKhfmQjW/VJmhpDmWbiX+h0zL8V91R0UXkhb3KtPmyq9PZw3aYw==} @@ -9123,6 +9088,9 @@ packages: parse5@7.3.0: resolution: {integrity: sha512-IInvU7fabl34qmi9gY8XOVxhYyMyuH2xUNpb2q8/Y+7552KlejkRvqvD19nMoUW/uQGGbqNpA6Tufu5FL5BZgw==} + parse5@8.0.0: + resolution: {integrity: sha512-9m4m5GSgXjL4AjumKzq1Fgfp3Z8rsvjRNbnkVwfu2ImRqE5D0LnY2QfDen18FSY9C573YU5XxSapdHZTZ2WolA==} + parseley@0.12.1: resolution: {integrity: sha512-e6qHKe3a9HWr0oMRVDTRhKce+bRO8VGQR3NyVwcjwrbhMmFCX9KszEV35+rn4AdilFAq9VPxP/Fe1wC9Qjd2lw==} @@ -9249,8 +9217,8 @@ packages: pino-std-serializers@7.0.0: resolution: {integrity: sha512-e906FRY0+tV27iq4juKzSYPbUj2do2X2JX4EzSca1631EB2QJQUqGbDuERal7LCtOpxl6x3+nvo9NPZcmjkiFA==} - pino@10.0.0: - resolution: {integrity: sha512-eI9pKwWEix40kfvSzqEP6ldqOoBIN7dwD/o91TY5z8vQI12sAffpR/pOqAD1IVVwIVHDpHjkq0joBPdJD0rafA==} + pino@10.1.0: + resolution: {integrity: sha512-0zZC2ygfdqvqK8zJIr1e+wT1T/L+LF6qvqvbzEQ6tiMAoTqEVK9a1K3YRu8HEUvGEvNqZyPJTtb2sNIoTkB83w==} hasBin: true pirates@4.0.7: @@ -9266,13 +9234,13 @@ packages: player.style@0.3.0: resolution: {integrity: sha512-ny1TbqA2ZsUd6jzN+F034+UMXVK7n5SrwepsrZ2gIqVz00Hn0ohCUbbUdst/2IOFCy0oiTbaOXkSFxRw1RmSlg==} - playwright-core@1.56.0: - resolution: {integrity: sha512-1SXl7pMfemAMSDn5rkPeZljxOCYAmQnYLBTExuh6E8USHXGSX3dx6lYZN/xPpTz1vimXmPA9CDnILvmJaB8aSQ==} + playwright-core@1.56.1: + resolution: {integrity: sha512-hutraynyn31F+Bifme+Ps9Vq59hKuUCz7H1kDOcBs+2oGguKkWTU50bBWrtz34OUWmIwpBTWDxaRPXrIXkgvmQ==} engines: {node: '>=18'} hasBin: true - playwright@1.56.0: - resolution: {integrity: sha512-X5Q1b8lOdWIE4KAoHpW3SE8HvUB+ZZsUoN64ZhjnN8dOb1UpujxBtENGiZFE+9F/yhzJwYa+ca3u43FeLbboHA==} + playwright@1.56.1: + resolution: {integrity: sha512-aFi5B0WovBHTEvpM3DzXTUaeN6eN0qWnTkKx4NQaH4Wvcmc153PdaY2UBdSYKaGYw+UyWXSVyxDUg5DoPEttjw==} engines: {node: '>=18'} hasBin: true @@ -9435,8 +9403,8 @@ packages: prosemirror-dropcursor@1.8.2: resolution: {integrity: sha512-CCk6Gyx9+Tt2sbYk5NK0nB1ukHi2ryaRgadV/LvyNuO3ena1payM2z6Cg0vO1ebK8cxbzo41ku2DE5Axj1Zuiw==} - prosemirror-gapcursor@1.3.2: - resolution: {integrity: sha512-wtjswVBd2vaQRrnYZaBCbyDqr232Ed4p2QPtRIUK5FuqHYKGWkEwl08oQM4Tw7DOR0FsasARV5uJFvMZWxdNxQ==} + prosemirror-gapcursor@1.4.0: + resolution: {integrity: sha512-z00qvurSdCEWUIulij/isHaqu4uLS8r/Fi61IbjdIPJEonQgggbJsLnstW7Lgdk4zQ68/yr6B6bf7sJXowIgdQ==} prosemirror-highlight@0.13.0: resolution: {integrity: sha512-GIC2VCTUnukNdsEGLQWWOVpYPl/7/KrVp4xs7XMB48/4rhUrHK8hp8TEog4Irmv+2kmjx24RLnaisGOCP6U8jw==} @@ -9476,8 +9444,8 @@ packages: prosemirror-history@1.4.1: resolution: {integrity: sha512-2JZD8z2JviJrboD9cPuX/Sv/1ChFng+xh2tChQ2X4bB2HeK+rra/bmJ3xGntCcjhOqIzSDG6Id7e8RJ9QPXLEQ==} - prosemirror-inputrules@1.5.0: - resolution: {integrity: sha512-K0xJRCmt+uSw7xesnHmcn72yBGTbY45vm8gXI4LZXbx2Z0jwh5aF9xrGQgrVPu0WbyFVFF3E/o9VhJYz6SQWnA==} + prosemirror-inputrules@1.5.1: + resolution: {integrity: sha512-7wj4uMjKaXWAQ1CDgxNzNtR9AlsuwzHfdFH1ygEHA2KHF2DOEaXl1CJfNPAKCg9qNEh4rum975QLaCiQPyY6Fw==} prosemirror-keymap@1.2.3: resolution: {integrity: sha512-4HucRlpiLd1IPQQXNqeo81BGtkY8Ai5smHhKW9jjPKRc2wQIxksg7Hl1tTI2IfT2B/LgX6bfYvXxEpJl7aKYKw==} @@ -9488,8 +9456,8 @@ packages: prosemirror-menu@1.2.5: resolution: {integrity: sha512-qwXzynnpBIeg1D7BAtjOusR+81xCp53j7iWu/IargiRZqRjGIlQuu1f3jFi+ehrHhWMLoyOQTSRx/IWZJqOYtQ==} - prosemirror-model@1.25.3: - resolution: {integrity: sha512-dY2HdaNXlARknJbrManZ1WyUtos+AP97AmvqdOQtWtrrC5g4mohVX5DTi9rXNFSk09eczLq9GuNTtq3EfMeMGA==} + prosemirror-model@1.25.4: + resolution: {integrity: sha512-PIM7E43PBxKce8OQeezAs9j4TP+5yDpZVbuurd1h5phUxEKIu+G2a+EUZzIC5nS1mJktDJWzbqS23n1tsAf5QA==} prosemirror-schema-basic@1.2.4: resolution: {integrity: sha512-ELxP4TlX3yr2v5rM7Sb70SqStq5NvI15c0j9j/gjsrO5vaw+fnnpovCLEGIcpeGfifkuqJwl4fon6b+KdrODYQ==} @@ -9497,8 +9465,8 @@ packages: prosemirror-schema-list@1.5.1: resolution: {integrity: sha512-927lFx/uwyQaGwJxLWCZRkjXG0p48KpMj6ueoYiu4JX05GGuGcgzAy62dfiV8eFZftgyBUvLx76RsMe20fJl+Q==} - prosemirror-state@1.4.3: - resolution: {integrity: sha512-goFKORVbvPuAQaXhpbemJFRKJ2aixr+AZMGiquiqKxaucC6hlpHNZHWgz5R7dS4roHiwq9vDctE//CZ++o0W1Q==} + prosemirror-state@1.4.4: + resolution: {integrity: sha512-6jiYHH2CIGbCfnxdHbXZ12gySFY/fz/ulZE333G6bPqIZ4F+TXo9ifiR86nAHpWnfoNjOb3o5ESi7J8Uz1jXHw==} prosemirror-tables@1.8.1: resolution: {integrity: sha512-DAgDoUYHCcc6tOGpLVPSU1k84kCUWTWnfWX3UDy2Delv4ryH0KqTD6RBI6k4yi9j9I8gl3j8MkPpRD/vWPZbug==} @@ -9558,6 +9526,10 @@ packages: quick-format-unescaped@4.0.4: resolution: {integrity: sha512-tYC1Q1hgyRuHgloV/YXs2w15unPVh8qfu/qCTfhTYamaw7fyhumKa2yGpdSo87vY32rIclj+4fWYQXUMs9EHvg==} + quick-lru@5.1.1: + resolution: {integrity: sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==} + engines: {node: '>=10'} + raf-schd@4.0.3: resolution: {integrity: sha512-tQkJl2GRWh83ui2DiPTJz9wEiMN20syf+5oKfB03yYP7ioZcJwsIK8FjrtLwH1m7C7e+Tt2yYBlrOpdT+dyeIQ==} @@ -9567,8 +9539,8 @@ packages: randombytes@2.1.0: resolution: {integrity: sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==} - rate-limiter-flexible@8.0.1: - resolution: {integrity: sha512-UVJdIvGYUDGH9+f3e63dIyOB1wxCLC9CSH09eXLohENGAsxY9PTwI2uJgY6Kj0ULf7x1Aq4FZIGvhJHXJTbdSQ==} + rate-limiter-flexible@8.1.0: + resolution: {integrity: sha512-J+4xBdVboibP1h0Imn4nFoCLT+UM9Os9vJaWaRWkLsQxS7jrhLJeLlmzP5hyCEsLwtgFIIY5KcWiJGyyVTMaKg==} rc9@2.1.2: resolution: {integrity: sha512-btXCnMmRIBINM2LDZoEmOogIZU7Qe7zn4BpomSKZ/ykbLObuBdvG+mFq11DL6fjH1DRwHhrlgtYWG96bJiC7Cg==} @@ -9630,8 +9602,8 @@ packages: typescript: optional: true - react-i18next@16.0.0: - resolution: {integrity: sha512-JQ+dFfLnFSKJQt7W01lJHWRC0SX7eDPobI+MSTJ3/gP39xH2g33AuTE7iddAfXYHamJdAeMGM0VFboPaD3G68Q==} + react-i18next@16.2.2: + resolution: {integrity: sha512-iKgJMloKpkLUCy6w/0BEJSVQ5jG2WbnFiO2w/9wwa8nc+obsEZjQErRCw27O7BHlpscKfpWSu5vTnC+3fBMQfQ==} peerDependencies: i18next: '>= 25.5.2' react: '>= 16.8.0' @@ -9694,8 +9666,8 @@ packages: redux: optional: true - react-refresh@0.17.0: - resolution: {integrity: sha512-z6F7K9bV85EfseRCp2bzrpyQ0Gkw1uLoCel9XBVWPg/TjRj94SkJzUTGfOa4bs7iJvBWtQG0Wq7wnI0syw3EBQ==} + react-refresh@0.18.0: + resolution: {integrity: sha512-QgT5//D3jfjJb6Gsjxv0Slpj23ip+HtOpnNgnb2S5zU3CB26G/IDPGoy4RJB42wzFE46DRsstbW6tKHoKbhAxw==} engines: {node: '>=0.10.0'} react-remove-scroll-bar@2.3.8: @@ -9814,8 +9786,8 @@ packages: resolution: {integrity: sha512-YTUo+Flmw4ZXiWfQKGcwwc11KnoRAYgzAE2E7mXKCjSviTKShtxBsN6YUUBB2gtaBzKzeKunxhUwNHQuRryhWA==} engines: {node: '>= 4'} - recharts@3.2.1: - resolution: {integrity: sha512-0JKwHRiFZdmLq/6nmilxEZl3pqb4T+aKkOkOi/ZISRZwfBhVMgInxzlYU9D4KnCH3KINScLy68m/OvMXoYGZUw==} + recharts@3.3.0: + resolution: {integrity: sha512-Vi0qmTB0iz1+/Cz9o5B7irVyUjX2ynvEgImbgMt/3sKRREcUM07QiYjS1QpAVrkmVlXqy5gykq4nGWMz9AS4Rg==} engines: {node: '>=18'} peerDependencies: react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 @@ -9977,8 +9949,8 @@ packages: resolution: {integrity: sha512-gAZ+kLqBdHarXB64XpAe2VCjB7rIRv+mU8tfRWziHRJ5umKsIHN2tLLv6EtMw7WCdP19S0ERVMldNvxYCHnhSQ==} engines: {node: '>=8.6.0'} - require-in-the-middle@8.0.0: - resolution: {integrity: sha512-9s0pnM5tH8G4dSI3pms2GboYOs25LwOGnRMxN/Hx3TYT1K0rh6OjaWf4dI0DAQnMyaEXWoGVnSTPQasqwzTTAA==} + require-in-the-middle@8.0.1: + resolution: {integrity: sha512-QT7FVMXfWOYFbeRBF6nu+I6tr2Tf3u0q8RIEjNob/heKY/nh7drD/k7eeMFmSQgnTtCzLDcCu/XEnpW2wk4xCQ==} engines: {node: '>=9.3.0 || >=8.10.0 <9.0.0'} requires-port@1.0.0: @@ -9987,6 +9959,9 @@ packages: reselect@5.1.1: resolution: {integrity: sha512-K/BG6eIky/SBpzfHZv/dd+9JBFiS4SWV7FIujVyJRux6e45+73RaUHXLmIR1f7WOMaQ0U1km6qwklRQxpJJY0w==} + resolve-alpn@1.2.1: + resolution: {integrity: sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g==} + resolve-from@4.0.0: resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} engines: {node: '>=4'} @@ -9998,11 +9973,15 @@ packages: resolve-pkg-maps@1.0.0: resolution: {integrity: sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==} - resolve@1.22.10: - resolution: {integrity: sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w==} + resolve@1.22.11: + resolution: {integrity: sha512-RfqAvLnMl313r7c9oclB1HhUEAezcpLjz95wFH4LVuhk9JF/r22qmVP9AMmOU4vMX7Q8pN8jwNg/CSpdFnMjTQ==} engines: {node: '>= 0.4'} hasBin: true + responselike@3.0.0: + resolution: {integrity: sha512-40yHxbNcl2+rzXvZuVkrYohathsSJlMTXKryG5y8uciHv1+xDLHQpgjG64JUO9nrEq2jGLH6IZ8BcZyw3wrweg==} + engines: {node: '>=14.16'} + retry@0.12.0: resolution: {integrity: sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==} engines: {node: '>= 4'} @@ -10032,8 +10011,8 @@ packages: engines: {node: 20 || >=22} hasBin: true - rollup-plugin-visualizer@6.0.4: - resolution: {integrity: sha512-q8Q7J/6YofkmaGW1sH/fPRAz37x/+pd7VBuaUU7lwvOS/YikuiiEU9jeb9PH8XHiq50XFrUsBbOxeAMYQ7KZkg==} + rollup-plugin-visualizer@6.0.5: + resolution: {integrity: sha512-9+HlNgKCVbJDs8tVtjQ43US12eqaiHyyiLMdBwQ7vSZPiHMysGNo2E88TAp1si5wx8NAoYriI2A5kuKfIakmJg==} engines: {node: '>=18'} hasBin: true peerDependencies: @@ -10050,8 +10029,8 @@ packages: engines: {node: '>=10.0.0'} hasBin: true - rollup@4.52.4: - resolution: {integrity: sha512-CLEVl+MnPAiKh5pl4dEWSyMTpuflgNQiLGhMv8ezD5W/qP8AKvmYpCOKRRNOh7oRKnauBZ4SyeYkMS+1VSyKwQ==} + rollup@4.52.5: + resolution: {integrity: sha512-3GuObel8h7Kqdjt0gxkEzaifHTqLVW56Y/bjN7PSQtkKr0w3V/QYSdt6QWYtd7A1xUtYQigtdUfgj1RvWVtorw==} engines: {node: '>=18.0.0', npm: '>=8.0.0'} hasBin: true @@ -10146,8 +10125,8 @@ packages: resolution: {integrity: sha512-RbcPH1n5cfwKrru7v7+zrZvjLurgHhGyso3HTyGtRivGWgYjbOmGuivCQaORNELjNONoK35nj28EoWul9sb1zQ==} engines: {node: '>=10'} - set-cookie-parser@2.7.1: - resolution: {integrity: sha512-IOc8uWeOZgnb3ptbCURJWNjWUPcO3ZnTTdzsurqERrP6nPyv+paC55vJM0LpOlT2ne+Ix+9+CRG1MNLlyZ4GjQ==} + set-cookie-parser@2.7.2: + resolution: {integrity: sha512-oeM1lpU/UvhTxw+g3cIfxXHyJRc/uidd3yK1P242gzHds0udQBYzs3y8j4gCCW+ZJ7ad0yctld8RYO+bdurlvw==} set-function-length@1.2.2: resolution: {integrity: sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==} @@ -10225,9 +10204,6 @@ packages: resolution: {integrity: sha512-ZA6oR3T/pEyuqwMgAKT0/hAv8oAXckzbkmR0UkUosQ+Mc4RxGoJkRmwHgHufaenlyAgE1Mxgpdcrf75y6XcnDg==} engines: {node: '>=14.16'} - slow-redact@0.3.2: - resolution: {integrity: sha512-MseHyi2+E/hBRqdOi5COy6wZ7j7DxXRz9NkseavNYSvvWC06D8a5cidVZX3tcG5eCW3NIyVU4zT63hw0Q486jw==} - slugify@1.6.6: resolution: {integrity: sha512-h+z7HKHYXj6wJU+AnS/+IH8Uh9fdcX1Lrhg1/VMdf9PwoBQXFcXiAdsy2tSK0P6gKwJLXp02r90ahUCqHk9rrw==} engines: {node: '>=8.0.0'} @@ -10297,15 +10273,15 @@ packages: resolution: {integrity: sha512-yf7OENo23AGJhBriGx0QivY5JP6Y1HbrrDI6WLt6C5auYZXlQrheoY8hD4ibekFKz1HOfE48Ww8kMWMnJD/zcQ==} engines: {node: '>=0.1.14'} - std-env@3.9.0: - resolution: {integrity: sha512-UGvjygr6F6tpH7o2qyqR6QYpwraIjKSdtzyBdyytFOHmPZY917kwdwLG0RbOjWOnKmnm3PeHjaoLLMie7kPLQw==} + std-env@3.10.0: + resolution: {integrity: sha512-5GS12FdOZNliM5mAOxFRg7Ir0pWz8MdpYm6AY6VPkGpbA7ZzmbzNcBJQ0GPvvyWgcY7QAhCgf9Uy89I03faLkg==} stop-iteration-iterator@1.1.0: resolution: {integrity: sha512-eLoXW/DHyl62zxY4SCaIgnRhuMr6ri4juEYARS8E6sCEqzKpOiE521Ucofdx+KnDZl5xmvGYaaKCk5FEOxJCoQ==} engines: {node: '>= 0.4'} - storybook@9.1.10: - resolution: {integrity: sha512-4+U7gF9hMpGilQmdVJwQaVZZEkD7XwC4ZDmBa51mobaPYelELEMoMfNM2hLyvB2x12gk1IJui1DnwOE4t+MXhw==} + storybook@9.1.16: + resolution: {integrity: sha512-339U14K6l46EFyRvaPS2ZlL7v7Pb+LlcXT8KAETrGPxq8v1sAjj2HAOB6zrlAK3M+0+ricssfAwsLCwt7Eg8TQ==} hasBin: true peerDependencies: prettier: ^2 || ^3 @@ -10370,8 +10346,8 @@ packages: resolution: {integrity: sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==} engines: {node: '>=8'} - strip-indent@4.1.0: - resolution: {integrity: sha512-OA95x+JPmL7kc7zCu+e+TeYxEiaIyndRx0OrBcK2QPPH09oAndr2ALvymxWA+Lx1PYYvFUm4O63pRkdJAaW96w==} + strip-indent@4.1.1: + resolution: {integrity: sha512-SlyRoSkdh1dYP0PzclLE7r0M9sgbFKKMFXpFRUMNuKhQSbC6VQIGzq3E0qsfvGJaUFJPGv6Ws1NZ/haTAjfbMA==} engines: {node: '>=12'} strip-json-comments@2.0.1: @@ -10396,8 +10372,8 @@ packages: strnum@2.1.1: resolution: {integrity: sha512-7ZvoFTiCnGxBtDqJ//Cu6fWtZtc7Y3x+QOirG15wztbdngGSkht27o2pyGWrVy0b4WAy3jbKmnoK6g5VlVNUUw==} - style-to-object@1.0.11: - resolution: {integrity: sha512-5A560JmXr7wDyGLK12Nq/EYS38VkGlglVzkis1JEdbGWSnbQIEhZzTJhzURXN5/8WwwFCs/f/VVcmkTppbXLow==} + style-to-object@1.0.12: + resolution: {integrity: sha512-ddJqYnoT4t97QvN2C95bCgt+m7AAgXjVnkk/jxAfmp7EAB8nnqqZYEbMd3em7/vEomDb2LAQKAy1RFfv41mdNw==} sucrase@3.35.0: resolution: {integrity: sha512-8EbVDiu9iN/nESwxeSxDKe0dunta1GOlHufmSSXxMD2z2/tMZpDMpvXQGsc+ajGo8y2uYUmixaSRUc/QPoQ0GA==} @@ -10423,8 +10399,12 @@ packages: symbol-tree@3.2.4: resolution: {integrity: sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==} - tabbable@6.2.0: - resolution: {integrity: sha512-Cat63mxsVJlzYvN51JmVXIgNoUokrIaT2zLclCXjRd8boZ0004U4KCs/sToJ75C6sdlByWxpYnb5Boif1VSFew==} + tabbable@6.3.0: + resolution: {integrity: sha512-EIHvdY5bPLuWForiR/AN2Bxngzpuwn1is4asboytXtpTgsArc+WmSJKVLlhdh71u7jFcryDqB2A8lQvj78MkyQ==} + + tagged-tag@1.0.0: + resolution: {integrity: sha512-yEFYrVhod+hdNyx7g5Bnkkb0G6si8HJurOoOEgC8B/O0uXLHlaey/65KRv6cuWBNhBgHKAROVpc7QyYqE5gFng==} + engines: {node: '>=20'} tailwind-merge@2.6.0: resolution: {integrity: sha512-P+Vu1qXfzediirmHOC3xKGAYeZtPcV9g76X+xg2FD4tYgR71ewMA35Y3sCz3zhiN/dwefRpJX0yBcgwi1fXNQA==} @@ -10442,8 +10422,8 @@ packages: engines: {node: '>=14.0.0'} hasBin: true - tailwindcss@4.1.14: - resolution: {integrity: sha512-b7pCxjGO98LnxVkKjaZSDeNuljC4ueKUddjENJOADtubtdo8llTaJy7HwBMeLNSSo2N5QIAgklslK1+Ir8r6CA==} + tailwindcss@4.1.16: + resolution: {integrity: sha512-pONL5awpaQX4LN5eiv7moSiSPd/DLDzKVRJz8Q9PgzmAdd1R4307GQS2ZpfiN7ZmekdQrfhZZiSE5jkLR4WNaA==} tapable@2.3.0: resolution: {integrity: sha512-g9ljZiwki/LfxmQADO3dEY1CbpmXT5Hm2fJ+QaGKwSXUylMybePR7/67YW7jOrrvjEgL1Fmz5kzyAjWVWLlucg==} @@ -10460,10 +10440,6 @@ packages: resolution: {integrity: sha512-DZ4yORTwrbTj/7MZYq2w+/ZFdI6OZ/f9SFHR+71gIVUZhOQPHzVCLpvRnPgyaMpfWxxk/4ONva3GQSyNIKRv6A==} engines: {node: '>=10'} - tar@7.5.1: - resolution: {integrity: sha512-nlGpxf+hv0v7GkWBK2V9spgactGOp0qvfWRxUMjqHyzrt3SgwE48DIv/FhqPHJYLHpgW1opq3nERbz5Anq7n1g==} - engines: {node: '>=18'} - tdigest@0.1.2: resolution: {integrity: sha512-+G0LLgjjo9BZX2MfdvPfH+MKLCrxlXSYec5DaPYP1fe6Iyhf0/fSmJ0bFiZ1F8BT6cGXl2LpltQptzjXKWEkKA==} @@ -10572,6 +10548,11 @@ packages: resolution: {integrity: sha512-bLVMLPtstlZ4iMQHpFHTR7GAGj2jxi8Dg0s2h2MafAE4uSWF98FC/3MomU51iQAMf8/qDUbKWf5GxuvvVcXEhw==} engines: {node: '>=20'} + transloadit@4.0.5: + resolution: {integrity: sha512-np80pXWGCwYjfPbE+Vv4UMzPaSQz6O6SuxUKXmLtsFp2jwyqYomBq68HCK1WyPC+ejFqj5e1p7TXrvBI8Pjm8A==} + engines: {node: '>= 20'} + hasBin: true + tree-kill@1.2.2: resolution: {integrity: sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==} hasBin: true @@ -10684,6 +10665,10 @@ packages: resolution: {integrity: sha512-TeTSQ6H5YHvpqVwBRcnLDCBnDOHWYu7IvGbHT6N8AOymcr9PJGjc1GTtiWZTYg0NCgYwvnYWEkVChQAr9bjfwA==} engines: {node: '>=16'} + type-fest@5.0.0: + resolution: {integrity: sha512-GeJop7+u7BYlQ6yQCAY1nBQiRSHR+6OdCEtd8Bwp9a3NK3+fWAVjOaPKJDteB9f6cIJ0wt4IfnScjLG450EpXA==} + engines: {node: '>=20'} + typed-array-buffer@1.0.3: resolution: {integrity: sha512-nAYYwfY3qnzX30IkA6AQZjVbtK6duGontcQm1WSG1MD94YLqK0515GNApXkoxKOWMusVssAHWLh9SeaoefYFGw==} engines: {node: '>= 0.4'} @@ -10730,8 +10715,8 @@ packages: undici-types@6.21.0: resolution: {integrity: sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==} - undici-types@7.14.0: - resolution: {integrity: sha512-QQiYxHuyZ9gQUIrmPo3IA+hUl4KYk8uSA7cHrcKd/l3p1OTpZcM0Tbp9x7FAtXdAYhlasd60ncPpgu6ihG6TOA==} + undici-types@7.16.0: + resolution: {integrity: sha512-Zz+aZWSj8LE6zoxD+xrjh4VfkIG8Ya6LvYkZqtUQGJPZjYl53ypCaUwWqo7eI0x66KBGeRo+mlBEkMSeSZ38Nw==} undici@7.16.0: resolution: {integrity: sha512-QEg3HPMll0o3t2ourKwOeUAZ159Kn9mx5pnzHRQO8+Wixmh88YdZRiIwat0iNzNNXn0yoEtXJqFpyW7eM8BV7g==} @@ -10770,8 +10755,8 @@ packages: unist-util-find-after@5.0.0: resolution: {integrity: sha512-amQa0Ep2m6hE2g72AugUItjbuM8X8cGQnFoHk0pGfrFeT9GZhzN5SW8nRsiGKK7Aif4CrACPENkA6P/Lw6fHGQ==} - unist-util-is@6.0.0: - resolution: {integrity: sha512-2qCTHimwdxLfz+YzdGfkqNlH0tLi9xjTnHddPmJwtIG9MGsdbutfTc4P+haPD7l7Cjxf/WZj+we5qfVPvvxfYw==} + unist-util-is@6.0.1: + resolution: {integrity: sha512-LsiILbtBETkDz8I9p1dQ0uyRUWuaQzd/cuEeS1hoRSyW5E5XGmTzlwY1OrNzzakGowI9Dr/I8HVaw4hTtnxy8g==} unist-util-position@5.0.0: resolution: {integrity: sha512-fucsC7HjXvkB5R3kTCO7kUjRdrS0BJt3M/FPxmHMBOm8JQi2BsHAHFsy27E0EolP8rp0NzXsJ+jNPyDWvOJZPA==} @@ -10782,8 +10767,8 @@ packages: unist-util-stringify-position@4.0.0: resolution: {integrity: sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==} - unist-util-visit-parents@6.0.1: - resolution: {integrity: sha512-L/PqWzfTP9lzzEa6CKs0k2nARxTdZduw3zyh8d2NVBnsyvHjSX4TWse388YrrQKbvI8w20fGjGlhgT96WwKykw==} + unist-util-visit-parents@6.0.2: + resolution: {integrity: sha512-goh1s1TBrqSqukSc8wrjwWhL0hiJxgA8m4kFxGlQ+8FYQ3C/m11FcTs4YYem7V664AhHVvgoQLk890Ssdsr2IQ==} unist-util-visit@5.0.0: resolution: {integrity: sha512-MR04uvD+07cwl/yhVuVWAtw+3GOR/knlL55Nd/wAdblk27GCVt3lqpTivy/tkJcZoNPzTwS1Y+KMojlLDhoTzg==} @@ -10811,8 +10796,8 @@ packages: resolution: {integrity: sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg==} engines: {node: '>=4'} - update-browserslist-db@1.1.3: - resolution: {integrity: sha512-UxhIZQ+QInVdunkDAaiazvvT/+fXL5Osr0JZlJulepYu6Jd7qJtDZjlur0emRlT71EN3ScPoE7gvsuIKKNavKw==} + update-browserslist-db@1.1.4: + resolution: {integrity: sha512-q0SPT4xyU84saUX+tomz1WLkxUbuaJnR1xWt17M7fJtEJigJeWUNGUqrauFXsHnqev9y9JTRGwk13tFBuKby4A==} hasBin: true peerDependencies: browserslist: '>= 4.21.0' @@ -10910,8 +10895,8 @@ packages: victory-vendor@37.3.6: resolution: {integrity: sha512-SbPDPdDBYp+5MJHhBCAyI7wKM3d5ivekigc2Dk2s7pgbZ9wIgIBYGVw4zGHBml/qTFbexrofXW6Gu4noGxrOwQ==} - virtua@0.45.2: - resolution: {integrity: sha512-kqger1ZZICN7qW164MboRDId+z7Odaxre+9ph8/67AlTI/3hyOEiUV9c9fnRumtKqnRqzwtI9BloOWE1Tb+qEg==} + virtua@0.46.4: + resolution: {integrity: sha512-2adGT8c3N2BrFUIUnLp5jYWgIPSgTC4AbHDwgVQA8IAK1lDWC79KcF/WEhfgfV8vbGJjMGtMPhkTCZGxzd0Jaw==} peerDependencies: react: '>=16.14.0' react-dom: '>=16.14.0' @@ -10940,8 +10925,8 @@ packages: peerDependencies: vite: '>=2.0.0' - vite-plugin-pwa@1.0.3: - resolution: {integrity: sha512-/OpqIpUldALGxcsEnv/ekQiQ5xHkQ53wcoN5ewX4jiIDNGs3W+eNcI1WYZeyOLmzoEjg09D7aX0O89YGjen1aw==} + vite-plugin-pwa@1.1.0: + resolution: {integrity: sha512-VsSpdubPzXhHWVINcSx6uHRMpOHVHQcHsef1QgkOlEoaIDAlssFEW88LBq1a59BuokAhsh2kUDJbaX1bZv4Bjw==} engines: {node: '>=16.0.0'} peerDependencies: '@vite-pwa/assets-generator': ^1.0.0 @@ -10952,8 +10937,8 @@ packages: '@vite-pwa/assets-generator': optional: true - vite-plugin-static-copy@3.1.3: - resolution: {integrity: sha512-U47jgyoJfrvreF87u2udU6dHIXbHhdgGZ7wSEqn6nVHKDOMdRoB2uVc6iqxbEzENN5JvX6djE5cBhQZ2MMBclA==} + vite-plugin-static-copy@3.1.4: + resolution: {integrity: sha512-iCmr4GSw4eSnaB+G8zc2f4dxSuDjbkjwpuBLLGvQYR9IW7rnDzftnUjOH5p4RYR+d4GsiBqXRvzuFhs5bnzVyw==} engines: {node: ^18.0.0 || >=20.0.0} peerDependencies: vite: ^5.0.0 || ^6.0.0 || ^7.0.0 @@ -10966,39 +10951,8 @@ packages: vite: optional: true - vite@5.4.20: - resolution: {integrity: sha512-j3lYzGC3P+B5Yfy/pfKNgVEg4+UtcIJcVRt2cDjIOmhLourAqPqf8P7acgxeiSgUB7E3p2P8/3gNIgDLpwzs4g==} - engines: {node: ^18.0.0 || >=20.0.0} - hasBin: true - peerDependencies: - '@types/node': ^18.0.0 || >=20.0.0 - less: '*' - lightningcss: ^1.21.0 - sass: '*' - sass-embedded: '*' - stylus: '*' - sugarss: '*' - terser: ^5.4.0 - peerDependenciesMeta: - '@types/node': - optional: true - less: - optional: true - lightningcss: - optional: true - sass: - optional: true - sass-embedded: - optional: true - stylus: - optional: true - sugarss: - optional: true - terser: - optional: true - - vite@7.1.9: - resolution: {integrity: sha512-4nVGliEpxmhCL8DslSAUdxlB6+SMrhB0a1v5ijlh1xB1nEPuy1mxaHxysVucLHuWryAxLWg6a5ei+U4TLn/rFg==} + vite@7.1.12: + resolution: {integrity: sha512-ZWyE8YXEXqJrrSLvYgrRP7p62OziLW7xI5HYGWFzOvupfAlrLvURSzv/FyGyy0eidogEM3ujU+kUG1zuHgb6Ug==} engines: {node: ^20.19.0 || >=22.12.0} hasBin: true peerDependencies: @@ -11254,6 +11208,10 @@ packages: utf-8-validate: optional: true + wsl-utils@0.1.0: + resolution: {integrity: sha512-h3Fbisa2nKGPxCpm89Hk33lBLsnaGBvctQopaBSOW/uIs6FTe1ATyAnKFJrzVs9vpGdsTe73WF3V4lIsk4Gacw==} + engines: {node: '>=18'} + xml-name-validator@5.0.0: resolution: {integrity: sha512-EvGK8EJ3DhaHfbRlETOWAS5pO9MZITeauHKJyb8wyajUfQUenkIg2MvLDTZ4T/TgIcm3HU0TFBgWWboAZ30UHg==} engines: {node: '>=18'} @@ -11291,10 +11249,6 @@ packages: yallist@4.0.0: resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==} - yallist@5.0.0: - resolution: {integrity: sha512-YgvUTfwqyc7UXVMrB+SImsVYSmTS8X/tSrtdNZMImM+n7+QTriRXyXim0mBrTXNeqzVF0KWGgHPeiyViFFrNDw==} - engines: {node: '>=18'} - yaml@2.8.1: resolution: {integrity: sha512-lcYcMxX2PO9XMGvAJkJ3OsNMw+/7FKes7/hgerGUYWIoWu5j/+YQqcZr5JnPZWzOsEBgMbSbiSTn/dv/69Mkpw==} engines: {node: '>= 14.6'} @@ -11403,7 +11357,7 @@ snapshots: '@csstools/css-tokenizer': 3.0.4 lru-cache: 11.2.2 - '@asamuzakjp/dom-selector@6.6.2': + '@asamuzakjp/dom-selector@6.7.3': dependencies: '@asamuzakjp/nwsapi': 2.3.9 bidi-js: 1.0.3 @@ -11437,20 +11391,20 @@ snapshots: '@aws-crypto/crc32@5.2.0': dependencies: '@aws-crypto/util': 5.2.0 - '@aws-sdk/types': 3.901.0 + '@aws-sdk/types': 3.920.0 tslib: 2.8.1 '@aws-crypto/crc32c@5.2.0': dependencies: '@aws-crypto/util': 5.2.0 - '@aws-sdk/types': 3.901.0 + '@aws-sdk/types': 3.920.0 tslib: 2.8.1 '@aws-crypto/sha1-browser@5.2.0': dependencies: '@aws-crypto/supports-web-crypto': 5.2.0 '@aws-crypto/util': 5.2.0 - '@aws-sdk/types': 3.901.0 + '@aws-sdk/types': 3.920.0 '@aws-sdk/util-locate-window': 3.893.0 '@smithy/util-utf8': 2.3.0 tslib: 2.8.1 @@ -11460,7 +11414,7 @@ snapshots: '@aws-crypto/sha256-js': 5.2.0 '@aws-crypto/supports-web-crypto': 5.2.0 '@aws-crypto/util': 5.2.0 - '@aws-sdk/types': 3.901.0 + '@aws-sdk/types': 3.920.0 '@aws-sdk/util-locate-window': 3.893.0 '@smithy/util-utf8': 2.3.0 tslib: 2.8.1 @@ -11468,7 +11422,7 @@ snapshots: '@aws-crypto/sha256-js@5.2.0': dependencies: '@aws-crypto/util': 5.2.0 - '@aws-sdk/types': 3.901.0 + '@aws-sdk/types': 3.920.0 tslib: 2.8.1 '@aws-crypto/supports-web-crypto@5.2.0': @@ -11477,484 +11431,484 @@ snapshots: '@aws-crypto/util@5.2.0': dependencies: - '@aws-sdk/types': 3.901.0 + '@aws-sdk/types': 3.920.0 '@smithy/util-utf8': 2.3.0 tslib: 2.8.1 - '@aws-sdk/client-s3@3.908.0': + '@aws-sdk/client-s3@3.920.0': dependencies: '@aws-crypto/sha1-browser': 5.2.0 '@aws-crypto/sha256-browser': 5.2.0 '@aws-crypto/sha256-js': 5.2.0 - '@aws-sdk/core': 3.908.0 - '@aws-sdk/credential-provider-node': 3.908.0 - '@aws-sdk/middleware-bucket-endpoint': 3.901.0 - '@aws-sdk/middleware-expect-continue': 3.901.0 - '@aws-sdk/middleware-flexible-checksums': 3.908.0 - '@aws-sdk/middleware-host-header': 3.901.0 - '@aws-sdk/middleware-location-constraint': 3.901.0 - '@aws-sdk/middleware-logger': 3.901.0 - '@aws-sdk/middleware-recursion-detection': 3.901.0 - '@aws-sdk/middleware-sdk-s3': 3.908.0 - '@aws-sdk/middleware-ssec': 3.901.0 - '@aws-sdk/middleware-user-agent': 3.908.0 - '@aws-sdk/region-config-resolver': 3.901.0 - '@aws-sdk/signature-v4-multi-region': 3.908.0 - '@aws-sdk/types': 3.901.0 - '@aws-sdk/util-endpoints': 3.901.0 - '@aws-sdk/util-user-agent-browser': 3.907.0 - '@aws-sdk/util-user-agent-node': 3.908.0 - '@aws-sdk/xml-builder': 3.901.0 - '@smithy/config-resolver': 4.3.0 - '@smithy/core': 3.15.0 - '@smithy/eventstream-serde-browser': 4.2.0 - '@smithy/eventstream-serde-config-resolver': 4.3.0 - '@smithy/eventstream-serde-node': 4.2.0 - '@smithy/fetch-http-handler': 5.3.1 - '@smithy/hash-blob-browser': 4.2.1 - '@smithy/hash-node': 4.2.0 - '@smithy/hash-stream-node': 4.2.0 - '@smithy/invalid-dependency': 4.2.0 - '@smithy/md5-js': 4.2.0 - '@smithy/middleware-content-length': 4.2.0 - '@smithy/middleware-endpoint': 4.3.1 - '@smithy/middleware-retry': 4.4.1 - '@smithy/middleware-serde': 4.2.0 - '@smithy/middleware-stack': 4.2.0 - '@smithy/node-config-provider': 4.3.0 - '@smithy/node-http-handler': 4.3.0 - '@smithy/protocol-http': 5.3.0 - '@smithy/smithy-client': 4.7.1 - '@smithy/types': 4.6.0 - '@smithy/url-parser': 4.2.0 + '@aws-sdk/core': 3.920.0 + '@aws-sdk/credential-provider-node': 3.920.0 + '@aws-sdk/middleware-bucket-endpoint': 3.920.0 + '@aws-sdk/middleware-expect-continue': 3.920.0 + '@aws-sdk/middleware-flexible-checksums': 3.920.0 + '@aws-sdk/middleware-host-header': 3.920.0 + '@aws-sdk/middleware-location-constraint': 3.920.0 + '@aws-sdk/middleware-logger': 3.920.0 + '@aws-sdk/middleware-recursion-detection': 3.920.0 + '@aws-sdk/middleware-sdk-s3': 3.920.0 + '@aws-sdk/middleware-ssec': 3.920.0 + '@aws-sdk/middleware-user-agent': 3.920.0 + '@aws-sdk/region-config-resolver': 3.920.0 + '@aws-sdk/signature-v4-multi-region': 3.920.0 + '@aws-sdk/types': 3.920.0 + '@aws-sdk/util-endpoints': 3.920.0 + '@aws-sdk/util-user-agent-browser': 3.920.0 + '@aws-sdk/util-user-agent-node': 3.920.0 + '@aws-sdk/xml-builder': 3.914.0 + '@smithy/config-resolver': 4.4.1 + '@smithy/core': 3.17.2 + '@smithy/eventstream-serde-browser': 4.2.4 + '@smithy/eventstream-serde-config-resolver': 4.3.4 + '@smithy/eventstream-serde-node': 4.2.4 + '@smithy/fetch-http-handler': 5.3.5 + '@smithy/hash-blob-browser': 4.2.5 + '@smithy/hash-node': 4.2.4 + '@smithy/hash-stream-node': 4.2.4 + '@smithy/invalid-dependency': 4.2.4 + '@smithy/md5-js': 4.2.4 + '@smithy/middleware-content-length': 4.2.4 + '@smithy/middleware-endpoint': 4.3.6 + '@smithy/middleware-retry': 4.4.6 + '@smithy/middleware-serde': 4.2.4 + '@smithy/middleware-stack': 4.2.4 + '@smithy/node-config-provider': 4.3.4 + '@smithy/node-http-handler': 4.4.4 + '@smithy/protocol-http': 5.3.4 + '@smithy/smithy-client': 4.9.2 + '@smithy/types': 4.8.1 + '@smithy/url-parser': 4.2.4 '@smithy/util-base64': 4.3.0 '@smithy/util-body-length-browser': 4.2.0 '@smithy/util-body-length-node': 4.2.1 - '@smithy/util-defaults-mode-browser': 4.3.0 - '@smithy/util-defaults-mode-node': 4.2.1 - '@smithy/util-endpoints': 3.2.0 - '@smithy/util-middleware': 4.2.0 - '@smithy/util-retry': 4.2.0 - '@smithy/util-stream': 4.5.0 + '@smithy/util-defaults-mode-browser': 4.3.5 + '@smithy/util-defaults-mode-node': 4.2.7 + '@smithy/util-endpoints': 3.2.4 + '@smithy/util-middleware': 4.2.4 + '@smithy/util-retry': 4.2.4 + '@smithy/util-stream': 4.5.5 '@smithy/util-utf8': 4.2.0 - '@smithy/util-waiter': 4.2.0 + '@smithy/util-waiter': 4.2.4 '@smithy/uuid': 1.1.0 tslib: 2.8.1 transitivePeerDependencies: - aws-crt - '@aws-sdk/client-sso@3.908.0': + '@aws-sdk/client-sso@3.920.0': dependencies: '@aws-crypto/sha256-browser': 5.2.0 '@aws-crypto/sha256-js': 5.2.0 - '@aws-sdk/core': 3.908.0 - '@aws-sdk/middleware-host-header': 3.901.0 - '@aws-sdk/middleware-logger': 3.901.0 - '@aws-sdk/middleware-recursion-detection': 3.901.0 - '@aws-sdk/middleware-user-agent': 3.908.0 - '@aws-sdk/region-config-resolver': 3.901.0 - '@aws-sdk/types': 3.901.0 - '@aws-sdk/util-endpoints': 3.901.0 - '@aws-sdk/util-user-agent-browser': 3.907.0 - '@aws-sdk/util-user-agent-node': 3.908.0 - '@smithy/config-resolver': 4.3.0 - '@smithy/core': 3.15.0 - '@smithy/fetch-http-handler': 5.3.1 - '@smithy/hash-node': 4.2.0 - '@smithy/invalid-dependency': 4.2.0 - '@smithy/middleware-content-length': 4.2.0 - '@smithy/middleware-endpoint': 4.3.1 - '@smithy/middleware-retry': 4.4.1 - '@smithy/middleware-serde': 4.2.0 - '@smithy/middleware-stack': 4.2.0 - '@smithy/node-config-provider': 4.3.0 - '@smithy/node-http-handler': 4.3.0 - '@smithy/protocol-http': 5.3.0 - '@smithy/smithy-client': 4.7.1 - '@smithy/types': 4.6.0 - '@smithy/url-parser': 4.2.0 + '@aws-sdk/core': 3.920.0 + '@aws-sdk/middleware-host-header': 3.920.0 + '@aws-sdk/middleware-logger': 3.920.0 + '@aws-sdk/middleware-recursion-detection': 3.920.0 + '@aws-sdk/middleware-user-agent': 3.920.0 + '@aws-sdk/region-config-resolver': 3.920.0 + '@aws-sdk/types': 3.920.0 + '@aws-sdk/util-endpoints': 3.920.0 + '@aws-sdk/util-user-agent-browser': 3.920.0 + '@aws-sdk/util-user-agent-node': 3.920.0 + '@smithy/config-resolver': 4.4.1 + '@smithy/core': 3.17.2 + '@smithy/fetch-http-handler': 5.3.5 + '@smithy/hash-node': 4.2.4 + '@smithy/invalid-dependency': 4.2.4 + '@smithy/middleware-content-length': 4.2.4 + '@smithy/middleware-endpoint': 4.3.6 + '@smithy/middleware-retry': 4.4.6 + '@smithy/middleware-serde': 4.2.4 + '@smithy/middleware-stack': 4.2.4 + '@smithy/node-config-provider': 4.3.4 + '@smithy/node-http-handler': 4.4.4 + '@smithy/protocol-http': 5.3.4 + '@smithy/smithy-client': 4.9.2 + '@smithy/types': 4.8.1 + '@smithy/url-parser': 4.2.4 '@smithy/util-base64': 4.3.0 '@smithy/util-body-length-browser': 4.2.0 '@smithy/util-body-length-node': 4.2.1 - '@smithy/util-defaults-mode-browser': 4.3.0 - '@smithy/util-defaults-mode-node': 4.2.1 - '@smithy/util-endpoints': 3.2.0 - '@smithy/util-middleware': 4.2.0 - '@smithy/util-retry': 4.2.0 + '@smithy/util-defaults-mode-browser': 4.3.5 + '@smithy/util-defaults-mode-node': 4.2.7 + '@smithy/util-endpoints': 3.2.4 + '@smithy/util-middleware': 4.2.4 + '@smithy/util-retry': 4.2.4 '@smithy/util-utf8': 4.2.0 tslib: 2.8.1 transitivePeerDependencies: - aws-crt - '@aws-sdk/cloudfront-signer@3.901.0': + '@aws-sdk/cloudfront-signer@3.916.0': dependencies: - '@smithy/url-parser': 4.2.0 + '@smithy/core': 3.17.2 + '@smithy/url-parser': 4.2.4 tslib: 2.8.1 - '@aws-sdk/core@3.908.0': - dependencies: - '@aws-sdk/types': 3.901.0 - '@aws-sdk/xml-builder': 3.901.0 - '@smithy/core': 3.15.0 - '@smithy/node-config-provider': 4.3.0 - '@smithy/property-provider': 4.2.0 - '@smithy/protocol-http': 5.3.0 - '@smithy/signature-v4': 5.3.0 - '@smithy/smithy-client': 4.7.1 - '@smithy/types': 4.6.0 + '@aws-sdk/core@3.920.0': + dependencies: + '@aws-sdk/types': 3.920.0 + '@aws-sdk/xml-builder': 3.914.0 + '@smithy/core': 3.17.2 + '@smithy/node-config-provider': 4.3.4 + '@smithy/property-provider': 4.2.4 + '@smithy/protocol-http': 5.3.4 + '@smithy/signature-v4': 5.3.4 + '@smithy/smithy-client': 4.9.2 + '@smithy/types': 4.8.1 '@smithy/util-base64': 4.3.0 - '@smithy/util-middleware': 4.2.0 + '@smithy/util-middleware': 4.2.4 '@smithy/util-utf8': 4.2.0 tslib: 2.8.1 - '@aws-sdk/credential-provider-env@3.908.0': + '@aws-sdk/credential-provider-env@3.920.0': dependencies: - '@aws-sdk/core': 3.908.0 - '@aws-sdk/types': 3.901.0 - '@smithy/property-provider': 4.2.0 - '@smithy/types': 4.6.0 + '@aws-sdk/core': 3.920.0 + '@aws-sdk/types': 3.920.0 + '@smithy/property-provider': 4.2.4 + '@smithy/types': 4.8.1 tslib: 2.8.1 - '@aws-sdk/credential-provider-http@3.908.0': - dependencies: - '@aws-sdk/core': 3.908.0 - '@aws-sdk/types': 3.901.0 - '@smithy/fetch-http-handler': 5.3.1 - '@smithy/node-http-handler': 4.3.0 - '@smithy/property-provider': 4.2.0 - '@smithy/protocol-http': 5.3.0 - '@smithy/smithy-client': 4.7.1 - '@smithy/types': 4.6.0 - '@smithy/util-stream': 4.5.0 + '@aws-sdk/credential-provider-http@3.920.0': + dependencies: + '@aws-sdk/core': 3.920.0 + '@aws-sdk/types': 3.920.0 + '@smithy/fetch-http-handler': 5.3.5 + '@smithy/node-http-handler': 4.4.4 + '@smithy/property-provider': 4.2.4 + '@smithy/protocol-http': 5.3.4 + '@smithy/smithy-client': 4.9.2 + '@smithy/types': 4.8.1 + '@smithy/util-stream': 4.5.5 tslib: 2.8.1 - '@aws-sdk/credential-provider-ini@3.908.0': - dependencies: - '@aws-sdk/core': 3.908.0 - '@aws-sdk/credential-provider-env': 3.908.0 - '@aws-sdk/credential-provider-http': 3.908.0 - '@aws-sdk/credential-provider-process': 3.908.0 - '@aws-sdk/credential-provider-sso': 3.908.0 - '@aws-sdk/credential-provider-web-identity': 3.908.0 - '@aws-sdk/nested-clients': 3.908.0 - '@aws-sdk/types': 3.901.0 - '@smithy/credential-provider-imds': 4.2.0 - '@smithy/property-provider': 4.2.0 - '@smithy/shared-ini-file-loader': 4.3.0 - '@smithy/types': 4.6.0 + '@aws-sdk/credential-provider-ini@3.920.0': + dependencies: + '@aws-sdk/core': 3.920.0 + '@aws-sdk/credential-provider-env': 3.920.0 + '@aws-sdk/credential-provider-http': 3.920.0 + '@aws-sdk/credential-provider-process': 3.920.0 + '@aws-sdk/credential-provider-sso': 3.920.0 + '@aws-sdk/credential-provider-web-identity': 3.920.0 + '@aws-sdk/nested-clients': 3.920.0 + '@aws-sdk/types': 3.920.0 + '@smithy/credential-provider-imds': 4.2.4 + '@smithy/property-provider': 4.2.4 + '@smithy/shared-ini-file-loader': 4.3.4 + '@smithy/types': 4.8.1 tslib: 2.8.1 transitivePeerDependencies: - aws-crt - '@aws-sdk/credential-provider-node@3.908.0': - dependencies: - '@aws-sdk/credential-provider-env': 3.908.0 - '@aws-sdk/credential-provider-http': 3.908.0 - '@aws-sdk/credential-provider-ini': 3.908.0 - '@aws-sdk/credential-provider-process': 3.908.0 - '@aws-sdk/credential-provider-sso': 3.908.0 - '@aws-sdk/credential-provider-web-identity': 3.908.0 - '@aws-sdk/types': 3.901.0 - '@smithy/credential-provider-imds': 4.2.0 - '@smithy/property-provider': 4.2.0 - '@smithy/shared-ini-file-loader': 4.3.0 - '@smithy/types': 4.6.0 + '@aws-sdk/credential-provider-node@3.920.0': + dependencies: + '@aws-sdk/credential-provider-env': 3.920.0 + '@aws-sdk/credential-provider-http': 3.920.0 + '@aws-sdk/credential-provider-ini': 3.920.0 + '@aws-sdk/credential-provider-process': 3.920.0 + '@aws-sdk/credential-provider-sso': 3.920.0 + '@aws-sdk/credential-provider-web-identity': 3.920.0 + '@aws-sdk/types': 3.920.0 + '@smithy/credential-provider-imds': 4.2.4 + '@smithy/property-provider': 4.2.4 + '@smithy/shared-ini-file-loader': 4.3.4 + '@smithy/types': 4.8.1 tslib: 2.8.1 transitivePeerDependencies: - aws-crt - '@aws-sdk/credential-provider-process@3.908.0': + '@aws-sdk/credential-provider-process@3.920.0': dependencies: - '@aws-sdk/core': 3.908.0 - '@aws-sdk/types': 3.901.0 - '@smithy/property-provider': 4.2.0 - '@smithy/shared-ini-file-loader': 4.3.0 - '@smithy/types': 4.6.0 + '@aws-sdk/core': 3.920.0 + '@aws-sdk/types': 3.920.0 + '@smithy/property-provider': 4.2.4 + '@smithy/shared-ini-file-loader': 4.3.4 + '@smithy/types': 4.8.1 tslib: 2.8.1 - '@aws-sdk/credential-provider-sso@3.908.0': + '@aws-sdk/credential-provider-sso@3.920.0': dependencies: - '@aws-sdk/client-sso': 3.908.0 - '@aws-sdk/core': 3.908.0 - '@aws-sdk/token-providers': 3.908.0 - '@aws-sdk/types': 3.901.0 - '@smithy/property-provider': 4.2.0 - '@smithy/shared-ini-file-loader': 4.3.0 - '@smithy/types': 4.6.0 + '@aws-sdk/client-sso': 3.920.0 + '@aws-sdk/core': 3.920.0 + '@aws-sdk/token-providers': 3.920.0 + '@aws-sdk/types': 3.920.0 + '@smithy/property-provider': 4.2.4 + '@smithy/shared-ini-file-loader': 4.3.4 + '@smithy/types': 4.8.1 tslib: 2.8.1 transitivePeerDependencies: - aws-crt - '@aws-sdk/credential-provider-web-identity@3.908.0': + '@aws-sdk/credential-provider-web-identity@3.920.0': dependencies: - '@aws-sdk/core': 3.908.0 - '@aws-sdk/nested-clients': 3.908.0 - '@aws-sdk/types': 3.901.0 - '@smithy/property-provider': 4.2.0 - '@smithy/shared-ini-file-loader': 4.3.0 - '@smithy/types': 4.6.0 + '@aws-sdk/core': 3.920.0 + '@aws-sdk/nested-clients': 3.920.0 + '@aws-sdk/types': 3.920.0 + '@smithy/property-provider': 4.2.4 + '@smithy/shared-ini-file-loader': 4.3.4 + '@smithy/types': 4.8.1 tslib: 2.8.1 transitivePeerDependencies: - aws-crt - '@aws-sdk/lib-storage@3.908.0(@aws-sdk/client-s3@3.908.0)': + '@aws-sdk/lib-storage@3.920.0(@aws-sdk/client-s3@3.920.0)': dependencies: - '@aws-sdk/client-s3': 3.908.0 - '@smithy/abort-controller': 4.2.0 - '@smithy/middleware-endpoint': 4.3.1 - '@smithy/smithy-client': 4.7.1 + '@aws-sdk/client-s3': 3.920.0 + '@smithy/abort-controller': 4.2.4 + '@smithy/middleware-endpoint': 4.3.6 + '@smithy/smithy-client': 4.9.2 buffer: 5.6.0 events: 3.3.0 stream-browserify: 3.0.0 tslib: 2.8.1 - '@aws-sdk/middleware-bucket-endpoint@3.901.0': + '@aws-sdk/middleware-bucket-endpoint@3.920.0': dependencies: - '@aws-sdk/types': 3.901.0 + '@aws-sdk/types': 3.920.0 '@aws-sdk/util-arn-parser': 3.893.0 - '@smithy/node-config-provider': 4.3.0 - '@smithy/protocol-http': 5.3.0 - '@smithy/types': 4.6.0 + '@smithy/node-config-provider': 4.3.4 + '@smithy/protocol-http': 5.3.4 + '@smithy/types': 4.8.1 '@smithy/util-config-provider': 4.2.0 tslib: 2.8.1 - '@aws-sdk/middleware-expect-continue@3.901.0': + '@aws-sdk/middleware-expect-continue@3.920.0': dependencies: - '@aws-sdk/types': 3.901.0 - '@smithy/protocol-http': 5.3.0 - '@smithy/types': 4.6.0 + '@aws-sdk/types': 3.920.0 + '@smithy/protocol-http': 5.3.4 + '@smithy/types': 4.8.1 tslib: 2.8.1 - '@aws-sdk/middleware-flexible-checksums@3.908.0': + '@aws-sdk/middleware-flexible-checksums@3.920.0': dependencies: '@aws-crypto/crc32': 5.2.0 '@aws-crypto/crc32c': 5.2.0 '@aws-crypto/util': 5.2.0 - '@aws-sdk/core': 3.908.0 - '@aws-sdk/types': 3.901.0 + '@aws-sdk/core': 3.920.0 + '@aws-sdk/types': 3.920.0 '@smithy/is-array-buffer': 4.2.0 - '@smithy/node-config-provider': 4.3.0 - '@smithy/protocol-http': 5.3.0 - '@smithy/types': 4.6.0 - '@smithy/util-middleware': 4.2.0 - '@smithy/util-stream': 4.5.0 + '@smithy/node-config-provider': 4.3.4 + '@smithy/protocol-http': 5.3.4 + '@smithy/types': 4.8.1 + '@smithy/util-middleware': 4.2.4 + '@smithy/util-stream': 4.5.5 '@smithy/util-utf8': 4.2.0 tslib: 2.8.1 - '@aws-sdk/middleware-host-header@3.901.0': + '@aws-sdk/middleware-host-header@3.920.0': dependencies: - '@aws-sdk/types': 3.901.0 - '@smithy/protocol-http': 5.3.0 - '@smithy/types': 4.6.0 + '@aws-sdk/types': 3.920.0 + '@smithy/protocol-http': 5.3.4 + '@smithy/types': 4.8.1 tslib: 2.8.1 - '@aws-sdk/middleware-location-constraint@3.901.0': + '@aws-sdk/middleware-location-constraint@3.920.0': dependencies: - '@aws-sdk/types': 3.901.0 - '@smithy/types': 4.6.0 + '@aws-sdk/types': 3.920.0 + '@smithy/types': 4.8.1 tslib: 2.8.1 - '@aws-sdk/middleware-logger@3.901.0': + '@aws-sdk/middleware-logger@3.920.0': dependencies: - '@aws-sdk/types': 3.901.0 - '@smithy/types': 4.6.0 + '@aws-sdk/types': 3.920.0 + '@smithy/types': 4.8.1 tslib: 2.8.1 - '@aws-sdk/middleware-recursion-detection@3.901.0': + '@aws-sdk/middleware-recursion-detection@3.920.0': dependencies: - '@aws-sdk/types': 3.901.0 - '@aws/lambda-invoke-store': 0.0.1 - '@smithy/protocol-http': 5.3.0 - '@smithy/types': 4.6.0 + '@aws-sdk/types': 3.920.0 + '@aws/lambda-invoke-store': 0.1.1 + '@smithy/protocol-http': 5.3.4 + '@smithy/types': 4.8.1 tslib: 2.8.1 - '@aws-sdk/middleware-sdk-s3@3.908.0': + '@aws-sdk/middleware-sdk-s3@3.920.0': dependencies: - '@aws-sdk/core': 3.908.0 - '@aws-sdk/types': 3.901.0 + '@aws-sdk/core': 3.920.0 + '@aws-sdk/types': 3.920.0 '@aws-sdk/util-arn-parser': 3.893.0 - '@smithy/core': 3.15.0 - '@smithy/node-config-provider': 4.3.0 - '@smithy/protocol-http': 5.3.0 - '@smithy/signature-v4': 5.3.0 - '@smithy/smithy-client': 4.7.1 - '@smithy/types': 4.6.0 + '@smithy/core': 3.17.2 + '@smithy/node-config-provider': 4.3.4 + '@smithy/protocol-http': 5.3.4 + '@smithy/signature-v4': 5.3.4 + '@smithy/smithy-client': 4.9.2 + '@smithy/types': 4.8.1 '@smithy/util-config-provider': 4.2.0 - '@smithy/util-middleware': 4.2.0 - '@smithy/util-stream': 4.5.0 + '@smithy/util-middleware': 4.2.4 + '@smithy/util-stream': 4.5.5 '@smithy/util-utf8': 4.2.0 tslib: 2.8.1 - '@aws-sdk/middleware-ssec@3.901.0': + '@aws-sdk/middleware-ssec@3.920.0': dependencies: - '@aws-sdk/types': 3.901.0 - '@smithy/types': 4.6.0 + '@aws-sdk/types': 3.920.0 + '@smithy/types': 4.8.1 tslib: 2.8.1 - '@aws-sdk/middleware-user-agent@3.908.0': + '@aws-sdk/middleware-user-agent@3.920.0': dependencies: - '@aws-sdk/core': 3.908.0 - '@aws-sdk/types': 3.901.0 - '@aws-sdk/util-endpoints': 3.901.0 - '@smithy/core': 3.15.0 - '@smithy/protocol-http': 5.3.0 - '@smithy/types': 4.6.0 + '@aws-sdk/core': 3.920.0 + '@aws-sdk/types': 3.920.0 + '@aws-sdk/util-endpoints': 3.920.0 + '@smithy/core': 3.17.2 + '@smithy/protocol-http': 5.3.4 + '@smithy/types': 4.8.1 tslib: 2.8.1 - '@aws-sdk/nested-clients@3.908.0': + '@aws-sdk/nested-clients@3.920.0': dependencies: '@aws-crypto/sha256-browser': 5.2.0 '@aws-crypto/sha256-js': 5.2.0 - '@aws-sdk/core': 3.908.0 - '@aws-sdk/middleware-host-header': 3.901.0 - '@aws-sdk/middleware-logger': 3.901.0 - '@aws-sdk/middleware-recursion-detection': 3.901.0 - '@aws-sdk/middleware-user-agent': 3.908.0 - '@aws-sdk/region-config-resolver': 3.901.0 - '@aws-sdk/types': 3.901.0 - '@aws-sdk/util-endpoints': 3.901.0 - '@aws-sdk/util-user-agent-browser': 3.907.0 - '@aws-sdk/util-user-agent-node': 3.908.0 - '@smithy/config-resolver': 4.3.0 - '@smithy/core': 3.15.0 - '@smithy/fetch-http-handler': 5.3.1 - '@smithy/hash-node': 4.2.0 - '@smithy/invalid-dependency': 4.2.0 - '@smithy/middleware-content-length': 4.2.0 - '@smithy/middleware-endpoint': 4.3.1 - '@smithy/middleware-retry': 4.4.1 - '@smithy/middleware-serde': 4.2.0 - '@smithy/middleware-stack': 4.2.0 - '@smithy/node-config-provider': 4.3.0 - '@smithy/node-http-handler': 4.3.0 - '@smithy/protocol-http': 5.3.0 - '@smithy/smithy-client': 4.7.1 - '@smithy/types': 4.6.0 - '@smithy/url-parser': 4.2.0 + '@aws-sdk/core': 3.920.0 + '@aws-sdk/middleware-host-header': 3.920.0 + '@aws-sdk/middleware-logger': 3.920.0 + '@aws-sdk/middleware-recursion-detection': 3.920.0 + '@aws-sdk/middleware-user-agent': 3.920.0 + '@aws-sdk/region-config-resolver': 3.920.0 + '@aws-sdk/types': 3.920.0 + '@aws-sdk/util-endpoints': 3.920.0 + '@aws-sdk/util-user-agent-browser': 3.920.0 + '@aws-sdk/util-user-agent-node': 3.920.0 + '@smithy/config-resolver': 4.4.1 + '@smithy/core': 3.17.2 + '@smithy/fetch-http-handler': 5.3.5 + '@smithy/hash-node': 4.2.4 + '@smithy/invalid-dependency': 4.2.4 + '@smithy/middleware-content-length': 4.2.4 + '@smithy/middleware-endpoint': 4.3.6 + '@smithy/middleware-retry': 4.4.6 + '@smithy/middleware-serde': 4.2.4 + '@smithy/middleware-stack': 4.2.4 + '@smithy/node-config-provider': 4.3.4 + '@smithy/node-http-handler': 4.4.4 + '@smithy/protocol-http': 5.3.4 + '@smithy/smithy-client': 4.9.2 + '@smithy/types': 4.8.1 + '@smithy/url-parser': 4.2.4 '@smithy/util-base64': 4.3.0 '@smithy/util-body-length-browser': 4.2.0 '@smithy/util-body-length-node': 4.2.1 - '@smithy/util-defaults-mode-browser': 4.3.0 - '@smithy/util-defaults-mode-node': 4.2.1 - '@smithy/util-endpoints': 3.2.0 - '@smithy/util-middleware': 4.2.0 - '@smithy/util-retry': 4.2.0 + '@smithy/util-defaults-mode-browser': 4.3.5 + '@smithy/util-defaults-mode-node': 4.2.7 + '@smithy/util-endpoints': 3.2.4 + '@smithy/util-middleware': 4.2.4 + '@smithy/util-retry': 4.2.4 '@smithy/util-utf8': 4.2.0 tslib: 2.8.1 transitivePeerDependencies: - aws-crt - '@aws-sdk/region-config-resolver@3.901.0': + '@aws-sdk/region-config-resolver@3.920.0': dependencies: - '@aws-sdk/types': 3.901.0 - '@smithy/node-config-provider': 4.3.0 - '@smithy/types': 4.6.0 - '@smithy/util-config-provider': 4.2.0 - '@smithy/util-middleware': 4.2.0 + '@aws-sdk/types': 3.920.0 + '@smithy/config-resolver': 4.4.1 + '@smithy/node-config-provider': 4.3.4 + '@smithy/types': 4.8.1 tslib: 2.8.1 - '@aws-sdk/s3-request-presigner@3.908.0': + '@aws-sdk/s3-request-presigner@3.920.0': dependencies: - '@aws-sdk/signature-v4-multi-region': 3.908.0 - '@aws-sdk/types': 3.901.0 - '@aws-sdk/util-format-url': 3.901.0 - '@smithy/middleware-endpoint': 4.3.1 - '@smithy/protocol-http': 5.3.0 - '@smithy/smithy-client': 4.7.1 - '@smithy/types': 4.6.0 + '@aws-sdk/signature-v4-multi-region': 3.920.0 + '@aws-sdk/types': 3.920.0 + '@aws-sdk/util-format-url': 3.920.0 + '@smithy/middleware-endpoint': 4.3.6 + '@smithy/protocol-http': 5.3.4 + '@smithy/smithy-client': 4.9.2 + '@smithy/types': 4.8.1 tslib: 2.8.1 - '@aws-sdk/signature-v4-multi-region@3.908.0': + '@aws-sdk/signature-v4-multi-region@3.920.0': dependencies: - '@aws-sdk/middleware-sdk-s3': 3.908.0 - '@aws-sdk/types': 3.901.0 - '@smithy/protocol-http': 5.3.0 - '@smithy/signature-v4': 5.3.0 - '@smithy/types': 4.6.0 + '@aws-sdk/middleware-sdk-s3': 3.920.0 + '@aws-sdk/types': 3.920.0 + '@smithy/protocol-http': 5.3.4 + '@smithy/signature-v4': 5.3.4 + '@smithy/types': 4.8.1 tslib: 2.8.1 - '@aws-sdk/token-providers@3.908.0': + '@aws-sdk/token-providers@3.920.0': dependencies: - '@aws-sdk/core': 3.908.0 - '@aws-sdk/nested-clients': 3.908.0 - '@aws-sdk/types': 3.901.0 - '@smithy/property-provider': 4.2.0 - '@smithy/shared-ini-file-loader': 4.3.0 - '@smithy/types': 4.6.0 + '@aws-sdk/core': 3.920.0 + '@aws-sdk/nested-clients': 3.920.0 + '@aws-sdk/types': 3.920.0 + '@smithy/property-provider': 4.2.4 + '@smithy/shared-ini-file-loader': 4.3.4 + '@smithy/types': 4.8.1 tslib: 2.8.1 transitivePeerDependencies: - aws-crt - '@aws-sdk/types@3.901.0': + '@aws-sdk/types@3.920.0': dependencies: - '@smithy/types': 4.6.0 + '@smithy/types': 4.8.1 tslib: 2.8.1 '@aws-sdk/util-arn-parser@3.893.0': dependencies: tslib: 2.8.1 - '@aws-sdk/util-endpoints@3.901.0': + '@aws-sdk/util-endpoints@3.920.0': dependencies: - '@aws-sdk/types': 3.901.0 - '@smithy/types': 4.6.0 - '@smithy/url-parser': 4.2.0 - '@smithy/util-endpoints': 3.2.0 + '@aws-sdk/types': 3.920.0 + '@smithy/types': 4.8.1 + '@smithy/url-parser': 4.2.4 + '@smithy/util-endpoints': 3.2.4 tslib: 2.8.1 - '@aws-sdk/util-format-url@3.901.0': + '@aws-sdk/util-format-url@3.920.0': dependencies: - '@aws-sdk/types': 3.901.0 - '@smithy/querystring-builder': 4.2.0 - '@smithy/types': 4.6.0 + '@aws-sdk/types': 3.920.0 + '@smithy/querystring-builder': 4.2.4 + '@smithy/types': 4.8.1 tslib: 2.8.1 '@aws-sdk/util-locate-window@3.893.0': dependencies: tslib: 2.8.1 - '@aws-sdk/util-user-agent-browser@3.907.0': + '@aws-sdk/util-user-agent-browser@3.920.0': dependencies: - '@aws-sdk/types': 3.901.0 - '@smithy/types': 4.6.0 + '@aws-sdk/types': 3.920.0 + '@smithy/types': 4.8.1 bowser: 2.12.1 tslib: 2.8.1 - '@aws-sdk/util-user-agent-node@3.908.0': + '@aws-sdk/util-user-agent-node@3.920.0': dependencies: - '@aws-sdk/middleware-user-agent': 3.908.0 - '@aws-sdk/types': 3.901.0 - '@smithy/node-config-provider': 4.3.0 - '@smithy/types': 4.6.0 + '@aws-sdk/middleware-user-agent': 3.920.0 + '@aws-sdk/types': 3.920.0 + '@smithy/node-config-provider': 4.3.4 + '@smithy/types': 4.8.1 tslib: 2.8.1 - '@aws-sdk/xml-builder@3.901.0': + '@aws-sdk/xml-builder@3.914.0': dependencies: - '@smithy/types': 4.6.0 + '@smithy/types': 4.8.1 fast-xml-parser: 5.2.5 tslib: 2.8.1 - '@aws/lambda-invoke-store@0.0.1': {} + '@aws/lambda-invoke-store@0.1.1': {} '@babel/code-frame@7.27.1': dependencies: - '@babel/helper-validator-identifier': 7.27.1 + '@babel/helper-validator-identifier': 7.28.5 js-tokens: 4.0.0 picocolors: 1.1.1 - '@babel/compat-data@7.28.4': {} + '@babel/compat-data@7.28.5': {} - '@babel/core@7.28.4': + '@babel/core@7.28.5': dependencies: '@babel/code-frame': 7.27.1 - '@babel/generator': 7.28.3 + '@babel/generator': 7.28.5 '@babel/helper-compilation-targets': 7.27.2 - '@babel/helper-module-transforms': 7.28.3(@babel/core@7.28.4) + '@babel/helper-module-transforms': 7.28.3(@babel/core@7.28.5) '@babel/helpers': 7.28.4 - '@babel/parser': 7.28.4 + '@babel/parser': 7.28.5 '@babel/template': 7.27.2 - '@babel/traverse': 7.28.4 - '@babel/types': 7.28.4 + '@babel/traverse': 7.28.5 + '@babel/types': 7.28.5 '@jridgewell/remapping': 2.3.5 convert-source-map: 2.0.0 debug: 4.4.3 @@ -11964,657 +11918,657 @@ snapshots: transitivePeerDependencies: - supports-color - '@babel/generator@7.28.3': + '@babel/generator@7.28.5': dependencies: - '@babel/parser': 7.28.4 - '@babel/types': 7.28.4 + '@babel/parser': 7.28.5 + '@babel/types': 7.28.5 '@jridgewell/gen-mapping': 0.3.13 '@jridgewell/trace-mapping': 0.3.31 jsesc: 3.1.0 '@babel/helper-annotate-as-pure@7.27.3': dependencies: - '@babel/types': 7.28.4 + '@babel/types': 7.28.5 '@babel/helper-compilation-targets@7.27.2': dependencies: - '@babel/compat-data': 7.28.4 + '@babel/compat-data': 7.28.5 '@babel/helper-validator-option': 7.27.1 - browserslist: 4.26.3 + browserslist: 4.27.0 lru-cache: 5.1.1 semver: 6.3.1 - '@babel/helper-create-class-features-plugin@7.28.3(@babel/core@7.28.4)': + '@babel/helper-create-class-features-plugin@7.28.5(@babel/core@7.28.5)': dependencies: - '@babel/core': 7.28.4 + '@babel/core': 7.28.5 '@babel/helper-annotate-as-pure': 7.27.3 - '@babel/helper-member-expression-to-functions': 7.27.1 + '@babel/helper-member-expression-to-functions': 7.28.5 '@babel/helper-optimise-call-expression': 7.27.1 - '@babel/helper-replace-supers': 7.27.1(@babel/core@7.28.4) + '@babel/helper-replace-supers': 7.27.1(@babel/core@7.28.5) '@babel/helper-skip-transparent-expression-wrappers': 7.27.1 - '@babel/traverse': 7.28.4 + '@babel/traverse': 7.28.5 semver: 6.3.1 transitivePeerDependencies: - supports-color - '@babel/helper-create-regexp-features-plugin@7.27.1(@babel/core@7.28.4)': + '@babel/helper-create-regexp-features-plugin@7.28.5(@babel/core@7.28.5)': dependencies: - '@babel/core': 7.28.4 + '@babel/core': 7.28.5 '@babel/helper-annotate-as-pure': 7.27.3 regexpu-core: 6.4.0 semver: 6.3.1 - '@babel/helper-define-polyfill-provider@0.6.5(@babel/core@7.28.4)': + '@babel/helper-define-polyfill-provider@0.6.5(@babel/core@7.28.5)': dependencies: - '@babel/core': 7.28.4 + '@babel/core': 7.28.5 '@babel/helper-compilation-targets': 7.27.2 '@babel/helper-plugin-utils': 7.27.1 debug: 4.4.3 lodash.debounce: 4.0.8 - resolve: 1.22.10 + resolve: 1.22.11 transitivePeerDependencies: - supports-color '@babel/helper-globals@7.28.0': {} - '@babel/helper-member-expression-to-functions@7.27.1': + '@babel/helper-member-expression-to-functions@7.28.5': dependencies: - '@babel/traverse': 7.28.4 - '@babel/types': 7.28.4 + '@babel/traverse': 7.28.5 + '@babel/types': 7.28.5 transitivePeerDependencies: - supports-color '@babel/helper-module-imports@7.27.1': dependencies: - '@babel/traverse': 7.28.4 - '@babel/types': 7.28.4 + '@babel/traverse': 7.28.5 + '@babel/types': 7.28.5 transitivePeerDependencies: - supports-color - '@babel/helper-module-transforms@7.28.3(@babel/core@7.28.4)': + '@babel/helper-module-transforms@7.28.3(@babel/core@7.28.5)': dependencies: - '@babel/core': 7.28.4 + '@babel/core': 7.28.5 '@babel/helper-module-imports': 7.27.1 - '@babel/helper-validator-identifier': 7.27.1 - '@babel/traverse': 7.28.4 + '@babel/helper-validator-identifier': 7.28.5 + '@babel/traverse': 7.28.5 transitivePeerDependencies: - supports-color '@babel/helper-optimise-call-expression@7.27.1': dependencies: - '@babel/types': 7.28.4 + '@babel/types': 7.28.5 '@babel/helper-plugin-utils@7.27.1': {} - '@babel/helper-remap-async-to-generator@7.27.1(@babel/core@7.28.4)': + '@babel/helper-remap-async-to-generator@7.27.1(@babel/core@7.28.5)': dependencies: - '@babel/core': 7.28.4 + '@babel/core': 7.28.5 '@babel/helper-annotate-as-pure': 7.27.3 '@babel/helper-wrap-function': 7.28.3 - '@babel/traverse': 7.28.4 + '@babel/traverse': 7.28.5 transitivePeerDependencies: - supports-color - '@babel/helper-replace-supers@7.27.1(@babel/core@7.28.4)': + '@babel/helper-replace-supers@7.27.1(@babel/core@7.28.5)': dependencies: - '@babel/core': 7.28.4 - '@babel/helper-member-expression-to-functions': 7.27.1 + '@babel/core': 7.28.5 + '@babel/helper-member-expression-to-functions': 7.28.5 '@babel/helper-optimise-call-expression': 7.27.1 - '@babel/traverse': 7.28.4 + '@babel/traverse': 7.28.5 transitivePeerDependencies: - supports-color '@babel/helper-skip-transparent-expression-wrappers@7.27.1': dependencies: - '@babel/traverse': 7.28.4 - '@babel/types': 7.28.4 + '@babel/traverse': 7.28.5 + '@babel/types': 7.28.5 transitivePeerDependencies: - supports-color '@babel/helper-string-parser@7.27.1': {} - '@babel/helper-validator-identifier@7.27.1': {} + '@babel/helper-validator-identifier@7.28.5': {} '@babel/helper-validator-option@7.27.1': {} '@babel/helper-wrap-function@7.28.3': dependencies: '@babel/template': 7.27.2 - '@babel/traverse': 7.28.4 - '@babel/types': 7.28.4 + '@babel/traverse': 7.28.5 + '@babel/types': 7.28.5 transitivePeerDependencies: - supports-color '@babel/helpers@7.28.4': dependencies: '@babel/template': 7.27.2 - '@babel/types': 7.28.4 + '@babel/types': 7.28.5 - '@babel/parser@7.28.4': + '@babel/parser@7.28.5': dependencies: - '@babel/types': 7.28.4 + '@babel/types': 7.28.5 - '@babel/plugin-bugfix-firefox-class-in-computed-class-key@7.27.1(@babel/core@7.28.4)': + '@babel/plugin-bugfix-firefox-class-in-computed-class-key@7.28.5(@babel/core@7.28.5)': dependencies: - '@babel/core': 7.28.4 + '@babel/core': 7.28.5 '@babel/helper-plugin-utils': 7.27.1 - '@babel/traverse': 7.28.4 + '@babel/traverse': 7.28.5 transitivePeerDependencies: - supports-color - '@babel/plugin-bugfix-safari-class-field-initializer-scope@7.27.1(@babel/core@7.28.4)': + '@babel/plugin-bugfix-safari-class-field-initializer-scope@7.27.1(@babel/core@7.28.5)': dependencies: - '@babel/core': 7.28.4 + '@babel/core': 7.28.5 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@7.27.1(@babel/core@7.28.4)': + '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@7.27.1(@babel/core@7.28.5)': dependencies: - '@babel/core': 7.28.4 + '@babel/core': 7.28.5 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@7.27.1(@babel/core@7.28.4)': + '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@7.27.1(@babel/core@7.28.5)': dependencies: - '@babel/core': 7.28.4 + '@babel/core': 7.28.5 '@babel/helper-plugin-utils': 7.27.1 '@babel/helper-skip-transparent-expression-wrappers': 7.27.1 - '@babel/plugin-transform-optional-chaining': 7.27.1(@babel/core@7.28.4) + '@babel/plugin-transform-optional-chaining': 7.28.5(@babel/core@7.28.5) transitivePeerDependencies: - supports-color - '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@7.28.3(@babel/core@7.28.4)': + '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@7.28.3(@babel/core@7.28.5)': dependencies: - '@babel/core': 7.28.4 + '@babel/core': 7.28.5 '@babel/helper-plugin-utils': 7.27.1 - '@babel/traverse': 7.28.4 + '@babel/traverse': 7.28.5 transitivePeerDependencies: - supports-color - '@babel/plugin-proposal-private-property-in-object@7.21.0-placeholder-for-preset-env.2(@babel/core@7.28.4)': + '@babel/plugin-proposal-private-property-in-object@7.21.0-placeholder-for-preset-env.2(@babel/core@7.28.5)': dependencies: - '@babel/core': 7.28.4 + '@babel/core': 7.28.5 - '@babel/plugin-syntax-import-assertions@7.27.1(@babel/core@7.28.4)': + '@babel/plugin-syntax-import-assertions@7.27.1(@babel/core@7.28.5)': dependencies: - '@babel/core': 7.28.4 + '@babel/core': 7.28.5 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-syntax-import-attributes@7.27.1(@babel/core@7.28.4)': + '@babel/plugin-syntax-import-attributes@7.27.1(@babel/core@7.28.5)': dependencies: - '@babel/core': 7.28.4 + '@babel/core': 7.28.5 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-syntax-jsx@7.27.1(@babel/core@7.28.4)': + '@babel/plugin-syntax-jsx@7.27.1(@babel/core@7.28.5)': dependencies: - '@babel/core': 7.28.4 + '@babel/core': 7.28.5 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-syntax-typescript@7.27.1(@babel/core@7.28.4)': + '@babel/plugin-syntax-typescript@7.27.1(@babel/core@7.28.5)': dependencies: - '@babel/core': 7.28.4 + '@babel/core': 7.28.5 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-syntax-unicode-sets-regex@7.18.6(@babel/core@7.28.4)': + '@babel/plugin-syntax-unicode-sets-regex@7.18.6(@babel/core@7.28.5)': dependencies: - '@babel/core': 7.28.4 - '@babel/helper-create-regexp-features-plugin': 7.27.1(@babel/core@7.28.4) + '@babel/core': 7.28.5 + '@babel/helper-create-regexp-features-plugin': 7.28.5(@babel/core@7.28.5) '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-transform-arrow-functions@7.27.1(@babel/core@7.28.4)': + '@babel/plugin-transform-arrow-functions@7.27.1(@babel/core@7.28.5)': dependencies: - '@babel/core': 7.28.4 + '@babel/core': 7.28.5 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-transform-async-generator-functions@7.28.0(@babel/core@7.28.4)': + '@babel/plugin-transform-async-generator-functions@7.28.0(@babel/core@7.28.5)': dependencies: - '@babel/core': 7.28.4 + '@babel/core': 7.28.5 '@babel/helper-plugin-utils': 7.27.1 - '@babel/helper-remap-async-to-generator': 7.27.1(@babel/core@7.28.4) - '@babel/traverse': 7.28.4 + '@babel/helper-remap-async-to-generator': 7.27.1(@babel/core@7.28.5) + '@babel/traverse': 7.28.5 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-async-to-generator@7.27.1(@babel/core@7.28.4)': + '@babel/plugin-transform-async-to-generator@7.27.1(@babel/core@7.28.5)': dependencies: - '@babel/core': 7.28.4 + '@babel/core': 7.28.5 '@babel/helper-module-imports': 7.27.1 '@babel/helper-plugin-utils': 7.27.1 - '@babel/helper-remap-async-to-generator': 7.27.1(@babel/core@7.28.4) + '@babel/helper-remap-async-to-generator': 7.27.1(@babel/core@7.28.5) transitivePeerDependencies: - supports-color - '@babel/plugin-transform-block-scoped-functions@7.27.1(@babel/core@7.28.4)': + '@babel/plugin-transform-block-scoped-functions@7.27.1(@babel/core@7.28.5)': dependencies: - '@babel/core': 7.28.4 + '@babel/core': 7.28.5 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-transform-block-scoping@7.28.4(@babel/core@7.28.4)': + '@babel/plugin-transform-block-scoping@7.28.5(@babel/core@7.28.5)': dependencies: - '@babel/core': 7.28.4 + '@babel/core': 7.28.5 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-transform-class-properties@7.27.1(@babel/core@7.28.4)': + '@babel/plugin-transform-class-properties@7.27.1(@babel/core@7.28.5)': dependencies: - '@babel/core': 7.28.4 - '@babel/helper-create-class-features-plugin': 7.28.3(@babel/core@7.28.4) + '@babel/core': 7.28.5 + '@babel/helper-create-class-features-plugin': 7.28.5(@babel/core@7.28.5) '@babel/helper-plugin-utils': 7.27.1 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-class-static-block@7.28.3(@babel/core@7.28.4)': + '@babel/plugin-transform-class-static-block@7.28.3(@babel/core@7.28.5)': dependencies: - '@babel/core': 7.28.4 - '@babel/helper-create-class-features-plugin': 7.28.3(@babel/core@7.28.4) + '@babel/core': 7.28.5 + '@babel/helper-create-class-features-plugin': 7.28.5(@babel/core@7.28.5) '@babel/helper-plugin-utils': 7.27.1 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-classes@7.28.4(@babel/core@7.28.4)': + '@babel/plugin-transform-classes@7.28.4(@babel/core@7.28.5)': dependencies: - '@babel/core': 7.28.4 + '@babel/core': 7.28.5 '@babel/helper-annotate-as-pure': 7.27.3 '@babel/helper-compilation-targets': 7.27.2 '@babel/helper-globals': 7.28.0 '@babel/helper-plugin-utils': 7.27.1 - '@babel/helper-replace-supers': 7.27.1(@babel/core@7.28.4) - '@babel/traverse': 7.28.4 + '@babel/helper-replace-supers': 7.27.1(@babel/core@7.28.5) + '@babel/traverse': 7.28.5 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-computed-properties@7.27.1(@babel/core@7.28.4)': + '@babel/plugin-transform-computed-properties@7.27.1(@babel/core@7.28.5)': dependencies: - '@babel/core': 7.28.4 + '@babel/core': 7.28.5 '@babel/helper-plugin-utils': 7.27.1 '@babel/template': 7.27.2 - '@babel/plugin-transform-destructuring@7.28.0(@babel/core@7.28.4)': + '@babel/plugin-transform-destructuring@7.28.5(@babel/core@7.28.5)': dependencies: - '@babel/core': 7.28.4 + '@babel/core': 7.28.5 '@babel/helper-plugin-utils': 7.27.1 - '@babel/traverse': 7.28.4 + '@babel/traverse': 7.28.5 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-dotall-regex@7.27.1(@babel/core@7.28.4)': + '@babel/plugin-transform-dotall-regex@7.27.1(@babel/core@7.28.5)': dependencies: - '@babel/core': 7.28.4 - '@babel/helper-create-regexp-features-plugin': 7.27.1(@babel/core@7.28.4) + '@babel/core': 7.28.5 + '@babel/helper-create-regexp-features-plugin': 7.28.5(@babel/core@7.28.5) '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-transform-duplicate-keys@7.27.1(@babel/core@7.28.4)': + '@babel/plugin-transform-duplicate-keys@7.27.1(@babel/core@7.28.5)': dependencies: - '@babel/core': 7.28.4 + '@babel/core': 7.28.5 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-transform-duplicate-named-capturing-groups-regex@7.27.1(@babel/core@7.28.4)': + '@babel/plugin-transform-duplicate-named-capturing-groups-regex@7.27.1(@babel/core@7.28.5)': dependencies: - '@babel/core': 7.28.4 - '@babel/helper-create-regexp-features-plugin': 7.27.1(@babel/core@7.28.4) + '@babel/core': 7.28.5 + '@babel/helper-create-regexp-features-plugin': 7.28.5(@babel/core@7.28.5) '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-transform-dynamic-import@7.27.1(@babel/core@7.28.4)': + '@babel/plugin-transform-dynamic-import@7.27.1(@babel/core@7.28.5)': dependencies: - '@babel/core': 7.28.4 + '@babel/core': 7.28.5 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-transform-explicit-resource-management@7.28.0(@babel/core@7.28.4)': + '@babel/plugin-transform-explicit-resource-management@7.28.0(@babel/core@7.28.5)': dependencies: - '@babel/core': 7.28.4 + '@babel/core': 7.28.5 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-transform-destructuring': 7.28.0(@babel/core@7.28.4) + '@babel/plugin-transform-destructuring': 7.28.5(@babel/core@7.28.5) transitivePeerDependencies: - supports-color - '@babel/plugin-transform-exponentiation-operator@7.27.1(@babel/core@7.28.4)': + '@babel/plugin-transform-exponentiation-operator@7.28.5(@babel/core@7.28.5)': dependencies: - '@babel/core': 7.28.4 + '@babel/core': 7.28.5 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-transform-export-namespace-from@7.27.1(@babel/core@7.28.4)': + '@babel/plugin-transform-export-namespace-from@7.27.1(@babel/core@7.28.5)': dependencies: - '@babel/core': 7.28.4 + '@babel/core': 7.28.5 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-transform-for-of@7.27.1(@babel/core@7.28.4)': + '@babel/plugin-transform-for-of@7.27.1(@babel/core@7.28.5)': dependencies: - '@babel/core': 7.28.4 + '@babel/core': 7.28.5 '@babel/helper-plugin-utils': 7.27.1 '@babel/helper-skip-transparent-expression-wrappers': 7.27.1 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-function-name@7.27.1(@babel/core@7.28.4)': + '@babel/plugin-transform-function-name@7.27.1(@babel/core@7.28.5)': dependencies: - '@babel/core': 7.28.4 + '@babel/core': 7.28.5 '@babel/helper-compilation-targets': 7.27.2 '@babel/helper-plugin-utils': 7.27.1 - '@babel/traverse': 7.28.4 + '@babel/traverse': 7.28.5 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-json-strings@7.27.1(@babel/core@7.28.4)': + '@babel/plugin-transform-json-strings@7.27.1(@babel/core@7.28.5)': dependencies: - '@babel/core': 7.28.4 + '@babel/core': 7.28.5 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-transform-literals@7.27.1(@babel/core@7.28.4)': + '@babel/plugin-transform-literals@7.27.1(@babel/core@7.28.5)': dependencies: - '@babel/core': 7.28.4 + '@babel/core': 7.28.5 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-transform-logical-assignment-operators@7.27.1(@babel/core@7.28.4)': + '@babel/plugin-transform-logical-assignment-operators@7.28.5(@babel/core@7.28.5)': dependencies: - '@babel/core': 7.28.4 + '@babel/core': 7.28.5 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-transform-member-expression-literals@7.27.1(@babel/core@7.28.4)': + '@babel/plugin-transform-member-expression-literals@7.27.1(@babel/core@7.28.5)': dependencies: - '@babel/core': 7.28.4 + '@babel/core': 7.28.5 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-transform-modules-amd@7.27.1(@babel/core@7.28.4)': + '@babel/plugin-transform-modules-amd@7.27.1(@babel/core@7.28.5)': dependencies: - '@babel/core': 7.28.4 - '@babel/helper-module-transforms': 7.28.3(@babel/core@7.28.4) + '@babel/core': 7.28.5 + '@babel/helper-module-transforms': 7.28.3(@babel/core@7.28.5) '@babel/helper-plugin-utils': 7.27.1 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-modules-commonjs@7.27.1(@babel/core@7.28.4)': + '@babel/plugin-transform-modules-commonjs@7.27.1(@babel/core@7.28.5)': dependencies: - '@babel/core': 7.28.4 - '@babel/helper-module-transforms': 7.28.3(@babel/core@7.28.4) + '@babel/core': 7.28.5 + '@babel/helper-module-transforms': 7.28.3(@babel/core@7.28.5) '@babel/helper-plugin-utils': 7.27.1 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-modules-systemjs@7.27.1(@babel/core@7.28.4)': + '@babel/plugin-transform-modules-systemjs@7.28.5(@babel/core@7.28.5)': dependencies: - '@babel/core': 7.28.4 - '@babel/helper-module-transforms': 7.28.3(@babel/core@7.28.4) + '@babel/core': 7.28.5 + '@babel/helper-module-transforms': 7.28.3(@babel/core@7.28.5) '@babel/helper-plugin-utils': 7.27.1 - '@babel/helper-validator-identifier': 7.27.1 - '@babel/traverse': 7.28.4 + '@babel/helper-validator-identifier': 7.28.5 + '@babel/traverse': 7.28.5 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-modules-umd@7.27.1(@babel/core@7.28.4)': + '@babel/plugin-transform-modules-umd@7.27.1(@babel/core@7.28.5)': dependencies: - '@babel/core': 7.28.4 - '@babel/helper-module-transforms': 7.28.3(@babel/core@7.28.4) + '@babel/core': 7.28.5 + '@babel/helper-module-transforms': 7.28.3(@babel/core@7.28.5) '@babel/helper-plugin-utils': 7.27.1 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-named-capturing-groups-regex@7.27.1(@babel/core@7.28.4)': + '@babel/plugin-transform-named-capturing-groups-regex@7.27.1(@babel/core@7.28.5)': dependencies: - '@babel/core': 7.28.4 - '@babel/helper-create-regexp-features-plugin': 7.27.1(@babel/core@7.28.4) + '@babel/core': 7.28.5 + '@babel/helper-create-regexp-features-plugin': 7.28.5(@babel/core@7.28.5) '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-transform-new-target@7.27.1(@babel/core@7.28.4)': + '@babel/plugin-transform-new-target@7.27.1(@babel/core@7.28.5)': dependencies: - '@babel/core': 7.28.4 + '@babel/core': 7.28.5 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-transform-nullish-coalescing-operator@7.27.1(@babel/core@7.28.4)': + '@babel/plugin-transform-nullish-coalescing-operator@7.27.1(@babel/core@7.28.5)': dependencies: - '@babel/core': 7.28.4 + '@babel/core': 7.28.5 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-transform-numeric-separator@7.27.1(@babel/core@7.28.4)': + '@babel/plugin-transform-numeric-separator@7.27.1(@babel/core@7.28.5)': dependencies: - '@babel/core': 7.28.4 + '@babel/core': 7.28.5 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-transform-object-rest-spread@7.28.4(@babel/core@7.28.4)': + '@babel/plugin-transform-object-rest-spread@7.28.4(@babel/core@7.28.5)': dependencies: - '@babel/core': 7.28.4 + '@babel/core': 7.28.5 '@babel/helper-compilation-targets': 7.27.2 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-transform-destructuring': 7.28.0(@babel/core@7.28.4) - '@babel/plugin-transform-parameters': 7.27.7(@babel/core@7.28.4) - '@babel/traverse': 7.28.4 + '@babel/plugin-transform-destructuring': 7.28.5(@babel/core@7.28.5) + '@babel/plugin-transform-parameters': 7.27.7(@babel/core@7.28.5) + '@babel/traverse': 7.28.5 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-object-super@7.27.1(@babel/core@7.28.4)': + '@babel/plugin-transform-object-super@7.27.1(@babel/core@7.28.5)': dependencies: - '@babel/core': 7.28.4 + '@babel/core': 7.28.5 '@babel/helper-plugin-utils': 7.27.1 - '@babel/helper-replace-supers': 7.27.1(@babel/core@7.28.4) + '@babel/helper-replace-supers': 7.27.1(@babel/core@7.28.5) transitivePeerDependencies: - supports-color - '@babel/plugin-transform-optional-catch-binding@7.27.1(@babel/core@7.28.4)': + '@babel/plugin-transform-optional-catch-binding@7.27.1(@babel/core@7.28.5)': dependencies: - '@babel/core': 7.28.4 + '@babel/core': 7.28.5 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-transform-optional-chaining@7.27.1(@babel/core@7.28.4)': + '@babel/plugin-transform-optional-chaining@7.28.5(@babel/core@7.28.5)': dependencies: - '@babel/core': 7.28.4 + '@babel/core': 7.28.5 '@babel/helper-plugin-utils': 7.27.1 '@babel/helper-skip-transparent-expression-wrappers': 7.27.1 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-parameters@7.27.7(@babel/core@7.28.4)': + '@babel/plugin-transform-parameters@7.27.7(@babel/core@7.28.5)': dependencies: - '@babel/core': 7.28.4 + '@babel/core': 7.28.5 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-transform-private-methods@7.27.1(@babel/core@7.28.4)': + '@babel/plugin-transform-private-methods@7.27.1(@babel/core@7.28.5)': dependencies: - '@babel/core': 7.28.4 - '@babel/helper-create-class-features-plugin': 7.28.3(@babel/core@7.28.4) + '@babel/core': 7.28.5 + '@babel/helper-create-class-features-plugin': 7.28.5(@babel/core@7.28.5) '@babel/helper-plugin-utils': 7.27.1 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-private-property-in-object@7.27.1(@babel/core@7.28.4)': + '@babel/plugin-transform-private-property-in-object@7.27.1(@babel/core@7.28.5)': dependencies: - '@babel/core': 7.28.4 + '@babel/core': 7.28.5 '@babel/helper-annotate-as-pure': 7.27.3 - '@babel/helper-create-class-features-plugin': 7.28.3(@babel/core@7.28.4) + '@babel/helper-create-class-features-plugin': 7.28.5(@babel/core@7.28.5) '@babel/helper-plugin-utils': 7.27.1 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-property-literals@7.27.1(@babel/core@7.28.4)': + '@babel/plugin-transform-property-literals@7.27.1(@babel/core@7.28.5)': dependencies: - '@babel/core': 7.28.4 + '@babel/core': 7.28.5 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-transform-react-jsx-self@7.27.1(@babel/core@7.28.4)': + '@babel/plugin-transform-react-jsx-self@7.27.1(@babel/core@7.28.5)': dependencies: - '@babel/core': 7.28.4 + '@babel/core': 7.28.5 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-transform-react-jsx-source@7.27.1(@babel/core@7.28.4)': + '@babel/plugin-transform-react-jsx-source@7.27.1(@babel/core@7.28.5)': dependencies: - '@babel/core': 7.28.4 + '@babel/core': 7.28.5 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-transform-react-jsx@7.27.1(@babel/core@7.28.4)': + '@babel/plugin-transform-react-jsx@7.27.1(@babel/core@7.28.5)': dependencies: - '@babel/core': 7.28.4 + '@babel/core': 7.28.5 '@babel/helper-annotate-as-pure': 7.27.3 '@babel/helper-module-imports': 7.27.1 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-syntax-jsx': 7.27.1(@babel/core@7.28.4) - '@babel/types': 7.28.4 + '@babel/plugin-syntax-jsx': 7.27.1(@babel/core@7.28.5) + '@babel/types': 7.28.5 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-regenerator@7.28.4(@babel/core@7.28.4)': + '@babel/plugin-transform-regenerator@7.28.4(@babel/core@7.28.5)': dependencies: - '@babel/core': 7.28.4 + '@babel/core': 7.28.5 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-transform-regexp-modifiers@7.27.1(@babel/core@7.28.4)': + '@babel/plugin-transform-regexp-modifiers@7.27.1(@babel/core@7.28.5)': dependencies: - '@babel/core': 7.28.4 - '@babel/helper-create-regexp-features-plugin': 7.27.1(@babel/core@7.28.4) + '@babel/core': 7.28.5 + '@babel/helper-create-regexp-features-plugin': 7.28.5(@babel/core@7.28.5) '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-transform-reserved-words@7.27.1(@babel/core@7.28.4)': + '@babel/plugin-transform-reserved-words@7.27.1(@babel/core@7.28.5)': dependencies: - '@babel/core': 7.28.4 + '@babel/core': 7.28.5 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-transform-shorthand-properties@7.27.1(@babel/core@7.28.4)': + '@babel/plugin-transform-shorthand-properties@7.27.1(@babel/core@7.28.5)': dependencies: - '@babel/core': 7.28.4 + '@babel/core': 7.28.5 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-transform-spread@7.27.1(@babel/core@7.28.4)': + '@babel/plugin-transform-spread@7.27.1(@babel/core@7.28.5)': dependencies: - '@babel/core': 7.28.4 + '@babel/core': 7.28.5 '@babel/helper-plugin-utils': 7.27.1 '@babel/helper-skip-transparent-expression-wrappers': 7.27.1 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-sticky-regex@7.27.1(@babel/core@7.28.4)': + '@babel/plugin-transform-sticky-regex@7.27.1(@babel/core@7.28.5)': dependencies: - '@babel/core': 7.28.4 + '@babel/core': 7.28.5 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-transform-template-literals@7.27.1(@babel/core@7.28.4)': + '@babel/plugin-transform-template-literals@7.27.1(@babel/core@7.28.5)': dependencies: - '@babel/core': 7.28.4 + '@babel/core': 7.28.5 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-transform-typeof-symbol@7.27.1(@babel/core@7.28.4)': + '@babel/plugin-transform-typeof-symbol@7.27.1(@babel/core@7.28.5)': dependencies: - '@babel/core': 7.28.4 + '@babel/core': 7.28.5 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-transform-typescript@7.28.0(@babel/core@7.28.4)': + '@babel/plugin-transform-typescript@7.28.5(@babel/core@7.28.5)': dependencies: - '@babel/core': 7.28.4 + '@babel/core': 7.28.5 '@babel/helper-annotate-as-pure': 7.27.3 - '@babel/helper-create-class-features-plugin': 7.28.3(@babel/core@7.28.4) + '@babel/helper-create-class-features-plugin': 7.28.5(@babel/core@7.28.5) '@babel/helper-plugin-utils': 7.27.1 '@babel/helper-skip-transparent-expression-wrappers': 7.27.1 - '@babel/plugin-syntax-typescript': 7.27.1(@babel/core@7.28.4) + '@babel/plugin-syntax-typescript': 7.27.1(@babel/core@7.28.5) transitivePeerDependencies: - supports-color - '@babel/plugin-transform-unicode-escapes@7.27.1(@babel/core@7.28.4)': + '@babel/plugin-transform-unicode-escapes@7.27.1(@babel/core@7.28.5)': dependencies: - '@babel/core': 7.28.4 + '@babel/core': 7.28.5 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-transform-unicode-property-regex@7.27.1(@babel/core@7.28.4)': + '@babel/plugin-transform-unicode-property-regex@7.27.1(@babel/core@7.28.5)': dependencies: - '@babel/core': 7.28.4 - '@babel/helper-create-regexp-features-plugin': 7.27.1(@babel/core@7.28.4) + '@babel/core': 7.28.5 + '@babel/helper-create-regexp-features-plugin': 7.28.5(@babel/core@7.28.5) '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-transform-unicode-regex@7.27.1(@babel/core@7.28.4)': + '@babel/plugin-transform-unicode-regex@7.27.1(@babel/core@7.28.5)': dependencies: - '@babel/core': 7.28.4 - '@babel/helper-create-regexp-features-plugin': 7.27.1(@babel/core@7.28.4) + '@babel/core': 7.28.5 + '@babel/helper-create-regexp-features-plugin': 7.28.5(@babel/core@7.28.5) '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-transform-unicode-sets-regex@7.27.1(@babel/core@7.28.4)': + '@babel/plugin-transform-unicode-sets-regex@7.27.1(@babel/core@7.28.5)': dependencies: - '@babel/core': 7.28.4 - '@babel/helper-create-regexp-features-plugin': 7.27.1(@babel/core@7.28.4) + '@babel/core': 7.28.5 + '@babel/helper-create-regexp-features-plugin': 7.28.5(@babel/core@7.28.5) '@babel/helper-plugin-utils': 7.27.1 - '@babel/preset-env@7.28.3(@babel/core@7.28.4)': + '@babel/preset-env@7.28.5(@babel/core@7.28.5)': dependencies: - '@babel/compat-data': 7.28.4 - '@babel/core': 7.28.4 + '@babel/compat-data': 7.28.5 + '@babel/core': 7.28.5 '@babel/helper-compilation-targets': 7.27.2 '@babel/helper-plugin-utils': 7.27.1 '@babel/helper-validator-option': 7.27.1 - '@babel/plugin-bugfix-firefox-class-in-computed-class-key': 7.27.1(@babel/core@7.28.4) - '@babel/plugin-bugfix-safari-class-field-initializer-scope': 7.27.1(@babel/core@7.28.4) - '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression': 7.27.1(@babel/core@7.28.4) - '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining': 7.27.1(@babel/core@7.28.4) - '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly': 7.28.3(@babel/core@7.28.4) - '@babel/plugin-proposal-private-property-in-object': 7.21.0-placeholder-for-preset-env.2(@babel/core@7.28.4) - '@babel/plugin-syntax-import-assertions': 7.27.1(@babel/core@7.28.4) - '@babel/plugin-syntax-import-attributes': 7.27.1(@babel/core@7.28.4) - '@babel/plugin-syntax-unicode-sets-regex': 7.18.6(@babel/core@7.28.4) - '@babel/plugin-transform-arrow-functions': 7.27.1(@babel/core@7.28.4) - '@babel/plugin-transform-async-generator-functions': 7.28.0(@babel/core@7.28.4) - '@babel/plugin-transform-async-to-generator': 7.27.1(@babel/core@7.28.4) - '@babel/plugin-transform-block-scoped-functions': 7.27.1(@babel/core@7.28.4) - '@babel/plugin-transform-block-scoping': 7.28.4(@babel/core@7.28.4) - '@babel/plugin-transform-class-properties': 7.27.1(@babel/core@7.28.4) - '@babel/plugin-transform-class-static-block': 7.28.3(@babel/core@7.28.4) - '@babel/plugin-transform-classes': 7.28.4(@babel/core@7.28.4) - '@babel/plugin-transform-computed-properties': 7.27.1(@babel/core@7.28.4) - '@babel/plugin-transform-destructuring': 7.28.0(@babel/core@7.28.4) - '@babel/plugin-transform-dotall-regex': 7.27.1(@babel/core@7.28.4) - '@babel/plugin-transform-duplicate-keys': 7.27.1(@babel/core@7.28.4) - '@babel/plugin-transform-duplicate-named-capturing-groups-regex': 7.27.1(@babel/core@7.28.4) - '@babel/plugin-transform-dynamic-import': 7.27.1(@babel/core@7.28.4) - '@babel/plugin-transform-explicit-resource-management': 7.28.0(@babel/core@7.28.4) - '@babel/plugin-transform-exponentiation-operator': 7.27.1(@babel/core@7.28.4) - '@babel/plugin-transform-export-namespace-from': 7.27.1(@babel/core@7.28.4) - '@babel/plugin-transform-for-of': 7.27.1(@babel/core@7.28.4) - '@babel/plugin-transform-function-name': 7.27.1(@babel/core@7.28.4) - '@babel/plugin-transform-json-strings': 7.27.1(@babel/core@7.28.4) - '@babel/plugin-transform-literals': 7.27.1(@babel/core@7.28.4) - '@babel/plugin-transform-logical-assignment-operators': 7.27.1(@babel/core@7.28.4) - '@babel/plugin-transform-member-expression-literals': 7.27.1(@babel/core@7.28.4) - '@babel/plugin-transform-modules-amd': 7.27.1(@babel/core@7.28.4) - '@babel/plugin-transform-modules-commonjs': 7.27.1(@babel/core@7.28.4) - '@babel/plugin-transform-modules-systemjs': 7.27.1(@babel/core@7.28.4) - '@babel/plugin-transform-modules-umd': 7.27.1(@babel/core@7.28.4) - '@babel/plugin-transform-named-capturing-groups-regex': 7.27.1(@babel/core@7.28.4) - '@babel/plugin-transform-new-target': 7.27.1(@babel/core@7.28.4) - '@babel/plugin-transform-nullish-coalescing-operator': 7.27.1(@babel/core@7.28.4) - '@babel/plugin-transform-numeric-separator': 7.27.1(@babel/core@7.28.4) - '@babel/plugin-transform-object-rest-spread': 7.28.4(@babel/core@7.28.4) - '@babel/plugin-transform-object-super': 7.27.1(@babel/core@7.28.4) - '@babel/plugin-transform-optional-catch-binding': 7.27.1(@babel/core@7.28.4) - '@babel/plugin-transform-optional-chaining': 7.27.1(@babel/core@7.28.4) - '@babel/plugin-transform-parameters': 7.27.7(@babel/core@7.28.4) - '@babel/plugin-transform-private-methods': 7.27.1(@babel/core@7.28.4) - '@babel/plugin-transform-private-property-in-object': 7.27.1(@babel/core@7.28.4) - '@babel/plugin-transform-property-literals': 7.27.1(@babel/core@7.28.4) - '@babel/plugin-transform-regenerator': 7.28.4(@babel/core@7.28.4) - '@babel/plugin-transform-regexp-modifiers': 7.27.1(@babel/core@7.28.4) - '@babel/plugin-transform-reserved-words': 7.27.1(@babel/core@7.28.4) - '@babel/plugin-transform-shorthand-properties': 7.27.1(@babel/core@7.28.4) - '@babel/plugin-transform-spread': 7.27.1(@babel/core@7.28.4) - '@babel/plugin-transform-sticky-regex': 7.27.1(@babel/core@7.28.4) - '@babel/plugin-transform-template-literals': 7.27.1(@babel/core@7.28.4) - '@babel/plugin-transform-typeof-symbol': 7.27.1(@babel/core@7.28.4) - '@babel/plugin-transform-unicode-escapes': 7.27.1(@babel/core@7.28.4) - '@babel/plugin-transform-unicode-property-regex': 7.27.1(@babel/core@7.28.4) - '@babel/plugin-transform-unicode-regex': 7.27.1(@babel/core@7.28.4) - '@babel/plugin-transform-unicode-sets-regex': 7.27.1(@babel/core@7.28.4) - '@babel/preset-modules': 0.1.6-no-external-plugins(@babel/core@7.28.4) - babel-plugin-polyfill-corejs2: 0.4.14(@babel/core@7.28.4) - babel-plugin-polyfill-corejs3: 0.13.0(@babel/core@7.28.4) - babel-plugin-polyfill-regenerator: 0.6.5(@babel/core@7.28.4) + '@babel/plugin-bugfix-firefox-class-in-computed-class-key': 7.28.5(@babel/core@7.28.5) + '@babel/plugin-bugfix-safari-class-field-initializer-scope': 7.27.1(@babel/core@7.28.5) + '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression': 7.27.1(@babel/core@7.28.5) + '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining': 7.27.1(@babel/core@7.28.5) + '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly': 7.28.3(@babel/core@7.28.5) + '@babel/plugin-proposal-private-property-in-object': 7.21.0-placeholder-for-preset-env.2(@babel/core@7.28.5) + '@babel/plugin-syntax-import-assertions': 7.27.1(@babel/core@7.28.5) + '@babel/plugin-syntax-import-attributes': 7.27.1(@babel/core@7.28.5) + '@babel/plugin-syntax-unicode-sets-regex': 7.18.6(@babel/core@7.28.5) + '@babel/plugin-transform-arrow-functions': 7.27.1(@babel/core@7.28.5) + '@babel/plugin-transform-async-generator-functions': 7.28.0(@babel/core@7.28.5) + '@babel/plugin-transform-async-to-generator': 7.27.1(@babel/core@7.28.5) + '@babel/plugin-transform-block-scoped-functions': 7.27.1(@babel/core@7.28.5) + '@babel/plugin-transform-block-scoping': 7.28.5(@babel/core@7.28.5) + '@babel/plugin-transform-class-properties': 7.27.1(@babel/core@7.28.5) + '@babel/plugin-transform-class-static-block': 7.28.3(@babel/core@7.28.5) + '@babel/plugin-transform-classes': 7.28.4(@babel/core@7.28.5) + '@babel/plugin-transform-computed-properties': 7.27.1(@babel/core@7.28.5) + '@babel/plugin-transform-destructuring': 7.28.5(@babel/core@7.28.5) + '@babel/plugin-transform-dotall-regex': 7.27.1(@babel/core@7.28.5) + '@babel/plugin-transform-duplicate-keys': 7.27.1(@babel/core@7.28.5) + '@babel/plugin-transform-duplicate-named-capturing-groups-regex': 7.27.1(@babel/core@7.28.5) + '@babel/plugin-transform-dynamic-import': 7.27.1(@babel/core@7.28.5) + '@babel/plugin-transform-explicit-resource-management': 7.28.0(@babel/core@7.28.5) + '@babel/plugin-transform-exponentiation-operator': 7.28.5(@babel/core@7.28.5) + '@babel/plugin-transform-export-namespace-from': 7.27.1(@babel/core@7.28.5) + '@babel/plugin-transform-for-of': 7.27.1(@babel/core@7.28.5) + '@babel/plugin-transform-function-name': 7.27.1(@babel/core@7.28.5) + '@babel/plugin-transform-json-strings': 7.27.1(@babel/core@7.28.5) + '@babel/plugin-transform-literals': 7.27.1(@babel/core@7.28.5) + '@babel/plugin-transform-logical-assignment-operators': 7.28.5(@babel/core@7.28.5) + '@babel/plugin-transform-member-expression-literals': 7.27.1(@babel/core@7.28.5) + '@babel/plugin-transform-modules-amd': 7.27.1(@babel/core@7.28.5) + '@babel/plugin-transform-modules-commonjs': 7.27.1(@babel/core@7.28.5) + '@babel/plugin-transform-modules-systemjs': 7.28.5(@babel/core@7.28.5) + '@babel/plugin-transform-modules-umd': 7.27.1(@babel/core@7.28.5) + '@babel/plugin-transform-named-capturing-groups-regex': 7.27.1(@babel/core@7.28.5) + '@babel/plugin-transform-new-target': 7.27.1(@babel/core@7.28.5) + '@babel/plugin-transform-nullish-coalescing-operator': 7.27.1(@babel/core@7.28.5) + '@babel/plugin-transform-numeric-separator': 7.27.1(@babel/core@7.28.5) + '@babel/plugin-transform-object-rest-spread': 7.28.4(@babel/core@7.28.5) + '@babel/plugin-transform-object-super': 7.27.1(@babel/core@7.28.5) + '@babel/plugin-transform-optional-catch-binding': 7.27.1(@babel/core@7.28.5) + '@babel/plugin-transform-optional-chaining': 7.28.5(@babel/core@7.28.5) + '@babel/plugin-transform-parameters': 7.27.7(@babel/core@7.28.5) + '@babel/plugin-transform-private-methods': 7.27.1(@babel/core@7.28.5) + '@babel/plugin-transform-private-property-in-object': 7.27.1(@babel/core@7.28.5) + '@babel/plugin-transform-property-literals': 7.27.1(@babel/core@7.28.5) + '@babel/plugin-transform-regenerator': 7.28.4(@babel/core@7.28.5) + '@babel/plugin-transform-regexp-modifiers': 7.27.1(@babel/core@7.28.5) + '@babel/plugin-transform-reserved-words': 7.27.1(@babel/core@7.28.5) + '@babel/plugin-transform-shorthand-properties': 7.27.1(@babel/core@7.28.5) + '@babel/plugin-transform-spread': 7.27.1(@babel/core@7.28.5) + '@babel/plugin-transform-sticky-regex': 7.27.1(@babel/core@7.28.5) + '@babel/plugin-transform-template-literals': 7.27.1(@babel/core@7.28.5) + '@babel/plugin-transform-typeof-symbol': 7.27.1(@babel/core@7.28.5) + '@babel/plugin-transform-unicode-escapes': 7.27.1(@babel/core@7.28.5) + '@babel/plugin-transform-unicode-property-regex': 7.27.1(@babel/core@7.28.5) + '@babel/plugin-transform-unicode-regex': 7.27.1(@babel/core@7.28.5) + '@babel/plugin-transform-unicode-sets-regex': 7.27.1(@babel/core@7.28.5) + '@babel/preset-modules': 0.1.6-no-external-plugins(@babel/core@7.28.5) + babel-plugin-polyfill-corejs2: 0.4.14(@babel/core@7.28.5) + babel-plugin-polyfill-corejs3: 0.13.0(@babel/core@7.28.5) + babel-plugin-polyfill-regenerator: 0.6.5(@babel/core@7.28.5) core-js-compat: 3.46.0 semver: 6.3.1 transitivePeerDependencies: - supports-color - '@babel/preset-modules@0.1.6-no-external-plugins(@babel/core@7.28.4)': + '@babel/preset-modules@0.1.6-no-external-plugins(@babel/core@7.28.5)': dependencies: - '@babel/core': 7.28.4 + '@babel/core': 7.28.5 '@babel/helper-plugin-utils': 7.27.1 - '@babel/types': 7.28.4 + '@babel/types': 7.28.5 esutils: 2.0.3 - '@babel/preset-typescript@7.27.1(@babel/core@7.28.4)': + '@babel/preset-typescript@7.28.5(@babel/core@7.28.5)': dependencies: - '@babel/core': 7.28.4 + '@babel/core': 7.28.5 '@babel/helper-plugin-utils': 7.27.1 '@babel/helper-validator-option': 7.27.1 - '@babel/plugin-syntax-jsx': 7.27.1(@babel/core@7.28.4) - '@babel/plugin-transform-modules-commonjs': 7.27.1(@babel/core@7.28.4) - '@babel/plugin-transform-typescript': 7.28.0(@babel/core@7.28.4) + '@babel/plugin-syntax-jsx': 7.27.1(@babel/core@7.28.5) + '@babel/plugin-transform-modules-commonjs': 7.27.1(@babel/core@7.28.5) + '@babel/plugin-transform-typescript': 7.28.5(@babel/core@7.28.5) transitivePeerDependencies: - supports-color @@ -12623,97 +12577,97 @@ snapshots: '@babel/template@7.27.2': dependencies: '@babel/code-frame': 7.27.1 - '@babel/parser': 7.28.4 - '@babel/types': 7.28.4 + '@babel/parser': 7.28.5 + '@babel/types': 7.28.5 - '@babel/traverse@7.28.4': + '@babel/traverse@7.28.5': dependencies: '@babel/code-frame': 7.27.1 - '@babel/generator': 7.28.3 + '@babel/generator': 7.28.5 '@babel/helper-globals': 7.28.0 - '@babel/parser': 7.28.4 + '@babel/parser': 7.28.5 '@babel/template': 7.27.2 - '@babel/types': 7.28.4 + '@babel/types': 7.28.5 debug: 4.4.3 transitivePeerDependencies: - supports-color - '@babel/types@7.28.4': + '@babel/types@7.28.5': dependencies: '@babel/helper-string-parser': 7.27.1 - '@babel/helper-validator-identifier': 7.27.1 + '@babel/helper-validator-identifier': 7.28.5 '@bcoe/v8-coverage@1.0.2': {} - '@biomejs/biome@2.2.5': + '@biomejs/biome@2.3.2': optionalDependencies: - '@biomejs/cli-darwin-arm64': 2.2.5 - '@biomejs/cli-darwin-x64': 2.2.5 - '@biomejs/cli-linux-arm64': 2.2.5 - '@biomejs/cli-linux-arm64-musl': 2.2.5 - '@biomejs/cli-linux-x64': 2.2.5 - '@biomejs/cli-linux-x64-musl': 2.2.5 - '@biomejs/cli-win32-arm64': 2.2.5 - '@biomejs/cli-win32-x64': 2.2.5 + '@biomejs/cli-darwin-arm64': 2.3.2 + '@biomejs/cli-darwin-x64': 2.3.2 + '@biomejs/cli-linux-arm64': 2.3.2 + '@biomejs/cli-linux-arm64-musl': 2.3.2 + '@biomejs/cli-linux-x64': 2.3.2 + '@biomejs/cli-linux-x64-musl': 2.3.2 + '@biomejs/cli-win32-arm64': 2.3.2 + '@biomejs/cli-win32-x64': 2.3.2 - '@biomejs/cli-darwin-arm64@2.2.5': + '@biomejs/cli-darwin-arm64@2.3.2': optional: true - '@biomejs/cli-darwin-x64@2.2.5': + '@biomejs/cli-darwin-x64@2.3.2': optional: true - '@biomejs/cli-linux-arm64-musl@2.2.5': + '@biomejs/cli-linux-arm64-musl@2.3.2': optional: true - '@biomejs/cli-linux-arm64@2.2.5': + '@biomejs/cli-linux-arm64@2.3.2': optional: true - '@biomejs/cli-linux-x64-musl@2.2.5': + '@biomejs/cli-linux-x64-musl@2.3.2': optional: true - '@biomejs/cli-linux-x64@2.2.5': + '@biomejs/cli-linux-x64@2.3.2': optional: true - '@biomejs/cli-win32-arm64@2.2.5': + '@biomejs/cli-win32-arm64@2.3.2': optional: true - '@biomejs/cli-win32-x64@2.2.5': + '@biomejs/cli-win32-x64@2.3.2': optional: true - '@blocknote/code-block@0.41.1(@blocknote/core@0.41.1(@hocuspocus/provider@2.15.2(y-protocols@1.0.6(yjs@13.6.27))(yjs@13.6.27))(@tiptap/extensions@3.6.5(@tiptap/core@3.6.6(@tiptap/pm@3.6.6))(@tiptap/pm@3.6.6))(@types/hast@3.0.4)(highlight.js@11.11.1)(lowlight@3.3.0))': + '@blocknote/code-block@0.41.1(@blocknote/core@0.41.1(@hocuspocus/provider@2.15.2(y-protocols@1.0.6(yjs@13.6.27))(yjs@13.6.27))(@tiptap/extensions@3.6.5(@tiptap/core@3.9.1(@tiptap/pm@3.9.1))(@tiptap/pm@3.9.1))(@types/hast@3.0.4)(highlight.js@11.11.1)(lowlight@3.3.0))': dependencies: - '@blocknote/core': 0.41.1(@hocuspocus/provider@2.15.2(y-protocols@1.0.6(yjs@13.6.27))(yjs@13.6.27))(@tiptap/extensions@3.6.5(@tiptap/core@3.6.6(@tiptap/pm@3.6.6))(@tiptap/pm@3.6.6))(@types/hast@3.0.4)(highlight.js@11.11.1)(lowlight@3.3.0) - '@shikijs/core': 3.13.0 - '@shikijs/engine-javascript': 3.13.0 - '@shikijs/langs': 3.13.0 - '@shikijs/langs-precompiled': 3.13.0 - '@shikijs/themes': 3.13.0 - '@shikijs/types': 3.13.0 + '@blocknote/core': 0.41.1(@hocuspocus/provider@2.15.2(y-protocols@1.0.6(yjs@13.6.27))(yjs@13.6.27))(@tiptap/extensions@3.6.5(@tiptap/core@3.9.1(@tiptap/pm@3.9.1))(@tiptap/pm@3.9.1))(@types/hast@3.0.4)(highlight.js@11.11.1)(lowlight@3.3.0) + '@shikijs/core': 3.14.0 + '@shikijs/engine-javascript': 3.14.0 + '@shikijs/langs': 3.14.0 + '@shikijs/langs-precompiled': 3.14.0 + '@shikijs/themes': 3.14.0 + '@shikijs/types': 3.14.0 - '@blocknote/core@0.41.1(@hocuspocus/provider@2.15.2(y-protocols@1.0.6(yjs@13.6.27))(yjs@13.6.27))(@tiptap/extensions@3.6.5(@tiptap/core@3.6.6(@tiptap/pm@3.6.6))(@tiptap/pm@3.6.6))(@types/hast@3.0.4)(highlight.js@11.11.1)(lowlight@3.3.0)': + '@blocknote/core@0.41.1(@hocuspocus/provider@2.15.2(y-protocols@1.0.6(yjs@13.6.27))(yjs@13.6.27))(@tiptap/extensions@3.6.5(@tiptap/core@3.9.1(@tiptap/pm@3.9.1))(@tiptap/pm@3.9.1))(@types/hast@3.0.4)(highlight.js@11.11.1)(lowlight@3.3.0)': dependencies: '@emoji-mart/data': 1.2.1 '@shikijs/types': 3.13.0 - '@tiptap/core': 3.6.6(@tiptap/pm@3.6.6) - '@tiptap/extension-bold': 3.6.6(@tiptap/core@3.6.6(@tiptap/pm@3.6.6)) - '@tiptap/extension-code': 3.6.6(@tiptap/core@3.6.6(@tiptap/pm@3.6.6)) - '@tiptap/extension-gapcursor': 3.6.6(@tiptap/extensions@3.6.5(@tiptap/core@3.6.6(@tiptap/pm@3.6.6))(@tiptap/pm@3.6.6)) - '@tiptap/extension-history': 3.6.6(@tiptap/extensions@3.6.5(@tiptap/core@3.6.6(@tiptap/pm@3.6.6))(@tiptap/pm@3.6.6)) - '@tiptap/extension-horizontal-rule': 3.6.6(@tiptap/core@3.6.6(@tiptap/pm@3.6.6))(@tiptap/pm@3.6.6) - '@tiptap/extension-italic': 3.6.6(@tiptap/core@3.6.6(@tiptap/pm@3.6.6)) - '@tiptap/extension-link': 3.6.6(@tiptap/core@3.6.6(@tiptap/pm@3.6.6))(@tiptap/pm@3.6.6) - '@tiptap/extension-paragraph': 3.6.6(@tiptap/core@3.6.6(@tiptap/pm@3.6.6)) - '@tiptap/extension-strike': 3.6.6(@tiptap/core@3.6.6(@tiptap/pm@3.6.6)) - '@tiptap/extension-text': 3.6.6(@tiptap/core@3.6.6(@tiptap/pm@3.6.6)) - '@tiptap/extension-underline': 3.6.6(@tiptap/core@3.6.6(@tiptap/pm@3.6.6)) - '@tiptap/pm': 3.6.6 + '@tiptap/core': 3.9.1(@tiptap/pm@3.9.1) + '@tiptap/extension-bold': 3.9.1(@tiptap/core@3.9.1(@tiptap/pm@3.9.1)) + '@tiptap/extension-code': 3.9.1(@tiptap/core@3.9.1(@tiptap/pm@3.9.1)) + '@tiptap/extension-gapcursor': 3.9.1(@tiptap/extensions@3.6.5(@tiptap/core@3.9.1(@tiptap/pm@3.9.1))(@tiptap/pm@3.9.1)) + '@tiptap/extension-history': 3.9.1(@tiptap/extensions@3.6.5(@tiptap/core@3.9.1(@tiptap/pm@3.9.1))(@tiptap/pm@3.9.1)) + '@tiptap/extension-horizontal-rule': 3.9.1(@tiptap/core@3.9.1(@tiptap/pm@3.9.1))(@tiptap/pm@3.9.1) + '@tiptap/extension-italic': 3.9.1(@tiptap/core@3.9.1(@tiptap/pm@3.9.1)) + '@tiptap/extension-link': 3.9.1(@tiptap/core@3.9.1(@tiptap/pm@3.9.1))(@tiptap/pm@3.9.1) + '@tiptap/extension-paragraph': 3.9.1(@tiptap/core@3.9.1(@tiptap/pm@3.9.1)) + '@tiptap/extension-strike': 3.9.1(@tiptap/core@3.9.1(@tiptap/pm@3.9.1)) + '@tiptap/extension-text': 3.9.1(@tiptap/core@3.9.1(@tiptap/pm@3.9.1)) + '@tiptap/extension-underline': 3.9.1(@tiptap/core@3.9.1(@tiptap/pm@3.9.1)) + '@tiptap/pm': 3.9.1 emoji-mart: 5.6.0 fast-deep-equal: 3.1.3 hast-util-from-dom: 5.0.1 prosemirror-dropcursor: 1.8.2 - prosemirror-highlight: 0.13.0(@shikijs/types@3.13.0)(@types/hast@3.0.4)(highlight.js@11.11.1)(lowlight@3.3.0)(prosemirror-model@1.25.3)(prosemirror-state@1.4.3)(prosemirror-transform@1.10.4)(prosemirror-view@1.41.3) - prosemirror-model: 1.25.3 - prosemirror-state: 1.4.3 + prosemirror-highlight: 0.13.0(@shikijs/types@3.13.0)(@types/hast@3.0.4)(highlight.js@11.11.1)(lowlight@3.3.0)(prosemirror-model@1.25.4)(prosemirror-state@1.4.4)(prosemirror-transform@1.10.4)(prosemirror-view@1.41.3) + prosemirror-model: 1.25.4 + prosemirror-state: 1.4.4 prosemirror-tables: 1.8.1 prosemirror-transform: 1.10.4 prosemirror-view: 1.41.3 @@ -12728,7 +12682,7 @@ snapshots: unified: 11.0.5 unist-util-visit: 5.0.0 uuid: 8.3.2 - y-prosemirror: 1.3.7(prosemirror-model@1.25.3)(prosemirror-state@1.4.3)(prosemirror-view@1.41.3)(y-protocols@1.0.6(yjs@13.6.27))(yjs@13.6.27) + y-prosemirror: 1.3.7(prosemirror-model@1.25.4)(prosemirror-state@1.4.4)(prosemirror-view@1.41.3)(y-protocols@1.0.6(yjs@13.6.27))(yjs@13.6.27) y-protocols: 1.0.6(yjs@13.6.27) yjs: 13.6.27 optionalDependencies: @@ -12742,14 +12696,14 @@ snapshots: - sugar-high - supports-color - '@blocknote/react@0.41.1(@floating-ui/dom@1.7.4)(@hocuspocus/provider@2.15.2(y-protocols@1.0.6(yjs@13.6.27))(yjs@13.6.27))(@tiptap/extensions@3.6.5(@tiptap/core@3.6.6(@tiptap/pm@3.6.6))(@tiptap/pm@3.6.6))(@types/hast@3.0.4)(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(highlight.js@11.11.1)(lowlight@3.3.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)': + '@blocknote/react@0.41.1(@floating-ui/dom@1.7.4)(@hocuspocus/provider@2.15.2(y-protocols@1.0.6(yjs@13.6.27))(yjs@13.6.27))(@tiptap/extensions@3.6.5(@tiptap/core@3.9.1(@tiptap/pm@3.9.1))(@tiptap/pm@3.9.1))(@types/hast@3.0.4)(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(highlight.js@11.11.1)(lowlight@3.3.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)': dependencies: - '@blocknote/core': 0.41.1(@hocuspocus/provider@2.15.2(y-protocols@1.0.6(yjs@13.6.27))(yjs@13.6.27))(@tiptap/extensions@3.6.5(@tiptap/core@3.6.6(@tiptap/pm@3.6.6))(@tiptap/pm@3.6.6))(@types/hast@3.0.4)(highlight.js@11.11.1)(lowlight@3.3.0) + '@blocknote/core': 0.41.1(@hocuspocus/provider@2.15.2(y-protocols@1.0.6(yjs@13.6.27))(yjs@13.6.27))(@tiptap/extensions@3.6.5(@tiptap/core@3.9.1(@tiptap/pm@3.9.1))(@tiptap/pm@3.9.1))(@types/hast@3.0.4)(highlight.js@11.11.1)(lowlight@3.3.0) '@emoji-mart/data': 1.2.1 '@floating-ui/react': 0.27.16(react-dom@19.2.0(react@19.2.0))(react@19.2.0) - '@tiptap/core': 3.6.6(@tiptap/pm@3.6.6) - '@tiptap/pm': 3.6.6 - '@tiptap/react': 3.6.6(@floating-ui/dom@1.7.4)(@tiptap/core@3.6.6(@tiptap/pm@3.6.6))(@tiptap/pm@3.6.6)(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@tiptap/core': 3.9.1(@tiptap/pm@3.9.1) + '@tiptap/pm': 3.9.1 + '@tiptap/react': 3.9.1(@floating-ui/dom@1.7.4)(@tiptap/core@3.9.1(@tiptap/pm@3.9.1))(@tiptap/pm@3.9.1)(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) emoji-mart: 5.6.0 lodash.merge: 4.6.2 react: 19.2.0 @@ -12768,20 +12722,20 @@ snapshots: - sugar-high - supports-color - '@blocknote/shadcn@0.41.1(@floating-ui/dom@1.7.4)(@hocuspocus/provider@2.15.2(y-protocols@1.0.6(yjs@13.6.27))(yjs@13.6.27))(@tiptap/extensions@3.6.5(@tiptap/core@3.6.6(@tiptap/pm@3.6.6))(@tiptap/pm@3.6.6))(@types/hast@3.0.4)(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(highlight.js@11.11.1)(lowlight@3.3.0)(postcss@8.5.6)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(tailwindcss@4.1.14)': + '@blocknote/shadcn@0.41.1(@floating-ui/dom@1.7.4)(@hocuspocus/provider@2.15.2(y-protocols@1.0.6(yjs@13.6.27))(yjs@13.6.27))(@tiptap/extensions@3.6.5(@tiptap/core@3.9.1(@tiptap/pm@3.9.1))(@tiptap/pm@3.9.1))(@types/hast@3.0.4)(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(highlight.js@11.11.1)(lowlight@3.3.0)(postcss@8.5.6)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(tailwindcss@4.1.16)': dependencies: - '@blocknote/core': 0.41.1(@hocuspocus/provider@2.15.2(y-protocols@1.0.6(yjs@13.6.27))(yjs@13.6.27))(@tiptap/extensions@3.6.5(@tiptap/core@3.6.6(@tiptap/pm@3.6.6))(@tiptap/pm@3.6.6))(@types/hast@3.0.4)(highlight.js@11.11.1)(lowlight@3.3.0) - '@blocknote/react': 0.41.1(@floating-ui/dom@1.7.4)(@hocuspocus/provider@2.15.2(y-protocols@1.0.6(yjs@13.6.27))(yjs@13.6.27))(@tiptap/extensions@3.6.5(@tiptap/core@3.6.6(@tiptap/pm@3.6.6))(@tiptap/pm@3.6.6))(@types/hast@3.0.4)(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(highlight.js@11.11.1)(lowlight@3.3.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@blocknote/core': 0.41.1(@hocuspocus/provider@2.15.2(y-protocols@1.0.6(yjs@13.6.27))(yjs@13.6.27))(@tiptap/extensions@3.6.5(@tiptap/core@3.9.1(@tiptap/pm@3.9.1))(@tiptap/pm@3.9.1))(@types/hast@3.0.4)(highlight.js@11.11.1)(lowlight@3.3.0) + '@blocknote/react': 0.41.1(@floating-ui/dom@1.7.4)(@hocuspocus/provider@2.15.2(y-protocols@1.0.6(yjs@13.6.27))(yjs@13.6.27))(@tiptap/extensions@3.6.5(@tiptap/core@3.9.1(@tiptap/pm@3.9.1))(@tiptap/pm@3.9.1))(@types/hast@3.0.4)(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(highlight.js@11.11.1)(lowlight@3.3.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) '@hookform/resolvers': 3.10.0(react-hook-form@7.65.0(react@19.2.0)) - '@radix-ui/react-avatar': 1.1.10(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) - '@radix-ui/react-dropdown-menu': 2.1.16(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) - '@radix-ui/react-label': 2.1.7(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) - '@radix-ui/react-popover': 1.1.15(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) - '@radix-ui/react-select': 2.2.6(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@radix-ui/react-avatar': 1.1.10(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@radix-ui/react-dropdown-menu': 2.1.16(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@radix-ui/react-label': 2.1.7(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@radix-ui/react-popover': 1.1.15(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@radix-ui/react-select': 2.2.6(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) '@radix-ui/react-slot': 1.2.3(@types/react@19.2.2)(react@19.2.0) - '@radix-ui/react-tabs': 1.1.13(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) - '@radix-ui/react-toggle': 1.1.10(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) - '@radix-ui/react-tooltip': 1.2.8(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@radix-ui/react-tabs': 1.1.13(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@radix-ui/react-toggle': 1.1.10(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@radix-ui/react-tooltip': 1.2.8(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) autoprefixer: 10.4.21(postcss@8.5.6) class-variance-authority: 0.7.1 clsx: 2.1.1 @@ -12790,7 +12744,7 @@ snapshots: react-dom: 19.2.0(react@19.2.0) react-hook-form: 7.65.0(react@19.2.0) tailwind-merge: 2.6.0 - tailwindcss: 4.1.14 + tailwindcss: 4.1.16 zod: 3.25.76 transitivePeerDependencies: - '@floating-ui/dom' @@ -12819,13 +12773,13 @@ snapshots: - tsx - yaml - '@chromatic-com/storybook@4.1.1(storybook@9.1.10(@testing-library/dom@10.4.1)(prettier@3.6.2)(vite@7.1.9(@types/node@24.7.2)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)))': + '@chromatic-com/storybook@4.1.2(storybook@9.1.16(@testing-library/dom@10.4.1)(prettier@3.6.2)(vite@7.1.12(@types/node@24.9.2)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)))': dependencies: '@neoconfetti/react': 1.0.0 chromatic: 12.2.0 filesize: 10.1.6 jsonfile: 6.2.0 - storybook: 9.1.10(@testing-library/dom@10.4.1)(prettier@3.6.2)(vite@7.1.9(@types/node@24.7.2)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)) + storybook: 9.1.16(@testing-library/dom@10.4.1)(prettier@3.6.2)(vite@7.1.12(@types/node@24.9.2)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)) strip-ansi: 7.1.2 transitivePeerDependencies: - '@chromatic-com/cypress' @@ -12842,9 +12796,9 @@ snapshots: picocolors: 1.1.1 sisteransi: 1.0.5 - '@commander-js/extra-typings@14.0.0(commander@14.0.1)': + '@commander-js/extra-typings@14.0.0(commander@14.0.2)': dependencies: - commander: 14.0.1 + commander: 14.0.2 '@cspotcode/source-map-support@0.8.1': dependencies: @@ -12892,28 +12846,28 @@ snapshots: '@drizzle-team/brocli@0.10.2': {} - '@electric-sql/client@1.0.14': + '@electric-sql/client@1.1.1': dependencies: '@microsoft/fetch-event-source': 2.0.1 optionalDependencies: - '@rollup/rollup-darwin-arm64': 4.52.4 + '@rollup/rollup-darwin-arm64': 4.52.5 - '@electric-sql/pglite@0.3.10': {} + '@electric-sql/pglite@0.3.11': {} - '@electric-sql/react@1.0.14(react@19.2.0)': + '@electric-sql/react@1.0.16(react@19.2.0)': dependencies: - '@electric-sql/client': 1.0.14 + '@electric-sql/client': 1.1.1 use-sync-external-store: 1.6.0(react@19.2.0) optionalDependencies: react: 19.2.0 - '@emnapi/core@1.5.0': + '@emnapi/core@1.6.0': dependencies: '@emnapi/wasi-threads': 1.1.0 tslib: 2.8.1 optional: true - '@emnapi/runtime@1.5.0': + '@emnapi/runtime@1.6.0': dependencies: tslib: 2.8.1 optional: true @@ -12943,18 +12897,15 @@ snapshots: '@esbuild-kit/esm-loader@2.6.5': dependencies: '@esbuild-kit/core-utils': 3.3.2 - get-tsconfig: 4.12.0 + get-tsconfig: 4.13.0 '@esbuild/aix-ppc64@0.19.12': optional: true - '@esbuild/aix-ppc64@0.21.5': - optional: true - '@esbuild/aix-ppc64@0.24.2': optional: true - '@esbuild/aix-ppc64@0.25.10': + '@esbuild/aix-ppc64@0.25.11': optional: true '@esbuild/android-arm64@0.18.20': @@ -12963,13 +12914,10 @@ snapshots: '@esbuild/android-arm64@0.19.12': optional: true - '@esbuild/android-arm64@0.21.5': - optional: true - '@esbuild/android-arm64@0.24.2': optional: true - '@esbuild/android-arm64@0.25.10': + '@esbuild/android-arm64@0.25.11': optional: true '@esbuild/android-arm@0.18.20': @@ -12978,13 +12926,10 @@ snapshots: '@esbuild/android-arm@0.19.12': optional: true - '@esbuild/android-arm@0.21.5': - optional: true - '@esbuild/android-arm@0.24.2': optional: true - '@esbuild/android-arm@0.25.10': + '@esbuild/android-arm@0.25.11': optional: true '@esbuild/android-x64@0.18.20': @@ -12993,13 +12938,10 @@ snapshots: '@esbuild/android-x64@0.19.12': optional: true - '@esbuild/android-x64@0.21.5': - optional: true - '@esbuild/android-x64@0.24.2': optional: true - '@esbuild/android-x64@0.25.10': + '@esbuild/android-x64@0.25.11': optional: true '@esbuild/darwin-arm64@0.18.20': @@ -13008,13 +12950,10 @@ snapshots: '@esbuild/darwin-arm64@0.19.12': optional: true - '@esbuild/darwin-arm64@0.21.5': - optional: true - '@esbuild/darwin-arm64@0.24.2': optional: true - '@esbuild/darwin-arm64@0.25.10': + '@esbuild/darwin-arm64@0.25.11': optional: true '@esbuild/darwin-x64@0.18.20': @@ -13023,13 +12962,10 @@ snapshots: '@esbuild/darwin-x64@0.19.12': optional: true - '@esbuild/darwin-x64@0.21.5': - optional: true - '@esbuild/darwin-x64@0.24.2': optional: true - '@esbuild/darwin-x64@0.25.10': + '@esbuild/darwin-x64@0.25.11': optional: true '@esbuild/freebsd-arm64@0.18.20': @@ -13038,13 +12974,10 @@ snapshots: '@esbuild/freebsd-arm64@0.19.12': optional: true - '@esbuild/freebsd-arm64@0.21.5': - optional: true - '@esbuild/freebsd-arm64@0.24.2': optional: true - '@esbuild/freebsd-arm64@0.25.10': + '@esbuild/freebsd-arm64@0.25.11': optional: true '@esbuild/freebsd-x64@0.18.20': @@ -13053,13 +12986,10 @@ snapshots: '@esbuild/freebsd-x64@0.19.12': optional: true - '@esbuild/freebsd-x64@0.21.5': - optional: true - '@esbuild/freebsd-x64@0.24.2': optional: true - '@esbuild/freebsd-x64@0.25.10': + '@esbuild/freebsd-x64@0.25.11': optional: true '@esbuild/linux-arm64@0.18.20': @@ -13068,13 +12998,10 @@ snapshots: '@esbuild/linux-arm64@0.19.12': optional: true - '@esbuild/linux-arm64@0.21.5': - optional: true - '@esbuild/linux-arm64@0.24.2': optional: true - '@esbuild/linux-arm64@0.25.10': + '@esbuild/linux-arm64@0.25.11': optional: true '@esbuild/linux-arm@0.18.20': @@ -13083,13 +13010,10 @@ snapshots: '@esbuild/linux-arm@0.19.12': optional: true - '@esbuild/linux-arm@0.21.5': - optional: true - '@esbuild/linux-arm@0.24.2': optional: true - '@esbuild/linux-arm@0.25.10': + '@esbuild/linux-arm@0.25.11': optional: true '@esbuild/linux-ia32@0.18.20': @@ -13098,13 +13022,10 @@ snapshots: '@esbuild/linux-ia32@0.19.12': optional: true - '@esbuild/linux-ia32@0.21.5': - optional: true - '@esbuild/linux-ia32@0.24.2': optional: true - '@esbuild/linux-ia32@0.25.10': + '@esbuild/linux-ia32@0.25.11': optional: true '@esbuild/linux-loong64@0.18.20': @@ -13113,13 +13034,10 @@ snapshots: '@esbuild/linux-loong64@0.19.12': optional: true - '@esbuild/linux-loong64@0.21.5': - optional: true - '@esbuild/linux-loong64@0.24.2': optional: true - '@esbuild/linux-loong64@0.25.10': + '@esbuild/linux-loong64@0.25.11': optional: true '@esbuild/linux-mips64el@0.18.20': @@ -13128,13 +13046,10 @@ snapshots: '@esbuild/linux-mips64el@0.19.12': optional: true - '@esbuild/linux-mips64el@0.21.5': - optional: true - '@esbuild/linux-mips64el@0.24.2': optional: true - '@esbuild/linux-mips64el@0.25.10': + '@esbuild/linux-mips64el@0.25.11': optional: true '@esbuild/linux-ppc64@0.18.20': @@ -13143,13 +13058,10 @@ snapshots: '@esbuild/linux-ppc64@0.19.12': optional: true - '@esbuild/linux-ppc64@0.21.5': - optional: true - '@esbuild/linux-ppc64@0.24.2': optional: true - '@esbuild/linux-ppc64@0.25.10': + '@esbuild/linux-ppc64@0.25.11': optional: true '@esbuild/linux-riscv64@0.18.20': @@ -13158,13 +13070,10 @@ snapshots: '@esbuild/linux-riscv64@0.19.12': optional: true - '@esbuild/linux-riscv64@0.21.5': - optional: true - '@esbuild/linux-riscv64@0.24.2': optional: true - '@esbuild/linux-riscv64@0.25.10': + '@esbuild/linux-riscv64@0.25.11': optional: true '@esbuild/linux-s390x@0.18.20': @@ -13173,13 +13082,10 @@ snapshots: '@esbuild/linux-s390x@0.19.12': optional: true - '@esbuild/linux-s390x@0.21.5': - optional: true - '@esbuild/linux-s390x@0.24.2': optional: true - '@esbuild/linux-s390x@0.25.10': + '@esbuild/linux-s390x@0.25.11': optional: true '@esbuild/linux-x64@0.18.20': @@ -13188,19 +13094,16 @@ snapshots: '@esbuild/linux-x64@0.19.12': optional: true - '@esbuild/linux-x64@0.21.5': - optional: true - '@esbuild/linux-x64@0.24.2': optional: true - '@esbuild/linux-x64@0.25.10': + '@esbuild/linux-x64@0.25.11': optional: true '@esbuild/netbsd-arm64@0.24.2': optional: true - '@esbuild/netbsd-arm64@0.25.10': + '@esbuild/netbsd-arm64@0.25.11': optional: true '@esbuild/netbsd-x64@0.18.20': @@ -13209,19 +13112,16 @@ snapshots: '@esbuild/netbsd-x64@0.19.12': optional: true - '@esbuild/netbsd-x64@0.21.5': - optional: true - '@esbuild/netbsd-x64@0.24.2': optional: true - '@esbuild/netbsd-x64@0.25.10': + '@esbuild/netbsd-x64@0.25.11': optional: true '@esbuild/openbsd-arm64@0.24.2': optional: true - '@esbuild/openbsd-arm64@0.25.10': + '@esbuild/openbsd-arm64@0.25.11': optional: true '@esbuild/openbsd-x64@0.18.20': @@ -13230,16 +13130,13 @@ snapshots: '@esbuild/openbsd-x64@0.19.12': optional: true - '@esbuild/openbsd-x64@0.21.5': - optional: true - '@esbuild/openbsd-x64@0.24.2': optional: true - '@esbuild/openbsd-x64@0.25.10': + '@esbuild/openbsd-x64@0.25.11': optional: true - '@esbuild/openharmony-arm64@0.25.10': + '@esbuild/openharmony-arm64@0.25.11': optional: true '@esbuild/sunos-x64@0.18.20': @@ -13248,13 +13145,10 @@ snapshots: '@esbuild/sunos-x64@0.19.12': optional: true - '@esbuild/sunos-x64@0.21.5': - optional: true - '@esbuild/sunos-x64@0.24.2': optional: true - '@esbuild/sunos-x64@0.25.10': + '@esbuild/sunos-x64@0.25.11': optional: true '@esbuild/win32-arm64@0.18.20': @@ -13263,13 +13157,10 @@ snapshots: '@esbuild/win32-arm64@0.19.12': optional: true - '@esbuild/win32-arm64@0.21.5': - optional: true - '@esbuild/win32-arm64@0.24.2': optional: true - '@esbuild/win32-arm64@0.25.10': + '@esbuild/win32-arm64@0.25.11': optional: true '@esbuild/win32-ia32@0.18.20': @@ -13278,13 +13169,10 @@ snapshots: '@esbuild/win32-ia32@0.19.12': optional: true - '@esbuild/win32-ia32@0.21.5': - optional: true - '@esbuild/win32-ia32@0.24.2': optional: true - '@esbuild/win32-ia32@0.25.10': + '@esbuild/win32-ia32@0.25.11': optional: true '@esbuild/win32-x64@0.18.20': @@ -13293,13 +13181,10 @@ snapshots: '@esbuild/win32-x64@0.19.12': optional: true - '@esbuild/win32-x64@0.21.5': - optional: true - '@esbuild/win32-x64@0.24.2': optional: true - '@esbuild/win32-x64@0.25.10': + '@esbuild/win32-x64@0.25.11': optional: true '@eslint-community/eslint-utils@4.9.0(eslint@8.57.1)': @@ -13307,7 +13192,7 @@ snapshots: eslint: 8.57.1 eslint-visitor-keys: 3.4.3 - '@eslint-community/regexpp@4.12.1': {} + '@eslint-community/regexpp@4.12.2': {} '@eslint/eslintrc@2.1.4': dependencies: @@ -13327,7 +13212,7 @@ snapshots: '@evilmartians/lefthook@1.13.6': {} - '@faker-js/faker@10.0.0': {} + '@faker-js/faker@10.1.0': {} '@floating-ui/core@1.7.3': dependencies: @@ -13350,7 +13235,7 @@ snapshots: '@floating-ui/utils': 0.2.10 react: 19.2.0 react-dom: 19.2.0(react@19.2.0) - tabbable: 6.2.0 + tabbable: 6.3.0 '@floating-ui/utils@0.2.10': {} @@ -13386,33 +13271,33 @@ snapshots: '@hapi/pinpoint@2.0.1': {} - '@hapi/tlds@1.1.3': {} + '@hapi/tlds@1.1.4': {} '@hapi/topo@6.0.2': dependencies: '@hapi/hoek': 11.0.7 - '@hey-api/codegen-core@0.2.0(typescript@5.9.3)': + '@hey-api/codegen-core@0.3.2(typescript@5.9.3)': dependencies: typescript: 5.9.3 - '@hey-api/json-schema-ref-parser@1.2.0': + '@hey-api/json-schema-ref-parser@1.2.1': dependencies: '@jsdevtools/ono': 7.1.3 '@types/json-schema': 7.0.15 js-yaml: 4.1.0 lodash: 4.17.21 - '@hey-api/openapi-ts@0.85.1(magicast@0.3.5)(typescript@5.9.3)': + '@hey-api/openapi-ts@0.86.11(magicast@0.3.5)(typescript@5.9.3)': dependencies: - '@hey-api/codegen-core': 0.2.0(typescript@5.9.3) - '@hey-api/json-schema-ref-parser': 1.2.0 + '@hey-api/codegen-core': 0.3.2(typescript@5.9.3) + '@hey-api/json-schema-ref-parser': 1.2.1 ansi-colors: 4.1.3 - c12: 3.3.0(magicast@0.3.5) + c12: 3.3.1(magicast@0.3.5) color-support: 1.1.3 - commander: 13.0.0 + commander: 14.0.1 handlebars: 4.7.8 - open: 10.1.2 + open: 10.2.0 semver: 7.7.2 typescript: 5.9.3 transitivePeerDependencies: @@ -13436,21 +13321,21 @@ snapshots: - utf-8-validate optional: true - '@hono/node-server@1.19.5(hono@4.9.11)': + '@hono/node-server@1.19.5(hono@4.10.4)': dependencies: - hono: 4.9.11 + hono: 4.10.4 - '@hono/zod-openapi@1.1.3(hono@4.9.11)(zod@4.1.12)': + '@hono/zod-openapi@1.1.4(hono@4.10.4)(zod@4.1.12)': dependencies: '@asteasolutions/zod-to-openapi': 8.1.0(zod@4.1.12) - '@hono/zod-validator': 0.7.4(hono@4.9.11)(zod@4.1.12) - hono: 4.9.11 + '@hono/zod-validator': 0.7.4(hono@4.10.4)(zod@4.1.12) + hono: 4.10.4 openapi3-ts: 4.5.0 zod: 4.1.12 - '@hono/zod-validator@0.7.4(hono@4.9.11)(zod@4.1.12)': + '@hono/zod-validator@0.7.4(hono@4.10.4)(zod@4.1.12)': dependencies: - hono: 4.9.11 + hono: 4.10.4 zod: 4.1.12 '@hookform/resolvers@3.10.0(react-hook-form@7.65.0(react@19.2.0))': @@ -13492,7 +13377,7 @@ snapshots: '@inquirer/figures': 1.0.12 '@inquirer/type': 2.0.0 '@types/mute-stream': 0.0.4 - '@types/node': 22.18.10 + '@types/node': 22.18.13 '@types/wrap-ansi': 3.0.0 ansi-escapes: 4.3.2 cli-width: 4.1.0 @@ -13585,18 +13470,14 @@ snapshots: wrap-ansi: 8.1.0 wrap-ansi-cjs: wrap-ansi@7.0.0 - '@isaacs/fs-minipass@4.0.1': - dependencies: - minipass: 7.1.2 - '@istanbuljs/schema@0.1.3': {} - '@joshwooding/vite-plugin-react-docgen-typescript@0.6.1(typescript@5.9.3)(vite@7.1.9(@types/node@24.7.2)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1))': + '@joshwooding/vite-plugin-react-docgen-typescript@0.6.1(typescript@5.9.3)(vite@7.1.12(@types/node@24.9.2)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1))': dependencies: glob: 10.4.5 - magic-string: 0.30.19 + magic-string: 0.30.21 react-docgen-typescript: 2.4.0(typescript@5.9.3) - vite: 7.1.9(@types/node@24.7.2)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1) + vite: 7.1.12(@types/node@24.9.2)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1) optionalDependencies: typescript: 5.9.3 @@ -13642,20 +13523,20 @@ snapshots: dot-prop: 8.0.2 htmlparser2: 9.1.0 micromatch: 4.0.8 - style-to-object: 1.0.11 + style-to-object: 1.0.12 - '@jsx-email/plugin-inline@1.0.1(jsx-email@2.7.4)': + '@jsx-email/plugin-inline@1.0.1(jsx-email@2.8.1)': dependencies: '@adobe/css-tools': 4.4.4 hast-util-select: 6.0.4 hast-util-to-string: 3.0.1 - jsx-email: 2.7.4(@emotion/is-prop-valid@1.3.1)(@jsx-email/plugin-inline@1.0.1)(@jsx-email/plugin-minify@1.0.1)(@jsx-email/plugin-pretty@1.0.0)(@types/node@24.7.2)(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(lightningcss@1.30.1)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(terser@5.44.0)(ts-node@10.9.2(@swc/core@1.7.26)(@types/node@24.7.2)(typescript@5.9.3))(typescript@5.9.3) + jsx-email: 2.8.1(@emotion/is-prop-valid@1.3.1)(@jsx-email/plugin-inline@1.0.1)(@jsx-email/plugin-minify@1.0.1)(@jsx-email/plugin-pretty@1.0.0)(@types/node@24.9.2)(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(jiti@2.6.1)(lightningcss@1.30.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(terser@5.44.0)(ts-node@10.9.2(@swc/core@1.7.26)(@types/node@24.9.2)(typescript@5.9.3))(tsx@4.20.6)(typescript@5.9.3)(yaml@2.8.1) unist-util-remove: 4.0.0 unist-util-visit: 5.0.0 - '@jsx-email/plugin-minify@1.0.1(jsx-email@2.7.4)': + '@jsx-email/plugin-minify@1.0.1(jsx-email@2.8.1)': dependencies: - jsx-email: 2.7.4(@emotion/is-prop-valid@1.3.1)(@jsx-email/plugin-inline@1.0.1)(@jsx-email/plugin-minify@1.0.1)(@jsx-email/plugin-pretty@1.0.0)(@types/node@24.7.2)(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(lightningcss@1.30.1)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(terser@5.44.0)(ts-node@10.9.2(@swc/core@1.7.26)(@types/node@24.7.2)(typescript@5.9.3))(typescript@5.9.3) + jsx-email: 2.8.1(@emotion/is-prop-valid@1.3.1)(@jsx-email/plugin-inline@1.0.1)(@jsx-email/plugin-minify@1.0.1)(@jsx-email/plugin-pretty@1.0.0)(@types/node@24.9.2)(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(jiti@2.6.1)(lightningcss@1.30.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(terser@5.44.0)(ts-node@10.9.2(@swc/core@1.7.26)(@types/node@24.9.2)(typescript@5.9.3))(tsx@4.20.6)(typescript@5.9.3)(yaml@2.8.1) rehype-minify-attribute-whitespace: 4.0.1 rehype-minify-css-style: 4.0.1 rehype-minify-enumerated-attribute: 5.0.2 @@ -13675,9 +13556,9 @@ snapshots: rehype-sort-attributes: 5.0.1 unified: 11.0.5 - '@jsx-email/plugin-pretty@1.0.0(jsx-email@2.7.4)': + '@jsx-email/plugin-pretty@1.0.0(jsx-email@2.8.1)': dependencies: - jsx-email: 2.7.4(@emotion/is-prop-valid@1.3.1)(@jsx-email/plugin-inline@1.0.1)(@jsx-email/plugin-minify@1.0.1)(@jsx-email/plugin-pretty@1.0.0)(@types/node@24.7.2)(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(lightningcss@1.30.1)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(terser@5.44.0)(ts-node@10.9.2(@swc/core@1.7.26)(@types/node@24.7.2)(typescript@5.9.3))(typescript@5.9.3) + jsx-email: 2.8.1(@emotion/is-prop-valid@1.3.1)(@jsx-email/plugin-inline@1.0.1)(@jsx-email/plugin-minify@1.0.1)(@jsx-email/plugin-pretty@1.0.0)(@types/node@24.9.2)(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(jiti@2.6.1)(lightningcss@1.30.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(terser@5.44.0)(ts-node@10.9.2(@swc/core@1.7.26)(@types/node@24.9.2)(typescript@5.9.3))(tsx@4.20.6)(typescript@5.9.3)(yaml@2.8.1) pretty: 2.0.0 '@libsql/client-wasm@0.14.0': @@ -13727,15 +13608,15 @@ snapshots: '@napi-rs/wasm-runtime@0.2.12': dependencies: - '@emnapi/core': 1.5.0 - '@emnapi/runtime': 1.5.0 + '@emnapi/core': 1.6.0 + '@emnapi/runtime': 1.6.0 '@tybys/wasm-util': 0.10.1 optional: true '@napi-rs/wasm-runtime@1.0.7': dependencies: - '@emnapi/core': 1.5.0 - '@emnapi/runtime': 1.5.0 + '@emnapi/core': 1.6.0 + '@emnapi/runtime': 1.6.0 '@tybys/wasm-util': 0.10.1 optional: true @@ -13869,9 +13750,9 @@ snapshots: '@nodelib/fs.scandir': 2.1.5 fastq: 1.19.1 - '@novu/api@1.7.1': + '@novu/api@1.8.0': dependencies: - zod: 3.25.76 + zod: 4.1.12 '@one-ini/wasm@0.1.1': {} @@ -13893,6 +13774,10 @@ snapshots: dependencies: '@opentelemetry/api': 1.9.0 + '@opentelemetry/context-async-hooks@2.2.0(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/core@1.30.1(@opentelemetry/api@1.9.0)': dependencies: '@opentelemetry/api': 1.9.0 @@ -13903,6 +13788,11 @@ snapshots: '@opentelemetry/api': 1.9.0 '@opentelemetry/semantic-conventions': 1.37.0 + '@opentelemetry/core@2.2.0(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/semantic-conventions': 1.37.0 + '@opentelemetry/exporter-logs-otlp-grpc@0.206.0(@opentelemetry/api@1.9.0)': dependencies: '@grpc/grpc-js': 1.14.0 @@ -14214,7 +14104,7 @@ snapshots: '@opentelemetry/api': 1.9.0 '@opentelemetry/api-logs': 0.206.0 import-in-the-middle: 1.15.0 - require-in-the-middle: 8.0.0 + require-in-the-middle: 8.0.1 transitivePeerDependencies: - supports-color @@ -14279,6 +14169,12 @@ snapshots: '@opentelemetry/core': 2.1.0(@opentelemetry/api@1.9.0) '@opentelemetry/semantic-conventions': 1.37.0 + '@opentelemetry/resources@2.2.0(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/core': 2.2.0(@opentelemetry/api@1.9.0) + '@opentelemetry/semantic-conventions': 1.37.0 + '@opentelemetry/sdk-logs@0.206.0(@opentelemetry/api@1.9.0)': dependencies: '@opentelemetry/api': 1.9.0 @@ -14334,6 +14230,13 @@ snapshots: '@opentelemetry/resources': 2.1.0(@opentelemetry/api@1.9.0) '@opentelemetry/semantic-conventions': 1.37.0 + '@opentelemetry/sdk-trace-base@2.2.0(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/core': 2.2.0(@opentelemetry/api@1.9.0) + '@opentelemetry/resources': 2.2.0(@opentelemetry/api@1.9.0) + '@opentelemetry/semantic-conventions': 1.37.0 + '@opentelemetry/sdk-trace-node@2.1.0(@opentelemetry/api@1.9.0)': dependencies: '@opentelemetry/api': 1.9.0 @@ -14341,6 +14244,13 @@ snapshots: '@opentelemetry/core': 2.1.0(@opentelemetry/api@1.9.0) '@opentelemetry/sdk-trace-base': 2.1.0(@opentelemetry/api@1.9.0) + '@opentelemetry/sdk-trace-node@2.2.0(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/context-async-hooks': 2.2.0(@opentelemetry/api@1.9.0) + '@opentelemetry/core': 2.2.0(@opentelemetry/api@1.9.0) + '@opentelemetry/sdk-trace-base': 2.2.0(@opentelemetry/api@1.9.0) + '@opentelemetry/semantic-conventions@1.28.0': {} '@opentelemetry/semantic-conventions@1.37.0': {} @@ -14394,63 +14304,63 @@ snapshots: '@oslojs/crypto': 1.0.0 '@oslojs/encoding': 1.0.0 - '@oxc-resolver/binding-android-arm-eabi@11.9.0': + '@oxc-resolver/binding-android-arm-eabi@11.12.0': optional: true - '@oxc-resolver/binding-android-arm64@11.9.0': + '@oxc-resolver/binding-android-arm64@11.12.0': optional: true - '@oxc-resolver/binding-darwin-arm64@11.9.0': + '@oxc-resolver/binding-darwin-arm64@11.12.0': optional: true - '@oxc-resolver/binding-darwin-x64@11.9.0': + '@oxc-resolver/binding-darwin-x64@11.12.0': optional: true - '@oxc-resolver/binding-freebsd-x64@11.9.0': + '@oxc-resolver/binding-freebsd-x64@11.12.0': optional: true - '@oxc-resolver/binding-linux-arm-gnueabihf@11.9.0': + '@oxc-resolver/binding-linux-arm-gnueabihf@11.12.0': optional: true - '@oxc-resolver/binding-linux-arm-musleabihf@11.9.0': + '@oxc-resolver/binding-linux-arm-musleabihf@11.12.0': optional: true - '@oxc-resolver/binding-linux-arm64-gnu@11.9.0': + '@oxc-resolver/binding-linux-arm64-gnu@11.12.0': optional: true - '@oxc-resolver/binding-linux-arm64-musl@11.9.0': + '@oxc-resolver/binding-linux-arm64-musl@11.12.0': optional: true - '@oxc-resolver/binding-linux-ppc64-gnu@11.9.0': + '@oxc-resolver/binding-linux-ppc64-gnu@11.12.0': optional: true - '@oxc-resolver/binding-linux-riscv64-gnu@11.9.0': + '@oxc-resolver/binding-linux-riscv64-gnu@11.12.0': optional: true - '@oxc-resolver/binding-linux-riscv64-musl@11.9.0': + '@oxc-resolver/binding-linux-riscv64-musl@11.12.0': optional: true - '@oxc-resolver/binding-linux-s390x-gnu@11.9.0': + '@oxc-resolver/binding-linux-s390x-gnu@11.12.0': optional: true - '@oxc-resolver/binding-linux-x64-gnu@11.9.0': + '@oxc-resolver/binding-linux-x64-gnu@11.12.0': optional: true - '@oxc-resolver/binding-linux-x64-musl@11.9.0': + '@oxc-resolver/binding-linux-x64-musl@11.12.0': optional: true - '@oxc-resolver/binding-wasm32-wasi@11.9.0': + '@oxc-resolver/binding-wasm32-wasi@11.12.0': dependencies: '@napi-rs/wasm-runtime': 1.0.7 optional: true - '@oxc-resolver/binding-win32-arm64-msvc@11.9.0': + '@oxc-resolver/binding-win32-arm64-msvc@11.12.0': optional: true - '@oxc-resolver/binding-win32-ia32-msvc@11.9.0': + '@oxc-resolver/binding-win32-ia32-msvc@11.12.0': optional: true - '@oxc-resolver/binding-win32-x64-msvc@11.9.0': + '@oxc-resolver/binding-win32-x64-msvc@11.12.0': optional: true '@paddle/paddle-js@1.4.2': {} @@ -14520,6 +14430,8 @@ snapshots: '@petamoriken/float16@3.9.3': optional: true + '@pinojs/redact@0.4.0': {} + '@pivanov/utils@0.0.2(react-dom@19.2.0(react@19.2.0))(react@19.2.0)': dependencies: react: 19.2.0 @@ -14575,59 +14487,59 @@ snapshots: '@radix-ui/primitive@1.1.3': {} - '@radix-ui/react-accordion@1.2.12(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)': + '@radix-ui/react-accordion@1.2.12(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)': dependencies: '@radix-ui/primitive': 1.1.3 - '@radix-ui/react-collapsible': 1.1.12(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) - '@radix-ui/react-collection': 1.1.7(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@radix-ui/react-collapsible': 1.1.12(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@radix-ui/react-collection': 1.1.7(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.2)(react@19.2.0) '@radix-ui/react-context': 1.1.2(@types/react@19.2.2)(react@19.2.0) '@radix-ui/react-direction': 1.1.1(@types/react@19.2.2)(react@19.2.0) '@radix-ui/react-id': 1.1.1(@types/react@19.2.2)(react@19.2.0) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.2)(react@19.2.0) react: 19.2.0 react-dom: 19.2.0(react@19.2.0) optionalDependencies: '@types/react': 19.2.2 - '@types/react-dom': 19.2.1(@types/react@19.2.2) + '@types/react-dom': 19.2.2(@types/react@19.2.2) - '@radix-ui/react-alert-dialog@1.1.15(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)': + '@radix-ui/react-alert-dialog@1.1.15(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)': dependencies: '@radix-ui/primitive': 1.1.3 '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.2)(react@19.2.0) '@radix-ui/react-context': 1.1.2(@types/react@19.2.2)(react@19.2.0) - '@radix-ui/react-dialog': 1.1.15(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@radix-ui/react-dialog': 1.1.15(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) '@radix-ui/react-slot': 1.2.3(@types/react@19.2.2)(react@19.2.0) react: 19.2.0 react-dom: 19.2.0(react@19.2.0) optionalDependencies: '@types/react': 19.2.2 - '@types/react-dom': 19.2.1(@types/react@19.2.2) + '@types/react-dom': 19.2.2(@types/react@19.2.2) - '@radix-ui/react-arrow@1.1.0(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)': + '@radix-ui/react-arrow@1.1.0(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)': dependencies: - '@radix-ui/react-primitive': 2.0.0(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@radix-ui/react-primitive': 2.0.0(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) react: 19.2.0 react-dom: 19.2.0(react@19.2.0) optionalDependencies: '@types/react': 19.2.2 - '@types/react-dom': 19.2.1(@types/react@19.2.2) + '@types/react-dom': 19.2.2(@types/react@19.2.2) - '@radix-ui/react-arrow@1.1.7(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)': + '@radix-ui/react-arrow@1.1.7(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)': dependencies: - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) react: 19.2.0 react-dom: 19.2.0(react@19.2.0) optionalDependencies: '@types/react': 19.2.2 - '@types/react-dom': 19.2.1(@types/react@19.2.2) + '@types/react-dom': 19.2.2(@types/react@19.2.2) - '@radix-ui/react-avatar@1.1.10(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)': + '@radix-ui/react-avatar@1.1.10(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)': dependencies: '@radix-ui/react-context': 1.1.2(@types/react@19.2.2)(react@19.2.0) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.2.2)(react@19.2.0) '@radix-ui/react-use-is-hydrated': 0.1.0(@types/react@19.2.2)(react@19.2.0) '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.2)(react@19.2.0) @@ -14635,15 +14547,15 @@ snapshots: react-dom: 19.2.0(react@19.2.0) optionalDependencies: '@types/react': 19.2.2 - '@types/react-dom': 19.2.1(@types/react@19.2.2) + '@types/react-dom': 19.2.2(@types/react@19.2.2) - '@radix-ui/react-checkbox@1.3.3(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)': + '@radix-ui/react-checkbox@1.3.3(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)': dependencies: '@radix-ui/primitive': 1.1.3 '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.2)(react@19.2.0) '@radix-ui/react-context': 1.1.2(@types/react@19.2.2)(react@19.2.0) - '@radix-ui/react-presence': 1.1.5(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@radix-ui/react-presence': 1.1.5(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.2)(react@19.2.0) '@radix-ui/react-use-previous': 1.1.1(@types/react@19.2.2)(react@19.2.0) '@radix-ui/react-use-size': 1.1.1(@types/react@19.2.2)(react@19.2.0) @@ -14651,63 +14563,63 @@ snapshots: react-dom: 19.2.0(react@19.2.0) optionalDependencies: '@types/react': 19.2.2 - '@types/react-dom': 19.2.1(@types/react@19.2.2) + '@types/react-dom': 19.2.2(@types/react@19.2.2) - '@radix-ui/react-collapsible@1.1.1(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)': + '@radix-ui/react-collapsible@1.1.1(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)': dependencies: '@radix-ui/primitive': 1.1.0 '@radix-ui/react-compose-refs': 1.1.0(@types/react@19.2.2)(react@19.2.0) '@radix-ui/react-context': 1.1.1(@types/react@19.2.2)(react@19.2.0) '@radix-ui/react-id': 1.1.0(@types/react@19.2.2)(react@19.2.0) - '@radix-ui/react-presence': 1.1.1(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) - '@radix-ui/react-primitive': 2.0.0(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@radix-ui/react-presence': 1.1.1(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@radix-ui/react-primitive': 2.0.0(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) '@radix-ui/react-use-controllable-state': 1.1.0(@types/react@19.2.2)(react@19.2.0) '@radix-ui/react-use-layout-effect': 1.1.0(@types/react@19.2.2)(react@19.2.0) react: 19.2.0 react-dom: 19.2.0(react@19.2.0) optionalDependencies: '@types/react': 19.2.2 - '@types/react-dom': 19.2.1(@types/react@19.2.2) + '@types/react-dom': 19.2.2(@types/react@19.2.2) - '@radix-ui/react-collapsible@1.1.12(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)': + '@radix-ui/react-collapsible@1.1.12(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)': dependencies: '@radix-ui/primitive': 1.1.3 '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.2)(react@19.2.0) '@radix-ui/react-context': 1.1.2(@types/react@19.2.2)(react@19.2.0) '@radix-ui/react-id': 1.1.1(@types/react@19.2.2)(react@19.2.0) - '@radix-ui/react-presence': 1.1.5(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@radix-ui/react-presence': 1.1.5(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.2)(react@19.2.0) '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.2)(react@19.2.0) react: 19.2.0 react-dom: 19.2.0(react@19.2.0) optionalDependencies: '@types/react': 19.2.2 - '@types/react-dom': 19.2.1(@types/react@19.2.2) + '@types/react-dom': 19.2.2(@types/react@19.2.2) - '@radix-ui/react-collection@1.1.0(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)': + '@radix-ui/react-collection@1.1.0(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)': dependencies: '@radix-ui/react-compose-refs': 1.1.0(@types/react@19.2.2)(react@19.2.0) '@radix-ui/react-context': 1.1.0(@types/react@19.2.2)(react@19.2.0) - '@radix-ui/react-primitive': 2.0.0(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@radix-ui/react-primitive': 2.0.0(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) '@radix-ui/react-slot': 1.1.0(@types/react@19.2.2)(react@19.2.0) react: 19.2.0 react-dom: 19.2.0(react@19.2.0) optionalDependencies: '@types/react': 19.2.2 - '@types/react-dom': 19.2.1(@types/react@19.2.2) + '@types/react-dom': 19.2.2(@types/react@19.2.2) - '@radix-ui/react-collection@1.1.7(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)': + '@radix-ui/react-collection@1.1.7(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)': dependencies: '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.2)(react@19.2.0) '@radix-ui/react-context': 1.1.2(@types/react@19.2.2)(react@19.2.0) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) '@radix-ui/react-slot': 1.2.3(@types/react@19.2.2)(react@19.2.0) react: 19.2.0 react-dom: 19.2.0(react@19.2.0) optionalDependencies: '@types/react': 19.2.2 - '@types/react-dom': 19.2.1(@types/react@19.2.2) + '@types/react-dom': 19.2.2(@types/react@19.2.2) '@radix-ui/react-compose-refs@1.1.0(@types/react@19.2.2)(react@19.2.0)': dependencies: @@ -14721,19 +14633,19 @@ snapshots: optionalDependencies: '@types/react': 19.2.2 - '@radix-ui/react-context-menu@2.2.16(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)': + '@radix-ui/react-context-menu@2.2.16(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)': dependencies: '@radix-ui/primitive': 1.1.3 '@radix-ui/react-context': 1.1.2(@types/react@19.2.2)(react@19.2.0) - '@radix-ui/react-menu': 2.1.16(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@radix-ui/react-menu': 2.1.16(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.2.2)(react@19.2.0) '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.2)(react@19.2.0) react: 19.2.0 react-dom: 19.2.0(react@19.2.0) optionalDependencies: '@types/react': 19.2.2 - '@types/react-dom': 19.2.1(@types/react@19.2.2) + '@types/react-dom': 19.2.2(@types/react@19.2.2) '@radix-ui/react-context@1.1.0(@types/react@19.2.2)(react@19.2.0)': dependencies: @@ -14753,18 +14665,18 @@ snapshots: optionalDependencies: '@types/react': 19.2.2 - '@radix-ui/react-dialog@1.1.15(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)': + '@radix-ui/react-dialog@1.1.15(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)': dependencies: '@radix-ui/primitive': 1.1.3 '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.2)(react@19.2.0) '@radix-ui/react-context': 1.1.2(@types/react@19.2.2)(react@19.2.0) - '@radix-ui/react-dismissable-layer': 1.1.11(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@radix-ui/react-dismissable-layer': 1.1.11(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) '@radix-ui/react-focus-guards': 1.1.3(@types/react@19.2.2)(react@19.2.0) - '@radix-ui/react-focus-scope': 1.1.7(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@radix-ui/react-focus-scope': 1.1.7(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) '@radix-ui/react-id': 1.1.1(@types/react@19.2.2)(react@19.2.0) - '@radix-ui/react-portal': 1.1.9(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) - '@radix-ui/react-presence': 1.1.5(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@radix-ui/react-portal': 1.1.9(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@radix-ui/react-presence': 1.1.5(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) '@radix-ui/react-slot': 1.2.3(@types/react@19.2.2)(react@19.2.0) '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.2)(react@19.2.0) aria-hidden: 1.2.6 @@ -14773,7 +14685,7 @@ snapshots: react-remove-scroll: 2.7.1(@types/react@19.2.2)(react@19.2.0) optionalDependencies: '@types/react': 19.2.2 - '@types/react-dom': 19.2.1(@types/react@19.2.2) + '@types/react-dom': 19.2.2(@types/react@19.2.2) '@radix-ui/react-direction@1.1.0(@types/react@19.2.2)(react@19.2.0)': dependencies: @@ -14787,46 +14699,46 @@ snapshots: optionalDependencies: '@types/react': 19.2.2 - '@radix-ui/react-dismissable-layer@1.1.1(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)': + '@radix-ui/react-dismissable-layer@1.1.1(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)': dependencies: '@radix-ui/primitive': 1.1.0 '@radix-ui/react-compose-refs': 1.1.0(@types/react@19.2.2)(react@19.2.0) - '@radix-ui/react-primitive': 2.0.0(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@radix-ui/react-primitive': 2.0.0(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) '@radix-ui/react-use-callback-ref': 1.1.0(@types/react@19.2.2)(react@19.2.0) '@radix-ui/react-use-escape-keydown': 1.1.0(@types/react@19.2.2)(react@19.2.0) react: 19.2.0 react-dom: 19.2.0(react@19.2.0) optionalDependencies: '@types/react': 19.2.2 - '@types/react-dom': 19.2.1(@types/react@19.2.2) + '@types/react-dom': 19.2.2(@types/react@19.2.2) - '@radix-ui/react-dismissable-layer@1.1.11(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)': + '@radix-ui/react-dismissable-layer@1.1.11(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)': dependencies: '@radix-ui/primitive': 1.1.3 '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.2)(react@19.2.0) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.2.2)(react@19.2.0) '@radix-ui/react-use-escape-keydown': 1.1.1(@types/react@19.2.2)(react@19.2.0) react: 19.2.0 react-dom: 19.2.0(react@19.2.0) optionalDependencies: '@types/react': 19.2.2 - '@types/react-dom': 19.2.1(@types/react@19.2.2) + '@types/react-dom': 19.2.2(@types/react@19.2.2) - '@radix-ui/react-dropdown-menu@2.1.16(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)': + '@radix-ui/react-dropdown-menu@2.1.16(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)': dependencies: '@radix-ui/primitive': 1.1.3 '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.2)(react@19.2.0) '@radix-ui/react-context': 1.1.2(@types/react@19.2.2)(react@19.2.0) '@radix-ui/react-id': 1.1.1(@types/react@19.2.2)(react@19.2.0) - '@radix-ui/react-menu': 2.1.16(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@radix-ui/react-menu': 2.1.16(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.2)(react@19.2.0) react: 19.2.0 react-dom: 19.2.0(react@19.2.0) optionalDependencies: '@types/react': 19.2.2 - '@types/react-dom': 19.2.1(@types/react@19.2.2) + '@types/react-dom': 19.2.2(@types/react@19.2.2) '@radix-ui/react-focus-guards@1.1.1(@types/react@19.2.2)(react@19.2.0)': dependencies: @@ -14840,44 +14752,44 @@ snapshots: optionalDependencies: '@types/react': 19.2.2 - '@radix-ui/react-focus-scope@1.1.0(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)': + '@radix-ui/react-focus-scope@1.1.0(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)': dependencies: '@radix-ui/react-compose-refs': 1.1.0(@types/react@19.2.2)(react@19.2.0) - '@radix-ui/react-primitive': 2.0.0(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@radix-ui/react-primitive': 2.0.0(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) '@radix-ui/react-use-callback-ref': 1.1.0(@types/react@19.2.2)(react@19.2.0) react: 19.2.0 react-dom: 19.2.0(react@19.2.0) optionalDependencies: '@types/react': 19.2.2 - '@types/react-dom': 19.2.1(@types/react@19.2.2) + '@types/react-dom': 19.2.2(@types/react@19.2.2) - '@radix-ui/react-focus-scope@1.1.7(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)': + '@radix-ui/react-focus-scope@1.1.7(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)': dependencies: '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.2)(react@19.2.0) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.2.2)(react@19.2.0) react: 19.2.0 react-dom: 19.2.0(react@19.2.0) optionalDependencies: '@types/react': 19.2.2 - '@types/react-dom': 19.2.1(@types/react@19.2.2) + '@types/react-dom': 19.2.2(@types/react@19.2.2) - '@radix-ui/react-hover-card@1.1.15(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)': + '@radix-ui/react-hover-card@1.1.15(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)': dependencies: '@radix-ui/primitive': 1.1.3 '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.2)(react@19.2.0) '@radix-ui/react-context': 1.1.2(@types/react@19.2.2)(react@19.2.0) - '@radix-ui/react-dismissable-layer': 1.1.11(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) - '@radix-ui/react-popper': 1.2.8(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) - '@radix-ui/react-portal': 1.1.9(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) - '@radix-ui/react-presence': 1.1.5(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@radix-ui/react-dismissable-layer': 1.1.11(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@radix-ui/react-popper': 1.2.8(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@radix-ui/react-portal': 1.1.9(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@radix-ui/react-presence': 1.1.5(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.2)(react@19.2.0) react: 19.2.0 react-dom: 19.2.0(react@19.2.0) optionalDependencies: '@types/react': 19.2.2 - '@types/react-dom': 19.2.1(@types/react@19.2.2) + '@types/react-dom': 19.2.2(@types/react@19.2.2) '@radix-ui/react-icons@1.3.2(react@19.2.0)': dependencies: @@ -14897,31 +14809,31 @@ snapshots: optionalDependencies: '@types/react': 19.2.2 - '@radix-ui/react-label@2.1.7(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)': + '@radix-ui/react-label@2.1.7(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)': dependencies: - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) react: 19.2.0 react-dom: 19.2.0(react@19.2.0) optionalDependencies: '@types/react': 19.2.2 - '@types/react-dom': 19.2.1(@types/react@19.2.2) + '@types/react-dom': 19.2.2(@types/react@19.2.2) - '@radix-ui/react-menu@2.1.16(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)': + '@radix-ui/react-menu@2.1.16(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)': dependencies: '@radix-ui/primitive': 1.1.3 - '@radix-ui/react-collection': 1.1.7(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@radix-ui/react-collection': 1.1.7(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.2)(react@19.2.0) '@radix-ui/react-context': 1.1.2(@types/react@19.2.2)(react@19.2.0) '@radix-ui/react-direction': 1.1.1(@types/react@19.2.2)(react@19.2.0) - '@radix-ui/react-dismissable-layer': 1.1.11(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@radix-ui/react-dismissable-layer': 1.1.11(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) '@radix-ui/react-focus-guards': 1.1.3(@types/react@19.2.2)(react@19.2.0) - '@radix-ui/react-focus-scope': 1.1.7(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@radix-ui/react-focus-scope': 1.1.7(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) '@radix-ui/react-id': 1.1.1(@types/react@19.2.2)(react@19.2.0) - '@radix-ui/react-popper': 1.2.8(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) - '@radix-ui/react-portal': 1.1.9(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) - '@radix-ui/react-presence': 1.1.5(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) - '@radix-ui/react-roving-focus': 1.1.11(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@radix-ui/react-popper': 1.2.8(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@radix-ui/react-portal': 1.1.9(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@radix-ui/react-presence': 1.1.5(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@radix-ui/react-roving-focus': 1.1.11(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) '@radix-ui/react-slot': 1.2.3(@types/react@19.2.2)(react@19.2.0) '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.2.2)(react@19.2.0) aria-hidden: 1.2.6 @@ -14930,21 +14842,21 @@ snapshots: react-remove-scroll: 2.7.1(@types/react@19.2.2)(react@19.2.0) optionalDependencies: '@types/react': 19.2.2 - '@types/react-dom': 19.2.1(@types/react@19.2.2) + '@types/react-dom': 19.2.2(@types/react@19.2.2) - '@radix-ui/react-popover@1.1.15(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)': + '@radix-ui/react-popover@1.1.15(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)': dependencies: '@radix-ui/primitive': 1.1.3 '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.2)(react@19.2.0) '@radix-ui/react-context': 1.1.2(@types/react@19.2.2)(react@19.2.0) - '@radix-ui/react-dismissable-layer': 1.1.11(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@radix-ui/react-dismissable-layer': 1.1.11(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) '@radix-ui/react-focus-guards': 1.1.3(@types/react@19.2.2)(react@19.2.0) - '@radix-ui/react-focus-scope': 1.1.7(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@radix-ui/react-focus-scope': 1.1.7(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) '@radix-ui/react-id': 1.1.1(@types/react@19.2.2)(react@19.2.0) - '@radix-ui/react-popper': 1.2.8(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) - '@radix-ui/react-portal': 1.1.9(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) - '@radix-ui/react-presence': 1.1.5(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@radix-ui/react-popper': 1.2.8(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@radix-ui/react-portal': 1.1.9(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@radix-ui/react-presence': 1.1.5(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) '@radix-ui/react-slot': 1.2.3(@types/react@19.2.2)(react@19.2.0) '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.2)(react@19.2.0) aria-hidden: 1.2.6 @@ -14953,21 +14865,21 @@ snapshots: react-remove-scroll: 2.7.1(@types/react@19.2.2)(react@19.2.0) optionalDependencies: '@types/react': 19.2.2 - '@types/react-dom': 19.2.1(@types/react@19.2.2) + '@types/react-dom': 19.2.2(@types/react@19.2.2) - '@radix-ui/react-popover@1.1.2(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)': + '@radix-ui/react-popover@1.1.2(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)': dependencies: '@radix-ui/primitive': 1.1.0 '@radix-ui/react-compose-refs': 1.1.0(@types/react@19.2.2)(react@19.2.0) '@radix-ui/react-context': 1.1.1(@types/react@19.2.2)(react@19.2.0) - '@radix-ui/react-dismissable-layer': 1.1.1(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@radix-ui/react-dismissable-layer': 1.1.1(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) '@radix-ui/react-focus-guards': 1.1.1(@types/react@19.2.2)(react@19.2.0) - '@radix-ui/react-focus-scope': 1.1.0(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@radix-ui/react-focus-scope': 1.1.0(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) '@radix-ui/react-id': 1.1.0(@types/react@19.2.2)(react@19.2.0) - '@radix-ui/react-popper': 1.2.0(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) - '@radix-ui/react-portal': 1.1.2(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) - '@radix-ui/react-presence': 1.1.1(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) - '@radix-ui/react-primitive': 2.0.0(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@radix-ui/react-popper': 1.2.0(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@radix-ui/react-portal': 1.1.2(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@radix-ui/react-presence': 1.1.1(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@radix-ui/react-primitive': 2.0.0(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) '@radix-ui/react-slot': 1.1.0(@types/react@19.2.2)(react@19.2.0) '@radix-ui/react-use-controllable-state': 1.1.0(@types/react@19.2.2)(react@19.2.0) aria-hidden: 1.2.6 @@ -14976,15 +14888,15 @@ snapshots: react-remove-scroll: 2.6.0(@types/react@19.2.2)(react@19.2.0) optionalDependencies: '@types/react': 19.2.2 - '@types/react-dom': 19.2.1(@types/react@19.2.2) + '@types/react-dom': 19.2.2(@types/react@19.2.2) - '@radix-ui/react-popper@1.2.0(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)': + '@radix-ui/react-popper@1.2.0(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)': dependencies: '@floating-ui/react-dom': 2.1.6(react-dom@19.2.0(react@19.2.0))(react@19.2.0) - '@radix-ui/react-arrow': 1.1.0(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@radix-ui/react-arrow': 1.1.0(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) '@radix-ui/react-compose-refs': 1.1.0(@types/react@19.2.2)(react@19.2.0) '@radix-ui/react-context': 1.1.0(@types/react@19.2.2)(react@19.2.0) - '@radix-ui/react-primitive': 2.0.0(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@radix-ui/react-primitive': 2.0.0(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) '@radix-ui/react-use-callback-ref': 1.1.0(@types/react@19.2.2)(react@19.2.0) '@radix-ui/react-use-layout-effect': 1.1.0(@types/react@19.2.2)(react@19.2.0) '@radix-ui/react-use-rect': 1.1.0(@types/react@19.2.2)(react@19.2.0) @@ -14994,15 +14906,15 @@ snapshots: react-dom: 19.2.0(react@19.2.0) optionalDependencies: '@types/react': 19.2.2 - '@types/react-dom': 19.2.1(@types/react@19.2.2) + '@types/react-dom': 19.2.2(@types/react@19.2.2) - '@radix-ui/react-popper@1.2.8(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)': + '@radix-ui/react-popper@1.2.8(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)': dependencies: '@floating-ui/react-dom': 2.1.6(react-dom@19.2.0(react@19.2.0))(react@19.2.0) - '@radix-ui/react-arrow': 1.1.7(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@radix-ui/react-arrow': 1.1.7(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.2)(react@19.2.0) '@radix-ui/react-context': 1.1.2(@types/react@19.2.2)(react@19.2.0) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.2.2)(react@19.2.0) '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.2)(react@19.2.0) '@radix-ui/react-use-rect': 1.1.1(@types/react@19.2.2)(react@19.2.0) @@ -15012,29 +14924,29 @@ snapshots: react-dom: 19.2.0(react@19.2.0) optionalDependencies: '@types/react': 19.2.2 - '@types/react-dom': 19.2.1(@types/react@19.2.2) + '@types/react-dom': 19.2.2(@types/react@19.2.2) - '@radix-ui/react-portal@1.1.2(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)': + '@radix-ui/react-portal@1.1.2(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)': dependencies: - '@radix-ui/react-primitive': 2.0.0(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@radix-ui/react-primitive': 2.0.0(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) '@radix-ui/react-use-layout-effect': 1.1.0(@types/react@19.2.2)(react@19.2.0) react: 19.2.0 react-dom: 19.2.0(react@19.2.0) optionalDependencies: '@types/react': 19.2.2 - '@types/react-dom': 19.2.1(@types/react@19.2.2) + '@types/react-dom': 19.2.2(@types/react@19.2.2) - '@radix-ui/react-portal@1.1.9(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)': + '@radix-ui/react-portal@1.1.9(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)': dependencies: - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.2)(react@19.2.0) react: 19.2.0 react-dom: 19.2.0(react@19.2.0) optionalDependencies: '@types/react': 19.2.2 - '@types/react-dom': 19.2.1(@types/react@19.2.2) + '@types/react-dom': 19.2.2(@types/react@19.2.2) - '@radix-ui/react-presence@1.1.1(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)': + '@radix-ui/react-presence@1.1.1(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)': dependencies: '@radix-ui/react-compose-refs': 1.1.0(@types/react@19.2.2)(react@19.2.0) '@radix-ui/react-use-layout-effect': 1.1.0(@types/react@19.2.2)(react@19.2.0) @@ -15042,9 +14954,9 @@ snapshots: react-dom: 19.2.0(react@19.2.0) optionalDependencies: '@types/react': 19.2.2 - '@types/react-dom': 19.2.1(@types/react@19.2.2) + '@types/react-dom': 19.2.2(@types/react@19.2.2) - '@radix-ui/react-presence@1.1.5(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)': + '@radix-ui/react-presence@1.1.5(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)': dependencies: '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.2)(react@19.2.0) '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.2)(react@19.2.0) @@ -15052,45 +14964,45 @@ snapshots: react-dom: 19.2.0(react@19.2.0) optionalDependencies: '@types/react': 19.2.2 - '@types/react-dom': 19.2.1(@types/react@19.2.2) + '@types/react-dom': 19.2.2(@types/react@19.2.2) - '@radix-ui/react-primitive@2.0.0(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)': + '@radix-ui/react-primitive@2.0.0(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)': dependencies: '@radix-ui/react-slot': 1.1.0(@types/react@19.2.2)(react@19.2.0) react: 19.2.0 react-dom: 19.2.0(react@19.2.0) optionalDependencies: '@types/react': 19.2.2 - '@types/react-dom': 19.2.1(@types/react@19.2.2) + '@types/react-dom': 19.2.2(@types/react@19.2.2) - '@radix-ui/react-primitive@2.1.3(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)': + '@radix-ui/react-primitive@2.1.3(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)': dependencies: '@radix-ui/react-slot': 1.2.3(@types/react@19.2.2)(react@19.2.0) react: 19.2.0 react-dom: 19.2.0(react@19.2.0) optionalDependencies: '@types/react': 19.2.2 - '@types/react-dom': 19.2.1(@types/react@19.2.2) + '@types/react-dom': 19.2.2(@types/react@19.2.2) - '@radix-ui/react-progress@1.1.7(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)': + '@radix-ui/react-progress@1.1.7(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)': dependencies: '@radix-ui/react-context': 1.1.2(@types/react@19.2.2)(react@19.2.0) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) react: 19.2.0 react-dom: 19.2.0(react@19.2.0) optionalDependencies: '@types/react': 19.2.2 - '@types/react-dom': 19.2.1(@types/react@19.2.2) + '@types/react-dom': 19.2.2(@types/react@19.2.2) - '@radix-ui/react-radio-group@1.3.8(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)': + '@radix-ui/react-radio-group@1.3.8(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)': dependencies: '@radix-ui/primitive': 1.1.3 '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.2)(react@19.2.0) '@radix-ui/react-context': 1.1.2(@types/react@19.2.2)(react@19.2.0) '@radix-ui/react-direction': 1.1.1(@types/react@19.2.2)(react@19.2.0) - '@radix-ui/react-presence': 1.1.5(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) - '@radix-ui/react-roving-focus': 1.1.11(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@radix-ui/react-presence': 1.1.5(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@radix-ui/react-roving-focus': 1.1.11(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.2)(react@19.2.0) '@radix-ui/react-use-previous': 1.1.1(@types/react@19.2.2)(react@19.2.0) '@radix-ui/react-use-size': 1.1.1(@types/react@19.2.2)(react@19.2.0) @@ -15098,106 +15010,106 @@ snapshots: react-dom: 19.2.0(react@19.2.0) optionalDependencies: '@types/react': 19.2.2 - '@types/react-dom': 19.2.1(@types/react@19.2.2) + '@types/react-dom': 19.2.2(@types/react@19.2.2) - '@radix-ui/react-roving-focus@1.1.0(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)': + '@radix-ui/react-roving-focus@1.1.0(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)': dependencies: '@radix-ui/primitive': 1.1.0 - '@radix-ui/react-collection': 1.1.0(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@radix-ui/react-collection': 1.1.0(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) '@radix-ui/react-compose-refs': 1.1.0(@types/react@19.2.2)(react@19.2.0) '@radix-ui/react-context': 1.1.0(@types/react@19.2.2)(react@19.2.0) '@radix-ui/react-direction': 1.1.0(@types/react@19.2.2)(react@19.2.0) '@radix-ui/react-id': 1.1.0(@types/react@19.2.2)(react@19.2.0) - '@radix-ui/react-primitive': 2.0.0(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@radix-ui/react-primitive': 2.0.0(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) '@radix-ui/react-use-callback-ref': 1.1.0(@types/react@19.2.2)(react@19.2.0) '@radix-ui/react-use-controllable-state': 1.1.0(@types/react@19.2.2)(react@19.2.0) react: 19.2.0 react-dom: 19.2.0(react@19.2.0) optionalDependencies: '@types/react': 19.2.2 - '@types/react-dom': 19.2.1(@types/react@19.2.2) + '@types/react-dom': 19.2.2(@types/react@19.2.2) - '@radix-ui/react-roving-focus@1.1.11(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)': + '@radix-ui/react-roving-focus@1.1.11(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)': dependencies: '@radix-ui/primitive': 1.1.3 - '@radix-ui/react-collection': 1.1.7(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@radix-ui/react-collection': 1.1.7(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.2)(react@19.2.0) '@radix-ui/react-context': 1.1.2(@types/react@19.2.2)(react@19.2.0) '@radix-ui/react-direction': 1.1.1(@types/react@19.2.2)(react@19.2.0) '@radix-ui/react-id': 1.1.1(@types/react@19.2.2)(react@19.2.0) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.2.2)(react@19.2.0) '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.2)(react@19.2.0) react: 19.2.0 react-dom: 19.2.0(react@19.2.0) optionalDependencies: '@types/react': 19.2.2 - '@types/react-dom': 19.2.1(@types/react@19.2.2) + '@types/react-dom': 19.2.2(@types/react@19.2.2) - '@radix-ui/react-scroll-area@1.2.10(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)': + '@radix-ui/react-scroll-area@1.2.10(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)': dependencies: '@radix-ui/number': 1.1.1 '@radix-ui/primitive': 1.1.3 '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.2)(react@19.2.0) '@radix-ui/react-context': 1.1.2(@types/react@19.2.2)(react@19.2.0) '@radix-ui/react-direction': 1.1.1(@types/react@19.2.2)(react@19.2.0) - '@radix-ui/react-presence': 1.1.5(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@radix-ui/react-presence': 1.1.5(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.2.2)(react@19.2.0) '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.2)(react@19.2.0) react: 19.2.0 react-dom: 19.2.0(react@19.2.0) optionalDependencies: '@types/react': 19.2.2 - '@types/react-dom': 19.2.1(@types/react@19.2.2) + '@types/react-dom': 19.2.2(@types/react@19.2.2) - '@radix-ui/react-select@2.2.6(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)': + '@radix-ui/react-select@2.2.6(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)': dependencies: '@radix-ui/number': 1.1.1 '@radix-ui/primitive': 1.1.3 - '@radix-ui/react-collection': 1.1.7(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@radix-ui/react-collection': 1.1.7(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.2)(react@19.2.0) '@radix-ui/react-context': 1.1.2(@types/react@19.2.2)(react@19.2.0) '@radix-ui/react-direction': 1.1.1(@types/react@19.2.2)(react@19.2.0) - '@radix-ui/react-dismissable-layer': 1.1.11(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@radix-ui/react-dismissable-layer': 1.1.11(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) '@radix-ui/react-focus-guards': 1.1.3(@types/react@19.2.2)(react@19.2.0) - '@radix-ui/react-focus-scope': 1.1.7(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@radix-ui/react-focus-scope': 1.1.7(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) '@radix-ui/react-id': 1.1.1(@types/react@19.2.2)(react@19.2.0) - '@radix-ui/react-popper': 1.2.8(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) - '@radix-ui/react-portal': 1.1.9(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@radix-ui/react-popper': 1.2.8(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@radix-ui/react-portal': 1.1.9(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) '@radix-ui/react-slot': 1.2.3(@types/react@19.2.2)(react@19.2.0) '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.2.2)(react@19.2.0) '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.2)(react@19.2.0) '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.2)(react@19.2.0) '@radix-ui/react-use-previous': 1.1.1(@types/react@19.2.2)(react@19.2.0) - '@radix-ui/react-visually-hidden': 1.2.3(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@radix-ui/react-visually-hidden': 1.2.3(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) aria-hidden: 1.2.6 react: 19.2.0 react-dom: 19.2.0(react@19.2.0) react-remove-scroll: 2.7.1(@types/react@19.2.2)(react@19.2.0) optionalDependencies: '@types/react': 19.2.2 - '@types/react-dom': 19.2.1(@types/react@19.2.2) + '@types/react-dom': 19.2.2(@types/react@19.2.2) - '@radix-ui/react-separator@1.1.7(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)': + '@radix-ui/react-separator@1.1.7(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)': dependencies: - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) react: 19.2.0 react-dom: 19.2.0(react@19.2.0) optionalDependencies: '@types/react': 19.2.2 - '@types/react-dom': 19.2.1(@types/react@19.2.2) + '@types/react-dom': 19.2.2(@types/react@19.2.2) - '@radix-ui/react-slider@1.3.6(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)': + '@radix-ui/react-slider@1.3.6(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)': dependencies: '@radix-ui/number': 1.1.1 '@radix-ui/primitive': 1.1.3 - '@radix-ui/react-collection': 1.1.7(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@radix-ui/react-collection': 1.1.7(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.2)(react@19.2.0) '@radix-ui/react-context': 1.1.2(@types/react@19.2.2)(react@19.2.0) '@radix-ui/react-direction': 1.1.1(@types/react@19.2.2)(react@19.2.0) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.2)(react@19.2.0) '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.2)(react@19.2.0) '@radix-ui/react-use-previous': 1.1.1(@types/react@19.2.2)(react@19.2.0) @@ -15206,7 +15118,7 @@ snapshots: react-dom: 19.2.0(react@19.2.0) optionalDependencies: '@types/react': 19.2.2 - '@types/react-dom': 19.2.1(@types/react@19.2.2) + '@types/react-dom': 19.2.2(@types/react@19.2.2) '@radix-ui/react-slot@1.1.0(@types/react@19.2.2)(react@19.2.0)': dependencies: @@ -15222,12 +15134,12 @@ snapshots: optionalDependencies: '@types/react': 19.2.2 - '@radix-ui/react-switch@1.2.6(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)': + '@radix-ui/react-switch@1.2.6(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)': dependencies: '@radix-ui/primitive': 1.1.3 '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.2)(react@19.2.0) '@radix-ui/react-context': 1.1.2(@types/react@19.2.2)(react@19.2.0) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.2)(react@19.2.0) '@radix-ui/react-use-previous': 1.1.1(@types/react@19.2.2)(react@19.2.0) '@radix-ui/react-use-size': 1.1.1(@types/react@19.2.2)(react@19.2.0) @@ -15235,115 +15147,115 @@ snapshots: react-dom: 19.2.0(react@19.2.0) optionalDependencies: '@types/react': 19.2.2 - '@types/react-dom': 19.2.1(@types/react@19.2.2) + '@types/react-dom': 19.2.2(@types/react@19.2.2) - '@radix-ui/react-tabs@1.1.13(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)': + '@radix-ui/react-tabs@1.1.13(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)': dependencies: '@radix-ui/primitive': 1.1.3 '@radix-ui/react-context': 1.1.2(@types/react@19.2.2)(react@19.2.0) '@radix-ui/react-direction': 1.1.1(@types/react@19.2.2)(react@19.2.0) '@radix-ui/react-id': 1.1.1(@types/react@19.2.2)(react@19.2.0) - '@radix-ui/react-presence': 1.1.5(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) - '@radix-ui/react-roving-focus': 1.1.11(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@radix-ui/react-presence': 1.1.5(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@radix-ui/react-roving-focus': 1.1.11(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.2)(react@19.2.0) react: 19.2.0 react-dom: 19.2.0(react@19.2.0) optionalDependencies: '@types/react': 19.2.2 - '@types/react-dom': 19.2.1(@types/react@19.2.2) + '@types/react-dom': 19.2.2(@types/react@19.2.2) - '@radix-ui/react-toast@1.2.15(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)': + '@radix-ui/react-toast@1.2.15(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)': dependencies: '@radix-ui/primitive': 1.1.3 - '@radix-ui/react-collection': 1.1.7(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@radix-ui/react-collection': 1.1.7(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.2)(react@19.2.0) '@radix-ui/react-context': 1.1.2(@types/react@19.2.2)(react@19.2.0) - '@radix-ui/react-dismissable-layer': 1.1.11(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) - '@radix-ui/react-portal': 1.1.9(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) - '@radix-ui/react-presence': 1.1.5(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@radix-ui/react-dismissable-layer': 1.1.11(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@radix-ui/react-portal': 1.1.9(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@radix-ui/react-presence': 1.1.5(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.2.2)(react@19.2.0) '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.2)(react@19.2.0) '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.2)(react@19.2.0) - '@radix-ui/react-visually-hidden': 1.2.3(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@radix-ui/react-visually-hidden': 1.2.3(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) react: 19.2.0 react-dom: 19.2.0(react@19.2.0) optionalDependencies: '@types/react': 19.2.2 - '@types/react-dom': 19.2.1(@types/react@19.2.2) + '@types/react-dom': 19.2.2(@types/react@19.2.2) - '@radix-ui/react-toggle-group@1.1.0(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)': + '@radix-ui/react-toggle-group@1.1.0(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)': dependencies: '@radix-ui/primitive': 1.1.0 '@radix-ui/react-context': 1.1.0(@types/react@19.2.2)(react@19.2.0) '@radix-ui/react-direction': 1.1.0(@types/react@19.2.2)(react@19.2.0) - '@radix-ui/react-primitive': 2.0.0(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) - '@radix-ui/react-roving-focus': 1.1.0(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) - '@radix-ui/react-toggle': 1.1.0(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@radix-ui/react-primitive': 2.0.0(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@radix-ui/react-roving-focus': 1.1.0(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@radix-ui/react-toggle': 1.1.0(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) '@radix-ui/react-use-controllable-state': 1.1.0(@types/react@19.2.2)(react@19.2.0) react: 19.2.0 react-dom: 19.2.0(react@19.2.0) optionalDependencies: '@types/react': 19.2.2 - '@types/react-dom': 19.2.1(@types/react@19.2.2) + '@types/react-dom': 19.2.2(@types/react@19.2.2) - '@radix-ui/react-toggle-group@1.1.11(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)': + '@radix-ui/react-toggle-group@1.1.11(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)': dependencies: '@radix-ui/primitive': 1.1.3 '@radix-ui/react-context': 1.1.2(@types/react@19.2.2)(react@19.2.0) '@radix-ui/react-direction': 1.1.1(@types/react@19.2.2)(react@19.2.0) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) - '@radix-ui/react-roving-focus': 1.1.11(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) - '@radix-ui/react-toggle': 1.1.10(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@radix-ui/react-roving-focus': 1.1.11(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@radix-ui/react-toggle': 1.1.10(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.2)(react@19.2.0) react: 19.2.0 react-dom: 19.2.0(react@19.2.0) optionalDependencies: '@types/react': 19.2.2 - '@types/react-dom': 19.2.1(@types/react@19.2.2) + '@types/react-dom': 19.2.2(@types/react@19.2.2) - '@radix-ui/react-toggle@1.1.0(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)': + '@radix-ui/react-toggle@1.1.0(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)': dependencies: '@radix-ui/primitive': 1.1.0 - '@radix-ui/react-primitive': 2.0.0(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@radix-ui/react-primitive': 2.0.0(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) '@radix-ui/react-use-controllable-state': 1.1.0(@types/react@19.2.2)(react@19.2.0) react: 19.2.0 react-dom: 19.2.0(react@19.2.0) optionalDependencies: '@types/react': 19.2.2 - '@types/react-dom': 19.2.1(@types/react@19.2.2) + '@types/react-dom': 19.2.2(@types/react@19.2.2) - '@radix-ui/react-toggle@1.1.10(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)': + '@radix-ui/react-toggle@1.1.10(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)': dependencies: '@radix-ui/primitive': 1.1.3 - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.2)(react@19.2.0) react: 19.2.0 react-dom: 19.2.0(react@19.2.0) optionalDependencies: '@types/react': 19.2.2 - '@types/react-dom': 19.2.1(@types/react@19.2.2) + '@types/react-dom': 19.2.2(@types/react@19.2.2) - '@radix-ui/react-tooltip@1.2.8(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)': + '@radix-ui/react-tooltip@1.2.8(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)': dependencies: '@radix-ui/primitive': 1.1.3 '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.2)(react@19.2.0) '@radix-ui/react-context': 1.1.2(@types/react@19.2.2)(react@19.2.0) - '@radix-ui/react-dismissable-layer': 1.1.11(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@radix-ui/react-dismissable-layer': 1.1.11(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) '@radix-ui/react-id': 1.1.1(@types/react@19.2.2)(react@19.2.0) - '@radix-ui/react-popper': 1.2.8(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) - '@radix-ui/react-portal': 1.1.9(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) - '@radix-ui/react-presence': 1.1.5(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@radix-ui/react-popper': 1.2.8(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@radix-ui/react-portal': 1.1.9(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@radix-ui/react-presence': 1.1.5(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) '@radix-ui/react-slot': 1.2.3(@types/react@19.2.2)(react@19.2.0) '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.2)(react@19.2.0) - '@radix-ui/react-visually-hidden': 1.2.3(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@radix-ui/react-visually-hidden': 1.2.3(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) react: 19.2.0 react-dom: 19.2.0(react@19.2.0) optionalDependencies: '@types/react': 19.2.2 - '@types/react-dom': 19.2.1(@types/react@19.2.2) + '@types/react-dom': 19.2.2(@types/react@19.2.2) '@radix-ui/react-use-callback-ref@1.1.0(@types/react@19.2.2)(react@19.2.0)': dependencies: @@ -15446,36 +15358,36 @@ snapshots: optionalDependencies: '@types/react': 19.2.2 - '@radix-ui/react-visually-hidden@1.2.3(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)': + '@radix-ui/react-visually-hidden@1.2.3(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)': dependencies: - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) react: 19.2.0 react-dom: 19.2.0(react@19.2.0) optionalDependencies: '@types/react': 19.2.2 - '@types/react-dom': 19.2.1(@types/react@19.2.2) + '@types/react-dom': 19.2.2(@types/react@19.2.2) '@radix-ui/rect@1.1.0': {} '@radix-ui/rect@1.1.1': {} - '@react-scan/vite-plugin-react-scan@0.1.8(react-scan@0.4.3(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react-router-dom@7.5.2(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(react-router@7.5.2(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(react@19.2.0)(rollup@2.79.2))(vite@7.1.9(@types/node@24.7.2)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1))': + '@react-scan/vite-plugin-react-scan@0.1.8(react-scan@0.4.3(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react-router-dom@7.5.2(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(react-router@7.5.2(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(react@19.2.0)(rollup@2.79.2))(vite@7.1.12(@types/node@24.9.2)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1))': dependencies: - '@babel/core': 7.28.4 - '@babel/plugin-transform-react-jsx': 7.27.1(@babel/core@7.28.4) - '@babel/preset-typescript': 7.27.1(@babel/core@7.28.4) + '@babel/core': 7.28.5 + '@babel/plugin-transform-react-jsx': 7.27.1(@babel/core@7.28.5) + '@babel/preset-typescript': 7.28.5(@babel/core@7.28.5) babel-plugin-add-react-displayname: 0.0.5 cheerio: 1.1.2 react-scan: 0.4.3(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react-router-dom@7.5.2(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(react-router@7.5.2(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(react@19.2.0)(rollup@2.79.2) - vite: 7.1.9(@types/node@24.7.2)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1) + vite: 7.1.12(@types/node@24.9.2)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1) transitivePeerDependencies: - supports-color - '@reduxjs/toolkit@2.9.0(react-redux@9.2.0(@types/react@19.2.2)(react@19.2.0)(redux@5.0.1))(react@19.2.0)': + '@reduxjs/toolkit@2.9.2(react-redux@9.2.0(@types/react@19.2.2)(react@19.2.0)(redux@5.0.1))(react@19.2.0)': dependencies: '@standard-schema/spec': 1.0.0 '@standard-schema/utils': 0.3.0 - immer: 10.1.3 + immer: 10.2.0 redux: 5.0.1 redux-thunk: 3.1.0(redux@5.0.1) reselect: 5.1.1 @@ -15485,13 +15397,11 @@ snapshots: '@remirror/core-constants@3.0.0': {} - '@rolldown/pluginutils@1.0.0-beta.27': {} - - '@rolldown/pluginutils@1.0.0-beta.38': {} + '@rolldown/pluginutils@1.0.0-beta.43': {} - '@rollup/plugin-babel@5.3.1(@babel/core@7.28.4)(@types/babel__core@7.20.5)(rollup@2.79.2)': + '@rollup/plugin-babel@5.3.1(@babel/core@7.28.5)(@types/babel__core@7.20.5)(rollup@2.79.2)': dependencies: - '@babel/core': 7.28.4 + '@babel/core': 7.28.5 '@babel/helper-module-imports': 7.27.1 '@rollup/pluginutils': 3.1.0(rollup@2.79.2) rollup: 2.79.2 @@ -15506,7 +15416,7 @@ snapshots: '@types/resolve': 1.20.2 deepmerge: 4.3.1 is-module: 1.0.0 - resolve: 1.22.10 + resolve: 1.22.11 optionalDependencies: rollup: 2.79.2 @@ -15544,70 +15454,70 @@ snapshots: optionalDependencies: rollup: 2.79.2 - '@rollup/rollup-android-arm-eabi@4.52.4': + '@rollup/rollup-android-arm-eabi@4.52.5': optional: true - '@rollup/rollup-android-arm64@4.52.4': + '@rollup/rollup-android-arm64@4.52.5': optional: true - '@rollup/rollup-darwin-arm64@4.52.4': + '@rollup/rollup-darwin-arm64@4.52.5': optional: true - '@rollup/rollup-darwin-x64@4.52.4': + '@rollup/rollup-darwin-x64@4.52.5': optional: true - '@rollup/rollup-freebsd-arm64@4.52.4': + '@rollup/rollup-freebsd-arm64@4.52.5': optional: true - '@rollup/rollup-freebsd-x64@4.52.4': + '@rollup/rollup-freebsd-x64@4.52.5': optional: true - '@rollup/rollup-linux-arm-gnueabihf@4.52.4': + '@rollup/rollup-linux-arm-gnueabihf@4.52.5': optional: true - '@rollup/rollup-linux-arm-musleabihf@4.52.4': + '@rollup/rollup-linux-arm-musleabihf@4.52.5': optional: true - '@rollup/rollup-linux-arm64-gnu@4.52.4': + '@rollup/rollup-linux-arm64-gnu@4.52.5': optional: true - '@rollup/rollup-linux-arm64-musl@4.52.4': + '@rollup/rollup-linux-arm64-musl@4.52.5': optional: true - '@rollup/rollup-linux-loong64-gnu@4.52.4': + '@rollup/rollup-linux-loong64-gnu@4.52.5': optional: true - '@rollup/rollup-linux-ppc64-gnu@4.52.4': + '@rollup/rollup-linux-ppc64-gnu@4.52.5': optional: true - '@rollup/rollup-linux-riscv64-gnu@4.52.4': + '@rollup/rollup-linux-riscv64-gnu@4.52.5': optional: true - '@rollup/rollup-linux-riscv64-musl@4.52.4': + '@rollup/rollup-linux-riscv64-musl@4.52.5': optional: true - '@rollup/rollup-linux-s390x-gnu@4.52.4': + '@rollup/rollup-linux-s390x-gnu@4.52.5': optional: true - '@rollup/rollup-linux-x64-gnu@4.52.4': + '@rollup/rollup-linux-x64-gnu@4.52.5': optional: true - '@rollup/rollup-linux-x64-musl@4.52.4': + '@rollup/rollup-linux-x64-musl@4.52.5': optional: true - '@rollup/rollup-openharmony-arm64@4.52.4': + '@rollup/rollup-openharmony-arm64@4.52.5': optional: true - '@rollup/rollup-win32-arm64-msvc@4.52.4': + '@rollup/rollup-win32-arm64-msvc@4.52.5': optional: true - '@rollup/rollup-win32-ia32-msvc@4.52.4': + '@rollup/rollup-win32-ia32-msvc@4.52.5': optional: true - '@rollup/rollup-win32-x64-gnu@4.52.4': + '@rollup/rollup-win32-x64-gnu@4.52.5': optional: true - '@rollup/rollup-win32-x64-msvc@4.52.4': + '@rollup/rollup-win32-x64-msvc@4.52.5': optional: true '@rrweb/record@2.0.0-alpha.18': @@ -15619,26 +15529,28 @@ snapshots: '@rrweb/utils@2.0.0-alpha.18': {} - '@scalar/core@0.3.19': + '@scalar/core@0.3.20': dependencies: - '@scalar/types': 0.3.1 + '@scalar/types': 0.3.2 - '@scalar/hono-api-reference@0.9.21(hono@4.9.11)': + '@scalar/hono-api-reference@0.9.22(hono@4.10.4)': dependencies: - '@scalar/core': 0.3.19 - hono: 4.9.11 + '@scalar/core': 0.3.20 + hono: 4.10.4 - '@scalar/openapi-types@0.4.1': + '@scalar/openapi-types@0.5.0': dependencies: zod: 4.1.11 - '@scalar/types@0.3.1': + '@scalar/types@0.3.2': dependencies: - '@scalar/openapi-types': 0.4.1 + '@scalar/openapi-types': 0.5.0 nanoid: 5.1.5 - type-fest: 4.41.0 + type-fest: 5.0.0 zod: 4.1.11 + '@sec-ant/readable-stream@0.4.1': {} + '@selderee/plugin-htmlparser2@0.11.0': dependencies: domhandler: 5.0.3 @@ -15647,7 +15559,7 @@ snapshots: '@sendgrid/client@8.1.6': dependencies: '@sendgrid/helpers': 8.0.0 - axios: 1.12.2 + axios: 1.13.1 transitivePeerDependencies: - debug @@ -15662,44 +15574,44 @@ snapshots: transitivePeerDependencies: - debug - '@sentry-internal/browser-utils@9.46.0': + '@sentry-internal/browser-utils@10.22.0': dependencies: - '@sentry/core': 9.46.0 + '@sentry/core': 10.22.0 - '@sentry-internal/feedback@9.46.0': + '@sentry-internal/feedback@10.22.0': dependencies: - '@sentry/core': 9.46.0 + '@sentry/core': 10.22.0 '@sentry-internal/node-cpu-profiler@2.2.0': dependencies: detect-libc: 2.1.2 - node-abi: 3.78.0 + node-abi: 3.80.0 - '@sentry-internal/replay-canvas@9.46.0': + '@sentry-internal/replay-canvas@10.22.0': dependencies: - '@sentry-internal/replay': 9.46.0 - '@sentry/core': 9.46.0 + '@sentry-internal/replay': 10.22.0 + '@sentry/core': 10.22.0 - '@sentry-internal/replay@9.46.0': + '@sentry-internal/replay@10.22.0': dependencies: - '@sentry-internal/browser-utils': 9.46.0 - '@sentry/core': 9.46.0 + '@sentry-internal/browser-utils': 10.22.0 + '@sentry/core': 10.22.0 - '@sentry/babel-plugin-component-annotate@3.6.1': {} + '@sentry/babel-plugin-component-annotate@4.6.0': {} - '@sentry/browser@9.46.0': + '@sentry/browser@10.22.0': dependencies: - '@sentry-internal/browser-utils': 9.46.0 - '@sentry-internal/feedback': 9.46.0 - '@sentry-internal/replay': 9.46.0 - '@sentry-internal/replay-canvas': 9.46.0 - '@sentry/core': 9.46.0 + '@sentry-internal/browser-utils': 10.22.0 + '@sentry-internal/feedback': 10.22.0 + '@sentry-internal/replay': 10.22.0 + '@sentry-internal/replay-canvas': 10.22.0 + '@sentry/core': 10.22.0 - '@sentry/bundler-plugin-core@3.6.1': + '@sentry/bundler-plugin-core@4.6.0': dependencies: - '@babel/core': 7.28.4 - '@sentry/babel-plugin-component-annotate': 3.6.1 - '@sentry/cli': 2.56.1 + '@babel/core': 7.28.5 + '@sentry/babel-plugin-component-annotate': 4.6.0 + '@sentry/cli': 2.57.0 dotenv: 16.6.1 find-up: 5.0.0 glob: 9.3.5 @@ -15709,31 +15621,31 @@ snapshots: - encoding - supports-color - '@sentry/cli-darwin@2.56.1': + '@sentry/cli-darwin@2.57.0': optional: true - '@sentry/cli-linux-arm64@2.56.1': + '@sentry/cli-linux-arm64@2.57.0': optional: true - '@sentry/cli-linux-arm@2.56.1': + '@sentry/cli-linux-arm@2.57.0': optional: true - '@sentry/cli-linux-i686@2.56.1': + '@sentry/cli-linux-i686@2.57.0': optional: true - '@sentry/cli-linux-x64@2.56.1': + '@sentry/cli-linux-x64@2.57.0': optional: true - '@sentry/cli-win32-arm64@2.56.1': + '@sentry/cli-win32-arm64@2.57.0': optional: true - '@sentry/cli-win32-i686@2.56.1': + '@sentry/cli-win32-i686@2.57.0': optional: true - '@sentry/cli-win32-x64@2.56.1': + '@sentry/cli-win32-x64@2.57.0': optional: true - '@sentry/cli@2.56.1': + '@sentry/cli@2.57.0': dependencies: https-proxy-agent: 5.0.1 node-fetch: 2.7.0 @@ -15741,18 +15653,20 @@ snapshots: proxy-from-env: 1.1.0 which: 2.0.2 optionalDependencies: - '@sentry/cli-darwin': 2.56.1 - '@sentry/cli-linux-arm': 2.56.1 - '@sentry/cli-linux-arm64': 2.56.1 - '@sentry/cli-linux-i686': 2.56.1 - '@sentry/cli-linux-x64': 2.56.1 - '@sentry/cli-win32-arm64': 2.56.1 - '@sentry/cli-win32-i686': 2.56.1 - '@sentry/cli-win32-x64': 2.56.1 + '@sentry/cli-darwin': 2.57.0 + '@sentry/cli-linux-arm': 2.57.0 + '@sentry/cli-linux-arm64': 2.57.0 + '@sentry/cli-linux-i686': 2.57.0 + '@sentry/cli-linux-x64': 2.57.0 + '@sentry/cli-win32-arm64': 2.57.0 + '@sentry/cli-win32-i686': 2.57.0 + '@sentry/cli-win32-x64': 2.57.0 transitivePeerDependencies: - encoding - supports-color + '@sentry/core@10.22.0': {} + '@sentry/core@9.46.0': {} '@sentry/node-core@9.46.0(@opentelemetry/api@1.9.0)(@opentelemetry/context-async-hooks@1.30.1(@opentelemetry/api@1.9.0))(@opentelemetry/core@1.30.1(@opentelemetry/api@1.9.0))(@opentelemetry/instrumentation@0.57.2(@opentelemetry/api@1.9.0))(@opentelemetry/resources@1.30.1(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@1.30.1(@opentelemetry/api@1.9.0))(@opentelemetry/semantic-conventions@1.37.0)': @@ -15825,16 +15739,16 @@ snapshots: transitivePeerDependencies: - supports-color - '@sentry/react@9.46.0(react@19.2.0)': + '@sentry/react@10.22.0(react@19.2.0)': dependencies: - '@sentry/browser': 9.46.0 - '@sentry/core': 9.46.0 + '@sentry/browser': 10.22.0 + '@sentry/core': 10.22.0 hoist-non-react-statics: 3.3.2 react: 19.2.0 - '@sentry/vite-plugin@3.6.1': + '@sentry/vite-plugin@4.6.0': dependencies: - '@sentry/bundler-plugin-core': 3.6.1 + '@sentry/bundler-plugin-core': 4.6.0 unplugin: 1.0.1 transitivePeerDependencies: - encoding @@ -15849,9 +15763,9 @@ snapshots: '@types/hast': 3.0.4 hast-util-to-html: 9.0.5 - '@shikijs/core@3.13.0': + '@shikijs/core@3.14.0': dependencies: - '@shikijs/types': 3.13.0 + '@shikijs/types': 3.14.0 '@shikijs/vscode-textmate': 10.0.2 '@types/hast': 3.0.4 hast-util-to-html: 9.0.5 @@ -15862,9 +15776,9 @@ snapshots: '@shikijs/vscode-textmate': 10.0.2 oniguruma-to-es: 2.3.0 - '@shikijs/engine-javascript@3.13.0': + '@shikijs/engine-javascript@3.14.0': dependencies: - '@shikijs/types': 3.13.0 + '@shikijs/types': 3.14.0 '@shikijs/vscode-textmate': 10.0.2 oniguruma-to-es: 4.3.3 @@ -15873,26 +15787,26 @@ snapshots: '@shikijs/types': 1.29.2 '@shikijs/vscode-textmate': 10.0.2 - '@shikijs/langs-precompiled@3.13.0': + '@shikijs/langs-precompiled@3.14.0': dependencies: - '@shikijs/types': 3.13.0 + '@shikijs/types': 3.14.0 oniguruma-to-es: 4.3.3 '@shikijs/langs@1.29.2': dependencies: '@shikijs/types': 1.29.2 - '@shikijs/langs@3.13.0': + '@shikijs/langs@3.14.0': dependencies: - '@shikijs/types': 3.13.0 + '@shikijs/types': 3.14.0 '@shikijs/themes@1.29.2': dependencies: '@shikijs/types': 1.29.2 - '@shikijs/themes@3.13.0': + '@shikijs/themes@3.14.0': dependencies: - '@shikijs/types': 3.13.0 + '@shikijs/types': 3.14.0 '@shikijs/types@1.29.2': dependencies: @@ -15904,13 +15818,20 @@ snapshots: '@shikijs/vscode-textmate': 10.0.2 '@types/hast': 3.0.4 + '@shikijs/types@3.14.0': + dependencies: + '@shikijs/vscode-textmate': 10.0.2 + '@types/hast': 3.0.4 + '@shikijs/vscode-textmate@10.0.2': {} + '@sindresorhus/is@7.1.0': {} + '@sindresorhus/merge-streams@2.3.0': {} - '@smithy/abort-controller@4.2.0': + '@smithy/abort-controller@4.2.4': dependencies: - '@smithy/types': 4.6.0 + '@smithy/types': 4.8.1 tslib: 2.8.1 '@smithy/chunked-blob-reader-native@4.2.1': @@ -15922,96 +15843,97 @@ snapshots: dependencies: tslib: 2.8.1 - '@smithy/config-resolver@4.3.0': + '@smithy/config-resolver@4.4.1': dependencies: - '@smithy/node-config-provider': 4.3.0 - '@smithy/types': 4.6.0 + '@smithy/node-config-provider': 4.3.4 + '@smithy/types': 4.8.1 '@smithy/util-config-provider': 4.2.0 - '@smithy/util-middleware': 4.2.0 + '@smithy/util-endpoints': 3.2.4 + '@smithy/util-middleware': 4.2.4 tslib: 2.8.1 - '@smithy/core@3.15.0': + '@smithy/core@3.17.2': dependencies: - '@smithy/middleware-serde': 4.2.0 - '@smithy/protocol-http': 5.3.0 - '@smithy/types': 4.6.0 + '@smithy/middleware-serde': 4.2.4 + '@smithy/protocol-http': 5.3.4 + '@smithy/types': 4.8.1 '@smithy/util-base64': 4.3.0 '@smithy/util-body-length-browser': 4.2.0 - '@smithy/util-middleware': 4.2.0 - '@smithy/util-stream': 4.5.0 + '@smithy/util-middleware': 4.2.4 + '@smithy/util-stream': 4.5.5 '@smithy/util-utf8': 4.2.0 '@smithy/uuid': 1.1.0 tslib: 2.8.1 - '@smithy/credential-provider-imds@4.2.0': + '@smithy/credential-provider-imds@4.2.4': dependencies: - '@smithy/node-config-provider': 4.3.0 - '@smithy/property-provider': 4.2.0 - '@smithy/types': 4.6.0 - '@smithy/url-parser': 4.2.0 + '@smithy/node-config-provider': 4.3.4 + '@smithy/property-provider': 4.2.4 + '@smithy/types': 4.8.1 + '@smithy/url-parser': 4.2.4 tslib: 2.8.1 - '@smithy/eventstream-codec@4.2.0': + '@smithy/eventstream-codec@4.2.4': dependencies: '@aws-crypto/crc32': 5.2.0 - '@smithy/types': 4.6.0 + '@smithy/types': 4.8.1 '@smithy/util-hex-encoding': 4.2.0 tslib: 2.8.1 - '@smithy/eventstream-serde-browser@4.2.0': + '@smithy/eventstream-serde-browser@4.2.4': dependencies: - '@smithy/eventstream-serde-universal': 4.2.0 - '@smithy/types': 4.6.0 + '@smithy/eventstream-serde-universal': 4.2.4 + '@smithy/types': 4.8.1 tslib: 2.8.1 - '@smithy/eventstream-serde-config-resolver@4.3.0': + '@smithy/eventstream-serde-config-resolver@4.3.4': dependencies: - '@smithy/types': 4.6.0 + '@smithy/types': 4.8.1 tslib: 2.8.1 - '@smithy/eventstream-serde-node@4.2.0': + '@smithy/eventstream-serde-node@4.2.4': dependencies: - '@smithy/eventstream-serde-universal': 4.2.0 - '@smithy/types': 4.6.0 + '@smithy/eventstream-serde-universal': 4.2.4 + '@smithy/types': 4.8.1 tslib: 2.8.1 - '@smithy/eventstream-serde-universal@4.2.0': + '@smithy/eventstream-serde-universal@4.2.4': dependencies: - '@smithy/eventstream-codec': 4.2.0 - '@smithy/types': 4.6.0 + '@smithy/eventstream-codec': 4.2.4 + '@smithy/types': 4.8.1 tslib: 2.8.1 - '@smithy/fetch-http-handler@5.3.1': + '@smithy/fetch-http-handler@5.3.5': dependencies: - '@smithy/protocol-http': 5.3.0 - '@smithy/querystring-builder': 4.2.0 - '@smithy/types': 4.6.0 + '@smithy/protocol-http': 5.3.4 + '@smithy/querystring-builder': 4.2.4 + '@smithy/types': 4.8.1 '@smithy/util-base64': 4.3.0 tslib: 2.8.1 - '@smithy/hash-blob-browser@4.2.1': + '@smithy/hash-blob-browser@4.2.5': dependencies: '@smithy/chunked-blob-reader': 5.2.0 '@smithy/chunked-blob-reader-native': 4.2.1 - '@smithy/types': 4.6.0 + '@smithy/types': 4.8.1 tslib: 2.8.1 - '@smithy/hash-node@4.2.0': + '@smithy/hash-node@4.2.4': dependencies: - '@smithy/types': 4.6.0 + '@smithy/types': 4.8.1 '@smithy/util-buffer-from': 4.2.0 '@smithy/util-utf8': 4.2.0 tslib: 2.8.1 - '@smithy/hash-stream-node@4.2.0': + '@smithy/hash-stream-node@4.2.4': dependencies: - '@smithy/types': 4.6.0 + '@smithy/types': 4.8.1 '@smithy/util-utf8': 4.2.0 tslib: 2.8.1 - '@smithy/invalid-dependency@4.2.0': + '@smithy/invalid-dependency@4.2.4': dependencies: - '@smithy/types': 4.6.0 + '@smithy/types': 4.8.1 tslib: 2.8.1 '@smithy/is-array-buffer@2.2.0': @@ -16022,126 +15944,126 @@ snapshots: dependencies: tslib: 2.8.1 - '@smithy/md5-js@4.2.0': + '@smithy/md5-js@4.2.4': dependencies: - '@smithy/types': 4.6.0 + '@smithy/types': 4.8.1 '@smithy/util-utf8': 4.2.0 tslib: 2.8.1 - '@smithy/middleware-content-length@4.2.0': + '@smithy/middleware-content-length@4.2.4': dependencies: - '@smithy/protocol-http': 5.3.0 - '@smithy/types': 4.6.0 + '@smithy/protocol-http': 5.3.4 + '@smithy/types': 4.8.1 tslib: 2.8.1 - '@smithy/middleware-endpoint@4.3.1': + '@smithy/middleware-endpoint@4.3.6': dependencies: - '@smithy/core': 3.15.0 - '@smithy/middleware-serde': 4.2.0 - '@smithy/node-config-provider': 4.3.0 - '@smithy/shared-ini-file-loader': 4.3.0 - '@smithy/types': 4.6.0 - '@smithy/url-parser': 4.2.0 - '@smithy/util-middleware': 4.2.0 + '@smithy/core': 3.17.2 + '@smithy/middleware-serde': 4.2.4 + '@smithy/node-config-provider': 4.3.4 + '@smithy/shared-ini-file-loader': 4.3.4 + '@smithy/types': 4.8.1 + '@smithy/url-parser': 4.2.4 + '@smithy/util-middleware': 4.2.4 tslib: 2.8.1 - '@smithy/middleware-retry@4.4.1': + '@smithy/middleware-retry@4.4.6': dependencies: - '@smithy/node-config-provider': 4.3.0 - '@smithy/protocol-http': 5.3.0 - '@smithy/service-error-classification': 4.2.0 - '@smithy/smithy-client': 4.7.1 - '@smithy/types': 4.6.0 - '@smithy/util-middleware': 4.2.0 - '@smithy/util-retry': 4.2.0 + '@smithy/node-config-provider': 4.3.4 + '@smithy/protocol-http': 5.3.4 + '@smithy/service-error-classification': 4.2.4 + '@smithy/smithy-client': 4.9.2 + '@smithy/types': 4.8.1 + '@smithy/util-middleware': 4.2.4 + '@smithy/util-retry': 4.2.4 '@smithy/uuid': 1.1.0 tslib: 2.8.1 - '@smithy/middleware-serde@4.2.0': + '@smithy/middleware-serde@4.2.4': dependencies: - '@smithy/protocol-http': 5.3.0 - '@smithy/types': 4.6.0 + '@smithy/protocol-http': 5.3.4 + '@smithy/types': 4.8.1 tslib: 2.8.1 - '@smithy/middleware-stack@4.2.0': + '@smithy/middleware-stack@4.2.4': dependencies: - '@smithy/types': 4.6.0 + '@smithy/types': 4.8.1 tslib: 2.8.1 - '@smithy/node-config-provider@4.3.0': + '@smithy/node-config-provider@4.3.4': dependencies: - '@smithy/property-provider': 4.2.0 - '@smithy/shared-ini-file-loader': 4.3.0 - '@smithy/types': 4.6.0 + '@smithy/property-provider': 4.2.4 + '@smithy/shared-ini-file-loader': 4.3.4 + '@smithy/types': 4.8.1 tslib: 2.8.1 - '@smithy/node-http-handler@4.3.0': + '@smithy/node-http-handler@4.4.4': dependencies: - '@smithy/abort-controller': 4.2.0 - '@smithy/protocol-http': 5.3.0 - '@smithy/querystring-builder': 4.2.0 - '@smithy/types': 4.6.0 + '@smithy/abort-controller': 4.2.4 + '@smithy/protocol-http': 5.3.4 + '@smithy/querystring-builder': 4.2.4 + '@smithy/types': 4.8.1 tslib: 2.8.1 - '@smithy/property-provider@4.2.0': + '@smithy/property-provider@4.2.4': dependencies: - '@smithy/types': 4.6.0 + '@smithy/types': 4.8.1 tslib: 2.8.1 - '@smithy/protocol-http@5.3.0': + '@smithy/protocol-http@5.3.4': dependencies: - '@smithy/types': 4.6.0 + '@smithy/types': 4.8.1 tslib: 2.8.1 - '@smithy/querystring-builder@4.2.0': + '@smithy/querystring-builder@4.2.4': dependencies: - '@smithy/types': 4.6.0 + '@smithy/types': 4.8.1 '@smithy/util-uri-escape': 4.2.0 tslib: 2.8.1 - '@smithy/querystring-parser@4.2.0': + '@smithy/querystring-parser@4.2.4': dependencies: - '@smithy/types': 4.6.0 + '@smithy/types': 4.8.1 tslib: 2.8.1 - '@smithy/service-error-classification@4.2.0': + '@smithy/service-error-classification@4.2.4': dependencies: - '@smithy/types': 4.6.0 + '@smithy/types': 4.8.1 - '@smithy/shared-ini-file-loader@4.3.0': + '@smithy/shared-ini-file-loader@4.3.4': dependencies: - '@smithy/types': 4.6.0 + '@smithy/types': 4.8.1 tslib: 2.8.1 - '@smithy/signature-v4@5.3.0': + '@smithy/signature-v4@5.3.4': dependencies: '@smithy/is-array-buffer': 4.2.0 - '@smithy/protocol-http': 5.3.0 - '@smithy/types': 4.6.0 + '@smithy/protocol-http': 5.3.4 + '@smithy/types': 4.8.1 '@smithy/util-hex-encoding': 4.2.0 - '@smithy/util-middleware': 4.2.0 + '@smithy/util-middleware': 4.2.4 '@smithy/util-uri-escape': 4.2.0 '@smithy/util-utf8': 4.2.0 tslib: 2.8.1 - '@smithy/smithy-client@4.7.1': + '@smithy/smithy-client@4.9.2': dependencies: - '@smithy/core': 3.15.0 - '@smithy/middleware-endpoint': 4.3.1 - '@smithy/middleware-stack': 4.2.0 - '@smithy/protocol-http': 5.3.0 - '@smithy/types': 4.6.0 - '@smithy/util-stream': 4.5.0 + '@smithy/core': 3.17.2 + '@smithy/middleware-endpoint': 4.3.6 + '@smithy/middleware-stack': 4.2.4 + '@smithy/protocol-http': 5.3.4 + '@smithy/types': 4.8.1 + '@smithy/util-stream': 4.5.5 tslib: 2.8.1 - '@smithy/types@4.6.0': + '@smithy/types@4.8.1': dependencies: tslib: 2.8.1 - '@smithy/url-parser@4.2.0': + '@smithy/url-parser@4.2.4': dependencies: - '@smithy/querystring-parser': 4.2.0 - '@smithy/types': 4.6.0 + '@smithy/querystring-parser': 4.2.4 + '@smithy/types': 4.8.1 tslib: 2.8.1 '@smithy/util-base64@4.3.0': @@ -16172,49 +16094,49 @@ snapshots: dependencies: tslib: 2.8.1 - '@smithy/util-defaults-mode-browser@4.3.0': + '@smithy/util-defaults-mode-browser@4.3.5': dependencies: - '@smithy/property-provider': 4.2.0 - '@smithy/smithy-client': 4.7.1 - '@smithy/types': 4.6.0 + '@smithy/property-provider': 4.2.4 + '@smithy/smithy-client': 4.9.2 + '@smithy/types': 4.8.1 tslib: 2.8.1 - '@smithy/util-defaults-mode-node@4.2.1': + '@smithy/util-defaults-mode-node@4.2.7': dependencies: - '@smithy/config-resolver': 4.3.0 - '@smithy/credential-provider-imds': 4.2.0 - '@smithy/node-config-provider': 4.3.0 - '@smithy/property-provider': 4.2.0 - '@smithy/smithy-client': 4.7.1 - '@smithy/types': 4.6.0 + '@smithy/config-resolver': 4.4.1 + '@smithy/credential-provider-imds': 4.2.4 + '@smithy/node-config-provider': 4.3.4 + '@smithy/property-provider': 4.2.4 + '@smithy/smithy-client': 4.9.2 + '@smithy/types': 4.8.1 tslib: 2.8.1 - '@smithy/util-endpoints@3.2.0': + '@smithy/util-endpoints@3.2.4': dependencies: - '@smithy/node-config-provider': 4.3.0 - '@smithy/types': 4.6.0 + '@smithy/node-config-provider': 4.3.4 + '@smithy/types': 4.8.1 tslib: 2.8.1 '@smithy/util-hex-encoding@4.2.0': dependencies: tslib: 2.8.1 - '@smithy/util-middleware@4.2.0': + '@smithy/util-middleware@4.2.4': dependencies: - '@smithy/types': 4.6.0 + '@smithy/types': 4.8.1 tslib: 2.8.1 - '@smithy/util-retry@4.2.0': + '@smithy/util-retry@4.2.4': dependencies: - '@smithy/service-error-classification': 4.2.0 - '@smithy/types': 4.6.0 + '@smithy/service-error-classification': 4.2.4 + '@smithy/types': 4.8.1 tslib: 2.8.1 - '@smithy/util-stream@4.5.0': + '@smithy/util-stream@4.5.5': dependencies: - '@smithy/fetch-http-handler': 5.3.1 - '@smithy/node-http-handler': 4.3.0 - '@smithy/types': 4.6.0 + '@smithy/fetch-http-handler': 5.3.5 + '@smithy/node-http-handler': 4.4.4 + '@smithy/types': 4.8.1 '@smithy/util-base64': 4.3.0 '@smithy/util-buffer-from': 4.2.0 '@smithy/util-hex-encoding': 4.2.0 @@ -16235,10 +16157,10 @@ snapshots: '@smithy/util-buffer-from': 4.2.0 tslib: 2.8.1 - '@smithy/util-waiter@4.2.0': + '@smithy/util-waiter@4.2.4': dependencies: - '@smithy/abort-controller': 4.2.0 - '@smithy/types': 4.6.0 + '@smithy/abort-controller': 4.2.4 + '@smithy/types': 4.8.1 tslib: 2.8.1 '@smithy/uuid@1.1.0': @@ -16249,50 +16171,50 @@ snapshots: '@standard-schema/utils@0.3.0': {} - '@storybook/addon-a11y@9.1.10(storybook@9.1.10(@testing-library/dom@10.4.1)(prettier@3.6.2)(vite@7.1.9(@types/node@24.7.2)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)))': + '@storybook/addon-a11y@9.1.16(storybook@9.1.16(@testing-library/dom@10.4.1)(prettier@3.6.2)(vite@7.1.12(@types/node@24.9.2)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)))': dependencies: '@storybook/global': 5.0.0 axe-core: 4.11.0 - storybook: 9.1.10(@testing-library/dom@10.4.1)(prettier@3.6.2)(vite@7.1.9(@types/node@24.7.2)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)) + storybook: 9.1.16(@testing-library/dom@10.4.1)(prettier@3.6.2)(vite@7.1.12(@types/node@24.9.2)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)) - '@storybook/addon-docs@9.1.10(@types/react@19.2.2)(storybook@9.1.10(@testing-library/dom@10.4.1)(prettier@3.6.2)(vite@7.1.9(@types/node@24.7.2)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)))': + '@storybook/addon-docs@9.1.16(@types/react@19.2.2)(storybook@9.1.16(@testing-library/dom@10.4.1)(prettier@3.6.2)(vite@7.1.12(@types/node@24.9.2)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)))': dependencies: '@mdx-js/react': 3.1.1(@types/react@19.2.2)(react@19.2.0) - '@storybook/csf-plugin': 9.1.10(storybook@9.1.10(@testing-library/dom@10.4.1)(prettier@3.6.2)(vite@7.1.9(@types/node@24.7.2)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1))) + '@storybook/csf-plugin': 9.1.16(storybook@9.1.16(@testing-library/dom@10.4.1)(prettier@3.6.2)(vite@7.1.12(@types/node@24.9.2)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1))) '@storybook/icons': 1.6.0(react-dom@19.2.0(react@19.2.0))(react@19.2.0) - '@storybook/react-dom-shim': 9.1.10(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(storybook@9.1.10(@testing-library/dom@10.4.1)(prettier@3.6.2)(vite@7.1.9(@types/node@24.7.2)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1))) + '@storybook/react-dom-shim': 9.1.16(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(storybook@9.1.16(@testing-library/dom@10.4.1)(prettier@3.6.2)(vite@7.1.12(@types/node@24.9.2)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1))) react: 19.2.0 react-dom: 19.2.0(react@19.2.0) - storybook: 9.1.10(@testing-library/dom@10.4.1)(prettier@3.6.2)(vite@7.1.9(@types/node@24.7.2)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)) + storybook: 9.1.16(@testing-library/dom@10.4.1)(prettier@3.6.2)(vite@7.1.12(@types/node@24.9.2)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)) ts-dedent: 2.2.0 transitivePeerDependencies: - '@types/react' - '@storybook/addon-vitest@9.1.10(@vitest/browser@3.2.4)(@vitest/runner@3.2.4)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(storybook@9.1.10(@testing-library/dom@10.4.1)(prettier@3.6.2)(vite@7.1.9(@types/node@24.7.2)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)))(vitest@3.2.4)': + '@storybook/addon-vitest@9.1.16(@vitest/browser@3.2.4)(@vitest/runner@3.2.4)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(storybook@9.1.16(@testing-library/dom@10.4.1)(prettier@3.6.2)(vite@7.1.12(@types/node@24.9.2)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)))(vitest@3.2.4)': dependencies: '@storybook/global': 5.0.0 '@storybook/icons': 1.6.0(react-dom@19.2.0(react@19.2.0))(react@19.2.0) prompts: 2.4.2 - storybook: 9.1.10(@testing-library/dom@10.4.1)(prettier@3.6.2)(vite@7.1.9(@types/node@24.7.2)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)) + storybook: 9.1.16(@testing-library/dom@10.4.1)(prettier@3.6.2)(vite@7.1.12(@types/node@24.9.2)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)) ts-dedent: 2.2.0 optionalDependencies: - '@vitest/browser': 3.2.4(playwright@1.56.0)(vite@7.1.9(@types/node@24.7.2)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1))(vitest@3.2.4) + '@vitest/browser': 3.2.4(playwright@1.56.1)(vite@7.1.12(@types/node@24.9.2)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1))(vitest@3.2.4) '@vitest/runner': 3.2.4 - vitest: 3.2.4(@types/debug@4.1.12)(@types/node@24.7.2)(@vitest/browser@3.2.4)(jiti@2.6.1)(jsdom@27.0.0(canvas@3.2.0)(postcss@8.5.6))(lightningcss@1.30.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1) + vitest: 3.2.4(@types/debug@4.1.12)(@types/node@24.9.2)(@vitest/browser@3.2.4)(jiti@2.6.1)(jsdom@27.0.1(canvas@3.2.0)(postcss@8.5.6))(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1) transitivePeerDependencies: - react - react-dom - '@storybook/builder-vite@9.1.10(storybook@9.1.10(@testing-library/dom@10.4.1)(prettier@3.6.2)(vite@7.1.9(@types/node@24.7.2)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)))(vite@7.1.9(@types/node@24.7.2)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1))': + '@storybook/builder-vite@9.1.16(storybook@9.1.16(@testing-library/dom@10.4.1)(prettier@3.6.2)(vite@7.1.12(@types/node@24.9.2)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)))(vite@7.1.12(@types/node@24.9.2)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1))': dependencies: - '@storybook/csf-plugin': 9.1.10(storybook@9.1.10(@testing-library/dom@10.4.1)(prettier@3.6.2)(vite@7.1.9(@types/node@24.7.2)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1))) - storybook: 9.1.10(@testing-library/dom@10.4.1)(prettier@3.6.2)(vite@7.1.9(@types/node@24.7.2)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)) + '@storybook/csf-plugin': 9.1.16(storybook@9.1.16(@testing-library/dom@10.4.1)(prettier@3.6.2)(vite@7.1.12(@types/node@24.9.2)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1))) + storybook: 9.1.16(@testing-library/dom@10.4.1)(prettier@3.6.2)(vite@7.1.12(@types/node@24.9.2)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)) ts-dedent: 2.2.0 - vite: 7.1.9(@types/node@24.7.2)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1) + vite: 7.1.12(@types/node@24.9.2)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1) - '@storybook/csf-plugin@9.1.10(storybook@9.1.10(@testing-library/dom@10.4.1)(prettier@3.6.2)(vite@7.1.9(@types/node@24.7.2)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)))': + '@storybook/csf-plugin@9.1.16(storybook@9.1.16(@testing-library/dom@10.4.1)(prettier@3.6.2)(vite@7.1.12(@types/node@24.9.2)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)))': dependencies: - storybook: 9.1.10(@testing-library/dom@10.4.1)(prettier@3.6.2)(vite@7.1.9(@types/node@24.7.2)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)) + storybook: 9.1.16(@testing-library/dom@10.4.1)(prettier@3.6.2)(vite@7.1.12(@types/node@24.9.2)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)) unplugin: 1.16.1 '@storybook/global@5.0.0': {} @@ -16302,39 +16224,39 @@ snapshots: react: 19.2.0 react-dom: 19.2.0(react@19.2.0) - '@storybook/react-dom-shim@9.1.10(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(storybook@9.1.10(@testing-library/dom@10.4.1)(prettier@3.6.2)(vite@7.1.9(@types/node@24.7.2)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)))': + '@storybook/react-dom-shim@9.1.16(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(storybook@9.1.16(@testing-library/dom@10.4.1)(prettier@3.6.2)(vite@7.1.12(@types/node@24.9.2)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)))': dependencies: react: 19.2.0 react-dom: 19.2.0(react@19.2.0) - storybook: 9.1.10(@testing-library/dom@10.4.1)(prettier@3.6.2)(vite@7.1.9(@types/node@24.7.2)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)) + storybook: 9.1.16(@testing-library/dom@10.4.1)(prettier@3.6.2)(vite@7.1.12(@types/node@24.9.2)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)) - '@storybook/react-vite@9.1.10(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(rollup@2.79.2)(storybook@9.1.10(@testing-library/dom@10.4.1)(prettier@3.6.2)(vite@7.1.9(@types/node@24.7.2)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)))(typescript@5.9.3)(vite@7.1.9(@types/node@24.7.2)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1))': + '@storybook/react-vite@9.1.16(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(rollup@2.79.2)(storybook@9.1.16(@testing-library/dom@10.4.1)(prettier@3.6.2)(vite@7.1.12(@types/node@24.9.2)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)))(typescript@5.9.3)(vite@7.1.12(@types/node@24.9.2)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1))': dependencies: - '@joshwooding/vite-plugin-react-docgen-typescript': 0.6.1(typescript@5.9.3)(vite@7.1.9(@types/node@24.7.2)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)) + '@joshwooding/vite-plugin-react-docgen-typescript': 0.6.1(typescript@5.9.3)(vite@7.1.12(@types/node@24.9.2)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)) '@rollup/pluginutils': 5.3.0(rollup@2.79.2) - '@storybook/builder-vite': 9.1.10(storybook@9.1.10(@testing-library/dom@10.4.1)(prettier@3.6.2)(vite@7.1.9(@types/node@24.7.2)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)))(vite@7.1.9(@types/node@24.7.2)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)) - '@storybook/react': 9.1.10(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(storybook@9.1.10(@testing-library/dom@10.4.1)(prettier@3.6.2)(vite@7.1.9(@types/node@24.7.2)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)))(typescript@5.9.3) + '@storybook/builder-vite': 9.1.16(storybook@9.1.16(@testing-library/dom@10.4.1)(prettier@3.6.2)(vite@7.1.12(@types/node@24.9.2)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)))(vite@7.1.12(@types/node@24.9.2)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)) + '@storybook/react': 9.1.16(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(storybook@9.1.16(@testing-library/dom@10.4.1)(prettier@3.6.2)(vite@7.1.12(@types/node@24.9.2)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)))(typescript@5.9.3) find-up: 7.0.0 - magic-string: 0.30.19 + magic-string: 0.30.21 react: 19.2.0 react-docgen: 8.0.2 react-dom: 19.2.0(react@19.2.0) - resolve: 1.22.10 - storybook: 9.1.10(@testing-library/dom@10.4.1)(prettier@3.6.2)(vite@7.1.9(@types/node@24.7.2)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)) + resolve: 1.22.11 + storybook: 9.1.16(@testing-library/dom@10.4.1)(prettier@3.6.2)(vite@7.1.12(@types/node@24.9.2)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)) tsconfig-paths: 4.2.0 - vite: 7.1.9(@types/node@24.7.2)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1) + vite: 7.1.12(@types/node@24.9.2)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1) transitivePeerDependencies: - rollup - supports-color - typescript - '@storybook/react@9.1.10(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(storybook@9.1.10(@testing-library/dom@10.4.1)(prettier@3.6.2)(vite@7.1.9(@types/node@24.7.2)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)))(typescript@5.9.3)': + '@storybook/react@9.1.16(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(storybook@9.1.16(@testing-library/dom@10.4.1)(prettier@3.6.2)(vite@7.1.12(@types/node@24.9.2)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)))(typescript@5.9.3)': dependencies: '@storybook/global': 5.0.0 - '@storybook/react-dom-shim': 9.1.10(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(storybook@9.1.10(@testing-library/dom@10.4.1)(prettier@3.6.2)(vite@7.1.9(@types/node@24.7.2)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1))) + '@storybook/react-dom-shim': 9.1.16(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(storybook@9.1.16(@testing-library/dom@10.4.1)(prettier@3.6.2)(vite@7.1.12(@types/node@24.9.2)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1))) react: 19.2.0 react-dom: 19.2.0(react@19.2.0) - storybook: 9.1.10(@testing-library/dom@10.4.1)(prettier@3.6.2)(vite@7.1.9(@types/node@24.7.2)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)) + storybook: 9.1.16(@testing-library/dom@10.4.1)(prettier@3.6.2)(vite@7.1.12(@types/node@24.9.2)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)) optionalDependencies: typescript: 5.9.3 @@ -16400,127 +16322,128 @@ snapshots: '@swc/counter': 0.1.3 optional: true + '@szmarczak/http-timer@5.0.1': + dependencies: + defer-to-connect: 2.0.1 + '@t3-oss/env-core@0.13.8(arktype@2.1.20)(typescript@5.9.3)(zod@4.1.12)': optionalDependencies: arktype: 2.1.20 typescript: 5.9.3 zod: 4.1.12 - '@tailwindcss/node@4.1.14': + '@tailwindcss/node@4.1.16': dependencies: '@jridgewell/remapping': 2.3.5 enhanced-resolve: 5.18.3 jiti: 2.6.1 - lightningcss: 1.30.1 - magic-string: 0.30.19 + lightningcss: 1.30.2 + magic-string: 0.30.21 source-map-js: 1.2.1 - tailwindcss: 4.1.14 + tailwindcss: 4.1.16 - '@tailwindcss/oxide-android-arm64@4.1.14': + '@tailwindcss/oxide-android-arm64@4.1.16': optional: true - '@tailwindcss/oxide-darwin-arm64@4.1.14': + '@tailwindcss/oxide-darwin-arm64@4.1.16': optional: true - '@tailwindcss/oxide-darwin-x64@4.1.14': + '@tailwindcss/oxide-darwin-x64@4.1.16': optional: true - '@tailwindcss/oxide-freebsd-x64@4.1.14': + '@tailwindcss/oxide-freebsd-x64@4.1.16': optional: true - '@tailwindcss/oxide-linux-arm-gnueabihf@4.1.14': + '@tailwindcss/oxide-linux-arm-gnueabihf@4.1.16': optional: true - '@tailwindcss/oxide-linux-arm64-gnu@4.1.14': + '@tailwindcss/oxide-linux-arm64-gnu@4.1.16': optional: true - '@tailwindcss/oxide-linux-arm64-musl@4.1.14': + '@tailwindcss/oxide-linux-arm64-musl@4.1.16': optional: true - '@tailwindcss/oxide-linux-x64-gnu@4.1.14': + '@tailwindcss/oxide-linux-x64-gnu@4.1.16': optional: true - '@tailwindcss/oxide-linux-x64-musl@4.1.14': + '@tailwindcss/oxide-linux-x64-musl@4.1.16': optional: true - '@tailwindcss/oxide-wasm32-wasi@4.1.14': + '@tailwindcss/oxide-wasm32-wasi@4.1.16': optional: true - '@tailwindcss/oxide-win32-arm64-msvc@4.1.14': + '@tailwindcss/oxide-win32-arm64-msvc@4.1.16': optional: true - '@tailwindcss/oxide-win32-x64-msvc@4.1.14': + '@tailwindcss/oxide-win32-x64-msvc@4.1.16': optional: true - '@tailwindcss/oxide@4.1.14': - dependencies: - detect-libc: 2.1.2 - tar: 7.5.1 + '@tailwindcss/oxide@4.1.16': optionalDependencies: - '@tailwindcss/oxide-android-arm64': 4.1.14 - '@tailwindcss/oxide-darwin-arm64': 4.1.14 - '@tailwindcss/oxide-darwin-x64': 4.1.14 - '@tailwindcss/oxide-freebsd-x64': 4.1.14 - '@tailwindcss/oxide-linux-arm-gnueabihf': 4.1.14 - '@tailwindcss/oxide-linux-arm64-gnu': 4.1.14 - '@tailwindcss/oxide-linux-arm64-musl': 4.1.14 - '@tailwindcss/oxide-linux-x64-gnu': 4.1.14 - '@tailwindcss/oxide-linux-x64-musl': 4.1.14 - '@tailwindcss/oxide-wasm32-wasi': 4.1.14 - '@tailwindcss/oxide-win32-arm64-msvc': 4.1.14 - '@tailwindcss/oxide-win32-x64-msvc': 4.1.14 - - '@tailwindcss/typography@0.5.19(tailwindcss@4.1.14)': + '@tailwindcss/oxide-android-arm64': 4.1.16 + '@tailwindcss/oxide-darwin-arm64': 4.1.16 + '@tailwindcss/oxide-darwin-x64': 4.1.16 + '@tailwindcss/oxide-freebsd-x64': 4.1.16 + '@tailwindcss/oxide-linux-arm-gnueabihf': 4.1.16 + '@tailwindcss/oxide-linux-arm64-gnu': 4.1.16 + '@tailwindcss/oxide-linux-arm64-musl': 4.1.16 + '@tailwindcss/oxide-linux-x64-gnu': 4.1.16 + '@tailwindcss/oxide-linux-x64-musl': 4.1.16 + '@tailwindcss/oxide-wasm32-wasi': 4.1.16 + '@tailwindcss/oxide-win32-arm64-msvc': 4.1.16 + '@tailwindcss/oxide-win32-x64-msvc': 4.1.16 + + '@tailwindcss/typography@0.5.19(tailwindcss@4.1.16)': dependencies: postcss-selector-parser: 6.0.10 - tailwindcss: 4.1.14 + tailwindcss: 4.1.16 - '@tailwindcss/vite@4.1.14(vite@7.1.9(@types/node@24.7.2)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1))': + '@tailwindcss/vite@4.1.16(vite@7.1.12(@types/node@24.9.2)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1))': dependencies: - '@tailwindcss/node': 4.1.14 - '@tailwindcss/oxide': 4.1.14 - tailwindcss: 4.1.14 - vite: 7.1.9(@types/node@24.7.2)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1) + '@tailwindcss/node': 4.1.16 + '@tailwindcss/oxide': 4.1.16 + tailwindcss: 4.1.16 + vite: 7.1.12(@types/node@24.9.2)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1) - '@tanstack/history@1.132.31': {} + '@tanstack/history@1.133.28': {} - '@tanstack/query-core@5.90.2': {} + '@tanstack/query-core@5.90.5': {} '@tanstack/query-devtools@5.90.1': {} - '@tanstack/query-persist-client-core@5.91.1': + '@tanstack/query-persist-client-core@5.91.4': dependencies: - '@tanstack/query-core': 5.90.2 + '@tanstack/query-core': 5.90.5 - '@tanstack/query-sync-storage-persister@5.90.4': + '@tanstack/query-sync-storage-persister@5.90.7': dependencies: - '@tanstack/query-core': 5.90.2 - '@tanstack/query-persist-client-core': 5.91.1 + '@tanstack/query-core': 5.90.5 + '@tanstack/query-persist-client-core': 5.91.4 - '@tanstack/react-query-devtools@5.90.2(@tanstack/react-query@5.90.2(react@19.2.0))(react@19.2.0)': + '@tanstack/react-query-devtools@5.90.2(@tanstack/react-query@5.90.5(react@19.2.0))(react@19.2.0)': dependencies: '@tanstack/query-devtools': 5.90.1 - '@tanstack/react-query': 5.90.2(react@19.2.0) + '@tanstack/react-query': 5.90.5(react@19.2.0) react: 19.2.0 - '@tanstack/react-query-persist-client@5.90.4(@tanstack/react-query@5.90.2(react@19.2.0))(react@19.2.0)': + '@tanstack/react-query-persist-client@5.90.7(@tanstack/react-query@5.90.5(react@19.2.0))(react@19.2.0)': dependencies: - '@tanstack/query-persist-client-core': 5.91.1 - '@tanstack/react-query': 5.90.2(react@19.2.0) + '@tanstack/query-persist-client-core': 5.91.4 + '@tanstack/react-query': 5.90.5(react@19.2.0) react: 19.2.0 - '@tanstack/react-query@5.90.2(react@19.2.0)': + '@tanstack/react-query@5.90.5(react@19.2.0)': dependencies: - '@tanstack/query-core': 5.90.2 + '@tanstack/query-core': 5.90.5 react: 19.2.0 - '@tanstack/react-router-devtools@1.132.51(@tanstack/react-router@1.132.47(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(@tanstack/router-core@1.132.47)(@types/node@24.7.2)(csstype@3.1.3)(jiti@2.6.1)(lightningcss@1.30.1)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(solid-js@1.9.9)(terser@5.44.0)(tiny-invariant@1.3.3)(tsx@4.20.6)(yaml@2.8.1)': + '@tanstack/react-router-devtools@1.133.36(@tanstack/react-router@1.133.36(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(@tanstack/router-core@1.133.36)(@types/node@24.9.2)(csstype@3.1.3)(jiti@2.6.1)(lightningcss@1.30.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(solid-js@1.9.9)(terser@5.44.0)(tiny-invariant@1.3.3)(tsx@4.20.6)(yaml@2.8.1)': dependencies: - '@tanstack/react-router': 1.132.47(react-dom@19.2.0(react@19.2.0))(react@19.2.0) - '@tanstack/router-devtools-core': 1.132.51(@tanstack/router-core@1.132.47)(@types/node@24.7.2)(csstype@3.1.3)(jiti@2.6.1)(lightningcss@1.30.1)(solid-js@1.9.9)(terser@5.44.0)(tiny-invariant@1.3.3)(tsx@4.20.6)(yaml@2.8.1) + '@tanstack/react-router': 1.133.36(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@tanstack/router-devtools-core': 1.133.36(@tanstack/router-core@1.133.36)(@types/node@24.9.2)(csstype@3.1.3)(jiti@2.6.1)(lightningcss@1.30.2)(solid-js@1.9.9)(terser@5.44.0)(tiny-invariant@1.3.3)(tsx@4.20.6)(yaml@2.8.1) react: 19.2.0 react-dom: 19.2.0(react@19.2.0) - vite: 7.1.9(@types/node@24.7.2)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1) + vite: 7.1.12(@types/node@24.9.2)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1) transitivePeerDependencies: - '@tanstack/router-core' - '@types/node' @@ -16538,42 +16461,42 @@ snapshots: - tsx - yaml - '@tanstack/react-router@1.132.47(react-dom@19.2.0(react@19.2.0))(react@19.2.0)': + '@tanstack/react-router@1.133.36(react-dom@19.2.0(react@19.2.0))(react@19.2.0)': dependencies: - '@tanstack/history': 1.132.31 - '@tanstack/react-store': 0.7.7(react-dom@19.2.0(react@19.2.0))(react@19.2.0) - '@tanstack/router-core': 1.132.47 + '@tanstack/history': 1.133.28 + '@tanstack/react-store': 0.8.0(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@tanstack/router-core': 1.133.36 isbot: 5.1.31 react: 19.2.0 react-dom: 19.2.0(react@19.2.0) tiny-invariant: 1.3.3 tiny-warning: 1.0.3 - '@tanstack/react-store@0.7.7(react-dom@19.2.0(react@19.2.0))(react@19.2.0)': + '@tanstack/react-store@0.8.0(react-dom@19.2.0(react@19.2.0))(react@19.2.0)': dependencies: - '@tanstack/store': 0.7.7 + '@tanstack/store': 0.8.0 react: 19.2.0 react-dom: 19.2.0(react@19.2.0) use-sync-external-store: 1.6.0(react@19.2.0) - '@tanstack/router-core@1.132.47': + '@tanstack/router-core@1.133.36': dependencies: - '@tanstack/history': 1.132.31 - '@tanstack/store': 0.7.7 + '@tanstack/history': 1.133.28 + '@tanstack/store': 0.8.0 cookie-es: 2.0.0 seroval: 1.3.2 seroval-plugins: 1.3.3(seroval@1.3.2) tiny-invariant: 1.3.3 tiny-warning: 1.0.3 - '@tanstack/router-devtools-core@1.132.51(@tanstack/router-core@1.132.47)(@types/node@24.7.2)(csstype@3.1.3)(jiti@2.6.1)(lightningcss@1.30.1)(solid-js@1.9.9)(terser@5.44.0)(tiny-invariant@1.3.3)(tsx@4.20.6)(yaml@2.8.1)': + '@tanstack/router-devtools-core@1.133.36(@tanstack/router-core@1.133.36)(@types/node@24.9.2)(csstype@3.1.3)(jiti@2.6.1)(lightningcss@1.30.2)(solid-js@1.9.9)(terser@5.44.0)(tiny-invariant@1.3.3)(tsx@4.20.6)(yaml@2.8.1)': dependencies: - '@tanstack/router-core': 1.132.47 + '@tanstack/router-core': 1.133.36 clsx: 2.1.1 goober: 2.1.18(csstype@3.1.3) solid-js: 1.9.9 tiny-invariant: 1.3.3 - vite: 7.1.9(@types/node@24.7.2)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1) + vite: 7.1.12(@types/node@24.9.2)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1) optionalDependencies: csstype: 3.1.3 transitivePeerDependencies: @@ -16589,11 +16512,11 @@ snapshots: - tsx - yaml - '@tanstack/router-generator@1.132.51': + '@tanstack/router-generator@1.133.36': dependencies: - '@tanstack/router-core': 1.132.47 - '@tanstack/router-utils': 1.132.51 - '@tanstack/virtual-file-routes': 1.132.31 + '@tanstack/router-core': 1.133.36 + '@tanstack/router-utils': 1.133.19 + '@tanstack/virtual-file-routes': 1.133.19 prettier: 3.6.2 recast: 0.23.11 source-map: 0.7.6 @@ -16602,34 +16525,34 @@ snapshots: transitivePeerDependencies: - supports-color - '@tanstack/router-plugin@1.132.51(@tanstack/react-router@1.132.47(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(vite@7.1.9(@types/node@24.7.2)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1))': + '@tanstack/router-plugin@1.133.36(@tanstack/react-router@1.133.36(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(vite@7.1.12(@types/node@24.9.2)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1))': dependencies: - '@babel/core': 7.28.4 - '@babel/plugin-syntax-jsx': 7.27.1(@babel/core@7.28.4) - '@babel/plugin-syntax-typescript': 7.27.1(@babel/core@7.28.4) + '@babel/core': 7.28.5 + '@babel/plugin-syntax-jsx': 7.27.1(@babel/core@7.28.5) + '@babel/plugin-syntax-typescript': 7.27.1(@babel/core@7.28.5) '@babel/template': 7.27.2 - '@babel/traverse': 7.28.4 - '@babel/types': 7.28.4 - '@tanstack/router-core': 1.132.47 - '@tanstack/router-generator': 1.132.51 - '@tanstack/router-utils': 1.132.51 - '@tanstack/virtual-file-routes': 1.132.31 + '@babel/traverse': 7.28.5 + '@babel/types': 7.28.5 + '@tanstack/router-core': 1.133.36 + '@tanstack/router-generator': 1.133.36 + '@tanstack/router-utils': 1.133.19 + '@tanstack/virtual-file-routes': 1.133.19 babel-dead-code-elimination: 1.0.10 chokidar: 3.6.0 unplugin: 2.3.10 zod: 3.25.76 optionalDependencies: - '@tanstack/react-router': 1.132.47(react-dom@19.2.0(react@19.2.0))(react@19.2.0) - vite: 7.1.9(@types/node@24.7.2)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1) + '@tanstack/react-router': 1.133.36(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + vite: 7.1.12(@types/node@24.9.2)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1) transitivePeerDependencies: - supports-color - '@tanstack/router-utils@1.132.51': + '@tanstack/router-utils@1.133.19': dependencies: - '@babel/core': 7.28.4 - '@babel/generator': 7.28.3 - '@babel/parser': 7.28.4 - '@babel/preset-typescript': 7.27.1(@babel/core@7.28.4) + '@babel/core': 7.28.5 + '@babel/generator': 7.28.5 + '@babel/parser': 7.28.5 + '@babel/preset-typescript': 7.28.5(@babel/core@7.28.5) ansis: 4.2.0 diff: 8.0.2 pathe: 2.0.3 @@ -16637,9 +16560,9 @@ snapshots: transitivePeerDependencies: - supports-color - '@tanstack/store@0.7.7': {} + '@tanstack/store@0.8.0': {} - '@tanstack/virtual-file-routes@1.132.31': {} + '@tanstack/virtual-file-routes@1.133.19': {} '@testing-library/dom@10.4.1': dependencies: @@ -16665,111 +16588,111 @@ snapshots: dependencies: '@testing-library/dom': 10.4.1 - '@tiptap/core@3.6.6(@tiptap/pm@3.6.6)': + '@tiptap/core@3.9.1(@tiptap/pm@3.9.1)': dependencies: - '@tiptap/pm': 3.6.6 + '@tiptap/pm': 3.9.1 - '@tiptap/extension-bold@3.6.6(@tiptap/core@3.6.6(@tiptap/pm@3.6.6))': + '@tiptap/extension-bold@3.9.1(@tiptap/core@3.9.1(@tiptap/pm@3.9.1))': dependencies: - '@tiptap/core': 3.6.6(@tiptap/pm@3.6.6) + '@tiptap/core': 3.9.1(@tiptap/pm@3.9.1) - '@tiptap/extension-bubble-menu@3.6.6(@tiptap/core@3.6.6(@tiptap/pm@3.6.6))(@tiptap/pm@3.6.6)': + '@tiptap/extension-bubble-menu@3.9.1(@tiptap/core@3.9.1(@tiptap/pm@3.9.1))(@tiptap/pm@3.9.1)': dependencies: '@floating-ui/dom': 1.7.4 - '@tiptap/core': 3.6.6(@tiptap/pm@3.6.6) - '@tiptap/pm': 3.6.6 + '@tiptap/core': 3.9.1(@tiptap/pm@3.9.1) + '@tiptap/pm': 3.9.1 optional: true - '@tiptap/extension-code@3.6.6(@tiptap/core@3.6.6(@tiptap/pm@3.6.6))': + '@tiptap/extension-code@3.9.1(@tiptap/core@3.9.1(@tiptap/pm@3.9.1))': dependencies: - '@tiptap/core': 3.6.6(@tiptap/pm@3.6.6) + '@tiptap/core': 3.9.1(@tiptap/pm@3.9.1) - '@tiptap/extension-floating-menu@3.6.6(@floating-ui/dom@1.7.4)(@tiptap/core@3.6.6(@tiptap/pm@3.6.6))(@tiptap/pm@3.6.6)': + '@tiptap/extension-floating-menu@3.9.1(@floating-ui/dom@1.7.4)(@tiptap/core@3.9.1(@tiptap/pm@3.9.1))(@tiptap/pm@3.9.1)': dependencies: '@floating-ui/dom': 1.7.4 - '@tiptap/core': 3.6.6(@tiptap/pm@3.6.6) - '@tiptap/pm': 3.6.6 + '@tiptap/core': 3.9.1(@tiptap/pm@3.9.1) + '@tiptap/pm': 3.9.1 optional: true - '@tiptap/extension-gapcursor@3.6.6(@tiptap/extensions@3.6.5(@tiptap/core@3.6.6(@tiptap/pm@3.6.6))(@tiptap/pm@3.6.6))': + '@tiptap/extension-gapcursor@3.9.1(@tiptap/extensions@3.6.5(@tiptap/core@3.9.1(@tiptap/pm@3.9.1))(@tiptap/pm@3.9.1))': dependencies: - '@tiptap/extensions': 3.6.5(@tiptap/core@3.6.6(@tiptap/pm@3.6.6))(@tiptap/pm@3.6.6) + '@tiptap/extensions': 3.6.5(@tiptap/core@3.9.1(@tiptap/pm@3.9.1))(@tiptap/pm@3.9.1) - '@tiptap/extension-history@3.6.6(@tiptap/extensions@3.6.5(@tiptap/core@3.6.6(@tiptap/pm@3.6.6))(@tiptap/pm@3.6.6))': + '@tiptap/extension-history@3.9.1(@tiptap/extensions@3.6.5(@tiptap/core@3.9.1(@tiptap/pm@3.9.1))(@tiptap/pm@3.9.1))': dependencies: - '@tiptap/extensions': 3.6.5(@tiptap/core@3.6.6(@tiptap/pm@3.6.6))(@tiptap/pm@3.6.6) + '@tiptap/extensions': 3.6.5(@tiptap/core@3.9.1(@tiptap/pm@3.9.1))(@tiptap/pm@3.9.1) - '@tiptap/extension-horizontal-rule@3.6.6(@tiptap/core@3.6.6(@tiptap/pm@3.6.6))(@tiptap/pm@3.6.6)': + '@tiptap/extension-horizontal-rule@3.9.1(@tiptap/core@3.9.1(@tiptap/pm@3.9.1))(@tiptap/pm@3.9.1)': dependencies: - '@tiptap/core': 3.6.6(@tiptap/pm@3.6.6) - '@tiptap/pm': 3.6.6 + '@tiptap/core': 3.9.1(@tiptap/pm@3.9.1) + '@tiptap/pm': 3.9.1 - '@tiptap/extension-italic@3.6.6(@tiptap/core@3.6.6(@tiptap/pm@3.6.6))': + '@tiptap/extension-italic@3.9.1(@tiptap/core@3.9.1(@tiptap/pm@3.9.1))': dependencies: - '@tiptap/core': 3.6.6(@tiptap/pm@3.6.6) + '@tiptap/core': 3.9.1(@tiptap/pm@3.9.1) - '@tiptap/extension-link@3.6.6(@tiptap/core@3.6.6(@tiptap/pm@3.6.6))(@tiptap/pm@3.6.6)': + '@tiptap/extension-link@3.9.1(@tiptap/core@3.9.1(@tiptap/pm@3.9.1))(@tiptap/pm@3.9.1)': dependencies: - '@tiptap/core': 3.6.6(@tiptap/pm@3.6.6) - '@tiptap/pm': 3.6.6 + '@tiptap/core': 3.9.1(@tiptap/pm@3.9.1) + '@tiptap/pm': 3.9.1 linkifyjs: 4.3.2 - '@tiptap/extension-paragraph@3.6.6(@tiptap/core@3.6.6(@tiptap/pm@3.6.6))': + '@tiptap/extension-paragraph@3.9.1(@tiptap/core@3.9.1(@tiptap/pm@3.9.1))': dependencies: - '@tiptap/core': 3.6.6(@tiptap/pm@3.6.6) + '@tiptap/core': 3.9.1(@tiptap/pm@3.9.1) - '@tiptap/extension-strike@3.6.6(@tiptap/core@3.6.6(@tiptap/pm@3.6.6))': + '@tiptap/extension-strike@3.9.1(@tiptap/core@3.9.1(@tiptap/pm@3.9.1))': dependencies: - '@tiptap/core': 3.6.6(@tiptap/pm@3.6.6) + '@tiptap/core': 3.9.1(@tiptap/pm@3.9.1) - '@tiptap/extension-text@3.6.6(@tiptap/core@3.6.6(@tiptap/pm@3.6.6))': + '@tiptap/extension-text@3.9.1(@tiptap/core@3.9.1(@tiptap/pm@3.9.1))': dependencies: - '@tiptap/core': 3.6.6(@tiptap/pm@3.6.6) + '@tiptap/core': 3.9.1(@tiptap/pm@3.9.1) - '@tiptap/extension-underline@3.6.6(@tiptap/core@3.6.6(@tiptap/pm@3.6.6))': + '@tiptap/extension-underline@3.9.1(@tiptap/core@3.9.1(@tiptap/pm@3.9.1))': dependencies: - '@tiptap/core': 3.6.6(@tiptap/pm@3.6.6) + '@tiptap/core': 3.9.1(@tiptap/pm@3.9.1) - '@tiptap/extensions@3.6.5(@tiptap/core@3.6.6(@tiptap/pm@3.6.6))(@tiptap/pm@3.6.6)': + '@tiptap/extensions@3.6.5(@tiptap/core@3.9.1(@tiptap/pm@3.9.1))(@tiptap/pm@3.9.1)': dependencies: - '@tiptap/core': 3.6.6(@tiptap/pm@3.6.6) - '@tiptap/pm': 3.6.6 + '@tiptap/core': 3.9.1(@tiptap/pm@3.9.1) + '@tiptap/pm': 3.9.1 - '@tiptap/pm@3.6.6': + '@tiptap/pm@3.9.1': dependencies: prosemirror-changeset: 2.3.1 prosemirror-collab: 1.3.1 prosemirror-commands: 1.7.1 prosemirror-dropcursor: 1.8.2 - prosemirror-gapcursor: 1.3.2 + prosemirror-gapcursor: 1.4.0 prosemirror-history: 1.4.1 - prosemirror-inputrules: 1.5.0 + prosemirror-inputrules: 1.5.1 prosemirror-keymap: 1.2.3 prosemirror-markdown: 1.13.2 prosemirror-menu: 1.2.5 - prosemirror-model: 1.25.3 + prosemirror-model: 1.25.4 prosemirror-schema-basic: 1.2.4 prosemirror-schema-list: 1.5.1 - prosemirror-state: 1.4.3 + prosemirror-state: 1.4.4 prosemirror-tables: 1.8.1 - prosemirror-trailing-node: 3.0.0(prosemirror-model@1.25.3)(prosemirror-state@1.4.3)(prosemirror-view@1.41.3) + prosemirror-trailing-node: 3.0.0(prosemirror-model@1.25.4)(prosemirror-state@1.4.4)(prosemirror-view@1.41.3) prosemirror-transform: 1.10.4 prosemirror-view: 1.41.3 - '@tiptap/react@3.6.6(@floating-ui/dom@1.7.4)(@tiptap/core@3.6.6(@tiptap/pm@3.6.6))(@tiptap/pm@3.6.6)(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)': + '@tiptap/react@3.9.1(@floating-ui/dom@1.7.4)(@tiptap/core@3.9.1(@tiptap/pm@3.9.1))(@tiptap/pm@3.9.1)(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)': dependencies: - '@tiptap/core': 3.6.6(@tiptap/pm@3.6.6) - '@tiptap/pm': 3.6.6 + '@tiptap/core': 3.9.1(@tiptap/pm@3.9.1) + '@tiptap/pm': 3.9.1 '@types/react': 19.2.2 - '@types/react-dom': 19.2.1(@types/react@19.2.2) + '@types/react-dom': 19.2.2(@types/react@19.2.2) '@types/use-sync-external-store': 0.0.6 fast-deep-equal: 3.1.3 react: 19.2.0 react-dom: 19.2.0(react@19.2.0) use-sync-external-store: 1.6.0(react@19.2.0) optionalDependencies: - '@tiptap/extension-bubble-menu': 3.6.6(@tiptap/core@3.6.6(@tiptap/pm@3.6.6))(@tiptap/pm@3.6.6) - '@tiptap/extension-floating-menu': 3.6.6(@floating-ui/dom@1.7.4)(@tiptap/core@3.6.6(@tiptap/pm@3.6.6))(@tiptap/pm@3.6.6) + '@tiptap/extension-bubble-menu': 3.9.1(@tiptap/core@3.9.1(@tiptap/pm@3.9.1))(@tiptap/pm@3.9.1) + '@tiptap/extension-floating-menu': 3.9.1(@floating-ui/dom@1.7.4)(@tiptap/core@3.9.1(@tiptap/pm@3.9.1))(@tiptap/pm@3.9.1) transitivePeerDependencies: - '@floating-ui/dom' @@ -16796,34 +16719,35 @@ snapshots: '@types/babel__core@7.20.5': dependencies: - '@babel/parser': 7.28.4 - '@babel/types': 7.28.4 + '@babel/parser': 7.28.5 + '@babel/types': 7.28.5 '@types/babel__generator': 7.27.0 '@types/babel__template': 7.4.4 '@types/babel__traverse': 7.28.0 '@types/babel__generator@7.27.0': dependencies: - '@babel/types': 7.28.4 + '@babel/types': 7.28.5 '@types/babel__template@7.4.4': dependencies: - '@babel/parser': 7.28.4 - '@babel/types': 7.28.4 + '@babel/parser': 7.28.5 + '@babel/types': 7.28.5 '@types/babel__traverse@7.28.0': dependencies: - '@babel/types': 7.28.4 + '@babel/types': 7.28.5 '@types/canvas-confetti@1.9.0': {} - '@types/chai@5.2.2': + '@types/chai@5.2.3': dependencies: '@types/deep-eql': 4.0.2 + assertion-error: 2.0.1 '@types/connect@3.4.38': dependencies: - '@types/node': 24.7.2 + '@types/node': 24.9.2 '@types/css-font-loading-module@0.0.7': {} @@ -16869,9 +16793,11 @@ snapshots: dependencies: '@types/unist': 3.0.3 + '@types/http-cache-semantics@4.0.4': {} + '@types/jsdom@27.0.0': dependencies: - '@types/node': 24.7.2 + '@types/node': 24.9.2 '@types/tough-cookie': 4.0.5 parse5: 7.3.0 @@ -16880,7 +16806,7 @@ snapshots: '@types/jsonwebtoken@9.0.10': dependencies: '@types/ms': 2.1.0 - '@types/node': 24.7.2 + '@types/node': 24.9.2 '@types/linkify-it@5.0.0': {} @@ -16901,50 +16827,50 @@ snapshots: '@types/mute-stream@0.0.4': dependencies: - '@types/node': 24.7.2 + '@types/node': 22.18.13 '@types/mysql@2.15.26': dependencies: - '@types/node': 24.7.2 + '@types/node': 24.9.2 - '@types/node@20.19.21': + '@types/node@20.19.24': dependencies: undici-types: 6.21.0 - '@types/node@22.18.10': + '@types/node@22.18.13': dependencies: undici-types: 6.21.0 - '@types/node@24.7.2': + '@types/node@24.9.2': dependencies: - undici-types: 7.14.0 + undici-types: 7.16.0 '@types/pako@2.0.4': {} '@types/papaparse@5.3.16': dependencies: - '@types/node': 24.7.2 + '@types/node': 24.9.2 '@types/pg-pool@2.0.6': dependencies: - '@types/pg': 8.15.5 + '@types/pg': 8.15.6 - '@types/pg@8.15.5': + '@types/pg@8.15.6': dependencies: - '@types/node': 24.7.2 + '@types/node': 24.9.2 pg-protocol: 1.10.3 pg-types: 2.2.0 '@types/pg@8.6.1': dependencies: - '@types/node': 24.7.2 + '@types/node': 24.9.2 pg-protocol: 1.10.3 pg-types: 2.2.0 '@types/raf@3.4.3': optional: true - '@types/react-dom@19.2.1(@types/react@19.2.2)': + '@types/react-dom@19.2.2(@types/react@19.2.2)': dependencies: '@types/react': 19.2.2 @@ -16968,7 +16894,7 @@ snapshots: '@types/tedious@4.0.14': dependencies: - '@types/node': 24.7.2 + '@types/node': 24.9.2 '@types/tough-cookie@4.0.5': {} @@ -17054,7 +16980,7 @@ snapshots: '@unocss/rule-utils@0.65.4': dependencies: '@unocss/core': 0.65.4 - magic-string: 0.30.19 + magic-string: 0.30.21 '@unocss/transformer-compile-class@0.65.4': dependencies: @@ -17064,218 +16990,221 @@ snapshots: dependencies: '@unocss/core': 0.65.4 - '@uppy/audio@3.0.1(@uppy/core@5.1.0)': + '@uppy/audio@3.0.1(@uppy/core@5.1.1)': dependencies: - '@uppy/core': 5.1.0 - '@uppy/utils': 7.1.0 + '@uppy/core': 5.1.1 + '@uppy/utils': 7.1.2 preact: 10.27.2 - '@uppy/box@4.0.1(@uppy/core@5.1.0)': + '@uppy/box@4.0.1(@uppy/core@5.1.1)': dependencies: - '@uppy/companion-client': 5.1.0(@uppy/core@5.1.0) - '@uppy/core': 5.1.0 - '@uppy/provider-views': 5.1.0(@uppy/core@5.1.0) - '@uppy/utils': 7.1.0 + '@uppy/companion-client': 5.1.1(@uppy/core@5.1.1) + '@uppy/core': 5.1.1 + '@uppy/provider-views': 5.1.1(@uppy/core@5.1.1) + '@uppy/utils': 7.1.2 preact: 10.27.2 - '@uppy/companion-client@5.1.0(@uppy/core@5.1.0)': + '@uppy/companion-client@5.1.1(@uppy/core@5.1.1)': dependencies: - '@uppy/core': 5.1.0 - '@uppy/utils': 7.1.0 + '@uppy/core': 5.1.1 + '@uppy/utils': 7.1.2 namespace-emitter: 2.0.1 p-retry: 6.2.1 - '@uppy/components@1.0.3': + '@uppy/components@1.1.0(@uppy/core@5.1.1)(@uppy/image-editor@4.0.2(@uppy/core@5.1.1))(@uppy/screen-capture@5.0.1(@uppy/core@5.1.1))(@uppy/webcam@5.0.2(@uppy/core@5.1.1))': dependencies: - '@uppy/audio': 3.0.1(@uppy/core@5.1.0) - '@uppy/core': 5.1.0 - '@uppy/image-editor': 4.0.1(@uppy/core@5.1.0) - '@uppy/remote-sources': 3.0.1(@uppy/core@5.1.0) - '@uppy/screen-capture': 5.0.1(@uppy/core@5.1.0) - '@uppy/webcam': 5.0.1(@uppy/core@5.1.0) + '@uppy/core': 5.1.1 clsx: 2.1.1 dequal: 2.0.3 preact: 10.27.2 pretty-bytes: 6.1.1 + optionalDependencies: + '@uppy/image-editor': 4.0.2(@uppy/core@5.1.1) + '@uppy/screen-capture': 5.0.1(@uppy/core@5.1.1) + '@uppy/webcam': 5.0.2(@uppy/core@5.1.1) - '@uppy/core@5.1.0': + '@uppy/core@5.1.1': dependencies: '@transloadit/prettier-bytes': 0.3.5 '@uppy/store-default': 5.0.0 - '@uppy/utils': 7.1.0 + '@uppy/utils': 7.1.2 lodash: 4.17.21 mime-match: 1.0.2 namespace-emitter: 2.0.1 nanoid: 5.1.6 preact: 10.27.2 - '@uppy/dashboard@5.0.2(@uppy/core@5.1.0)': + '@uppy/dashboard@5.0.3(@uppy/core@5.1.1)': dependencies: '@transloadit/prettier-bytes': 0.3.5 - '@uppy/core': 5.1.0 - '@uppy/provider-views': 5.1.0(@uppy/core@5.1.0) - '@uppy/thumbnail-generator': 5.0.1(@uppy/core@5.1.0) - '@uppy/utils': 7.1.0 + '@uppy/core': 5.1.1 + '@uppy/provider-views': 5.1.1(@uppy/core@5.1.1) + '@uppy/thumbnail-generator': 5.0.2(@uppy/core@5.1.1) + '@uppy/utils': 7.1.2 classnames: 2.5.1 lodash: 4.17.21 nanoid: 5.1.6 preact: 10.27.2 shallow-equal: 3.1.0 - '@uppy/drag-drop@5.0.2(@uppy/core@5.1.0)': + '@uppy/drag-drop@5.0.2(@uppy/core@5.1.1)': dependencies: - '@uppy/core': 5.1.0 - '@uppy/utils': 7.1.0 + '@uppy/core': 5.1.1 + '@uppy/utils': 7.1.2 preact: 10.27.2 - '@uppy/dropbox@5.0.1(@uppy/core@5.1.0)': + '@uppy/dropbox@5.0.1(@uppy/core@5.1.1)': dependencies: - '@uppy/companion-client': 5.1.0(@uppy/core@5.1.0) - '@uppy/core': 5.1.0 - '@uppy/provider-views': 5.1.0(@uppy/core@5.1.0) - '@uppy/utils': 7.1.0 + '@uppy/companion-client': 5.1.1(@uppy/core@5.1.1) + '@uppy/core': 5.1.1 + '@uppy/provider-views': 5.1.1(@uppy/core@5.1.1) + '@uppy/utils': 7.1.2 preact: 10.27.2 - '@uppy/facebook@5.0.1(@uppy/core@5.1.0)': + '@uppy/facebook@5.0.1(@uppy/core@5.1.1)': dependencies: - '@uppy/companion-client': 5.1.0(@uppy/core@5.1.0) - '@uppy/core': 5.1.0 - '@uppy/provider-views': 5.1.0(@uppy/core@5.1.0) - '@uppy/utils': 7.1.0 + '@uppy/companion-client': 5.1.1(@uppy/core@5.1.1) + '@uppy/core': 5.1.1 + '@uppy/provider-views': 5.1.1(@uppy/core@5.1.1) + '@uppy/utils': 7.1.2 preact: 10.27.2 - '@uppy/file-input@4.2.2(@uppy/core@5.1.0)': + '@uppy/file-input@4.2.2(@uppy/core@5.1.1)': dependencies: - '@uppy/core': 5.1.0 + '@uppy/core': 5.1.1 '@uppy/utils': 6.2.2 preact: 10.27.2 - '@uppy/google-drive@5.0.1(@uppy/core@5.1.0)': + '@uppy/google-drive@5.0.1(@uppy/core@5.1.1)': dependencies: - '@uppy/companion-client': 5.1.0(@uppy/core@5.1.0) - '@uppy/core': 5.1.0 - '@uppy/provider-views': 5.1.0(@uppy/core@5.1.0) - '@uppy/utils': 7.1.0 + '@uppy/companion-client': 5.1.1(@uppy/core@5.1.1) + '@uppy/core': 5.1.1 + '@uppy/provider-views': 5.1.1(@uppy/core@5.1.1) + '@uppy/utils': 7.1.2 preact: 10.27.2 - '@uppy/image-editor@4.0.1(@uppy/core@5.1.0)': + '@uppy/image-editor@4.0.2(@uppy/core@5.1.1)': dependencies: - '@uppy/core': 5.1.0 - '@uppy/utils': 7.1.0 + '@uppy/core': 5.1.1 + '@uppy/utils': 7.1.2 cropperjs: 1.6.2 preact: 10.27.2 - '@uppy/instagram@5.0.1(@uppy/core@5.1.0)': + '@uppy/instagram@5.0.1(@uppy/core@5.1.1)': dependencies: - '@uppy/companion-client': 5.1.0(@uppy/core@5.1.0) - '@uppy/core': 5.1.0 - '@uppy/provider-views': 5.1.0(@uppy/core@5.1.0) - '@uppy/utils': 7.1.0 + '@uppy/companion-client': 5.1.1(@uppy/core@5.1.1) + '@uppy/core': 5.1.1 + '@uppy/provider-views': 5.1.1(@uppy/core@5.1.1) + '@uppy/utils': 7.1.2 preact: 10.27.2 - '@uppy/onedrive@5.0.1(@uppy/core@5.1.0)': + '@uppy/onedrive@5.0.2(@uppy/core@5.1.1)': dependencies: - '@uppy/companion-client': 5.1.0(@uppy/core@5.1.0) - '@uppy/core': 5.1.0 - '@uppy/provider-views': 5.1.0(@uppy/core@5.1.0) - '@uppy/utils': 7.1.0 + '@uppy/companion-client': 5.1.1(@uppy/core@5.1.1) + '@uppy/core': 5.1.1 + '@uppy/provider-views': 5.1.1(@uppy/core@5.1.1) + '@uppy/utils': 7.1.2 preact: 10.27.2 - '@uppy/progress-bar@4.3.2(@uppy/core@5.1.0)': + '@uppy/progress-bar@4.3.2(@uppy/core@5.1.1)': dependencies: - '@uppy/core': 5.1.0 + '@uppy/core': 5.1.1 '@uppy/utils': 6.2.2 preact: 10.27.2 - '@uppy/provider-views@5.1.0(@uppy/core@5.1.0)': + '@uppy/provider-views@5.1.1(@uppy/core@5.1.1)': dependencies: - '@uppy/core': 5.1.0 - '@uppy/utils': 7.1.0 + '@uppy/core': 5.1.1 + '@uppy/utils': 7.1.2 classnames: 2.5.1 nanoid: 5.1.6 p-queue: 8.1.1 preact: 10.27.2 - '@uppy/react@5.1.0(@uppy/core@5.1.0)(@uppy/dashboard@5.0.2(@uppy/core@5.1.0))(@uppy/screen-capture@5.0.1(@uppy/core@5.1.0))(@uppy/status-bar@5.0.1(@uppy/core@5.1.0))(@uppy/webcam@5.0.1(@uppy/core@5.1.0))(react-dom@19.2.0(react@19.2.0))(react@19.2.0)': + '@uppy/react@5.1.0(@uppy/core@5.1.1)(@uppy/dashboard@5.0.3(@uppy/core@5.1.1))(@uppy/image-editor@4.0.2(@uppy/core@5.1.1))(@uppy/screen-capture@5.0.1(@uppy/core@5.1.1))(@uppy/status-bar@5.0.2(@uppy/core@5.1.1))(@uppy/webcam@5.0.2(@uppy/core@5.1.1))(react-dom@19.2.0(react@19.2.0))(react@19.2.0)': dependencies: - '@uppy/components': 1.0.3 - '@uppy/core': 5.1.0 - '@uppy/utils': 7.1.0 + '@uppy/components': 1.1.0(@uppy/core@5.1.1)(@uppy/image-editor@4.0.2(@uppy/core@5.1.1))(@uppy/screen-capture@5.0.1(@uppy/core@5.1.1))(@uppy/webcam@5.0.2(@uppy/core@5.1.1)) + '@uppy/core': 5.1.1 + '@uppy/utils': 7.1.2 preact: 10.27.2 react: 19.2.0 react-dom: 19.2.0(react@19.2.0) use-sync-external-store: 1.6.0(react@19.2.0) optionalDependencies: - '@uppy/dashboard': 5.0.2(@uppy/core@5.1.0) - '@uppy/screen-capture': 5.0.1(@uppy/core@5.1.0) - '@uppy/status-bar': 5.0.1(@uppy/core@5.1.0) - '@uppy/webcam': 5.0.1(@uppy/core@5.1.0) - - '@uppy/remote-sources@3.0.1(@uppy/core@5.1.0)': - dependencies: - '@uppy/box': 4.0.1(@uppy/core@5.1.0) - '@uppy/core': 5.1.0 - '@uppy/dashboard': 5.0.2(@uppy/core@5.1.0) - '@uppy/dropbox': 5.0.1(@uppy/core@5.1.0) - '@uppy/facebook': 5.0.1(@uppy/core@5.1.0) - '@uppy/google-drive': 5.0.1(@uppy/core@5.1.0) - '@uppy/instagram': 5.0.1(@uppy/core@5.1.0) - '@uppy/onedrive': 5.0.1(@uppy/core@5.1.0) - '@uppy/unsplash': 5.0.1(@uppy/core@5.1.0) - '@uppy/url': 5.0.1(@uppy/core@5.1.0) - '@uppy/zoom': 4.0.1(@uppy/core@5.1.0) - - '@uppy/screen-capture@5.0.1(@uppy/core@5.1.0)': - dependencies: - '@uppy/core': 5.1.0 - '@uppy/utils': 7.1.0 + '@uppy/dashboard': 5.0.3(@uppy/core@5.1.1) + '@uppy/screen-capture': 5.0.1(@uppy/core@5.1.1) + '@uppy/status-bar': 5.0.2(@uppy/core@5.1.1) + '@uppy/webcam': 5.0.2(@uppy/core@5.1.1) + transitivePeerDependencies: + - '@uppy/image-editor' + + '@uppy/remote-sources@3.0.1(@uppy/core@5.1.1)': + dependencies: + '@uppy/box': 4.0.1(@uppy/core@5.1.1) + '@uppy/core': 5.1.1 + '@uppy/dashboard': 5.0.3(@uppy/core@5.1.1) + '@uppy/dropbox': 5.0.1(@uppy/core@5.1.1) + '@uppy/facebook': 5.0.1(@uppy/core@5.1.1) + '@uppy/google-drive': 5.0.1(@uppy/core@5.1.1) + '@uppy/instagram': 5.0.1(@uppy/core@5.1.1) + '@uppy/onedrive': 5.0.2(@uppy/core@5.1.1) + '@uppy/unsplash': 5.0.1(@uppy/core@5.1.1) + '@uppy/url': 5.0.2(@uppy/core@5.1.1) + '@uppy/zoom': 4.0.1(@uppy/core@5.1.1) + + '@uppy/screen-capture@5.0.1(@uppy/core@5.1.1)': + dependencies: + '@uppy/core': 5.1.1 + '@uppy/utils': 7.1.2 preact: 10.27.2 - '@uppy/status-bar@5.0.1(@uppy/core@5.1.0)': + '@uppy/status-bar@5.0.2(@uppy/core@5.1.1)': dependencies: '@transloadit/prettier-bytes': 0.3.5 - '@uppy/core': 5.1.0 - '@uppy/utils': 7.1.0 + '@uppy/core': 5.1.1 + '@uppy/utils': 7.1.2 classnames: 2.5.1 preact: 10.27.2 '@uppy/store-default@5.0.0': {} - '@uppy/thumbnail-generator@5.0.1(@uppy/core@5.1.0)': + '@uppy/thumbnail-generator@5.0.2(@uppy/core@5.1.1)': dependencies: - '@uppy/core': 5.1.0 - '@uppy/utils': 7.1.0 + '@uppy/core': 5.1.1 + '@uppy/utils': 7.1.2 exifr: 7.1.3 - '@uppy/transloadit@5.0.1(@uppy/core@5.1.0)': + '@uppy/transloadit@5.2.0(@uppy/core@5.1.1)': dependencies: - '@uppy/companion-client': 5.1.0(@uppy/core@5.1.0) - '@uppy/core': 5.1.0 - '@uppy/provider-views': 5.1.0(@uppy/core@5.1.0) - '@uppy/tus': 5.0.1(@uppy/core@5.1.0) - '@uppy/utils': 7.1.0 + '@uppy/core': 5.1.1 + '@uppy/tus': 5.0.2(@uppy/core@5.1.1) + '@uppy/utils': 7.1.2 component-emitter: 2.0.0 + transloadit: 4.0.5 + transitivePeerDependencies: + - aws-crt + - supports-color - '@uppy/tus@5.0.1(@uppy/core@5.1.0)': + '@uppy/tus@5.0.2(@uppy/core@5.1.1)': dependencies: - '@uppy/companion-client': 5.1.0(@uppy/core@5.1.0) - '@uppy/core': 5.1.0 - '@uppy/utils': 7.1.0 + '@uppy/companion-client': 5.1.1(@uppy/core@5.1.1) + '@uppy/core': 5.1.1 + '@uppy/utils': 7.1.2 tus-js-client: 4.3.1 - '@uppy/unsplash@5.0.1(@uppy/core@5.1.0)': + '@uppy/unsplash@5.0.1(@uppy/core@5.1.1)': dependencies: - '@uppy/companion-client': 5.1.0(@uppy/core@5.1.0) - '@uppy/core': 5.1.0 - '@uppy/provider-views': 5.1.0(@uppy/core@5.1.0) - '@uppy/utils': 7.1.0 + '@uppy/companion-client': 5.1.1(@uppy/core@5.1.1) + '@uppy/core': 5.1.1 + '@uppy/provider-views': 5.1.1(@uppy/core@5.1.1) + '@uppy/utils': 7.1.2 preact: 10.27.2 - '@uppy/url@5.0.1(@uppy/core@5.1.0)': + '@uppy/url@5.0.2(@uppy/core@5.1.1)': dependencies: - '@uppy/companion-client': 5.1.0(@uppy/core@5.1.0) - '@uppy/core': 5.1.0 - '@uppy/utils': 7.1.0 + '@uppy/companion-client': 5.1.1(@uppy/core@5.1.1) + '@uppy/core': 5.1.1 + '@uppy/utils': 7.1.2 nanoid: 5.1.6 preact: 10.27.2 @@ -17284,74 +17213,62 @@ snapshots: lodash: 4.17.21 preact: 10.27.2 - '@uppy/utils@7.1.0': + '@uppy/utils@7.1.2': dependencies: lodash: 4.17.21 preact: 10.27.2 - '@uppy/webcam@5.0.1(@uppy/core@5.1.0)': + '@uppy/webcam@5.0.2(@uppy/core@5.1.1)': dependencies: - '@uppy/core': 5.1.0 - '@uppy/utils': 7.1.0 + '@uppy/core': 5.1.1 + '@uppy/utils': 7.1.2 is-mobile: 4.0.0 preact: 10.27.2 - '@uppy/zoom@4.0.1(@uppy/core@5.1.0)': + '@uppy/zoom@4.0.1(@uppy/core@5.1.1)': dependencies: - '@uppy/companion-client': 5.1.0(@uppy/core@5.1.0) - '@uppy/core': 5.1.0 - '@uppy/provider-views': 5.1.0(@uppy/core@5.1.0) - '@uppy/utils': 7.1.0 + '@uppy/companion-client': 5.1.1(@uppy/core@5.1.1) + '@uppy/core': 5.1.1 + '@uppy/provider-views': 5.1.1(@uppy/core@5.1.1) + '@uppy/utils': 7.1.2 preact: 10.27.2 - '@vis.gl/react-google-maps@1.5.5(react-dom@19.2.0(react@19.2.0))(react@19.2.0)': + '@vis.gl/react-google-maps@1.6.1(react-dom@19.2.0(react@19.2.0))(react@19.2.0)': dependencies: '@types/google.maps': 3.58.1 fast-deep-equal: 3.1.3 react: 19.2.0 react-dom: 19.2.0(react@19.2.0) - '@vitejs/plugin-basic-ssl@2.1.0(vite@7.1.9(@types/node@24.7.2)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1))': + '@vitejs/plugin-basic-ssl@2.1.0(vite@7.1.12(@types/node@24.9.2)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1))': dependencies: - vite: 7.1.9(@types/node@24.7.2)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1) + vite: 7.1.12(@types/node@24.9.2)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1) - '@vitejs/plugin-react@4.7.0(vite@5.4.20(@types/node@24.7.2)(lightningcss@1.30.1)(terser@5.44.0))': + '@vitejs/plugin-react@5.1.0(vite@7.1.12(@types/node@24.9.2)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1))': dependencies: - '@babel/core': 7.28.4 - '@babel/plugin-transform-react-jsx-self': 7.27.1(@babel/core@7.28.4) - '@babel/plugin-transform-react-jsx-source': 7.27.1(@babel/core@7.28.4) - '@rolldown/pluginutils': 1.0.0-beta.27 + '@babel/core': 7.28.5 + '@babel/plugin-transform-react-jsx-self': 7.27.1(@babel/core@7.28.5) + '@babel/plugin-transform-react-jsx-source': 7.27.1(@babel/core@7.28.5) + '@rolldown/pluginutils': 1.0.0-beta.43 '@types/babel__core': 7.20.5 - react-refresh: 0.17.0 - vite: 5.4.20(@types/node@24.7.2)(lightningcss@1.30.1)(terser@5.44.0) + react-refresh: 0.18.0 + vite: 7.1.12(@types/node@24.9.2)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1) transitivePeerDependencies: - supports-color - '@vitejs/plugin-react@5.0.4(vite@7.1.9(@types/node@24.7.2)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1))': - dependencies: - '@babel/core': 7.28.4 - '@babel/plugin-transform-react-jsx-self': 7.27.1(@babel/core@7.28.4) - '@babel/plugin-transform-react-jsx-source': 7.27.1(@babel/core@7.28.4) - '@rolldown/pluginutils': 1.0.0-beta.38 - '@types/babel__core': 7.20.5 - react-refresh: 0.17.0 - vite: 7.1.9(@types/node@24.7.2)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1) - transitivePeerDependencies: - - supports-color - - '@vitest/browser@3.2.4(playwright@1.56.0)(vite@7.1.9(@types/node@24.7.2)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1))(vitest@3.2.4)': + '@vitest/browser@3.2.4(playwright@1.56.1)(vite@7.1.12(@types/node@24.9.2)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1))(vitest@3.2.4)': dependencies: '@testing-library/dom': 10.4.1 '@testing-library/user-event': 14.6.1(@testing-library/dom@10.4.1) - '@vitest/mocker': 3.2.4(vite@7.1.9(@types/node@24.7.2)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)) + '@vitest/mocker': 3.2.4(vite@7.1.12(@types/node@24.9.2)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)) '@vitest/utils': 3.2.4 - magic-string: 0.30.19 + magic-string: 0.30.21 sirv: 3.0.2 tinyrainbow: 2.0.0 - vitest: 3.2.4(@types/debug@4.1.12)(@types/node@24.7.2)(@vitest/browser@3.2.4)(jiti@2.6.1)(jsdom@27.0.0(canvas@3.2.0)(postcss@8.5.6))(lightningcss@1.30.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1) + vitest: 3.2.4(@types/debug@4.1.12)(@types/node@24.9.2)(@vitest/browser@3.2.4)(jiti@2.6.1)(jsdom@27.0.1(canvas@3.2.0)(postcss@8.5.6))(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1) ws: 8.18.3 optionalDependencies: - playwright: 1.56.0 + playwright: 1.56.1 transitivePeerDependencies: - bufferutil - msw @@ -17362,38 +17279,38 @@ snapshots: dependencies: '@ampproject/remapping': 2.3.0 '@bcoe/v8-coverage': 1.0.2 - ast-v8-to-istanbul: 0.3.5 + ast-v8-to-istanbul: 0.3.8 debug: 4.4.3 istanbul-lib-coverage: 3.2.2 istanbul-lib-report: 3.0.1 istanbul-lib-source-maps: 5.0.6 istanbul-reports: 3.2.0 - magic-string: 0.30.19 + magic-string: 0.30.21 magicast: 0.3.5 - std-env: 3.9.0 + std-env: 3.10.0 test-exclude: 7.0.1 tinyrainbow: 2.0.0 - vitest: 3.2.4(@types/debug@4.1.12)(@types/node@24.7.2)(@vitest/browser@3.2.4)(jiti@2.6.1)(jsdom@27.0.0(canvas@3.2.0)(postcss@8.5.6))(lightningcss@1.30.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1) + vitest: 3.2.4(@types/debug@4.1.12)(@types/node@24.9.2)(@vitest/browser@3.2.4)(jiti@2.6.1)(jsdom@27.0.1(canvas@3.2.0)(postcss@8.5.6))(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1) optionalDependencies: - '@vitest/browser': 3.2.4(playwright@1.56.0)(vite@7.1.9(@types/node@24.7.2)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1))(vitest@3.2.4) + '@vitest/browser': 3.2.4(playwright@1.56.1)(vite@7.1.12(@types/node@24.9.2)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1))(vitest@3.2.4) transitivePeerDependencies: - supports-color '@vitest/expect@3.2.4': dependencies: - '@types/chai': 5.2.2 + '@types/chai': 5.2.3 '@vitest/spy': 3.2.4 '@vitest/utils': 3.2.4 chai: 5.3.3 tinyrainbow: 2.0.0 - '@vitest/mocker@3.2.4(vite@7.1.9(@types/node@24.7.2)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1))': + '@vitest/mocker@3.2.4(vite@7.1.12(@types/node@24.9.2)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1))': dependencies: '@vitest/spy': 3.2.4 estree-walker: 3.0.3 - magic-string: 0.30.19 + magic-string: 0.30.21 optionalDependencies: - vite: 7.1.9(@types/node@24.7.2)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1) + vite: 7.1.12(@types/node@24.9.2)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1) '@vitest/pretty-format@3.2.4': dependencies: @@ -17408,7 +17325,7 @@ snapshots: '@vitest/snapshot@3.2.4': dependencies: '@vitest/pretty-format': 3.2.4 - magic-string: 0.30.19 + magic-string: 0.30.21 pathe: 2.0.3 '@vitest/spy@3.2.4': @@ -17423,7 +17340,7 @@ snapshots: '@vue/compiler-core@3.5.13': dependencies: - '@babel/parser': 7.28.4 + '@babel/parser': 7.28.5 '@vue/shared': 3.5.13 entities: 4.5.0 estree-walker: 2.0.2 @@ -17438,13 +17355,13 @@ snapshots: '@vue/compiler-sfc@3.5.13': dependencies: - '@babel/parser': 7.28.4 + '@babel/parser': 7.28.5 '@vue/compiler-core': 3.5.13 '@vue/compiler-dom': 3.5.13 '@vue/compiler-ssr': 3.5.13 '@vue/shared': 3.5.13 estree-walker: 2.0.2 - magic-string: 0.30.19 + magic-string: 0.30.21 postcss: 8.5.6 source-map-js: 1.2.1 optional: true @@ -17608,7 +17525,7 @@ snapshots: dependencies: tslib: 2.8.1 - ast-v8-to-istanbul@0.3.5: + ast-v8-to-istanbul@0.3.8: dependencies: '@jridgewell/trace-mapping': 0.3.31 estree-walker: 3.0.3 @@ -17626,8 +17543,8 @@ snapshots: autoprefixer@10.4.21(postcss@8.5.6): dependencies: - browserslist: 4.26.3 - caniuse-lite: 1.0.30001749 + browserslist: 4.27.0 + caniuse-lite: 1.0.30001751 fraction.js: 4.3.7 normalize-range: 0.1.2 picocolors: 1.1.1 @@ -17652,44 +17569,52 @@ snapshots: transitivePeerDependencies: - debug + axios@1.13.1: + dependencies: + follow-redirects: 1.15.11 + form-data: 4.0.4 + proxy-from-env: 1.1.0 + transitivePeerDependencies: + - debug + babel-dead-code-elimination@1.0.10: dependencies: - '@babel/core': 7.28.4 - '@babel/parser': 7.28.4 - '@babel/traverse': 7.28.4 - '@babel/types': 7.28.4 + '@babel/core': 7.28.5 + '@babel/parser': 7.28.5 + '@babel/traverse': 7.28.5 + '@babel/types': 7.28.5 transitivePeerDependencies: - supports-color babel-plugin-add-react-displayname@0.0.5: {} - babel-plugin-polyfill-corejs2@0.4.14(@babel/core@7.28.4): + babel-plugin-polyfill-corejs2@0.4.14(@babel/core@7.28.5): dependencies: - '@babel/compat-data': 7.28.4 - '@babel/core': 7.28.4 - '@babel/helper-define-polyfill-provider': 0.6.5(@babel/core@7.28.4) + '@babel/compat-data': 7.28.5 + '@babel/core': 7.28.5 + '@babel/helper-define-polyfill-provider': 0.6.5(@babel/core@7.28.5) semver: 6.3.1 transitivePeerDependencies: - supports-color - babel-plugin-polyfill-corejs3@0.13.0(@babel/core@7.28.4): + babel-plugin-polyfill-corejs3@0.13.0(@babel/core@7.28.5): dependencies: - '@babel/core': 7.28.4 - '@babel/helper-define-polyfill-provider': 0.6.5(@babel/core@7.28.4) + '@babel/core': 7.28.5 + '@babel/helper-define-polyfill-provider': 0.6.5(@babel/core@7.28.5) core-js-compat: 3.46.0 transitivePeerDependencies: - supports-color - babel-plugin-polyfill-regenerator@0.6.5(@babel/core@7.28.4): + babel-plugin-polyfill-regenerator@0.6.5(@babel/core@7.28.5): dependencies: - '@babel/core': 7.28.4 - '@babel/helper-define-polyfill-provider': 0.6.5(@babel/core@7.28.4) + '@babel/core': 7.28.5 + '@babel/helper-define-polyfill-provider': 0.6.5(@babel/core@7.28.5) transitivePeerDependencies: - supports-color babel-plugin-react-compiler@19.1.0-rc.3: dependencies: - '@babel/types': 7.28.4 + '@babel/types': 7.28.5 bail@2.0.2: {} @@ -17701,7 +17626,7 @@ snapshots: base64-js@1.5.1: {} - baseline-browser-mapping@2.8.16: {} + baseline-browser-mapping@2.8.21: {} bcp-47-match@2.0.3: {} @@ -17723,7 +17648,7 @@ snapshots: bintrees@1.0.2: {} - bippy@0.3.28(@types/react@19.2.2)(react@19.2.0): + bippy@0.3.34(@types/react@19.2.2)(react@19.2.0): dependencies: '@types/react-reconciler': 0.28.9(@types/react@19.2.2) react: 19.2.0 @@ -17756,13 +17681,13 @@ snapshots: dependencies: fill-range: 7.1.1 - browserslist@4.26.3: + browserslist@4.27.0: dependencies: - baseline-browser-mapping: 2.8.16 - caniuse-lite: 1.0.30001749 - electron-to-chromium: 1.5.234 - node-releases: 2.0.23 - update-browserslist-db: 1.1.3(browserslist@4.26.3) + baseline-browser-mapping: 2.8.21 + caniuse-lite: 1.0.30001751 + electron-to-chromium: 1.5.243 + node-releases: 2.0.27 + update-browserslist-db: 1.1.4(browserslist@4.27.0) buffer-equal-constant-time@1.0.1: {} @@ -17783,12 +17708,12 @@ snapshots: dependencies: run-applescript: 7.1.0 - bundle-require@5.1.0(esbuild@0.25.10): + bundle-require@5.1.0(esbuild@0.25.11): dependencies: - esbuild: 0.25.10 + esbuild: 0.25.11 load-tsconfig: 0.2.5 - c12@3.3.0(magicast@0.3.5): + c12@3.3.1(magicast@0.3.5): dependencies: chokidar: 4.0.3 confbox: 0.2.2 @@ -17807,6 +17732,18 @@ snapshots: cac@6.7.14: {} + cacheable-lookup@7.0.0: {} + + cacheable-request@12.0.1: + dependencies: + '@types/http-cache-semantics': 4.0.4 + get-stream: 9.0.1 + http-cache-semantics: 4.2.0 + keyv: 4.5.4 + mimic-response: 4.0.0 + normalize-url: 8.1.0 + responselike: 3.0.0 + call-bind-apply-helpers@1.0.2: dependencies: es-errors: 1.3.0 @@ -17833,9 +17770,9 @@ snapshots: camelcase-css@2.0.1: {} - caniuse-lite@1.0.30001749: {} + caniuse-lite@1.0.30001751: {} - canvas-confetti@1.9.3: {} + canvas-confetti@1.9.4: {} canvas@3.2.0: dependencies: @@ -17932,8 +17869,6 @@ snapshots: chownr@2.0.0: {} - chownr@3.0.0: {} - chromatic@12.2.0: {} citty@0.1.6: @@ -17962,12 +17897,12 @@ snapshots: clsx@2.1.1: {} - cmdk@1.1.1(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0): + cmdk@1.1.1(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0): dependencies: '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.2)(react@19.2.0) - '@radix-ui/react-dialog': 1.1.15(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@radix-ui/react-dialog': 1.1.15(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) '@radix-ui/react-id': 1.1.1(@types/react@19.2.2)(react@19.2.0) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) react: 19.2.0 react-dom: 19.2.0(react@19.2.0) transitivePeerDependencies: @@ -18001,10 +17936,10 @@ snapshots: commander@12.1.0: {} - commander@13.0.0: {} - commander@14.0.1: {} + commander@14.0.2: {} + commander@2.20.3: {} commander@4.1.1: {} @@ -18055,7 +17990,7 @@ snapshots: core-js-compat@3.46.0: dependencies: - browserslist: 4.26.3 + browserslist: 4.27.0 core-js@3.46.0: optional: true @@ -18222,7 +18157,6 @@ snapshots: decompress-response@6.0.0: dependencies: mimic-response: 3.1.0 - optional: true deep-eql@5.0.2: {} @@ -18240,6 +18174,8 @@ snapshots: bundle-name: 4.1.0 default-browser-id: 5.0.0 + defer-to-connect@2.0.1: {} + define-data-property@1.1.4: dependencies: es-define-property: 1.0.1 @@ -18317,7 +18253,7 @@ snapshots: dependencies: domelementtype: 2.3.0 - dompurify@3.2.7: + dompurify@3.3.0: optionalDependencies: '@types/trusted-types': 2.0.7 optional: true @@ -18360,28 +18296,28 @@ snapshots: transitivePeerDependencies: - supports-color - drizzle-kit@0.31.5: + drizzle-kit@0.31.6: dependencies: '@drizzle-team/brocli': 0.10.2 '@esbuild-kit/esm-loader': 2.6.5 - esbuild: 0.25.10 - esbuild-register: 3.6.0(esbuild@0.25.10) + esbuild: 0.25.11 + esbuild-register: 3.6.0(esbuild@0.25.11) transitivePeerDependencies: - supports-color - drizzle-orm@0.44.6(@electric-sql/pglite@0.3.10)(@libsql/client-wasm@0.14.0)(@opentelemetry/api@1.9.0)(@types/pg@8.15.5)(gel@2.0.2)(pg@8.16.3)(postgres@3.4.7): + drizzle-orm@0.44.7(@electric-sql/pglite@0.3.11)(@libsql/client-wasm@0.14.0)(@opentelemetry/api@1.9.0)(@types/pg@8.15.6)(gel@2.0.2)(pg@8.16.3)(postgres@3.4.7): optionalDependencies: - '@electric-sql/pglite': 0.3.10 + '@electric-sql/pglite': 0.3.11 '@libsql/client-wasm': 0.14.0 '@opentelemetry/api': 1.9.0 - '@types/pg': 8.15.5 + '@types/pg': 8.15.6 gel: 2.0.2 pg: 8.16.3 postgres: 3.4.7 - drizzle-zod@0.8.3(drizzle-orm@0.44.6(@electric-sql/pglite@0.3.10)(@libsql/client-wasm@0.14.0)(@opentelemetry/api@1.9.0)(@types/pg@8.15.5)(gel@2.0.2)(pg@8.16.3)(postgres@3.4.7))(zod@4.1.12): + drizzle-zod@0.8.3(drizzle-orm@0.44.7(@electric-sql/pglite@0.3.11)(@libsql/client-wasm@0.14.0)(@opentelemetry/api@1.9.0)(@types/pg@8.15.6)(gel@2.0.2)(pg@8.16.3)(postgres@3.4.7))(zod@4.1.12): dependencies: - drizzle-orm: 0.44.6(@electric-sql/pglite@0.3.10)(@libsql/client-wasm@0.14.0)(@opentelemetry/api@1.9.0)(@types/pg@8.15.5)(gel@2.0.2)(pg@8.16.3)(postgres@3.4.7) + drizzle-orm: 0.44.7(@electric-sql/pglite@0.3.11)(@libsql/client-wasm@0.14.0)(@opentelemetry/api@1.9.0)(@types/pg@8.15.6)(gel@2.0.2)(pg@8.16.3)(postgres@3.4.7) zod: 4.1.12 dunder-proto@1.0.1: @@ -18412,7 +18348,7 @@ snapshots: dependencies: jake: 10.9.4 - electron-to-chromium@1.5.234: {} + electron-to-chromium@1.5.243: {} embla-carousel-autoplay@8.6.0(embla-carousel@8.6.0): dependencies: @@ -18543,7 +18479,7 @@ snapshots: is-date-object: 1.1.0 is-symbol: 1.1.1 - es-toolkit@1.40.0: {} + es-toolkit@1.41.0: {} esbuild-register@3.6.0(esbuild@0.19.12): dependencies: @@ -18552,10 +18488,10 @@ snapshots: transitivePeerDependencies: - supports-color - esbuild-register@3.6.0(esbuild@0.25.10): + esbuild-register@3.6.0(esbuild@0.25.11): dependencies: debug: 4.4.3 - esbuild: 0.25.10 + esbuild: 0.25.11 transitivePeerDependencies: - supports-color @@ -18610,32 +18546,6 @@ snapshots: '@esbuild/win32-ia32': 0.19.12 '@esbuild/win32-x64': 0.19.12 - esbuild@0.21.5: - optionalDependencies: - '@esbuild/aix-ppc64': 0.21.5 - '@esbuild/android-arm': 0.21.5 - '@esbuild/android-arm64': 0.21.5 - '@esbuild/android-x64': 0.21.5 - '@esbuild/darwin-arm64': 0.21.5 - '@esbuild/darwin-x64': 0.21.5 - '@esbuild/freebsd-arm64': 0.21.5 - '@esbuild/freebsd-x64': 0.21.5 - '@esbuild/linux-arm': 0.21.5 - '@esbuild/linux-arm64': 0.21.5 - '@esbuild/linux-ia32': 0.21.5 - '@esbuild/linux-loong64': 0.21.5 - '@esbuild/linux-mips64el': 0.21.5 - '@esbuild/linux-ppc64': 0.21.5 - '@esbuild/linux-riscv64': 0.21.5 - '@esbuild/linux-s390x': 0.21.5 - '@esbuild/linux-x64': 0.21.5 - '@esbuild/netbsd-x64': 0.21.5 - '@esbuild/openbsd-x64': 0.21.5 - '@esbuild/sunos-x64': 0.21.5 - '@esbuild/win32-arm64': 0.21.5 - '@esbuild/win32-ia32': 0.21.5 - '@esbuild/win32-x64': 0.21.5 - esbuild@0.24.2: optionalDependencies: '@esbuild/aix-ppc64': 0.24.2 @@ -18664,34 +18574,34 @@ snapshots: '@esbuild/win32-ia32': 0.24.2 '@esbuild/win32-x64': 0.24.2 - esbuild@0.25.10: + esbuild@0.25.11: optionalDependencies: - '@esbuild/aix-ppc64': 0.25.10 - '@esbuild/android-arm': 0.25.10 - '@esbuild/android-arm64': 0.25.10 - '@esbuild/android-x64': 0.25.10 - '@esbuild/darwin-arm64': 0.25.10 - '@esbuild/darwin-x64': 0.25.10 - '@esbuild/freebsd-arm64': 0.25.10 - '@esbuild/freebsd-x64': 0.25.10 - '@esbuild/linux-arm': 0.25.10 - '@esbuild/linux-arm64': 0.25.10 - '@esbuild/linux-ia32': 0.25.10 - '@esbuild/linux-loong64': 0.25.10 - '@esbuild/linux-mips64el': 0.25.10 - '@esbuild/linux-ppc64': 0.25.10 - '@esbuild/linux-riscv64': 0.25.10 - '@esbuild/linux-s390x': 0.25.10 - '@esbuild/linux-x64': 0.25.10 - '@esbuild/netbsd-arm64': 0.25.10 - '@esbuild/netbsd-x64': 0.25.10 - '@esbuild/openbsd-arm64': 0.25.10 - '@esbuild/openbsd-x64': 0.25.10 - '@esbuild/openharmony-arm64': 0.25.10 - '@esbuild/sunos-x64': 0.25.10 - '@esbuild/win32-arm64': 0.25.10 - '@esbuild/win32-ia32': 0.25.10 - '@esbuild/win32-x64': 0.25.10 + '@esbuild/aix-ppc64': 0.25.11 + '@esbuild/android-arm': 0.25.11 + '@esbuild/android-arm64': 0.25.11 + '@esbuild/android-x64': 0.25.11 + '@esbuild/darwin-arm64': 0.25.11 + '@esbuild/darwin-x64': 0.25.11 + '@esbuild/freebsd-arm64': 0.25.11 + '@esbuild/freebsd-x64': 0.25.11 + '@esbuild/linux-arm': 0.25.11 + '@esbuild/linux-arm64': 0.25.11 + '@esbuild/linux-ia32': 0.25.11 + '@esbuild/linux-loong64': 0.25.11 + '@esbuild/linux-mips64el': 0.25.11 + '@esbuild/linux-ppc64': 0.25.11 + '@esbuild/linux-riscv64': 0.25.11 + '@esbuild/linux-s390x': 0.25.11 + '@esbuild/linux-x64': 0.25.11 + '@esbuild/netbsd-arm64': 0.25.11 + '@esbuild/netbsd-x64': 0.25.11 + '@esbuild/openbsd-arm64': 0.25.11 + '@esbuild/openbsd-x64': 0.25.11 + '@esbuild/openharmony-arm64': 0.25.11 + '@esbuild/sunos-x64': 0.25.11 + '@esbuild/win32-arm64': 0.25.11 + '@esbuild/win32-ia32': 0.25.11 + '@esbuild/win32-x64': 0.25.11 escalade@3.2.0: {} @@ -18709,7 +18619,7 @@ snapshots: eslint@8.57.1: dependencies: '@eslint-community/eslint-utils': 4.9.0(eslint@8.57.1) - '@eslint-community/regexpp': 4.12.1 + '@eslint-community/regexpp': 4.12.2 '@eslint/eslintrc': 2.1.4 '@eslint/js': 8.57.1 '@humanwhocodes/config-array': 0.13.0 @@ -18875,9 +18785,9 @@ snapshots: fix-dts-default-cjs-exports@1.0.1: dependencies: - magic-string: 0.30.19 + magic-string: 0.30.21 mlly: 1.8.0 - rollup: 4.52.4 + rollup: 4.52.5 flat-cache@3.2.0: dependencies: @@ -18900,6 +18810,8 @@ snapshots: forever-agent@0.6.1: {} + form-data-encoder@4.1.0: {} + form-data@2.3.3: dependencies: asynckit: 0.4.0 @@ -18949,12 +18861,6 @@ snapshots: jsonfile: 6.2.0 universalify: 2.0.1 - fs-extra@11.3.2: - dependencies: - graceful-fs: 4.2.11 - jsonfile: 6.2.0 - universalify: 2.0.1 - fs-extra@9.1.0: dependencies: at-least-node: 1.0.0 @@ -19027,13 +18933,18 @@ snapshots: dunder-proto: 1.0.1 es-object-atoms: 1.1.1 + get-stream@9.0.1: + dependencies: + '@sec-ant/readable-stream': 0.4.1 + is-stream: 4.0.1 + get-symbol-description@1.1.0: dependencies: call-bound: 1.0.4 es-errors: 1.3.0 get-intrinsic: 1.3.0 - get-tsconfig@4.12.0: + get-tsconfig@4.13.0: dependencies: resolve-pkg-maps: 1.0.0 @@ -19090,7 +19001,7 @@ snapshots: dependencies: foreground-child: 3.3.1 jackspeak: 4.1.1 - minimatch: 10.0.3 + minimatch: 10.1.1 minipass: 7.1.2 package-json-from-dist: 1.0.1 path-scurry: 2.0.0 @@ -19137,6 +19048,20 @@ snapshots: gopd@1.2.0: {} + got@14.4.9: + dependencies: + '@sindresorhus/is': 7.1.0 + '@szmarczak/http-timer': 5.0.1 + cacheable-lookup: 7.0.0 + cacheable-request: 12.0.1 + decompress-response: 6.0.0 + form-data-encoder: 4.1.0 + http2-wrapper: 2.2.1 + lowercase-keys: 3.0.0 + p-cancelable: 4.0.1 + responselike: 3.0.0 + type-fest: 4.41.0 + graceful-fs@4.2.11: {} graphemer@1.4.0: {} @@ -19194,7 +19119,7 @@ snapshots: hast-util-phrasing: 3.0.1 hast-util-whitespace: 3.0.0 html-whitespace-sensitive-tag-names: 3.0.1 - unist-util-visit-parents: 6.0.1 + unist-util-visit-parents: 6.0.2 hast-util-from-dom@5.0.1: dependencies: @@ -19265,7 +19190,7 @@ snapshots: hast-util-embedded: 3.0.0 hast-util-is-element: 3.0.0 hast-util-whitespace: 3.0.0 - unist-util-is: 6.0.0 + unist-util-is: 6.0.1 hast-util-parse-selector@4.0.0: dependencies: @@ -19362,7 +19287,7 @@ snapshots: dependencies: react-is: 16.13.1 - hono@4.9.11: {} + hono@4.10.4: {} html-encoding-sniffer@4.0.0: dependencies: @@ -19425,6 +19350,8 @@ snapshots: domutils: 3.2.2 entities: 4.5.0 + http-cache-semantics@4.2.0: {} + http-proxy-agent@7.0.2: dependencies: agent-base: 7.1.4 @@ -19438,6 +19365,11 @@ snapshots: jsprim: 1.4.2 sshpk: 1.18.0 + http2-wrapper@2.2.1: + dependencies: + quick-lru: 5.1.1 + resolve-alpn: 1.2.1 + https-proxy-agent@5.0.1: dependencies: agent-base: 6.0.2 @@ -19486,7 +19418,7 @@ snapshots: ignore@5.3.2: {} - immer@10.1.3: {} + immer@10.2.0: {} import-fresh@3.3.1: dependencies: @@ -19513,7 +19445,7 @@ snapshots: ini@1.3.8: {} - inline-style-parser@0.2.4: {} + inline-style-parser@0.2.6: {} input-otp@1.4.2(react-dom@19.2.0(react@19.2.0))(react@19.2.0): dependencies: @@ -19534,6 +19466,8 @@ snapshots: internmap@2.0.3: {} + into-stream@9.0.0: {} + iobuffer@5.4.0: {} is-array-buffer@3.0.5: @@ -19656,6 +19590,8 @@ snapshots: is-stream@2.0.1: {} + is-stream@4.0.1: {} + is-string@1.1.1: dependencies: call-bound: 1.0.4 @@ -19754,7 +19690,7 @@ snapshots: '@hapi/formula': 3.0.2 '@hapi/hoek': 11.0.7 '@hapi/pinpoint': 2.0.1 - '@hapi/tlds': 1.1.3 + '@hapi/tlds': 1.1.4 '@hapi/topo': 6.0.2 '@standard-schema/spec': 1.0.0 @@ -19782,9 +19718,9 @@ snapshots: jsbn@0.1.1: {} - jsdom@27.0.0(canvas@3.2.0)(postcss@8.5.6): + jsdom@27.0.1(canvas@3.2.0)(postcss@8.5.6): dependencies: - '@asamuzakjp/dom-selector': 6.6.2 + '@asamuzakjp/dom-selector': 6.7.3 cssstyle: 5.3.1(postcss@8.5.6) data-urls: 6.0.0 decimal.js: 10.6.0 @@ -19792,7 +19728,7 @@ snapshots: http-proxy-agent: 7.0.2 https-proxy-agent: 7.0.6 is-potential-custom-element-name: 1.0.1 - parse5: 7.3.0 + parse5: 8.0.0 rrweb-cssom: 0.8.0 saxes: 6.0.0 symbol-tree: 3.2.4 @@ -19861,7 +19797,7 @@ snapshots: optionalDependencies: canvg: 3.0.11 core-js: 3.46.0 - dompurify: 3.2.7 + dompurify: 3.3.0 html2canvas: 1.4.1 jsprim@1.4.2: @@ -19871,21 +19807,21 @@ snapshots: json-schema: 0.4.0 verror: 1.10.0 - jsx-email@2.7.4(@emotion/is-prop-valid@1.3.1)(@jsx-email/plugin-inline@1.0.1)(@jsx-email/plugin-minify@1.0.1)(@jsx-email/plugin-pretty@1.0.0)(@types/node@24.7.2)(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(lightningcss@1.30.1)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(terser@5.44.0)(ts-node@10.9.2(@swc/core@1.7.26)(@types/node@24.7.2)(typescript@5.9.3))(typescript@5.9.3): + jsx-email@2.8.1(@emotion/is-prop-valid@1.3.1)(@jsx-email/plugin-inline@1.0.1)(@jsx-email/plugin-minify@1.0.1)(@jsx-email/plugin-pretty@1.0.0)(@types/node@24.9.2)(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(jiti@2.6.1)(lightningcss@1.30.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(terser@5.44.0)(ts-node@10.9.2(@swc/core@1.7.26)(@types/node@24.9.2)(typescript@5.9.3))(tsx@4.20.6)(typescript@5.9.3)(yaml@2.8.1): dependencies: '@dot/log': 0.1.5 '@jsx-email/doiuse-email': 1.0.4 - '@jsx-email/plugin-inline': 1.0.1(jsx-email@2.7.4) - '@jsx-email/plugin-minify': 1.0.1(jsx-email@2.7.4) - '@jsx-email/plugin-pretty': 1.0.0(jsx-email@2.7.4) + '@jsx-email/plugin-inline': 1.0.1(jsx-email@2.8.1) + '@jsx-email/plugin-minify': 1.0.1(jsx-email@2.8.1) + '@jsx-email/plugin-pretty': 1.0.0(jsx-email@2.8.1) '@parcel/watcher': 2.5.1 '@radix-ui/colors': 3.0.0 - '@radix-ui/react-collapsible': 1.1.1(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@radix-ui/react-collapsible': 1.1.1(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) '@radix-ui/react-icons': 1.3.2(react@19.2.0) - '@radix-ui/react-popover': 1.1.2(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) - '@radix-ui/react-select': 2.2.6(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@radix-ui/react-popover': 1.1.2(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@radix-ui/react-select': 2.2.6(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) '@radix-ui/react-slot': 1.1.0(@types/react@19.2.2)(react@19.2.0) - '@radix-ui/react-toggle-group': 1.1.0(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@radix-ui/react-toggle-group': 1.1.0(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) '@unocss/core': 0.65.4 '@unocss/preset-rem-to-px': 0.65.4 '@unocss/preset-typography': 0.65.4 @@ -19893,7 +19829,7 @@ snapshots: '@unocss/preset-wind': 0.65.4 '@unocss/transformer-compile-class': 0.65.4 '@unocss/transformer-variant-group': 0.65.4 - '@vitejs/plugin-react': 4.7.0(vite@5.4.20(@types/node@24.7.2)(lightningcss@1.30.1)(terser@5.44.0)) + '@vitejs/plugin-react': 5.1.0(vite@7.1.12(@types/node@24.9.2)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)) autoprefixer: 10.4.21(postcss@8.5.6) chalk: 4.1.2 classnames: 2.5.1 @@ -19905,7 +19841,7 @@ snapshots: hash-it: 6.0.0 html-to-text: 9.0.5 lilconfig: 3.1.3 - magic-string: 0.30.19 + magic-string: 0.30.21 md-to-react-email: 5.0.4(react@19.2.0) micromatch: 4.0.8 mime-types: 2.1.35 @@ -19920,18 +19856,19 @@ snapshots: rehype-stringify: 10.0.1 shiki: 1.29.2 source-map-support: 0.5.21 - std-env: 3.9.0 - tailwindcss: 3.4.15(ts-node@10.9.2(@swc/core@1.7.26)(@types/node@24.7.2)(typescript@5.9.3)) + std-env: 3.10.0 + tailwindcss: 3.4.15(ts-node@10.9.2(@swc/core@1.7.26)(@types/node@24.9.2)(typescript@5.9.3)) titleize: 4.0.0 unist-util-visit: 5.0.0 valibot: 0.42.1(typescript@5.9.3) - vite: 5.4.20(@types/node@24.7.2)(lightningcss@1.30.1)(terser@5.44.0) + vite: 7.1.12(@types/node@24.9.2)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1) yargs-parser: 21.1.1 transitivePeerDependencies: - '@emotion/is-prop-valid' - '@types/node' - '@types/react' - '@types/react-dom' + - jiti - less - lightningcss - sass @@ -19941,7 +19878,9 @@ snapshots: - supports-color - terser - ts-node + - tsx - typescript + - yaml jwa@1.4.2: dependencies: @@ -19966,16 +19905,16 @@ snapshots: kleur@4.1.5: {} - knip@5.64.3(@types/node@24.7.2)(typescript@5.9.3): + knip@5.66.4(@types/node@24.9.2)(typescript@5.9.3): dependencies: '@nodelib/fs.walk': 1.2.8 - '@types/node': 24.7.2 + '@types/node': 24.9.2 fast-glob: 3.3.3 formatly: 0.3.0 jiti: 2.6.1 js-yaml: 4.1.0 minimist: 1.2.8 - oxc-resolver: 11.9.0 + oxc-resolver: 11.12.0 picocolors: 1.1.1 picomatch: 4.0.3 smol-toml: 1.4.2 @@ -19996,50 +19935,54 @@ snapshots: dependencies: isomorphic.js: 0.2.5 - lightningcss-darwin-arm64@1.30.1: + lightningcss-android-arm64@1.30.2: + optional: true + + lightningcss-darwin-arm64@1.30.2: optional: true - lightningcss-darwin-x64@1.30.1: + lightningcss-darwin-x64@1.30.2: optional: true - lightningcss-freebsd-x64@1.30.1: + lightningcss-freebsd-x64@1.30.2: optional: true - lightningcss-linux-arm-gnueabihf@1.30.1: + lightningcss-linux-arm-gnueabihf@1.30.2: optional: true - lightningcss-linux-arm64-gnu@1.30.1: + lightningcss-linux-arm64-gnu@1.30.2: optional: true - lightningcss-linux-arm64-musl@1.30.1: + lightningcss-linux-arm64-musl@1.30.2: optional: true - lightningcss-linux-x64-gnu@1.30.1: + lightningcss-linux-x64-gnu@1.30.2: optional: true - lightningcss-linux-x64-musl@1.30.1: + lightningcss-linux-x64-musl@1.30.2: optional: true - lightningcss-win32-arm64-msvc@1.30.1: + lightningcss-win32-arm64-msvc@1.30.2: optional: true - lightningcss-win32-x64-msvc@1.30.1: + lightningcss-win32-x64-msvc@1.30.2: optional: true - lightningcss@1.30.1: + lightningcss@1.30.2: dependencies: detect-libc: 2.1.2 optionalDependencies: - lightningcss-darwin-arm64: 1.30.1 - lightningcss-darwin-x64: 1.30.1 - lightningcss-freebsd-x64: 1.30.1 - lightningcss-linux-arm-gnueabihf: 1.30.1 - lightningcss-linux-arm64-gnu: 1.30.1 - lightningcss-linux-arm64-musl: 1.30.1 - lightningcss-linux-x64-gnu: 1.30.1 - lightningcss-linux-x64-musl: 1.30.1 - lightningcss-win32-arm64-msvc: 1.30.1 - lightningcss-win32-x64-msvc: 1.30.1 + lightningcss-android-arm64: 1.30.2 + lightningcss-darwin-arm64: 1.30.2 + lightningcss-darwin-x64: 1.30.2 + lightningcss-freebsd-x64: 1.30.2 + lightningcss-linux-arm-gnueabihf: 1.30.2 + lightningcss-linux-arm64-gnu: 1.30.2 + lightningcss-linux-arm64-musl: 1.30.2 + lightningcss-linux-x64-gnu: 1.30.2 + lightningcss-linux-x64-musl: 1.30.2 + lightningcss-win32-arm64-msvc: 1.30.2 + lightningcss-win32-x64-msvc: 1.30.2 lilconfig@2.1.0: {} @@ -20129,6 +20072,8 @@ snapshots: dependencies: tslib: 2.8.1 + lowercase-keys@3.0.0: {} + lowlight@3.3.0: dependencies: '@types/hast': 3.0.4 @@ -20158,7 +20103,7 @@ snapshots: dependencies: sourcemap-codec: 1.4.8 - magic-string@0.30.19: + magic-string@0.30.21: dependencies: '@jridgewell/sourcemap-codec': 1.5.5 @@ -20168,8 +20113,8 @@ snapshots: magicast@0.3.5: dependencies: - '@babel/parser': 7.28.4 - '@babel/types': 7.28.4 + '@babel/parser': 7.28.5 + '@babel/types': 7.28.5 source-map-js: 1.2.1 make-cancellable-promise@1.3.2: {} @@ -20207,8 +20152,8 @@ snapshots: dependencies: '@types/mdast': 4.0.4 escape-string-regexp: 5.0.0 - unist-util-is: 6.0.0 - unist-util-visit-parents: 6.0.1 + unist-util-is: 6.0.1 + unist-util-visit-parents: 6.0.2 mdast-util-from-markdown@2.0.2: dependencies: @@ -20287,7 +20232,7 @@ snapshots: mdast-util-phrasing@4.1.0: dependencies: '@types/mdast': 4.0.4 - unist-util-is: 6.0.0 + unist-util-is: 6.0.1 mdast-util-to-hast@13.2.0: dependencies: @@ -20539,12 +20484,13 @@ snapshots: dependencies: mime-db: 1.52.0 - mimic-response@3.1.0: - optional: true + mimic-response@3.1.0: {} + + mimic-response@4.0.0: {} min-indent@1.0.1: {} - minimatch@10.0.3: + minimatch@10.1.1: dependencies: '@isaacs/brace-expansion': 5.0.0 @@ -20585,10 +20531,6 @@ snapshots: minipass: 3.3.6 yallist: 4.0.0 - minizlib@3.1.0: - dependencies: - minipass: 7.1.2 - mitt@3.0.1: {} mkdirp-classic@0.5.3: @@ -20656,7 +20598,7 @@ snapshots: lower-case: 2.0.2 tslib: 2.8.1 - node-abi@3.78.0: + node-abi@3.80.0: dependencies: semver: 7.7.3 @@ -20680,7 +20622,7 @@ snapshots: css-select: 5.2.2 he: 1.2.0 - node-releases@2.0.23: {} + node-releases@2.0.27: {} nopt@7.2.1: dependencies: @@ -20690,6 +20632,8 @@ snapshots: normalize-range@0.1.2: {} + normalize-url@8.1.0: {} + nth-check@2.1.1: dependencies: boolbase: 1.0.0 @@ -20754,12 +20698,12 @@ snapshots: regex: 6.0.1 regex-recursion: 6.0.2 - open@10.1.2: + open@10.2.0: dependencies: default-browser: 5.2.1 define-lazy-prop: 3.0.0 is-inside-container: 1.0.0 - is-wsl: 3.1.0 + wsl-utils: 0.1.0 open@8.4.2: dependencies: @@ -20790,27 +20734,29 @@ snapshots: object-keys: 1.1.1 safe-push-apply: 1.0.0 - oxc-resolver@11.9.0: + oxc-resolver@11.12.0: optionalDependencies: - '@oxc-resolver/binding-android-arm-eabi': 11.9.0 - '@oxc-resolver/binding-android-arm64': 11.9.0 - '@oxc-resolver/binding-darwin-arm64': 11.9.0 - '@oxc-resolver/binding-darwin-x64': 11.9.0 - '@oxc-resolver/binding-freebsd-x64': 11.9.0 - '@oxc-resolver/binding-linux-arm-gnueabihf': 11.9.0 - '@oxc-resolver/binding-linux-arm-musleabihf': 11.9.0 - '@oxc-resolver/binding-linux-arm64-gnu': 11.9.0 - '@oxc-resolver/binding-linux-arm64-musl': 11.9.0 - '@oxc-resolver/binding-linux-ppc64-gnu': 11.9.0 - '@oxc-resolver/binding-linux-riscv64-gnu': 11.9.0 - '@oxc-resolver/binding-linux-riscv64-musl': 11.9.0 - '@oxc-resolver/binding-linux-s390x-gnu': 11.9.0 - '@oxc-resolver/binding-linux-x64-gnu': 11.9.0 - '@oxc-resolver/binding-linux-x64-musl': 11.9.0 - '@oxc-resolver/binding-wasm32-wasi': 11.9.0 - '@oxc-resolver/binding-win32-arm64-msvc': 11.9.0 - '@oxc-resolver/binding-win32-ia32-msvc': 11.9.0 - '@oxc-resolver/binding-win32-x64-msvc': 11.9.0 + '@oxc-resolver/binding-android-arm-eabi': 11.12.0 + '@oxc-resolver/binding-android-arm64': 11.12.0 + '@oxc-resolver/binding-darwin-arm64': 11.12.0 + '@oxc-resolver/binding-darwin-x64': 11.12.0 + '@oxc-resolver/binding-freebsd-x64': 11.12.0 + '@oxc-resolver/binding-linux-arm-gnueabihf': 11.12.0 + '@oxc-resolver/binding-linux-arm-musleabihf': 11.12.0 + '@oxc-resolver/binding-linux-arm64-gnu': 11.12.0 + '@oxc-resolver/binding-linux-arm64-musl': 11.12.0 + '@oxc-resolver/binding-linux-ppc64-gnu': 11.12.0 + '@oxc-resolver/binding-linux-riscv64-gnu': 11.12.0 + '@oxc-resolver/binding-linux-riscv64-musl': 11.12.0 + '@oxc-resolver/binding-linux-s390x-gnu': 11.12.0 + '@oxc-resolver/binding-linux-x64-gnu': 11.12.0 + '@oxc-resolver/binding-linux-x64-musl': 11.12.0 + '@oxc-resolver/binding-wasm32-wasi': 11.12.0 + '@oxc-resolver/binding-win32-arm64-msvc': 11.12.0 + '@oxc-resolver/binding-win32-ia32-msvc': 11.12.0 + '@oxc-resolver/binding-win32-x64-msvc': 11.12.0 + + p-cancelable@4.0.1: {} p-defer@3.0.0: {} @@ -20873,6 +20819,10 @@ snapshots: dependencies: entities: 6.0.1 + parse5@8.0.0: + dependencies: + entities: 6.0.1 + parseley@0.12.1: dependencies: leac: 0.6.0 @@ -20975,7 +20925,7 @@ snapshots: pino-http@11.0.0: dependencies: get-caller-file: 2.0.5 - pino: 10.0.0 + pino: 10.1.0 pino-std-serializers: 7.0.0 process-warning: 5.0.0 @@ -20997,8 +20947,9 @@ snapshots: pino-std-serializers@7.0.0: {} - pino@10.0.0: + pino@10.1.0: dependencies: + '@pinojs/redact': 0.4.0 atomic-sleep: 1.0.0 on-exit-leak-free: 2.1.2 pino-abstract-transport: 2.0.0 @@ -21007,7 +20958,6 @@ snapshots: quick-format-unescaped: 4.0.4 real-require: 0.2.0 safe-stable-stringify: 2.5.0 - slow-redact: 0.3.2 sonic-boom: 4.2.0 thread-stream: 3.1.0 @@ -21031,11 +20981,11 @@ snapshots: transitivePeerDependencies: - react - playwright-core@1.56.0: {} + playwright-core@1.56.1: {} - playwright@1.56.0: + playwright@1.56.1: dependencies: - playwright-core: 1.56.0 + playwright-core: 1.56.1 optionalDependencies: fsevents: 2.3.2 @@ -21046,20 +20996,20 @@ snapshots: postcss: 8.5.6 postcss-value-parser: 4.2.0 read-cache: 1.0.0 - resolve: 1.22.10 + resolve: 1.22.11 postcss-js@4.1.0(postcss@8.5.6): dependencies: camelcase-css: 2.0.1 postcss: 8.5.6 - postcss-load-config@4.0.2(postcss@8.5.6)(ts-node@10.9.2(@swc/core@1.7.26)(@types/node@24.7.2)(typescript@5.9.3)): + postcss-load-config@4.0.2(postcss@8.5.6)(ts-node@10.9.2(@swc/core@1.7.26)(@types/node@24.9.2)(typescript@5.9.3)): dependencies: lilconfig: 3.1.3 yaml: 2.8.1 optionalDependencies: postcss: 8.5.6 - ts-node: 10.9.2(@swc/core@1.7.26)(@types/node@24.7.2)(typescript@5.9.3) + ts-node: 10.9.2(@swc/core@1.7.26)(@types/node@24.9.2)(typescript@5.9.3) postcss-load-config@6.0.1(jiti@2.6.1)(postcss@8.5.6)(tsx@4.20.6)(yaml@2.8.1): dependencies: @@ -21121,7 +21071,7 @@ snapshots: minimist: 1.2.8 mkdirp-classic: 0.5.3 napi-build-utils: 2.0.0 - node-abi: 3.78.0 + node-abi: 3.80.0 pump: 3.0.3 rc: 1.2.8 simple-get: 4.0.1 @@ -21177,112 +21127,112 @@ snapshots: prosemirror-collab@1.3.1: dependencies: - prosemirror-state: 1.4.3 + prosemirror-state: 1.4.4 prosemirror-commands@1.7.1: dependencies: - prosemirror-model: 1.25.3 - prosemirror-state: 1.4.3 + prosemirror-model: 1.25.4 + prosemirror-state: 1.4.4 prosemirror-transform: 1.10.4 prosemirror-dropcursor@1.8.2: dependencies: - prosemirror-state: 1.4.3 + prosemirror-state: 1.4.4 prosemirror-transform: 1.10.4 prosemirror-view: 1.41.3 - prosemirror-gapcursor@1.3.2: + prosemirror-gapcursor@1.4.0: dependencies: prosemirror-keymap: 1.2.3 - prosemirror-model: 1.25.3 - prosemirror-state: 1.4.3 + prosemirror-model: 1.25.4 + prosemirror-state: 1.4.4 prosemirror-view: 1.41.3 - prosemirror-highlight@0.13.0(@shikijs/types@3.13.0)(@types/hast@3.0.4)(highlight.js@11.11.1)(lowlight@3.3.0)(prosemirror-model@1.25.3)(prosemirror-state@1.4.3)(prosemirror-transform@1.10.4)(prosemirror-view@1.41.3): + prosemirror-highlight@0.13.0(@shikijs/types@3.13.0)(@types/hast@3.0.4)(highlight.js@11.11.1)(lowlight@3.3.0)(prosemirror-model@1.25.4)(prosemirror-state@1.4.4)(prosemirror-transform@1.10.4)(prosemirror-view@1.41.3): optionalDependencies: '@shikijs/types': 3.13.0 '@types/hast': 3.0.4 highlight.js: 11.11.1 lowlight: 3.3.0 - prosemirror-model: 1.25.3 - prosemirror-state: 1.4.3 + prosemirror-model: 1.25.4 + prosemirror-state: 1.4.4 prosemirror-transform: 1.10.4 prosemirror-view: 1.41.3 prosemirror-history@1.4.1: dependencies: - prosemirror-state: 1.4.3 + prosemirror-state: 1.4.4 prosemirror-transform: 1.10.4 prosemirror-view: 1.41.3 rope-sequence: 1.3.4 - prosemirror-inputrules@1.5.0: + prosemirror-inputrules@1.5.1: dependencies: - prosemirror-state: 1.4.3 + prosemirror-state: 1.4.4 prosemirror-transform: 1.10.4 prosemirror-keymap@1.2.3: dependencies: - prosemirror-state: 1.4.3 + prosemirror-state: 1.4.4 w3c-keyname: 2.2.8 prosemirror-markdown@1.13.2: dependencies: '@types/markdown-it': 14.1.2 markdown-it: 14.1.0 - prosemirror-model: 1.25.3 + prosemirror-model: 1.25.4 prosemirror-menu@1.2.5: dependencies: crelt: 1.0.6 prosemirror-commands: 1.7.1 prosemirror-history: 1.4.1 - prosemirror-state: 1.4.3 + prosemirror-state: 1.4.4 - prosemirror-model@1.25.3: + prosemirror-model@1.25.4: dependencies: orderedmap: 2.1.1 prosemirror-schema-basic@1.2.4: dependencies: - prosemirror-model: 1.25.3 + prosemirror-model: 1.25.4 prosemirror-schema-list@1.5.1: dependencies: - prosemirror-model: 1.25.3 - prosemirror-state: 1.4.3 + prosemirror-model: 1.25.4 + prosemirror-state: 1.4.4 prosemirror-transform: 1.10.4 - prosemirror-state@1.4.3: + prosemirror-state@1.4.4: dependencies: - prosemirror-model: 1.25.3 + prosemirror-model: 1.25.4 prosemirror-transform: 1.10.4 prosemirror-view: 1.41.3 prosemirror-tables@1.8.1: dependencies: prosemirror-keymap: 1.2.3 - prosemirror-model: 1.25.3 - prosemirror-state: 1.4.3 + prosemirror-model: 1.25.4 + prosemirror-state: 1.4.4 prosemirror-transform: 1.10.4 prosemirror-view: 1.41.3 - prosemirror-trailing-node@3.0.0(prosemirror-model@1.25.3)(prosemirror-state@1.4.3)(prosemirror-view@1.41.3): + prosemirror-trailing-node@3.0.0(prosemirror-model@1.25.4)(prosemirror-state@1.4.4)(prosemirror-view@1.41.3): dependencies: '@remirror/core-constants': 3.0.0 escape-string-regexp: 4.0.0 - prosemirror-model: 1.25.3 - prosemirror-state: 1.4.3 + prosemirror-model: 1.25.4 + prosemirror-state: 1.4.4 prosemirror-view: 1.41.3 prosemirror-transform@1.10.4: dependencies: - prosemirror-model: 1.25.3 + prosemirror-model: 1.25.4 prosemirror-view@1.41.3: dependencies: - prosemirror-model: 1.25.3 - prosemirror-state: 1.4.3 + prosemirror-model: 1.25.4 + prosemirror-state: 1.4.4 prosemirror-transform: 1.10.4 proto-list@1.2.4: {} @@ -21299,7 +21249,7 @@ snapshots: '@protobufjs/path': 1.1.2 '@protobufjs/pool': 1.1.0 '@protobufjs/utf8': 1.1.0 - '@types/node': 24.7.2 + '@types/node': 24.9.2 long: 5.3.2 proxy-from-env@1.1.0: {} @@ -21329,6 +21279,8 @@ snapshots: quick-format-unescaped@4.0.4: {} + quick-lru@5.1.1: {} + raf-schd@4.0.3: {} raf@3.4.1: @@ -21340,7 +21292,7 @@ snapshots: dependencies: safe-buffer: 5.2.1 - rate-limiter-flexible@8.0.1: {} + rate-limiter-flexible@8.1.0: {} rc9@2.1.2: dependencies: @@ -21373,16 +21325,16 @@ snapshots: react-docgen@8.0.2: dependencies: - '@babel/core': 7.28.4 - '@babel/traverse': 7.28.4 - '@babel/types': 7.28.4 + '@babel/core': 7.28.5 + '@babel/traverse': 7.28.5 + '@babel/types': 7.28.5 '@types/babel__core': 7.20.5 '@types/babel__traverse': 7.28.0 '@types/doctrine': 0.0.9 '@types/resolve': 1.20.6 doctrine: 3.0.0 - resolve: 1.22.10 - strip-indent: 4.1.0 + resolve: 1.22.11 + strip-indent: 4.1.1 transitivePeerDependencies: - supports-color @@ -21410,12 +21362,13 @@ snapshots: react-dom: 19.2.0(react@19.2.0) typescript: 5.9.3 - react-i18next@16.0.0(i18next@25.6.0(typescript@5.9.3))(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(typescript@5.9.3): + react-i18next@16.2.2(i18next@25.6.0(typescript@5.9.3))(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(typescript@5.9.3): dependencies: '@babel/runtime': 7.28.4 html-parse-stringify: 3.0.1 i18next: 25.6.0(typescript@5.9.3) react: 19.2.0 + use-sync-external-store: 1.6.0(react@19.2.0) optionalDependencies: react-dom: 19.2.0(react@19.2.0) typescript: 5.9.3 @@ -21462,7 +21415,7 @@ snapshots: '@types/react': 19.2.2 redux: 5.0.1 - react-refresh@0.17.0: {} + react-refresh@0.18.0: {} react-remove-scroll-bar@2.3.8(@types/react@19.2.2)(react@19.2.0): dependencies: @@ -21509,28 +21462,28 @@ snapshots: dependencies: cookie: 1.0.2 react: 19.2.0 - set-cookie-parser: 2.7.1 + set-cookie-parser: 2.7.2 turbo-stream: 2.4.0 optionalDependencies: react-dom: 19.2.0(react@19.2.0) react-scan@0.4.3(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react-router-dom@7.5.2(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(react-router@7.5.2(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(react@19.2.0)(rollup@2.79.2): dependencies: - '@babel/core': 7.28.4 - '@babel/generator': 7.28.3 - '@babel/types': 7.28.4 + '@babel/core': 7.28.5 + '@babel/generator': 7.28.5 + '@babel/types': 7.28.5 '@clack/core': 0.3.5 '@clack/prompts': 0.8.2 '@pivanov/utils': 0.0.2(react-dom@19.2.0(react@19.2.0))(react@19.2.0) '@preact/signals': 1.3.2(preact@10.27.2) '@rollup/pluginutils': 5.3.0(rollup@2.79.2) - '@types/node': 20.19.21 - bippy: 0.3.28(@types/react@19.2.2)(react@19.2.0) - esbuild: 0.25.10 + '@types/node': 20.19.24 + bippy: 0.3.34(@types/react@19.2.2)(react@19.2.0) + esbuild: 0.25.11 estree-walker: 3.0.3 kleur: 4.1.5 mri: 1.2.0 - playwright: 1.56.0 + playwright: 1.56.1 preact: 10.27.2 react: 19.2.0 react-dom: 19.2.0(react@19.2.0) @@ -21584,14 +21537,14 @@ snapshots: tiny-invariant: 1.3.3 tslib: 2.8.1 - recharts@3.2.1(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react-is@18.3.1)(react@19.2.0)(redux@5.0.1): + recharts@3.3.0(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react-is@18.3.1)(react@19.2.0)(redux@5.0.1): dependencies: - '@reduxjs/toolkit': 2.9.0(react-redux@9.2.0(@types/react@19.2.2)(react@19.2.0)(redux@5.0.1))(react@19.2.0) + '@reduxjs/toolkit': 2.9.2(react-redux@9.2.0(@types/react@19.2.2)(react@19.2.0)(redux@5.0.1))(react@19.2.0) clsx: 2.1.1 decimal.js-light: 2.5.1 - es-toolkit: 1.40.0 + es-toolkit: 1.41.0 eventemitter3: 5.0.1 - immer: 10.1.3 + immer: 10.2.0 react: 19.2.0 react-dom: 19.2.0(react@19.2.0) react-is: 18.3.1 @@ -21887,11 +21840,11 @@ snapshots: dependencies: debug: 4.4.3 module-details-from-path: 1.0.4 - resolve: 1.22.10 + resolve: 1.22.11 transitivePeerDependencies: - supports-color - require-in-the-middle@8.0.0: + require-in-the-middle@8.0.1: dependencies: debug: 4.4.3 module-details-from-path: 1.0.4 @@ -21902,18 +21855,24 @@ snapshots: reselect@5.1.1: {} + resolve-alpn@1.2.1: {} + resolve-from@4.0.0: {} resolve-from@5.0.0: {} resolve-pkg-maps@1.0.0: {} - resolve@1.22.10: + resolve@1.22.11: dependencies: is-core-module: 2.16.1 path-parse: 1.0.7 supports-preserve-symlinks-flag: 1.0.0 + responselike@3.0.0: + dependencies: + lowercase-keys: 3.0.0 + retry@0.12.0: {} retry@0.13.1: {} @@ -21938,7 +21897,7 @@ snapshots: glob: 11.0.3 package-json-from-dist: 1.0.1 - rollup-plugin-visualizer@6.0.4(rollup@2.79.2): + rollup-plugin-visualizer@6.0.5(rollup@2.79.2): dependencies: open: 8.4.2 picomatch: 4.0.3 @@ -21951,32 +21910,32 @@ snapshots: optionalDependencies: fsevents: 2.3.3 - rollup@4.52.4: + rollup@4.52.5: dependencies: '@types/estree': 1.0.8 optionalDependencies: - '@rollup/rollup-android-arm-eabi': 4.52.4 - '@rollup/rollup-android-arm64': 4.52.4 - '@rollup/rollup-darwin-arm64': 4.52.4 - '@rollup/rollup-darwin-x64': 4.52.4 - '@rollup/rollup-freebsd-arm64': 4.52.4 - '@rollup/rollup-freebsd-x64': 4.52.4 - '@rollup/rollup-linux-arm-gnueabihf': 4.52.4 - '@rollup/rollup-linux-arm-musleabihf': 4.52.4 - '@rollup/rollup-linux-arm64-gnu': 4.52.4 - '@rollup/rollup-linux-arm64-musl': 4.52.4 - '@rollup/rollup-linux-loong64-gnu': 4.52.4 - '@rollup/rollup-linux-ppc64-gnu': 4.52.4 - '@rollup/rollup-linux-riscv64-gnu': 4.52.4 - '@rollup/rollup-linux-riscv64-musl': 4.52.4 - '@rollup/rollup-linux-s390x-gnu': 4.52.4 - '@rollup/rollup-linux-x64-gnu': 4.52.4 - '@rollup/rollup-linux-x64-musl': 4.52.4 - '@rollup/rollup-openharmony-arm64': 4.52.4 - '@rollup/rollup-win32-arm64-msvc': 4.52.4 - '@rollup/rollup-win32-ia32-msvc': 4.52.4 - '@rollup/rollup-win32-x64-gnu': 4.52.4 - '@rollup/rollup-win32-x64-msvc': 4.52.4 + '@rollup/rollup-android-arm-eabi': 4.52.5 + '@rollup/rollup-android-arm64': 4.52.5 + '@rollup/rollup-darwin-arm64': 4.52.5 + '@rollup/rollup-darwin-x64': 4.52.5 + '@rollup/rollup-freebsd-arm64': 4.52.5 + '@rollup/rollup-freebsd-x64': 4.52.5 + '@rollup/rollup-linux-arm-gnueabihf': 4.52.5 + '@rollup/rollup-linux-arm-musleabihf': 4.52.5 + '@rollup/rollup-linux-arm64-gnu': 4.52.5 + '@rollup/rollup-linux-arm64-musl': 4.52.5 + '@rollup/rollup-linux-loong64-gnu': 4.52.5 + '@rollup/rollup-linux-ppc64-gnu': 4.52.5 + '@rollup/rollup-linux-riscv64-gnu': 4.52.5 + '@rollup/rollup-linux-riscv64-musl': 4.52.5 + '@rollup/rollup-linux-s390x-gnu': 4.52.5 + '@rollup/rollup-linux-x64-gnu': 4.52.5 + '@rollup/rollup-linux-x64-musl': 4.52.5 + '@rollup/rollup-openharmony-arm64': 4.52.5 + '@rollup/rollup-win32-arm64-msvc': 4.52.5 + '@rollup/rollup-win32-ia32-msvc': 4.52.5 + '@rollup/rollup-win32-x64-gnu': 4.52.5 + '@rollup/rollup-win32-x64-msvc': 4.52.5 fsevents: 2.3.3 rope-sequence@1.3.4: {} @@ -22069,7 +22028,7 @@ snapshots: seroval@1.3.2: {} - set-cookie-parser@2.7.1: {} + set-cookie-parser@2.7.2: {} set-function-length@1.2.2: dependencies: @@ -22170,8 +22129,6 @@ snapshots: slash@5.1.0: {} - slow-redact@0.3.2: {} - slugify@1.6.6: {} smob@1.5.0: {} @@ -22233,24 +22190,24 @@ snapshots: stackblur-canvas@2.7.0: optional: true - std-env@3.9.0: {} + std-env@3.10.0: {} stop-iteration-iterator@1.1.0: dependencies: es-errors: 1.3.0 internal-slot: 1.1.0 - storybook@9.1.10(@testing-library/dom@10.4.1)(prettier@3.6.2)(vite@7.1.9(@types/node@24.7.2)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)): + storybook@9.1.16(@testing-library/dom@10.4.1)(prettier@3.6.2)(vite@7.1.12(@types/node@24.9.2)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)): dependencies: '@storybook/global': 5.0.0 '@testing-library/jest-dom': 6.9.1 '@testing-library/user-event': 14.6.1(@testing-library/dom@10.4.1) '@vitest/expect': 3.2.4 - '@vitest/mocker': 3.2.4(vite@7.1.9(@types/node@24.7.2)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)) + '@vitest/mocker': 3.2.4(vite@7.1.12(@types/node@24.9.2)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)) '@vitest/spy': 3.2.4 better-opn: 3.0.2 - esbuild: 0.25.10 - esbuild-register: 3.6.0(esbuild@0.25.10) + esbuild: 0.25.11 + esbuild-register: 3.6.0(esbuild@0.25.11) recast: 0.23.11 semver: 7.7.3 ws: 8.18.3 @@ -22351,7 +22308,7 @@ snapshots: dependencies: min-indent: 1.0.1 - strip-indent@4.1.0: {} + strip-indent@4.1.1: {} strip-json-comments@2.0.1: optional: true @@ -22368,9 +22325,9 @@ snapshots: strnum@2.1.1: {} - style-to-object@1.0.11: + style-to-object@1.0.12: dependencies: - inline-style-parser: 0.2.4 + inline-style-parser: 0.2.6 sucrase@3.35.0: dependencies: @@ -22397,17 +22354,19 @@ snapshots: symbol-tree@3.2.4: {} - tabbable@6.2.0: {} + tabbable@6.3.0: {} + + tagged-tag@1.0.0: {} tailwind-merge@2.6.0: {} tailwind-merge@3.3.1: {} - tailwindcss-animate@1.0.7(tailwindcss@4.1.14): + tailwindcss-animate@1.0.7(tailwindcss@4.1.16): dependencies: - tailwindcss: 4.1.14 + tailwindcss: 4.1.16 - tailwindcss@3.4.15(ts-node@10.9.2(@swc/core@1.7.26)(@types/node@24.7.2)(typescript@5.9.3)): + tailwindcss@3.4.15(ts-node@10.9.2(@swc/core@1.7.26)(@types/node@24.9.2)(typescript@5.9.3)): dependencies: '@alloc/quick-lru': 5.2.0 arg: 5.0.2 @@ -22426,15 +22385,15 @@ snapshots: postcss: 8.5.6 postcss-import: 15.1.0(postcss@8.5.6) postcss-js: 4.1.0(postcss@8.5.6) - postcss-load-config: 4.0.2(postcss@8.5.6)(ts-node@10.9.2(@swc/core@1.7.26)(@types/node@24.7.2)(typescript@5.9.3)) + postcss-load-config: 4.0.2(postcss@8.5.6)(ts-node@10.9.2(@swc/core@1.7.26)(@types/node@24.9.2)(typescript@5.9.3)) postcss-nested: 6.2.0(postcss@8.5.6) postcss-selector-parser: 6.1.2 - resolve: 1.22.10 + resolve: 1.22.11 sucrase: 3.35.0 transitivePeerDependencies: - ts-node - tailwindcss@4.1.14: {} + tailwindcss@4.1.16: {} tapable@2.3.0: {} @@ -22464,14 +22423,6 @@ snapshots: mkdirp: 1.0.4 yallist: 4.0.0 - tar@7.5.1: - dependencies: - '@isaacs/fs-minipass': 4.0.1 - chownr: 3.0.0 - minipass: 7.1.2 - minizlib: 3.1.0 - yallist: 5.0.0 - tdigest@0.1.2: dependencies: bintrees: 1.0.2 @@ -22575,6 +22526,23 @@ snapshots: dependencies: punycode: 2.3.1 + transloadit@4.0.5: + dependencies: + '@aws-sdk/client-s3': 3.920.0 + '@aws-sdk/s3-request-presigner': 3.920.0 + debug: 4.4.3 + form-data: 4.0.4 + got: 14.4.9 + into-stream: 9.0.0 + is-stream: 4.0.1 + p-map: 7.0.3 + tus-js-client: 4.3.1 + type-fest: 4.41.0 + zod: 3.25.76 + transitivePeerDependencies: + - aws-crt + - supports-color + tree-kill@1.2.2: {} trim-lines@3.0.1: {} @@ -22587,14 +22555,14 @@ snapshots: ts-interface-checker@0.1.13: {} - ts-node@10.9.2(@swc/core@1.7.26)(@types/node@24.7.2)(typescript@5.9.3): + ts-node@10.9.2(@swc/core@1.7.26)(@types/node@24.9.2)(typescript@5.9.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': 24.7.2 + '@types/node': 24.9.2 acorn: 8.15.0 acorn-walk: 8.3.4 arg: 4.1.3 @@ -22622,18 +22590,18 @@ snapshots: tsup@8.5.0(@swc/core@1.7.26)(jiti@2.6.1)(postcss@8.5.6)(tsx@4.20.6)(typescript@5.9.3)(yaml@2.8.1): dependencies: - bundle-require: 5.1.0(esbuild@0.25.10) + bundle-require: 5.1.0(esbuild@0.25.11) cac: 6.7.14 chokidar: 4.0.3 consola: 3.4.2 debug: 4.4.3 - esbuild: 0.25.10 + esbuild: 0.25.11 fix-dts-default-cjs-exports: 1.0.1 joycon: 3.1.1 picocolors: 1.1.1 postcss-load-config: 6.0.1(jiti@2.6.1)(postcss@8.5.6)(tsx@4.20.6)(yaml@2.8.1) resolve-from: 5.0.0 - rollup: 4.52.4 + rollup: 4.52.5 source-map: 0.8.0-beta.0 sucrase: 3.35.0 tinyexec: 0.3.2 @@ -22651,8 +22619,8 @@ snapshots: tsx@4.20.6: dependencies: - esbuild: 0.25.10 - get-tsconfig: 4.12.0 + esbuild: 0.25.11 + get-tsconfig: 4.13.0 optionalDependencies: fsevents: 2.3.3 @@ -22688,6 +22656,10 @@ snapshots: type-fest@4.41.0: {} + type-fest@5.0.0: + dependencies: + tagged-tag: 1.0.0 + typed-array-buffer@1.0.3: dependencies: call-bound: 1.0.4 @@ -22747,7 +22719,7 @@ snapshots: undici-types@6.21.0: {} - undici-types@7.14.0: {} + undici-types@7.16.0: {} undici@7.16.0: {} @@ -22783,9 +22755,9 @@ snapshots: unist-util-find-after@5.0.0: dependencies: '@types/unist': 3.0.3 - unist-util-is: 6.0.0 + unist-util-is: 6.0.1 - unist-util-is@6.0.0: + unist-util-is@6.0.1: dependencies: '@types/unist': 3.0.3 @@ -22796,23 +22768,23 @@ snapshots: unist-util-remove@4.0.0: dependencies: '@types/unist': 3.0.3 - unist-util-is: 6.0.0 - unist-util-visit-parents: 6.0.1 + unist-util-is: 6.0.1 + unist-util-visit-parents: 6.0.2 unist-util-stringify-position@4.0.0: dependencies: '@types/unist': 3.0.3 - unist-util-visit-parents@6.0.1: + unist-util-visit-parents@6.0.2: dependencies: '@types/unist': 3.0.3 - unist-util-is: 6.0.0 + unist-util-is: 6.0.1 unist-util-visit@5.0.0: dependencies: '@types/unist': 3.0.3 - unist-util-is: 6.0.0 - unist-util-visit-parents: 6.0.1 + unist-util-is: 6.0.1 + unist-util-visit-parents: 6.0.2 universalify@2.0.1: {} @@ -22843,9 +22815,9 @@ snapshots: upath@1.2.0: {} - update-browserslist-db@1.1.3(browserslist@4.26.3): + update-browserslist-db@1.1.4(browserslist@4.27.0): dependencies: - browserslist: 4.26.3 + browserslist: 4.27.0 escalade: 3.2.0 picocolors: 1.1.1 @@ -22906,9 +22878,9 @@ snapshots: validate-npm-package-name@5.0.1: {} - vaul@1.1.2(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0): + vaul@1.1.2(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0): dependencies: - '@radix-ui/react-dialog': 1.1.15(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@radix-ui/react-dialog': 1.1.15(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) react: 19.2.0 react-dom: 19.2.0(react@19.2.0) transitivePeerDependencies: @@ -22953,20 +22925,20 @@ snapshots: d3-time: 3.1.0 d3-timer: 3.0.1 - virtua@0.45.2(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(solid-js@1.9.9)(vue@3.5.13(typescript@5.9.3)): + virtua@0.46.4(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(solid-js@1.9.9)(vue@3.5.13(typescript@5.9.3)): optionalDependencies: react: 19.2.0 react-dom: 19.2.0(react@19.2.0) solid-js: 1.9.9 vue: 3.5.13(typescript@5.9.3) - vite-node@3.2.4(@types/node@24.7.2)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1): + vite-node@3.2.4(@types/node@24.9.2)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1): dependencies: cac: 6.7.14 debug: 4.4.3 es-module-lexer: 1.7.0 pathe: 2.0.3 - vite: 7.1.9(@types/node@24.7.2)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1) + vite: 7.1.12(@types/node@24.9.2)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1) transitivePeerDependencies: - '@types/node' - jiti @@ -22981,7 +22953,7 @@ snapshots: - tsx - yaml - vite-plugin-html@3.2.2(vite@7.1.9(@types/node@24.7.2)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)): + vite-plugin-html@3.2.2(vite@7.1.12(@types/node@24.9.2)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)): dependencies: '@rollup/pluginutils': 4.2.1 colorette: 2.0.20 @@ -22995,72 +22967,60 @@ snapshots: html-minifier-terser: 6.1.0 node-html-parser: 5.4.2 pathe: 0.2.0 - vite: 7.1.9(@types/node@24.7.2)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1) + vite: 7.1.12(@types/node@24.9.2)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1) - vite-plugin-pwa@1.0.3(vite@7.1.9(@types/node@24.7.2)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1))(workbox-build@7.3.0(@types/babel__core@7.20.5))(workbox-window@7.3.0): + vite-plugin-pwa@1.1.0(vite@7.1.12(@types/node@24.9.2)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1))(workbox-build@7.3.0(@types/babel__core@7.20.5))(workbox-window@7.3.0): dependencies: debug: 4.4.3 pretty-bytes: 6.1.1 tinyglobby: 0.2.15 - vite: 7.1.9(@types/node@24.7.2)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1) + vite: 7.1.12(@types/node@24.9.2)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1) workbox-build: 7.3.0(@types/babel__core@7.20.5) workbox-window: 7.3.0 transitivePeerDependencies: - supports-color - vite-plugin-static-copy@3.1.3(vite@7.1.9(@types/node@24.7.2)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)): + vite-plugin-static-copy@3.1.4(vite@7.1.12(@types/node@24.9.2)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)): dependencies: chokidar: 3.6.0 - fs-extra: 11.3.2 p-map: 7.0.3 picocolors: 1.1.1 tinyglobby: 0.2.15 - vite: 7.1.9(@types/node@24.7.2)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1) + vite: 7.1.12(@types/node@24.9.2)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1) - vite-tsconfig-paths@5.1.4(typescript@5.9.3)(vite@7.1.9(@types/node@24.7.2)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)): + vite-tsconfig-paths@5.1.4(typescript@5.9.3)(vite@7.1.12(@types/node@24.9.2)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)): dependencies: debug: 4.4.3 globrex: 0.1.2 tsconfck: 3.1.6(typescript@5.9.3) optionalDependencies: - vite: 7.1.9(@types/node@24.7.2)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1) + vite: 7.1.12(@types/node@24.9.2)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1) transitivePeerDependencies: - supports-color - typescript - vite@5.4.20(@types/node@24.7.2)(lightningcss@1.30.1)(terser@5.44.0): - dependencies: - esbuild: 0.21.5 - postcss: 8.5.6 - rollup: 4.52.4 - optionalDependencies: - '@types/node': 24.7.2 - fsevents: 2.3.3 - lightningcss: 1.30.1 - terser: 5.44.0 - - vite@7.1.9(@types/node@24.7.2)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1): + vite@7.1.12(@types/node@24.9.2)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1): dependencies: - esbuild: 0.25.10 + esbuild: 0.25.11 fdir: 6.5.0(picomatch@4.0.3) picomatch: 4.0.3 postcss: 8.5.6 - rollup: 4.52.4 + rollup: 4.52.5 tinyglobby: 0.2.15 optionalDependencies: - '@types/node': 24.7.2 + '@types/node': 24.9.2 fsevents: 2.3.3 jiti: 2.6.1 - lightningcss: 1.30.1 + lightningcss: 1.30.2 terser: 5.44.0 tsx: 4.20.6 yaml: 2.8.1 - vitest@3.2.4(@types/debug@4.1.12)(@types/node@24.7.2)(@vitest/browser@3.2.4)(jiti@2.6.1)(jsdom@27.0.0(canvas@3.2.0)(postcss@8.5.6))(lightningcss@1.30.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1): + vitest@3.2.4(@types/debug@4.1.12)(@types/node@24.9.2)(@vitest/browser@3.2.4)(jiti@2.6.1)(jsdom@27.0.1(canvas@3.2.0)(postcss@8.5.6))(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1): dependencies: - '@types/chai': 5.2.2 + '@types/chai': 5.2.3 '@vitest/expect': 3.2.4 - '@vitest/mocker': 3.2.4(vite@7.1.9(@types/node@24.7.2)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)) + '@vitest/mocker': 3.2.4(vite@7.1.12(@types/node@24.9.2)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)) '@vitest/pretty-format': 3.2.4 '@vitest/runner': 3.2.4 '@vitest/snapshot': 3.2.4 @@ -23069,23 +23029,23 @@ snapshots: chai: 5.3.3 debug: 4.4.3 expect-type: 1.2.2 - magic-string: 0.30.19 + magic-string: 0.30.21 pathe: 2.0.3 picomatch: 4.0.3 - std-env: 3.9.0 + std-env: 3.10.0 tinybench: 2.9.0 tinyexec: 0.3.2 tinyglobby: 0.2.15 tinypool: 1.1.1 tinyrainbow: 2.0.0 - vite: 7.1.9(@types/node@24.7.2)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1) - vite-node: 3.2.4(@types/node@24.7.2)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1) + vite: 7.1.12(@types/node@24.9.2)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1) + vite-node: 3.2.4(@types/node@24.9.2)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1) why-is-node-running: 2.3.0 optionalDependencies: '@types/debug': 4.1.12 - '@types/node': 24.7.2 - '@vitest/browser': 3.2.4(playwright@1.56.0)(vite@7.1.9(@types/node@24.7.2)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1))(vitest@3.2.4) - jsdom: 27.0.0(canvas@3.2.0)(postcss@8.5.6) + '@types/node': 24.9.2 + '@vitest/browser': 3.2.4(playwright@1.56.1)(vite@7.1.12(@types/node@24.9.2)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1))(vitest@3.2.4) + jsdom: 27.0.1(canvas@3.2.0)(postcss@8.5.6) transitivePeerDependencies: - jiti - less @@ -23121,7 +23081,7 @@ snapshots: wait-on@9.0.1: dependencies: - axios: 1.12.2 + axios: 1.13.1 joi: 18.0.1 lodash: 4.17.21 minimist: 1.2.8 @@ -23244,10 +23204,10 @@ snapshots: workbox-build@7.3.0(@types/babel__core@7.20.5): dependencies: '@apideck/better-ajv-errors': 0.3.6(ajv@8.17.1) - '@babel/core': 7.28.4 - '@babel/preset-env': 7.28.3(@babel/core@7.28.4) + '@babel/core': 7.28.5 + '@babel/preset-env': 7.28.5(@babel/core@7.28.5) '@babel/runtime': 7.28.4 - '@rollup/plugin-babel': 5.3.1(@babel/core@7.28.4)(@types/babel__core@7.20.5)(rollup@2.79.2) + '@rollup/plugin-babel': 5.3.1(@babel/core@7.28.5)(@types/babel__core@7.20.5)(rollup@2.79.2) '@rollup/plugin-node-resolve': 15.3.1(rollup@2.79.2) '@rollup/plugin-replace': 2.4.2(rollup@2.79.2) '@rollup/plugin-terser': 0.4.4(rollup@2.79.2) @@ -23367,17 +23327,21 @@ snapshots: ws@8.18.3: {} + wsl-utils@0.1.0: + dependencies: + is-wsl: 3.1.0 + xml-name-validator@5.0.0: {} xmlchars@2.2.0: {} xtend@4.0.2: {} - y-prosemirror@1.3.7(prosemirror-model@1.25.3)(prosemirror-state@1.4.3)(prosemirror-view@1.41.3)(y-protocols@1.0.6(yjs@13.6.27))(yjs@13.6.27): + y-prosemirror@1.3.7(prosemirror-model@1.25.4)(prosemirror-state@1.4.4)(prosemirror-view@1.41.3)(y-protocols@1.0.6(yjs@13.6.27))(yjs@13.6.27): dependencies: lib0: 0.2.114 - prosemirror-model: 1.25.3 - prosemirror-state: 1.4.3 + prosemirror-model: 1.25.4 + prosemirror-state: 1.4.4 prosemirror-view: 1.41.3 y-protocols: 1.0.6(yjs@13.6.27) yjs: 13.6.27 @@ -23393,8 +23357,6 @@ snapshots: yallist@4.0.0: {} - yallist@5.0.0: {} - yaml@2.8.1: {} yargs-parser@21.1.1: {} @@ -23434,10 +23396,10 @@ snapshots: zod@4.1.12: {} - zustand@5.0.8(@types/react@19.2.2)(immer@10.1.3)(react@19.2.0)(use-sync-external-store@1.6.0(react@19.2.0)): + zustand@5.0.8(@types/react@19.2.2)(immer@10.2.0)(react@19.2.0)(use-sync-external-store@1.6.0(react@19.2.0)): optionalDependencies: '@types/react': 19.2.2 - immer: 10.1.3 + immer: 10.2.0 react: 19.2.0 use-sync-external-store: 1.6.0(react@19.2.0)