diff --git a/CHANGELOG.md b/CHANGELOG.md index 785798472e..082b448c2b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -26,6 +26,8 @@ - Feat: 二要素認証のバックアップコードが生成されるようになりました - ref. https://github.com/MisskeyIO/misskey/pull/121 - Feat: 二要素認証でパスキーをサポートするようになりました +- Feat: 指定したユーザーが投稿したときに通知できるようになりました +- Feat: プロフィールでのリンク検証 - Feat: 通知をテストできるようになりました - Feat: PWAのアイコンが設定できるようになりました - Enhance: manifest.jsonをオーバーライド可能に @@ -62,6 +64,7 @@ - Enhance: ScratchpadでAsync:系関数やボタンのコールバックなどのエラーにもダイアログを出すように(試験的なためPlayなどには未実装) - Enhance: タイムラインでリスト/アンテナ選択時のパフォーマンスを改善 - Enhance: 「Moderation note」、「Add moderation note」をローカライズできるように +- Enhance: 細かなデザインの調整 - Fix: サーバー情報画面(`/instance-info/{domain}`)でブロックができないのを修正 - Fix: 未読のお知らせの「わかった」をクリック・タップしてもその場で「わかった」が消えない問題を修正 - Fix: iOSで画面を回転させるとテキストサイズが変わる問題を修正 diff --git a/locales/index.d.ts b/locales/index.d.ts index 9c4ed6505c..d7a5efcddf 100644 --- a/locales/index.d.ts +++ b/locales/index.d.ts @@ -1123,6 +1123,9 @@ export interface Locale { "loadConversation": string; "pinnedList": string; "keepScreenOn": string; + "verifiedLink": string; + "notifyNotes": string; + "unnotifyNotes": string; "_announcement": { "forExistingUsers": string; "forExistingUsersDescription": string; @@ -2029,6 +2032,7 @@ export interface Locale { "metadataContent": string; "changeAvatar": string; "changeBanner": string; + "verifiedLinkDescription": string; }; "_exportOrImport": { "allNotes": string; @@ -2158,6 +2162,7 @@ export interface Locale { "youReceivedFollowRequest": string; "yourFollowRequestAccepted": string; "pollEnded": string; + "newNote": string; "unreadAntennaNote": string; "emptyPushNotificationMessage": string; "achievementEarned": string; diff --git a/locales/ja-JP.yml b/locales/ja-JP.yml index a8285cfed3..0665ce0038 100644 --- a/locales/ja-JP.yml +++ b/locales/ja-JP.yml @@ -1120,6 +1120,9 @@ loadReplies: "返信を見る" loadConversation: "会話を見る" pinnedList: "ピン留めされたリスト" keepScreenOn: "デバイスの画面を常にオンにする" +verifiedLink: "このリンク先の所有者であることが確認されました" +notifyNotes: "投稿を通知" +unnotifyNotes: "投稿の通知を解除" _announcement: forExistingUsers: "既存ユーザーのみ" @@ -1944,6 +1947,7 @@ _profile: metadataContent: "内容" changeAvatar: "アイコン画像を変更" changeBanner: "バナー画像を変更" + verifiedLinkDescription: "内容にURLを設定すると、リンク先のWebサイトに自分のプロフィールへのリンクが含まれている場合に所有者確認済みアイコンを表示させることができます。" _exportOrImport: allNotes: "全てのノート" @@ -2072,6 +2076,7 @@ _notification: youReceivedFollowRequest: "フォローリクエストが来ました" yourFollowRequestAccepted: "フォローリクエストが承認されました" pollEnded: "アンケートの結果が出ました" + newNote: "新しい投稿" unreadAntennaNote: "アンテナ {name}" emptyPushNotificationMessage: "プッシュ通知の更新をしました" achievementEarned: "実績を獲得" diff --git a/package.json b/package.json index c6083c4a2b..8b5f574947 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "misskey", - "version": "2023.9.0-beta.9-prismisskey.3", + "version": "2023.9.0-beta.10", "codename": "nasubi", "repository": { "type": "git", @@ -47,7 +47,7 @@ "cssnano": "6.0.1", "js-yaml": "4.1.0", "postcss": "8.4.30", - "terser": "5.19.4", + "terser": "5.20.0", "typescript": "5.2.2" }, "devDependencies": { diff --git a/packages/backend/migration/1695260774117-verified-links.js b/packages/backend/migration/1695260774117-verified-links.js new file mode 100644 index 0000000000..18e0571d81 --- /dev/null +++ b/packages/backend/migration/1695260774117-verified-links.js @@ -0,0 +1,11 @@ +export class VerifiedLinks1695260774117 { + name = 'VerifiedLinks1695260774117' + + async up(queryRunner) { + await queryRunner.query(`ALTER TABLE "user_profile" ADD "verifiedLinks" character varying array NOT NULL DEFAULT '{}'`); + } + + async down(queryRunner) { + await queryRunner.query(`ALTER TABLE "user_profile" DROP COLUMN "verifiedLinks"`); + } +} diff --git a/packages/backend/migration/1695288787870-following-notify.js b/packages/backend/migration/1695288787870-following-notify.js new file mode 100644 index 0000000000..e7e2194b15 --- /dev/null +++ b/packages/backend/migration/1695288787870-following-notify.js @@ -0,0 +1,13 @@ +export class FollowingNotify1695288787870 { + name = 'FollowingNotify1695288787870' + + async up(queryRunner) { + await queryRunner.query(`ALTER TABLE "following" ADD "notify" character varying(32)`); + await queryRunner.query(`CREATE INDEX "IDX_5108098457488634a4768e1d12" ON "following" ("notify") `); + } + + async down(queryRunner) { + await queryRunner.query(`DROP INDEX "public"."IDX_5108098457488634a4768e1d12"`); + await queryRunner.query(`ALTER TABLE "following" DROP COLUMN "notify"`); + } +} diff --git a/packages/backend/package.json b/packages/backend/package.json index 3a6fba8482..466416393c 100644 --- a/packages/backend/package.json +++ b/packages/backend/package.json @@ -64,7 +64,7 @@ "@bull-board/ui": "5.8.4", "@discordapp/twemoji": "14.1.2", "@fastify/accepts": "4.2.0", - "@fastify/cookie": "9.0.4", + "@fastify/cookie": "9.1.0", "@fastify/cors": "8.4.0", "@fastify/express": "2.3.0", "@fastify/http-proxy": "9.2.1", @@ -86,7 +86,7 @@ "bcryptjs": "2.4.3", "blurhash": "2.0.5", "body-parser": "1.20.2", - "bullmq": "4.11.1", + "bullmq": "4.11.2", "cacheable-lookup": "7.0.0", "cbor": "9.0.1", "chalk": "5.3.0", @@ -158,7 +158,7 @@ "systeminformation": "5.21.8", "tinycolor2": "1.6.0", "tmp": "0.2.1", - "tsc-alias": "1.8.7", + "tsc-alias": "1.8.8", "tsconfig-paths": "4.2.0", "twemoji-parser": "14.0.0", "typeorm": "0.3.17", diff --git a/packages/backend/src/core/NoteCreateService.ts b/packages/backend/src/core/NoteCreateService.ts index 4b0d818862..972319ddcf 100644 --- a/packages/backend/src/core/NoteCreateService.ts +++ b/packages/backend/src/core/NoteCreateService.ts @@ -14,7 +14,7 @@ import { extractCustomEmojisFromMfm } from '@/misc/extract-custom-emojis-from-mf import { extractHashtags } from '@/misc/extract-hashtags.js'; import type { IMentionedRemoteUsers } from '@/models/Note.js'; import { MiNote } from '@/models/Note.js'; -import type { ChannelsRepository, InstancesRepository, MutedNotesRepository, MutingsRepository, NotesRepository, NoteThreadMutingsRepository, UserProfilesRepository, UsersRepository } from '@/models/_.js'; +import type { ChannelsRepository, FollowingsRepository, InstancesRepository, MutedNotesRepository, MutingsRepository, NotesRepository, NoteThreadMutingsRepository, UserProfilesRepository, UsersRepository } from '@/models/_.js'; import type { MiDriveFile } from '@/models/DriveFile.js'; import type { MiApp } from '@/models/App.js'; import { concat } from '@/misc/prelude/array.js'; @@ -185,6 +185,9 @@ export class NoteCreateService implements OnApplicationShutdown { @Inject(DI.noteThreadMutingsRepository) private noteThreadMutingsRepository: NoteThreadMutingsRepository, + @Inject(DI.followingsRepository) + private followingsRepository: FollowingsRepository, + private userEntityService: UserEntityService, private noteEntityService: NoteEntityService, private idService: IdService, @@ -505,6 +508,20 @@ export class NoteCreateService implements OnApplicationShutdown { this.saveReply(data.reply, note); } + if (data.reply == null) { + this.followingsRepository.findBy({ + followeeId: user.id, + notify: 'normal', + }).then(followings => { + for (const following of followings) { + this.notificationService.createNotification(following.followerId, 'note', { + notifierId: user.id, + noteId: note.id, + }); + } + }); + } + // この投稿を除く指定したユーザーによる指定したノートのリノートが存在しないとき if (data.renote && (await this.noteEntityService.countSameRenotes(user.id, data.renote.id, note.id) === 0)) { if (!user.isBot) this.incRenoteCount(data.renote); diff --git a/packages/backend/src/core/entities/NotificationEntityService.ts b/packages/backend/src/core/entities/NotificationEntityService.ts index 75a2f62f6e..3ee7c91f3a 100644 --- a/packages/backend/src/core/entities/NotificationEntityService.ts +++ b/packages/backend/src/core/entities/NotificationEntityService.ts @@ -20,7 +20,7 @@ import type { CustomEmojiService } from '../CustomEmojiService.js'; import type { UserEntityService } from './UserEntityService.js'; import type { NoteEntityService } from './NoteEntityService.js'; -const NOTE_REQUIRED_NOTIFICATION_TYPES = new Set(['mention', 'reply', 'renote', 'quote', 'reaction', 'pollEnded'] as (typeof notificationTypes[number])[]); +const NOTE_REQUIRED_NOTIFICATION_TYPES = new Set(['note', 'mention', 'reply', 'renote', 'quote', 'reaction', 'pollEnded'] as (typeof notificationTypes[number])[]); @Injectable() export class NotificationEntityService implements OnModuleInit { diff --git a/packages/backend/src/core/entities/UserEntityService.ts b/packages/backend/src/core/entities/UserEntityService.ts index c0909a663d..3dd64ce625 100644 --- a/packages/backend/src/core/entities/UserEntityService.ts +++ b/packages/backend/src/core/entities/UserEntityService.ts @@ -146,15 +146,14 @@ export class UserEntityService implements OnModuleInit { @bindThis public async getRelation(me: MiUser['id'], target: MiUser['id']) { + const following = await this.followingsRepository.findOneBy({ + followerId: me, + followeeId: target, + }); return awaitAll({ id: target, - isFollowing: this.followingsRepository.count({ - where: { - followerId: me, - followeeId: target, - }, - take: 1, - }).then(n => n > 0), + following, + isFollowing: following != null, isFollowed: this.followingsRepository.count({ where: { followerId: target, @@ -384,6 +383,7 @@ export class UserEntityService implements OnModuleInit { birthday: profile!.birthday, lang: profile!.lang, fields: profile!.fields, + verifiedLinks: profile!.verifiedLinks, followersCount: followersCount ?? 0, followingCount: followingCount ?? 0, notesCount: user.notesCount, @@ -485,6 +485,7 @@ export class UserEntityService implements OnModuleInit { isBlocked: relation.isBlocked, isMuted: relation.isMuted, isRenoteMuted: relation.isRenoteMuted, + notify: relation.following?.notify ?? 'none', } : {}), } as Promiseable> as Promiseable>; diff --git a/packages/backend/src/models/Following.ts b/packages/backend/src/models/Following.ts index 05b729412f..8c9f965fad 100644 --- a/packages/backend/src/models/Following.ts +++ b/packages/backend/src/models/Following.ts @@ -45,6 +45,13 @@ export class MiFollowing { @JoinColumn() public follower: MiUser | null; + @Index() + @Column('varchar', { + length: 32, + nullable: true, + }) + public notify: 'normal' | null; + //#region Denormalized fields @Index() @Column('varchar', { diff --git a/packages/backend/src/models/Notification.ts b/packages/backend/src/models/Notification.ts index fb7f67dfd8..c0a9df2e23 100644 --- a/packages/backend/src/models/Notification.ts +++ b/packages/backend/src/models/Notification.ts @@ -22,18 +22,6 @@ export type MiNotification = { /** * 通知の種類。 - * follow - フォローされた - * mention - 投稿で自分が言及された - * reply - 投稿に返信された - * renote - 投稿がRenoteされた - * quote - 投稿が引用Renoteされた - * reaction - 投稿にリアクションされた - * pollEnded - 自分のアンケートもしくは自分が投票したアンケートが終了した - * receiveFollowRequest - フォローリクエストされた - * followRequestAccepted - 自分の送ったフォローリクエストが承認された - * achievementEarned - 実績を獲得 - * app - アプリ通知 - * test - テスト通知(サーバー側) */ type: typeof notificationTypes[number]; diff --git a/packages/backend/src/models/UserProfile.ts b/packages/backend/src/models/UserProfile.ts index 6c7ffe4c39..e4405c9da7 100644 --- a/packages/backend/src/models/UserProfile.ts +++ b/packages/backend/src/models/UserProfile.ts @@ -48,6 +48,12 @@ export class MiUserProfile { value: string; }[]; + @Column('varchar', { + array: true, + default: '{}', + }) + public verifiedLinks: string[]; + @Column('varchar', { length: 32, nullable: true, }) diff --git a/packages/backend/src/models/json-schema/user.ts b/packages/backend/src/models/json-schema/user.ts index 3314464c31..f15b225a30 100644 --- a/packages/backend/src/models/json-schema/user.ts +++ b/packages/backend/src/models/json-schema/user.ts @@ -169,6 +169,15 @@ export const packedUserDetailedNotMeOnlySchema = { }, }, }, + verifiedLinks: { + type: 'array', + nullable: false, optional: false, + items: { + type: 'string', + nullable: false, optional: false, + format: 'url', + }, + }, followersCount: { type: 'number', nullable: false, optional: false, @@ -264,6 +273,10 @@ export const packedUserDetailedNotMeOnlySchema = { type: 'string', nullable: false, optional: true, }, + notify: { + type: 'string', + nullable: false, optional: true, + }, //#endregion }, } as const; diff --git a/packages/backend/src/server/api/EndpointsModule.ts b/packages/backend/src/server/api/EndpointsModule.ts index 1829fc16f3..7b127cc35e 100644 --- a/packages/backend/src/server/api/EndpointsModule.ts +++ b/packages/backend/src/server/api/EndpointsModule.ts @@ -160,6 +160,7 @@ import * as ep___federation_users from './endpoints/federation/users.js'; import * as ep___federation_stats from './endpoints/federation/stats.js'; import * as ep___following_create from './endpoints/following/create.js'; import * as ep___following_delete from './endpoints/following/delete.js'; +import * as ep___following_update from './endpoints/following/update.js'; import * as ep___following_invalidate from './endpoints/following/invalidate.js'; import * as ep___following_requests_accept from './endpoints/following/requests/accept.js'; import * as ep___following_requests_cancel from './endpoints/following/requests/cancel.js'; @@ -508,6 +509,7 @@ const $federation_users: Provider = { provide: 'ep:federation/users', useClass: const $federation_stats: Provider = { provide: 'ep:federation/stats', useClass: ep___federation_stats.default }; const $following_create: Provider = { provide: 'ep:following/create', useClass: ep___following_create.default }; const $following_delete: Provider = { provide: 'ep:following/delete', useClass: ep___following_delete.default }; +const $following_update: Provider = { provide: 'ep:following/update', useClass: ep___following_update.default }; const $following_invalidate: Provider = { provide: 'ep:following/invalidate', useClass: ep___following_invalidate.default }; const $following_requests_accept: Provider = { provide: 'ep:following/requests/accept', useClass: ep___following_requests_accept.default }; const $following_requests_cancel: Provider = { provide: 'ep:following/requests/cancel', useClass: ep___following_requests_cancel.default }; @@ -860,6 +862,7 @@ const $retention: Provider = { provide: 'ep:retention', useClass: ep___retention $federation_stats, $following_create, $following_delete, + $following_update, $following_invalidate, $following_requests_accept, $following_requests_cancel, @@ -1206,6 +1209,7 @@ const $retention: Provider = { provide: 'ep:retention', useClass: ep___retention $federation_stats, $following_create, $following_delete, + $following_update, $following_invalidate, $following_requests_accept, $following_requests_cancel, diff --git a/packages/backend/src/server/api/endpoints.ts b/packages/backend/src/server/api/endpoints.ts index 86ea93139e..29cfbd9430 100644 --- a/packages/backend/src/server/api/endpoints.ts +++ b/packages/backend/src/server/api/endpoints.ts @@ -160,6 +160,7 @@ import * as ep___federation_users from './endpoints/federation/users.js'; import * as ep___federation_stats from './endpoints/federation/stats.js'; import * as ep___following_create from './endpoints/following/create.js'; import * as ep___following_delete from './endpoints/following/delete.js'; +import * as ep___following_update from './endpoints/following/update.js'; import * as ep___following_invalidate from './endpoints/following/invalidate.js'; import * as ep___following_requests_accept from './endpoints/following/requests/accept.js'; import * as ep___following_requests_cancel from './endpoints/following/requests/cancel.js'; @@ -506,6 +507,7 @@ const eps = [ ['federation/stats', ep___federation_stats], ['following/create', ep___following_create], ['following/delete', ep___following_delete], + ['following/update', ep___following_update], ['following/invalidate', ep___following_invalidate], ['following/requests/accept', ep___following_requests_accept], ['following/requests/cancel', ep___following_requests_cancel], diff --git a/packages/backend/src/server/api/endpoints/following/create.ts b/packages/backend/src/server/api/endpoints/following/create.ts index d80c853672..e0e7fed87a 100644 --- a/packages/backend/src/server/api/endpoints/following/create.ts +++ b/packages/backend/src/server/api/endpoints/following/create.ts @@ -19,7 +19,7 @@ export const meta = { limit: { duration: ms('1hour'), - max: 50, + max: 100, }, requireCredential: true, diff --git a/packages/backend/src/server/api/endpoints/following/invalidate.ts b/packages/backend/src/server/api/endpoints/following/invalidate.ts index 147d16556f..53ef925b2f 100644 --- a/packages/backend/src/server/api/endpoints/following/invalidate.ts +++ b/packages/backend/src/server/api/endpoints/following/invalidate.ts @@ -29,7 +29,7 @@ export const meta = { noSuchUser: { message: 'No such user.', code: 'NO_SUCH_USER', - id: '5b12c78d-2b28-4dca-99d2-f56139b42ff8', + id: 'b77e6ae6-a3e5-40da-9cc8-c240115479cc', }, followerIsYourself: { @@ -41,7 +41,7 @@ export const meta = { notFollowing: { message: 'The other use is not following you.', code: 'NOT_FOLLOWING', - id: '5dbf82f5-c92b-40b1-87d1-6c8c0741fd09', + id: '918faac3-074f-41ae-9c43-ed5d2946770d', }, }, diff --git a/packages/backend/src/server/api/endpoints/following/update.ts b/packages/backend/src/server/api/endpoints/following/update.ts new file mode 100644 index 0000000000..25f393e517 --- /dev/null +++ b/packages/backend/src/server/api/endpoints/following/update.ts @@ -0,0 +1,107 @@ +/* + * SPDX-FileCopyrightText: syuilo and other misskey contributors + * SPDX-License-Identifier: AGPL-3.0-only + */ + +import ms from 'ms'; +import { Inject, Injectable } from '@nestjs/common'; +import { Endpoint } from '@/server/api/endpoint-base.js'; +import type { FollowingsRepository } from '@/models/_.js'; +import { UserEntityService } from '@/core/entities/UserEntityService.js'; +import { UserFollowingService } from '@/core/UserFollowingService.js'; +import { DI } from '@/di-symbols.js'; +import { GetterService } from '@/server/api/GetterService.js'; +import { ApiError } from '../../error.js'; + +export const meta = { + tags: ['following', 'users'], + + limit: { + duration: ms('1hour'), + max: 100, + }, + + requireCredential: true, + + kind: 'write:following', + + errors: { + noSuchUser: { + message: 'No such user.', + code: 'NO_SUCH_USER', + id: '14318698-f67e-492a-99da-5353a5ac52be', + }, + + followeeIsYourself: { + message: 'Followee is yourself.', + code: 'FOLLOWEE_IS_YOURSELF', + id: '4c4cbaf9-962a-463b-8418-a5e365dbf2eb', + }, + + notFollowing: { + message: 'You are not following that user.', + code: 'NOT_FOLLOWING', + id: 'b8dc75cf-1cb5-46c9-b14b-5f1ffbd782c9', + }, + }, + + res: { + type: 'object', + optional: false, nullable: false, + ref: 'UserLite', + }, +} as const; + +export const paramDef = { + type: 'object', + properties: { + userId: { type: 'string', format: 'misskey:id' }, + notify: { type: 'string', enum: ['normal', 'none'] }, + }, + required: ['userId', 'notify'], +} as const; + +@Injectable() +export default class extends Endpoint { // eslint-disable-line import/no-default-export + constructor( + @Inject(DI.followingsRepository) + private followingsRepository: FollowingsRepository, + + private userEntityService: UserEntityService, + private getterService: GetterService, + private userFollowingService: UserFollowingService, + ) { + super(meta, paramDef, async (ps, me) => { + const follower = me; + + // Check if the follower is yourself + if (me.id === ps.userId) { + throw new ApiError(meta.errors.followeeIsYourself); + } + + // Get followee + const followee = await this.getterService.getUser(ps.userId).catch(err => { + if (err.id === '15348ddd-432d-49c2-8a5a-8069753becff') throw new ApiError(meta.errors.noSuchUser); + throw err; + }); + + // Check not following + const exist = await this.followingsRepository.findOneBy({ + followerId: follower.id, + followeeId: followee.id, + }); + + if (exist == null) { + throw new ApiError(meta.errors.notFollowing); + } + + await this.followingsRepository.update({ + id: exist.id, + }, { + notify: ps.notify === 'none' ? null : ps.notify, + }); + + return await this.userEntityService.pack(follower.id, me); + }); + } +} diff --git a/packages/backend/src/server/api/endpoints/i/update.ts b/packages/backend/src/server/api/endpoints/i/update.ts index 3953b19002..b11e091957 100644 --- a/packages/backend/src/server/api/endpoints/i/update.ts +++ b/packages/backend/src/server/api/endpoints/i/update.ts @@ -6,11 +6,13 @@ import RE2 from 're2'; import * as mfm from 'mfm-js'; import { Inject, Injectable } from '@nestjs/common'; +import ms from 'ms'; +import { JSDOM } from 'jsdom'; import { extractCustomEmojisFromMfm } from '@/misc/extract-custom-emojis-from-mfm.js'; import { extractHashtags } from '@/misc/extract-hashtags.js'; import * as Acct from '@/misc/acct.js'; import type { UsersRepository, DriveFilesRepository, UserProfilesRepository, PagesRepository } from '@/models/_.js'; -import type { MiUser } from '@/models/User.js'; +import type { MiLocalUser, MiUser } from '@/models/User.js'; import { birthdaySchema, descriptionSchema, locationSchema, nameSchema } from '@/models/User.js'; import type { MiUserProfile } from '@/models/UserProfile.js'; import { notificationTypes } from '@/types.js'; @@ -27,6 +29,9 @@ import { RoleService } from '@/core/RoleService.js'; import { CacheService } from '@/core/CacheService.js'; import { RemoteUserResolveService } from '@/core/RemoteUserResolveService.js'; import { DriveFileEntityService } from '@/core/entities/DriveFileEntityService.js'; +import { HttpRequestService } from '@/core/HttpRequestService.js'; +import type { Config } from '@/config.js'; +import { safeForSql } from '@/misc/safe-for-sql.js'; import { ApiLoggerService } from '../../ApiLoggerService.js'; import { ApiError } from '../../error.js'; @@ -37,6 +42,11 @@ export const meta = { kind: 'write:account', + limit: { + duration: ms('1hour'), + max: 10, + }, + errors: { noSuchAvatar: { message: 'No such avatar file.', @@ -173,6 +183,9 @@ export const paramDef = { @Injectable() export default class extends Endpoint { // eslint-disable-line import/no-default-export constructor( + @Inject(DI.config) + private config: Config, + @Inject(DI.usersRepository) private usersRepository: UsersRepository, @@ -195,9 +208,10 @@ export default class extends Endpoint { // eslint- private hashtagService: HashtagService, private roleService: RoleService, private cacheService: CacheService, + private httpRequestService: HttpRequestService, ) { super(meta, paramDef, async (ps, _user, token) => { - const user = await this.usersRepository.findOneByOrFail({ id: _user.id }); + const user = await this.usersRepository.findOneByOrFail({ id: _user.id }) as MiLocalUser; const isSecure = token == null; const updates = {} as Partial; @@ -296,9 +310,9 @@ export default class extends Endpoint { // eslint- if (ps.fields) { profileUpdates.fields = ps.fields - .filter(x => typeof x.name === 'string' && x.name !== '' && typeof x.value === 'string' && x.value !== '') + .filter(x => typeof x.name === 'string' && x.name.trim() !== '' && typeof x.value === 'string' && x.value.trim() !== '') .map(x => { - return { name: x.name, value: x.value }; + return { name: x.name.trim(), value: x.value.trim() }; }); } @@ -364,7 +378,11 @@ export default class extends Endpoint { // eslint- if (Object.keys(updates).includes('alsoKnownAs')) { this.cacheService.uriPersonCache.set(this.userEntityService.genLocalUserUri(user.id), { ...user, ...updates }); } - if (Object.keys(profileUpdates).length > 0) await this.userProfilesRepository.update(user.id, profileUpdates); + + await this.userProfilesRepository.update(user.id, { + ...profileUpdates, + verifiedLinks: [], + }); const iObj = await this.userEntityService.pack(user.id, user, { detail: true, @@ -386,7 +404,34 @@ export default class extends Endpoint { // eslint- // フォロワーにUpdateを配信 this.accountUpdateService.publishToFollowers(user.id); + const urls = updatedProfile.fields.filter(x => x.value.startsWith('https://')); + for (const url of urls) { + this.verifyLink(url.value, user); + } + return iObj; }); } + + private async verifyLink(url: string, user: MiLocalUser) { + if (!safeForSql(url)) return; + + const html = await this.httpRequestService.getHtml(url); + + const { window } = new JSDOM(html); + const doc = window.document; + + const myLink = `${this.config.url}/@${user.username}`; + + const includesMyLink = Array.from(doc.getElementsByTagName('a')).some(a => a.href === myLink); + + if (includesMyLink) { + await this.userProfilesRepository.createQueryBuilder('profile').update() + .where('userId = :userId', { userId: user.id }) + .set({ + verifiedLinks: () => `array_append("verifiedLinks", '${url}')`, // ここでSQLインジェクションされそうなのでとりあえず safeForSql で弾いている + }) + .execute(); + } + } } diff --git a/packages/backend/src/types.ts b/packages/backend/src/types.ts index 024ba01e3b..0a28d88d08 100644 --- a/packages/backend/src/types.ts +++ b/packages/backend/src/types.ts @@ -3,7 +3,22 @@ * SPDX-License-Identifier: AGPL-3.0-only */ -export const notificationTypes = ['follow', 'mention', 'reply', 'renote', 'quote', 'reaction', 'pollEnded', 'receiveFollowRequest', 'followRequestAccepted', 'achievementEarned', 'app', 'test'] as const; +/** + * note - 通知オンにしているユーザーが投稿した + * follow - フォローされた + * mention - 投稿で自分が言及された + * reply - 投稿に返信された + * renote - 投稿がRenoteされた + * quote - 投稿が引用Renoteされた + * reaction - 投稿にリアクションされた + * pollEnded - 自分のアンケートもしくは自分が投票したアンケートが終了した + * receiveFollowRequest - フォローリクエストされた + * followRequestAccepted - 自分の送ったフォローリクエストが承認された + * achievementEarned - 実績を獲得 + * app - アプリ通知 + * test - テスト通知(サーバー側) + */ +export const notificationTypes = ['note', 'follow', 'mention', 'reply', 'renote', 'quote', 'reaction', 'pollEnded', 'receiveFollowRequest', 'followRequestAccepted', 'achievementEarned', 'app', 'test'] as const; export const obsoleteNotificationTypes = ['pollVote', 'groupInvited'] as const; export const noteVisibilities = ['public', 'home', 'followers', 'specified'] as const; diff --git a/packages/backend/test/e2e/users.ts b/packages/backend/test/e2e/users.ts index 2c396813ff..e4ecd6e398 100644 --- a/packages/backend/test/e2e/users.ts +++ b/packages/backend/test/e2e/users.ts @@ -102,6 +102,7 @@ describe('ユーザー', () => { birthday: user.birthday, lang: user.lang, fields: user.fields, + verifiedLinks: user.verifiedLinks, followersCount: user.followersCount, followingCount: user.followingCount, notesCount: user.notesCount, @@ -369,6 +370,7 @@ describe('ユーザー', () => { assert.strictEqual(response.birthday, null); assert.strictEqual(response.lang, null); assert.deepStrictEqual(response.fields, []); + assert.deepStrictEqual(response.verifiedLinks, []); assert.strictEqual(response.followersCount, 0); assert.strictEqual(response.followingCount, 0); assert.strictEqual(response.notesCount, 0); @@ -492,7 +494,7 @@ describe('ユーザー', () => { { parameters: (): object => ({ mutedWords: [] }) }, { parameters: (): object => ({ mutedInstances: ['xxxx.xxxxx'] }) }, { parameters: (): object => ({ mutedInstances: [] }) }, - { parameters: (): object => ({ mutingNotificationTypes: ['follow', 'mention', 'reply', 'renote', 'quote', 'reaction', 'pollEnded', 'receiveFollowRequest', 'followRequestAccepted', 'achievementEarned', 'app'] }) }, + { parameters: (): object => ({ mutingNotificationTypes: ['note', 'follow', 'mention', 'reply', 'renote', 'quote', 'reaction', 'pollEnded', 'receiveFollowRequest', 'followRequestAccepted', 'achievementEarned', 'app'] }) }, { parameters: (): object => ({ mutingNotificationTypes: [] }) }, { parameters: (): object => ({ emailNotificationTypes: ['mention', 'reply', 'quote', 'follow', 'receiveFollowRequest'] }) }, { parameters: (): object => ({ emailNotificationTypes: [] }) }, diff --git a/packages/frontend/.storybook/fakes.ts b/packages/frontend/.storybook/fakes.ts index 14481deeea..811c243926 100644 --- a/packages/frontend/.storybook/fakes.ts +++ b/packages/frontend/.storybook/fakes.ts @@ -89,6 +89,7 @@ export function userDetailed(id = 'someuserid', username = 'miskist', host = 'mi value: 'https://misskey-hub.net', }, ], + verifiedLinks: [], followersCount: 1024, followingCount: 16, hasPendingFollowRequestFromYou: false, @@ -119,6 +120,7 @@ export function userDetailed(id = 'someuserid', username = 'miskist', host = 'mi updatedAt: null, uri: null, url: null, + notify: 'none', }; } diff --git a/packages/frontend/package.json b/packages/frontend/package.json index e32be43a22..8c3b49f18b 100644 --- a/packages/frontend/package.json +++ b/packages/frontend/package.json @@ -59,13 +59,13 @@ "querystring": "0.2.1", "rollup": "3.29.2", "sanitize-html": "2.11.0", - "sass": "1.67.0", + "sass": "1.68.0", "strict-event-emitter-types": "2.0.0", "textarea-caret": "3.1.0", "three": "0.156.1", "throttle-debounce": "5.0.0", "tinycolor2": "1.6.0", - "tsc-alias": "1.8.7", + "tsc-alias": "1.8.8", "tsconfig-paths": "4.2.0", "twemoji-parser": "14.0.0", "typescript": "5.2.2", @@ -77,24 +77,24 @@ "vuedraggable": "next" }, "devDependencies": { - "@storybook/addon-actions": "7.4.2", - "@storybook/addon-essentials": "7.4.2", - "@storybook/addon-interactions": "7.4.2", - "@storybook/addon-links": "7.4.2", - "@storybook/addon-storysource": "7.4.2", - "@storybook/addons": "7.4.2", - "@storybook/blocks": "7.4.2", - "@storybook/core-events": "7.4.2", + "@storybook/addon-actions": "7.4.3", + "@storybook/addon-essentials": "7.4.3", + "@storybook/addon-interactions": "7.4.3", + "@storybook/addon-links": "7.4.3", + "@storybook/addon-storysource": "7.4.3", + "@storybook/addons": "7.4.3", + "@storybook/blocks": "7.4.3", + "@storybook/core-events": "7.4.3", "@storybook/jest": "0.2.2", - "@storybook/manager-api": "7.4.2", - "@storybook/preview-api": "7.4.2", - "@storybook/react": "7.4.2", - "@storybook/react-vite": "7.4.2", + "@storybook/manager-api": "7.4.3", + "@storybook/preview-api": "7.4.3", + "@storybook/react": "7.4.3", + "@storybook/react-vite": "7.4.3", "@storybook/testing-library": "0.2.1", - "@storybook/theming": "7.4.2", - "@storybook/types": "7.4.2", - "@storybook/vue3": "7.4.2", - "@storybook/vue3-vite": "7.4.2", + "@storybook/theming": "7.4.3", + "@storybook/types": "7.4.3", + "@storybook/vue3": "7.4.3", + "@storybook/vue3-vite": "7.4.3", "@testing-library/vue": "7.0.0", "@types/escape-regexp": "0.0.1", "@types/estree": "1.0.1", diff --git a/packages/frontend/src/components/MkNotification.vue b/packages/frontend/src/components/MkNotification.vue index f71834b099..99443a6409 100644 --- a/packages/frontend/src/components/MkNotification.vue +++ b/packages/frontend/src/components/MkNotification.vue @@ -7,6 +7,7 @@ SPDX-License-Identifier: AGPL-3.0-only
+ @@ -47,6 +48,7 @@ SPDX-License-Identifier: AGPL-3.0-only
{{ i18n.ts._notification.pollEnded }} + {{ i18n.ts._notification.newNote }}: {{ notification.note.user.name ?? notification.note.user.username }} {{ i18n.ts._notification.achievementEarned }} {{ i18n.ts._notification.testNotification }} @@ -73,6 +75,9 @@ SPDX-License-Identifier: AGPL-3.0-only + + + diff --git a/packages/frontend/src/components/MkReactionsViewer.reaction.vue b/packages/frontend/src/components/MkReactionsViewer.reaction.vue index 5e87c7238b..d0db515219 100644 --- a/packages/frontend/src/components/MkReactionsViewer.reaction.vue +++ b/packages/frontend/src/components/MkReactionsViewer.reaction.vue @@ -170,6 +170,10 @@ useTooltip(buttonEl, async (showing) => { } } +.icon { + max-width: 150px; +} + .count { font-size: 0.7em; line-height: 42px; diff --git a/packages/frontend/src/const.ts b/packages/frontend/src/const.ts index 19bad95c87..15038b1063 100644 --- a/packages/frontend/src/const.ts +++ b/packages/frontend/src/const.ts @@ -54,7 +54,7 @@ https://github.com/sindresorhus/file-type/blob/main/core.js https://developer.mozilla.org/en-US/docs/Web/Media/Formats/Containers */ -export const notificationTypes = ['follow', 'mention', 'reply', 'renote', 'quote', 'reaction', 'pollEnded', 'receiveFollowRequest', 'followRequestAccepted', 'achievementEarned', 'app'] as const; +export const notificationTypes = ['note', 'follow', 'mention', 'reply', 'renote', 'quote', 'reaction', 'pollEnded', 'receiveFollowRequest', 'followRequestAccepted', 'achievementEarned', 'app'] as const; export const obsoleteNotificationTypes = ['pollVote', 'groupInvited'] as const; export const ROLE_POLICIES = [ diff --git a/packages/frontend/src/pages/settings/profile.vue b/packages/frontend/src/pages/settings/profile.vue index e045009c1b..5e4889f61c 100644 --- a/packages/frontend/src/pages/settings/profile.vue +++ b/packages/frontend/src/pages/settings/profile.vue @@ -76,6 +76,8 @@ SPDX-License-Identifier: AGPL-3.0-only
+ + {{ i18n.ts._profile.verifiedLinkDescription }}
@@ -119,6 +121,7 @@ import { langmap } from '@/scripts/langmap.js'; import { definePageMetadata } from '@/scripts/page-metadata.js'; import { claimAchievement } from '@/scripts/achievements.js'; import { defaultStore } from '@/store.js'; +import MkInfo from '@/components/MkInfo.vue'; const Sortable = defineAsyncComponent(() => import('vuedraggable').then(x => x.default)); diff --git a/packages/frontend/src/pages/user/home.vue b/packages/frontend/src/pages/user/home.vue index 8195c40bf9..385c81a97f 100644 --- a/packages/frontend/src/pages/user/home.vue +++ b/packages/frontend/src/pages/user/home.vue @@ -101,6 +101,7 @@ SPDX-License-Identifier: AGPL-3.0-only
+
@@ -671,7 +672,12 @@ onUnmounted(() => { diff --git a/packages/frontend/src/scripts/get-user-menu.ts b/packages/frontend/src/scripts/get-user-menu.ts index 1561daa6d9..128cbafb15 100644 --- a/packages/frontend/src/scripts/get-user-menu.ts +++ b/packages/frontend/src/scripts/get-user-menu.ts @@ -80,6 +80,15 @@ export function getUserMenu(user: Misskey.entities.UserDetailed, router: Router }); } + async function toggleNotify() { + os.apiWithDialog('following/update', { + userId: user.id, + notify: user.notify === 'normal' ? 'none' : 'normal', + }).then(() => { + user.notify = user.notify === 'normal' ? 'none' : 'normal'; + }); + } + function reportAbuse() { os.popup(defineAsyncComponent(() => import('@/components/MkAbuseReportWindow.vue')), { user: user, @@ -270,6 +279,15 @@ export function getUserMenu(user: Misskey.entities.UserDetailed, router: Router }]); } + // フォローしたとしても user.isFollowing はリアルタイム更新されないので不便なため + //if (user.isFollowing) { + menu = menu.concat([{ + icon: user.notify === 'none' ? 'ti ti-bell' : 'ti ti-bell-off', + text: user.notify === 'none' ? i18n.ts.notifyNotes : i18n.ts.unnotifyNotes, + action: toggleNotify, + }]); + //} + menu = menu.concat([null, { icon: user.isMuted ? 'ti ti-eye' : 'ti ti-eye-off', text: user.isMuted ? i18n.ts.unmute : i18n.ts.mute, diff --git a/packages/misskey-js/etc/misskey-js.api.md b/packages/misskey-js/etc/misskey-js.api.md index 99b3852b02..d72652bd92 100644 --- a/packages/misskey-js/etc/misskey-js.api.md +++ b/packages/misskey-js/etc/misskey-js.api.md @@ -2609,7 +2609,12 @@ type Notification_2 = { userId: User['id']; note: Note; } | { - type: 'pollVote'; + type: 'note'; + user: User; + userId: User['id']; + note: Note; +} | { + type: 'pollEnded'; user: User; userId: User['id']; note: Note; @@ -2640,7 +2645,7 @@ type Notification_2 = { }); // @public (undocumented) -export const notificationTypes: readonly ["follow", "mention", "reply", "renote", "quote", "reaction", "pollVote", "pollEnded", "receiveFollowRequest", "followRequestAccepted", "groupInvited", "app"]; +export const notificationTypes: readonly ["note", "follow", "mention", "reply", "renote", "quote", "reaction", "pollVote", "pollEnded", "receiveFollowRequest", "followRequestAccepted", "groupInvited", "app"]; // @public (undocumented) type OriginType = 'combined' | 'local' | 'remote'; @@ -2778,6 +2783,7 @@ type UserDetailed = UserLite & { name: string; value: string; }[]; + verifiedLinks: string[]; followersCount: number; followingCount: number; hasPendingFollowRequestFromYou: boolean; @@ -2809,6 +2815,7 @@ type UserDetailed = UserLite & { updatedAt: DateString | null; uri: string | null; url: string | null; + notify: 'normal' | 'none'; }; // @public (undocumented) diff --git a/packages/misskey-js/src/consts.ts b/packages/misskey-js/src/consts.ts index 2b144ab4a4..6cf6dc07e7 100644 --- a/packages/misskey-js/src/consts.ts +++ b/packages/misskey-js/src/consts.ts @@ -1,4 +1,4 @@ -export const notificationTypes = ['follow', 'mention', 'reply', 'renote', 'quote', 'reaction', 'pollVote', 'pollEnded', 'receiveFollowRequest', 'followRequestAccepted', 'groupInvited', 'app'] as const; +export const notificationTypes = ['note', 'follow', 'mention', 'reply', 'renote', 'quote', 'reaction', 'pollVote', 'pollEnded', 'receiveFollowRequest', 'followRequestAccepted', 'groupInvited', 'app'] as const; export const noteVisibilities = ['public', 'home', 'followers', 'specified'] as const; diff --git a/packages/misskey-js/src/entities.ts b/packages/misskey-js/src/entities.ts index 2876339102..9a0114d71c 100644 --- a/packages/misskey-js/src/entities.ts +++ b/packages/misskey-js/src/entities.ts @@ -38,6 +38,7 @@ export type UserDetailed = UserLite & { description: string | null; ffVisibility: 'public' | 'followers' | 'private'; fields: {name: string; value: string}[]; + verifiedLinks: string[]; followersCount: number; followingCount: number; hasPendingFollowRequestFromYou: boolean; @@ -69,6 +70,7 @@ export type UserDetailed = UserLite & { updatedAt: DateString | null; uri: string | null; url: string | null; + notify: 'normal' | 'none'; }; export type UserGroup = TODO; @@ -232,7 +234,12 @@ export type Notification = { userId: User['id']; note: Note; } | { - type: 'pollVote'; + type: 'note'; + user: User; + userId: User['id']; + note: Note; +} | { + type: 'pollEnded'; user: User; userId: User['id']; note: Note; diff --git a/packages/sw/src/scripts/create-notification.ts b/packages/sw/src/scripts/create-notification.ts index 2b7f91a741..f33ab1c33c 100644 --- a/packages/sw/src/scripts/create-notification.ts +++ b/packages/sw/src/scripts/create-notification.ts @@ -134,6 +134,13 @@ async function composeNotification(data: PushNotificationDataMap[keyof PushNotif ], }]; + case 'note': + return [t('_notification.newNote') + ': ' + getUserName(data.body.user), { + body: data.body.note.text ?? '', + icon: data.body.user.avatarUrl, + data, + }]; + case 'reaction': { let reaction = data.body.reaction; let badge: string | undefined; diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index ce476cc418..d7e1864155 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -25,8 +25,8 @@ importers: specifier: 8.4.30 version: 8.4.30 terser: - specifier: 5.19.4 - version: 5.19.4 + specifier: 5.20.0 + version: 5.20.0 typescript: specifier: 5.2.2 version: 5.2.2 @@ -78,8 +78,8 @@ importers: specifier: 4.2.0 version: 4.2.0 '@fastify/cookie': - specifier: 9.0.4 - version: 9.0.4 + specifier: 9.1.0 + version: 9.1.0 '@fastify/cors': specifier: 8.4.0 version: 8.4.0 @@ -147,8 +147,8 @@ importers: specifier: 1.20.2 version: 1.20.2 bullmq: - specifier: 4.11.1 - version: 4.11.1 + specifier: 4.11.2 + version: 4.11.2 cacheable-lookup: specifier: 7.0.0 version: 7.0.0 @@ -363,8 +363,8 @@ importers: specifier: 0.2.1 version: 0.2.1 tsc-alias: - specifier: 1.8.7 - version: 1.8.7 + specifier: 1.8.8 + version: 1.8.8 tsconfig-paths: specifier: 4.2.0 version: 4.2.0 @@ -771,8 +771,8 @@ importers: specifier: 2.11.0 version: 2.11.0 sass: - specifier: 1.67.0 - version: 1.67.0 + specifier: 1.68.0 + version: 1.68.0 strict-event-emitter-types: specifier: 2.0.0 version: 2.0.0 @@ -789,8 +789,8 @@ importers: specifier: 1.6.0 version: 1.6.0 tsc-alias: - specifier: 1.8.7 - version: 1.8.7 + specifier: 1.8.8 + version: 1.8.8 tsconfig-paths: specifier: 4.2.0 version: 4.2.0 @@ -808,7 +808,7 @@ importers: version: 1.8.1 vite: specifier: 4.4.9 - version: 4.4.9(@types/node@20.6.3)(sass@1.67.0)(terser@5.19.4) + version: 4.4.9(@types/node@20.6.3)(sass@1.68.0)(terser@5.20.0) vue: specifier: 3.3.4 version: 3.3.4 @@ -820,59 +820,59 @@ importers: version: 4.1.0(vue@3.3.4) devDependencies: '@storybook/addon-actions': - specifier: 7.4.2 - version: 7.4.2(react-dom@18.2.0)(react@18.2.0) + specifier: 7.4.3 + version: 7.4.3(react-dom@18.2.0)(react@18.2.0) '@storybook/addon-essentials': - specifier: 7.4.2 - version: 7.4.2(react-dom@18.2.0)(react@18.2.0) + specifier: 7.4.3 + version: 7.4.3(react-dom@18.2.0)(react@18.2.0) '@storybook/addon-interactions': - specifier: 7.4.2 - version: 7.4.2(react-dom@18.2.0)(react@18.2.0) + specifier: 7.4.3 + version: 7.4.3(react-dom@18.2.0)(react@18.2.0) '@storybook/addon-links': - specifier: 7.4.2 - version: 7.4.2(react-dom@18.2.0)(react@18.2.0) + specifier: 7.4.3 + version: 7.4.3(react-dom@18.2.0)(react@18.2.0) '@storybook/addon-storysource': - specifier: 7.4.2 - version: 7.4.2(react-dom@18.2.0)(react@18.2.0) + specifier: 7.4.3 + version: 7.4.3(react-dom@18.2.0)(react@18.2.0) '@storybook/addons': - specifier: 7.4.2 - version: 7.4.2(react-dom@18.2.0)(react@18.2.0) + specifier: 7.4.3 + version: 7.4.3(react-dom@18.2.0)(react@18.2.0) '@storybook/blocks': - specifier: 7.4.2 - version: 7.4.2(react-dom@18.2.0)(react@18.2.0) + specifier: 7.4.3 + version: 7.4.3(react-dom@18.2.0)(react@18.2.0) '@storybook/core-events': - specifier: 7.4.2 - version: 7.4.2 + specifier: 7.4.3 + version: 7.4.3 '@storybook/jest': specifier: 0.2.2 version: 0.2.2(vitest@0.34.4) '@storybook/manager-api': - specifier: 7.4.2 - version: 7.4.2(react-dom@18.2.0)(react@18.2.0) + specifier: 7.4.3 + version: 7.4.3(react-dom@18.2.0)(react@18.2.0) '@storybook/preview-api': - specifier: 7.4.2 - version: 7.4.2 + specifier: 7.4.3 + version: 7.4.3 '@storybook/react': - specifier: 7.4.2 - version: 7.4.2(react-dom@18.2.0)(react@18.2.0)(typescript@5.2.2) + specifier: 7.4.3 + version: 7.4.3(react-dom@18.2.0)(react@18.2.0)(typescript@5.2.2) '@storybook/react-vite': - specifier: 7.4.2 - version: 7.4.2(react-dom@18.2.0)(react@18.2.0)(rollup@3.29.2)(typescript@5.2.2)(vite@4.4.9) + specifier: 7.4.3 + version: 7.4.3(react-dom@18.2.0)(react@18.2.0)(rollup@3.29.2)(typescript@5.2.2)(vite@4.4.9) '@storybook/testing-library': specifier: 0.2.1 version: 0.2.1 '@storybook/theming': - specifier: 7.4.2 - version: 7.4.2(react-dom@18.2.0)(react@18.2.0) + specifier: 7.4.3 + version: 7.4.3(react-dom@18.2.0)(react@18.2.0) '@storybook/types': - specifier: 7.4.2 - version: 7.4.2 + specifier: 7.4.3 + version: 7.4.3 '@storybook/vue3': - specifier: 7.4.2 - version: 7.4.2(@vue/compiler-core@3.3.4)(vue@3.3.4) + specifier: 7.4.3 + version: 7.4.3(@vue/compiler-core@3.3.4)(vue@3.3.4) '@storybook/vue3-vite': - specifier: 7.4.2 - version: 7.4.2(@vue/compiler-core@3.3.4)(react-dom@18.2.0)(react@18.2.0)(typescript@5.2.2)(vite@4.4.9)(vue@3.3.4) + specifier: 7.4.3 + version: 7.4.3(@vue/compiler-core@3.3.4)(react-dom@18.2.0)(react@18.2.0)(typescript@5.2.2)(vite@4.4.9)(vue@3.3.4) '@testing-library/vue': specifier: 7.0.0 version: 7.0.0(@vue/compiler-sfc@3.3.4)(vue@3.3.4) @@ -977,7 +977,7 @@ importers: version: 7.4.2 storybook-addon-misskey-theme: specifier: github:misskey-dev/storybook-addon-misskey-theme - version: github.com/misskey-dev/storybook-addon-misskey-theme/cf583db098365b2ccc81a82f63ca9c93bc32b640(@storybook/blocks@7.4.2)(@storybook/components@7.4.2)(@storybook/core-events@7.4.2)(@storybook/manager-api@7.4.2)(@storybook/preview-api@7.4.2)(@storybook/theming@7.4.2)(@storybook/types@7.4.2)(react-dom@18.2.0)(react@18.2.0) + version: github.com/misskey-dev/storybook-addon-misskey-theme/cf583db098365b2ccc81a82f63ca9c93bc32b640(@storybook/blocks@7.4.3)(@storybook/components@7.4.3)(@storybook/core-events@7.4.3)(@storybook/manager-api@7.4.3)(@storybook/preview-api@7.4.3)(@storybook/theming@7.4.3)(@storybook/types@7.4.3)(react-dom@18.2.0)(react@18.2.0) summaly: specifier: github:misskey-dev/summaly version: github.com/misskey-dev/summaly/d2d8db49943ccb201c1b1b283e9d0a630519fac7 @@ -986,7 +986,7 @@ importers: version: 1.0.3 vitest: specifier: 0.34.4 - version: 0.34.4(happy-dom@10.0.3)(sass@1.67.0)(terser@5.19.4) + version: 0.34.4(happy-dom@10.0.3)(sass@1.68.0)(terser@5.20.0) vitest-fetch-mock: specifier: 0.2.2 version: 0.2.2(vitest@0.34.4) @@ -3760,8 +3760,8 @@ packages: text-decoding: 1.0.0 dev: false - /@fastify/cookie@9.0.4: - resolution: {integrity: sha512-behLOTH2u7fSZ6+TWeW8XUCmpEstwl8ysxzyb4QRxnKyt80O2S4yVfNbBZQcG9rktjeZXfR7LLl9xXKL4vdjlQ==} + /@fastify/cookie@9.1.0: + resolution: {integrity: sha512-w/LlQjj7cmYlQNhEKNm4jQoLkFXCL73kFu1Jy3aL7IFbYEojEKur0f7ieCKUxBBaU65tpaWC83UM8xW7AzY6uw==} dependencies: cookie: 0.5.0 fastify-plugin: 4.5.0 @@ -4263,7 +4263,7 @@ packages: magic-string: 0.27.0 react-docgen-typescript: 2.2.2(typescript@5.2.2) typescript: 5.2.2 - vite: 4.4.9(@types/node@20.6.3)(sass@1.67.0)(terser@5.19.4) + vite: 4.4.9(@types/node@20.6.3)(sass@1.68.0)(terser@5.20.0) dev: true /@jridgewell/gen-mapping@0.3.2: @@ -5813,8 +5813,8 @@ packages: resolution: {integrity: sha512-Uy0+khmZqUrUGm5dmMqVlnvufZRSK0FbYzVgp0UMstm+F5+W2/jnEEQyc9vo1ZR/E5ZI/B1WjjoTqBqwJL6Krw==} dev: false - /@storybook/addon-actions@7.4.2(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-aKHyYjxcWaOTf/7B8x4EmUNkDAiYJZyJfGTYg2TDEDs89x7/9slujAA01qIgOp74C9nWkHDUVdm7/J+h3kWJWw==} + /@storybook/addon-actions@7.4.3(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-ROlhxTQxBtMvfUU8ZTZZ6M0ALbUuChm2Fkau9inZyLgaE/HJbjAUCU7TbHFQ7GgdqA3/Lnw0Soox8cmjI4QQWA==} peerDependencies: react: ^16.8.0 || ^17.0.0 || ^18.0.0 react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 @@ -5824,14 +5824,14 @@ packages: react-dom: optional: true dependencies: - '@storybook/client-logger': 7.4.2 - '@storybook/components': 7.4.2(react-dom@18.2.0)(react@18.2.0) - '@storybook/core-events': 7.4.2 + '@storybook/client-logger': 7.4.3 + '@storybook/components': 7.4.3(react-dom@18.2.0)(react@18.2.0) + '@storybook/core-events': 7.4.3 '@storybook/global': 5.0.0 - '@storybook/manager-api': 7.4.2(react-dom@18.2.0)(react@18.2.0) - '@storybook/preview-api': 7.4.2 - '@storybook/theming': 7.4.2(react-dom@18.2.0)(react@18.2.0) - '@storybook/types': 7.4.2 + '@storybook/manager-api': 7.4.3(react-dom@18.2.0)(react@18.2.0) + '@storybook/preview-api': 7.4.3 + '@storybook/theming': 7.4.3(react-dom@18.2.0)(react@18.2.0) + '@storybook/types': 7.4.3 dequal: 2.0.3 lodash: 4.17.21 polished: 4.2.2 @@ -5847,8 +5847,8 @@ packages: - '@types/react-dom' dev: true - /@storybook/addon-backgrounds@7.4.2(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-Vl6Vw1NzO5jRqlAEpG017z6N79Drlp7Wpw8O9+69/dKtTNmuLqLnPxWrn4nL2CNvghHToLMpToSAFpRo2fBZBg==} + /@storybook/addon-backgrounds@7.4.3(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-NCcJKbz/kVSOXmoV1c+YoM28/oG9oO/kv1xwtX//cVv02SGerRCRqwB7zt0NzcLMSkrwaphRuXd55n0J7nGrBg==} peerDependencies: react: ^16.8.0 || ^17.0.0 || ^18.0.0 react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 @@ -5858,14 +5858,14 @@ packages: react-dom: optional: true dependencies: - '@storybook/client-logger': 7.4.2 - '@storybook/components': 7.4.2(react-dom@18.2.0)(react@18.2.0) - '@storybook/core-events': 7.4.2 + '@storybook/client-logger': 7.4.3 + '@storybook/components': 7.4.3(react-dom@18.2.0)(react@18.2.0) + '@storybook/core-events': 7.4.3 '@storybook/global': 5.0.0 - '@storybook/manager-api': 7.4.2(react-dom@18.2.0)(react@18.2.0) - '@storybook/preview-api': 7.4.2 - '@storybook/theming': 7.4.2(react-dom@18.2.0)(react@18.2.0) - '@storybook/types': 7.4.2 + '@storybook/manager-api': 7.4.3(react-dom@18.2.0)(react@18.2.0) + '@storybook/preview-api': 7.4.3 + '@storybook/theming': 7.4.3(react-dom@18.2.0)(react@18.2.0) + '@storybook/types': 7.4.3 memoizerific: 1.11.3 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) @@ -5875,8 +5875,8 @@ packages: - '@types/react-dom' dev: true - /@storybook/addon-controls@7.4.2(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-qzSac1bulSa7mqkfBfyAqbP9PbIio5CjGJ5VyT055ab50e13gj1eS3I9EJHCupYb19E3f465QatrGhoaTsE4hg==} + /@storybook/addon-controls@7.4.3(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-wlfr0Yx27GzQqb5iINQTwL8wCW1NK8+4bJ/HQe4SQOY1FpybOK59B421V6YyQ3tafDWU5MMKh2sElMY9z5Deqw==} peerDependencies: react: ^16.8.0 || ^17.0.0 || ^18.0.0 react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 @@ -5886,16 +5886,16 @@ packages: react-dom: optional: true dependencies: - '@storybook/blocks': 7.4.2(react-dom@18.2.0)(react@18.2.0) - '@storybook/client-logger': 7.4.2 - '@storybook/components': 7.4.2(react-dom@18.2.0)(react@18.2.0) - '@storybook/core-common': 7.4.2 - '@storybook/core-events': 7.4.2 - '@storybook/manager-api': 7.4.2(react-dom@18.2.0)(react@18.2.0) - '@storybook/node-logger': 7.4.2 - '@storybook/preview-api': 7.4.2 - '@storybook/theming': 7.4.2(react-dom@18.2.0)(react@18.2.0) - '@storybook/types': 7.4.2 + '@storybook/blocks': 7.4.3(react-dom@18.2.0)(react@18.2.0) + '@storybook/client-logger': 7.4.3 + '@storybook/components': 7.4.3(react-dom@18.2.0)(react@18.2.0) + '@storybook/core-common': 7.4.3 + '@storybook/core-events': 7.4.3 + '@storybook/manager-api': 7.4.3(react-dom@18.2.0)(react@18.2.0) + '@storybook/node-logger': 7.4.3 + '@storybook/preview-api': 7.4.3 + '@storybook/theming': 7.4.3(react-dom@18.2.0)(react@18.2.0) + '@storybook/types': 7.4.3 lodash: 4.17.21 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) @@ -5907,27 +5907,27 @@ packages: - supports-color dev: true - /@storybook/addon-docs@7.4.2(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-MV49/bGTibk2kvufk1+JEkDe2Ii/wfh5s+zO6a7p/FRy9zK0hQy3nEc56VpQ3+KzgDr0uyZI+mYq26OPwBuKRg==} + /@storybook/addon-docs@7.4.3(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-c6r1nJY4fj/Uj9p7jHdicAS7quiK9RY0LJw+aB++FvcO1KavX33BlD2mxPIVU8a9oLJ3X4RUfNQz+OSABGy0xw==} peerDependencies: react: ^16.8.0 || ^17.0.0 || ^18.0.0 react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 dependencies: '@jest/transform': 29.7.0 '@mdx-js/react': 2.3.0(react@18.2.0) - '@storybook/blocks': 7.4.2(react-dom@18.2.0)(react@18.2.0) - '@storybook/client-logger': 7.4.2 - '@storybook/components': 7.4.2(react-dom@18.2.0)(react@18.2.0) - '@storybook/csf-plugin': 7.4.2 - '@storybook/csf-tools': 7.4.2 + '@storybook/blocks': 7.4.3(react-dom@18.2.0)(react@18.2.0) + '@storybook/client-logger': 7.4.3 + '@storybook/components': 7.4.3(react-dom@18.2.0)(react@18.2.0) + '@storybook/csf-plugin': 7.4.3 + '@storybook/csf-tools': 7.4.3 '@storybook/global': 5.0.0 '@storybook/mdx2-csf': 1.0.0 - '@storybook/node-logger': 7.4.2 - '@storybook/postinstall': 7.4.2 - '@storybook/preview-api': 7.4.2 - '@storybook/react-dom-shim': 7.4.2(react-dom@18.2.0)(react@18.2.0) - '@storybook/theming': 7.4.2(react-dom@18.2.0)(react@18.2.0) - '@storybook/types': 7.4.2 + '@storybook/node-logger': 7.4.3 + '@storybook/postinstall': 7.4.3 + '@storybook/preview-api': 7.4.3 + '@storybook/react-dom-shim': 7.4.3(react-dom@18.2.0)(react@18.2.0) + '@storybook/theming': 7.4.3(react-dom@18.2.0)(react@18.2.0) + '@storybook/types': 7.4.3 fs-extra: 11.1.1 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) @@ -5941,25 +5941,25 @@ packages: - supports-color dev: true - /@storybook/addon-essentials@7.4.2(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-9VqVe8pUogA9TIAl9xxNSdqU1zfXXdZW6J3BfT3r0DolU4nLusejs2xIu6smhEjZ1KYD6V30Uy9HDft/GRCSnw==} + /@storybook/addon-essentials@7.4.3(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-LYAauAz4YGWmdZw6umJisl3X0gk1UV9Ovm6b7hicNfKKYGlsWz9KNyi3kvV+harScBzcqENFl5kwezFu2Ltq9g==} peerDependencies: react: ^16.8.0 || ^17.0.0 || ^18.0.0 react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 dependencies: - '@storybook/addon-actions': 7.4.2(react-dom@18.2.0)(react@18.2.0) - '@storybook/addon-backgrounds': 7.4.2(react-dom@18.2.0)(react@18.2.0) - '@storybook/addon-controls': 7.4.2(react-dom@18.2.0)(react@18.2.0) - '@storybook/addon-docs': 7.4.2(react-dom@18.2.0)(react@18.2.0) - '@storybook/addon-highlight': 7.4.2 - '@storybook/addon-measure': 7.4.2(react-dom@18.2.0)(react@18.2.0) - '@storybook/addon-outline': 7.4.2(react-dom@18.2.0)(react@18.2.0) - '@storybook/addon-toolbars': 7.4.2(react-dom@18.2.0)(react@18.2.0) - '@storybook/addon-viewport': 7.4.2(react-dom@18.2.0)(react@18.2.0) - '@storybook/core-common': 7.4.2 - '@storybook/manager-api': 7.4.2(react-dom@18.2.0)(react@18.2.0) - '@storybook/node-logger': 7.4.2 - '@storybook/preview-api': 7.4.2 + '@storybook/addon-actions': 7.4.3(react-dom@18.2.0)(react@18.2.0) + '@storybook/addon-backgrounds': 7.4.3(react-dom@18.2.0)(react@18.2.0) + '@storybook/addon-controls': 7.4.3(react-dom@18.2.0)(react@18.2.0) + '@storybook/addon-docs': 7.4.3(react-dom@18.2.0)(react@18.2.0) + '@storybook/addon-highlight': 7.4.3 + '@storybook/addon-measure': 7.4.3(react-dom@18.2.0)(react@18.2.0) + '@storybook/addon-outline': 7.4.3(react-dom@18.2.0)(react@18.2.0) + '@storybook/addon-toolbars': 7.4.3(react-dom@18.2.0)(react@18.2.0) + '@storybook/addon-viewport': 7.4.3(react-dom@18.2.0)(react@18.2.0) + '@storybook/core-common': 7.4.3 + '@storybook/manager-api': 7.4.3(react-dom@18.2.0)(react@18.2.0) + '@storybook/node-logger': 7.4.3 + '@storybook/preview-api': 7.4.3 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) ts-dedent: 2.2.0 @@ -5970,16 +5970,16 @@ packages: - supports-color dev: true - /@storybook/addon-highlight@7.4.2: - resolution: {integrity: sha512-HpwQiYil9RlMz303wQ9+ElW6W+Z0baqBUemlQ1JJZ6Wm47mgVVy8vLPcdH3JQkv7E34f51apPKVKFqq49xDqaA==} + /@storybook/addon-highlight@7.4.3: + resolution: {integrity: sha512-4FDvg+ZH5/H6b7qI6tVSygCaF5h7TStfyLXwxx07edot0vaaw4ir/0sbCAH9AUQ9/+08RiXsMFO5tgMUp/BjcA==} dependencies: - '@storybook/core-events': 7.4.2 + '@storybook/core-events': 7.4.3 '@storybook/global': 5.0.0 - '@storybook/preview-api': 7.4.2 + '@storybook/preview-api': 7.4.3 dev: true - /@storybook/addon-interactions@7.4.2(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-Gr3UbrPRgtBmwYctFiIxYlg4pfe07sC5gvMJmMdzHSJo0yAmcw2fSzKe4aEPX4trdAIb+diQKi3TDqIBrOfCLQ==} + /@storybook/addon-interactions@7.4.3(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-72Uy7FGr3UbEq44D44ML/o/kC8jUuBETDgnNTC/J7n35OzHcBcas9cHzam87IG/M8uxTwKtuUlEzwyoNUjI3MA==} peerDependencies: react: ^16.8.0 || ^17.0.0 || ^18.0.0 react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 @@ -5989,16 +5989,16 @@ packages: react-dom: optional: true dependencies: - '@storybook/client-logger': 7.4.2 - '@storybook/components': 7.4.2(react-dom@18.2.0)(react@18.2.0) - '@storybook/core-common': 7.4.2 - '@storybook/core-events': 7.4.2 + '@storybook/client-logger': 7.4.3 + '@storybook/components': 7.4.3(react-dom@18.2.0)(react@18.2.0) + '@storybook/core-common': 7.4.3 + '@storybook/core-events': 7.4.3 '@storybook/global': 5.0.0 - '@storybook/instrumenter': 7.4.2 - '@storybook/manager-api': 7.4.2(react-dom@18.2.0)(react@18.2.0) - '@storybook/preview-api': 7.4.2 - '@storybook/theming': 7.4.2(react-dom@18.2.0)(react@18.2.0) - '@storybook/types': 7.4.2 + '@storybook/instrumenter': 7.4.3 + '@storybook/manager-api': 7.4.3(react-dom@18.2.0)(react@18.2.0) + '@storybook/preview-api': 7.4.3 + '@storybook/theming': 7.4.3(react-dom@18.2.0)(react@18.2.0) + '@storybook/types': 7.4.3 jest-mock: 27.5.1 polished: 4.2.2 react: 18.2.0 @@ -6011,8 +6011,8 @@ packages: - supports-color dev: true - /@storybook/addon-links@7.4.2(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-XAspek8kkfiGq3NVt8SD108m54/dJWo+iDSmW3t/BQj2+sDPW8EpOg93X08YGoGMD8FSLOToeVC2Qi+kmAV0iw==} + /@storybook/addon-links@7.4.3(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-flnwlKdePQtwgryFhJlju94DVvZBq477xaD1mG9zcqEe+QeN+1GGggIo6R9e2hEsWcAfpc2yKA4dJP9KS9xIHg==} peerDependencies: react: ^16.8.0 || ^17.0.0 || ^18.0.0 react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 @@ -6022,22 +6022,22 @@ packages: react-dom: optional: true dependencies: - '@storybook/client-logger': 7.4.2 - '@storybook/core-events': 7.4.2 + '@storybook/client-logger': 7.4.3 + '@storybook/core-events': 7.4.3 '@storybook/csf': 0.1.0 '@storybook/global': 5.0.0 - '@storybook/manager-api': 7.4.2(react-dom@18.2.0)(react@18.2.0) - '@storybook/preview-api': 7.4.2 - '@storybook/router': 7.4.2(react-dom@18.2.0)(react@18.2.0) - '@storybook/types': 7.4.2 + '@storybook/manager-api': 7.4.3(react-dom@18.2.0)(react@18.2.0) + '@storybook/preview-api': 7.4.3 + '@storybook/router': 7.4.3(react-dom@18.2.0)(react@18.2.0) + '@storybook/types': 7.4.3 prop-types: 15.8.1 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) ts-dedent: 2.2.0 dev: true - /@storybook/addon-measure@7.4.2(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-fewNqI3mDAGAhFOFh/rdDS3dJ3e1QDmSVMB0KDJ7K22HOF2To/H9QfXHV24osnBRu6QemSIqObry1leF+u5BmQ==} + /@storybook/addon-measure@7.4.3(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-a07/GV9WWvqy1MuJtDevHzPo/weY86s7JT+qjGk0bhQdThVcd94Z7whlQL/LgrdAi1XLdHY5R5LpUIk9UDluNw==} peerDependencies: react: ^16.8.0 || ^17.0.0 || ^18.0.0 react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 @@ -6047,13 +6047,13 @@ packages: react-dom: optional: true dependencies: - '@storybook/client-logger': 7.4.2 - '@storybook/components': 7.4.2(react-dom@18.2.0)(react@18.2.0) - '@storybook/core-events': 7.4.2 + '@storybook/client-logger': 7.4.3 + '@storybook/components': 7.4.3(react-dom@18.2.0)(react@18.2.0) + '@storybook/core-events': 7.4.3 '@storybook/global': 5.0.0 - '@storybook/manager-api': 7.4.2(react-dom@18.2.0)(react@18.2.0) - '@storybook/preview-api': 7.4.2 - '@storybook/types': 7.4.2 + '@storybook/manager-api': 7.4.3(react-dom@18.2.0)(react@18.2.0) + '@storybook/preview-api': 7.4.3 + '@storybook/types': 7.4.3 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) tiny-invariant: 1.3.1 @@ -6062,8 +6062,8 @@ packages: - '@types/react-dom' dev: true - /@storybook/addon-outline@7.4.2(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-C6Zfoa6k2ef55O16GKV29T0wIYaDyiBtyd/fuTzz7hkpusSqKGFNeQyfG6hRmPv5yAib7+Pzl86cH3wGz85oTw==} + /@storybook/addon-outline@7.4.3(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-QPcTjmNgj0+7NEzomfqNOnm2DgcRjqvYGCdlxfDbnNB0J+ZGlaUozL3ZbofJKx9qCoHf+j+Z1pwONHafJV6t4w==} peerDependencies: react: ^16.8.0 || ^17.0.0 || ^18.0.0 react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 @@ -6073,13 +6073,13 @@ packages: react-dom: optional: true dependencies: - '@storybook/client-logger': 7.4.2 - '@storybook/components': 7.4.2(react-dom@18.2.0)(react@18.2.0) - '@storybook/core-events': 7.4.2 + '@storybook/client-logger': 7.4.3 + '@storybook/components': 7.4.3(react-dom@18.2.0)(react@18.2.0) + '@storybook/core-events': 7.4.3 '@storybook/global': 5.0.0 - '@storybook/manager-api': 7.4.2(react-dom@18.2.0)(react@18.2.0) - '@storybook/preview-api': 7.4.2 - '@storybook/types': 7.4.2 + '@storybook/manager-api': 7.4.3(react-dom@18.2.0)(react@18.2.0) + '@storybook/preview-api': 7.4.3 + '@storybook/types': 7.4.3 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) ts-dedent: 2.2.0 @@ -6088,8 +6088,8 @@ packages: - '@types/react-dom' dev: true - /@storybook/addon-storysource@7.4.2(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-FvIIxXVmPnb3XRelC8p8Xus8VFx3f6TW2MMdLZuhIdAEkhpEZSyC9LGSi5nNqg0IVaJWD/0AnnnKQZpEjzrqDA==} + /@storybook/addon-storysource@7.4.3(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-Egqd9YcmXvDn2GHxANlhHh7x0HZYfqokrqHnNoEbeOTsOtPNkFyLyE8ZhxencgN5qR5FYok79iUxKr/tQ6BazA==} peerDependencies: react: ^16.8.0 || ^17.0.0 || ^18.0.0 react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 @@ -6099,13 +6099,13 @@ packages: react-dom: optional: true dependencies: - '@storybook/client-logger': 7.4.2 - '@storybook/components': 7.4.2(react-dom@18.2.0)(react@18.2.0) - '@storybook/manager-api': 7.4.2(react-dom@18.2.0)(react@18.2.0) - '@storybook/preview-api': 7.4.2 - '@storybook/router': 7.4.2(react-dom@18.2.0)(react@18.2.0) - '@storybook/source-loader': 7.4.2(react-dom@18.2.0)(react@18.2.0) - '@storybook/theming': 7.4.2(react-dom@18.2.0)(react@18.2.0) + '@storybook/client-logger': 7.4.3 + '@storybook/components': 7.4.3(react-dom@18.2.0)(react@18.2.0) + '@storybook/manager-api': 7.4.3(react-dom@18.2.0)(react@18.2.0) + '@storybook/preview-api': 7.4.3 + '@storybook/router': 7.4.3(react-dom@18.2.0)(react@18.2.0) + '@storybook/source-loader': 7.4.3(react-dom@18.2.0)(react@18.2.0) + '@storybook/theming': 7.4.3(react-dom@18.2.0)(react@18.2.0) estraverse: 5.3.0 prop-types: 15.8.1 react: 18.2.0 @@ -6117,8 +6117,8 @@ packages: - '@types/react-dom' dev: true - /@storybook/addon-toolbars@7.4.2(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-zSU8GpyMKo3vGxR7LQdvw5jV/6QUOfUepS3HEYGB88vlIPK7UriV8k9HB0FObEyYZKYU7wuPYBYhXApK4ZBVUA==} + /@storybook/addon-toolbars@7.4.3(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-sHILofAarfzku+8qhueELoZYCLTHuDtmnlfILjBrH/w7Et3Vnyn1wJcdal7VnQPbX9EiEkdFaiZybQdniBb+hQ==} peerDependencies: react: ^16.8.0 || ^17.0.0 || ^18.0.0 react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 @@ -6128,11 +6128,11 @@ packages: react-dom: optional: true dependencies: - '@storybook/client-logger': 7.4.2 - '@storybook/components': 7.4.2(react-dom@18.2.0)(react@18.2.0) - '@storybook/manager-api': 7.4.2(react-dom@18.2.0)(react@18.2.0) - '@storybook/preview-api': 7.4.2 - '@storybook/theming': 7.4.2(react-dom@18.2.0)(react@18.2.0) + '@storybook/client-logger': 7.4.3 + '@storybook/components': 7.4.3(react-dom@18.2.0)(react@18.2.0) + '@storybook/manager-api': 7.4.3(react-dom@18.2.0)(react@18.2.0) + '@storybook/preview-api': 7.4.3 + '@storybook/theming': 7.4.3(react-dom@18.2.0)(react@18.2.0) react: 18.2.0 react-dom: 18.2.0(react@18.2.0) transitivePeerDependencies: @@ -6140,8 +6140,8 @@ packages: - '@types/react-dom' dev: true - /@storybook/addon-viewport@7.4.2(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-0mlqJmHezyZG9lLpj2LKN6HTZI015T3hYuFP4MwZRj579e246DvcBTw/h3n3bjLRGglapmFqkCw9PRVMhsQ/CA==} + /@storybook/addon-viewport@7.4.3(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-jDRG6ZMZ4ATOXiJQcXTpolTtIi8oAhbk6mbJyj65nClXgWqfZxMK9PMfJw5R7zHhAmrKoWNTDc72eayFOIHaNg==} peerDependencies: react: ^16.8.0 || ^17.0.0 || ^18.0.0 react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 @@ -6151,13 +6151,13 @@ packages: react-dom: optional: true dependencies: - '@storybook/client-logger': 7.4.2 - '@storybook/components': 7.4.2(react-dom@18.2.0)(react@18.2.0) - '@storybook/core-events': 7.4.2 + '@storybook/client-logger': 7.4.3 + '@storybook/components': 7.4.3(react-dom@18.2.0)(react@18.2.0) + '@storybook/core-events': 7.4.3 '@storybook/global': 5.0.0 - '@storybook/manager-api': 7.4.2(react-dom@18.2.0)(react@18.2.0) - '@storybook/preview-api': 7.4.2 - '@storybook/theming': 7.4.2(react-dom@18.2.0)(react@18.2.0) + '@storybook/manager-api': 7.4.3(react-dom@18.2.0)(react@18.2.0) + '@storybook/preview-api': 7.4.3 + '@storybook/theming': 7.4.3(react-dom@18.2.0)(react@18.2.0) memoizerific: 1.11.3 prop-types: 15.8.1 react: 18.2.0 @@ -6167,36 +6167,36 @@ packages: - '@types/react-dom' dev: true - /@storybook/addons@7.4.2(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-3snQVlTIKgzk6apNZc9sHr+0n4riiQkKGUkoHS8B1G90qj/9OyRnkDq55A7mJ9CxskqIjei5Q+hlko87g0jDsA==} + /@storybook/addons@7.4.3(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-6XvXE3sRl78MceRDAnfPd6N6j9ltMCuTITjjqU2GU8iyAexJ4bYodfKcmUmAQmixuc+6UPbWmlrQKNmBDlp3rw==} peerDependencies: react: ^16.8.0 || ^17.0.0 || ^18.0.0 react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 dependencies: - '@storybook/manager-api': 7.4.2(react-dom@18.2.0)(react@18.2.0) - '@storybook/preview-api': 7.4.2 - '@storybook/types': 7.4.2 + '@storybook/manager-api': 7.4.3(react-dom@18.2.0)(react@18.2.0) + '@storybook/preview-api': 7.4.3 + '@storybook/types': 7.4.3 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) dev: true - /@storybook/blocks@7.4.2(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-ijuZBsYfQBuwMA8Lb1dT6t2PzqhkOtIdc+G5iQ/IgWLX5HT1br+Wq8o3TUWrqACM9VKIASnJk13FMAOeGggD/w==} + /@storybook/blocks@7.4.3(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-uyZVx3er1qOPFpKJtsbozBwt1Os3zqiq+2se7xDBK6ERr07zaRHLgRci7+kI8T5mdlCxYiGV+kzx5Vx5/7XaXg==} peerDependencies: react: ^16.8.0 || ^17.0.0 || ^18.0.0 react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 dependencies: - '@storybook/channels': 7.4.2 - '@storybook/client-logger': 7.4.2 - '@storybook/components': 7.4.2(react-dom@18.2.0)(react@18.2.0) - '@storybook/core-events': 7.4.2 + '@storybook/channels': 7.4.3 + '@storybook/client-logger': 7.4.3 + '@storybook/components': 7.4.3(react-dom@18.2.0)(react@18.2.0) + '@storybook/core-events': 7.4.3 '@storybook/csf': 0.1.0 - '@storybook/docs-tools': 7.4.2 + '@storybook/docs-tools': 7.4.3 '@storybook/global': 5.0.0 - '@storybook/manager-api': 7.4.2(react-dom@18.2.0)(react@18.2.0) - '@storybook/preview-api': 7.4.2 - '@storybook/theming': 7.4.2(react-dom@18.2.0)(react@18.2.0) - '@storybook/types': 7.4.2 + '@storybook/manager-api': 7.4.3(react-dom@18.2.0)(react@18.2.0) + '@storybook/preview-api': 7.4.3 + '@storybook/theming': 7.4.3(react-dom@18.2.0)(react@18.2.0) + '@storybook/types': 7.4.3 '@types/lodash': 4.14.191 color-convert: 2.0.1 dequal: 2.0.3 @@ -6242,8 +6242,32 @@ packages: - supports-color dev: true - /@storybook/builder-vite@7.4.2(typescript@5.2.2)(vite@4.4.9): - resolution: {integrity: sha512-FAAq0lSCUoD+oP+aCIEuLdDr4DEgMn7RDuJrgRoFcDa3y4wWeMxsxTchCaz0Zfz7vwELwegL7KDQl2XT1uLBzQ==} + /@storybook/builder-manager@7.4.3: + resolution: {integrity: sha512-6jzxZ2J1jFaZXn7ZucEgV6XyUe+FJ9uuoMRZcZefoCKeXK/BOPCefijYWP3DPgqqVh3/JLUglIpz0MH9k8cBaw==} + dependencies: + '@fal-works/esbuild-plugin-global-externals': 2.1.2 + '@storybook/core-common': 7.4.3 + '@storybook/manager': 7.4.3 + '@storybook/node-logger': 7.4.3 + '@types/ejs': 3.1.2 + '@types/find-cache-dir': 3.2.1 + '@yarnpkg/esbuild-plugin-pnp': 3.0.0-rc.15(esbuild@0.18.17) + browser-assert: 1.2.1 + ejs: 3.1.9 + esbuild: 0.18.17 + esbuild-plugin-alias: 0.2.1 + express: 4.18.2 + find-cache-dir: 3.3.2 + fs-extra: 11.1.1 + process: 0.11.10 + util: 0.12.5 + transitivePeerDependencies: + - encoding + - supports-color + dev: true + + /@storybook/builder-vite@7.4.3(typescript@5.2.2)(vite@4.4.9): + resolution: {integrity: sha512-zCxIsJ0KZ+tiz8KzlAT54jGTGEbscqFQfiHK/Du+EYWG2ulX1+goMxw5k9+ndiK/GgjJGSdVoFvcNQH3MPOM6A==} peerDependencies: '@preact/preset-vite': '*' typescript: '>= 4.3.x' @@ -6257,15 +6281,15 @@ packages: vite-plugin-glimmerx: optional: true dependencies: - '@storybook/channels': 7.4.2 - '@storybook/client-logger': 7.4.2 - '@storybook/core-common': 7.4.2 - '@storybook/csf-plugin': 7.4.2 + '@storybook/channels': 7.4.3 + '@storybook/client-logger': 7.4.3 + '@storybook/core-common': 7.4.3 + '@storybook/csf-plugin': 7.4.3 '@storybook/mdx2-csf': 1.0.0 - '@storybook/node-logger': 7.4.2 - '@storybook/preview': 7.4.2 - '@storybook/preview-api': 7.4.2 - '@storybook/types': 7.4.2 + '@storybook/node-logger': 7.4.3 + '@storybook/preview': 7.4.3 + '@storybook/preview-api': 7.4.3 + '@storybook/types': 7.4.3 '@types/find-cache-dir': 3.2.1 browser-assert: 1.2.1 es-module-lexer: 0.9.3 @@ -6277,7 +6301,7 @@ packages: remark-slug: 6.1.0 rollup: 3.29.2 typescript: 5.2.2 - vite: 4.4.9(@types/node@20.6.3)(sass@1.67.0)(terser@5.19.4) + vite: 4.4.9(@types/node@20.6.3)(sass@1.68.0)(terser@5.20.0) transitivePeerDependencies: - encoding - supports-color @@ -6294,6 +6318,17 @@ packages: tiny-invariant: 1.3.1 dev: true + /@storybook/channels@7.4.3: + resolution: {integrity: sha512-lIoRX3EV0wKPX8ojIrJUtsOv4+Gv8r9pfJpam/NdyYd+rs0AjDK13ieINRfBMnJkfjsWa3vmZtGMBEVvDKwTMw==} + dependencies: + '@storybook/client-logger': 7.4.3 + '@storybook/core-events': 7.4.3 + '@storybook/global': 5.0.0 + qs: 6.11.1 + telejson: 7.2.0 + tiny-invariant: 1.3.1 + dev: true + /@storybook/cli@7.4.2: resolution: {integrity: sha512-WleObtC7OU2lT+pI2vTdXZPFMKDGbg3bkUJ+PG8+yqGg53ea5ZkwKWg9qHpXuiMkYDztqhbA8kYrny1GqFuVdg==} hasBin: true @@ -6352,6 +6387,12 @@ packages: '@storybook/global': 5.0.0 dev: true + /@storybook/client-logger@7.4.3: + resolution: {integrity: sha512-Nhngo9X4HjN00aRhgIVGWbwkWPe0Fz8PySuxnd8nAxSsz7KpdLFyYo2TbZZ3TX51FG5Fxcb0G5OHuunItP7EWQ==} + dependencies: + '@storybook/global': 5.0.0 + dev: true + /@storybook/codemod@7.4.2: resolution: {integrity: sha512-wU+SLHG/PpLptI0aWEhPxwFPcX7uYe+Id21DKNPg/HvYaLG3N+/DPDef+lm3Vaov9w4OD74iuQ3knT67SSkvmw==} dependencies: @@ -6373,19 +6414,19 @@ packages: - supports-color dev: true - /@storybook/components@7.4.2(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-ecbDzSUd74vf6IwHsbQr+9mVRxKWLmwd9zJ8RHMcR8UejTRAAR/eVvYoCG331TQ8TrhTmHTy5xCVv47pm6ORkQ==} + /@storybook/components@7.4.3(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-qwRW8wGUuM+H6oKUXXoIDrZECXh/lzowrWXFAzZiocovYEhPtZfl/yvJLWHjOwtka3n7lA7J7EtcjWe8/tueJQ==} peerDependencies: react: ^16.8.0 || ^17.0.0 || ^18.0.0 react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 dependencies: '@radix-ui/react-select': 1.2.2(react-dom@18.2.0)(react@18.2.0) '@radix-ui/react-toolbar': 1.0.4(react-dom@18.2.0)(react@18.2.0) - '@storybook/client-logger': 7.4.2 + '@storybook/client-logger': 7.4.3 '@storybook/csf': 0.1.0 '@storybook/global': 5.0.0 - '@storybook/theming': 7.4.2(react-dom@18.2.0)(react@18.2.0) - '@storybook/types': 7.4.2 + '@storybook/theming': 7.4.3(react-dom@18.2.0)(react@18.2.0) + '@storybook/types': 7.4.3 memoizerific: 1.11.3 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) @@ -6396,11 +6437,11 @@ packages: - '@types/react-dom' dev: true - /@storybook/core-client@7.4.2: - resolution: {integrity: sha512-2K4g8ZaqBUv6oC+1/Bd6XSQ/F7hNyy8OLqnnxjoYsjUQc8DaN5wUckEEgT9WSvLQg88B/FYFtNAX5m17aySWrg==} + /@storybook/core-client@7.4.3: + resolution: {integrity: sha512-YRt07TxC+HUtnyvbpJbY8d2+2QfFExBL7zRbms9tIRorddWfPBq+lA2RS9zcjUJJJtNSz1+ST70FuGr1N3AXGg==} dependencies: - '@storybook/client-logger': 7.4.2 - '@storybook/preview-api': 7.4.2 + '@storybook/client-logger': 7.4.3 + '@storybook/preview-api': 7.4.3 dev: true /@storybook/core-common@7.4.2: @@ -6434,12 +6475,49 @@ packages: - supports-color dev: true + /@storybook/core-common@7.4.3: + resolution: {integrity: sha512-jwIBUnWitZzw0VfKC77yN8DvTyePLVnAjbA2lPMbMIdO9ZY2lfD4AQ4QpuWsxJyAllFC4slOFDNgCDHx2AlYWw==} + dependencies: + '@storybook/core-events': 7.4.3 + '@storybook/node-logger': 7.4.3 + '@storybook/types': 7.4.3 + '@types/find-cache-dir': 3.2.1 + '@types/node': 16.18.46 + '@types/node-fetch': 2.6.4 + '@types/pretty-hrtime': 1.0.1 + chalk: 4.1.2 + esbuild: 0.18.17 + esbuild-register: 3.4.2(esbuild@0.18.17) + file-system-cache: 2.3.0 + find-cache-dir: 3.3.2 + find-up: 5.0.0 + fs-extra: 11.1.1 + glob: 10.3.0 + handlebars: 4.7.7 + lazy-universal-dotenv: 4.0.0 + node-fetch: 2.7.0 + picomatch: 2.3.1 + pkg-dir: 5.0.0 + pretty-hrtime: 1.0.3 + resolve-from: 5.0.0 + ts-dedent: 2.2.0 + transitivePeerDependencies: + - encoding + - supports-color + dev: true + /@storybook/core-events@7.4.2: resolution: {integrity: sha512-WCEBw+Ew8DrccnB0hpP9TXadreoOlMnWCyuXU2XrvmK/vde009leWQIsLs1rY+L17zDVuogBms62AxrDDJmMpw==} dependencies: ts-dedent: 2.2.0 dev: true + /@storybook/core-events@7.4.3: + resolution: {integrity: sha512-FRfipCijMnVbGxL1ZjOLM836lyd/TGQcUFeVjTQWW/+pIGHELqDHiYeq68hqoGTKl0G0np59CJPWYTUZA4Dl9Q==} + dependencies: + ts-dedent: 2.2.0 + dev: true + /@storybook/core-server@7.4.2: resolution: {integrity: sha512-4aaFQTjb8jsbzJeCs+VTo3gdyK3r3VhQN2sxn6k/lcKjQFeO84+iqGgGmb+oWUVz2TJL+JrNh7SUXkVsMZBXVQ==} dependencies: @@ -6492,10 +6570,62 @@ packages: - utf-8-validate dev: true - /@storybook/csf-plugin@7.4.2: - resolution: {integrity: sha512-b0yQ8oXEH0s3SGgjhOVrbjkc3C8IYGyTSnDtPwx/Dgmru/rC6LT7ZOdBegmGqBN1+6Ho0+AxFrmAmuuYK8p2rA==} + /@storybook/core-server@7.4.3: + resolution: {integrity: sha512-yl9HaVwk/xJV9zq76n/oR1cE39wAFmNmKVPOJAtr3+c7wS0tnBkw7T+GqZ2Seyv+xkcZUWS8KRH74HqwPwG0Bw==} dependencies: - '@storybook/csf-tools': 7.4.2 + '@aw-web-design/x-default-browser': 1.4.126 + '@discoveryjs/json-ext': 0.5.7 + '@storybook/builder-manager': 7.4.3 + '@storybook/channels': 7.4.3 + '@storybook/core-common': 7.4.3 + '@storybook/core-events': 7.4.3 + '@storybook/csf': 0.1.0 + '@storybook/csf-tools': 7.4.3 + '@storybook/docs-mdx': 0.1.0 + '@storybook/global': 5.0.0 + '@storybook/manager': 7.4.3 + '@storybook/node-logger': 7.4.3 + '@storybook/preview-api': 7.4.3 + '@storybook/telemetry': 7.4.3 + '@storybook/types': 7.4.3 + '@types/detect-port': 1.3.2 + '@types/node': 16.18.46 + '@types/pretty-hrtime': 1.0.1 + '@types/semver': 7.5.2 + better-opn: 3.0.2 + chalk: 4.1.2 + cli-table3: 0.6.3 + compression: 1.7.4 + detect-port: 1.5.1 + express: 4.18.2 + fs-extra: 11.1.1 + globby: 11.1.0 + ip: 2.0.0 + lodash: 4.17.21 + open: 8.4.2 + pretty-hrtime: 1.0.3 + prompts: 2.4.2 + read-pkg-up: 7.0.1 + semver: 7.5.4 + serve-favicon: 2.5.0 + telejson: 7.2.0 + tiny-invariant: 1.3.1 + ts-dedent: 2.2.0 + util: 0.12.5 + util-deprecate: 1.0.2 + watchpack: 2.4.0 + ws: 8.14.2(bufferutil@4.0.7)(utf-8-validate@6.0.3) + transitivePeerDependencies: + - bufferutil + - encoding + - supports-color + - utf-8-validate + dev: true + + /@storybook/csf-plugin@7.4.3: + resolution: {integrity: sha512-xQCimGsrGD1JxvyFc0LrH10WZWb181r0beF19aGIAadczs/JWhT+nxF8OhfP1LK4wHj9jH+F4nIXEMpm9yI9Qg==} + dependencies: + '@storybook/csf-tools': 7.4.3 unplugin: 1.4.0 transitivePeerDependencies: - supports-color @@ -6517,6 +6647,22 @@ packages: - supports-color dev: true + /@storybook/csf-tools@7.4.3: + resolution: {integrity: sha512-nkVakGx2kzou91lGcxnyFNiSEdnpx1a53lQTl/DLm0QpDbqQuu3ZbZWXZCpXV97t/6YPeCCnGLXodnI7PZyZBA==} + dependencies: + '@babel/generator': 7.22.10 + '@babel/parser': 7.22.16 + '@babel/traverse': 7.22.11 + '@babel/types': 7.22.17 + '@storybook/csf': 0.1.0 + '@storybook/types': 7.4.3 + fs-extra: 11.1.1 + recast: 0.23.1 + ts-dedent: 2.2.0 + transitivePeerDependencies: + - supports-color + dev: true + /@storybook/csf@0.1.0: resolution: {integrity: sha512-uk+jMXCZ8t38jSTHk2o5btI+aV2Ksbvl6DoOv3r6VaCM1KZqeuMwtwywIQdflkA8/6q/dKT8z8L+g8hC4GC3VQ==} dependencies: @@ -6527,12 +6673,12 @@ packages: resolution: {integrity: sha512-JDaBR9lwVY4eSH5W8EGHrhODjygPd6QImRbwjAuJNEnY0Vw4ie3bPkeGfnacB3OBW6u/agqPv2aRlR46JcAQLg==} dev: true - /@storybook/docs-tools@7.4.2: - resolution: {integrity: sha512-MXW+xaxah+C+aqJ5178oOILqX7dCSwJMKJefIJHHwr9w6UuGRaiPG1NDYK/0N0IEv9H8pNnXPnw3R8S6x7COhQ==} + /@storybook/docs-tools@7.4.3: + resolution: {integrity: sha512-T9oU10vIY3mC6Up+9rjN5LfBydhhIFhKzHPtUT9PfN1iEa0lO2TkT4m+vf2kcokPppUZNVbqiGjy9t/WYnpeZg==} dependencies: - '@storybook/core-common': 7.4.2 - '@storybook/preview-api': 7.4.2 - '@storybook/types': 7.4.2 + '@storybook/core-common': 7.4.3 + '@storybook/preview-api': 7.4.3 + '@storybook/types': 7.4.3 '@types/doctrine': 0.0.3 doctrine: 3.0.0 lodash: 4.17.21 @@ -6551,14 +6697,14 @@ packages: resolution: {integrity: sha512-FcOqPAXACP0I3oJ/ws6/rrPT9WGhu915Cg8D02a9YxLo0DE9zI+a9A5gRGvmQ09fiWPukqI8ZAEoQEdWUKMQdQ==} dev: true - /@storybook/instrumenter@7.4.2: - resolution: {integrity: sha512-g0tYjfv8q6RLl7PK3cyZGcdhad+4BspT1TXHl5Z4DFSo+bqFyHkP6X9tXzrpfQk+3abNrh5EjPaeec4+YHAOEw==} + /@storybook/instrumenter@7.4.3: + resolution: {integrity: sha512-XVctoUOFthTCea2+BKFKeUbhWrRY+1I8THgsZx67X3MQDt9bafwQdFR9jTGBeC31oNi1b7nmTuaox0lneNlghA==} dependencies: - '@storybook/channels': 7.4.2 - '@storybook/client-logger': 7.4.2 - '@storybook/core-events': 7.4.2 + '@storybook/channels': 7.4.3 + '@storybook/client-logger': 7.4.3 + '@storybook/core-events': 7.4.3 '@storybook/global': 5.0.0 - '@storybook/preview-api': 7.4.2 + '@storybook/preview-api': 7.4.3 dev: true /@storybook/jest@0.2.2(vitest@0.34.4): @@ -6574,20 +6720,20 @@ packages: - vitest dev: true - /@storybook/manager-api@7.4.2(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-gKPG0At9AGhF32iwjiba+ILqswc3ZFj9ZIu5HjGEmaoiOfqI6TayuHoptup0QxkI/Hx8f9mNkHCwR9COrmb69w==} + /@storybook/manager-api@7.4.3(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-o5oiL2cJKlY+HNBCdUo5QKT8yXTyYYvBKibSS3YfDKcjeR9RXP+RhdF5lLLh6TzPwfdtLrXQoVI4A/61v2kurQ==} peerDependencies: react: ^16.8.0 || ^17.0.0 || ^18.0.0 react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 dependencies: - '@storybook/channels': 7.4.2 - '@storybook/client-logger': 7.4.2 - '@storybook/core-events': 7.4.2 + '@storybook/channels': 7.4.3 + '@storybook/client-logger': 7.4.3 + '@storybook/core-events': 7.4.3 '@storybook/csf': 0.1.0 '@storybook/global': 5.0.0 - '@storybook/router': 7.4.2(react-dom@18.2.0)(react@18.2.0) - '@storybook/theming': 7.4.2(react-dom@18.2.0)(react@18.2.0) - '@storybook/types': 7.4.2 + '@storybook/router': 7.4.3(react-dom@18.2.0)(react@18.2.0) + '@storybook/theming': 7.4.3(react-dom@18.2.0)(react@18.2.0) + '@storybook/types': 7.4.3 dequal: 2.0.3 lodash: 4.17.21 memoizerific: 1.11.3 @@ -6603,6 +6749,10 @@ packages: resolution: {integrity: sha512-MtjmbAaf4hUObAa2ETQkm0+SzESoPeNm+TyzwZU5qq3Ouj4IOj2Ugd8EJPO3isdHxYt26A255tW/G9mb9v20fQ==} dev: true + /@storybook/manager@7.4.3: + resolution: {integrity: sha512-7U92tYwjt0DIKX7vCKNSZefuEavdnJYa5/zSjdlo0LtfBmGRBak1eq/sVLGfzrZ+wKIlCXgNh3f8OLy8RMnOOw==} + dev: true + /@storybook/mdx2-csf@1.0.0: resolution: {integrity: sha512-dBAnEL4HfxxJmv7LdEYUoZlQbWj9APZNIbOaq0tgF8XkxiIbzqvgB0jhL/9UOrysSDbQWBiCRTu2wOVxedGfmw==} dev: true @@ -6611,8 +6761,12 @@ packages: resolution: {integrity: sha512-iSBjhnMpWY9Hs5KGnf/xfHjGtGl740LUg4Gce874DuL773Mdc4hdppSKr4X/Pp1/AD67mNuifSXYx3V7d6XzTQ==} dev: true - /@storybook/postinstall@7.4.2: - resolution: {integrity: sha512-L9r14KqS87HPyXw0S3pK2X29ckel/4sdBSmy9nVF8n/ADafKE0pSLKB935VL0+88eMx06aT32SMcQoqjubGKWw==} + /@storybook/node-logger@7.4.3: + resolution: {integrity: sha512-pL13PPMUttflTWKVeDIKxPIJtBRl50Fzck12/7uiNROtBIrSV9DZSgOjInAazjo4tl+7fDj9lgkGeMEz00E8aQ==} + dev: true + + /@storybook/postinstall@7.4.3: + resolution: {integrity: sha512-6NMaAvL4a26jR50UPz+Q6VATY3lHZWw1ru/weFgiV0rat632RFdiFyrMMrjbUWu9HDJE4fbCzrIZU0jGVs1wlQ==} dev: true /@storybook/preview-api@7.4.2: @@ -6634,12 +6788,31 @@ packages: util-deprecate: 1.0.2 dev: true - /@storybook/preview@7.4.2: - resolution: {integrity: sha512-T7rAV6qQ7tBeSvgi0RuA5EU8tm1OMhU8PcCqosWGaLhMCR0VMzw1/WGKuR11g1XmzvaAm2xGgMp82nqi4G0i7A==} + /@storybook/preview-api@7.4.3: + resolution: {integrity: sha512-qKwfH2+qN1Zpz2UX6dQLiTU5x2JH3o/+jOY4GYF6c3atTm5WAu1OvCYAJVb6MdXfAhZNuPwDKnJR8VmzWplWBg==} + dependencies: + '@storybook/channels': 7.4.3 + '@storybook/client-logger': 7.4.3 + '@storybook/core-events': 7.4.3 + '@storybook/csf': 0.1.0 + '@storybook/global': 5.0.0 + '@storybook/types': 7.4.3 + '@types/qs': 6.9.7 + dequal: 2.0.3 + lodash: 4.17.21 + memoizerific: 1.11.3 + qs: 6.11.1 + synchronous-promise: 2.0.17 + ts-dedent: 2.2.0 + util-deprecate: 1.0.2 dev: true - /@storybook/react-dom-shim@7.4.2(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-9Ae2As3Hf//mdFEAv58VgDbi9R5JRGne8Ai6Vspc5FZMCJIjr5kullckBi3n9uKRg2L8V7wjDRK8Cql2tEr0Yg==} + /@storybook/preview@7.4.3: + resolution: {integrity: sha512-dItyGcql/rD6CWTKGUm58MguWC7L4KjlfNJmxxaHXnHRbaEjXPaRi9ztfmimIpAaBdBmreAZrZJYhLvOGG3CfA==} + dev: true + + /@storybook/react-dom-shim@7.4.3(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-d8kkZU4kqmNluuOx65l5H0L9lRn8Ji5rVxu+4MUCWrn82dxRLvVcFG0sfGUzOTNfX1/yajL2MxVJ2hx9fzLutQ==} peerDependencies: react: ^16.8.0 || ^17.0.0 || ^18.0.0 react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 @@ -6648,8 +6821,8 @@ packages: react-dom: 18.2.0(react@18.2.0) dev: true - /@storybook/react-vite@7.4.2(react-dom@18.2.0)(react@18.2.0)(rollup@3.29.2)(typescript@5.2.2)(vite@4.4.9): - resolution: {integrity: sha512-DIfInR1VOinI+qjrMLcVdelFTfDppZXhjbrNpXt209ZY6nPGHjvr+4FpgKh+y/ClUBmOqkMsR7/kj4rMzGL5yw==} + /@storybook/react-vite@7.4.3(react-dom@18.2.0)(react@18.2.0)(rollup@3.29.2)(typescript@5.2.2)(vite@4.4.9): + resolution: {integrity: sha512-olDbrdRVmpgb+i8FKP/Fp8SImgpVzDP/nf7u0j7H+pOUCjecziV0cW1COE35i5x2yQleNNps7bN8EugqBlD7Dw==} engines: {node: '>=16'} peerDependencies: react: ^16.8.0 || ^17.0.0 || ^18.0.0 @@ -6658,15 +6831,15 @@ packages: dependencies: '@joshwooding/vite-plugin-react-docgen-typescript': 0.2.1(typescript@5.2.2)(vite@4.4.9) '@rollup/pluginutils': 5.0.4(rollup@3.29.2) - '@storybook/builder-vite': 7.4.2(typescript@5.2.2)(vite@4.4.9) - '@storybook/react': 7.4.2(react-dom@18.2.0)(react@18.2.0)(typescript@5.2.2) + '@storybook/builder-vite': 7.4.3(typescript@5.2.2)(vite@4.4.9) + '@storybook/react': 7.4.3(react-dom@18.2.0)(react@18.2.0)(typescript@5.2.2) '@vitejs/plugin-react': 3.1.0(vite@4.4.9) ast-types: 0.14.2 magic-string: 0.30.3 react: 18.2.0 react-docgen: 6.0.0-alpha.3 react-dom: 18.2.0(react@18.2.0) - vite: 4.4.9(@types/node@20.6.3)(sass@1.67.0)(terser@5.19.4) + vite: 4.4.9(@types/node@20.6.3)(sass@1.68.0)(terser@5.20.0) transitivePeerDependencies: - '@preact/preset-vite' - encoding @@ -6676,8 +6849,8 @@ packages: - vite-plugin-glimmerx dev: true - /@storybook/react@7.4.2(react-dom@18.2.0)(react@18.2.0)(typescript@5.2.2): - resolution: {integrity: sha512-8bAnSOpDTiE1c9pSkIKRipvqbuZP6Hu1CYaG1RXWF8AIBsjiV9+SsR919Flj1UiCmcw4BLO/ZIvIDGny4ktHhA==} + /@storybook/react@7.4.3(react-dom@18.2.0)(react@18.2.0)(typescript@5.2.2): + resolution: {integrity: sha512-koF1GLPBY5rm8t+6i70Iw6Ep/6T2C+XAlnP1dO/ZJAv8mmeQmOw+Kwh6nNPG8bthm0l1nImgqRw2ZwCD2AFoSA==} engines: {node: '>=16.0.0'} peerDependencies: react: ^16.8.0 || ^17.0.0 || ^18.0.0 @@ -6687,13 +6860,13 @@ packages: typescript: optional: true dependencies: - '@storybook/client-logger': 7.4.2 - '@storybook/core-client': 7.4.2 - '@storybook/docs-tools': 7.4.2 + '@storybook/client-logger': 7.4.3 + '@storybook/core-client': 7.4.3 + '@storybook/docs-tools': 7.4.3 '@storybook/global': 5.0.0 - '@storybook/preview-api': 7.4.2 - '@storybook/react-dom-shim': 7.4.2(react-dom@18.2.0)(react@18.2.0) - '@storybook/types': 7.4.2 + '@storybook/preview-api': 7.4.3 + '@storybook/react-dom-shim': 7.4.3(react-dom@18.2.0)(react@18.2.0) + '@storybook/types': 7.4.3 '@types/escodegen': 0.0.6 '@types/estree': 0.0.51 '@types/node': 16.18.46 @@ -6716,27 +6889,27 @@ packages: - supports-color dev: true - /@storybook/router@7.4.2(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-TFpMrmliklWNSrF84kGnh3WcLZciqIvaAjhxahqD+kx070KLqjxrsiny7UC6PUUYZdjLkbR9m8n3SFdXAVKgLw==} + /@storybook/router@7.4.3(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-1ab1VTYzzOsBGKeT8xm1kLriIsIsiB/l3t7DdARJxLmPbddKyyXE018w17gfrARCWQ8SM99Ko6+pLmlZ2sm8ug==} peerDependencies: react: ^16.8.0 || ^17.0.0 || ^18.0.0 react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 dependencies: - '@storybook/client-logger': 7.4.2 + '@storybook/client-logger': 7.4.3 memoizerific: 1.11.3 qs: 6.11.1 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) dev: true - /@storybook/source-loader@7.4.2(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-QWF/Tz5V4qGJSaWuLxPRsU2Ywkj/YVixwOm+TL+L70c7F9Ck86M59FbJkVIjrKVgnFT/X1lcyOZ/4tbF8tzEiQ==} + /@storybook/source-loader@7.4.3(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-Z0WUKpYsRSh8Wdc2C0URjIakvhnL7qpf9GM5rtXnRQ7Qaq0x9MmdUOuTj6z+HthbNPWza4KDaC8mViBxhhdiOg==} peerDependencies: react: ^16.8.0 || ^17.0.0 || ^18.0.0 react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 dependencies: '@storybook/csf': 0.1.0 - '@storybook/types': 7.4.2 + '@storybook/types': 7.4.3 estraverse: 5.3.0 lodash: 4.17.21 prettier: 2.8.8 @@ -6760,6 +6933,22 @@ packages: - supports-color dev: true + /@storybook/telemetry@7.4.3: + resolution: {integrity: sha512-gA7QfQSdDocNKP0KfrmIhD8ZgW5G4zZD/NL0OsATlkL3H/DehH3Ugjfffh7Ao2JZRXogHp8p9EQCVfPW7iKgBQ==} + dependencies: + '@storybook/client-logger': 7.4.3 + '@storybook/core-common': 7.4.3 + '@storybook/csf-tools': 7.4.3 + chalk: 4.1.2 + detect-package-manager: 2.0.1 + fetch-retry: 5.0.4 + fs-extra: 11.1.1 + read-pkg-up: 7.0.1 + transitivePeerDependencies: + - encoding + - supports-color + dev: true + /@storybook/testing-library@0.2.1: resolution: {integrity: sha512-AdbfLCm1C2nEFrhA3ScdicfW6Fjcorehr6RlGwECMiWwaXisnP971Wd4psqtWxlAqQo4tYBZ0f6rJ3J78JLtsg==} dependencies: @@ -6768,14 +6957,14 @@ packages: ts-dedent: 2.2.0 dev: true - /@storybook/theming@7.4.2(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-wVmxZHVCqDoZgUOXTS4HRV4UClLtCydRNOEuUZ7X08QIPSA1FVL3gEpTQJfgCsyBX/cwSSofAMUbzAGEVNo+9g==} + /@storybook/theming@7.4.3(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-u5wLwWmhGcTmkcs6f2wDGv+w8wzwbNJat0WaIIbwdJfX7arH6nO5HkBhNxvl6FUFxX0tovp/e9ULzxVPc356jw==} peerDependencies: react: ^16.8.0 || ^17.0.0 || ^18.0.0 react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 dependencies: '@emotion/use-insertion-effect-with-fallbacks': 1.0.0(react@18.2.0) - '@storybook/client-logger': 7.4.2 + '@storybook/client-logger': 7.4.3 '@storybook/global': 5.0.0 memoizerific: 1.11.3 react: 18.2.0 @@ -6791,22 +6980,31 @@ packages: file-system-cache: 2.3.0 dev: true - /@storybook/vue3-vite@7.4.2(@vue/compiler-core@3.3.4)(react-dom@18.2.0)(react@18.2.0)(typescript@5.2.2)(vite@4.4.9)(vue@3.3.4): - resolution: {integrity: sha512-XOMidBxEjKSugWWT1ZfUgQAwh60rP4P7IunEMsQOtYQCR4ytNXwkyipeYLWKtjefub7Vz/C1egBJwuaA0gnkXA==} + /@storybook/types@7.4.3: + resolution: {integrity: sha512-DrHC1hIiw9TqDILLokDnvbUPNxGz5iJaYFEv30uvYE0s9MvgEUPblCChEUjaHOps7zQTznMPf8ULfoXlgqxk2A==} + dependencies: + '@storybook/channels': 7.4.3 + '@types/babel__core': 7.20.0 + '@types/express': 4.17.17 + file-system-cache: 2.3.0 + dev: true + + /@storybook/vue3-vite@7.4.3(@vue/compiler-core@3.3.4)(react-dom@18.2.0)(react@18.2.0)(typescript@5.2.2)(vite@4.4.9)(vue@3.3.4): + resolution: {integrity: sha512-uOLAQa/Tyqdne8+2S7Opm5ui9Ii9x3fuGJb3SvnuMUMHB2Tz5BczyFwkjOiME3zE9pQ9Cjg18InBVagbLK7R0A==} engines: {node: ^14.18 || >=16} peerDependencies: react: ^16.8.0 || ^17.0.0 || ^18.0.0 react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 vite: ^3.0.0 || ^4.0.0 dependencies: - '@storybook/builder-vite': 7.4.2(typescript@5.2.2)(vite@4.4.9) - '@storybook/core-server': 7.4.2 - '@storybook/vue3': 7.4.2(@vue/compiler-core@3.3.4)(vue@3.3.4) + '@storybook/builder-vite': 7.4.3(typescript@5.2.2)(vite@4.4.9) + '@storybook/core-server': 7.4.3 + '@storybook/vue3': 7.4.3(@vue/compiler-core@3.3.4)(vue@3.3.4) '@vitejs/plugin-vue': 4.3.4(vite@4.4.9)(vue@3.3.4) magic-string: 0.30.3 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) - vite: 4.4.9(@types/node@20.6.3)(sass@1.67.0)(terser@5.19.4) + vite: 4.4.9(@types/node@20.6.3)(sass@1.68.0)(terser@5.20.0) vue-docgen-api: 4.64.1(vue@3.3.4) transitivePeerDependencies: - '@preact/preset-vite' @@ -6820,24 +7018,24 @@ packages: - vue dev: true - /@storybook/vue3@7.4.2(@vue/compiler-core@3.3.4)(vue@3.3.4): - resolution: {integrity: sha512-wUsYFme+FwF1WQaX/fvoO8+4YSdl12TvBcKSxJ2YB9OocazIAe0ibG11nwdA/8bwOXf4pPbwoXkLPJ4x2unYRg==} + /@storybook/vue3@7.4.3(@vue/compiler-core@3.3.4)(vue@3.3.4): + resolution: {integrity: sha512-c/dmqupgs6be+Vp5bpYQ4VEsSsCKrQfPVSRYto8D8rDqrQGoJvqhRCQbC+wVIia1am4HeYZctX0kUiCPlB++2g==} engines: {node: '>=16.0.0'} peerDependencies: '@vue/compiler-core': ^3.0.0 vue: ^3.0.0 dependencies: - '@storybook/core-client': 7.4.2 - '@storybook/docs-tools': 7.4.2 + '@storybook/core-client': 7.4.3 + '@storybook/docs-tools': 7.4.3 '@storybook/global': 5.0.0 - '@storybook/preview-api': 7.4.2 - '@storybook/types': 7.4.2 + '@storybook/preview-api': 7.4.3 + '@storybook/types': 7.4.3 '@vue/compiler-core': 3.3.4 lodash: 4.17.21 ts-dedent: 2.2.0 type-fest: 2.19.0 vue: 3.3.4 - vue-component-type-helpers: 1.8.11 + vue-component-type-helpers: 1.8.13 transitivePeerDependencies: - encoding - supports-color @@ -7290,7 +7488,7 @@ packages: dom-accessibility-api: 0.5.16 lodash: 4.17.21 redent: 3.0.0 - vitest: 0.34.4(happy-dom@10.0.3)(sass@1.67.0)(terser@5.19.4) + vitest: 0.34.4(happy-dom@10.0.3)(sass@1.68.0)(terser@5.20.0) dev: true /@testing-library/user-event@14.4.3(@testing-library/dom@9.2.0): @@ -8088,7 +8286,7 @@ packages: '@babel/plugin-transform-react-jsx-source': 7.19.6(@babel/core@7.22.11) magic-string: 0.27.0 react-refresh: 0.14.0 - vite: 4.4.9(@types/node@20.6.3)(sass@1.67.0)(terser@5.19.4) + vite: 4.4.9(@types/node@20.6.3)(sass@1.68.0)(terser@5.20.0) transitivePeerDependencies: - supports-color dev: true @@ -8100,7 +8298,7 @@ packages: vite: ^4.0.0 vue: ^3.2.25 dependencies: - vite: 4.4.9(@types/node@20.6.3)(sass@1.67.0)(terser@5.19.4) + vite: 4.4.9(@types/node@20.6.3)(sass@1.68.0)(terser@5.20.0) vue: 3.3.4 /@vitest/coverage-v8@0.34.4(vitest@0.34.4): @@ -8119,7 +8317,7 @@ packages: std-env: 3.3.3 test-exclude: 6.0.0 v8-to-istanbul: 9.1.0 - vitest: 0.34.4(happy-dom@10.0.3)(sass@1.67.0)(terser@5.19.4) + vitest: 0.34.4(happy-dom@10.0.3)(sass@1.68.0)(terser@5.20.0) transitivePeerDependencies: - supports-color dev: true @@ -9251,8 +9449,8 @@ packages: dependencies: node-gyp-build: 4.6.0 - /bullmq@4.11.1: - resolution: {integrity: sha512-e5XnF2CKZv1v8ew3itToJEkc1KiR7bzk4FInkKnB8j0GTsJzOVFF4BgGQb7xKk4wl+ISLcNQyaLcBr5paBIEtw==} + /bullmq@4.11.2: + resolution: {integrity: sha512-ffDw8B2+N8x+HVRTb9/nEngb3ubEYb8vdKKTJfUiUoPWPUcHzCkylSVWWf7dcr6KjzKElaCWEjVsKzHjmyhmnw==} dependencies: cron-parser: 4.8.1 glob: 8.1.0 @@ -10668,7 +10866,6 @@ packages: hasBin: true dependencies: jake: 10.8.5 - dev: false /electron-to-chromium@1.4.463: resolution: {integrity: sha512-fT3hvdUWLjDbaTGzyOjng/CQhQJSQP8ThO3XZAoaxHvHo2kUXiRQVMj9M235l8uDFiNPsPa6KHT1p3RaR6ugRw==} @@ -11774,6 +11971,7 @@ packages: /form-data@3.0.1: resolution: {integrity: sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg==} engines: {node: '>= 6'} + requiresBuild: true dependencies: asynckit: 0.4.0 combined-stream: 1.0.8 @@ -17173,8 +17371,8 @@ packages: postcss: 8.4.30 dev: false - /sass@1.67.0: - resolution: {integrity: sha512-SVrO9ZeX/QQyEGtuZYCVxoeAL5vGlYjJ9p4i4HFuekWl8y/LtJ7tJc10Z+ck1c8xOuoBm2MYzcLfTAffD0pl/A==} + /sass@1.68.0: + resolution: {integrity: sha512-Lmj9lM/fef0nQswm1J2HJcEsBUba4wgNx2fea6yJHODREoMFnwRpZydBnX/RjyXw2REIwdkbqE4hrTo4qfDBUA==} engines: {node: '>=14.0.0'} hasBin: true dependencies: @@ -18150,8 +18348,8 @@ packages: unique-string: 2.0.0 dev: true - /terser@5.19.4: - resolution: {integrity: sha512-6p1DjHeuluwxDXcuT9VR8p64klWJKo1ILiy19s6C9+0Bh2+NWTX6nD9EPppiER4ICkHDVB1RkVpin/YW2nQn/g==} + /terser@5.20.0: + resolution: {integrity: sha512-e56ETryaQDyebBwJIWYB2TT6f2EZ0fL0sW/JRXNMN26zZdKi2u/E/5my5lG6jNxym6qsrVXfFRmOdV42zlAgLQ==} engines: {node: '>=10'} hasBin: true dependencies: @@ -18388,8 +18586,8 @@ packages: resolution: {integrity: sha512-vDWbsl26LIcPGmDpoVzjEP6+hvHZkBkLW7JpvwbCv/5IYPJlsbzCVXY3wsCeAxAUeTclNOUZxnLdGh3VBD/J6w==} dev: true - /tsc-alias@1.8.7: - resolution: {integrity: sha512-59Q/zUQa3miTf99mLbSqaW0hi1jt4WoG8Uhe5hSZJHQpSoFW9eEwvW7jlKMHXWvT+zrzy3SN9PE/YBhQ+WVydA==} + /tsc-alias@1.8.8: + resolution: {integrity: sha512-OYUOd2wl0H858NvABWr/BoSKNERw3N9GTi3rHPK8Iv4O1UyUXIrTTOAZNHsjlVpXFOhpJBVARI1s+rzwLivN3Q==} hasBin: true dependencies: chokidar: 3.5.3 @@ -18937,7 +19135,7 @@ packages: core-util-is: 1.0.2 extsprintf: 1.3.0 - /vite-node@0.34.4(@types/node@20.6.3)(sass@1.67.0)(terser@5.19.4): + /vite-node@0.34.4(@types/node@20.6.3)(sass@1.68.0)(terser@5.20.0): resolution: {integrity: sha512-ho8HtiLc+nsmbwZMw8SlghESEE3KxJNp04F/jPUCLVvaURwt0d+r9LxEqCX5hvrrOQ0GSyxbYr5ZfRYhQ0yVKQ==} engines: {node: '>=v14.18.0'} hasBin: true @@ -18947,7 +19145,7 @@ packages: mlly: 1.4.0 pathe: 1.1.1 picocolors: 1.0.0 - vite: 4.4.9(@types/node@20.6.3)(sass@1.67.0)(terser@5.19.4) + vite: 4.4.9(@types/node@20.6.3)(sass@1.68.0)(terser@5.20.0) transitivePeerDependencies: - '@types/node' - less @@ -18963,7 +19161,7 @@ packages: resolution: {integrity: sha512-p4D8CFVhZS412SyQX125qxyzOgIFouwOcvjZWk6bQbNPR1wtaEzFT6jZxAjf1dejlGqa6fqHcuCvQea6EWUkUA==} dev: true - /vite@4.4.9(@types/node@20.6.3)(sass@1.67.0)(terser@5.19.4): + /vite@4.4.9(@types/node@20.6.3)(sass@1.68.0)(terser@5.20.0): resolution: {integrity: sha512-2mbUn2LlUmNASWwSCNSJ/EG2HuSRTnVNaydp6vMCm5VIqJsjMfbIWtbH2kDuwUVW5mMUKKZvGPX/rqeqVvv1XA==} engines: {node: ^14.18.0 || >=16.0.0} hasBin: true @@ -18995,8 +19193,8 @@ packages: esbuild: 0.18.17 postcss: 8.4.30 rollup: 3.29.2 - sass: 1.67.0 - terser: 5.19.4 + sass: 1.68.0 + terser: 5.20.0 optionalDependencies: fsevents: 2.3.2 @@ -19007,12 +19205,12 @@ packages: vitest: '>=0.16.0' dependencies: cross-fetch: 3.1.5 - vitest: 0.34.4(happy-dom@10.0.3)(sass@1.67.0)(terser@5.19.4) + vitest: 0.34.4(happy-dom@10.0.3)(sass@1.68.0)(terser@5.20.0) transitivePeerDependencies: - encoding dev: true - /vitest@0.34.4(happy-dom@10.0.3)(sass@1.67.0)(terser@5.19.4): + /vitest@0.34.4(happy-dom@10.0.3)(sass@1.68.0)(terser@5.20.0): resolution: {integrity: sha512-SE/laOsB6995QlbSE6BtkpXDeVNLJc1u2LHRG/OpnN4RsRzM3GQm4nm3PQCK5OBtrsUqnhzLdnT7se3aeNGdlw==} engines: {node: '>=v14.18.0'} hasBin: true @@ -19065,8 +19263,8 @@ packages: strip-literal: 1.0.1 tinybench: 2.5.0 tinypool: 0.7.0 - vite: 4.4.9(@types/node@20.6.3)(sass@1.67.0)(terser@5.19.4) - vite-node: 0.34.4(@types/node@20.6.3)(sass@1.67.0)(terser@5.19.4) + vite: 4.4.9(@types/node@20.6.3)(sass@1.68.0)(terser@5.20.0) + vite-node: 0.34.4(@types/node@20.6.3)(sass@1.68.0)(terser@5.20.0) why-is-node-running: 2.2.2 transitivePeerDependencies: - less @@ -19082,8 +19280,8 @@ packages: resolution: {integrity: sha512-Dhxzh5HZuiHQhbvTW9AMetFfBHDMYpo23Uo9btPXgdYP+3T5S+p+jgNy7spra+veYhBP2dCSgxR/i2Y02h5/6w==} engines: {node: '>=0.10.0'} - /vue-component-type-helpers@1.8.11: - resolution: {integrity: sha512-CWItFzuEWjkSXDeMGwQEc5cFH4FaueyPQHfi1mBDe+wA2JABqNjFxFUtmZJ9WHkb0HpEwqgBg1umiXrWYXkXHw==} + /vue-component-type-helpers@1.8.13: + resolution: {integrity: sha512-zbCQviVRexZ7NF2kizQq5LicG5QGXPHPALKE3t59f5q2FwaG9GKtdhhIV4rw4LDUm9RkvGAP8TSXlXcBWY8rFQ==} dev: true /vue-docgen-api@4.64.1(vue@3.3.4): @@ -19609,7 +19807,7 @@ packages: sharp: 0.31.3 dev: false - github.com/misskey-dev/storybook-addon-misskey-theme/cf583db098365b2ccc81a82f63ca9c93bc32b640(@storybook/blocks@7.4.2)(@storybook/components@7.4.2)(@storybook/core-events@7.4.2)(@storybook/manager-api@7.4.2)(@storybook/preview-api@7.4.2)(@storybook/theming@7.4.2)(@storybook/types@7.4.2)(react-dom@18.2.0)(react@18.2.0): + github.com/misskey-dev/storybook-addon-misskey-theme/cf583db098365b2ccc81a82f63ca9c93bc32b640(@storybook/blocks@7.4.3)(@storybook/components@7.4.3)(@storybook/core-events@7.4.3)(@storybook/manager-api@7.4.3)(@storybook/preview-api@7.4.3)(@storybook/theming@7.4.3)(@storybook/types@7.4.3)(react-dom@18.2.0)(react@18.2.0): resolution: {tarball: https://codeload.github.com/misskey-dev/storybook-addon-misskey-theme/tar.gz/cf583db098365b2ccc81a82f63ca9c93bc32b640} id: github.com/misskey-dev/storybook-addon-misskey-theme/cf583db098365b2ccc81a82f63ca9c93bc32b640 name: storybook-addon-misskey-theme @@ -19630,13 +19828,13 @@ packages: react-dom: optional: true dependencies: - '@storybook/blocks': 7.4.2(react-dom@18.2.0)(react@18.2.0) - '@storybook/components': 7.4.2(react-dom@18.2.0)(react@18.2.0) - '@storybook/core-events': 7.4.2 - '@storybook/manager-api': 7.4.2(react-dom@18.2.0)(react@18.2.0) - '@storybook/preview-api': 7.4.2 - '@storybook/theming': 7.4.2(react-dom@18.2.0)(react@18.2.0) - '@storybook/types': 7.4.2 + '@storybook/blocks': 7.4.3(react-dom@18.2.0)(react@18.2.0) + '@storybook/components': 7.4.3(react-dom@18.2.0)(react@18.2.0) + '@storybook/core-events': 7.4.3 + '@storybook/manager-api': 7.4.3(react-dom@18.2.0)(react@18.2.0) + '@storybook/preview-api': 7.4.3 + '@storybook/theming': 7.4.3(react-dom@18.2.0)(react@18.2.0) + '@storybook/types': 7.4.3 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) dev: true