From b8b8f9a4c2a0dcf4a0c6554a78c5654c9ecbafa7 Mon Sep 17 00:00:00 2001 From: atsu1125 Date: Fri, 20 Oct 2023 22:10:16 +0900 Subject: [PATCH 001/311] enhance(server): Improve user block (Renote Part) --- packages/backend/src/core/NoteCreateService.ts | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/packages/backend/src/core/NoteCreateService.ts b/packages/backend/src/core/NoteCreateService.ts index 364a300d23..08c40a8c2e 100644 --- a/packages/backend/src/core/NoteCreateService.ts +++ b/packages/backend/src/core/NoteCreateService.ts @@ -56,6 +56,7 @@ import { SearchService } from '@/core/SearchService.js'; import { FeaturedService } from '@/core/FeaturedService.js'; import { FunoutTimelineService } from '@/core/FunoutTimelineService.js'; import { UtilityService } from '@/core/UtilityService.js'; +import { UserBlockingService } from '@/core/UserBlockingService.js'; type NotificationType = 'reply' | 'renote' | 'quote' | 'mention'; @@ -216,6 +217,7 @@ export class NoteCreateService implements OnApplicationShutdown { private activeUsersChart: ActiveUsersChart, private instanceChart: InstanceChart, private utilityService: UtilityService, + private userBlockingService: UserBlockingService, ) { } @bindThis @@ -292,6 +294,18 @@ export class NoteCreateService implements OnApplicationShutdown { } } + // Check blocking + if (data.renote && data.text == null && data.poll == null && (data.files == null || data.files.length === 0)) { + if (data.renote.userHost === null) { + if (data.renote.userId !== user.id) { + const blocked = await this.userBlockingService.checkBlocked(data.renote.userId, user.id); + if (blocked) { + throw new Error('blocked'); + } + } + } + } + // 返信対象がpublicではないならhomeにする if (data.reply && data.reply.visibility !== 'public' && data.visibility === 'public') { data.visibility = 'home'; From 101e5d622d23b03c21d4ab60487ab21555a95ef1 Mon Sep 17 00:00:00 2001 From: syuilo Date: Sat, 21 Oct 2023 14:19:48 +0900 Subject: [PATCH 002/311] Update CHANGELOG.md --- CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 4b10c8d123..6171569604 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -12,7 +12,7 @@ --> -## 2023.x.x (unreleased) +## 2023.10.2 ### General - Feat: アンテナでローカルの投稿のみ収集できるようになりました From 2c0a139da60ddf33e82353acbb985230c71c78da Mon Sep 17 00:00:00 2001 From: syuilo Date: Sat, 21 Oct 2023 18:38:07 +0900 Subject: [PATCH 003/311] feat: Avatar decoration (#12096) * wip * Update ja-JP.yml * Update profile.vue * .js * Update home.test.ts --- locales/index.d.ts | 4 + locales/ja-JP.yml | 4 + .../1697847397844-avatar-decoration.js | 18 +++ .../src/core/AvatarDecorationService.ts | 129 ++++++++++++++++++ packages/backend/src/core/CoreModule.ts | 6 + .../backend/src/core/GlobalEventService.ts | 5 +- packages/backend/src/core/RoleService.ts | 6 + .../src/core/entities/UserEntityService.ts | 13 +- packages/backend/src/di-symbols.ts | 1 + .../backend/src/models/AvatarDecoration.ts | 39 ++++++ .../backend/src/models/RepositoryModule.ts | 10 +- packages/backend/src/models/User.ts | 5 + packages/backend/src/models/_.ts | 3 + .../backend/src/models/json-schema/user.ts | 20 +++ packages/backend/src/postgres.ts | 2 + .../backend/src/server/api/EndpointsModule.ts | 20 +++ packages/backend/src/server/api/endpoints.ts | 10 ++ .../admin/avatar-decorations/create.ts | 44 ++++++ .../admin/avatar-decorations/delete.ts | 39 ++++++ .../admin/avatar-decorations/list.ts | 101 ++++++++++++++ .../admin/avatar-decorations/update.ts | 50 +++++++ .../api/endpoints/get-avatar-decorations.ts | 79 +++++++++++ .../src/server/api/endpoints/i/update.ts | 16 +++ packages/backend/src/types.ts | 16 +++ packages/backend/test/e2e/users.ts | 2 + packages/frontend/.storybook/fakes.ts | 1 + .../src/components/global/MkAvatar.vue | 15 +- .../src/pages/admin/avatar-decorations.vue | 103 ++++++++++++++ packages/frontend/src/pages/admin/index.vue | 5 + .../src/pages/admin/modlog.ModLog.vue | 12 +- .../frontend/src/pages/settings/profile.vue | 55 ++++++++ packages/frontend/src/router.ts | 4 + packages/frontend/test/home.test.ts | 8 +- packages/frontend/test/note.test.ts | 4 +- packages/frontend/test/url-preview.test.ts | 4 +- packages/misskey-js/etc/misskey-js.api.md | 22 ++- packages/misskey-js/src/consts.ts | 16 +++ packages/misskey-js/src/entities.ts | 16 +++ 38 files changed, 888 insertions(+), 19 deletions(-) create mode 100644 packages/backend/migration/1697847397844-avatar-decoration.js create mode 100644 packages/backend/src/core/AvatarDecorationService.ts create mode 100644 packages/backend/src/models/AvatarDecoration.ts create mode 100644 packages/backend/src/server/api/endpoints/admin/avatar-decorations/create.ts create mode 100644 packages/backend/src/server/api/endpoints/admin/avatar-decorations/delete.ts create mode 100644 packages/backend/src/server/api/endpoints/admin/avatar-decorations/list.ts create mode 100644 packages/backend/src/server/api/endpoints/admin/avatar-decorations/update.ts create mode 100644 packages/backend/src/server/api/endpoints/get-avatar-decorations.ts create mode 100644 packages/frontend/src/pages/admin/avatar-decorations.vue diff --git a/locales/index.d.ts b/locales/index.d.ts index 363032eaa2..11be41235a 100644 --- a/locales/index.d.ts +++ b/locales/index.d.ts @@ -1142,6 +1142,7 @@ export interface Locale { "privacyPolicy": string; "privacyPolicyUrl": string; "tosAndPrivacyPolicy": string; + "avatarDecorations": string; "_announcement": { "forExistingUsers": string; "forExistingUsersDescription": string; @@ -2295,6 +2296,9 @@ export interface Locale { "createAd": string; "deleteAd": string; "updateAd": string; + "createAvatarDecoration": string; + "updateAvatarDecoration": string; + "deleteAvatarDecoration": string; }; "_fileViewer": { "title": string; diff --git a/locales/ja-JP.yml b/locales/ja-JP.yml index f1b57f8bde..11b0833928 100644 --- a/locales/ja-JP.yml +++ b/locales/ja-JP.yml @@ -1139,6 +1139,7 @@ impressumDescription: "ドイツなどの一部の国と地域では表示が義 privacyPolicy: "プライバシーポリシー" privacyPolicyUrl: "プライバシーポリシーURL" tosAndPrivacyPolicy: "利用規約・プライバシーポリシー" +avatarDecorations: "アイコンデコレーション" _announcement: forExistingUsers: "既存ユーザーのみ" @@ -2208,6 +2209,9 @@ _moderationLogTypes: createAd: "広告を作成" deleteAd: "広告を削除" updateAd: "広告を更新" + createAvatarDecoration: "アイコンデコレーションを作成" + updateAvatarDecoration: "アイコンデコレーションを更新" + deleteAvatarDecoration: "アイコンデコレーションを削除" _fileViewer: title: "ファイルの詳細" diff --git a/packages/backend/migration/1697847397844-avatar-decoration.js b/packages/backend/migration/1697847397844-avatar-decoration.js new file mode 100644 index 0000000000..1f22139746 --- /dev/null +++ b/packages/backend/migration/1697847397844-avatar-decoration.js @@ -0,0 +1,18 @@ +/* + * SPDX-FileCopyrightText: syuilo and other misskey contributors + * SPDX-License-Identifier: AGPL-3.0-only + */ + +export class AvatarDecoration1697847397844 { + name = 'AvatarDecoration1697847397844' + + async up(queryRunner) { + await queryRunner.query(`CREATE TABLE "avatar_decoration" ("id" character varying(32) NOT NULL, "updatedAt" TIMESTAMP WITH TIME ZONE, "url" character varying(1024) NOT NULL, "name" character varying(256) NOT NULL, "description" character varying(2048) NOT NULL, "roleIdsThatCanBeUsedThisDecoration" character varying(128) array NOT NULL DEFAULT '{}', CONSTRAINT "PK_b6de9296f6097078e1dc53f7603" PRIMARY KEY ("id"))`); + await queryRunner.query(`ALTER TABLE "user" ADD "avatarDecorations" character varying(512) array NOT NULL DEFAULT '{}'`); + } + + async down(queryRunner) { + await queryRunner.query(`ALTER TABLE "user" DROP COLUMN "avatarDecorations"`); + await queryRunner.query(`DROP TABLE "avatar_decoration"`); + } +} diff --git a/packages/backend/src/core/AvatarDecorationService.ts b/packages/backend/src/core/AvatarDecorationService.ts new file mode 100644 index 0000000000..e97946f9dc --- /dev/null +++ b/packages/backend/src/core/AvatarDecorationService.ts @@ -0,0 +1,129 @@ +/* + * SPDX-FileCopyrightText: syuilo and other misskey contributors + * SPDX-License-Identifier: AGPL-3.0-only + */ + +import { Inject, Injectable, OnApplicationShutdown } from '@nestjs/common'; +import * as Redis from 'ioredis'; +import type { AvatarDecorationsRepository, MiAvatarDecoration, MiUser } from '@/models/_.js'; +import { IdService } from '@/core/IdService.js'; +import { GlobalEventService } from '@/core/GlobalEventService.js'; +import { DI } from '@/di-symbols.js'; +import { bindThis } from '@/decorators.js'; +import { MemorySingleCache } from '@/misc/cache.js'; +import type { GlobalEvents } from '@/core/GlobalEventService.js'; +import { ModerationLogService } from '@/core/ModerationLogService.js'; + +@Injectable() +export class AvatarDecorationService implements OnApplicationShutdown { + public cache: MemorySingleCache; + + constructor( + @Inject(DI.redisForSub) + private redisForSub: Redis.Redis, + + @Inject(DI.avatarDecorationsRepository) + private avatarDecorationsRepository: AvatarDecorationsRepository, + + private idService: IdService, + private moderationLogService: ModerationLogService, + private globalEventService: GlobalEventService, + ) { + this.cache = new MemorySingleCache(1000 * 60 * 30); + + this.redisForSub.on('message', this.onMessage); + } + + @bindThis + private async onMessage(_: string, data: string): Promise { + const obj = JSON.parse(data); + + if (obj.channel === 'internal') { + const { type, body } = obj.message as GlobalEvents['internal']['payload']; + switch (type) { + case 'avatarDecorationCreated': + case 'avatarDecorationUpdated': + case 'avatarDecorationDeleted': { + this.cache.delete(); + break; + } + default: + break; + } + } + } + + @bindThis + public async create(options: Partial, moderator?: MiUser): Promise { + const created = await this.avatarDecorationsRepository.insert({ + id: this.idService.gen(), + ...options, + }).then(x => this.avatarDecorationsRepository.findOneByOrFail(x.identifiers[0])); + + this.globalEventService.publishInternalEvent('avatarDecorationCreated', created); + + if (moderator) { + this.moderationLogService.log(moderator, 'createAvatarDecoration', { + avatarDecorationId: created.id, + avatarDecoration: created, + }); + } + + return created; + } + + @bindThis + public async update(id: MiAvatarDecoration['id'], params: Partial, moderator?: MiUser): Promise { + const avatarDecoration = await this.avatarDecorationsRepository.findOneByOrFail({ id }); + + const date = new Date(); + await this.avatarDecorationsRepository.update(avatarDecoration.id, { + updatedAt: date, + ...params, + }); + + const updated = await this.avatarDecorationsRepository.findOneByOrFail({ id: avatarDecoration.id }); + this.globalEventService.publishInternalEvent('avatarDecorationUpdated', updated); + + if (moderator) { + this.moderationLogService.log(moderator, 'updateAvatarDecoration', { + avatarDecorationId: avatarDecoration.id, + before: avatarDecoration, + after: updated, + }); + } + } + + @bindThis + public async delete(id: MiAvatarDecoration['id'], moderator?: MiUser): Promise { + const avatarDecoration = await this.avatarDecorationsRepository.findOneByOrFail({ id }); + + await this.avatarDecorationsRepository.delete({ id: avatarDecoration.id }); + this.globalEventService.publishInternalEvent('avatarDecorationDeleted', avatarDecoration); + + if (moderator) { + this.moderationLogService.log(moderator, 'deleteAvatarDecoration', { + avatarDecorationId: avatarDecoration.id, + avatarDecoration: avatarDecoration, + }); + } + } + + @bindThis + public async getAll(noCache = false): Promise { + if (noCache) { + this.cache.delete(); + } + return this.cache.fetch(() => this.avatarDecorationsRepository.find()); + } + + @bindThis + public dispose(): void { + this.redisForSub.off('message', this.onMessage); + } + + @bindThis + public onApplicationShutdown(signal?: string | undefined): void { + this.dispose(); + } +} diff --git a/packages/backend/src/core/CoreModule.ts b/packages/backend/src/core/CoreModule.ts index e7e66646fc..b46afb1909 100644 --- a/packages/backend/src/core/CoreModule.ts +++ b/packages/backend/src/core/CoreModule.ts @@ -11,6 +11,7 @@ import { AnnouncementService } from './AnnouncementService.js'; import { AntennaService } from './AntennaService.js'; import { AppLockService } from './AppLockService.js'; import { AchievementService } from './AchievementService.js'; +import { AvatarDecorationService } from './AvatarDecorationService.js'; import { CaptchaService } from './CaptchaService.js'; import { CreateSystemUserService } from './CreateSystemUserService.js'; import { CustomEmojiService } from './CustomEmojiService.js'; @@ -140,6 +141,7 @@ const $AnnouncementService: Provider = { provide: 'AnnouncementService', useExis const $AntennaService: Provider = { provide: 'AntennaService', useExisting: AntennaService }; const $AppLockService: Provider = { provide: 'AppLockService', useExisting: AppLockService }; const $AchievementService: Provider = { provide: 'AchievementService', useExisting: AchievementService }; +const $AvatarDecorationService: Provider = { provide: 'AvatarDecorationService', useExisting: AvatarDecorationService }; const $CaptchaService: Provider = { provide: 'CaptchaService', useExisting: CaptchaService }; const $CreateSystemUserService: Provider = { provide: 'CreateSystemUserService', useExisting: CreateSystemUserService }; const $CustomEmojiService: Provider = { provide: 'CustomEmojiService', useExisting: CustomEmojiService }; @@ -273,6 +275,7 @@ const $ApQuestionService: Provider = { provide: 'ApQuestionService', useExisting AntennaService, AppLockService, AchievementService, + AvatarDecorationService, CaptchaService, CreateSystemUserService, CustomEmojiService, @@ -399,6 +402,7 @@ const $ApQuestionService: Provider = { provide: 'ApQuestionService', useExisting $AntennaService, $AppLockService, $AchievementService, + $AvatarDecorationService, $CaptchaService, $CreateSystemUserService, $CustomEmojiService, @@ -526,6 +530,7 @@ const $ApQuestionService: Provider = { provide: 'ApQuestionService', useExisting AntennaService, AppLockService, AchievementService, + AvatarDecorationService, CaptchaService, CreateSystemUserService, CustomEmojiService, @@ -651,6 +656,7 @@ const $ApQuestionService: Provider = { provide: 'ApQuestionService', useExisting $AntennaService, $AppLockService, $AchievementService, + $AvatarDecorationService, $CaptchaService, $CreateSystemUserService, $CustomEmojiService, diff --git a/packages/backend/src/core/GlobalEventService.ts b/packages/backend/src/core/GlobalEventService.ts index b74fbbe584..bfbdecf688 100644 --- a/packages/backend/src/core/GlobalEventService.ts +++ b/packages/backend/src/core/GlobalEventService.ts @@ -18,7 +18,7 @@ import type { MiSignin } from '@/models/Signin.js'; import type { MiPage } from '@/models/Page.js'; import type { MiWebhook } from '@/models/Webhook.js'; import type { MiMeta } from '@/models/Meta.js'; -import { MiRole, MiRoleAssignment } from '@/models/_.js'; +import { MiAvatarDecoration, MiRole, MiRoleAssignment } from '@/models/_.js'; import type { Packed } from '@/misc/json-schema.js'; import { DI } from '@/di-symbols.js'; import type { Config } from '@/config.js'; @@ -188,6 +188,9 @@ export interface InternalEventTypes { antennaCreated: MiAntenna; antennaDeleted: MiAntenna; antennaUpdated: MiAntenna; + avatarDecorationCreated: MiAvatarDecoration; + avatarDecorationDeleted: MiAvatarDecoration; + avatarDecorationUpdated: MiAvatarDecoration; metaUpdated: MiMeta; followChannel: { userId: MiUser['id']; channelId: MiChannel['id']; }; unfollowChannel: { userId: MiUser['id']; channelId: MiChannel['id']; }; diff --git a/packages/backend/src/core/RoleService.ts b/packages/backend/src/core/RoleService.ts index 2c2ff7af1d..ef05920d50 100644 --- a/packages/backend/src/core/RoleService.ts +++ b/packages/backend/src/core/RoleService.ts @@ -227,6 +227,12 @@ export class RoleService implements OnApplicationShutdown { } } + @bindThis + public async getRoles() { + const roles = await this.rolesCache.fetch(() => this.rolesRepository.findBy({})); + return roles; + } + @bindThis public async getUserAssigns(userId: MiUser['id']) { const now = Date.now(); diff --git a/packages/backend/src/core/entities/UserEntityService.ts b/packages/backend/src/core/entities/UserEntityService.ts index b0577fc1a0..66facce4c2 100644 --- a/packages/backend/src/core/entities/UserEntityService.ts +++ b/packages/backend/src/core/entities/UserEntityService.ts @@ -21,9 +21,10 @@ import { RoleService } from '@/core/RoleService.js'; import { ApPersonService } from '@/core/activitypub/models/ApPersonService.js'; import { FederatedInstanceService } from '@/core/FederatedInstanceService.js'; import { IdService } from '@/core/IdService.js'; +import type { AnnouncementService } from '@/core/AnnouncementService.js'; +import type { CustomEmojiService } from '@/core/CustomEmojiService.js'; +import { AvatarDecorationService } from '@/core/AvatarDecorationService.js'; import type { OnModuleInit } from '@nestjs/common'; -import type { AnnouncementService } from '../AnnouncementService.js'; -import type { CustomEmojiService } from '../CustomEmojiService.js'; import type { NoteEntityService } from './NoteEntityService.js'; import type { DriveFileEntityService } from './DriveFileEntityService.js'; import type { PageEntityService } from './PageEntityService.js'; @@ -62,6 +63,7 @@ export class UserEntityService implements OnModuleInit { private roleService: RoleService; private federatedInstanceService: FederatedInstanceService; private idService: IdService; + private avatarDecorationService: AvatarDecorationService; constructor( private moduleRef: ModuleRef, @@ -126,6 +128,7 @@ export class UserEntityService implements OnModuleInit { this.roleService = this.moduleRef.get('RoleService'); this.federatedInstanceService = this.moduleRef.get('FederatedInstanceService'); this.idService = this.moduleRef.get('IdService'); + this.avatarDecorationService = this.moduleRef.get('AvatarDecorationService'); } //#region Validators @@ -328,8 +331,6 @@ export class UserEntityService implements OnModuleInit { ...announcement, })) : null; - const falsy = opts.detail ? false : undefined; - const packed = { id: user.id, name: user.name, @@ -337,6 +338,10 @@ export class UserEntityService implements OnModuleInit { host: user.host, avatarUrl: user.avatarUrl ?? this.getIdenticonUrl(user), avatarBlurhash: user.avatarBlurhash, + avatarDecorations: user.avatarDecorations.length > 0 ? this.avatarDecorationService.getAll().then(decorations => decorations.filter(decoration => user.avatarDecorations.includes(decoration.id)).map(decoration => ({ + id: decoration.id, + url: decoration.url, + }))) : [], isBot: user.isBot, isCat: user.isCat, instance: user.host ? this.federatedInstanceService.federatedInstanceCache.fetch(user.host).then(instance => instance ? { diff --git a/packages/backend/src/di-symbols.ts b/packages/backend/src/di-symbols.ts index edcdd21d60..8411cb8229 100644 --- a/packages/backend/src/di-symbols.ts +++ b/packages/backend/src/di-symbols.ts @@ -18,6 +18,7 @@ export const DI = { announcementsRepository: Symbol('announcementsRepository'), announcementReadsRepository: Symbol('announcementReadsRepository'), appsRepository: Symbol('appsRepository'), + avatarDecorationsRepository: Symbol('avatarDecorationsRepository'), noteFavoritesRepository: Symbol('noteFavoritesRepository'), noteThreadMutingsRepository: Symbol('noteThreadMutingsRepository'), noteReactionsRepository: Symbol('noteReactionsRepository'), diff --git a/packages/backend/src/models/AvatarDecoration.ts b/packages/backend/src/models/AvatarDecoration.ts new file mode 100644 index 0000000000..08ebbdeac1 --- /dev/null +++ b/packages/backend/src/models/AvatarDecoration.ts @@ -0,0 +1,39 @@ +/* + * SPDX-FileCopyrightText: syuilo and other misskey contributors + * SPDX-License-Identifier: AGPL-3.0-only + */ + +import { Entity, PrimaryColumn, Index, Column, ManyToOne, JoinColumn } from 'typeorm'; +import { id } from './util/id.js'; + +@Entity('avatar_decoration') +export class MiAvatarDecoration { + @PrimaryColumn(id()) + public id: string; + + @Column('timestamp with time zone', { + nullable: true, + }) + public updatedAt: Date | null; + + @Column('varchar', { + length: 1024, + }) + public url: string; + + @Column('varchar', { + length: 256, + }) + public name: string; + + @Column('varchar', { + length: 2048, + }) + public description: string; + + // TODO: 定期ジョブで存在しなくなったロールIDを除去するようにする + @Column('varchar', { + array: true, length: 128, default: '{}', + }) + public roleIdsThatCanBeUsedThisDecoration: string[]; +} diff --git a/packages/backend/src/models/RepositoryModule.ts b/packages/backend/src/models/RepositoryModule.ts index 9efd6841b1..866fdfe6d4 100644 --- a/packages/backend/src/models/RepositoryModule.ts +++ b/packages/backend/src/models/RepositoryModule.ts @@ -5,7 +5,7 @@ import { Module } from '@nestjs/common'; import { DI } from '@/di-symbols.js'; -import { MiAbuseUserReport, MiAccessToken, MiAd, MiAnnouncement, MiAnnouncementRead, MiAntenna, MiApp, MiAuthSession, MiBlocking, MiChannel, MiChannelFavorite, MiChannelFollowing, MiClip, MiClipFavorite, MiClipNote, MiDriveFile, MiDriveFolder, MiEmoji, MiFlash, MiFlashLike, MiFollowRequest, MiFollowing, MiGalleryLike, MiGalleryPost, MiHashtag, MiInstance, MiMeta, MiModerationLog, MiMuting, MiNote, MiNoteFavorite, MiNoteReaction, MiNoteThreadMuting, MiNoteUnread, MiPage, MiPageLike, MiPasswordResetRequest, MiPoll, MiPollVote, MiPromoNote, MiPromoRead, MiRegistrationTicket, MiRegistryItem, MiRelay, MiRenoteMuting, MiRetentionAggregation, MiRole, MiRoleAssignment, MiSignin, MiSwSubscription, MiUsedUsername, MiUser, MiUserIp, MiUserKeypair, MiUserList, MiUserListFavorite, MiUserListMembership, MiUserMemo, MiUserNotePining, MiUserPending, MiUserProfile, MiUserPublickey, MiUserSecurityKey, MiWebhook } from './_.js'; +import { MiAbuseUserReport, MiAccessToken, MiAd, MiAnnouncement, MiAnnouncementRead, MiAntenna, MiApp, MiAuthSession, MiAvatarDecoration, MiBlocking, MiChannel, MiChannelFavorite, MiChannelFollowing, MiClip, MiClipFavorite, MiClipNote, MiDriveFile, MiDriveFolder, MiEmoji, MiFlash, MiFlashLike, MiFollowRequest, MiFollowing, MiGalleryLike, MiGalleryPost, MiHashtag, MiInstance, MiMeta, MiModerationLog, MiMuting, MiNote, MiNoteFavorite, MiNoteReaction, MiNoteThreadMuting, MiNoteUnread, MiPage, MiPageLike, MiPasswordResetRequest, MiPoll, MiPollVote, MiPromoNote, MiPromoRead, MiRegistrationTicket, MiRegistryItem, MiRelay, MiRenoteMuting, MiRetentionAggregation, MiRole, MiRoleAssignment, MiSignin, MiSwSubscription, MiUsedUsername, MiUser, MiUserIp, MiUserKeypair, MiUserList, MiUserListFavorite, MiUserListMembership, MiUserMemo, MiUserNotePining, MiUserPending, MiUserProfile, MiUserPublickey, MiUserSecurityKey, MiWebhook } from './_.js'; import type { DataSource } from 'typeorm'; import type { Provider } from '@nestjs/common'; @@ -39,6 +39,12 @@ const $appsRepository: Provider = { inject: [DI.db], }; +const $avatarDecorationsRepository: Provider = { + provide: DI.avatarDecorationsRepository, + useFactory: (db: DataSource) => db.getRepository(MiAvatarDecoration), + inject: [DI.db], +}; + const $noteFavoritesRepository: Provider = { provide: DI.noteFavoritesRepository, useFactory: (db: DataSource) => db.getRepository(MiNoteFavorite), @@ -402,6 +408,7 @@ const $userMemosRepository: Provider = { $announcementsRepository, $announcementReadsRepository, $appsRepository, + $avatarDecorationsRepository, $noteFavoritesRepository, $noteThreadMutingsRepository, $noteReactionsRepository, @@ -468,6 +475,7 @@ const $userMemosRepository: Provider = { $announcementsRepository, $announcementReadsRepository, $appsRepository, + $avatarDecorationsRepository, $noteFavoritesRepository, $noteThreadMutingsRepository, $noteReactionsRepository, diff --git a/packages/backend/src/models/User.ts b/packages/backend/src/models/User.ts index 796d7c8356..c98426a7b6 100644 --- a/packages/backend/src/models/User.ts +++ b/packages/backend/src/models/User.ts @@ -138,6 +138,11 @@ export class MiUser { }) public bannerBlurhash: string | null; + @Column('varchar', { + length: 512, array: true, default: '{}', + }) + public avatarDecorations: string[]; + @Index() @Column('varchar', { length: 128, array: true, default: '{}', diff --git a/packages/backend/src/models/_.ts b/packages/backend/src/models/_.ts index f974f95ed8..d7c327f164 100644 --- a/packages/backend/src/models/_.ts +++ b/packages/backend/src/models/_.ts @@ -10,6 +10,7 @@ import { MiAnnouncement } from '@/models/Announcement.js'; import { MiAnnouncementRead } from '@/models/AnnouncementRead.js'; import { MiAntenna } from '@/models/Antenna.js'; import { MiApp } from '@/models/App.js'; +import { MiAvatarDecoration } from '@/models/AvatarDecoration.js'; import { MiAuthSession } from '@/models/AuthSession.js'; import { MiBlocking } from '@/models/Blocking.js'; import { MiChannelFollowing } from '@/models/ChannelFollowing.js'; @@ -77,6 +78,7 @@ export { MiAnnouncementRead, MiAntenna, MiApp, + MiAvatarDecoration, MiAuthSession, MiBlocking, MiChannelFollowing, @@ -143,6 +145,7 @@ export type AnnouncementsRepository = Repository; export type AnnouncementReadsRepository = Repository; export type AntennasRepository = Repository; export type AppsRepository = Repository; +export type AvatarDecorationsRepository = Repository; export type AuthSessionsRepository = Repository; export type BlockingsRepository = Repository; export type ChannelFollowingsRepository = Repository; diff --git a/packages/backend/src/models/json-schema/user.ts b/packages/backend/src/models/json-schema/user.ts index 57d2d976ff..bf283fbeb2 100644 --- a/packages/backend/src/models/json-schema/user.ts +++ b/packages/backend/src/models/json-schema/user.ts @@ -37,6 +37,26 @@ export const packedUserLiteSchema = { type: 'string', nullable: true, optional: false, }, + avatarDecorations: { + type: 'array', + nullable: false, optional: false, + items: { + type: 'object', + nullable: false, optional: false, + properties: { + id: { + type: 'string', + nullable: false, optional: false, + format: 'id', + }, + url: { + type: 'string', + format: 'url', + nullable: false, optional: false, + }, + }, + }, + }, isAdmin: { type: 'boolean', nullable: false, optional: true, diff --git a/packages/backend/src/postgres.ts b/packages/backend/src/postgres.ts index d4c6ad82ce..cd611839a4 100644 --- a/packages/backend/src/postgres.ts +++ b/packages/backend/src/postgres.ts @@ -18,6 +18,7 @@ import { MiAnnouncement } from '@/models/Announcement.js'; import { MiAnnouncementRead } from '@/models/AnnouncementRead.js'; import { MiAntenna } from '@/models/Antenna.js'; import { MiApp } from '@/models/App.js'; +import { MiAvatarDecoration } from '@/models/AvatarDecoration.js'; import { MiAuthSession } from '@/models/AuthSession.js'; import { MiBlocking } from '@/models/Blocking.js'; import { MiChannelFollowing } from '@/models/ChannelFollowing.js'; @@ -129,6 +130,7 @@ export const entities = [ MiMeta, MiInstance, MiApp, + MiAvatarDecoration, MiAuthSession, MiAccessToken, MiUser, diff --git a/packages/backend/src/server/api/EndpointsModule.ts b/packages/backend/src/server/api/EndpointsModule.ts index f834561456..f234a2637d 100644 --- a/packages/backend/src/server/api/EndpointsModule.ts +++ b/packages/backend/src/server/api/EndpointsModule.ts @@ -18,6 +18,10 @@ import * as ep___admin_announcements_create from './endpoints/admin/announcement import * as ep___admin_announcements_delete from './endpoints/admin/announcements/delete.js'; import * as ep___admin_announcements_list from './endpoints/admin/announcements/list.js'; import * as ep___admin_announcements_update from './endpoints/admin/announcements/update.js'; +import * as ep___admin_avatarDecorations_create from './endpoints/admin/avatar-decorations/create.js'; +import * as ep___admin_avatarDecorations_delete from './endpoints/admin/avatar-decorations/delete.js'; +import * as ep___admin_avatarDecorations_list from './endpoints/admin/avatar-decorations/list.js'; +import * as ep___admin_avatarDecorations_update from './endpoints/admin/avatar-decorations/update.js'; import * as ep___admin_deleteAllFilesOfAUser from './endpoints/admin/delete-all-files-of-a-user.js'; import * as ep___admin_drive_cleanRemoteFiles from './endpoints/admin/drive/clean-remote-files.js'; import * as ep___admin_drive_cleanup from './endpoints/admin/drive/cleanup.js'; @@ -176,6 +180,7 @@ import * as ep___gallery_posts_show from './endpoints/gallery/posts/show.js'; import * as ep___gallery_posts_unlike from './endpoints/gallery/posts/unlike.js'; import * as ep___gallery_posts_update from './endpoints/gallery/posts/update.js'; import * as ep___getOnlineUsersCount from './endpoints/get-online-users-count.js'; +import * as ep___getAvatarDecorations from './endpoints/get-avatar-decorations.js'; import * as ep___hashtags_list from './endpoints/hashtags/list.js'; import * as ep___hashtags_search from './endpoints/hashtags/search.js'; import * as ep___hashtags_show from './endpoints/hashtags/show.js'; @@ -368,6 +373,10 @@ const $admin_announcements_create: Provider = { provide: 'ep:admin/announcements const $admin_announcements_delete: Provider = { provide: 'ep:admin/announcements/delete', useClass: ep___admin_announcements_delete.default }; const $admin_announcements_list: Provider = { provide: 'ep:admin/announcements/list', useClass: ep___admin_announcements_list.default }; const $admin_announcements_update: Provider = { provide: 'ep:admin/announcements/update', useClass: ep___admin_announcements_update.default }; +const $admin_avatarDecorations_create: Provider = { provide: 'ep:admin/avatar-decorations/create', useClass: ep___admin_avatarDecorations_create.default }; +const $admin_avatarDecorations_delete: Provider = { provide: 'ep:admin/avatar-decorations/delete', useClass: ep___admin_avatarDecorations_delete.default }; +const $admin_avatarDecorations_list: Provider = { provide: 'ep:admin/avatar-decorations/list', useClass: ep___admin_avatarDecorations_list.default }; +const $admin_avatarDecorations_update: Provider = { provide: 'ep:admin/avatar-decorations/update', useClass: ep___admin_avatarDecorations_update.default }; const $admin_deleteAllFilesOfAUser: Provider = { provide: 'ep:admin/delete-all-files-of-a-user', useClass: ep___admin_deleteAllFilesOfAUser.default }; const $admin_drive_cleanRemoteFiles: Provider = { provide: 'ep:admin/drive/clean-remote-files', useClass: ep___admin_drive_cleanRemoteFiles.default }; const $admin_drive_cleanup: Provider = { provide: 'ep:admin/drive/cleanup', useClass: ep___admin_drive_cleanup.default }; @@ -526,6 +535,7 @@ const $gallery_posts_show: Provider = { provide: 'ep:gallery/posts/show', useCla const $gallery_posts_unlike: Provider = { provide: 'ep:gallery/posts/unlike', useClass: ep___gallery_posts_unlike.default }; const $gallery_posts_update: Provider = { provide: 'ep:gallery/posts/update', useClass: ep___gallery_posts_update.default }; const $getOnlineUsersCount: Provider = { provide: 'ep:get-online-users-count', useClass: ep___getOnlineUsersCount.default }; +const $getAvatarDecorations: Provider = { provide: 'ep:get-avatar-decorations', useClass: ep___getAvatarDecorations.default }; const $hashtags_list: Provider = { provide: 'ep:hashtags/list', useClass: ep___hashtags_list.default }; const $hashtags_search: Provider = { provide: 'ep:hashtags/search', useClass: ep___hashtags_search.default }; const $hashtags_show: Provider = { provide: 'ep:hashtags/show', useClass: ep___hashtags_show.default }; @@ -722,6 +732,10 @@ const $retention: Provider = { provide: 'ep:retention', useClass: ep___retention $admin_announcements_delete, $admin_announcements_list, $admin_announcements_update, + $admin_avatarDecorations_create, + $admin_avatarDecorations_delete, + $admin_avatarDecorations_list, + $admin_avatarDecorations_update, $admin_deleteAllFilesOfAUser, $admin_drive_cleanRemoteFiles, $admin_drive_cleanup, @@ -880,6 +894,7 @@ const $retention: Provider = { provide: 'ep:retention', useClass: ep___retention $gallery_posts_unlike, $gallery_posts_update, $getOnlineUsersCount, + $getAvatarDecorations, $hashtags_list, $hashtags_search, $hashtags_show, @@ -1070,6 +1085,10 @@ const $retention: Provider = { provide: 'ep:retention', useClass: ep___retention $admin_announcements_delete, $admin_announcements_list, $admin_announcements_update, + $admin_avatarDecorations_create, + $admin_avatarDecorations_delete, + $admin_avatarDecorations_list, + $admin_avatarDecorations_update, $admin_deleteAllFilesOfAUser, $admin_drive_cleanRemoteFiles, $admin_drive_cleanup, @@ -1228,6 +1247,7 @@ const $retention: Provider = { provide: 'ep:retention', useClass: ep___retention $gallery_posts_unlike, $gallery_posts_update, $getOnlineUsersCount, + $getAvatarDecorations, $hashtags_list, $hashtags_search, $hashtags_show, diff --git a/packages/backend/src/server/api/endpoints.ts b/packages/backend/src/server/api/endpoints.ts index d12a035afa..8d34edca9d 100644 --- a/packages/backend/src/server/api/endpoints.ts +++ b/packages/backend/src/server/api/endpoints.ts @@ -18,6 +18,10 @@ import * as ep___admin_announcements_create from './endpoints/admin/announcement import * as ep___admin_announcements_delete from './endpoints/admin/announcements/delete.js'; import * as ep___admin_announcements_list from './endpoints/admin/announcements/list.js'; import * as ep___admin_announcements_update from './endpoints/admin/announcements/update.js'; +import * as ep___admin_avatarDecorations_create from './endpoints/admin/avatar-decorations/create.js'; +import * as ep___admin_avatarDecorations_delete from './endpoints/admin/avatar-decorations/delete.js'; +import * as ep___admin_avatarDecorations_list from './endpoints/admin/avatar-decorations/list.js'; +import * as ep___admin_avatarDecorations_update from './endpoints/admin/avatar-decorations/update.js'; import * as ep___admin_deleteAllFilesOfAUser from './endpoints/admin/delete-all-files-of-a-user.js'; import * as ep___admin_drive_cleanRemoteFiles from './endpoints/admin/drive/clean-remote-files.js'; import * as ep___admin_drive_cleanup from './endpoints/admin/drive/cleanup.js'; @@ -176,6 +180,7 @@ import * as ep___gallery_posts_show from './endpoints/gallery/posts/show.js'; import * as ep___gallery_posts_unlike from './endpoints/gallery/posts/unlike.js'; import * as ep___gallery_posts_update from './endpoints/gallery/posts/update.js'; import * as ep___getOnlineUsersCount from './endpoints/get-online-users-count.js'; +import * as ep___getAvatarDecorations from './endpoints/get-avatar-decorations.js'; import * as ep___hashtags_list from './endpoints/hashtags/list.js'; import * as ep___hashtags_search from './endpoints/hashtags/search.js'; import * as ep___hashtags_show from './endpoints/hashtags/show.js'; @@ -366,6 +371,10 @@ const eps = [ ['admin/announcements/delete', ep___admin_announcements_delete], ['admin/announcements/list', ep___admin_announcements_list], ['admin/announcements/update', ep___admin_announcements_update], + ['admin/avatar-decorations/create', ep___admin_avatarDecorations_create], + ['admin/avatar-decorations/delete', ep___admin_avatarDecorations_delete], + ['admin/avatar-decorations/list', ep___admin_avatarDecorations_list], + ['admin/avatar-decorations/update', ep___admin_avatarDecorations_update], ['admin/delete-all-files-of-a-user', ep___admin_deleteAllFilesOfAUser], ['admin/drive/clean-remote-files', ep___admin_drive_cleanRemoteFiles], ['admin/drive/cleanup', ep___admin_drive_cleanup], @@ -524,6 +533,7 @@ const eps = [ ['gallery/posts/unlike', ep___gallery_posts_unlike], ['gallery/posts/update', ep___gallery_posts_update], ['get-online-users-count', ep___getOnlineUsersCount], + ['get-avatar-decorations', ep___getAvatarDecorations], ['hashtags/list', ep___hashtags_list], ['hashtags/search', ep___hashtags_search], ['hashtags/show', ep___hashtags_show], diff --git a/packages/backend/src/server/api/endpoints/admin/avatar-decorations/create.ts b/packages/backend/src/server/api/endpoints/admin/avatar-decorations/create.ts new file mode 100644 index 0000000000..c1869b141a --- /dev/null +++ b/packages/backend/src/server/api/endpoints/admin/avatar-decorations/create.ts @@ -0,0 +1,44 @@ +/* + * SPDX-FileCopyrightText: syuilo and other misskey contributors + * SPDX-License-Identifier: AGPL-3.0-only + */ + +import { Injectable } from '@nestjs/common'; +import { Endpoint } from '@/server/api/endpoint-base.js'; +import { AvatarDecorationService } from '@/core/AvatarDecorationService.js'; + +export const meta = { + tags: ['admin'], + + requireCredential: true, + requireModerator: true, +} as const; + +export const paramDef = { + type: 'object', + properties: { + name: { type: 'string', minLength: 1 }, + description: { type: 'string' }, + url: { type: 'string', minLength: 1 }, + roleIdsThatCanBeUsedThisDecoration: { type: 'array', items: { + type: 'string', + } }, + }, + required: ['name', 'description', 'url'], +} as const; + +@Injectable() +export default class extends Endpoint { // eslint-disable-line import/no-default-export + constructor( + private avatarDecorationService: AvatarDecorationService, + ) { + super(meta, paramDef, async (ps, me) => { + await this.avatarDecorationService.create({ + name: ps.name, + description: ps.description, + url: ps.url, + roleIdsThatCanBeUsedThisDecoration: ps.roleIdsThatCanBeUsedThisDecoration, + }, me); + }); + } +} diff --git a/packages/backend/src/server/api/endpoints/admin/avatar-decorations/delete.ts b/packages/backend/src/server/api/endpoints/admin/avatar-decorations/delete.ts new file mode 100644 index 0000000000..5aba24b426 --- /dev/null +++ b/packages/backend/src/server/api/endpoints/admin/avatar-decorations/delete.ts @@ -0,0 +1,39 @@ +/* + * SPDX-FileCopyrightText: syuilo and other misskey contributors + * SPDX-License-Identifier: AGPL-3.0-only + */ + +import { Inject, Injectable } from '@nestjs/common'; +import { Endpoint } from '@/server/api/endpoint-base.js'; +import { DI } from '@/di-symbols.js'; +import { AvatarDecorationService } from '@/core/AvatarDecorationService.js'; +import { ApiError } from '../../../error.js'; + +export const meta = { + tags: ['admin'], + + requireCredential: true, + requireModerator: true, + + errors: { + }, +} as const; + +export const paramDef = { + type: 'object', + properties: { + id: { type: 'string', format: 'misskey:id' }, + }, + required: ['id'], +} as const; + +@Injectable() +export default class extends Endpoint { // eslint-disable-line import/no-default-export + constructor( + private avatarDecorationService: AvatarDecorationService, + ) { + super(meta, paramDef, async (ps, me) => { + await this.avatarDecorationService.delete(ps.id, me); + }); + } +} diff --git a/packages/backend/src/server/api/endpoints/admin/avatar-decorations/list.ts b/packages/backend/src/server/api/endpoints/admin/avatar-decorations/list.ts new file mode 100644 index 0000000000..9a32a59081 --- /dev/null +++ b/packages/backend/src/server/api/endpoints/admin/avatar-decorations/list.ts @@ -0,0 +1,101 @@ +/* + * SPDX-FileCopyrightText: syuilo and other misskey contributors + * SPDX-License-Identifier: AGPL-3.0-only + */ + +import { Inject, Injectable } from '@nestjs/common'; +import type { AnnouncementsRepository, AnnouncementReadsRepository } from '@/models/_.js'; +import type { MiAnnouncement } from '@/models/Announcement.js'; +import { Endpoint } from '@/server/api/endpoint-base.js'; +import { QueryService } from '@/core/QueryService.js'; +import { DI } from '@/di-symbols.js'; +import { IdService } from '@/core/IdService.js'; +import { AvatarDecorationService } from '@/core/AvatarDecorationService.js'; + +export const meta = { + tags: ['admin'], + + requireCredential: true, + requireModerator: true, + + res: { + type: 'array', + optional: false, nullable: false, + items: { + type: 'object', + optional: false, nullable: false, + properties: { + id: { + type: 'string', + optional: false, nullable: false, + format: 'id', + example: 'xxxxxxxxxx', + }, + createdAt: { + type: 'string', + optional: false, nullable: false, + format: 'date-time', + }, + updatedAt: { + type: 'string', + optional: false, nullable: true, + format: 'date-time', + }, + name: { + type: 'string', + optional: false, nullable: false, + }, + description: { + type: 'string', + optional: false, nullable: false, + }, + url: { + type: 'string', + optional: false, nullable: false, + }, + roleIdsThatCanBeUsedThisDecoration: { + type: 'array', + optional: false, nullable: false, + items: { + type: 'string', + optional: false, nullable: false, + format: 'id', + }, + }, + }, + }, + }, +} as const; + +export const paramDef = { + type: 'object', + properties: { + limit: { type: 'integer', minimum: 1, maximum: 100, default: 10 }, + sinceId: { type: 'string', format: 'misskey:id' }, + untilId: { type: 'string', format: 'misskey:id' }, + userId: { type: 'string', format: 'misskey:id', nullable: true }, + }, + required: [], +} as const; + +@Injectable() +export default class extends Endpoint { // eslint-disable-line import/no-default-export + constructor( + private avatarDecorationService: AvatarDecorationService, + private idService: IdService, + ) { + super(meta, paramDef, async (ps, me) => { + const avatarDecorations = await this.avatarDecorationService.getAll(true); + + return avatarDecorations.map(avatarDecoration => ({ + id: avatarDecoration.id, + createdAt: this.idService.parse(avatarDecoration.id).date.toISOString(), + updatedAt: avatarDecoration.updatedAt?.toISOString() ?? null, + name: avatarDecoration.name, + description: avatarDecoration.description, + url: avatarDecoration.url, + roleIdsThatCanBeUsedThisDecoration: avatarDecoration.roleIdsThatCanBeUsedThisDecoration, + })); + }); + } +} diff --git a/packages/backend/src/server/api/endpoints/admin/avatar-decorations/update.ts b/packages/backend/src/server/api/endpoints/admin/avatar-decorations/update.ts new file mode 100644 index 0000000000..564014a3df --- /dev/null +++ b/packages/backend/src/server/api/endpoints/admin/avatar-decorations/update.ts @@ -0,0 +1,50 @@ +/* + * SPDX-FileCopyrightText: syuilo and other misskey contributors + * SPDX-License-Identifier: AGPL-3.0-only + */ + +import { Inject, Injectable } from '@nestjs/common'; +import { Endpoint } from '@/server/api/endpoint-base.js'; +import { DI } from '@/di-symbols.js'; +import { AvatarDecorationService } from '@/core/AvatarDecorationService.js'; +import { ApiError } from '../../../error.js'; + +export const meta = { + tags: ['admin'], + + requireCredential: true, + requireModerator: true, + + errors: { + }, +} as const; + +export const paramDef = { + type: 'object', + properties: { + id: { type: 'string', format: 'misskey:id' }, + name: { type: 'string', minLength: 1 }, + description: { type: 'string' }, + url: { type: 'string', minLength: 1 }, + roleIdsThatCanBeUsedThisDecoration: { type: 'array', items: { + type: 'string', + } }, + }, + required: ['id'], +} as const; + +@Injectable() +export default class extends Endpoint { // eslint-disable-line import/no-default-export + constructor( + private avatarDecorationService: AvatarDecorationService, + ) { + super(meta, paramDef, async (ps, me) => { + await this.avatarDecorationService.update(ps.id, { + name: ps.name, + description: ps.description, + url: ps.url, + roleIdsThatCanBeUsedThisDecoration: ps.roleIdsThatCanBeUsedThisDecoration, + }, me); + }); + } +} diff --git a/packages/backend/src/server/api/endpoints/get-avatar-decorations.ts b/packages/backend/src/server/api/endpoints/get-avatar-decorations.ts new file mode 100644 index 0000000000..ec602a0dc5 --- /dev/null +++ b/packages/backend/src/server/api/endpoints/get-avatar-decorations.ts @@ -0,0 +1,79 @@ +/* + * SPDX-FileCopyrightText: syuilo and other misskey contributors + * SPDX-License-Identifier: AGPL-3.0-only + */ + +import { IsNull } from 'typeorm'; +import { Inject, Injectable } from '@nestjs/common'; +import { Endpoint } from '@/server/api/endpoint-base.js'; +import { DI } from '@/di-symbols.js'; +import { AvatarDecorationService } from '@/core/AvatarDecorationService.js'; + +export const meta = { + tags: ['users'], + + requireCredential: false, + + res: { + type: 'array', + optional: false, nullable: false, + items: { + type: 'object', + optional: false, nullable: false, + properties: { + id: { + type: 'string', + optional: false, nullable: false, + format: 'id', + example: 'xxxxxxxxxx', + }, + name: { + type: 'string', + optional: false, nullable: false, + }, + description: { + type: 'string', + optional: false, nullable: false, + }, + url: { + type: 'string', + optional: false, nullable: false, + }, + roleIdsThatCanBeUsedThisDecoration: { + type: 'array', + optional: false, nullable: false, + items: { + type: 'string', + optional: false, nullable: false, + format: 'id', + }, + }, + }, + }, + }, +} as const; + +export const paramDef = { + type: 'object', + properties: {}, + required: [], +} as const; + +@Injectable() +export default class extends Endpoint { // eslint-disable-line import/no-default-export + constructor( + private avatarDecorationService: AvatarDecorationService, + ) { + super(meta, paramDef, async (ps, me) => { + const decorations = await this.avatarDecorationService.getAll(true); + + return decorations.map(decoration => ({ + id: decoration.id, + name: decoration.name, + description: decoration.description, + url: decoration.url, + roleIdsThatCanBeUsedThisDecoration: decoration.roleIdsThatCanBeUsedThisDecoration, + })); + }); + } +} diff --git a/packages/backend/src/server/api/endpoints/i/update.ts b/packages/backend/src/server/api/endpoints/i/update.ts index 431bb4c60a..f1837e7082 100644 --- a/packages/backend/src/server/api/endpoints/i/update.ts +++ b/packages/backend/src/server/api/endpoints/i/update.ts @@ -32,6 +32,7 @@ import { DriveFileEntityService } from '@/core/entities/DriveFileEntityService.j import { HttpRequestService } from '@/core/HttpRequestService.js'; import type { Config } from '@/config.js'; import { safeForSql } from '@/misc/safe-for-sql.js'; +import { AvatarDecorationService } from '@/core/AvatarDecorationService.js'; import { ApiLoggerService } from '../../ApiLoggerService.js'; import { ApiError } from '../../error.js'; @@ -131,6 +132,9 @@ export const paramDef = { birthday: { ...birthdaySchema, nullable: true }, lang: { type: 'string', enum: [null, ...Object.keys(langmap)] as string[], nullable: true }, avatarId: { type: 'string', format: 'misskey:id', nullable: true }, + avatarDecorations: { type: 'array', maxItems: 1, items: { + type: 'string', + } }, bannerId: { type: 'string', format: 'misskey:id', nullable: true }, fields: { type: 'array', @@ -207,6 +211,7 @@ export default class extends Endpoint { // eslint- private roleService: RoleService, private cacheService: CacheService, private httpRequestService: HttpRequestService, + private avatarDecorationService: AvatarDecorationService, ) { super(meta, paramDef, async (ps, _user, token) => { const user = await this.usersRepository.findOneByOrFail({ id: _user.id }) as MiLocalUser; @@ -296,6 +301,17 @@ export default class extends Endpoint { // eslint- updates.bannerBlurhash = null; } + if (ps.avatarDecorations) { + const decorations = await this.avatarDecorationService.getAll(true); + const myRoles = await this.roleService.getUserRoles(user.id); + const allRoles = await this.roleService.getRoles(); + const decorationIds = decorations + .filter(d => d.roleIdsThatCanBeUsedThisDecoration.filter(roleId => allRoles.some(r => r.id === roleId)).length === 0 || myRoles.some(r => d.roleIdsThatCanBeUsedThisDecoration.includes(r.id))) + .map(d => d.id); + + updates.avatarDecorations = ps.avatarDecorations.filter(id => decorationIds.includes(id)); + } + if (ps.pinnedPageId) { const page = await this.pagesRepository.findOneBy({ id: ps.pinnedPageId }); diff --git a/packages/backend/src/types.ts b/packages/backend/src/types.ts index 316073c992..69224360b3 100644 --- a/packages/backend/src/types.ts +++ b/packages/backend/src/types.ts @@ -60,6 +60,9 @@ export const moderationLogTypes = [ 'createAd', 'updateAd', 'deleteAd', + 'createAvatarDecoration', + 'updateAvatarDecoration', + 'deleteAvatarDecoration', ] as const; export type ModerationLogPayloads = { @@ -221,6 +224,19 @@ export type ModerationLogPayloads = { adId: string; ad: any; }; + createAvatarDecoration: { + avatarDecorationId: string; + avatarDecoration: any; + }; + updateAvatarDecoration: { + avatarDecorationId: string; + before: any; + after: any; + }; + deleteAvatarDecoration: { + avatarDecorationId: string; + avatarDecoration: any; + }; }; export type Serialized = { diff --git a/packages/backend/test/e2e/users.ts b/packages/backend/test/e2e/users.ts index 53db1ac28a..520d9b14e4 100644 --- a/packages/backend/test/e2e/users.ts +++ b/packages/backend/test/e2e/users.ts @@ -68,6 +68,7 @@ describe('ユーザー', () => { host: user.host, avatarUrl: user.avatarUrl, avatarBlurhash: user.avatarBlurhash, + avatarDecorations: user.avatarDecorations, isBot: user.isBot, isCat: user.isCat, instance: user.instance, @@ -349,6 +350,7 @@ describe('ユーザー', () => { assert.strictEqual(response.host, null); assert.match(response.avatarUrl, /^[-a-zA-Z0-9@:%._\+~#&?=\/]+$/); assert.strictEqual(response.avatarBlurhash, null); + assert.deepStrictEqual(response.avatarDecorations, []); assert.strictEqual(response.isBot, false); assert.strictEqual(response.isCat, false); assert.strictEqual(response.instance, undefined); diff --git a/packages/frontend/.storybook/fakes.ts b/packages/frontend/.storybook/fakes.ts index 811c243926..c2e6ee52f3 100644 --- a/packages/frontend/.storybook/fakes.ts +++ b/packages/frontend/.storybook/fakes.ts @@ -74,6 +74,7 @@ export function userDetailed(id = 'someuserid', username = 'miskist', host = 'mi onlineStatus: 'unknown', avatarUrl: 'https://github.com/misskey-dev/misskey/blob/master/packages/frontend/assets/about-icon.png?raw=true', avatarBlurhash: 'eQFRshof5NWBRi},juayfPju53WB?0ofs;s*a{ofjuay^SoMEJR%ay', + avatarDecorations: [], emojis: [], bannerBlurhash: 'eQA^IW^-MH8w9tE8I=S^o{$*R4RikXtSxutRozjEnNR.RQadoyozog', bannerColor: '#000000', diff --git a/packages/frontend/src/components/global/MkAvatar.vue b/packages/frontend/src/components/global/MkAvatar.vue index 27c25b9490..de684425a2 100644 --- a/packages/frontend/src/components/global/MkAvatar.vue +++ b/packages/frontend/src/components/global/MkAvatar.vue @@ -5,7 +5,7 @@ SPDX-License-Identifier: AGPL-3.0-only @@ -47,6 +48,7 @@ const props = withDefaults(defineProps<{ link?: boolean; preview?: boolean; indicator?: boolean; + decoration?: string; }>(), { target: null, link: false, @@ -134,7 +136,7 @@ watch(() => props.user.avatarBlurhash, () => { .indicator { position: absolute; - z-index: 1; + z-index: 2; bottom: 0; left: 0; width: 20%; @@ -278,4 +280,13 @@ watch(() => props.user.avatarBlurhash, () => { } } } + +.decoration { + position: absolute; + z-index: 1; + top: -50%; + left: -50%; + width: 200%; + pointer-events: none; +} diff --git a/packages/frontend/src/pages/admin/avatar-decorations.vue b/packages/frontend/src/pages/admin/avatar-decorations.vue new file mode 100644 index 0000000000..b4007e6d20 --- /dev/null +++ b/packages/frontend/src/pages/admin/avatar-decorations.vue @@ -0,0 +1,103 @@ + + + + + diff --git a/packages/frontend/src/pages/admin/index.vue b/packages/frontend/src/pages/admin/index.vue index a508c20cf3..b304edbf57 100644 --- a/packages/frontend/src/pages/admin/index.vue +++ b/packages/frontend/src/pages/admin/index.vue @@ -115,6 +115,11 @@ const menuDef = $computed(() => [{ text: i18n.ts.customEmojis, to: '/admin/emojis', active: currentPage?.route.name === 'emojis', + }, { + icon: 'ti ti-sparkles', + text: i18n.ts.avatarDecorations, + to: '/admin/avatar-decorations', + active: currentPage?.route.name === 'avatarDecorations', }, { icon: 'ti ti-whirl', text: i18n.ts.federation, diff --git a/packages/frontend/src/pages/admin/modlog.ModLog.vue b/packages/frontend/src/pages/admin/modlog.ModLog.vue index 0af226f02e..bceefcf6c8 100644 --- a/packages/frontend/src/pages/admin/modlog.ModLog.vue +++ b/packages/frontend/src/pages/admin/modlog.ModLog.vue @@ -8,9 +8,9 @@ SPDX-License-Identifier: AGPL-3.0-only +
raw diff --git a/packages/frontend/src/pages/settings/profile.vue b/packages/frontend/src/pages/settings/profile.vue index 5e4889f61c..c44a58d04a 100644 --- a/packages/frontend/src/pages/settings/profile.vue +++ b/packages/frontend/src/pages/settings/profile.vue @@ -83,6 +83,23 @@ SPDX-License-Identifier: AGPL-3.0-only + + + + +
+
+
{{ avatarDecoration.name }}
+ +
+
+
+ @@ -126,6 +143,7 @@ import MkInfo from '@/components/MkInfo.vue'; const Sortable = defineAsyncComponent(() => import('vuedraggable').then(x => x.default)); const reactionAcceptance = computed(defaultStore.makeGetterSetter('reactionAcceptance')); +let avatarDecorations: any[] = $ref([]); const profile = reactive({ name: $i.name, @@ -146,6 +164,10 @@ watch(() => profile, () => { const fields = ref($i?.fields.map(field => ({ id: Math.random().toString(), name: field.name, value: field.value })) ?? []); const fieldEditMode = ref(false); +os.api('get-avatar-decorations').then(_avatarDecorations => { + avatarDecorations = _avatarDecorations; +}); + function addField() { fields.value.push({ id: Math.random().toString(), @@ -244,6 +266,20 @@ function changeBanner(ev) { }); } +function toggleDecoration(avatarDecoration) { + if ($i.avatarDecorations.some(x => x.id === avatarDecoration.id)) { + os.apiWithDialog('i/update', { + avatarDecorations: [], + }); + $i.avatarDecorations = []; + } else { + os.apiWithDialog('i/update', { + avatarDecorations: [avatarDecoration.id], + }); + $i.avatarDecorations.push(avatarDecoration); + } +} + const headerActions = $computed(() => []); const headerTabs = $computed(() => []); @@ -338,4 +374,23 @@ definePageMetadata({ .dragItemForm { flex-grow: 1; } + +.avatarDecoration { + cursor: pointer; + padding: 16px 16px 24px 16px; + border: solid 2px var(--divider); + border-radius: 8px; + text-align: center; +} + +.avatarDecorationActive { + border-color: var(--accent); +} + +.avatarDecorationName { + position: relative; + z-index: 10; + font-weight: bold; + margin-bottom: 16px; +} diff --git a/packages/frontend/src/router.ts b/packages/frontend/src/router.ts index 6c33d0d8ee..2258edebbb 100644 --- a/packages/frontend/src/router.ts +++ b/packages/frontend/src/router.ts @@ -343,6 +343,10 @@ export const routes = [{ path: '/emojis', name: 'emojis', component: page(() => import('./pages/custom-emojis-manager.vue')), + }, { + path: '/avatar-decorations', + name: 'avatarDecorations', + component: page(() => import('./pages/admin/avatar-decorations.vue')), }, { path: '/queue', name: 'queue', diff --git a/packages/frontend/test/home.test.ts b/packages/frontend/test/home.test.ts index 80b26c081a..6d38b7e526 100644 --- a/packages/frontend/test/home.test.ts +++ b/packages/frontend/test/home.test.ts @@ -7,8 +7,8 @@ import { describe, test, assert, afterEach } from 'vitest'; import { render, cleanup, type RenderResult } from '@testing-library/vue'; import './init'; import type * as Misskey from 'misskey-js'; -import { directives } from '@/directives'; -import { components } from '@/components/index'; +import { directives } from '@/directives/index.js'; +import { components } from '@/components/index.js'; import XHome from '@/pages/user/home.vue'; describe('XHome', () => { @@ -34,6 +34,8 @@ describe('XHome', () => { createdAt: '1970-01-01T00:00:00.000Z', fields: [], pinnedNotes: [], + avatarUrl: 'https://example.com', + avatarDecorations: [], }); const anchor = home.container.querySelector('a[href^="https://example.com/"]'); @@ -54,6 +56,8 @@ describe('XHome', () => { createdAt: '1970-01-01T00:00:00.000Z', fields: [], pinnedNotes: [], + avatarUrl: 'https://example.com', + avatarDecorations: [], }); const anchor = home.container.querySelector('a[href^="https://example.com/"]'); diff --git a/packages/frontend/test/note.test.ts b/packages/frontend/test/note.test.ts index 3e4faad287..8ccc05ff3e 100644 --- a/packages/frontend/test/note.test.ts +++ b/packages/frontend/test/note.test.ts @@ -7,8 +7,8 @@ import { describe, test, assert, afterEach } from 'vitest'; import { render, cleanup, type RenderResult } from '@testing-library/vue'; import './init'; import type * as Misskey from 'misskey-js'; -import { components } from '@/components'; -import { directives } from '@/directives'; +import { components } from '@/components/index.js'; +import { directives } from '@/directives/index.js'; import MkMediaImage from '@/components/MkMediaImage.vue'; describe('MkMediaImage', () => { diff --git a/packages/frontend/test/url-preview.test.ts b/packages/frontend/test/url-preview.test.ts index 0cf3a417e2..811f07d9c7 100644 --- a/packages/frontend/test/url-preview.test.ts +++ b/packages/frontend/test/url-preview.test.ts @@ -7,8 +7,8 @@ import { describe, test, assert, afterEach } from 'vitest'; import { render, cleanup, type RenderResult } from '@testing-library/vue'; import './init'; import type { summaly } from 'summaly'; -import { components } from '@/components'; -import { directives } from '@/directives'; +import { components } from '@/components/index.js'; +import { directives } from '@/directives/index.js'; import MkUrlPreview from '@/components/MkUrlPreview.vue'; type SummalyResult = Awaited>; diff --git a/packages/misskey-js/etc/misskey-js.api.md b/packages/misskey-js/etc/misskey-js.api.md index 0136df2030..4fabc195de 100644 --- a/packages/misskey-js/etc/misskey-js.api.md +++ b/packages/misskey-js/etc/misskey-js.api.md @@ -2634,10 +2634,22 @@ type ModerationLog = { } | { type: 'deleteAd'; info: ModerationLogPayloads['deleteAd']; +} | { + type: 'createAvatarDecoration'; + info: ModerationLogPayloads['createAvatarDecoration']; +} | { + type: 'updateAvatarDecoration'; + info: ModerationLogPayloads['updateAvatarDecoration']; +} | { + type: 'deleteAvatarDecoration'; + info: ModerationLogPayloads['deleteAvatarDecoration']; +} | { + type: 'resolveAbuseReport'; + info: ModerationLogPayloads['resolveAbuseReport']; }); // @public (undocumented) -export const moderationLogTypes: readonly ["updateServerSettings", "suspend", "unsuspend", "updateUserNote", "addCustomEmoji", "updateCustomEmoji", "deleteCustomEmoji", "assignRole", "unassignRole", "createRole", "updateRole", "deleteRole", "clearQueue", "promoteQueue", "deleteDriveFile", "deleteNote", "createGlobalAnnouncement", "createUserAnnouncement", "updateGlobalAnnouncement", "updateUserAnnouncement", "deleteGlobalAnnouncement", "deleteUserAnnouncement", "resetPassword", "suspendRemoteInstance", "unsuspendRemoteInstance", "markSensitiveDriveFile", "unmarkSensitiveDriveFile", "resolveAbuseReport", "createInvitation", "createAd", "updateAd", "deleteAd"]; +export const moderationLogTypes: readonly ["updateServerSettings", "suspend", "unsuspend", "updateUserNote", "addCustomEmoji", "updateCustomEmoji", "deleteCustomEmoji", "assignRole", "unassignRole", "createRole", "updateRole", "deleteRole", "clearQueue", "promoteQueue", "deleteDriveFile", "deleteNote", "createGlobalAnnouncement", "createUserAnnouncement", "updateGlobalAnnouncement", "updateUserAnnouncement", "deleteGlobalAnnouncement", "deleteUserAnnouncement", "resetPassword", "suspendRemoteInstance", "unsuspendRemoteInstance", "markSensitiveDriveFile", "unmarkSensitiveDriveFile", "resolveAbuseReport", "createInvitation", "createAd", "updateAd", "deleteAd", "createAvatarDecoration", "updateAvatarDecoration", "deleteAvatarDecoration"]; // @public (undocumented) export const mutedNoteReasons: readonly ["word", "manual", "spam", "other"]; @@ -2965,6 +2977,10 @@ type UserLite = { onlineStatus: 'online' | 'active' | 'offline' | 'unknown'; avatarUrl: string; avatarBlurhash: string; + avatarDecorations: { + id: ID; + url: string; + }[]; emojis: { name: string; url: string; @@ -2989,8 +3005,8 @@ type UserSorting = '+follower' | '-follower' | '+createdAt' | '-createdAt' | '+u // src/api.types.ts:16:32 - (ae-forgotten-export) The symbol "TODO" needs to be exported by the entry point index.d.ts // src/api.types.ts:18:25 - (ae-forgotten-export) The symbol "NoParams" needs to be exported by the entry point index.d.ts // src/api.types.ts:633:18 - (ae-forgotten-export) The symbol "ShowUserReq" needs to be exported by the entry point index.d.ts -// src/entities.ts:109:2 - (ae-forgotten-export) The symbol "notificationTypes_2" needs to be exported by the entry point index.d.ts -// src/entities.ts:605:2 - (ae-forgotten-export) The symbol "ModerationLogPayloads" needs to be exported by the entry point index.d.ts +// src/entities.ts:113:2 - (ae-forgotten-export) The symbol "notificationTypes_2" needs to be exported by the entry point index.d.ts +// src/entities.ts:609:2 - (ae-forgotten-export) The symbol "ModerationLogPayloads" needs to be exported by the entry point index.d.ts // src/streaming.types.ts:33:4 - (ae-forgotten-export) The symbol "FIXME" needs to be exported by the entry point index.d.ts // (No @packageDocumentation comment for this package) diff --git a/packages/misskey-js/src/consts.ts b/packages/misskey-js/src/consts.ts index c4ddead823..48a36a31d6 100644 --- a/packages/misskey-js/src/consts.ts +++ b/packages/misskey-js/src/consts.ts @@ -78,6 +78,9 @@ export const moderationLogTypes = [ 'createAd', 'updateAd', 'deleteAd', + 'createAvatarDecoration', + 'updateAvatarDecoration', + 'deleteAvatarDecoration', ] as const; export type ModerationLogPayloads = { @@ -239,4 +242,17 @@ export type ModerationLogPayloads = { adId: string; ad: any; }; + createAvatarDecoration: { + avatarDecorationId: string; + avatarDecoration: any; + }; + updateAvatarDecoration: { + avatarDecorationId: string; + before: any; + after: any; + }; + deleteAvatarDecoration: { + avatarDecorationId: string; + avatarDecoration: any; + }; }; diff --git a/packages/misskey-js/src/entities.ts b/packages/misskey-js/src/entities.ts index 50b4a40c49..a2a283d234 100644 --- a/packages/misskey-js/src/entities.ts +++ b/packages/misskey-js/src/entities.ts @@ -16,6 +16,10 @@ export type UserLite = { onlineStatus: 'online' | 'active' | 'offline' | 'unknown'; avatarUrl: string; avatarBlurhash: string; + avatarDecorations: { + id: ID; + url: string; + }[]; emojis: { name: string; url: string; @@ -693,4 +697,16 @@ export type ModerationLog = { } | { type: 'deleteAd'; info: ModerationLogPayloads['deleteAd']; +} | { + type: 'createAvatarDecoration'; + info: ModerationLogPayloads['createAvatarDecoration']; +} | { + type: 'updateAvatarDecoration'; + info: ModerationLogPayloads['updateAvatarDecoration']; +} | { + type: 'deleteAvatarDecoration'; + info: ModerationLogPayloads['deleteAvatarDecoration']; +} | { + type: 'resolveAbuseReport'; + info: ModerationLogPayloads['resolveAbuseReport']; }); From 12fe09c6e7c204c5b064eab2c8eda7329ff3a7a3 Mon Sep 17 00:00:00 2001 From: CyberRex Date: Sat, 21 Oct 2023 18:38:51 +0900 Subject: [PATCH 004/311] =?UTF-8?q?=E3=83=97=E3=83=AD=E3=83=95=E3=82=A3?= =?UTF-8?q?=E3=83=BC=E3=83=AB=E3=81=AEURL=E8=AA=8D=E8=A8=BC=E3=82=92rel=3D?= =?UTF-8?q?me=E3=81=A7=E5=8F=AF=E8=83=BD=E3=81=AB=20(#12100)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- packages/backend/src/server/api/endpoints/i/update.ts | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/packages/backend/src/server/api/endpoints/i/update.ts b/packages/backend/src/server/api/endpoints/i/update.ts index f1837e7082..79ead57a66 100644 --- a/packages/backend/src/server/api/endpoints/i/update.ts +++ b/packages/backend/src/server/api/endpoints/i/update.ts @@ -437,9 +437,13 @@ export default class extends Endpoint { // eslint- const myLink = `${this.config.url}/@${user.username}`; - const includesMyLink = Array.from(doc.getElementsByTagName('a')).some(a => a.href === myLink); + const aEls = Array.from(doc.getElementsByTagName('a')); + const linkEls = Array.from(doc.getElementsByTagName('link')); - if (includesMyLink) { + const includesMyLink = aEls.some(a => a.href === myLink); + const includesRelMeLinks = [...aEls, ...linkEls].some(link => link.rel === 'me' && link.href === myLink); + + if (includesMyLink || includesRelMeLinks) { await this.userProfilesRepository.createQueryBuilder('profile').update() .where('userId = :userId', { userId: user.id }) .set({ From 722584bf72a1432dbaad8b868c9b44bb5cd7cd30 Mon Sep 17 00:00:00 2001 From: anatawa12 Date: Sat, 21 Oct 2023 18:39:19 +0900 Subject: [PATCH 005/311] =?UTF-8?q?=E3=81=99=E3=81=B9=E3=81=A6=E3=81=AE?= =?UTF-8?q?=E3=83=95=E3=82=A9=E3=83=AD=E3=83=BC=E4=B8=AD=E3=81=AE=E4=BA=BA?= =?UTF-8?q?=E3=81=AEwithReplies=E3=82=92=E5=A4=89=E3=81=88=E3=82=8B?= =?UTF-8?q?=E6=A9=9F=E8=83=BD=20(#12049)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * feat: endpoint to update all following * feat(frontend): change show replies for all * docs(changelog): すでにフォローしたすべての人の返信をTLに追加できるように * fix: cancel not working --- CHANGELOG.md | 1 + locales/index.d.ts | 4 ++ locales/ja-JP.yml | 4 ++ .../backend/src/server/api/EndpointsModule.ts | 4 ++ packages/backend/src/server/api/endpoints.ts | 2 + .../api/endpoints/following/update-all.ts | 54 +++++++++++++++++++ .../frontend/src/pages/settings/general.vue | 11 ++++ 7 files changed, 80 insertions(+) create mode 100644 packages/backend/src/server/api/endpoints/following/update-all.ts diff --git a/CHANGELOG.md b/CHANGELOG.md index 6171569604..d06efad1ef 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -22,6 +22,7 @@ - Enhance: フォロー/フォロー解除したときに過去分のHTLにも含まれる投稿が反映されるように - Enhance: ローカリゼーションの更新 - Enhance: 依存関係の更新 +- Enhance: すでにフォローしたすべての人の返信をTLに追加できるように ### Client - Enhance: TLの返信表示オプションを記憶するように diff --git a/locales/index.d.ts b/locales/index.d.ts index 11be41235a..d31ac0a9b2 100644 --- a/locales/index.d.ts +++ b/locales/index.d.ts @@ -1135,6 +1135,10 @@ export interface Locale { "fileAttachedOnly": string; "showRepliesToOthersInTimeline": string; "hideRepliesToOthersInTimeline": string; + "showRepliesToOthersInTimelineAll": string; + "hideRepliesToOthersInTimelineAll": string; + "confirmShowRepliesAll": string; + "confirmHideRepliesAll": string; "externalServices": string; "impressum": string; "impressumUrl": string; diff --git a/locales/ja-JP.yml b/locales/ja-JP.yml index 11b0833928..a63c698bb9 100644 --- a/locales/ja-JP.yml +++ b/locales/ja-JP.yml @@ -1132,6 +1132,10 @@ mutualFollow: "相互フォロー" fileAttachedOnly: "ファイル付きのみ" showRepliesToOthersInTimeline: "TLに他の人への返信を含める" hideRepliesToOthersInTimeline: "TLに他の人への返信を含めない" +showRepliesToOthersInTimelineAll: "TLに現在フォロー中の人全員の返信を含めるようにする" +hideRepliesToOthersInTimelineAll: "TLに現在フォロー中の人全員の返信を含めないようにする" +confirmShowRepliesAll: "この操作は元の戻せません。本当にTLに現在フォロー中の人全員の返信を含めるようにしますか" +confirmHideRepliesAll: "この操作は元の戻せません。本当にTLに現在フォロー中の人全員の返信を含めないようにしますか" externalServices: "外部サービス" impressum: "運営者情報" impressumUrl: "運営者情報URL" diff --git a/packages/backend/src/server/api/EndpointsModule.ts b/packages/backend/src/server/api/EndpointsModule.ts index f234a2637d..ab0e4c6273 100644 --- a/packages/backend/src/server/api/EndpointsModule.ts +++ b/packages/backend/src/server/api/EndpointsModule.ts @@ -165,6 +165,7 @@ 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_update_all from './endpoints/following/update-all.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'; @@ -520,6 +521,7 @@ const $federation_stats: Provider = { provide: 'ep:federation/stats', useClass: 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_update_all: Provider = { provide: 'ep:following/update-all', useClass: ep___following_update_all.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 }; @@ -879,6 +881,7 @@ const $retention: Provider = { provide: 'ep:retention', useClass: ep___retention $following_create, $following_delete, $following_update, + $following_update_all, $following_invalidate, $following_requests_accept, $following_requests_cancel, @@ -1232,6 +1235,7 @@ const $retention: Provider = { provide: 'ep:retention', useClass: ep___retention $following_create, $following_delete, $following_update, + $following_update_all, $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 8d34edca9d..79e62672fa 100644 --- a/packages/backend/src/server/api/endpoints.ts +++ b/packages/backend/src/server/api/endpoints.ts @@ -165,6 +165,7 @@ 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_update_all from './endpoints/following/update-all.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'; @@ -518,6 +519,7 @@ const eps = [ ['following/create', ep___following_create], ['following/delete', ep___following_delete], ['following/update', ep___following_update], + ['following/update-all', ep___following_update_all], ['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/update-all.ts b/packages/backend/src/server/api/endpoints/following/update-all.ts new file mode 100644 index 0000000000..28734cfdbd --- /dev/null +++ b/packages/backend/src/server/api/endpoints/following/update-all.ts @@ -0,0 +1,54 @@ +/* + * 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: 10, + }, + + requireCredential: true, + + kind: 'write:following', +} as const; + +export const paramDef = { + type: 'object', + properties: { + notify: { type: 'string', enum: ['normal', 'none'] }, + withReplies: { type: 'boolean' }, + }, +} as const; + +@Injectable() +export default class extends Endpoint { // eslint-disable-line import/no-default-export + constructor( + @Inject(DI.followingsRepository) + private followingsRepository: FollowingsRepository, + ) { + super(meta, paramDef, async (ps, me) => { + await this.followingsRepository.update({ + followerId: me.id, + }, { + notify: ps.notify != null ? (ps.notify === 'none' ? null : ps.notify) : undefined, + withReplies: ps.withReplies != null ? ps.withReplies : undefined, + }); + + return; + }); + } +} diff --git a/packages/frontend/src/pages/settings/general.vue b/packages/frontend/src/pages/settings/general.vue index 30443fded6..f186cf2ae3 100644 --- a/packages/frontend/src/pages/settings/general.vue +++ b/packages/frontend/src/pages/settings/general.vue @@ -30,6 +30,8 @@ SPDX-License-Identifier: AGPL-3.0-only {{ i18n.ts.showFixedPostForm }} {{ i18n.ts.showFixedPostFormInChannel }} {{ i18n.ts.withRepliesByDefaultForNewlyFollowed }} + {{ i18n.ts.showRepliesToOthersInTimelineAll }} + {{ i18n.ts.hideRepliesToOthersInTimelineAll }} @@ -332,6 +334,15 @@ async function setPinnedList() { defaultStore.set('pinnedUserLists', [list]); } +async function updateRepliesAll(withReplies: boolean) { + const { canceled } = os.confirm({ + type: 'warning', + text: withReplies ? i18n.ts.confirmShowRepliesAll : i18n.ts.confirmHideRepliesAll, + }); + if (canceled) return; + await os.api('following/update-all', { withReplies }); +} + function removePinnedList() { defaultStore.set('pinnedUserLists', []); } From f51bca41c5f59f9ffce346a3ec32badaf1ccda31 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E3=81=8B=E3=81=A3=E3=81=93=E3=81=8B=E3=82=8A?= <67428053+kakkokari-gtyih@users.noreply.github.com> Date: Sat, 21 Oct 2023 18:41:12 +0900 Subject: [PATCH 006/311] =?UTF-8?q?Feat:=20=E5=A4=96=E9=83=A8=E3=82=B5?= =?UTF-8?q?=E3=82=A4=E3=83=88=E3=81=8B=E3=82=89=E3=83=86=E3=83=BC=E3=83=9E?= =?UTF-8?q?=E3=83=BB=E3=83=97=E3=83=A9=E3=82=B0=E3=82=A4=E3=83=B3=E3=81=AE?= =?UTF-8?q?=E3=82=A4=E3=83=B3=E3=82=B9=E3=83=88=E3=83=BC=E3=83=AB=E3=81=8C?= =?UTF-8?q?=E3=81=A7=E3=81=8D=E3=82=8B=E3=82=88=E3=81=86=E3=81=AB=20(#1203?= =?UTF-8?q?4)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Feat: 外部サイトからテーマ・プラグインのインストールができるように * Update Changelog * Change Changelog * Remove unnecessary imports * Update fetch-external-resources.ts * Update CHANGELOG.md * Update CHANGELOG.md --- CHANGELOG.md | 13 + locales/index.d.ts | 55 +++ locales/ja-JP.yml | 42 +++ .../backend/src/server/api/EndpointsModule.ts | 4 + packages/backend/src/server/api/endpoints.ts | 2 + .../api/endpoints/fetch-external-resources.ts | 72 ++++ .../frontend/src/components/global/MkUrl.vue | 23 +- .../frontend/src/pages/install-extentions.vue | 354 ++++++++++++++++++ .../src/pages/settings/plugin.install.vue | 117 +----- .../src/pages/settings/theme.install.vue | 67 ++-- packages/frontend/src/router.ts | 4 + .../frontend/src/scripts/install-plugin.ts | 129 +++++++ .../frontend/src/scripts/install-theme.ts | 37 ++ packages/misskey-js/etc/misskey-js.api.md | 16 + packages/misskey-js/src/api.types.ts | 7 + 15 files changed, 784 insertions(+), 158 deletions(-) create mode 100644 packages/backend/src/server/api/endpoints/fetch-external-resources.ts create mode 100644 packages/frontend/src/pages/install-extentions.vue create mode 100644 packages/frontend/src/scripts/install-plugin.ts create mode 100644 packages/frontend/src/scripts/install-theme.ts diff --git a/CHANGELOG.md b/CHANGELOG.md index d06efad1ef..2613e6682c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -12,6 +12,19 @@ --> +## 2023.x.x (unreleased) + +### General +- + +## Client +- Feat: プラグイン・テーマを外部サイトから直接インストールできるようになりました + - 外部サイトでの実装が必要です。詳細は Misskey Hub をご覧ください + https://misskey-hub.net/docs/advanced/publish-on-your-website.html + +### Server +- + ## 2023.10.2 ### General diff --git a/locales/index.d.ts b/locales/index.d.ts index d31ac0a9b2..bb9b4b3dc4 100644 --- a/locales/index.d.ts +++ b/locales/index.d.ts @@ -2313,6 +2313,61 @@ export interface Locale { "attachedNotes": string; "thisPageCanBeSeenFromTheAuthor": string; }; + "_externalResourceInstaller": { + "title": string; + "checkVendorBeforeInstall": string; + "_plugin": { + "title": string; + "metaTitle": string; + }; + "_theme": { + "title": string; + "metaTitle": string; + }; + "_meta": { + "base": string; + }; + "_vendorInfo": { + "title": string; + "endpoint": string; + "hashVerify": string; + }; + "_errors": { + "_invalidParams": { + "title": string; + "description": string; + }; + "_resourceTypeNotSupported": { + "title": string; + "description": string; + }; + "_failedToFetch": { + "title": string; + "fetchErrorDescription": string; + "parseErrorDescription": string; + }; + "_hashUnmatched": { + "title": string; + "description": string; + }; + "_pluginParseFailed": { + "title": string; + "description": string; + }; + "_pluginInstallFailed": { + "title": string; + "description": string; + }; + "_themeParseFailed": { + "title": string; + "description": string; + }; + "_themeInstallFailed": { + "title": string; + "description": string; + }; + }; + }; } declare const locales: { [lang: string]: Locale; diff --git a/locales/ja-JP.yml b/locales/ja-JP.yml index a63c698bb9..d3d6a80b1f 100644 --- a/locales/ja-JP.yml +++ b/locales/ja-JP.yml @@ -2225,3 +2225,45 @@ _fileViewer: uploadedAt: "追加日" attachedNotes: "添付されているノート" thisPageCanBeSeenFromTheAuthor: "このページは、このファイルをアップロードしたユーザーしか閲覧できません。" + +_externalResourceInstaller: + title: "外部サイトからインストール" + checkVendorBeforeInstall: "配布元が信頼できるかを確認した上でインストールしてください。" + _plugin: + title: "このプラグインをインストールしますか?" + metaTitle: "プラグイン情報" + _theme: + title: "このテーマをインストールしますか?" + metaTitle: "テーマ情報" + _meta: + base: "基本のカラースキーム" + _vendorInfo: + title: "配布元情報" + endpoint: "参照したエンドポイント" + hashVerify: "ファイル整合性の確認" + _errors: + _invalidParams: + title: "パラメータが不足しています" + description: "外部サイトからデータを取得するために必要な情報が不足しています。URLをお確かめください。" + _resourceTypeNotSupported: + title: "この外部リソースには対応していません" + description: "この外部サイトから取得したリソースの種別には対応していません。サイト管理者にお問い合わせください。" + _failedToFetch: + title: "データの取得に失敗しました" + fetchErrorDescription: "外部サイトとの通信に失敗しました。もう一度試しても改善しない場合、サイト管理者にお問い合わせください。" + parseErrorDescription: "外部サイトから取得したデータが読み取れませんでした。サイト管理者にお問い合わせください。" + _hashUnmatched: + title: "正しいデータが取得できませんでした" + description: "提供されたデータの整合性の確認に失敗しました。セキュリティ上、インストールは続行できません。サイト管理者にお問い合わせください。" + _pluginParseFailed: + title: "AiScript エラー" + description: "データは取得できたものの、AiScriptの解析時にエラーがあったため読み込めませんでした。プラグインの作者にお問い合わせください。エラーの詳細はJavascriptコンソールをご確認ください。" + _pluginInstallFailed: + title: "プラグインのインストールに失敗しました" + description: "プラグインのインストール中に問題が発生しました。もう一度お試しください。エラーの詳細はJavascriptコンソールをご覧ください。" + _themeParseFailed: + title: "テーマ解析エラー" + description: "データは取得できたものの、テーマファイルの解析時にエラーがあったため読み込めませんでした。テーマの作者にお問い合わせください。エラーの詳細はJavascriptコンソールをご確認ください。" + _themeInstallFailed: + title: "テーマのインストールに失敗しました" + description: "テーマのインストール中に問題が発生しました。もう一度お試しください。エラーの詳細はJavascriptコンソールをご覧ください。" diff --git a/packages/backend/src/server/api/EndpointsModule.ts b/packages/backend/src/server/api/EndpointsModule.ts index ab0e4c6273..376226be69 100644 --- a/packages/backend/src/server/api/EndpointsModule.ts +++ b/packages/backend/src/server/api/EndpointsModule.ts @@ -357,6 +357,7 @@ import * as ep___users_show from './endpoints/users/show.js'; import * as ep___users_achievements from './endpoints/users/achievements.js'; import * as ep___users_updateMemo from './endpoints/users/update-memo.js'; import * as ep___fetchRss from './endpoints/fetch-rss.js'; +import * as ep___fetchExternalResources from './endpoints/fetch-external-resources.js'; import * as ep___retention from './endpoints/retention.js'; import { GetterService } from './GetterService.js'; import { ApiLoggerService } from './ApiLoggerService.js'; @@ -713,6 +714,7 @@ const $users_show: Provider = { provide: 'ep:users/show', useClass: ep___users_s const $users_achievements: Provider = { provide: 'ep:users/achievements', useClass: ep___users_achievements.default }; const $users_updateMemo: Provider = { provide: 'ep:users/update-memo', useClass: ep___users_updateMemo.default }; const $fetchRss: Provider = { provide: 'ep:fetch-rss', useClass: ep___fetchRss.default }; +const $fetchExternalResources: Provider = { provide: 'ep:fetch-external-resources', useClass: ep___fetchExternalResources.default }; const $retention: Provider = { provide: 'ep:retention', useClass: ep___retention.default }; @Module({ @@ -1073,6 +1075,7 @@ const $retention: Provider = { provide: 'ep:retention', useClass: ep___retention $users_achievements, $users_updateMemo, $fetchRss, + $fetchExternalResources, $retention, ], exports: [ @@ -1424,6 +1427,7 @@ const $retention: Provider = { provide: 'ep:retention', useClass: ep___retention $users_achievements, $users_updateMemo, $fetchRss, + $fetchExternalResources, $retention, ], }) diff --git a/packages/backend/src/server/api/endpoints.ts b/packages/backend/src/server/api/endpoints.ts index 79e62672fa..8be91469be 100644 --- a/packages/backend/src/server/api/endpoints.ts +++ b/packages/backend/src/server/api/endpoints.ts @@ -357,6 +357,7 @@ import * as ep___users_show from './endpoints/users/show.js'; import * as ep___users_achievements from './endpoints/users/achievements.js'; import * as ep___users_updateMemo from './endpoints/users/update-memo.js'; import * as ep___fetchRss from './endpoints/fetch-rss.js'; +import * as ep___fetchExternalResources from './endpoints/fetch-external-resources.js'; import * as ep___retention from './endpoints/retention.js'; const eps = [ @@ -711,6 +712,7 @@ const eps = [ ['users/achievements', ep___users_achievements], ['users/update-memo', ep___users_updateMemo], ['fetch-rss', ep___fetchRss], + ['fetch-external-resources', ep___fetchExternalResources], ['retention', ep___retention], ]; diff --git a/packages/backend/src/server/api/endpoints/fetch-external-resources.ts b/packages/backend/src/server/api/endpoints/fetch-external-resources.ts new file mode 100644 index 0000000000..d7b46cc666 --- /dev/null +++ b/packages/backend/src/server/api/endpoints/fetch-external-resources.ts @@ -0,0 +1,72 @@ +/* + * SPDX-FileCopyrightText: syuilo and other misskey contributors + * SPDX-License-Identifier: AGPL-3.0-only + */ + +import { createHash } from 'crypto'; +import ms from 'ms'; +import { Injectable } from '@nestjs/common'; +import { Endpoint } from '@/server/api/endpoint-base.js'; +import { HttpRequestService } from '@/core/HttpRequestService.js'; +import { ApiError } from '../error.js'; + +export const meta = { + tags: ['meta'], + + requireCredential: true, + + limit: { + duration: ms('1hour'), + max: 50, + }, + + errors: { + invalidSchema: { + message: 'External resource returned invalid schema.', + code: 'EXT_RESOURCE_RETURNED_INVALID_SCHEMA', + id: 'bb774091-7a15-4a70-9dc5-6ac8cf125856', + }, + hashUnmached: { + message: 'Hash did not match.', + code: 'EXT_RESOURCE_HASH_DIDNT_MATCH', + id: '693ba8ba-b486-40df-a174-72f8279b56a4', + }, + }, +} as const; + +export const paramDef = { + type: 'object', + properties: { + url: { type: 'string' }, + hash: { type: 'string' }, + }, + required: ['url', 'hash'], +} as const; + +@Injectable() +export default class extends Endpoint { // eslint-disable-line import/no-default-export + constructor( + private httpRequestService: HttpRequestService, + ) { + super(meta, paramDef, async (ps) => { + const res = await this.httpRequestService.getJson<{ + type: string; + data: string; + }>(ps.url); + + if (!res.data || !res.type) { + throw new ApiError(meta.errors.invalidSchema); + } + + const resHash = createHash('sha512').update(res.data.replace(/\r\n/g, '\n')).digest('hex'); + if (resHash !== ps.hash) { + throw new ApiError(meta.errors.hashUnmached); + } + + return { + type: res.type, + data: res.data, + }; + }); + } +} diff --git a/packages/frontend/src/components/global/MkUrl.vue b/packages/frontend/src/components/global/MkUrl.vue index a8832cde01..db8a8399b5 100644 --- a/packages/frontend/src/components/global/MkUrl.vue +++ b/packages/frontend/src/components/global/MkUrl.vue @@ -31,23 +31,28 @@ import * as os from '@/os.js'; import { useTooltip } from '@/scripts/use-tooltip.js'; import { safeURIDecode } from '@/scripts/safe-uri-decode.js'; -const props = defineProps<{ +const props = withDefaults(defineProps<{ url: string; rel?: string; -}>(); + showUrlPreview?: boolean; +}>(), { + showUrlPreview: true, +}); const self = props.url.startsWith(local); const url = new URL(props.url); if (!['http:', 'https:'].includes(url.protocol)) throw new Error('invalid url'); const el = ref(); -useTooltip(el, (showing) => { - os.popup(defineAsyncComponent(() => import('@/components/MkUrlPreviewPopup.vue')), { - showing, - url: props.url, - source: el.value, - }, {}, 'closed'); -}); +if (props.showUrlPreview) { + useTooltip(el, (showing) => { + os.popup(defineAsyncComponent(() => import('@/components/MkUrlPreviewPopup.vue')), { + showing, + url: props.url, + source: el.value, + }, {}, 'closed'); + }); +} const schema = url.protocol; const hostname = decodePunycode(url.hostname); diff --git a/packages/frontend/src/pages/install-extentions.vue b/packages/frontend/src/pages/install-extentions.vue new file mode 100644 index 0000000000..9674b522aa --- /dev/null +++ b/packages/frontend/src/pages/install-extentions.vue @@ -0,0 +1,354 @@ + + + + + + + diff --git a/packages/frontend/src/pages/settings/plugin.install.vue b/packages/frontend/src/pages/settings/plugin.install.vue index 47ebe9cfd6..693e02d0ed 100644 --- a/packages/frontend/src/pages/settings/plugin.install.vue +++ b/packages/frontend/src/pages/settings/plugin.install.vue @@ -18,130 +18,35 @@ SPDX-License-Identifier: AGPL-3.0-only + + diff --git a/packages/frontend/src/pages/settings/profile.vue b/packages/frontend/src/pages/settings/profile.vue index f3d0c12dce..8d9c3cf730 100644 --- a/packages/frontend/src/pages/settings/profile.vue +++ b/packages/frontend/src/pages/settings/profile.vue @@ -92,10 +92,10 @@ SPDX-License-Identifier: AGPL-3.0-only v-for="avatarDecoration in avatarDecorations" :key="avatarDecoration.id" :class="[$style.avatarDecoration, { [$style.avatarDecorationActive]: $i.avatarDecorations.some(x => x.id === avatarDecoration.id) }]" - @click="toggleDecoration(avatarDecoration)" + @click="openDecoration(avatarDecoration)" >
{{ avatarDecoration.name }}
- +
@@ -266,18 +266,10 @@ function changeBanner(ev) { }); } -function toggleDecoration(avatarDecoration) { - if ($i.avatarDecorations.some(x => x.id === avatarDecoration.id)) { - os.apiWithDialog('i/update', { - avatarDecorations: [], - }); - $i.avatarDecorations = []; - } else { - os.apiWithDialog('i/update', { - avatarDecorations: [avatarDecoration.id], - }); - $i.avatarDecorations.push(avatarDecoration); - } +function openDecoration(avatarDecoration) { + os.popup(defineAsyncComponent(() => import('./profile.avatar-decoration-dialog.vue')), { + decoration: avatarDecoration, + }, {}, 'closed'); } const headerActions = $computed(() => []); diff --git a/packages/misskey-js/etc/misskey-js.api.md b/packages/misskey-js/etc/misskey-js.api.md index 208fe5b16d..0a6806ae60 100644 --- a/packages/misskey-js/etc/misskey-js.api.md +++ b/packages/misskey-js/etc/misskey-js.api.md @@ -2996,6 +2996,8 @@ type UserLite = { avatarDecorations: { id: ID; url: string; + angle?: number; + flipH?: boolean; }[]; emojis: { name: string; @@ -3021,8 +3023,8 @@ type UserSorting = '+follower' | '-follower' | '+createdAt' | '-createdAt' | '+u // src/api.types.ts:16:32 - (ae-forgotten-export) The symbol "TODO" needs to be exported by the entry point index.d.ts // src/api.types.ts:18:25 - (ae-forgotten-export) The symbol "NoParams" needs to be exported by the entry point index.d.ts // src/api.types.ts:633:18 - (ae-forgotten-export) The symbol "ShowUserReq" needs to be exported by the entry point index.d.ts -// src/entities.ts:113:2 - (ae-forgotten-export) The symbol "notificationTypes_2" needs to be exported by the entry point index.d.ts -// src/entities.ts:609:2 - (ae-forgotten-export) The symbol "ModerationLogPayloads" needs to be exported by the entry point index.d.ts +// src/entities.ts:115:2 - (ae-forgotten-export) The symbol "notificationTypes_2" needs to be exported by the entry point index.d.ts +// src/entities.ts:611:2 - (ae-forgotten-export) The symbol "ModerationLogPayloads" needs to be exported by the entry point index.d.ts // src/streaming.types.ts:33:4 - (ae-forgotten-export) The symbol "FIXME" needs to be exported by the entry point index.d.ts // (No @packageDocumentation comment for this package) diff --git a/packages/misskey-js/src/entities.ts b/packages/misskey-js/src/entities.ts index a2a283d234..38bac3b7c3 100644 --- a/packages/misskey-js/src/entities.ts +++ b/packages/misskey-js/src/entities.ts @@ -19,6 +19,8 @@ export type UserLite = { avatarDecorations: { id: ID; url: string; + angle?: number; + flipH?: boolean; }[]; emojis: { name: string; From 983b1e63df5a3f535fcd98f11d709d6c45d7aa0e Mon Sep 17 00:00:00 2001 From: zyoshoka <107108195+zyoshoka@users.noreply.github.com> Date: Sun, 22 Oct 2023 15:51:48 +0900 Subject: [PATCH 026/311] =?UTF-8?q?fix(frontend):=20=E6=8A=95=E7=A8=BF?= =?UTF-8?q?=E3=83=95=E3=82=A9=E3=83=BC=E3=83=A0=E3=81=A7=E3=81=AE=E3=83=A6?= =?UTF-8?q?=E3=83=BC=E3=82=B6=E3=83=BC=E5=A4=89=E6=9B=B4=E3=81=8C=E3=83=97?= =?UTF-8?q?=E3=83=AC=E3=83=93=E3=83=A5=E3=83=BC=E3=81=AB=E5=8F=8D=E6=98=A0?= =?UTF-8?q?=E3=81=95=E3=82=8C=E3=82=8B=E3=82=88=E3=81=86=E3=81=AB=E4=BF=AE?= =?UTF-8?q?=E6=AD=A3=20(#12022)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * fix(frontend): 投稿フォームでのユーザー変更がプレビューに反映されるように修正 * Update CHANGELOG.md --- CHANGELOG.md | 1 + packages/frontend/src/components/MkNotePreview.vue | 9 +++++---- packages/frontend/src/components/MkPostForm.vue | 2 +- 3 files changed, 7 insertions(+), 5 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 5d623609ee..fb49ef573c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -22,6 +22,7 @@ - Feat: プラグイン・テーマを外部サイトから直接インストールできるようになりました - 外部サイトでの実装が必要です。詳細は Misskey Hub をご覧ください https://misskey-hub.net/docs/advanced/publish-on-your-website.html +- Fix: 投稿フォームでのユーザー変更がプレビューに反映されない問題を修正 ### Server - Fix: リストTLに自分のフォロワー限定投稿が含まれない問題を修正 diff --git a/packages/frontend/src/components/MkNotePreview.vue b/packages/frontend/src/components/MkNotePreview.vue index fc6ea89085..923c240cf0 100644 --- a/packages/frontend/src/components/MkNotePreview.vue +++ b/packages/frontend/src/components/MkNotePreview.vue @@ -5,14 +5,14 @@ SPDX-License-Identifier: AGPL-3.0-only From 7c692283add6c8ee9db4e5b95f905d23ad45bf7f Mon Sep 17 00:00:00 2001 From: _ Date: Tue, 31 Oct 2023 15:27:20 +0900 Subject: [PATCH 177/311] =?UTF-8?q?fix(backend):=20=E8=87=AA=E8=BA=AB?= =?UTF-8?q?=E3=81=AE=E5=AE=9B=E5=85=88=E3=81=AA=E3=81=97=E3=83=80=E3=82=A4?= =?UTF-8?q?=E3=83=AC=E3=82=AF=E3=83=88=E6=8A=95=E7=A8=BF=E3=81=8C=E3=82=B9?= =?UTF-8?q?=E3=83=88=E3=83=AA=E3=83=BC=E3=83=9F=E3=83=B3=E3=82=B0=E3=81=A7?= =?UTF-8?q?=E6=B5=81=E3=82=8C=E3=81=A6=E3=81=93=E3=81=AA=E3=81=84=E5=95=8F?= =?UTF-8?q?=E9=A1=8C=E3=82=92=E4=BF=AE=E6=AD=A3=20(#12203)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * fix: dm stream * add CHANGELOG --- CHANGELOG.md | 1 + .../backend/src/server/api/stream/channels/home-timeline.ts | 2 +- .../backend/src/server/api/stream/channels/hybrid-timeline.ts | 2 +- 3 files changed, 3 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index cbda1f194a..51b96831fc 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -61,6 +61,7 @@ - Fix: HTLをリロードまたは遡行したとき、フォローしているチャンネルのノートが含まれない問題を修正 #11765 #12181 - Fix: リノートをリノートできるのを修正 - Fix: アクセストークンを削除すると、通知が取得できなくなる場合がある問題を修正 +- Fix: 自身の宛先なしダイレクト投稿がストリーミングで流れてこない問題を修正 ## 2023.10.2 diff --git a/packages/backend/src/server/api/stream/channels/home-timeline.ts b/packages/backend/src/server/api/stream/channels/home-timeline.ts index 1c882c8d8a..80054d0881 100644 --- a/packages/backend/src/server/api/stream/channels/home-timeline.ts +++ b/packages/backend/src/server/api/stream/channels/home-timeline.ts @@ -56,7 +56,7 @@ class HomeTimelineChannel extends Channel { if (note.visibility === 'followers') { if (!isMe && !Object.hasOwn(this.following, note.userId)) return; } else if (note.visibility === 'specified') { - if (!note.visibleUserIds!.includes(this.user!.id)) return; + if (!isMe && !note.visibleUserIds!.includes(this.user!.id)) return; } if (note.reply) { diff --git a/packages/backend/src/server/api/stream/channels/hybrid-timeline.ts b/packages/backend/src/server/api/stream/channels/hybrid-timeline.ts index aa3fc75092..78645982bf 100644 --- a/packages/backend/src/server/api/stream/channels/hybrid-timeline.ts +++ b/packages/backend/src/server/api/stream/channels/hybrid-timeline.ts @@ -67,7 +67,7 @@ class HybridTimelineChannel extends Channel { if (note.visibility === 'followers') { if (!isMe && !Object.hasOwn(this.following, note.userId)) return; } else if (note.visibility === 'specified') { - if (!note.visibleUserIds!.includes(this.user!.id)) return; + if (!isMe && !note.visibleUserIds!.includes(this.user!.id)) return; } // Ignore notes from instances the user has muted From e2f34e3db684b2258db3e7370675afe894f5e301 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9E=9C=E7=89=A9=E3=83=AA=E3=83=B3?= Date: Tue, 31 Oct 2023 17:26:59 +0900 Subject: [PATCH 178/311] =?UTF-8?q?fix:=20headerAction=E3=81=ABPC=E4=BB=A5?= =?UTF-8?q?=E5=A4=96=E3=81=A7=E7=A9=BA=E3=81=AE=E3=83=9C=E3=82=BF=E3=83=B3?= =?UTF-8?q?=E3=81=8C=E5=87=BA=E3=81=A6=E3=81=97=E3=81=BE=E3=81=86=E3=83=90?= =?UTF-8?q?=E3=82=B0=E3=81=AE=E4=BF=AE=E6=AD=A3=20(#12202)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * headerActionにPC以外で空のボタンが出てしまうバグの修正 * fix eslint --- packages/frontend/src/pages/timeline.vue | 62 +++++++++++++----------- 1 file changed, 34 insertions(+), 28 deletions(-) diff --git a/packages/frontend/src/pages/timeline.vue b/packages/frontend/src/pages/timeline.vue index f601bc8a85..5b97385ead 100644 --- a/packages/frontend/src/pages/timeline.vue +++ b/packages/frontend/src/pages/timeline.vue @@ -140,36 +140,42 @@ function focus(): void { tlComponent.focus(); } -const headerActions = $computed(() => [ - ...[deviceKind === 'desktop' ? { - icon: 'ti ti-refresh', - text: i18n.ts.reload, - handler: (ev) => { - console.log('called'); - tlComponent.reloadTimeline(); - }, - } : {}], { - icon: 'ti ti-dots', - text: i18n.ts.options, - handler: (ev) => { - os.popupMenu([{ - type: 'switch', - text: i18n.ts.showRenotes, - icon: 'ti ti-repeat', - ref: $$(withRenotes), - }, src === 'local' || src === 'social' ? { - type: 'switch', - text: i18n.ts.showRepliesToOthersInTimeline, - ref: $$(withReplies), - } : undefined, { - type: 'switch', - text: i18n.ts.fileAttachedOnly, - icon: 'ti ti-photo', - ref: $$(onlyFiles), - }], ev.currentTarget ?? ev.target); +const headerActions = $computed(() => { + const tmp = [ + { + icon: 'ti ti-dots', + text: i18n.ts.options, + handler: (ev) => { + os.popupMenu([{ + type: 'switch', + text: i18n.ts.showRenotes, + icon: 'ti ti-repeat', + ref: $$(withRenotes), + }, src === 'local' || src === 'social' ? { + type: 'switch', + text: i18n.ts.showRepliesToOthersInTimeline, + ref: $$(withReplies), + } : undefined, { + type: 'switch', + text: i18n.ts.fileAttachedOnly, + icon: 'ti ti-photo', + ref: $$(onlyFiles), + }], ev.currentTarget ?? ev.target); + }, }, + ]; + if (deviceKind === 'desktop') { + tmp.unshift({ + icon: 'ti ti-refresh', + text: i18n.ts.reload, + handler: (ev: Event) => { + console.log('called'); + tlComponent.reloadTimeline(); + }, + }); } -]); + return tmp; +}); const headerTabs = $computed(() => [...(defaultStore.reactiveState.pinnedUserLists.value.map(l => ({ key: 'list:' + l.id, From cf026e4c72eda0708aef0109901098a7bf10ffa4 Mon Sep 17 00:00:00 2001 From: anatawa12 Date: Tue, 31 Oct 2023 17:28:13 +0900 Subject: [PATCH 179/311] feat: add tools to navbar (#12204) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * feat: add tools to navbar * docs(changelog): ナビゲーションバーにツールを追加しました --- CHANGELOG.md | 1 + packages/frontend/src/navbar.ts | 9 ++- packages/frontend/src/ui/_common_/common.ts | 63 ++++++++++++--------- 3 files changed, 46 insertions(+), 27 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 51b96831fc..999f2e43db 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -28,6 +28,7 @@ - Feat: プラグイン・テーマを外部サイトから直接インストールできるようになりました - 外部サイトでの実装が必要です。詳細は Misskey Hub をご覧ください https://misskey-hub.net/docs/advanced/publish-on-your-website.html +- Feat: ナビゲーションバーにツールを追加しました - Enhance: スワイプしてタイムラインを再読込できるように - PCの場合は右上のボタンからでも再読込できます - Enhance: タイムラインの自動更新を無効にできるように diff --git a/packages/frontend/src/navbar.ts b/packages/frontend/src/navbar.ts index 7f182a98f7..e72a4dc316 100644 --- a/packages/frontend/src/navbar.ts +++ b/packages/frontend/src/navbar.ts @@ -6,7 +6,7 @@ import { computed, reactive } from 'vue'; import { $i } from '@/account.js'; import { miLocalStorage } from '@/local-storage.js'; -import { openInstanceMenu } from '@/ui/_common_/common.js'; +import { openInstanceMenu, openToolsMenu } from '@/ui/_common_/common.js'; import { lookup } from '@/scripts/lookup.js'; import * as os from '@/os.js'; import { i18n } from '@/i18n.js'; @@ -142,6 +142,13 @@ export const navbarItemDef = reactive({ openInstanceMenu(ev); }, }, + tools: { + title: i18n.ts.tools, + icon: 'ti ti-tool', + action: (ev) => { + openToolsMenu(ev); + }, + }, reload: { title: i18n.ts.reload, icon: 'ti ti-refresh', diff --git a/packages/frontend/src/ui/_common_/common.ts b/packages/frontend/src/ui/_common_/common.ts index 125d340fe7..ff6157f5f8 100644 --- a/packages/frontend/src/ui/_common_/common.ts +++ b/packages/frontend/src/ui/_common_/common.ts @@ -3,12 +3,42 @@ * SPDX-License-Identifier: AGPL-3.0-only */ +import type { MenuItem } from '@/types/menu.js'; import * as os from '@/os.js'; import { instance } from '@/instance.js'; import { host } from '@/config.js'; import { i18n } from '@/i18n.js'; import { $i } from '@/account.js'; +function toolsMenuItems(): MenuItem[] { + return [{ + type: 'link', + to: '/scratchpad', + text: i18n.ts.scratchpad, + icon: 'ti ti-terminal-2', + }, { + type: 'link', + to: '/api-console', + text: 'API Console', + icon: 'ti ti-terminal-2', + }, { + type: 'link', + to: '/clicker', + text: '🍪👈', + icon: 'ti ti-cookie', + }, ($i && ($i.isAdmin || $i.policies.canManageCustomEmojis)) ? { + type: 'link', + to: '/custom-emojis-manager', + text: i18n.ts.manageCustomEmojis, + icon: 'ti ti-icons', + } : undefined, ($i && ($i.isAdmin || $i.policies.canManageAvatarDecorations)) ? { + type: 'link', + to: '/avatar-decorations', + text: i18n.ts.manageAvatarDecorations, + icon: 'ti ti-sparkles', + } : undefined]; +} + export function openInstanceMenu(ev: MouseEvent) { os.popupMenu([{ text: instance.name ?? host, @@ -47,32 +77,7 @@ export function openInstanceMenu(ev: MouseEvent) { type: 'parent', text: i18n.ts.tools, icon: 'ti ti-tool', - children: [{ - type: 'link', - to: '/scratchpad', - text: i18n.ts.scratchpad, - icon: 'ti ti-terminal-2', - }, { - type: 'link', - to: '/api-console', - text: 'API Console', - icon: 'ti ti-terminal-2', - }, { - type: 'link', - to: '/clicker', - text: '🍪👈', - icon: 'ti ti-cookie', - }, ($i && ($i.isAdmin || $i.policies.canManageCustomEmojis)) ? { - type: 'link', - to: '/custom-emojis-manager', - text: i18n.ts.manageCustomEmojis, - icon: 'ti ti-icons', - } : undefined, ($i && ($i.isAdmin || $i.policies.canManageAvatarDecorations)) ? { - type: 'link', - to: '/avatar-decorations', - text: i18n.ts.manageAvatarDecorations, - icon: 'ti ti-sparkles', - } : undefined], + children: toolsMenuItems(), }, null, (instance.impressumUrl) ? { text: i18n.ts.impressum, icon: 'ti ti-file-invoice', @@ -105,3 +110,9 @@ export function openInstanceMenu(ev: MouseEvent) { align: 'left', }); } + +export function openToolsMenu(ev: MouseEvent) { + os.popupMenu(toolsMenuItems(), ev.currentTarget ?? ev.target, { + align: 'left', + }); +} From 735f22c1c5a7a1904ce1c0b197f3fc61c9de1bbc Mon Sep 17 00:00:00 2001 From: syuilo Date: Tue, 31 Oct 2023 17:29:21 +0900 Subject: [PATCH 180/311] Update CHANGELOG.md --- CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 999f2e43db..feabb8e0f9 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -28,7 +28,6 @@ - Feat: プラグイン・テーマを外部サイトから直接インストールできるようになりました - 外部サイトでの実装が必要です。詳細は Misskey Hub をご覧ください https://misskey-hub.net/docs/advanced/publish-on-your-website.html -- Feat: ナビゲーションバーにツールを追加しました - Enhance: スワイプしてタイムラインを再読込できるように - PCの場合は右上のボタンからでも再読込できます - Enhance: タイムラインの自動更新を無効にできるように @@ -39,6 +38,7 @@ - Enhance: プラグインを削除した際には、使用されていたアクセストークンも同時に削除されるようになりました - Enhance: プラグインで`Plugin:register_note_view_interruptor`を用いてnoteの代わりにnullを返却することでノートを非表示にできるようになりました - Enhance: AiScript関数`Mk:nyaize()`が追加されました +- Enhance: 情報→ツール はナビゲーションバーにツールとして独立した項目になりました - Enhance: その他細かなブラッシュアップ - Fix: 投稿フォームでのユーザー変更がプレビューに反映されない問題を修正 - Fix: ユーザーページの ノート > ファイル付き タブにリプライが表示されてしまう From a44118998d4d6dfed3a66593af633dc3cba146c7 Mon Sep 17 00:00:00 2001 From: NoriDev Date: Tue, 31 Oct 2023 18:47:51 +0900 Subject: [PATCH 181/311] lint --- .../src/server/api/endpoints/notes/update.ts | 3 +- packages/cherrypick-js/src/streaming.ts | 3 + .../frontend/src/components/MkCode.core.vue | 2 +- .../src/components/MkEmojiPicker.section.vue | 60 +++++++++---------- .../frontend/src/components/MkEmojiPicker.vue | 24 ++++---- packages/frontend/src/stream.ts | 2 +- packages/frontend/vite.config.ts | 1 + 7 files changed, 49 insertions(+), 46 deletions(-) diff --git a/packages/backend/src/server/api/endpoints/notes/update.ts b/packages/backend/src/server/api/endpoints/notes/update.ts index f5c5e50ae5..55d11c98fb 100644 --- a/packages/backend/src/server/api/endpoints/notes/update.ts +++ b/packages/backend/src/server/api/endpoints/notes/update.ts @@ -11,8 +11,8 @@ import { NoteUpdateService } from '@/core/NoteUpdateService.js'; import { DI } from '@/di-symbols.js'; import { GetterService } from '@/server/api/GetterService.js'; import { MAX_NOTE_TEXT_LENGTH } from '@/const.js'; +import type { DriveFilesRepository, MiDriveFile } from '@/models/_.js'; import { ApiError } from '../../error.js'; -import type { DriveFilesRepository, MiDriveFile } from "@/models/_.js"; export const meta = { tags: ['notes'], @@ -114,7 +114,6 @@ export default class extends Endpoint { // eslint- throw new ApiError(meta.errors.noSuchNote); } - let files: MiDriveFile[] = []; const fileIds = ps.fileIds ?? ps.mediaIds ?? null; if (fileIds != null) { diff --git a/packages/cherrypick-js/src/streaming.ts b/packages/cherrypick-js/src/streaming.ts index c641706a4b..bb53bf3d6c 100644 --- a/packages/cherrypick-js/src/streaming.ts +++ b/packages/cherrypick-js/src/streaming.ts @@ -172,8 +172,11 @@ export default class Stream extends EventEmitter { * ! ストリーム上のやり取りはすべてJSONで行われます ! */ public send(typeOrPayload: string): void + public send(typeOrPayload: string, payload: any): void + public send(typeOrPayload: Record | any[]): void + public send(typeOrPayload: string | Record | any[], payload?: any): void { if (typeof typeOrPayload === 'string') { this.stream.send(JSON.stringify({ diff --git a/packages/frontend/src/components/MkCode.core.vue b/packages/frontend/src/components/MkCode.core.vue index 6adca0bc1c..8f43b89533 100644 --- a/packages/frontend/src/components/MkCode.core.vue +++ b/packages/frontend/src/components/MkCode.core.vue @@ -54,7 +54,7 @@ watch(() => props.lang, (to) => { return new Promise((resolve) => { fetchLanguage(to).then(() => resolve); }); -}, { immediate: true, }); +}, { immediate: true }); diff --git a/packages/frontend/src/ui/classic.sidebar.vue b/packages/frontend/src/ui/classic.sidebar.vue index 9172d51893..01dbf1c9c0 100644 --- a/packages/frontend/src/ui/classic.sidebar.vue +++ b/packages/frontend/src/ui/classic.sidebar.vue @@ -21,7 +21,10 @@ SPDX-License-Identifier: AGPL-3.0-only
{{ navbarItemDef[item].title }} - + + {{ navbarItemDef[item].indicateValue }} + +
@@ -218,6 +221,12 @@ watch(defaultStore.reactiveState.menuDisplay, () => { color: var(--navIndicator); font-size: 8px; animation: blink 1s infinite; + + &:has(.itemIndicateValueIcon) { + animation: none; + left: auto; + right: 20px; + } } &:hover { diff --git a/packages/frontend/src/ui/deck.vue b/packages/frontend/src/ui/deck.vue index 2510977877..1d51e08f78 100644 --- a/packages/frontend/src/ui/deck.vue +++ b/packages/frontend/src/ui/deck.vue @@ -52,7 +52,12 @@ SPDX-License-Identifier: AGPL-3.0-only
- +
@@ -485,5 +490,10 @@ body { color: var(--indicator); font-size: 16px; animation: blink 1s infinite; + + &:has(.itemIndicateValueIcon) { + animation: none; + font-size: 12px; + } } diff --git a/packages/frontend/src/ui/universal.vue b/packages/frontend/src/ui/universal.vue index c9fb8a931d..86ec8650f9 100644 --- a/packages/frontend/src/ui/universal.vue +++ b/packages/frontend/src/ui/universal.vue @@ -27,7 +27,12 @@ SPDX-License-Identifier: AGPL-3.0-only
- +
@@ -444,6 +449,11 @@ $widgets-hide-threshold: 1090px; color: var(--indicator); font-size: 16px; animation: blink 1s infinite; + + &:has(.itemIndicateValueIcon) { + animation: none; + font-size: 12px; + } } .menuDrawerBg { diff --git a/packages/misskey-js/etc/misskey-js.api.md b/packages/misskey-js/etc/misskey-js.api.md index 0a6806ae60..8f389086c9 100644 --- a/packages/misskey-js/etc/misskey-js.api.md +++ b/packages/misskey-js/etc/misskey-js.api.md @@ -2488,6 +2488,7 @@ type MeDetailed = UserDetailed & { hasUnreadMessagingMessage: boolean; hasUnreadNotification: boolean; hasUnreadSpecifiedNotes: boolean; + unreadNotificationsCount: number; hideOnlineStatus: boolean; injectFeaturedNote: boolean; integrations: Record; @@ -3023,8 +3024,8 @@ type UserSorting = '+follower' | '-follower' | '+createdAt' | '-createdAt' | '+u // src/api.types.ts:16:32 - (ae-forgotten-export) The symbol "TODO" needs to be exported by the entry point index.d.ts // src/api.types.ts:18:25 - (ae-forgotten-export) The symbol "NoParams" needs to be exported by the entry point index.d.ts // src/api.types.ts:633:18 - (ae-forgotten-export) The symbol "ShowUserReq" needs to be exported by the entry point index.d.ts -// src/entities.ts:115:2 - (ae-forgotten-export) The symbol "notificationTypes_2" needs to be exported by the entry point index.d.ts -// src/entities.ts:611:2 - (ae-forgotten-export) The symbol "ModerationLogPayloads" needs to be exported by the entry point index.d.ts +// src/entities.ts:116:2 - (ae-forgotten-export) The symbol "notificationTypes_2" needs to be exported by the entry point index.d.ts +// src/entities.ts:612:2 - (ae-forgotten-export) The symbol "ModerationLogPayloads" needs to be exported by the entry point index.d.ts // src/streaming.types.ts:33:4 - (ae-forgotten-export) The symbol "FIXME" needs to be exported by the entry point index.d.ts // (No @packageDocumentation comment for this package) diff --git a/packages/misskey-js/src/entities.ts b/packages/misskey-js/src/entities.ts index 38bac3b7c3..029bf48c84 100644 --- a/packages/misskey-js/src/entities.ts +++ b/packages/misskey-js/src/entities.ts @@ -106,6 +106,7 @@ export type MeDetailed = UserDetailed & { hasUnreadMessagingMessage: boolean; hasUnreadNotification: boolean; hasUnreadSpecifiedNotes: boolean; + unreadNotificationsCount: number; hideOnlineStatus: boolean; injectFeaturedNote: boolean; integrations: Record; diff --git a/packages/sw/src/scripts/create-notification.ts b/packages/sw/src/scripts/create-notification.ts index e96f8585c7..a51a28dc3b 100644 --- a/packages/sw/src/scripts/create-notification.ts +++ b/packages/sw/src/scripts/create-notification.ts @@ -225,6 +225,13 @@ async function composeNotification(data: PushNotificationDataMap[keyof PushNotif data, }]; + case 'test': + return [t('_notification.testNotification'), { + body: t('_notification.notificationWillBeDisplayedLikeThis'), + badge: iconUrl('bell'), + data, + }]; + default: return null; } diff --git a/packages/sw/src/types.ts b/packages/sw/src/types.ts index fa1ed15ed6..c63e489c71 100644 --- a/packages/sw/src/types.ts +++ b/packages/sw/src/types.ts @@ -41,6 +41,7 @@ export type BadgeNames = | 'antenna' | 'arrow-back-up' | 'at' + | 'bell' | 'chart-arrows' | 'circle-check' | 'medal' From 7ed2a5fc1b6264f656a3e55ad355723bf697a318 Mon Sep 17 00:00:00 2001 From: syuilo Date: Wed, 1 Nov 2023 13:55:19 +0900 Subject: [PATCH 188/311] perf(backend): remove needless query #12206 --- CHANGELOG.md | 1 + .../src/core/entities/ChannelEntityService.ts | 15 ++------------- 2 files changed, 3 insertions(+), 13 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 77b01aad39..d00c960c95 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -54,6 +54,7 @@ - Enhance: フォローしているチャンネルをフォロー解除した時(またはその逆)、タイムラインに反映される間隔を改善 - Enhance: プロフィールの自己紹介欄のMFMが連合するようになりました - 相手がMisskey v2023.11.0以降である必要があります +- Enhance: チャンネル取得時のパフォーマンスを向上 - Fix: リストTLに自分のフォロワー限定投稿が含まれない問題を修正 - Fix: ローカルタイムラインに投稿者自身の投稿への返信が含まれない問題を修正 - Fix: 自分のフォローしているユーザーの自分のフォローしていないユーザーの visibility: followers な投稿への返信がストリーミングで流れてくる問題を修正 diff --git a/packages/backend/src/core/entities/ChannelEntityService.ts b/packages/backend/src/core/entities/ChannelEntityService.ts index dd72953c7d..599b1a1d70 100644 --- a/packages/backend/src/core/entities/ChannelEntityService.ts +++ b/packages/backend/src/core/entities/ChannelEntityService.ts @@ -5,7 +5,7 @@ import { Inject, Injectable } from '@nestjs/common'; import { DI } from '@/di-symbols.js'; -import type { ChannelFavoritesRepository, ChannelFollowingsRepository, ChannelsRepository, DriveFilesRepository, NoteUnreadsRepository, NotesRepository } from '@/models/_.js'; +import type { ChannelFavoritesRepository, ChannelFollowingsRepository, ChannelsRepository, DriveFilesRepository, NotesRepository } from '@/models/_.js'; import type { Packed } from '@/misc/json-schema.js'; import type { } from '@/models/Blocking.js'; import type { MiUser } from '@/models/User.js'; @@ -14,7 +14,6 @@ import { bindThis } from '@/decorators.js'; import { IdService } from '@/core/IdService.js'; import { DriveFileEntityService } from './DriveFileEntityService.js'; import { NoteEntityService } from './NoteEntityService.js'; -import { In } from 'typeorm'; @Injectable() export class ChannelEntityService { @@ -31,9 +30,6 @@ export class ChannelEntityService { @Inject(DI.notesRepository) private notesRepository: NotesRepository, - @Inject(DI.noteUnreadsRepository) - private noteUnreadsRepository: NoteUnreadsRepository, - @Inject(DI.driveFilesRepository) private driveFilesRepository: DriveFilesRepository, @@ -54,13 +50,6 @@ export class ChannelEntityService { const banner = channel.bannerId ? await this.driveFilesRepository.findOneBy({ id: channel.bannerId }) : null; - const hasUnreadNote = meId ? await this.noteUnreadsRepository.exist({ - where: { - noteChannelId: channel.id, - userId: meId, - }, - }) : undefined; - const isFollowing = meId ? await this.channelFollowingsRepository.exist({ where: { followerId: meId, @@ -99,7 +88,7 @@ export class ChannelEntityService { ...(me ? { isFollowing, isFavorited, - hasUnreadNote, + hasUnreadNote: false, // 後方互換性のため } : {}), ...(detailed ? { From e632a844311983856a6667278b5b9626960390fa Mon Sep 17 00:00:00 2001 From: syuilo Date: Wed, 1 Nov 2023 14:00:31 +0900 Subject: [PATCH 189/311] tweak default configuration --- packages/backend/src/config.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/backend/src/config.ts b/packages/backend/src/config.ts index ef59a80950..b25554b229 100644 --- a/packages/backend/src/config.ts +++ b/packages/backend/src/config.ts @@ -258,7 +258,7 @@ export function loadConfig(): Config { clientEntry: clientManifest['src/_boot_.ts'], clientManifestExists: clientManifestExists, perChannelMaxNoteCacheCount: config.perChannelMaxNoteCacheCount ?? 1000, - perUserNotificationsMaxCount: config.perUserNotificationsMaxCount ?? 300, + perUserNotificationsMaxCount: config.perUserNotificationsMaxCount ?? 500, deactivateAntennaThreshold: config.deactivateAntennaThreshold ?? (1000 * 60 * 60 * 24 * 7), pidFile: config.pidFile, }; From 77db652bffd8c8474c09c6353386a89fb0c3f110 Mon Sep 17 00:00:00 2001 From: syuilo Date: Wed, 1 Nov 2023 14:06:54 +0900 Subject: [PATCH 190/311] update deps --- package.json | 8 +- packages/backend/package.json | 20 +- packages/frontend/package.json | 56 +- packages/misskey-js/package.json | 10 +- packages/sw/package.json | 2 +- pnpm-lock.yaml | 1410 ++++++++++++++++-------------- 6 files changed, 801 insertions(+), 705 deletions(-) diff --git a/package.json b/package.json index 17cd49adf8..b67048b77c 100644 --- a/package.json +++ b/package.json @@ -48,14 +48,14 @@ "cssnano": "6.0.1", "js-yaml": "4.1.0", "postcss": "8.4.31", - "terser": "5.22.0", + "terser": "5.24.0", "typescript": "5.2.2" }, "devDependencies": { - "@typescript-eslint/eslint-plugin": "6.9.0", - "@typescript-eslint/parser": "6.9.0", + "@typescript-eslint/eslint-plugin": "6.9.1", + "@typescript-eslint/parser": "6.9.1", "cross-env": "7.0.3", - "cypress": "13.3.3", + "cypress": "13.4.0", "eslint": "8.52.0", "start-server-and-test": "2.0.1" }, diff --git a/packages/backend/package.json b/packages/backend/package.json index a461e3a21c..0c4879a297 100644 --- a/packages/backend/package.json +++ b/packages/backend/package.json @@ -66,17 +66,17 @@ "@discordapp/twemoji": "14.1.2", "@fastify/accepts": "4.2.0", "@fastify/cookie": "9.1.0", - "@fastify/cors": "8.4.0", + "@fastify/cors": "8.4.1", "@fastify/express": "2.3.0", "@fastify/http-proxy": "9.2.1", "@fastify/multipart": "8.0.0", - "@fastify/static": "6.11.2", + "@fastify/static": "6.12.0", "@fastify/view": "8.2.0", "@nestjs/common": "10.2.7", "@nestjs/core": "10.2.7", "@nestjs/testing": "10.2.7", "@peertube/http-signature": "1.7.0", - "@simplewebauthn/server": "8.3.4", + "@simplewebauthn/server": "8.3.5", "@sinonjs/fake-timers": "11.2.2", "@swc/cli": "0.1.62", "@swc/core": "1.3.95", @@ -87,7 +87,7 @@ "bcryptjs": "2.4.3", "blurhash": "2.0.5", "body-parser": "1.20.2", - "bullmq": "4.12.6", + "bullmq": "4.12.7", "cacheable-lookup": "7.0.0", "cbor": "9.0.1", "chalk": "5.3.0", @@ -138,7 +138,7 @@ "probe-image-size": "7.2.3", "promise-limit": "2.7.0", "pug": "3.0.2", - "punycode": "2.3.0", + "punycode": "2.3.1", "pureimage": "0.3.17", "qrcode": "1.5.3", "random-seed": "0.3.0", @@ -175,7 +175,7 @@ "@simplewebauthn/typescript-types": "8.3.4", "@swc/jest": "0.2.29", "@types/accepts": "1.3.6", - "@types/archiver": "5.3.4", + "@types/archiver": "6.0.0", "@types/bcryptjs": "2.4.5", "@types/body-parser": "1.19.4", "@types/cbor": "6.0.0", @@ -183,14 +183,14 @@ "@types/content-disposition": "0.5.7", "@types/fluent-ffmpeg": "2.1.23", "@types/http-link-header": "1.0.4", - "@types/jest": "29.5.6", + "@types/jest": "29.5.7", "@types/js-yaml": "4.0.8", "@types/jsdom": "21.1.4", "@types/jsonld": "1.5.11", "@types/jsrsasign": "10.5.11", "@types/mime-types": "2.1.3", "@types/ms": "0.7.33", - "@types/node": "20.8.9", + "@types/node": "20.8.10", "@types/node-fetch": "3.0.3", "@types/nodemailer": "6.4.13", "@types/oauth": "0.9.3", @@ -213,8 +213,8 @@ "@types/vary": "1.1.2", "@types/web-push": "3.6.2", "@types/ws": "8.5.8", - "@typescript-eslint/eslint-plugin": "6.9.0", - "@typescript-eslint/parser": "6.9.0", + "@typescript-eslint/eslint-plugin": "6.9.1", + "@typescript-eslint/parser": "6.9.1", "aws-sdk-client-mock": "3.0.0", "cross-env": "7.0.3", "eslint": "8.52.0", diff --git a/packages/frontend/package.json b/packages/frontend/package.json index fe35519d27..c487c4a027 100644 --- a/packages/frontend/package.json +++ b/packages/frontend/package.json @@ -20,7 +20,7 @@ "@github/webauthn-json": "2.1.1", "@rollup/plugin-alias": "5.0.1", "@rollup/plugin-json": "6.0.1", - "@rollup/plugin-replace": "5.0.4", + "@rollup/plugin-replace": "5.0.5", "@rollup/pluginutils": "5.0.5", "@syuilo/aiscript": "0.16.0", "@tabler/icons-webfont": "2.37.0", @@ -30,7 +30,7 @@ "astring": "1.8.6", "autosize": "6.0.1", "aiscript-vscode": "github:aiscript-dev/aiscript-vscode#v0.0.5", - "broadcast-channel": "5.5.1", + "broadcast-channel": "6.0.0", "browser-image-resizer": "github:misskey-dev/browser-image-resizer#v2.2.1-misskey.3", "buraha": "0.0.1", "canvas-confetti": "1.6.1", @@ -39,7 +39,7 @@ "chartjs-chart-matrix": "2.0.1", "chartjs-plugin-gradient": "0.6.1", "chartjs-plugin-zoom": "2.0.1", - "chromatic": "7.5.4", + "chromatic": "7.6.0", "compare-versions": "6.1.0", "cropperjs": "2.0.0-beta.4", "date-fns": "2.30.0", @@ -55,9 +55,9 @@ "mfm-js": "0.23.3", "misskey-js": "workspace:*", "photoswipe": "5.4.2", - "punycode": "2.3.0", + "punycode": "2.3.1", "querystring": "0.2.1", - "rollup": "4.1.4", + "rollup": "4.2.0", "sanitize-html": "2.11.0", "shiki": "^0.14.5", "sass": "1.69.5", @@ -78,30 +78,30 @@ "vuedraggable": "next" }, "devDependencies": { - "@storybook/addon-actions": "7.5.1", - "@storybook/addon-essentials": "7.5.1", - "@storybook/addon-interactions": "7.5.1", - "@storybook/addon-links": "7.5.1", - "@storybook/addon-storysource": "7.5.1", - "@storybook/addons": "7.5.1", - "@storybook/blocks": "7.5.1", - "@storybook/core-events": "7.5.1", + "@storybook/addon-actions": "7.5.2", + "@storybook/addon-essentials": "7.5.2", + "@storybook/addon-interactions": "7.5.2", + "@storybook/addon-links": "7.5.2", + "@storybook/addon-storysource": "7.5.2", + "@storybook/addons": "7.5.2", + "@storybook/blocks": "7.5.2", + "@storybook/core-events": "7.5.2", "@storybook/jest": "0.2.3", - "@storybook/manager-api": "7.5.1", - "@storybook/preview-api": "7.5.1", - "@storybook/react": "7.5.1", - "@storybook/react-vite": "7.5.1", + "@storybook/manager-api": "7.5.2", + "@storybook/preview-api": "7.5.2", + "@storybook/react": "7.5.2", + "@storybook/react-vite": "7.5.2", "@storybook/testing-library": "0.2.2", - "@storybook/theming": "7.5.1", - "@storybook/types": "7.5.1", - "@storybook/vue3": "7.5.1", - "@storybook/vue3-vite": "7.5.1", - "@testing-library/vue": "7.0.0", + "@storybook/theming": "7.5.2", + "@storybook/types": "7.5.2", + "@storybook/vue3": "7.5.2", + "@storybook/vue3-vite": "7.5.2", + "@testing-library/vue": "8.0.0", "@types/escape-regexp": "0.0.2", - "@types/estree": "1.0.3", + "@types/estree": "1.0.4", "@types/matter-js": "0.19.2", "@types/micromatch": "4.0.4", - "@types/node": "20.8.9", + "@types/node": "20.8.10", "@types/punycode": "2.1.1", "@types/sanitize-html": "2.9.3", "@types/throttle-debounce": "5.0.1", @@ -109,13 +109,13 @@ "@types/uuid": "9.0.6", "@types/websocket": "1.0.8", "@types/ws": "8.5.8", - "@typescript-eslint/eslint-plugin": "6.9.0", - "@typescript-eslint/parser": "6.9.0", + "@typescript-eslint/eslint-plugin": "6.9.1", + "@typescript-eslint/parser": "6.9.1", "@vitest/coverage-v8": "0.34.6", "@vue/runtime-core": "3.3.7", "acorn": "8.11.2", "cross-env": "7.0.3", - "cypress": "13.3.3", + "cypress": "13.4.0", "eslint": "8.52.0", "eslint-plugin-import": "2.29.0", "eslint-plugin-vue": "9.18.1", @@ -129,7 +129,7 @@ "react": "18.2.0", "react-dom": "18.2.0", "start-server-and-test": "2.0.1", - "storybook": "7.5.1", + "storybook": "7.5.2", "storybook-addon-misskey-theme": "github:misskey-dev/storybook-addon-misskey-theme", "summaly": "github:misskey-dev/summaly", "vite-plugin-turbosnap": "1.0.3", diff --git a/packages/misskey-js/package.json b/packages/misskey-js/package.json index 78e0c17c99..8c28810cba 100644 --- a/packages/misskey-js/package.json +++ b/packages/misskey-js/package.json @@ -20,12 +20,12 @@ "url": "git+https://github.com/misskey-dev/misskey.js.git" }, "devDependencies": { - "@microsoft/api-extractor": "7.38.0", + "@microsoft/api-extractor": "7.38.1", "@swc/jest": "0.2.29", - "@types/jest": "29.5.6", - "@types/node": "20.8.9", - "@typescript-eslint/eslint-plugin": "6.9.0", - "@typescript-eslint/parser": "6.9.0", + "@types/jest": "29.5.7", + "@types/node": "20.8.10", + "@typescript-eslint/eslint-plugin": "6.9.1", + "@typescript-eslint/parser": "6.9.1", "eslint": "8.52.0", "jest": "29.7.0", "jest-fetch-mock": "3.0.3", diff --git a/packages/sw/package.json b/packages/sw/package.json index 52c8546635..7959b51391 100644 --- a/packages/sw/package.json +++ b/packages/sw/package.json @@ -14,7 +14,7 @@ "misskey-js": "workspace:*" }, "devDependencies": { - "@typescript-eslint/parser": "6.9.0", + "@typescript-eslint/parser": "6.9.1", "@typescript/lib-webworker": "npm:@types/serviceworker@0.0.67", "eslint": "8.52.0", "eslint-plugin-import": "2.29.0", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 0ffd449494..9bc37d5312 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -25,8 +25,8 @@ importers: specifier: 8.4.31 version: 8.4.31 terser: - specifier: 5.22.0 - version: 5.22.0 + specifier: 5.24.0 + version: 5.24.0 typescript: specifier: 5.2.2 version: 5.2.2 @@ -36,17 +36,17 @@ importers: version: 4.4.0 devDependencies: '@typescript-eslint/eslint-plugin': - specifier: 6.9.0 - version: 6.9.0(@typescript-eslint/parser@6.9.0)(eslint@8.52.0)(typescript@5.2.2) + specifier: 6.9.1 + version: 6.9.1(@typescript-eslint/parser@6.9.1)(eslint@8.52.0)(typescript@5.2.2) '@typescript-eslint/parser': - specifier: 6.9.0 - version: 6.9.0(eslint@8.52.0)(typescript@5.2.2) + specifier: 6.9.1 + version: 6.9.1(eslint@8.52.0)(typescript@5.2.2) cross-env: specifier: 7.0.3 version: 7.0.3 cypress: - specifier: 13.3.3 - version: 13.3.3 + specifier: 13.4.0 + version: 13.4.0 eslint: specifier: 8.52.0 version: 8.52.0 @@ -81,8 +81,8 @@ importers: specifier: 9.1.0 version: 9.1.0 '@fastify/cors': - specifier: 8.4.0 - version: 8.4.0 + specifier: 8.4.1 + version: 8.4.1 '@fastify/express': specifier: 2.3.0 version: 2.3.0 @@ -93,8 +93,8 @@ importers: specifier: 8.0.0 version: 8.0.0 '@fastify/static': - specifier: 6.11.2 - version: 6.11.2 + specifier: 6.12.0 + version: 6.12.0 '@fastify/view': specifier: 8.2.0 version: 8.2.0 @@ -111,8 +111,8 @@ importers: specifier: 1.7.0 version: 1.7.0 '@simplewebauthn/server': - specifier: 8.3.4 - version: 8.3.4 + specifier: 8.3.5 + version: 8.3.5 '@sinonjs/fake-timers': specifier: 11.2.2 version: 11.2.2 @@ -147,8 +147,8 @@ importers: specifier: 1.20.2 version: 1.20.2 bullmq: - specifier: 4.12.6 - version: 4.12.6 + specifier: 4.12.7 + version: 4.12.7 cacheable-lookup: specifier: 7.0.0 version: 7.0.0 @@ -300,8 +300,8 @@ importers: specifier: 3.0.2 version: 3.0.2 punycode: - specifier: 2.3.0 - version: 2.3.0 + specifier: 2.3.1 + version: 2.3.1 pureimage: specifier: 0.3.17 version: 0.3.17 @@ -494,8 +494,8 @@ importers: specifier: 1.3.6 version: 1.3.6 '@types/archiver': - specifier: 5.3.4 - version: 5.3.4 + specifier: 6.0.0 + version: 6.0.0 '@types/bcryptjs': specifier: 2.4.5 version: 2.4.5 @@ -518,8 +518,8 @@ importers: specifier: 1.0.4 version: 1.0.4 '@types/jest': - specifier: 29.5.6 - version: 29.5.6 + specifier: 29.5.7 + version: 29.5.7 '@types/js-yaml': specifier: 4.0.8 version: 4.0.8 @@ -539,8 +539,8 @@ importers: specifier: 0.7.33 version: 0.7.33 '@types/node': - specifier: 20.8.9 - version: 20.8.9 + specifier: 20.8.10 + version: 20.8.10 '@types/node-fetch': specifier: 3.0.3 version: 3.0.3 @@ -608,11 +608,11 @@ importers: specifier: 8.5.8 version: 8.5.8 '@typescript-eslint/eslint-plugin': - specifier: 6.9.0 - version: 6.9.0(@typescript-eslint/parser@6.9.0)(eslint@8.52.0)(typescript@5.2.2) + specifier: 6.9.1 + version: 6.9.1(@typescript-eslint/parser@6.9.1)(eslint@8.52.0)(typescript@5.2.2) '@typescript-eslint/parser': - specifier: 6.9.0 - version: 6.9.0(eslint@8.52.0)(typescript@5.2.2) + specifier: 6.9.1 + version: 6.9.1(eslint@8.52.0)(typescript@5.2.2) aws-sdk-client-mock: specifier: 3.0.0 version: 3.0.0 @@ -624,13 +624,13 @@ importers: version: 8.52.0 eslint-plugin-import: specifier: 2.29.0 - version: 2.29.0(@typescript-eslint/parser@6.9.0)(eslint@8.52.0) + version: 2.29.0(@typescript-eslint/parser@6.9.1)(eslint@8.52.0) execa: specifier: 8.0.1 version: 8.0.1 jest: specifier: 29.7.0 - version: 29.7.0(@types/node@20.8.9) + version: 29.7.0(@types/node@20.8.10) jest-mock: specifier: 29.7.0 version: 29.7.0 @@ -648,16 +648,16 @@ importers: version: 2.1.1 '@rollup/plugin-alias': specifier: 5.0.1 - version: 5.0.1(rollup@4.1.4) + version: 5.0.1(rollup@4.2.0) '@rollup/plugin-json': specifier: 6.0.1 - version: 6.0.1(rollup@4.1.4) + version: 6.0.1(rollup@4.2.0) '@rollup/plugin-replace': - specifier: 5.0.4 - version: 5.0.4(rollup@4.1.4) + specifier: 5.0.5 + version: 5.0.5(rollup@4.2.0) '@rollup/pluginutils': specifier: 5.0.5 - version: 5.0.5(rollup@4.1.4) + version: 5.0.5(rollup@4.2.0) '@syuilo/aiscript': specifier: 0.16.0 version: 0.16.0 @@ -669,7 +669,7 @@ importers: version: 4.4.0(vite@4.5.0)(vue@3.3.7) '@vue-macros/reactivity-transform': specifier: 0.3.23 - version: 0.3.23(rollup@4.1.4)(vue@3.3.7) + version: 0.3.23(rollup@4.2.0)(vue@3.3.7) '@vue/compiler-sfc': specifier: 3.3.7 version: 3.3.7 @@ -683,8 +683,8 @@ importers: specifier: 6.0.1 version: 6.0.1 broadcast-channel: - specifier: 5.5.1 - version: 5.5.1 + specifier: 6.0.0 + version: 6.0.0 browser-image-resizer: specifier: github:misskey-dev/browser-image-resizer#v2.2.1-misskey.3 version: github.com/misskey-dev/browser-image-resizer/0227e860621e55cbed0aabe6dc601096a7748c4a @@ -710,8 +710,8 @@ importers: specifier: 2.0.1 version: 2.0.1(chart.js@4.4.0) chromatic: - specifier: 7.5.4 - version: 7.5.4 + specifier: 7.6.0 + version: 7.6.0 compare-versions: specifier: 6.1.0 version: 6.1.0 @@ -758,14 +758,14 @@ importers: specifier: 5.4.2 version: 5.4.2 punycode: - specifier: 2.3.0 - version: 2.3.0 + specifier: 2.3.1 + version: 2.3.1 querystring: specifier: 0.2.1 version: 0.2.1 rollup: - specifier: 4.1.4 - version: 4.1.4 + specifier: 4.2.0 + version: 4.2.0 sanitize-html: specifier: 2.11.0 version: 2.11.0 @@ -813,7 +813,7 @@ importers: version: 1.8.1 vite: specifier: 4.5.0 - version: 4.5.0(@types/node@20.8.9)(sass@1.69.5)(terser@5.22.0) + version: 4.5.0(@types/node@20.8.10)(sass@1.69.5)(terser@5.24.0) vue: specifier: 3.3.7 version: 3.3.7(typescript@5.2.2) @@ -822,68 +822,68 @@ importers: version: 4.1.0(vue@3.3.7) devDependencies: '@storybook/addon-actions': - specifier: 7.5.1 - version: 7.5.1(react-dom@18.2.0)(react@18.2.0) + specifier: 7.5.2 + version: 7.5.2(react-dom@18.2.0)(react@18.2.0) '@storybook/addon-essentials': - specifier: 7.5.1 - version: 7.5.1(react-dom@18.2.0)(react@18.2.0) + specifier: 7.5.2 + version: 7.5.2(react-dom@18.2.0)(react@18.2.0) '@storybook/addon-interactions': - specifier: 7.5.1 - version: 7.5.1(react-dom@18.2.0)(react@18.2.0) + specifier: 7.5.2 + version: 7.5.2(react-dom@18.2.0)(react@18.2.0) '@storybook/addon-links': - specifier: 7.5.1 - version: 7.5.1(react-dom@18.2.0)(react@18.2.0) + specifier: 7.5.2 + version: 7.5.2(react-dom@18.2.0)(react@18.2.0) '@storybook/addon-storysource': - specifier: 7.5.1 - version: 7.5.1(react-dom@18.2.0)(react@18.2.0) + specifier: 7.5.2 + version: 7.5.2(react-dom@18.2.0)(react@18.2.0) '@storybook/addons': - specifier: 7.5.1 - version: 7.5.1(react-dom@18.2.0)(react@18.2.0) + specifier: 7.5.2 + version: 7.5.2(react-dom@18.2.0)(react@18.2.0) '@storybook/blocks': - specifier: 7.5.1 - version: 7.5.1(react-dom@18.2.0)(react@18.2.0) + specifier: 7.5.2 + version: 7.5.2(react-dom@18.2.0)(react@18.2.0) '@storybook/core-events': - specifier: 7.5.1 - version: 7.5.1 + specifier: 7.5.2 + version: 7.5.2 '@storybook/jest': specifier: 0.2.3 version: 0.2.3(vitest@0.34.6) '@storybook/manager-api': - specifier: 7.5.1 - version: 7.5.1(react-dom@18.2.0)(react@18.2.0) + specifier: 7.5.2 + version: 7.5.2(react-dom@18.2.0)(react@18.2.0) '@storybook/preview-api': - specifier: 7.5.1 - version: 7.5.1 + specifier: 7.5.2 + version: 7.5.2 '@storybook/react': - specifier: 7.5.1 - version: 7.5.1(react-dom@18.2.0)(react@18.2.0)(typescript@5.2.2) + specifier: 7.5.2 + version: 7.5.2(react-dom@18.2.0)(react@18.2.0)(typescript@5.2.2) '@storybook/react-vite': - specifier: 7.5.1 - version: 7.5.1(react-dom@18.2.0)(react@18.2.0)(rollup@4.1.4)(typescript@5.2.2)(vite@4.5.0) + specifier: 7.5.2 + version: 7.5.2(react-dom@18.2.0)(react@18.2.0)(rollup@4.2.0)(typescript@5.2.2)(vite@4.5.0) '@storybook/testing-library': specifier: 0.2.2 version: 0.2.2 '@storybook/theming': - specifier: 7.5.1 - version: 7.5.1(react-dom@18.2.0)(react@18.2.0) + specifier: 7.5.2 + version: 7.5.2(react-dom@18.2.0)(react@18.2.0) '@storybook/types': - specifier: 7.5.1 - version: 7.5.1 + specifier: 7.5.2 + version: 7.5.2 '@storybook/vue3': - specifier: 7.5.1 - version: 7.5.1(@vue/compiler-core@3.3.7)(vue@3.3.7) + specifier: 7.5.2 + version: 7.5.2(@vue/compiler-core@3.3.7)(vue@3.3.7) '@storybook/vue3-vite': - specifier: 7.5.1 - version: 7.5.1(@vue/compiler-core@3.3.7)(react-dom@18.2.0)(react@18.2.0)(typescript@5.2.2)(vite@4.5.0)(vue@3.3.7) + specifier: 7.5.2 + version: 7.5.2(@vue/compiler-core@3.3.7)(react-dom@18.2.0)(react@18.2.0)(typescript@5.2.2)(vite@4.5.0)(vue@3.3.7) '@testing-library/vue': - specifier: 7.0.0 - version: 7.0.0(@vue/compiler-sfc@3.3.7)(vue@3.3.7) + specifier: 8.0.0 + version: 8.0.0(@vue/compiler-sfc@3.3.7)(vue@3.3.7) '@types/escape-regexp': specifier: 0.0.2 version: 0.0.2 '@types/estree': - specifier: 1.0.3 - version: 1.0.3 + specifier: 1.0.4 + version: 1.0.4 '@types/matter-js': specifier: 0.19.2 version: 0.19.2 @@ -891,8 +891,8 @@ importers: specifier: 4.0.4 version: 4.0.4 '@types/node': - specifier: 20.8.9 - version: 20.8.9 + specifier: 20.8.10 + version: 20.8.10 '@types/punycode': specifier: 2.1.1 version: 2.1.1 @@ -915,11 +915,11 @@ importers: specifier: 8.5.8 version: 8.5.8 '@typescript-eslint/eslint-plugin': - specifier: 6.9.0 - version: 6.9.0(@typescript-eslint/parser@6.9.0)(eslint@8.52.0)(typescript@5.2.2) + specifier: 6.9.1 + version: 6.9.1(@typescript-eslint/parser@6.9.1)(eslint@8.52.0)(typescript@5.2.2) '@typescript-eslint/parser': - specifier: 6.9.0 - version: 6.9.0(eslint@8.52.0)(typescript@5.2.2) + specifier: 6.9.1 + version: 6.9.1(eslint@8.52.0)(typescript@5.2.2) '@vitest/coverage-v8': specifier: 0.34.6 version: 0.34.6(vitest@0.34.6) @@ -933,14 +933,14 @@ importers: specifier: 7.0.3 version: 7.0.3 cypress: - specifier: 13.3.3 - version: 13.3.3 + specifier: 13.4.0 + version: 13.4.0 eslint: specifier: 8.52.0 version: 8.52.0 eslint-plugin-import: specifier: 2.29.0 - version: 2.29.0(@typescript-eslint/parser@6.9.0)(eslint@8.52.0) + version: 2.29.0(@typescript-eslint/parser@6.9.1)(eslint@8.52.0) eslint-plugin-vue: specifier: 9.18.1 version: 9.18.1(eslint@8.52.0) @@ -975,11 +975,11 @@ importers: specifier: 2.0.1 version: 2.0.1 storybook: - specifier: 7.5.1 - version: 7.5.1 + specifier: 7.5.2 + version: 7.5.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.5.1)(@storybook/components@7.5.1)(@storybook/core-events@7.5.1)(@storybook/manager-api@7.5.1)(@storybook/preview-api@7.5.1)(@storybook/theming@7.5.1)(@storybook/types@7.5.1)(react-dom@18.2.0)(react@18.2.0) + version: github.com/misskey-dev/storybook-addon-misskey-theme/cf583db098365b2ccc81a82f63ca9c93bc32b640(@storybook/blocks@7.5.2)(@storybook/components@7.5.1)(@storybook/core-events@7.5.2)(@storybook/manager-api@7.5.2)(@storybook/preview-api@7.5.2)(@storybook/theming@7.5.2)(@storybook/types@7.5.2)(react-dom@18.2.0)(react@18.2.0) summaly: specifier: github:misskey-dev/summaly version: github.com/misskey-dev/summaly/d2d8db49943ccb201c1b1b283e9d0a630519fac7 @@ -988,7 +988,7 @@ importers: version: 1.0.3 vitest: specifier: 0.34.6 - version: 0.34.6(happy-dom@10.0.3)(sass@1.69.5)(terser@5.22.0) + version: 0.34.6(happy-dom@10.0.3)(sass@1.69.5)(terser@5.24.0) vitest-fetch-mock: specifier: 0.2.2 version: 0.2.2(vitest@0.34.6) @@ -1015,29 +1015,29 @@ importers: version: 4.4.0 devDependencies: '@microsoft/api-extractor': - specifier: 7.38.0 - version: 7.38.0(@types/node@20.8.9) + specifier: 7.38.1 + version: 7.38.1(@types/node@20.8.10) '@swc/jest': specifier: 0.2.29 version: 0.2.29(@swc/core@1.3.95) '@types/jest': - specifier: 29.5.6 - version: 29.5.6 + specifier: 29.5.7 + version: 29.5.7 '@types/node': - specifier: 20.8.9 - version: 20.8.9 + specifier: 20.8.10 + version: 20.8.10 '@typescript-eslint/eslint-plugin': - specifier: 6.9.0 - version: 6.9.0(@typescript-eslint/parser@6.9.0)(eslint@8.52.0)(typescript@5.2.2) + specifier: 6.9.1 + version: 6.9.1(@typescript-eslint/parser@6.9.1)(eslint@8.52.0)(typescript@5.2.2) '@typescript-eslint/parser': - specifier: 6.9.0 - version: 6.9.0(eslint@8.52.0)(typescript@5.2.2) + specifier: 6.9.1 + version: 6.9.1(eslint@8.52.0)(typescript@5.2.2) eslint: specifier: 8.52.0 version: 8.52.0 jest: specifier: 29.7.0 - version: 29.7.0(@types/node@20.8.9) + version: 29.7.0(@types/node@20.8.10) jest-fetch-mock: specifier: 3.0.3 version: 3.0.3 @@ -1067,8 +1067,8 @@ importers: version: link:../misskey-js devDependencies: '@typescript-eslint/parser': - specifier: 6.9.0 - version: 6.9.0(eslint@8.52.0)(typescript@5.2.2) + specifier: 6.9.1 + version: 6.9.1(eslint@8.52.0)(typescript@5.2.2) '@typescript/lib-webworker': specifier: npm:@types/serviceworker@0.0.67 version: /@types/serviceworker@0.0.67 @@ -1077,7 +1077,7 @@ importers: version: 8.52.0 eslint-plugin-import: specifier: 2.29.0 - version: 2.29.0(@typescript-eslint/parser@6.9.0)(eslint@8.52.0) + version: 2.29.0(@typescript-eslint/parser@6.9.1)(eslint@8.52.0) typescript: specifier: 5.2.2 version: 5.2.2 @@ -1807,7 +1807,7 @@ packages: '@babel/helper-plugin-utils': 7.22.5 debug: 4.3.4(supports-color@8.1.1) lodash.debounce: 4.0.8 - resolve: 1.22.3 + resolve: 1.22.8 transitivePeerDependencies: - supports-color dev: true @@ -1978,6 +1978,7 @@ packages: hasBin: true dependencies: '@babel/types': 7.22.11 + dev: false /@babel/parser@7.22.7: resolution: {integrity: sha512-7NF8pOkHP5o2vpmGgNGcfAeCvOYhGLyA3Z4eBQkT1RJlWu47n63bCs93QfJ2hIAFCil7L5P2IWhs1oToVgrL0Q==} @@ -1985,6 +1986,7 @@ packages: hasBin: true dependencies: '@babel/types': 7.22.5 + dev: false /@babel/parser@7.23.0: resolution: {integrity: sha512-vvPKKdMemU85V9WE/l5wZEmImpCtLqbnTvqDS2U1fJ96KrxoW7KrXhNsNCblQlg8Ck4b85yxdTyelsMUgFUXiw==} @@ -3088,7 +3090,7 @@ packages: dependencies: '@bull-board/api': 5.9.1(@bull-board/ui@5.9.1) '@bull-board/ui': 5.9.1 - '@fastify/static': 6.11.2 + '@fastify/static': 6.12.0 '@fastify/view': 8.2.0 ejs: 3.1.9 dev: false @@ -3761,8 +3763,8 @@ packages: fastify-plugin: 4.5.0 dev: false - /@fastify/cors@8.4.0: - resolution: {integrity: sha512-MlVvMTenltToByTpLwlWtO+7dQ3l2J+1OpmGrx9JpSNWo1d+dhfNCOi23zHhxdFhtpDzfwGwCsKu9DTeG7k7nQ==} + /@fastify/cors@8.4.1: + resolution: {integrity: sha512-iYQJtrY3pFiDS5mo5zRaudzg2OcUdJ96PD6xfkKOOEilly5nnrFZx/W6Sce2T79xxlEn2qpU3t5+qS2phS369w==} dependencies: fastify-plugin: 4.5.0 mnemonist: 0.39.5 @@ -3843,8 +3845,8 @@ packages: mime: 3.0.0 dev: false - /@fastify/static@6.11.2: - resolution: {integrity: sha512-EH7mh7q4MfNdT7N07ZVlwsX/ObngMvQ7KBP0FXAuPov99Fjn80KSJMdxQhhYKAKWW1jXiFdrk8X7d6uGWdZFxg==} + /@fastify/static@6.12.0: + resolution: {integrity: sha512-KK1B84E6QD/FcQWxDI2aiUCwHxMJBI1KeCUzm1BwYpPY1b742+jeKruGHP2uOluuM6OkBPI8CIANrXcCRtC2oQ==} dependencies: '@fastify/accept-negotiator': 1.0.0 '@fastify/send': 2.0.1 @@ -3857,7 +3859,7 @@ packages: /@fastify/swagger-ui@1.9.0: resolution: {integrity: sha512-7RTq2bI2cg4k6WsY69k8MZ8GnH6VUSbczJGnTotUKH+fOY9Cg3y8NEvPUREfwRzguI+3N+v8gp6H0UAohayldA==} dependencies: - '@fastify/static': 6.11.2 + '@fastify/static': 6.12.0 fastify-plugin: 4.5.0 openapi-types: 12.1.3 rfdc: 1.3.0 @@ -4012,7 +4014,7 @@ packages: engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: '@jest/types': 29.6.3 - '@types/node': 20.8.9 + '@types/node': 20.8.10 chalk: 4.1.2 jest-message-util: 29.7.0 jest-util: 29.7.0 @@ -4033,14 +4035,14 @@ packages: '@jest/test-result': 29.7.0 '@jest/transform': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 20.8.9 + '@types/node': 20.8.10 ansi-escapes: 4.3.2 chalk: 4.1.2 ci-info: 3.7.1 exit: 0.1.2 graceful-fs: 4.2.11 jest-changed-files: 29.7.0 - jest-config: 29.7.0(@types/node@20.8.9) + jest-config: 29.7.0(@types/node@20.8.10) jest-haste-map: 29.7.0 jest-message-util: 29.7.0 jest-regex-util: 29.6.3 @@ -4075,7 +4077,7 @@ packages: dependencies: '@jest/fake-timers': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 20.8.9 + '@types/node': 20.8.10 jest-mock: 29.7.0 dev: true @@ -4102,7 +4104,7 @@ packages: dependencies: '@jest/types': 29.6.3 '@sinonjs/fake-timers': 10.3.0 - '@types/node': 20.8.9 + '@types/node': 20.8.10 jest-message-util: 29.7.0 jest-mock: 29.7.0 jest-util: 29.7.0 @@ -4135,7 +4137,7 @@ packages: '@jest/transform': 29.7.0 '@jest/types': 29.6.3 '@jridgewell/trace-mapping': 0.3.18 - '@types/node': 20.8.9 + '@types/node': 20.8.10 chalk: 4.1.2 collect-v8-coverage: 1.0.1 exit: 0.1.2 @@ -4229,7 +4231,7 @@ packages: dependencies: '@types/istanbul-lib-coverage': 2.0.4 '@types/istanbul-reports': 3.0.1 - '@types/node': 20.8.9 + '@types/node': 20.8.10 '@types/yargs': 16.0.5 chalk: 4.1.2 dev: true @@ -4241,7 +4243,7 @@ packages: '@jest/schemas': 29.6.3 '@types/istanbul-lib-coverage': 2.0.4 '@types/istanbul-reports': 3.0.1 - '@types/node': 20.8.9 + '@types/node': 20.8.10 '@types/yargs': 17.0.19 chalk: 4.1.2 dev: true @@ -4260,7 +4262,7 @@ packages: magic-string: 0.27.0 react-docgen-typescript: 2.2.2(typescript@5.2.2) typescript: 5.2.2 - vite: 4.5.0(@types/node@20.8.9)(sass@1.69.5)(terser@5.22.0) + vite: 4.5.0(@types/node@20.8.10)(sass@1.69.5)(terser@5.24.0) dev: true /@jridgewell/gen-mapping@0.3.2: @@ -4345,29 +4347,29 @@ packages: react: 18.2.0 dev: true - /@microsoft/api-extractor-model@7.28.2(@types/node@20.8.9): + /@microsoft/api-extractor-model@7.28.2(@types/node@20.8.10): resolution: {integrity: sha512-vkojrM2fo3q4n4oPh4uUZdjJ2DxQ2+RnDQL/xhTWSRUNPF6P4QyrvY357HBxbnltKcYu+nNNolVqc6TIGQ73Ig==} dependencies: '@microsoft/tsdoc': 0.14.2 '@microsoft/tsdoc-config': 0.16.2 - '@rushstack/node-core-library': 3.61.0(@types/node@20.8.9) + '@rushstack/node-core-library': 3.61.0(@types/node@20.8.10) transitivePeerDependencies: - '@types/node' dev: true - /@microsoft/api-extractor@7.38.0(@types/node@20.8.9): - resolution: {integrity: sha512-e1LhZYnfw+JEebuY2bzhw0imDCl1nwjSThTrQqBXl40hrVo6xm3j/1EpUr89QyzgjqmAwek2ZkIVZbrhaR+cqg==} + /@microsoft/api-extractor@7.38.1(@types/node@20.8.10): + resolution: {integrity: sha512-Hxu/RrVpItQ4dzeMyfwlk4lGQFsXMoMS7bYU9YUrpW16hH04PXLRiTXJz77WhBiSGNtTuufz2xh6hWyXhC9JuQ==} hasBin: true dependencies: - '@microsoft/api-extractor-model': 7.28.2(@types/node@20.8.9) + '@microsoft/api-extractor-model': 7.28.2(@types/node@20.8.10) '@microsoft/tsdoc': 0.14.2 '@microsoft/tsdoc-config': 0.16.2 - '@rushstack/node-core-library': 3.61.0(@types/node@20.8.9) + '@rushstack/node-core-library': 3.61.0(@types/node@20.8.10) '@rushstack/rig-package': 0.5.1 - '@rushstack/ts-command-line': 4.16.1 + '@rushstack/ts-command-line': 4.17.0 colors: 1.2.5 lodash: 4.17.21 - resolve: 1.22.3 + resolve: 1.22.8 semver: 7.5.4 source-map: 0.6.1 typescript: 5.0.4 @@ -4611,6 +4613,10 @@ packages: - encoding dev: false + /@one-ini/wasm@0.1.1: + resolution: {integrity: sha512-XuySG1E38YScSJoMlqovLru4KTUNSjgVTIjyh7qMX6aNN5HY5Ct5LhRJdxO79JtTzKfzV/bnWpz+zquYrISsvw==} + dev: true + /@open-draft/until@1.0.3: resolution: {integrity: sha512-Aq58f5HiWdyDlFffbbSjAlv596h/cOnt2DO1w3DOC7OJ5EHs0hd/nycJfiu9RJbT6Yk6F1knnRRXNSpxoIVZ9Q==} dev: true @@ -5193,7 +5199,7 @@ packages: '@babel/runtime': 7.23.2 dev: true - /@rollup/plugin-alias@5.0.1(rollup@4.1.4): + /@rollup/plugin-alias@5.0.1(rollup@4.2.0): resolution: {integrity: sha512-JObvbWdOHoMy9W7SU0lvGhDtWq9PllP5mjpAy+TUslZG/WzOId9u80Hsqq1vCUn9pFJ0cxpdcnAv+QzU2zFH3Q==} engines: {node: '>=14.0.0'} peerDependencies: @@ -5202,11 +5208,11 @@ packages: rollup: optional: true dependencies: - rollup: 4.1.4 + rollup: 4.2.0 slash: 4.0.0 dev: false - /@rollup/plugin-json@6.0.1(rollup@4.1.4): + /@rollup/plugin-json@6.0.1(rollup@4.2.0): resolution: {integrity: sha512-RgVfl5hWMkxN1h/uZj8FVESvPuBJ/uf6ly6GTj0GONnkfoBN5KC0MSz+PN2OLDgYXMhtG0mWpTrkiOjoxAIevw==} engines: {node: '>=14.0.0'} peerDependencies: @@ -5215,12 +5221,12 @@ packages: rollup: optional: true dependencies: - '@rollup/pluginutils': 5.0.5(rollup@4.1.4) - rollup: 4.1.4 + '@rollup/pluginutils': 5.0.5(rollup@4.2.0) + rollup: 4.2.0 dev: false - /@rollup/plugin-replace@5.0.4(rollup@4.1.4): - resolution: {integrity: sha512-E2hmRnlh09K8HGT0rOnnri9OTh+BILGr7NVJGB30S4E3cLRn3J0xjdiyOZ74adPs4NiAMgrjUMGAZNJDBgsdmQ==} + /@rollup/plugin-replace@5.0.5(rollup@4.2.0): + resolution: {integrity: sha512-rYO4fOi8lMaTg/z5Jb+hKnrHHVn8j2lwkqwyS4kTRhKyWOLf2wST2sWXr4WzWiTcoHTp2sTjqUbqIj2E39slKQ==} engines: {node: '>=14.0.0'} peerDependencies: rollup: ^1.20.0||^2.0.0||^3.0.0||^4.0.0 @@ -5228,12 +5234,12 @@ packages: rollup: optional: true dependencies: - '@rollup/pluginutils': 5.0.5(rollup@4.1.4) - magic-string: 0.30.3 - rollup: 4.1.4 + '@rollup/pluginutils': 5.0.5(rollup@4.2.0) + magic-string: 0.30.5 + rollup: 4.2.0 dev: false - /@rollup/pluginutils@5.0.5(rollup@4.1.4): + /@rollup/pluginutils@5.0.5(rollup@4.2.0): resolution: {integrity: sha512-6aEYR910NyP73oHiJglti74iRyOwgFU4x3meH/H8OJx6Ry0j6cOVZ5X/wTvub7G7Ao6qaHBEaNsV3GLJkSsF+Q==} engines: {node: '>=14.0.0'} peerDependencies: @@ -5242,96 +5248,96 @@ packages: rollup: optional: true dependencies: - '@types/estree': 1.0.3 + '@types/estree': 1.0.4 estree-walker: 2.0.2 picomatch: 2.3.1 - rollup: 4.1.4 + rollup: 4.2.0 - /@rollup/rollup-android-arm-eabi@4.1.4: - resolution: {integrity: sha512-WlzkuFvpKl6CLFdc3V6ESPt7gq5Vrimd2Yv9IzKXdOpgbH4cdDSS1JLiACX8toygihtH5OlxyQzhXOph7Ovlpw==} + /@rollup/rollup-android-arm-eabi@4.2.0: + resolution: {integrity: sha512-8PlggAxGxavr+pkCNeV1TM2wTb2o+cUWDg9M1cm9nR27Dsn287uZtSLYXoQqQcmq+sYfF7lHfd3sWJJinH9GmA==} cpu: [arm] os: [android] requiresBuild: true optional: true - /@rollup/rollup-android-arm64@4.1.4: - resolution: {integrity: sha512-D1e+ABe56T9Pq2fD+R3ybe1ylCDzu3tY4Qm2Mj24R9wXNCq35+JbFbOpc2yrroO2/tGhTobmEl2Bm5xfE/n8RA==} + /@rollup/rollup-android-arm64@4.2.0: + resolution: {integrity: sha512-+71T85hbMFrJI+zKQULNmSYBeIhru55PYoF/u75MyeN2FcxE4HSPw20319b+FcZ4lWx2Nx/Ql9tN+hoaD3GH/A==} cpu: [arm64] os: [android] requiresBuild: true optional: true - /@rollup/rollup-darwin-arm64@4.1.4: - resolution: {integrity: sha512-7vTYrgEiOrjxnjsgdPB+4i7EMxbVp7XXtS+50GJYj695xYTTEMn3HZVEvgtwjOUkAP/Q4HDejm4fIAjLeAfhtg==} + /@rollup/rollup-darwin-arm64@4.2.0: + resolution: {integrity: sha512-IIIQLuG43QIElT1JZqUP/zqIdiJl4t9U/boa0GZnQTw9m1X0k3mlBuysbgYXeloLT1RozdL7bgw4lpSaI8GOXw==} cpu: [arm64] os: [darwin] requiresBuild: true optional: true - /@rollup/rollup-darwin-x64@4.1.4: - resolution: {integrity: sha512-eGJVZScKSLZkYjhTAESCtbyTBq9SXeW9+TX36ki5gVhDqJtnQ5k0f9F44jNK5RhAMgIj0Ht9+n6HAgH0gUUyWQ==} + /@rollup/rollup-darwin-x64@4.2.0: + resolution: {integrity: sha512-BXcXvnLaea1Xz900omrGJhxHFJfH9jZ0CpJuVsbjjhpniJ6qiLXz3xA8Lekaa4MuhFcJd4f0r+Ky1G4VFbYhWw==} cpu: [x64] os: [darwin] requiresBuild: true optional: true - /@rollup/rollup-linux-arm-gnueabihf@4.1.4: - resolution: {integrity: sha512-HnigYSEg2hOdX1meROecbk++z1nVJDpEofw9V2oWKqOWzTJlJf1UXVbDE6Hg30CapJxZu5ga4fdAQc/gODDkKg==} + /@rollup/rollup-linux-arm-gnueabihf@4.2.0: + resolution: {integrity: sha512-f4K3MKw9Y4AKi4ANGnmPIglr+S+8tO858YrGVuqAHXxJdVghBmz9CPU9kDpOnGvT4g4vg5uNyIFpOOFvffXyMA==} cpu: [arm] os: [linux] requiresBuild: true optional: true - /@rollup/rollup-linux-arm64-gnu@4.1.4: - resolution: {integrity: sha512-TzJ+N2EoTLWkaClV2CUhBlj6ljXofaYzF/R9HXqQ3JCMnCHQZmQnbnZllw7yTDp0OG5whP4gIPozR4QiX+00MQ==} + /@rollup/rollup-linux-arm64-gnu@4.2.0: + resolution: {integrity: sha512-bNsTYQBgp4H7w6cT7FZhesxpcUPahsSIy4NgdZjH1ZwEoZHxi4XKglj+CsSEkhsKi+x6toVvMylhjRKhEMYfnA==} cpu: [arm64] os: [linux] requiresBuild: true optional: true - /@rollup/rollup-linux-arm64-musl@4.1.4: - resolution: {integrity: sha512-aVPmNMdp6Dlo2tWkAduAD/5TL/NT5uor290YvjvFvCv0Q3L7tVdlD8MOGDL+oRSw5XKXKAsDzHhUOPUNPRHVTQ==} + /@rollup/rollup-linux-arm64-musl@4.2.0: + resolution: {integrity: sha512-Jp1NxBJpGLuxRU2ihrQk4IZ+ia5nffobG6sOFUPW5PMYkF0kQtxEbeDuCa69Xif211vUOcxlOnf5IOEIpTEySA==} cpu: [arm64] os: [linux] requiresBuild: true optional: true - /@rollup/rollup-linux-x64-gnu@4.1.4: - resolution: {integrity: sha512-77Fb79ayiDad0grvVsz4/OB55wJRyw9Ao+GdOBA9XywtHpuq5iRbVyHToGxWquYWlEf6WHFQQnFEttsAzboyKg==} + /@rollup/rollup-linux-x64-gnu@4.2.0: + resolution: {integrity: sha512-3p3iRtQmv2aXw+vtKNyZMLOQ+LSRsqArXjKAh2Oj9cqwfIRe7OXvdkOzWfZOIp1F/x5KJzVAxGxnniF4cMbnsQ==} cpu: [x64] os: [linux] requiresBuild: true optional: true - /@rollup/rollup-linux-x64-musl@4.1.4: - resolution: {integrity: sha512-/t6C6niEQTqmQTVTD9TDwUzxG91Mlk69/v0qodIPUnjjB3wR4UA3klg+orR2SU3Ux2Cgf2pWPL9utK80/1ek8g==} + /@rollup/rollup-linux-x64-musl@4.2.0: + resolution: {integrity: sha512-atih7IF/reUZe4LBLC5Izd44hth2tfDIG8LaPp4/cQXdHh9jabcZEvIeRPrpDq0i/Uu487Qu5gl5KwyAnWajnw==} cpu: [x64] os: [linux] requiresBuild: true optional: true - /@rollup/rollup-win32-arm64-msvc@4.1.4: - resolution: {integrity: sha512-ZY5BHHrOPkMbCuGWFNpJH0t18D2LU6GMYKGaqaWTQ3CQOL57Fem4zE941/Ek5pIsVt70HyDXssVEFQXlITI5Gg==} + /@rollup/rollup-win32-arm64-msvc@4.2.0: + resolution: {integrity: sha512-vYxF3tKJeUE4ceYzpNe2p84RXk/fGK30I8frpRfv/MyPStej/mRlojztkN7Jtd1014HHVeq/tYaMBz/3IxkxZw==} cpu: [arm64] os: [win32] requiresBuild: true optional: true - /@rollup/rollup-win32-ia32-msvc@4.1.4: - resolution: {integrity: sha512-XG2mcRfFrJvYyYaQmvCIvgfkaGinfXrpkBuIbJrTl9SaIQ8HumheWTIwkNz2mktCKwZfXHQNpO7RgXLIGQ7HXA==} + /@rollup/rollup-win32-ia32-msvc@4.2.0: + resolution: {integrity: sha512-1LZJ6zpl93SaPQvas618bMFarVwufWTaczH4ESAbFcwiC4OtznA6Ym+hFPyIGaJaGEB8uMWWac0uXGPXOg5FGA==} cpu: [ia32] os: [win32] requiresBuild: true optional: true - /@rollup/rollup-win32-x64-msvc@4.1.4: - resolution: {integrity: sha512-ANFqWYPwkhIqPmXw8vm0GpBEHiPpqcm99jiiAp71DbCSqLDhrtr019C5vhD0Bw4My+LmMvciZq6IsWHqQpl2ZQ==} + /@rollup/rollup-win32-x64-msvc@4.2.0: + resolution: {integrity: sha512-dgQfFdHCNg08nM5zBmqxqc9vrm0DVzhWotpavbPa0j4//MAOKZEB75yGAfzQE9fUJ+4pvM1239Y4IhL8f6sSog==} cpu: [x64] os: [win32] requiresBuild: true optional: true - /@rushstack/node-core-library@3.61.0(@types/node@20.8.9): + /@rushstack/node-core-library@3.61.0(@types/node@20.8.10): resolution: {integrity: sha512-tdOjdErme+/YOu4gPed3sFS72GhtWCgNV9oDsHDnoLY5oDfwjKUc9Z+JOZZ37uAxcm/OCahDHfuu2ugqrfWAVQ==} peerDependencies: '@types/node': '*' @@ -5339,12 +5345,12 @@ packages: '@types/node': optional: true dependencies: - '@types/node': 20.8.9 + '@types/node': 20.8.10 colors: 1.2.5 fs-extra: 7.0.1 import-lazy: 4.0.0 jju: 1.4.0 - resolve: 1.22.3 + resolve: 1.22.8 semver: 7.5.4 z-schema: 5.0.5 dev: true @@ -5352,12 +5358,12 @@ packages: /@rushstack/rig-package@0.5.1: resolution: {integrity: sha512-pXRYSe29TjRw7rqxD4WS3HN/sRSbfr+tJs4a9uuaSIBAITbUggygdhuG0VrO0EO+QqH91GhYMN4S6KRtOEmGVA==} dependencies: - resolve: 1.22.3 + resolve: 1.22.8 strip-json-comments: 3.1.1 dev: true - /@rushstack/ts-command-line@4.16.1: - resolution: {integrity: sha512-+OCsD553GYVLEmz12yiFjMOzuPeCiZ3f8wTiFHL30ZVXexTyPmgjwXEhg2K2P0a2lVf+8YBy7WtPoflB2Fp8/A==} + /@rushstack/ts-command-line@4.17.0: + resolution: {integrity: sha512-1S0sXuEpZlzKTfvUqNs7Rg4leVkeLJc4Dn9cm+pSIn35a0Ztp5GxPN2gabD2G4RrQoQcJLLyVu+twzrJl1C0eA==} dependencies: '@types/argparse': 1.0.38 argparse: 1.0.10 @@ -5379,8 +5385,8 @@ packages: resolution: {integrity: sha512-RNiOoTPkptFtSVzQevY/yWtZwf/RxyVnPy/OcA9HBM3MlGDnBEYL5B41H0MTn0Uec8Hi+2qUtTfG2WWZBmMejQ==} dev: true - /@simplewebauthn/server@8.3.4: - resolution: {integrity: sha512-ak3RY8Og2hJYxgAb+mM99eqTh93N2gz19w/veaLwGJpLn53HjxrdU+o+BQXiErszyXYbBWk9nhU6bKkw5vWEdA==} + /@simplewebauthn/server@8.3.5: + resolution: {integrity: sha512-Y6FkggTkzUdPk3cG3LLCiv7rqPQ3QI7g//RU9937G1pxogChvx12Y7/AZdWeMoeP+LFl0fPpdc1bIE0etJOxGA==} engines: {node: '>=16.0.0'} dependencies: '@hexagon/base64': 1.1.27 @@ -5894,8 +5900,8 @@ packages: resolution: {integrity: sha512-Uy0+khmZqUrUGm5dmMqVlnvufZRSK0FbYzVgp0UMstm+F5+W2/jnEEQyc9vo1ZR/E5ZI/B1WjjoTqBqwJL6Krw==} dev: false - /@storybook/addon-actions@7.5.1(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-GieD3ru6EslKvwol1cE4lvszQCLB/AkQdnLofnqy1nnYso+hRxmPAw9/O+pWfpUBFdjXsQ7GX09+wEUpOJzepw==} + /@storybook/addon-actions@7.5.2(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-jKF3rrMEu42TgZ5AEszADpVdASDu1S4Ozp1Ymf4akHLkaMOv+yzzD7LV6YGjJz8S2IryndZqE47e6stF0T99uA==} peerDependencies: react: ^16.8.0 || ^17.0.0 || ^18.0.0 react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 @@ -5905,14 +5911,14 @@ packages: react-dom: optional: true dependencies: - '@storybook/client-logger': 7.5.1 - '@storybook/components': 7.5.1(react-dom@18.2.0)(react@18.2.0) - '@storybook/core-events': 7.5.1 + '@storybook/client-logger': 7.5.2 + '@storybook/components': 7.5.2(react-dom@18.2.0)(react@18.2.0) + '@storybook/core-events': 7.5.2 '@storybook/global': 5.0.0 - '@storybook/manager-api': 7.5.1(react-dom@18.2.0)(react@18.2.0) - '@storybook/preview-api': 7.5.1 - '@storybook/theming': 7.5.1(react-dom@18.2.0)(react@18.2.0) - '@storybook/types': 7.5.1 + '@storybook/manager-api': 7.5.2(react-dom@18.2.0)(react@18.2.0) + '@storybook/preview-api': 7.5.2 + '@storybook/theming': 7.5.2(react-dom@18.2.0)(react@18.2.0) + '@storybook/types': 7.5.2 dequal: 2.0.3 lodash: 4.17.21 polished: 4.2.2 @@ -5928,8 +5934,8 @@ packages: - '@types/react-dom' dev: true - /@storybook/addon-backgrounds@7.5.1(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-XZoyJw/WoUlVvQHPTbSAZjKy2SEUjaSmAWgcRync25vp+q0obthjx6UnZHEUuH8Ud07HA3FYzlFtMicH5y/OIQ==} + /@storybook/addon-backgrounds@7.5.2(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-CII8c+db8sVciWjFY0ProZi5E2d+cOc+XlVHCAVaUYp2Bp/1MV7en8etfLK7DEoH6kBVz1+t3TaPU+xjUTR8Ig==} peerDependencies: react: ^16.8.0 || ^17.0.0 || ^18.0.0 react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 @@ -5939,14 +5945,14 @@ packages: react-dom: optional: true dependencies: - '@storybook/client-logger': 7.5.1 - '@storybook/components': 7.5.1(react-dom@18.2.0)(react@18.2.0) - '@storybook/core-events': 7.5.1 + '@storybook/client-logger': 7.5.2 + '@storybook/components': 7.5.2(react-dom@18.2.0)(react@18.2.0) + '@storybook/core-events': 7.5.2 '@storybook/global': 5.0.0 - '@storybook/manager-api': 7.5.1(react-dom@18.2.0)(react@18.2.0) - '@storybook/preview-api': 7.5.1 - '@storybook/theming': 7.5.1(react-dom@18.2.0)(react@18.2.0) - '@storybook/types': 7.5.1 + '@storybook/manager-api': 7.5.2(react-dom@18.2.0)(react@18.2.0) + '@storybook/preview-api': 7.5.2 + '@storybook/theming': 7.5.2(react-dom@18.2.0)(react@18.2.0) + '@storybook/types': 7.5.2 memoizerific: 1.11.3 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) @@ -5956,8 +5962,8 @@ packages: - '@types/react-dom' dev: true - /@storybook/addon-controls@7.5.1(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-Xag1e7TZo04LjUenfobkShpKMxTtwa4xM4bXQA8LjaAGZQ7jipbQ4PE73a17K59S2vqq89VAhkuMJWiyaOFqpw==} + /@storybook/addon-controls@7.5.2(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-f04VcBSfm3yMT1hvaFEwCRbdwiXQbddfEwhwjEVsqd+CA0s600W4L7B8tT4daXMsU6NsZyibev910IKTnDw6xQ==} peerDependencies: react: ^16.8.0 || ^17.0.0 || ^18.0.0 react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 @@ -5967,16 +5973,16 @@ packages: react-dom: optional: true dependencies: - '@storybook/blocks': 7.5.1(react-dom@18.2.0)(react@18.2.0) - '@storybook/client-logger': 7.5.1 - '@storybook/components': 7.5.1(react-dom@18.2.0)(react@18.2.0) - '@storybook/core-common': 7.5.1 - '@storybook/core-events': 7.5.1 - '@storybook/manager-api': 7.5.1(react-dom@18.2.0)(react@18.2.0) - '@storybook/node-logger': 7.5.1 - '@storybook/preview-api': 7.5.1 - '@storybook/theming': 7.5.1(react-dom@18.2.0)(react@18.2.0) - '@storybook/types': 7.5.1 + '@storybook/blocks': 7.5.2(react-dom@18.2.0)(react@18.2.0) + '@storybook/client-logger': 7.5.2 + '@storybook/components': 7.5.2(react-dom@18.2.0)(react@18.2.0) + '@storybook/core-common': 7.5.2 + '@storybook/core-events': 7.5.2 + '@storybook/manager-api': 7.5.2(react-dom@18.2.0)(react@18.2.0) + '@storybook/node-logger': 7.5.2 + '@storybook/preview-api': 7.5.2 + '@storybook/theming': 7.5.2(react-dom@18.2.0)(react@18.2.0) + '@storybook/types': 7.5.2 lodash: 4.17.21 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) @@ -5988,27 +5994,27 @@ packages: - supports-color dev: true - /@storybook/addon-docs@7.5.1(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-+wE67oWIhGK9+kv2sxoY2KDXm3v62RfEgxiksdhtffTP/joOK3p88S0lO+8g0G4xfNGUnBhPtzGMuUxWwaH2Pw==} + /@storybook/addon-docs@7.5.2(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-KxX4XuxK6YcI2mUosFkAlueMon/nby6mp3GRHenuK+nobY0ecfILqSTbsOeO1wqPxALBoq7fLnrgYhdDlandgQ==} 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.5.1(react-dom@18.2.0)(react@18.2.0) - '@storybook/client-logger': 7.5.1 - '@storybook/components': 7.5.1(react-dom@18.2.0)(react@18.2.0) - '@storybook/csf-plugin': 7.5.1 - '@storybook/csf-tools': 7.5.1 + '@storybook/blocks': 7.5.2(react-dom@18.2.0)(react@18.2.0) + '@storybook/client-logger': 7.5.2 + '@storybook/components': 7.5.2(react-dom@18.2.0)(react@18.2.0) + '@storybook/csf-plugin': 7.5.2 + '@storybook/csf-tools': 7.5.2 '@storybook/global': 5.0.0 '@storybook/mdx2-csf': 1.0.0 - '@storybook/node-logger': 7.5.1 - '@storybook/postinstall': 7.5.1 - '@storybook/preview-api': 7.5.1 - '@storybook/react-dom-shim': 7.5.1(react-dom@18.2.0)(react@18.2.0) - '@storybook/theming': 7.5.1(react-dom@18.2.0)(react@18.2.0) - '@storybook/types': 7.5.1 + '@storybook/node-logger': 7.5.2 + '@storybook/postinstall': 7.5.2 + '@storybook/preview-api': 7.5.2 + '@storybook/react-dom-shim': 7.5.2(react-dom@18.2.0)(react@18.2.0) + '@storybook/theming': 7.5.2(react-dom@18.2.0)(react@18.2.0) + '@storybook/types': 7.5.2 fs-extra: 11.1.1 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) @@ -6022,25 +6028,25 @@ packages: - supports-color dev: true - /@storybook/addon-essentials@7.5.1(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-/jaUZXV+mE/2G5PgEpFKm4lFEHluWn6GFR/pg+hphvHOzBGA3Y75JMgUfJ5CDYHB1dAVSf9JrPOd8Eb1tpESfA==} + /@storybook/addon-essentials@7.5.2(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-bN7Q+8J3xVgNoBKCwtyX1O5jXuuJavYdAPiPQGrt6YegUi3gVfr5n/+/mNlu6Fd5AThFcVFei6gS9aiYmU/h8g==} 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.5.1(react-dom@18.2.0)(react@18.2.0) - '@storybook/addon-backgrounds': 7.5.1(react-dom@18.2.0)(react@18.2.0) - '@storybook/addon-controls': 7.5.1(react-dom@18.2.0)(react@18.2.0) - '@storybook/addon-docs': 7.5.1(react-dom@18.2.0)(react@18.2.0) - '@storybook/addon-highlight': 7.5.1 - '@storybook/addon-measure': 7.5.1(react-dom@18.2.0)(react@18.2.0) - '@storybook/addon-outline': 7.5.1(react-dom@18.2.0)(react@18.2.0) - '@storybook/addon-toolbars': 7.5.1(react-dom@18.2.0)(react@18.2.0) - '@storybook/addon-viewport': 7.5.1(react-dom@18.2.0)(react@18.2.0) - '@storybook/core-common': 7.5.1 - '@storybook/manager-api': 7.5.1(react-dom@18.2.0)(react@18.2.0) - '@storybook/node-logger': 7.5.1 - '@storybook/preview-api': 7.5.1 + '@storybook/addon-actions': 7.5.2(react-dom@18.2.0)(react@18.2.0) + '@storybook/addon-backgrounds': 7.5.2(react-dom@18.2.0)(react@18.2.0) + '@storybook/addon-controls': 7.5.2(react-dom@18.2.0)(react@18.2.0) + '@storybook/addon-docs': 7.5.2(react-dom@18.2.0)(react@18.2.0) + '@storybook/addon-highlight': 7.5.2 + '@storybook/addon-measure': 7.5.2(react-dom@18.2.0)(react@18.2.0) + '@storybook/addon-outline': 7.5.2(react-dom@18.2.0)(react@18.2.0) + '@storybook/addon-toolbars': 7.5.2(react-dom@18.2.0)(react@18.2.0) + '@storybook/addon-viewport': 7.5.2(react-dom@18.2.0)(react@18.2.0) + '@storybook/core-common': 7.5.2 + '@storybook/manager-api': 7.5.2(react-dom@18.2.0)(react@18.2.0) + '@storybook/node-logger': 7.5.2 + '@storybook/preview-api': 7.5.2 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) ts-dedent: 2.2.0 @@ -6051,16 +6057,16 @@ packages: - supports-color dev: true - /@storybook/addon-highlight@7.5.1: - resolution: {integrity: sha512-js9OV17kpjRowuaGAPfI9aOn/zzt8P589ACZE+/eYBO9jT65CADwAUxg//Uq0/he+Ac9495pcK3BcYyDeym7/g==} + /@storybook/addon-highlight@7.5.2: + resolution: {integrity: sha512-0vek42fHh7Aeinvkwge0ZTq5VfNsuMSejUv0wHa3zQWgUmlaRlGY8zDw7nG6LiIz6rnTBDTznsfyWenAySSHXg==} dependencies: - '@storybook/core-events': 7.5.1 + '@storybook/core-events': 7.5.2 '@storybook/global': 5.0.0 - '@storybook/preview-api': 7.5.1 + '@storybook/preview-api': 7.5.2 dev: true - /@storybook/addon-interactions@7.5.1(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-m9yohFYil+UBwYKFxHYdsAsn8PBCPl6HY/FSgfrDc5PiqT1Ya7paXopimyy9ok+VQt/RC8sEWIm809ONEoxosw==} + /@storybook/addon-interactions@7.5.2(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-upddA+pvJtU3pRZqu3Chl5QbVfVv2eCIuUxaAG9rvasaqkLTTrNvna8rmnXwqL8sBKHL1XzSyO2sQF4vzQwymg==} peerDependencies: react: ^16.8.0 || ^17.0.0 || ^18.0.0 react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 @@ -6070,16 +6076,16 @@ packages: react-dom: optional: true dependencies: - '@storybook/client-logger': 7.5.1 - '@storybook/components': 7.5.1(react-dom@18.2.0)(react@18.2.0) - '@storybook/core-common': 7.5.1 - '@storybook/core-events': 7.5.1 + '@storybook/client-logger': 7.5.2 + '@storybook/components': 7.5.2(react-dom@18.2.0)(react@18.2.0) + '@storybook/core-common': 7.5.2 + '@storybook/core-events': 7.5.2 '@storybook/global': 5.0.0 - '@storybook/instrumenter': 7.5.1 - '@storybook/manager-api': 7.5.1(react-dom@18.2.0)(react@18.2.0) - '@storybook/preview-api': 7.5.1 - '@storybook/theming': 7.5.1(react-dom@18.2.0)(react@18.2.0) - '@storybook/types': 7.5.1 + '@storybook/instrumenter': 7.5.2 + '@storybook/manager-api': 7.5.2(react-dom@18.2.0)(react@18.2.0) + '@storybook/preview-api': 7.5.2 + '@storybook/theming': 7.5.2(react-dom@18.2.0)(react@18.2.0) + '@storybook/types': 7.5.2 jest-mock: 27.5.1 polished: 4.2.2 react: 18.2.0 @@ -6092,8 +6098,8 @@ packages: - supports-color dev: true - /@storybook/addon-links@7.5.1(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-KDiQYAVNXxuVTB3QLFZxHlfT8q4KnlNKY+0OODvgD5o1FqFpIyUiR5mIBL4SZMRj2EtwrR3KmZ2UPccFZdu9vw==} + /@storybook/addon-links@7.5.2(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-IhUYNOJQYJd8Cnb93l8egnGCGhHV0VHo6HmZT9YjBVuUtetGQbW8Eoh0pQwuklUrJ3jLPwMoKFhN1irQXJjZwQ==} peerDependencies: react: ^16.8.0 || ^17.0.0 || ^18.0.0 react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 @@ -6103,22 +6109,22 @@ packages: react-dom: optional: true dependencies: - '@storybook/client-logger': 7.5.1 - '@storybook/core-events': 7.5.1 + '@storybook/client-logger': 7.5.2 + '@storybook/core-events': 7.5.2 '@storybook/csf': 0.1.0 '@storybook/global': 5.0.0 - '@storybook/manager-api': 7.5.1(react-dom@18.2.0)(react@18.2.0) - '@storybook/preview-api': 7.5.1 - '@storybook/router': 7.5.1(react-dom@18.2.0)(react@18.2.0) - '@storybook/types': 7.5.1 + '@storybook/manager-api': 7.5.2(react-dom@18.2.0)(react@18.2.0) + '@storybook/preview-api': 7.5.2 + '@storybook/router': 7.5.2(react-dom@18.2.0)(react@18.2.0) + '@storybook/types': 7.5.2 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.5.1(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-yR6oELJe0UHYxRijd1YMuGaQRlZ3uABjmrXaFCPnd6agahgTwIJLiK4XamtkVur//LaiJMvtmM2XXrkJ1BvNJw==} + /@storybook/addon-measure@7.5.2(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-fkvORLaYVC/yNMFzHRHmzlvniY7sWtpFxaRW+e4++hGXYV4VQjOBlXzdMxQhAg1DCVWD6QV8xnUQPBGrsEklog==} peerDependencies: react: ^16.8.0 || ^17.0.0 || ^18.0.0 react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 @@ -6128,13 +6134,13 @@ packages: react-dom: optional: true dependencies: - '@storybook/client-logger': 7.5.1 - '@storybook/components': 7.5.1(react-dom@18.2.0)(react@18.2.0) - '@storybook/core-events': 7.5.1 + '@storybook/client-logger': 7.5.2 + '@storybook/components': 7.5.2(react-dom@18.2.0)(react@18.2.0) + '@storybook/core-events': 7.5.2 '@storybook/global': 5.0.0 - '@storybook/manager-api': 7.5.1(react-dom@18.2.0)(react@18.2.0) - '@storybook/preview-api': 7.5.1 - '@storybook/types': 7.5.1 + '@storybook/manager-api': 7.5.2(react-dom@18.2.0)(react@18.2.0) + '@storybook/preview-api': 7.5.2 + '@storybook/types': 7.5.2 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) tiny-invariant: 1.3.1 @@ -6143,8 +6149,8 @@ packages: - '@types/react-dom' dev: true - /@storybook/addon-outline@7.5.1(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-IMi5Bo34/Q5YUG5uD8ZUTBwlpGrkDIV+PUgkyNIbmn9OgozoCH80Fs7YlGluRFODQISpHwio9qvSFRGdSNT56A==} + /@storybook/addon-outline@7.5.2(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-BgDnVzE9xCN1xwuCebK6+apNCtVcw1ToW8N6R3vNgXgNPE1euT3jxkDH7K4RJR24Flu6BotWjX3dqv8k+8xGKw==} peerDependencies: react: ^16.8.0 || ^17.0.0 || ^18.0.0 react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 @@ -6154,13 +6160,13 @@ packages: react-dom: optional: true dependencies: - '@storybook/client-logger': 7.5.1 - '@storybook/components': 7.5.1(react-dom@18.2.0)(react@18.2.0) - '@storybook/core-events': 7.5.1 + '@storybook/client-logger': 7.5.2 + '@storybook/components': 7.5.2(react-dom@18.2.0)(react@18.2.0) + '@storybook/core-events': 7.5.2 '@storybook/global': 5.0.0 - '@storybook/manager-api': 7.5.1(react-dom@18.2.0)(react@18.2.0) - '@storybook/preview-api': 7.5.1 - '@storybook/types': 7.5.1 + '@storybook/manager-api': 7.5.2(react-dom@18.2.0)(react@18.2.0) + '@storybook/preview-api': 7.5.2 + '@storybook/types': 7.5.2 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) ts-dedent: 2.2.0 @@ -6169,8 +6175,8 @@ packages: - '@types/react-dom' dev: true - /@storybook/addon-storysource@7.5.1(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-B+g0n7Ysk1ldeVyey/vfVyGHmcD5p+/49rWMVp39O8xx/nQMYl0UWSHBcqh6AouNx6GVn+J9wmN0LhP2AOFHxA==} + /@storybook/addon-storysource@7.5.2(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-cKw6bNNgguo1V4FZhNIWI1/M0NqxrRWjoWq2MiC+S1YkKrfZcyssHvy0/4XgWcf/vPKWjwD3nGLLt8BJQL+3bg==} peerDependencies: react: ^16.8.0 || ^17.0.0 || ^18.0.0 react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 @@ -6180,13 +6186,13 @@ packages: react-dom: optional: true dependencies: - '@storybook/client-logger': 7.5.1 - '@storybook/components': 7.5.1(react-dom@18.2.0)(react@18.2.0) - '@storybook/manager-api': 7.5.1(react-dom@18.2.0)(react@18.2.0) - '@storybook/preview-api': 7.5.1 - '@storybook/router': 7.5.1(react-dom@18.2.0)(react@18.2.0) - '@storybook/source-loader': 7.5.1(react-dom@18.2.0)(react@18.2.0) - '@storybook/theming': 7.5.1(react-dom@18.2.0)(react@18.2.0) + '@storybook/client-logger': 7.5.2 + '@storybook/components': 7.5.2(react-dom@18.2.0)(react@18.2.0) + '@storybook/manager-api': 7.5.2(react-dom@18.2.0)(react@18.2.0) + '@storybook/preview-api': 7.5.2 + '@storybook/router': 7.5.2(react-dom@18.2.0)(react@18.2.0) + '@storybook/source-loader': 7.5.2(react-dom@18.2.0)(react@18.2.0) + '@storybook/theming': 7.5.2(react-dom@18.2.0)(react@18.2.0) estraverse: 5.3.0 prop-types: 15.8.1 react: 18.2.0 @@ -6198,8 +6204,8 @@ packages: - '@types/react-dom' dev: true - /@storybook/addon-toolbars@7.5.1(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-T88hEEQicV6eCovr5TN2nFgKt7wU0o7pAunP5cU01iiVRj63+oQiVIBB8Xtm4tN+/DsqtyP0BTa6rFwt2ULy8A==} + /@storybook/addon-toolbars@7.5.2(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-BXzb5NOpILFOM7EOBxcF2Qj/q6BicWZ1AvAddORWGmqSa/MxMIa4X52oKXFUTHKBkrTO1X0XqHmoF88qm3TUFg==} peerDependencies: react: ^16.8.0 || ^17.0.0 || ^18.0.0 react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 @@ -6209,11 +6215,11 @@ packages: react-dom: optional: true dependencies: - '@storybook/client-logger': 7.5.1 - '@storybook/components': 7.5.1(react-dom@18.2.0)(react@18.2.0) - '@storybook/manager-api': 7.5.1(react-dom@18.2.0)(react@18.2.0) - '@storybook/preview-api': 7.5.1 - '@storybook/theming': 7.5.1(react-dom@18.2.0)(react@18.2.0) + '@storybook/client-logger': 7.5.2 + '@storybook/components': 7.5.2(react-dom@18.2.0)(react@18.2.0) + '@storybook/manager-api': 7.5.2(react-dom@18.2.0)(react@18.2.0) + '@storybook/preview-api': 7.5.2 + '@storybook/theming': 7.5.2(react-dom@18.2.0)(react@18.2.0) react: 18.2.0 react-dom: 18.2.0(react@18.2.0) transitivePeerDependencies: @@ -6221,8 +6227,8 @@ packages: - '@types/react-dom' dev: true - /@storybook/addon-viewport@7.5.1(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-L57lOGB3LfKgAdLinaZojRQ9W9w2RC0iP9bVaXwrRVeJdpNayfuW4Kh1C8dmacZroB4Zp2U/nEjkSmdcp6uUWg==} + /@storybook/addon-viewport@7.5.2(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-qN5X9vgp0v+WGXyFBHQ/CqjdtmnCoHhUjqXmBxEGBziJz/tZwWwtTGWeUUZpuTjCGiZutLrizOFl5MqQAI+ipg==} peerDependencies: react: ^16.8.0 || ^17.0.0 || ^18.0.0 react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 @@ -6232,13 +6238,13 @@ packages: react-dom: optional: true dependencies: - '@storybook/client-logger': 7.5.1 - '@storybook/components': 7.5.1(react-dom@18.2.0)(react@18.2.0) - '@storybook/core-events': 7.5.1 + '@storybook/client-logger': 7.5.2 + '@storybook/components': 7.5.2(react-dom@18.2.0)(react@18.2.0) + '@storybook/core-events': 7.5.2 '@storybook/global': 5.0.0 - '@storybook/manager-api': 7.5.1(react-dom@18.2.0)(react@18.2.0) - '@storybook/preview-api': 7.5.1 - '@storybook/theming': 7.5.1(react-dom@18.2.0)(react@18.2.0) + '@storybook/manager-api': 7.5.2(react-dom@18.2.0)(react@18.2.0) + '@storybook/preview-api': 7.5.2 + '@storybook/theming': 7.5.2(react-dom@18.2.0)(react@18.2.0) memoizerific: 1.11.3 prop-types: 15.8.1 react: 18.2.0 @@ -6248,36 +6254,36 @@ packages: - '@types/react-dom' dev: true - /@storybook/addons@7.5.1(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-/AdQYqZ1aHHmMrJL68suo1IdyQzRQX7W1sQ3o40juqr/REIpiSZMMSuBcQ6wKXP1NxHMJXEDdb/iSN31Z6DiLg==} + /@storybook/addons@7.5.2(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-hRiy56zQbz72Pwa4F40srUWXKGNIriNkZ1R0j5KPd8ZqoMk1hIeW0S8E7s1vuM/MplnUE/jFJZqu6HQCvbqmGg==} 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.5.1(react-dom@18.2.0)(react@18.2.0) - '@storybook/preview-api': 7.5.1 - '@storybook/types': 7.5.1 + '@storybook/manager-api': 7.5.2(react-dom@18.2.0)(react@18.2.0) + '@storybook/preview-api': 7.5.2 + '@storybook/types': 7.5.2 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) dev: true - /@storybook/blocks@7.5.1(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-7b69p6kDdgmlejEMM2mW6/Lz4OmU/R3Qr+TpKnPcV5iS7ADxRQEQCTEMoQ5RyLJf0vDRh/7Ljn/RMo8Ux3X7JA==} + /@storybook/blocks@7.5.2(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-Tf6XE/YcnWQVBJRcJWJzhkahjSymv6QZuxMAiKFD8v48QRJ8kTxz1tBN9676Ux+l1WwtVWxwvd/0kRKKxE70wQ==} 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.5.1 - '@storybook/client-logger': 7.5.1 - '@storybook/components': 7.5.1(react-dom@18.2.0)(react@18.2.0) - '@storybook/core-events': 7.5.1 + '@storybook/channels': 7.5.2 + '@storybook/client-logger': 7.5.2 + '@storybook/components': 7.5.2(react-dom@18.2.0)(react@18.2.0) + '@storybook/core-events': 7.5.2 '@storybook/csf': 0.1.0 - '@storybook/docs-tools': 7.5.1 + '@storybook/docs-tools': 7.5.2 '@storybook/global': 5.0.0 - '@storybook/manager-api': 7.5.1(react-dom@18.2.0)(react@18.2.0) - '@storybook/preview-api': 7.5.1 - '@storybook/theming': 7.5.1(react-dom@18.2.0)(react@18.2.0) - '@storybook/types': 7.5.1 + '@storybook/manager-api': 7.5.2(react-dom@18.2.0)(react@18.2.0) + '@storybook/preview-api': 7.5.2 + '@storybook/theming': 7.5.2(react-dom@18.2.0)(react@18.2.0) + '@storybook/types': 7.5.2 '@types/lodash': 4.14.191 color-convert: 2.0.1 dequal: 2.0.3 @@ -6299,13 +6305,13 @@ packages: - supports-color dev: true - /@storybook/builder-manager@7.5.1: - resolution: {integrity: sha512-a02kg/DCcYgiTz+7rw4KdvQzif+2lZ+NIFF5U5u8SDoCQuoe3wRT6QBrFYQTxJexA4WfO6cpyRLDJ1rx6NLo8A==} + /@storybook/builder-manager@7.5.2: + resolution: {integrity: sha512-s4gOudrft/E4lQ19YNrzL2VJwMEpdY6z319fTlc16J1F6XZSytw6CIZPs3x9yX5CKf4/leWnN5etODaOx7NajQ==} dependencies: '@fal-works/esbuild-plugin-global-externals': 2.1.2 - '@storybook/core-common': 7.5.1 - '@storybook/manager': 7.5.1 - '@storybook/node-logger': 7.5.1 + '@storybook/core-common': 7.5.2 + '@storybook/manager': 7.5.2 + '@storybook/node-logger': 7.5.2 '@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) @@ -6323,8 +6329,8 @@ packages: - supports-color dev: true - /@storybook/builder-vite@7.5.1(typescript@5.2.2)(vite@4.5.0): - resolution: {integrity: sha512-fsF4LsxroVvjBJoI5AvRA6euhpYrb5euii5kPzrsWXLOn6gDBK0jQ0looep/io7J45MisDjRTPp14A02pi1bkw==} + /@storybook/builder-vite@7.5.2(typescript@5.2.2)(vite@4.5.0): + resolution: {integrity: sha512-j96m5K0ahlAjQY6uUxEbybvmRFc3eMpQ3wiosuunc8NkXtfohXZeRVQowAcVrfPktKMufRNGY86RTYxe7sMABw==} peerDependencies: '@preact/preset-vite': '*' typescript: '>= 4.3.x' @@ -6338,24 +6344,24 @@ packages: vite-plugin-glimmerx: optional: true dependencies: - '@storybook/channels': 7.5.1 - '@storybook/client-logger': 7.5.1 - '@storybook/core-common': 7.5.1 - '@storybook/csf-plugin': 7.5.1 - '@storybook/node-logger': 7.5.1 - '@storybook/preview': 7.5.1 - '@storybook/preview-api': 7.5.1 - '@storybook/types': 7.5.1 + '@storybook/channels': 7.5.2 + '@storybook/client-logger': 7.5.2 + '@storybook/core-common': 7.5.2 + '@storybook/csf-plugin': 7.5.2 + '@storybook/node-logger': 7.5.2 + '@storybook/preview': 7.5.2 + '@storybook/preview-api': 7.5.2 + '@storybook/types': 7.5.2 '@types/find-cache-dir': 3.2.1 browser-assert: 1.2.1 es-module-lexer: 0.9.3 express: 4.18.2 find-cache-dir: 3.3.2 fs-extra: 11.1.1 - magic-string: 0.30.3 + magic-string: 0.30.5 rollup: 3.29.4 typescript: 5.2.2 - vite: 4.5.0(@types/node@20.8.9)(sass@1.69.5)(terser@5.22.0) + vite: 4.5.0(@types/node@20.8.10)(sass@1.69.5)(terser@5.24.0) transitivePeerDependencies: - encoding - supports-color @@ -6372,22 +6378,33 @@ packages: tiny-invariant: 1.3.1 dev: true - /@storybook/cli@7.5.1: - resolution: {integrity: sha512-qKIJs8gqXTy0eSEbt0OW5nsJqiV/2+N1eWoiBiIxoZ+8b0ACXIAUcE/N6AsEDUqIq8AMK7lebqjEfIAt2Sp7Mg==} + /@storybook/channels@7.5.2: + resolution: {integrity: sha512-3SgqWq9NS0XX1QxK3riuaOLrReHWwVhI63u6q1ryDD3SttpmAezZETibOAtzDuk2FKgsyHTmAlmcGQf4ZxhOJA==} + dependencies: + '@storybook/client-logger': 7.5.2 + '@storybook/core-events': 7.5.2 + '@storybook/global': 5.0.0 + qs: 6.11.1 + telejson: 7.2.0 + tiny-invariant: 1.3.1 + dev: true + + /@storybook/cli@7.5.2: + resolution: {integrity: sha512-8JPvA/K66zBmRFpRRwsD0JLqZUODRrGmNuAWx+Bj1K8wqbg68MYnOflbkSIxIVxrfhd39OrffV0h8CwKNL9gAg==} hasBin: true dependencies: '@babel/core': 7.22.11 '@babel/preset-env': 7.22.9(@babel/core@7.22.11) '@babel/types': 7.22.17 '@ndelangen/get-tarball': 3.0.7 - '@storybook/codemod': 7.5.1 - '@storybook/core-common': 7.5.1 - '@storybook/core-events': 7.5.1 - '@storybook/core-server': 7.5.1 - '@storybook/csf-tools': 7.5.1 - '@storybook/node-logger': 7.5.1 - '@storybook/telemetry': 7.5.1 - '@storybook/types': 7.5.1 + '@storybook/codemod': 7.5.2 + '@storybook/core-common': 7.5.2 + '@storybook/core-events': 7.5.2 + '@storybook/core-server': 7.5.2 + '@storybook/csf-tools': 7.5.2 + '@storybook/node-logger': 7.5.2 + '@storybook/telemetry': 7.5.2 + '@storybook/types': 7.5.2 '@types/semver': 7.5.4 '@yarnpkg/fslib': 2.10.3 '@yarnpkg/libzip': 2.3.0 @@ -6430,16 +6447,22 @@ packages: '@storybook/global': 5.0.0 dev: true - /@storybook/codemod@7.5.1: - resolution: {integrity: sha512-PqHGOz/CZnRG9pWgshezCacu524CrXOJrCOwMUP9OMpH0Jk/NhBkHaBZrB8wMjn5hekTj0UmRa/EN8wJm9CCUQ==} + /@storybook/client-logger@7.5.2: + resolution: {integrity: sha512-7YgLItlmiYDzWYexTaRNuHhtFarh9krsI+8l7Yjn9ryoHSTJUcTWx+yPJm1II+PQR8v/x5UgsxzultjgEurfRQ==} + dependencies: + '@storybook/global': 5.0.0 + dev: true + + /@storybook/codemod@7.5.2: + resolution: {integrity: sha512-PxZg0w4OlmFB4dBzB+sCgwmHNke0n1N8vNooxtcuusrLKlbUfmssYRnQn6yRSJw0WfkUYgI10CWxGaamaOFekA==} dependencies: '@babel/core': 7.22.11 '@babel/preset-env': 7.22.9(@babel/core@7.22.11) '@babel/types': 7.22.17 '@storybook/csf': 0.1.0 - '@storybook/csf-tools': 7.5.1 - '@storybook/node-logger': 7.5.1 - '@storybook/types': 7.5.1 + '@storybook/csf-tools': 7.5.2 + '@storybook/node-logger': 7.5.2 + '@storybook/types': 7.5.2 '@types/cross-spawn': 6.0.2 cross-spawn: 7.0.3 globby: 11.1.0 @@ -6474,19 +6497,42 @@ packages: - '@types/react-dom' dev: true - /@storybook/core-client@7.5.1: - resolution: {integrity: sha512-K651UnNKkW8U078CH5rcUqf0siGcfEhwya2yQN5RBb/H78HSLBLdYgzKqxaKtmz+S8DFyWhrgbXZLdBjavozJg==} + /@storybook/components@7.5.2(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-OP+o6AoxoQDbqjk/jdQ1arlc1T8601eCL+rS1dJY9EtAFq7Z0LEFtafhEW/Lx8FotfVGjfCNptH9ODhHU6e5Jw==} + 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.5.1 - '@storybook/preview-api': 7.5.1 + '@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.5.2 + '@storybook/csf': 0.1.0 + '@storybook/global': 5.0.0 + '@storybook/theming': 7.5.2(react-dom@18.2.0)(react@18.2.0) + '@storybook/types': 7.5.2 + memoizerific: 1.11.3 + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + use-resize-observer: 9.1.0(react-dom@18.2.0)(react@18.2.0) + util-deprecate: 1.0.2 + transitivePeerDependencies: + - '@types/react' + - '@types/react-dom' dev: true - /@storybook/core-common@7.5.1: - resolution: {integrity: sha512-/rQ0/xvxFHSGCgIkK74HrgDMnzfYtDYTCoSod/qCTojfs9aciX+JYgvo5ChPnI/LEKWwxRTkrE7pl2u5+C4XGA==} + /@storybook/core-client@7.5.2: + resolution: {integrity: sha512-mMDSBxc7esMCu0FOkama9XYHzIHYGhBj8roX+XaTaLDYXaw/UajcCuzcO7fFBHNn3Vdqh2ufIxlI7359v3IqPw==} dependencies: - '@storybook/core-events': 7.5.1 - '@storybook/node-logger': 7.5.1 - '@storybook/types': 7.5.1 + '@storybook/client-logger': 7.5.2 + '@storybook/preview-api': 7.5.2 + dev: true + + /@storybook/core-common@7.5.2: + resolution: {integrity: sha512-js7fIH4wHS08dBuIVsr3JnwMtKn5O1Izc/Zor4t6PntLWkGGX4X/GxbOkasGX5SkCT1qUtB9RpdPd1sUkLhIgw==} + dependencies: + '@storybook/core-events': 7.5.2 + '@storybook/node-logger': 7.5.2 + '@storybook/types': 7.5.2 '@types/find-cache-dir': 3.2.1 '@types/node': 18.17.15 '@types/node-fetch': 2.6.4 @@ -6518,24 +6564,30 @@ packages: ts-dedent: 2.2.0 dev: true - /@storybook/core-server@7.5.1: - resolution: {integrity: sha512-DD4BXCH91aZJoFuu0cQwG1ZUmE59kG5pazuE3S89zH1GwKS1jWyeAv4EwEfvynT5Ah1ctd8QdCZCSXVzjq0qcw==} + /@storybook/core-events@7.5.2: + resolution: {integrity: sha512-DV8bFEFVKDEvaH87KYPXDE0YEV+Y9yjFv2xxmC9pF8l+MWCtVW72RBLhB+gU5NM1bkHrRDNb0lOJfVGKlhxOog==} + dependencies: + ts-dedent: 2.2.0 + dev: true + + /@storybook/core-server@7.5.2: + resolution: {integrity: sha512-4oXpy1L/NyHiz/OXNUFnSeMLA/+lTgQAlVx86pRbEBDj6snt1/NSx2+yZyFtZ/XTnJ22BPpM8IIrgm95ZlQKmA==} dependencies: '@aw-web-design/x-default-browser': 1.4.126 '@discoveryjs/json-ext': 0.5.7 - '@storybook/builder-manager': 7.5.1 - '@storybook/channels': 7.5.1 - '@storybook/core-common': 7.5.1 - '@storybook/core-events': 7.5.1 + '@storybook/builder-manager': 7.5.2 + '@storybook/channels': 7.5.2 + '@storybook/core-common': 7.5.2 + '@storybook/core-events': 7.5.2 '@storybook/csf': 0.1.0 - '@storybook/csf-tools': 7.5.1 + '@storybook/csf-tools': 7.5.2 '@storybook/docs-mdx': 0.1.0 '@storybook/global': 5.0.0 - '@storybook/manager': 7.5.1 - '@storybook/node-logger': 7.5.1 - '@storybook/preview-api': 7.5.1 - '@storybook/telemetry': 7.5.1 - '@storybook/types': 7.5.1 + '@storybook/manager': 7.5.2 + '@storybook/node-logger': 7.5.2 + '@storybook/preview-api': 7.5.2 + '@storybook/telemetry': 7.5.2 + '@storybook/types': 7.5.2 '@types/detect-port': 1.3.2 '@types/node': 18.17.15 '@types/pretty-hrtime': 1.0.1 @@ -6569,24 +6621,24 @@ packages: - utf-8-validate dev: true - /@storybook/csf-plugin@7.5.1: - resolution: {integrity: sha512-jhV2aCZhSIXUiQDcHtuCg3dyYMzjYHTwLb4cJtkNw4sXqQoTGydTSWYwWigcHFfKGoyQp82rSgE1hE4YYx6iew==} + /@storybook/csf-plugin@7.5.2: + resolution: {integrity: sha512-ndjn1ia2rQLO1r1z6mXv6nipLzJMwWJp31h16lQUXIBQEOiGKjGGvObiuKaad3nNHxWHpGra4zUg7R+54Yw0Hw==} dependencies: - '@storybook/csf-tools': 7.5.1 + '@storybook/csf-tools': 7.5.2 unplugin: 1.4.0 transitivePeerDependencies: - supports-color dev: true - /@storybook/csf-tools@7.5.1: - resolution: {integrity: sha512-YChGbT1/odLS4RLb2HtK7ixM7mH5s7G5nOsWGKXalbza4SFKZIU2UzllEUsA+X8YfxMHnCD5TC3xLfK0ByxmzQ==} + /@storybook/csf-tools@7.5.2: + resolution: {integrity: sha512-yXaEDREc2wvkjYkQqDMatJw23f0fEFhMIf/zBNF7YljeYw0j8jAg/7XI5WJJSN2KTxD/feD/yD+6eaLUXvrneQ==} dependencies: '@babel/generator': 7.22.10 '@babel/parser': 7.23.0 '@babel/traverse': 7.22.11 '@babel/types': 7.22.17 '@storybook/csf': 0.1.0 - '@storybook/types': 7.5.1 + '@storybook/types': 7.5.2 fs-extra: 11.1.1 recast: 0.23.1 ts-dedent: 2.2.0 @@ -6604,12 +6656,12 @@ packages: resolution: {integrity: sha512-JDaBR9lwVY4eSH5W8EGHrhODjygPd6QImRbwjAuJNEnY0Vw4ie3bPkeGfnacB3OBW6u/agqPv2aRlR46JcAQLg==} dev: true - /@storybook/docs-tools@7.5.1: - resolution: {integrity: sha512-tDtQGeKU5Kc2XoqZ5vpeGQrOkRg2UoDiSRS6cLy+M/sMB03Annq0ZngnJXaMiv0DLi2zpWSgWqPgYA3TJTZHBw==} + /@storybook/docs-tools@7.5.2: + resolution: {integrity: sha512-mBiZFhzMA2ub7wX0ho3UqKqKXO+xUi/rqb4KV4PihLKlhThEdzKyYrIZO4W90NOmlp1yUJJcjG8D8SUPuHQoTw==} dependencies: - '@storybook/core-common': 7.5.1 - '@storybook/preview-api': 7.5.1 - '@storybook/types': 7.5.1 + '@storybook/core-common': 7.5.2 + '@storybook/preview-api': 7.5.2 + '@storybook/types': 7.5.2 '@types/doctrine': 0.0.3 doctrine: 3.0.0 lodash: 4.17.21 @@ -6628,14 +6680,14 @@ packages: resolution: {integrity: sha512-FcOqPAXACP0I3oJ/ws6/rrPT9WGhu915Cg8D02a9YxLo0DE9zI+a9A5gRGvmQ09fiWPukqI8ZAEoQEdWUKMQdQ==} dev: true - /@storybook/instrumenter@7.5.1: - resolution: {integrity: sha512-bxRoWVVLlevqTFappXj1JfZlvEceBiBPdQQqTTeeA09VL3UyFWDpPFRn8Wf2C43Vt4V18w+krMyb1KfTk37ROQ==} + /@storybook/instrumenter@7.5.2: + resolution: {integrity: sha512-1l36cc7GaVeTiknhToZcaqI6RsIOfcBgdnvgJ0tiL1naN1GkneCMr+1oLWnlHVrWIOXgh6vNyD792kE3uTLkFg==} dependencies: - '@storybook/channels': 7.5.1 - '@storybook/client-logger': 7.5.1 - '@storybook/core-events': 7.5.1 + '@storybook/channels': 7.5.2 + '@storybook/client-logger': 7.5.2 + '@storybook/core-events': 7.5.2 '@storybook/global': 5.0.0 - '@storybook/preview-api': 7.5.1 + '@storybook/preview-api': 7.5.2 dev: true /@storybook/jest@0.2.3(vitest@0.34.6): @@ -6651,20 +6703,20 @@ packages: - vitest dev: true - /@storybook/manager-api@7.5.1(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-ygwJywluhhE1dpA0jC2D/3NFhMXzFCt+iW4m3cOwexYTuiDWF66AbGOFBx9peE7Wk/Z9doKkf9E3v11enwaidA==} + /@storybook/manager-api@7.5.2(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-WX8GjBkITRQzhQ08WEAVjdDW8QqqIQhWOpFzXUYCxCNzt1eSALI31QQ+M1/MYymw+TOkotC/SMcn/puIAm4rdA==} 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.5.1 - '@storybook/client-logger': 7.5.1 - '@storybook/core-events': 7.5.1 + '@storybook/channels': 7.5.2 + '@storybook/client-logger': 7.5.2 + '@storybook/core-events': 7.5.2 '@storybook/csf': 0.1.0 '@storybook/global': 5.0.0 - '@storybook/router': 7.5.1(react-dom@18.2.0)(react@18.2.0) - '@storybook/theming': 7.5.1(react-dom@18.2.0)(react@18.2.0) - '@storybook/types': 7.5.1 + '@storybook/router': 7.5.2(react-dom@18.2.0)(react@18.2.0) + '@storybook/theming': 7.5.2(react-dom@18.2.0)(react@18.2.0) + '@storybook/types': 7.5.2 dequal: 2.0.3 lodash: 4.17.21 memoizerific: 1.11.3 @@ -6676,31 +6728,31 @@ packages: ts-dedent: 2.2.0 dev: true - /@storybook/manager@7.5.1: - resolution: {integrity: sha512-Jo83sj7KvsZ78vvqjH72ErmQ31Frx6GBLbpeYXZtbAXWl0/LHsxAEVz0Mke+DixzWDyP0/cn+Nw8QUfA+Oz1fg==} + /@storybook/manager@7.5.2: + resolution: {integrity: sha512-5l1z9SpCFQBcHjC5mbfWQ8mPTYFxD8GQ9mNZ6PPrj47yu9TyCRYSQj7A8ZXJiIY1ZEg4a2BCW7fPUYG+lX6Drw==} dev: true /@storybook/mdx2-csf@1.0.0: resolution: {integrity: sha512-dBAnEL4HfxxJmv7LdEYUoZlQbWj9APZNIbOaq0tgF8XkxiIbzqvgB0jhL/9UOrysSDbQWBiCRTu2wOVxedGfmw==} dev: true - /@storybook/node-logger@7.5.1: - resolution: {integrity: sha512-xRMdL5YPe8C9sgJ1R0QD3YbiLjDGrfQk91+GplRD8N9FVCT5dki55Bv5Kp0FpemLYYg6uxAZL5nHmsZHKDKQoA==} + /@storybook/node-logger@7.5.2: + resolution: {integrity: sha512-VIBuwPJOylu8vJofk1VfmqxlhXgbBgV0pCTo/UzdQAbc3w5y+qNRemf8goWxYEY+L9p6oUXqm/i9+bNGyX7/Mw==} dev: true - /@storybook/postinstall@7.5.1: - resolution: {integrity: sha512-+LFUe2nNbmmLPKNt34RXSSC1r40yGGOoP/qlaPFwNOgQN2AZUrfqk6ZYnw6LjmcuHpQInZ4y4WDgbzg6QQL3+w==} + /@storybook/postinstall@7.5.2: + resolution: {integrity: sha512-fKgyV1fAgckDoxQkUGJl5uzjzGC5esC/nITiCjccZFrqxt9mgmz4VAUkMeseD5tfWQ5oFA0Xdgtrrcl39+chnw==} dev: true - /@storybook/preview-api@7.5.1: - resolution: {integrity: sha512-8xjUbuGmHLmw8tfTUCjXSvMM9r96JaexPFmHdwW6XLe71KKdWp8u96vRDRE5648cd+/of15OjaRtakRKqluA/A==} + /@storybook/preview-api@7.5.2: + resolution: {integrity: sha512-rpmHR/09UBSnorDBTcE7JgHUQjZLO146NCI+vbI7Pqfb4QX/8lhwkFr4cuHRAR16mv6DAJbDVoPETO0Z/CH9aw==} dependencies: - '@storybook/channels': 7.5.1 - '@storybook/client-logger': 7.5.1 - '@storybook/core-events': 7.5.1 + '@storybook/channels': 7.5.2 + '@storybook/client-logger': 7.5.2 + '@storybook/core-events': 7.5.2 '@storybook/csf': 0.1.0 '@storybook/global': 5.0.0 - '@storybook/types': 7.5.1 + '@storybook/types': 7.5.2 '@types/qs': 6.9.7 dequal: 2.0.3 lodash: 4.17.21 @@ -6711,12 +6763,12 @@ packages: util-deprecate: 1.0.2 dev: true - /@storybook/preview@7.5.1: - resolution: {integrity: sha512-nfZC103z9Cy27FrJKUr2IjDuVt8Mvn1Z5gZ0TtJihoK7sfLTv29nd/XU9zzrb/epM3o8UEzc63xZZsMaToDbAw==} + /@storybook/preview@7.5.2: + resolution: {integrity: sha512-dA5VpHp0D9nh9/wOzWP8At1wtz/SiaMBbwaiEOFTFUGcPerrkroEWadIlSSB7vgQJ9yWiD4l3KDaS8ANzHWtPQ==} dev: true - /@storybook/react-dom-shim@7.5.1(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-bzTIfLm91O9h3rPYJLtRbmsPARerY3z7MoyvadGp8TikvIvf+WyT/vHujw+20SxnqiZVq5Jv65FFlxc46GGB1Q==} + /@storybook/react-dom-shim@7.5.2(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-x7h3TTLRLs8mrsCBKXbvjBRFms73XrNlm0Lo5Tu/Tf//+pwOFq+2sGBkqbRkYd54jNHhpqNF7+UUdzA93ESnbQ==} peerDependencies: react: ^16.8.0 || ^17.0.0 || ^18.0.0 react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 @@ -6725,8 +6777,8 @@ packages: react-dom: 18.2.0(react@18.2.0) dev: true - /@storybook/react-vite@7.5.1(react-dom@18.2.0)(react@18.2.0)(rollup@4.1.4)(typescript@5.2.2)(vite@4.5.0): - resolution: {integrity: sha512-996/CtOqTjDWMKBGcHG8pwIVlORnoknLD+OTkPXl+aAl9oM9jUtc7psVKLJKGHSHTlVElM2wMTwIHnJ4yeP7bw==} + /@storybook/react-vite@7.5.2(react-dom@18.2.0)(react@18.2.0)(rollup@4.2.0)(typescript@5.2.2)(vite@4.5.0): + resolution: {integrity: sha512-faYGER/qU/jeaMEf5kgx4dNeKno+HkCEviXo/bgRswRg7odW5XydlGGSATOYLYxLhWG6jztaYHYIaDk21KoOVA==} engines: {node: '>=16'} peerDependencies: react: ^16.8.0 || ^17.0.0 || ^18.0.0 @@ -6734,15 +6786,15 @@ packages: vite: ^3.0.0 || ^4.0.0 || ^5.0.0 dependencies: '@joshwooding/vite-plugin-react-docgen-typescript': 0.3.0(typescript@5.2.2)(vite@4.5.0) - '@rollup/pluginutils': 5.0.5(rollup@4.1.4) - '@storybook/builder-vite': 7.5.1(typescript@5.2.2)(vite@4.5.0) - '@storybook/react': 7.5.1(react-dom@18.2.0)(react@18.2.0)(typescript@5.2.2) + '@rollup/pluginutils': 5.0.5(rollup@4.2.0) + '@storybook/builder-vite': 7.5.2(typescript@5.2.2)(vite@4.5.0) + '@storybook/react': 7.5.2(react-dom@18.2.0)(react@18.2.0)(typescript@5.2.2) '@vitejs/plugin-react': 3.1.0(vite@4.5.0) - magic-string: 0.30.3 + magic-string: 0.30.5 react: 18.2.0 react-docgen: 6.0.4 react-dom: 18.2.0(react@18.2.0) - vite: 4.5.0(@types/node@20.8.9)(sass@1.69.5)(terser@5.22.0) + vite: 4.5.0(@types/node@20.8.10)(sass@1.69.5)(terser@5.24.0) transitivePeerDependencies: - '@preact/preset-vite' - encoding @@ -6752,8 +6804,8 @@ packages: - vite-plugin-glimmerx dev: true - /@storybook/react@7.5.1(react-dom@18.2.0)(react@18.2.0)(typescript@5.2.2): - resolution: {integrity: sha512-IG97c30fFSmPyGpJ1awHC/+9XnCTqleeOQwROXjroMHSm8m/JTWpHMVLyM1x7b6VAnBhNHWJ+oXLZe/hXkXfpA==} + /@storybook/react@7.5.2(react-dom@18.2.0)(react@18.2.0)(typescript@5.2.2): + resolution: {integrity: sha512-7X8GtqvRjWmVS112ifChJMxfD15rMVg5m3t6apZqi0uui1S/DImAveHwz8M4FhsElW6MIHs5xK0uJhR9rVQgTA==} engines: {node: '>=16.0.0'} peerDependencies: react: ^16.8.0 || ^17.0.0 || ^18.0.0 @@ -6763,13 +6815,13 @@ packages: typescript: optional: true dependencies: - '@storybook/client-logger': 7.5.1 - '@storybook/core-client': 7.5.1 - '@storybook/docs-tools': 7.5.1 + '@storybook/client-logger': 7.5.2 + '@storybook/core-client': 7.5.2 + '@storybook/docs-tools': 7.5.2 '@storybook/global': 5.0.0 - '@storybook/preview-api': 7.5.1 - '@storybook/react-dom-shim': 7.5.1(react-dom@18.2.0)(react@18.2.0) - '@storybook/types': 7.5.1 + '@storybook/preview-api': 7.5.2 + '@storybook/react-dom-shim': 7.5.2(react-dom@18.2.0)(react@18.2.0) + '@storybook/types': 7.5.2 '@types/escodegen': 0.0.6 '@types/estree': 0.0.51 '@types/node': 18.17.15 @@ -6792,27 +6844,27 @@ packages: - supports-color dev: true - /@storybook/router@7.5.1(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-BvKo+IxWwo3dfIG1+vLtZLT4qqkNHL5GTIozTyX04uqt9ByYZL6SJEzxEa1Xn6Qq/fbdQwzCanNHbTlwiTMf7Q==} + /@storybook/router@7.5.2(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-jlh48TVUlqvGkU8MnkVp9SrCHomWGtQGx1WMK94NMyOPVPTLWzM6LjIybgmHz0MTe4lpzmbiIOfSlU3pPX054w==} 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.5.1 + '@storybook/client-logger': 7.5.2 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.5.1(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-bJLhUxOwnlodZVOkOt/2swW1e0qCvJxrPdPNHj/81jh0kSfJnLWH+QnwOgdIwPG4qW73nlH5BuSUAlGMVPpS8w==} + /@storybook/source-loader@7.5.2(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-9j52EWVXwkK5kBf1EryNCdFJVoel4Mf2STFYqyTyWV0EyYQu+RrSQpqqduaF6tbYY1spDXCnyTg0AmduXazMlw==} 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.5.1 + '@storybook/types': 7.5.2 estraverse: 5.3.0 lodash: 4.17.21 prettier: 2.8.8 @@ -6820,12 +6872,12 @@ packages: react-dom: 18.2.0(react@18.2.0) dev: true - /@storybook/telemetry@7.5.1: - resolution: {integrity: sha512-z9PGouNqvZ2F7vD79qDF4PN7iW3kE3MO7YX0iKTmzgLi4ImKuXIJRF04GRH8r+WYghnbomAyA4o6z9YJMdNuVw==} + /@storybook/telemetry@7.5.2: + resolution: {integrity: sha512-tUgrcIx1vTMhTySp11JbBnWLsaMUNlil5yuOWEJy5i71E4Xy/2hYUtLfxzgXWd/0W7eTl4p2tjUk9uS8AP+S0Q==} dependencies: - '@storybook/client-logger': 7.5.1 - '@storybook/core-common': 7.5.1 - '@storybook/csf-tools': 7.5.1 + '@storybook/client-logger': 7.5.2 + '@storybook/core-common': 7.5.2 + '@storybook/csf-tools': 7.5.2 chalk: 4.1.2 detect-package-manager: 2.0.1 fetch-retry: 5.0.4 @@ -6858,6 +6910,20 @@ packages: react-dom: 18.2.0(react@18.2.0) dev: true + /@storybook/theming@7.5.2(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-DZBTcYErSYvmTYsGz7lKtiIcBe8flBw5Ojp52r3O4GcRYG4AbuUwwVvehz+O1cWaS+UW3HavrcgapERH7ZHd1A==} + 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.5.2 + '@storybook/global': 5.0.0 + memoizerific: 1.11.3 + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + dev: true + /@storybook/types@7.5.1: resolution: {integrity: sha512-ZcMSaqFNx1E+G00nRDUi8kKL7gxJVlnCvbKLNj3V85guy4DkIYAZr31yDqze07gDWbjvKoHIp3tKpgE+2i8upQ==} dependencies: @@ -6867,22 +6933,31 @@ packages: file-system-cache: 2.3.0 dev: true - /@storybook/vue3-vite@7.5.1(@vue/compiler-core@3.3.7)(react-dom@18.2.0)(react@18.2.0)(typescript@5.2.2)(vite@4.5.0)(vue@3.3.7): - resolution: {integrity: sha512-5bO5BactTbyOxxeRw8U6t3FqqfTvVLTefzg1NLDkKt2iAL6lGBSsPTKMgpy3dt+cxdiqEis67niQL68ZtW02Zw==} + /@storybook/types@7.5.2: + resolution: {integrity: sha512-RDKHo6WUES+4nt7uZMfankjxdpYX2EI2GpJ2n2RPcnhzmb/ub1huNTjbzDEYMqY24SppljZeIN57m3Ar6L6f9A==} + dependencies: + '@storybook/channels': 7.5.2 + '@types/babel__core': 7.20.0 + '@types/express': 4.17.17 + file-system-cache: 2.3.0 + dev: true + + /@storybook/vue3-vite@7.5.2(@vue/compiler-core@3.3.7)(react-dom@18.2.0)(react@18.2.0)(typescript@5.2.2)(vite@4.5.0)(vue@3.3.7): + resolution: {integrity: sha512-SChxq87nSFrf3Nywfa/iBNHIoBO0hcvoQdob0ePGSS1tXL2uVEP+A3NFeXb50MXBUSl+ojZpmkEaO4YRt2cZ1w==} 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 || ^5.0.0 dependencies: - '@storybook/builder-vite': 7.5.1(typescript@5.2.2)(vite@4.5.0) - '@storybook/core-server': 7.5.1 - '@storybook/vue3': 7.5.1(@vue/compiler-core@3.3.7)(vue@3.3.7) + '@storybook/builder-vite': 7.5.2(typescript@5.2.2)(vite@4.5.0) + '@storybook/core-server': 7.5.2 + '@storybook/vue3': 7.5.2(@vue/compiler-core@3.3.7)(vue@3.3.7) '@vitejs/plugin-vue': 4.4.0(vite@4.5.0)(vue@3.3.7) - magic-string: 0.30.3 + magic-string: 0.30.5 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) - vite: 4.5.0(@types/node@20.8.9)(sass@1.69.5)(terser@5.22.0) + vite: 4.5.0(@types/node@20.8.10)(sass@1.69.5)(terser@5.24.0) vue-docgen-api: 4.64.1(vue@3.3.7) transitivePeerDependencies: - '@preact/preset-vite' @@ -6896,18 +6971,18 @@ packages: - vue dev: true - /@storybook/vue3@7.5.1(@vue/compiler-core@3.3.7)(vue@3.3.7): - resolution: {integrity: sha512-9srw2rnSYaU45kkunXT8+bX3QMO2QPV6MCWRayKo7Pl+B0H/euHvxPSZb1X8mRpgLtYgVgSNJFoNbk/2Fn8z8g==} + /@storybook/vue3@7.5.2(@vue/compiler-core@3.3.7)(vue@3.3.7): + resolution: {integrity: sha512-k25uwQ33NuQOWEs+0kQUakHzeSu4suCthGv0qCMBoI55mXE7IvMjaPgPDgz/tKVh2qqNa36w1prfqwfWF9uKGw==} engines: {node: '>=16.0.0'} peerDependencies: '@vue/compiler-core': ^3.0.0 vue: ^3.0.0 dependencies: - '@storybook/core-client': 7.5.1 - '@storybook/docs-tools': 7.5.1 + '@storybook/core-client': 7.5.2 + '@storybook/docs-tools': 7.5.2 '@storybook/global': 5.0.0 - '@storybook/preview-api': 7.5.1 - '@storybook/types': 7.5.1 + '@storybook/preview-api': 7.5.2 + '@storybook/types': 7.5.2 '@vue/compiler-core': 3.3.7 lodash: 4.17.21 ts-dedent: 2.2.0 @@ -7343,6 +7418,20 @@ packages: pretty-format: 27.5.1 dev: true + /@testing-library/dom@9.3.3: + resolution: {integrity: sha512-fB0R+fa3AUqbLHWyxXa2kGVtf1Fe1ZZFr0Zp6AIbIAzXb2mKbEXl+PCQNUOaq5lbTab5tfctfXRNsWXxa2f7Aw==} + engines: {node: '>=14'} + dependencies: + '@babel/code-frame': 7.22.13 + '@babel/runtime': 7.23.2 + '@types/aria-query': 5.0.1 + aria-query: 5.1.3 + chalk: 4.1.2 + dom-accessibility-api: 0.5.16 + lz-string: 1.5.0 + pretty-format: 27.5.1 + dev: true + /@testing-library/jest-dom@6.1.2(@types/jest@28.1.3)(vitest@0.34.6): resolution: {integrity: sha512-NP9jl1Q2qDDtx+cqogowtQtmgD2OVs37iMSIsTv5eN5ETRkf26Kj6ugVwA93/gZzzFWQAsgkKkcftDe91BJCkQ==} engines: {node: '>=14', npm: '>=6', yarn: '>=1'} @@ -7370,7 +7459,7 @@ packages: dom-accessibility-api: 0.5.16 lodash: 4.17.21 redent: 3.0.0 - vitest: 0.34.6(happy-dom@10.0.3)(sass@1.69.5)(terser@5.22.0) + vitest: 0.34.6(happy-dom@10.0.3)(sass@1.69.5)(terser@5.24.0) dev: true /@testing-library/user-event@14.4.3(@testing-library/dom@9.2.0): @@ -7382,18 +7471,20 @@ packages: '@testing-library/dom': 9.2.0 dev: true - /@testing-library/vue@7.0.0(@vue/compiler-sfc@3.3.7)(vue@3.3.7): - resolution: {integrity: sha512-JU/q93HGo2qdm1dCgWymkeQlfpC0/0/DBZ2nAHgEAsVZxX11xVIxT7gbXdI7HACQpUbsUWt1zABGU075Fzt9XQ==} + /@testing-library/vue@8.0.0(@vue/compiler-sfc@3.3.7)(vue@3.3.7): + resolution: {integrity: sha512-SP0qEY/SGpdT9+bPuHxYD3P/HCG0ZY8GlGJocVqdLn9EojbdQu69x06trJi1V7RW9tAZai/wwy+ZFcRsTp47kg==} engines: {node: '>=14'} peerDependencies: '@vue/compiler-sfc': '>= 3' vue: '>= 3' dependencies: - '@babel/runtime': 7.21.0 - '@testing-library/dom': 9.2.0 + '@babel/runtime': 7.23.2 + '@testing-library/dom': 9.3.3 '@vue/compiler-sfc': 3.3.7 - '@vue/test-utils': 2.3.2(vue@3.3.7) + '@vue/test-utils': 2.4.1(vue@3.3.7) vue: 3.3.7(typescript@5.2.2) + transitivePeerDependencies: + - '@vue/server-renderer' dev: true /@tokenizer/token@0.3.0: @@ -7418,11 +7509,11 @@ packages: /@types/accepts@1.3.6: resolution: {integrity: sha512-6+qlUg57yfE9OO63wnsJXLeq9cG3gSHBBIxNMOjNrbDRlDnm/NaR7RctfYcVCPq+j7d+MwOxqVEludH5+FKrlg==} dependencies: - '@types/node': 20.8.9 + '@types/node': 20.8.10 dev: true - /@types/archiver@5.3.4: - resolution: {integrity: sha512-Lj7fLBIMwYFgViVVZHEdExZC3lVYsl+QL0VmdNdIzGZH544jHveYWij6qdnBgJQDnR7pMKliN9z2cPZFEbhyPw==} + /@types/archiver@6.0.0: + resolution: {integrity: sha512-I1bHy/iSj8/u552lUjnOMG7rUhVkcbGIoNOj7CB/EMah1In+oQAwVZjw2mTI6qx04e5lF2V0JH/1w78jm/Dejw==} dependencies: '@types/readdir-glob': 1.1.1 dev: true @@ -7438,7 +7529,7 @@ packages: /@types/babel__core@7.20.0: resolution: {integrity: sha512-+n8dL/9GWblDO0iU6eZAwEIJVr5DWigtle+Q6HLOrh/pdbXOhOtqzq8VPPE2zvNJzSKY4vH/z3iT3tn0A3ypiQ==} dependencies: - '@babel/parser': 7.22.16 + '@babel/parser': 7.23.0 '@babel/types': 7.22.17 '@types/babel__generator': 7.6.4 '@types/babel__template': 7.4.1 @@ -7472,7 +7563,7 @@ packages: resolution: {integrity: sha512-N7UDG0/xiPQa2D/XrVJXjkWbpqHCd2sBaB32ggRF2l83RhPfamgKGF8gwwqyksS95qUS5ZYF9aF+lLPRlwI2UA==} dependencies: '@types/connect': 3.4.35 - '@types/node': 20.8.9 + '@types/node': 20.8.10 dev: true /@types/braces@3.0.1: @@ -7484,7 +7575,7 @@ packages: dependencies: '@types/http-cache-semantics': 4.0.1 '@types/keyv': 3.1.4 - '@types/node': 20.8.9 + '@types/node': 20.8.10 '@types/responselike': 1.0.0 dev: false @@ -7517,7 +7608,7 @@ packages: /@types/connect@3.4.35: resolution: {integrity: sha512-cdeYyv4KWoEgpBISTxWvqYsVy444DOqehiF3fM3ne10AmJ62RSyNkUnxMJXHQWRQQX2eR94m5y1IZyDwBjV9FQ==} dependencies: - '@types/node': 20.8.9 + '@types/node': 20.8.10 dev: true /@types/content-disposition@0.5.7: @@ -7531,7 +7622,7 @@ packages: /@types/cross-spawn@6.0.2: resolution: {integrity: sha512-KuwNhp3eza+Rhu8IFI5HUXRP0LIhqH5cAjubUvGXXthh4YYBuP2ntwEX+Cz8GJoZUHlKo247wPWOfA9LYEq4cw==} dependencies: - '@types/node': 20.8.9 + '@types/node': 20.8.10 dev: true /@types/debug@4.1.7: @@ -7575,7 +7666,7 @@ packages: /@types/eslint@7.29.0: resolution: {integrity: sha512-VNcvioYDH8/FxaeTKkM4/TiTwt6pBV9E3OfGmvaw8tPl0rrHCJ4Ll15HRT+pMiFAf/MLQvAzC+6RzUMEL9Ceng==} dependencies: - '@types/estree': 1.0.3 + '@types/estree': 1.0.4 '@types/json-schema': 7.0.12 dev: true @@ -7583,13 +7674,13 @@ packages: resolution: {integrity: sha512-CuPgU6f3eT/XgKKPqKd/gLZV1Xmvf1a2R5POBOGQa6uv82xpls89HU5zKeVoyR8XzHd1RGNOlQlvUe3CFkjWNQ==} dev: true - /@types/estree@1.0.3: - resolution: {integrity: sha512-CS2rOaoQ/eAgAfcTfq6amKG7bsN+EMcgGY4FAFQdvSj2y1ixvOZTUA9mOtCai7E1SYu283XNw7urKK30nP3wkQ==} + /@types/estree@1.0.4: + resolution: {integrity: sha512-2JwWnHK9H+wUZNorf2Zr6ves96WHoWDJIftkcxPKsS7Djta6Zu519LarhRNljPXkpsZR2ZMwNCPeW7omW07BJw==} /@types/express-serve-static-core@4.17.33: resolution: {integrity: sha512-TPBqmR/HRYI3eC2E5hmiivIzv+bidAfXofM+sbonAGvyDhySGw9/PQZFt2BLOrjUUR++4eJVpx6KnLQK1Fk9tA==} dependencies: - '@types/node': 20.8.9 + '@types/node': 20.8.10 '@types/qs': 6.9.7 '@types/range-parser': 1.2.4 dev: true @@ -7610,20 +7701,20 @@ packages: /@types/fluent-ffmpeg@2.1.23: resolution: {integrity: sha512-ZEogBz8YpWflRox2uzGUNOYolQPUDGMNUFhf6fY/cW+6i00oeSTD0tYf4az6/162jv0YsRYi6uxigssnag7E7A==} dependencies: - '@types/node': 20.8.9 + '@types/node': 20.8.10 dev: true /@types/glob@7.2.0: resolution: {integrity: sha512-ZUxbzKl0IfJILTS6t7ip5fQQM/J3TJYubDm3nMbgubNNYS62eXeUpoLUC8/7fJNiFYHTrGPQn7hspDUzIHX3UA==} dependencies: '@types/minimatch': 5.1.2 - '@types/node': 20.8.9 + '@types/node': 20.8.10 dev: true /@types/graceful-fs@4.1.6: resolution: {integrity: sha512-Sig0SNORX9fdW+bQuTEovKj3uHcUL6LQKbCrrqb1X7J6/ReAbhCXRAhc+SMejhLELFj2QcyuxmUooZ4bt5ReSw==} dependencies: - '@types/node': 20.8.9 + '@types/node': 20.8.10 dev: true /@types/hast@2.3.4: @@ -7638,7 +7729,7 @@ packages: /@types/http-link-header@1.0.4: resolution: {integrity: sha512-UeasLdPPSfmX45RH6h1lo932WfQUTuc1adQCpPioqRRVBM25dWwIPDBhM0CjWbdflmvr8vIzQg48yk1JzylhXg==} dependencies: - '@types/node': 20.8.9 + '@types/node': 20.8.10 dev: true /@types/istanbul-lib-coverage@2.0.4: @@ -7664,8 +7755,8 @@ packages: pretty-format: 28.1.3 dev: true - /@types/jest@29.5.6: - resolution: {integrity: sha512-/t9NnzkOpXb4Nfvg17ieHE6EeSjDS2SGSpNYfoLbUAeL/EOueU/RSdOWFpfQTXBEM7BguYW1XQ0EbM+6RlIh6w==} + /@types/jest@29.5.7: + resolution: {integrity: sha512-HLyetab6KVPSiF+7pFcUyMeLsx25LDNDemw9mGsJBkai/oouwrjTycocSDYopMEwFhN2Y4s9oPyOCZNofgSt2g==} dependencies: expect: 29.7.0 pretty-format: 29.7.0 @@ -7682,7 +7773,7 @@ packages: /@types/jsdom@21.1.4: resolution: {integrity: sha512-NzAMLEV0KQ4cBaDx3Ls8VfJUElyDUm1xrtYRmcMK0gF8L5xYbujFVaQlJ50yinQ/d47j2rEP1XUzkiYrw4YRFA==} dependencies: - '@types/node': 20.8.9 + '@types/node': 20.8.10 '@types/tough-cookie': 4.0.2 parse5: 7.1.2 dev: true @@ -7706,7 +7797,7 @@ packages: /@types/keyv@3.1.4: resolution: {integrity: sha512-BQ5aZNSCpj7D6K2ksrRCTmKRLEpnPvWDiLPfoGyhZ++8YtiK9d/3DBKPJgry359X/P1PfruyYwvnvwFjuEiEIg==} dependencies: - '@types/node': 20.8.9 + '@types/node': 20.8.10 dev: false /@types/lodash@4.14.191: @@ -7755,7 +7846,7 @@ packages: /@types/node-fetch@2.6.4: resolution: {integrity: sha512-1ZX9fcN4Rvkvgv4E6PAY5WXUFWFcRWxZa3EW83UjycOB9ljJCedb2CupIP4RZMEwF/M3eTcCihbBRgwtGbg5Rg==} dependencies: - '@types/node': 20.8.9 + '@types/node': 20.8.10 form-data: 3.0.1 /@types/node-fetch@3.0.3: @@ -7768,15 +7859,15 @@ packages: resolution: {integrity: sha512-2yrWpBk32tvV/JAd3HNHWuZn/VDN1P+72hWirHnvsvTGSqbANi+kSeuQR9yAHnbvaBvHDsoTdXV0Fe+iRtHLKA==} dev: true - /@types/node@20.8.9: - resolution: {integrity: sha512-UzykFsT3FhHb1h7yD4CA4YhBHq545JC0YnEz41xkipN88eKQtL6rSgocL5tbAP6Ola9Izm/Aw4Ora8He4x0BHg==} + /@types/node@20.8.10: + resolution: {integrity: sha512-TlgT8JntpcbmKUFzjhsyhGfP2fsiz1Mv56im6enJ905xG1DAYesxJaeSbGqQmAw8OWPdhyJGhGSQGKRNJ45u9w==} dependencies: undici-types: 5.26.5 /@types/nodemailer@6.4.13: resolution: {integrity: sha512-889Vq/77eEpidCwh52sVWpbnqQmIwL8yVBekNbrztVEaWKOCRH3Eq6hjIJh1jwsGDEAJEH0RR+YhpH9mfELLKA==} dependencies: - '@types/node': 20.8.9 + '@types/node': 20.8.10 dev: true /@types/normalize-package-data@2.4.1: @@ -7793,13 +7884,13 @@ packages: resolution: {integrity: sha512-ZnHWsUZf3+gdR4sdsNRtu1jhULpLORn62s5UIvTtXStxy/P6/LiGjbeXVqNkNwCUNlBq6XItc9phMOfxNLX17w==} dependencies: '@types/express': 4.17.17 - '@types/node': 20.8.9 + '@types/node': 20.8.10 dev: true /@types/oauth@0.9.3: resolution: {integrity: sha512-avZiwxSz/WS6EaEjhchzXKgWtlGGYGnEVJoHuQuDLHf7gIW1Gmm9eIxOMuJ6umQNNKZkJ3Uy+C/rLzEvL3I8Sw==} dependencies: - '@types/node': 20.8.9 + '@types/node': 20.8.10 dev: true /@types/offscreencanvas@2019.3.0: @@ -7815,7 +7906,7 @@ packages: /@types/pg@8.10.7: resolution: {integrity: sha512-ksJqHipwYaSEHz9e1fr6H6erjoEdNNaOxwyJgPx9bNeaqOW3iWBQgVHfpwiSAoqGzchfc+ZyRLwEfeCcyYD3uQ==} dependencies: - '@types/node': 20.8.9 + '@types/node': 20.8.10 pg-protocol: 1.6.0 pg-types: 4.0.1 dev: true @@ -7839,7 +7930,7 @@ packages: /@types/qrcode@1.5.4: resolution: {integrity: sha512-ufYqUO7wUBq49hugJry+oIYKscvxIQerJSmXeny215aJKfrepN04DDZP8FCgxvV82kOqKPULCE4PIW3qUmZrRA==} dependencies: - '@types/node': 20.8.9 + '@types/node': 20.8.10 dev: true /@types/qs@6.9.7: @@ -7863,13 +7954,13 @@ packages: dependencies: '@types/prop-types': 15.7.5 '@types/scheduler': 0.16.2 - csstype: 3.1.1 + csstype: 3.1.2 dev: true /@types/readdir-glob@1.1.1: resolution: {integrity: sha512-ImM6TmoF8bgOwvehGviEj3tRdRBbQujr1N+0ypaln/GWjaerOB26jb93vsRHmdMtvVQZQebOlqt2HROark87mQ==} dependencies: - '@types/node': 20.8.9 + '@types/node': 20.8.10 dev: true /@types/rename@1.0.6: @@ -7883,7 +7974,7 @@ packages: /@types/responselike@1.0.0: resolution: {integrity: sha512-85Y2BjiufFzaMIlvJDvTTB8Fxl2xfLo4HgmHzVBz08w4wDePCTjYw66PdrolO0kzli3yam/YCgRufyo1DdQVTA==} dependencies: - '@types/node': 20.8.9 + '@types/node': 20.8.10 dev: false /@types/sanitize-html@2.9.3: @@ -7909,7 +8000,7 @@ packages: resolution: {integrity: sha512-NUo5XNiAdULrJENtJXZZ3fHtfMolzZwczzBbnAeBbqBwG+LaG6YaJtuwzwGSQZ2wsCrxjEhNNjAkKigy3n8teQ==} dependencies: '@types/mime': 3.0.1 - '@types/node': 20.8.9 + '@types/node': 20.8.10 dev: true /@types/serviceworker@0.0.67: @@ -7919,7 +8010,7 @@ packages: /@types/set-cookie-parser@2.4.3: resolution: {integrity: sha512-7QhnH7bi+6KAhBB+Auejz1uV9DHiopZqu7LfR/5gZZTkejJV5nYeZZpgfFoE0N8aDsXuiYpfKyfyMatCwQhyTQ==} dependencies: - '@types/node': 20.8.9 + '@types/node': 20.8.10 dev: true /@types/sharp@0.32.0: @@ -7982,13 +8073,13 @@ packages: /@types/vary@1.1.2: resolution: {integrity: sha512-eg5VDqVer3MPty3Ftd/T1ZMGhhBZVvW9rMn4psghY4JqcleHvyU0y2wkyIzrID34AYzdeXLDuxT3oc0AM8nJJQ==} dependencies: - '@types/node': 20.8.9 + '@types/node': 20.8.10 dev: true /@types/web-push@3.6.2: resolution: {integrity: sha512-v6Wdk1eIVbAJQjEAa1ZxuG3cfOYTd6nSv55BVJMtLQUvQ07v80MPt2Voq/z71WKhy4CORu4L3aH+8SXKX4BD5g==} dependencies: - '@types/node': 20.8.9 + '@types/node': 20.8.10 dev: true /@types/webgl-ext@0.0.30: @@ -7999,13 +8090,13 @@ packages: /@types/websocket@1.0.8: resolution: {integrity: sha512-wvkOpWApbuxVfHhSQ1XrjVN4363vsfLJwEo4AboIZk0g1vJA5nmLp8GXUHuIdf4/Fe7+/V0Efe2HvWiLqHtlqw==} dependencies: - '@types/node': 20.8.9 + '@types/node': 20.8.10 dev: true /@types/ws@8.5.8: resolution: {integrity: sha512-flUksGIQCnJd6sZ1l5dqCEG/ksaoAg/eUwiLAGTJQcfgvZJKF++Ta4bJA6A5aPSJmsr+xlseHn4KLgVlNnvPTg==} dependencies: - '@types/node': 20.8.9 + '@types/node': 20.8.10 dev: true /@types/yargs-parser@21.0.0: @@ -8028,12 +8119,12 @@ packages: resolution: {integrity: sha512-Cn6WYCm0tXv8p6k+A8PvbDG763EDpBoTzHdA+Q/MF6H3sapGjCm9NzoaJncJS9tUKSuCoDs9XHxYYsQDgxR6kw==} requiresBuild: true dependencies: - '@types/node': 20.8.9 + '@types/node': 20.8.10 dev: true optional: true - /@typescript-eslint/eslint-plugin@6.9.0(@typescript-eslint/parser@6.9.0)(eslint@8.52.0)(typescript@5.2.2): - resolution: {integrity: sha512-lgX7F0azQwRPB7t7WAyeHWVfW1YJ9NIgd9mvGhfQpRY56X6AVf8mwM8Wol+0z4liE7XX3QOt8MN1rUKCfSjRIA==} + /@typescript-eslint/eslint-plugin@6.9.1(@typescript-eslint/parser@6.9.1)(eslint@8.52.0)(typescript@5.2.2): + resolution: {integrity: sha512-w0tiiRc9I4S5XSXXrMHOWgHgxbrBn1Ro+PmiYhSg2ZVdxrAJtQgzU5o2m1BfP6UOn7Vxcc6152vFjQfmZR4xEg==} engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: '@typescript-eslint/parser': ^6.0.0 || ^6.0.0-alpha @@ -8044,11 +8135,11 @@ packages: optional: true dependencies: '@eslint-community/regexpp': 4.6.2 - '@typescript-eslint/parser': 6.9.0(eslint@8.52.0)(typescript@5.2.2) - '@typescript-eslint/scope-manager': 6.9.0 - '@typescript-eslint/type-utils': 6.9.0(eslint@8.52.0)(typescript@5.2.2) - '@typescript-eslint/utils': 6.9.0(eslint@8.52.0)(typescript@5.2.2) - '@typescript-eslint/visitor-keys': 6.9.0 + '@typescript-eslint/parser': 6.9.1(eslint@8.52.0)(typescript@5.2.2) + '@typescript-eslint/scope-manager': 6.9.1 + '@typescript-eslint/type-utils': 6.9.1(eslint@8.52.0)(typescript@5.2.2) + '@typescript-eslint/utils': 6.9.1(eslint@8.52.0)(typescript@5.2.2) + '@typescript-eslint/visitor-keys': 6.9.1 debug: 4.3.4(supports-color@8.1.1) eslint: 8.52.0 graphemer: 1.4.0 @@ -8061,8 +8152,8 @@ packages: - supports-color dev: true - /@typescript-eslint/parser@6.9.0(eslint@8.52.0)(typescript@5.2.2): - resolution: {integrity: sha512-GZmjMh4AJ/5gaH4XF2eXA8tMnHWP+Pm1mjQR2QN4Iz+j/zO04b9TOvJYOX2sCNIQHtRStKTxRY1FX7LhpJT4Gw==} + /@typescript-eslint/parser@6.9.1(eslint@8.52.0)(typescript@5.2.2): + resolution: {integrity: sha512-C7AK2wn43GSaCUZ9do6Ksgi2g3mwFkMO3Cis96kzmgudoVaKyt62yNzJOktP0HDLb/iO2O0n2lBOzJgr6Q/cyg==} engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: eslint: ^7.0.0 || ^8.0.0 @@ -8071,10 +8162,10 @@ packages: typescript: optional: true dependencies: - '@typescript-eslint/scope-manager': 6.9.0 - '@typescript-eslint/types': 6.9.0 - '@typescript-eslint/typescript-estree': 6.9.0(typescript@5.2.2) - '@typescript-eslint/visitor-keys': 6.9.0 + '@typescript-eslint/scope-manager': 6.9.1 + '@typescript-eslint/types': 6.9.1 + '@typescript-eslint/typescript-estree': 6.9.1(typescript@5.2.2) + '@typescript-eslint/visitor-keys': 6.9.1 debug: 4.3.4(supports-color@8.1.1) eslint: 8.52.0 typescript: 5.2.2 @@ -8082,16 +8173,16 @@ packages: - supports-color dev: true - /@typescript-eslint/scope-manager@6.9.0: - resolution: {integrity: sha512-1R8A9Mc39n4pCCz9o79qRO31HGNDvC7UhPhv26TovDsWPBDx+Sg3rOZdCELIA3ZmNoWAuxaMOT7aWtGRSYkQxw==} + /@typescript-eslint/scope-manager@6.9.1: + resolution: {integrity: sha512-38IxvKB6NAne3g/+MyXMs2Cda/Sz+CEpmm+KLGEM8hx/CvnSRuw51i8ukfwB/B/sESdeTGet1NH1Wj7I0YXswg==} engines: {node: ^16.0.0 || >=18.0.0} dependencies: - '@typescript-eslint/types': 6.9.0 - '@typescript-eslint/visitor-keys': 6.9.0 + '@typescript-eslint/types': 6.9.1 + '@typescript-eslint/visitor-keys': 6.9.1 dev: true - /@typescript-eslint/type-utils@6.9.0(eslint@8.52.0)(typescript@5.2.2): - resolution: {integrity: sha512-XXeahmfbpuhVbhSOROIzJ+b13krFmgtc4GlEuu1WBT+RpyGPIA4Y/eGnXzjbDj5gZLzpAXO/sj+IF/x2GtTMjQ==} + /@typescript-eslint/type-utils@6.9.1(eslint@8.52.0)(typescript@5.2.2): + resolution: {integrity: sha512-eh2oHaUKCK58qIeYp19F5V5TbpM52680sB4zNSz29VBQPTWIlE/hCj5P5B1AChxECe/fmZlspAWFuRniep1Skg==} engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: eslint: ^7.0.0 || ^8.0.0 @@ -8100,8 +8191,8 @@ packages: typescript: optional: true dependencies: - '@typescript-eslint/typescript-estree': 6.9.0(typescript@5.2.2) - '@typescript-eslint/utils': 6.9.0(eslint@8.52.0)(typescript@5.2.2) + '@typescript-eslint/typescript-estree': 6.9.1(typescript@5.2.2) + '@typescript-eslint/utils': 6.9.1(eslint@8.52.0)(typescript@5.2.2) debug: 4.3.4(supports-color@8.1.1) eslint: 8.52.0 ts-api-utils: 1.0.1(typescript@5.2.2) @@ -8110,13 +8201,13 @@ packages: - supports-color dev: true - /@typescript-eslint/types@6.9.0: - resolution: {integrity: sha512-+KB0lbkpxBkBSiVCuQvduqMJy+I1FyDbdwSpM3IoBS7APl4Bu15lStPjgBIdykdRqQNYqYNMa8Kuidax6phaEw==} + /@typescript-eslint/types@6.9.1: + resolution: {integrity: sha512-BUGslGOb14zUHOUmDB2FfT6SI1CcZEJYfF3qFwBeUrU6srJfzANonwRYHDpLBuzbq3HaoF2XL2hcr01c8f8OaQ==} engines: {node: ^16.0.0 || >=18.0.0} dev: true - /@typescript-eslint/typescript-estree@6.9.0(typescript@5.2.2): - resolution: {integrity: sha512-NJM2BnJFZBEAbCfBP00zONKXvMqihZCrmwCaik0UhLr0vAgb6oguXxLX1k00oQyD+vZZ+CJn3kocvv2yxm4awQ==} + /@typescript-eslint/typescript-estree@6.9.1(typescript@5.2.2): + resolution: {integrity: sha512-U+mUylTHfcqeO7mLWVQ5W/tMLXqVpRv61wm9ZtfE5egz7gtnmqVIw9ryh0mgIlkKk9rZLY3UHygsBSdB9/ftyw==} engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: typescript: '*' @@ -8124,8 +8215,8 @@ packages: typescript: optional: true dependencies: - '@typescript-eslint/types': 6.9.0 - '@typescript-eslint/visitor-keys': 6.9.0 + '@typescript-eslint/types': 6.9.1 + '@typescript-eslint/visitor-keys': 6.9.1 debug: 4.3.4(supports-color@8.1.1) globby: 11.1.0 is-glob: 4.0.3 @@ -8136,8 +8227,8 @@ packages: - supports-color dev: true - /@typescript-eslint/utils@6.9.0(eslint@8.52.0)(typescript@5.2.2): - resolution: {integrity: sha512-5Wf+Jsqya7WcCO8me504FBigeQKVLAMPmUzYgDbWchINNh1KJbxCgVya3EQ2MjvJMVeXl3pofRmprqX6mfQkjQ==} + /@typescript-eslint/utils@6.9.1(eslint@8.52.0)(typescript@5.2.2): + resolution: {integrity: sha512-L1T0A5nFdQrMVunpZgzqPL6y2wVreSyHhKGZryS6jrEN7bD9NplVAyMryUhXsQ4TWLnZmxc2ekar/lSGIlprCA==} engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: eslint: ^7.0.0 || ^8.0.0 @@ -8145,9 +8236,9 @@ packages: '@eslint-community/eslint-utils': 4.4.0(eslint@8.52.0) '@types/json-schema': 7.0.12 '@types/semver': 7.5.4 - '@typescript-eslint/scope-manager': 6.9.0 - '@typescript-eslint/types': 6.9.0 - '@typescript-eslint/typescript-estree': 6.9.0(typescript@5.2.2) + '@typescript-eslint/scope-manager': 6.9.1 + '@typescript-eslint/types': 6.9.1 + '@typescript-eslint/typescript-estree': 6.9.1(typescript@5.2.2) eslint: 8.52.0 semver: 7.5.4 transitivePeerDependencies: @@ -8155,11 +8246,11 @@ packages: - typescript dev: true - /@typescript-eslint/visitor-keys@6.9.0: - resolution: {integrity: sha512-dGtAfqjV6RFOtIP8I0B4ZTBRrlTT8NHHlZZSchQx3qReaoDeXhYM++M4So2AgFK9ZB0emRPA6JI1HkafzA2Ibg==} + /@typescript-eslint/visitor-keys@6.9.1: + resolution: {integrity: sha512-MUaPUe/QRLEffARsmNfmpghuQkW436DvESW+h+M52w0coICHRfD6Np9/K6PdACwnrq1HmuLl+cSPZaJmeVPkSw==} engines: {node: ^16.0.0 || >=18.0.0} dependencies: - '@typescript-eslint/types': 6.9.0 + '@typescript-eslint/types': 6.9.1 eslint-visitor-keys: 3.4.3 dev: true @@ -8178,7 +8269,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.5.0(@types/node@20.8.9)(sass@1.69.5)(terser@5.22.0) + vite: 4.5.0(@types/node@20.8.10)(sass@1.69.5)(terser@5.24.0) transitivePeerDependencies: - supports-color dev: true @@ -8190,7 +8281,7 @@ packages: vite: ^4.0.0 vue: ^3.2.25 dependencies: - vite: 4.5.0(@types/node@20.8.9)(sass@1.69.5)(terser@5.22.0) + vite: 4.5.0(@types/node@20.8.10)(sass@1.69.5)(terser@5.24.0) vue: 3.3.7(typescript@5.2.2) /@vitest/coverage-v8@0.34.6(vitest@0.34.6): @@ -8209,7 +8300,7 @@ packages: std-env: 3.3.3 test-exclude: 6.0.0 v8-to-istanbul: 9.1.0 - vitest: 0.34.6(happy-dom@10.0.3)(sass@1.69.5)(terser@5.22.0) + vitest: 0.34.6(happy-dom@10.0.3)(sass@1.69.5)(terser@5.24.0) transitivePeerDependencies: - supports-color dev: true @@ -8233,7 +8324,7 @@ packages: /@vitest/snapshot@0.34.6: resolution: {integrity: sha512-B3OZqYn6k4VaN011D+ve+AA4whM4QkcwcrwaKwAbyyvS/NB1hCWjFIBQxAQQSQir9/RtyAAGuq+4RJmbn2dH4w==} dependencies: - magic-string: 0.30.3 + magic-string: 0.30.5 pathe: 1.1.1 pretty-format: 29.7.0 dev: true @@ -8271,7 +8362,7 @@ packages: path-browserify: 1.0.1 dev: true - /@vue-macros/common@1.8.0(rollup@4.1.4)(vue@3.3.7): + /@vue-macros/common@1.8.0(rollup@4.2.0)(vue@3.3.7): resolution: {integrity: sha512-auDJJzE0z3uRe3867e0DsqcseKImktNf5ojCZgUKqiVxb2yTlwlgOVAYCgoep9oITqxkXQymSvFeKhedi8PhaA==} engines: {node: '>=16.14.0'} peerDependencies: @@ -8281,9 +8372,9 @@ packages: optional: true dependencies: '@babel/types': 7.22.17 - '@rollup/pluginutils': 5.0.5(rollup@4.1.4) + '@rollup/pluginutils': 5.0.5(rollup@4.2.0) '@vue/compiler-sfc': 3.3.7 - ast-kit: 0.11.2(rollup@4.1.4) + ast-kit: 0.11.2(rollup@4.2.0) local-pkg: 0.4.3 magic-string-ast: 0.3.0 vue: 3.3.7(typescript@5.2.2) @@ -8291,14 +8382,14 @@ packages: - rollup dev: false - /@vue-macros/reactivity-transform@0.3.23(rollup@4.1.4)(vue@3.3.7): + /@vue-macros/reactivity-transform@0.3.23(rollup@4.2.0)(vue@3.3.7): resolution: {integrity: sha512-SubIg1GsNpQdIDJusrcA2FWBgwSY+4jmL0j6SJ6PU85r3rlS+uDhn6AUkqxeZRAdmJnrbGHXDyWUdygOZmWrSg==} engines: {node: '>=16.14.0'} peerDependencies: vue: ^2.7.0 || ^3.2.25 dependencies: '@babel/parser': 7.22.16 - '@vue-macros/common': 1.8.0(rollup@4.1.4)(vue@3.3.7) + '@vue-macros/common': 1.8.0(rollup@4.2.0)(vue@3.3.7) '@vue/compiler-core': 3.3.4 '@vue/shared': 3.3.4 magic-string: 0.30.3 @@ -8315,6 +8406,7 @@ packages: '@vue/shared': 3.3.4 estree-walker: 2.0.2 source-map-js: 1.0.2 + dev: false /@vue/compiler-core@3.3.6: resolution: {integrity: sha512-2JNjemwaNwf+MkkatATVZi7oAH1Hx0B04DdPH3ZoZ8vKC1xZVP7nl4HIsk8XYd3r+/52sqqoz9TWzYc3yE9dqA==} @@ -8333,13 +8425,6 @@ packages: estree-walker: 2.0.2 source-map-js: 1.0.2 - /@vue/compiler-dom@3.3.4: - resolution: {integrity: sha512-wyM+OjOVpuUukIq6p5+nwHYtj9cFroz9cwkfmP9O1nzH68BenTTv0u7/ndggT8cIQlnBeOo6sUT/gvHcIkLA5w==} - dependencies: - '@vue/compiler-core': 3.3.4 - '@vue/shared': 3.3.4 - dev: true - /@vue/compiler-dom@3.3.6: resolution: {integrity: sha512-1MxXcJYMHiTPexjLAJUkNs/Tw2eDf2tY3a0rL+LfuWyiKN2s6jvSwywH3PWD8bKICjfebX3GWx2Os8jkRDq3Ng==} dependencies: @@ -8430,6 +8515,7 @@ packages: /@vue/shared@3.3.4: resolution: {integrity: sha512-7OjdcV8vQ74eiz1TZLzZP4JwqM5fA94K6yntPS5Z25r9HDuGNzaGdgvwKYq6S+MxwF0TFRwe50fIR/MYnakdkQ==} + dev: false /@vue/shared@3.3.6: resolution: {integrity: sha512-Xno5pEqg8SVhomD0kTSmfh30ZEmV/+jZtyh39q6QflrjdJCXah5lrnOLi9KB6a5k5aAHXMXjoMnxlzUkCNfWLQ==} @@ -8438,16 +8524,18 @@ packages: /@vue/shared@3.3.7: resolution: {integrity: sha512-N/tbkINRUDExgcPTBvxNkvHGu504k8lzlNQRITVnm6YjOjwa4r0nnbd4Jb01sNpur5hAllyRJzSK5PvB9PPwRg==} - /@vue/test-utils@2.3.2(vue@3.3.7): - resolution: {integrity: sha512-hJnVaYhbrIm0yBS0+e1Y0Sj85cMyAi+PAbK4JHqMRUZ6S622Goa+G7QzkRSyvCteG8wop7tipuEbHoZo26wsSA==} + /@vue/test-utils@2.4.1(vue@3.3.7): + resolution: {integrity: sha512-VO8nragneNzUZUah6kOjiFmD/gwRjUauG9DROh6oaOeFwX1cZRUNHhdeogE8635cISigXFTtGLUQWx5KCb0xeg==} peerDependencies: + '@vue/server-renderer': ^3.0.1 vue: ^3.0.1 + peerDependenciesMeta: + '@vue/server-renderer': + optional: true dependencies: - js-beautify: 1.14.6 + js-beautify: 1.14.9 vue: 3.3.7(typescript@5.2.2) - optionalDependencies: - '@vue/compiler-dom': 3.3.7 - '@vue/server-renderer': 3.3.7(vue@3.3.7) + vue-component-type-helpers: 1.8.4 dev: true /@webgpu/types@0.1.30: @@ -8548,11 +8636,6 @@ packages: engines: {node: '>=0.4.0'} hasBin: true - /acorn@8.10.0: - resolution: {integrity: sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw==} - engines: {node: '>=0.4.0'} - hasBin: true - /acorn@8.11.2: resolution: {integrity: sha512-nc0Axzp/0FILLEVsm4fNwLCwMttvhEI263QtVPQcbpfZZ3ts0hLsZGOpE6czNlid7CJ9MlyH8reXkpsf3YUY4w==} engines: {node: '>=0.4.0'} @@ -8911,12 +8994,12 @@ packages: resolution: {integrity: sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==} dev: true - /ast-kit@0.11.2(rollup@4.1.4): + /ast-kit@0.11.2(rollup@4.2.0): resolution: {integrity: sha512-Q0DjXK4ApbVoIf9GLyCo252tUH44iTnD/hiJ2TQaJeydYWSpKk0sI34+WMel8S9Wt5pbLgG02oJ+gkgX5DV3sQ==} engines: {node: '>=16.14.0'} dependencies: '@babel/parser': 7.23.0 - '@rollup/pluginutils': 5.0.5(rollup@4.1.4) + '@rollup/pluginutils': 5.0.5(rollup@4.2.0) pathe: 1.1.1 transitivePeerDependencies: - rollup @@ -9303,11 +9386,11 @@ packages: dependencies: fill-range: 7.0.1 - /broadcast-channel@5.5.1: - resolution: {integrity: sha512-C7LtMmJCIIU07xtJngYE2OxaGTGBsG+wOa0mBSPRpbTF36kqtsXQhpxtCVDTkpe8gpZMn9C6PhH+mZ/js4IabA==} + /broadcast-channel@6.0.0: + resolution: {integrity: sha512-h8ki6RYXq502Eb+zAt4Kni2ahL/lulh0ip+mpnvsMSRC2biBo6AkSBfO6JFTelT+FX88VL0SDd3RKpqlPNw4ng==} dependencies: '@babel/runtime': 7.23.2 - oblivious-set: 1.1.1 + oblivious-set: 1.4.0 p-queue: 6.6.2 unload: 2.4.1 dev: false @@ -9380,8 +9463,8 @@ packages: dependencies: node-gyp-build: 4.6.0 - /bullmq@4.12.6: - resolution: {integrity: sha512-zPTf1H++KAmGY2T6TCkL7PWvoaiBPtTzMWMb4UOz3OxLTTnip6CsD3xsTZzsmu1xOdCbSf/0lO+SU8PeKTpY7w==} + /bullmq@4.12.7: + resolution: {integrity: sha512-wigDuI8dyzY1jaUZLrwMp0L7t2glp0eErnRCYlVwi56DUWYSrzrOB3Vz8SaAmpc3Ro5dS4mBwt7RDJG3jiuJKA==} dependencies: cron-parser: 4.8.1 glob: 8.1.0 @@ -9729,8 +9812,8 @@ packages: engines: {node: '>=10'} requiresBuild: true - /chromatic@7.5.4: - resolution: {integrity: sha512-DiBwsn8yABN6SFSeEf5gTbwGIqhfP+rjrAQENgeLFDUV3vX3tGdI8oVgseaeCwk8tn08ZukrmB/k3ZG9RPJPTA==} + /chromatic@7.6.0: + resolution: {integrity: sha512-4MwlX8EDMyfQKf1NXTdUhJ2b0EYueByaVrF75pdFaOzHH7n3OhzknmQYbUSegLiFhKvHuvM8nZvf9SCajO+Cow==} hasBin: true dev: false @@ -9911,6 +9994,11 @@ packages: resolution: {integrity: sha512-GHuDRO12Sypu2cV70d1dkA2EUmXHgntrzbpvOB+Qy+49ypNfGgFQIC2fhhXbnyrJRynDCAARsT7Ou0M6hirpfw==} dev: true + /commander@10.0.1: + resolution: {integrity: sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug==} + engines: {node: '>=14'} + dev: true + /commander@2.20.3: resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==} @@ -10072,7 +10160,7 @@ packages: readable-stream: 3.6.0 dev: false - /create-jest@29.7.0(@types/node@20.8.9): + /create-jest@29.7.0(@types/node@20.8.10): resolution: {integrity: sha512-Adz2bdH0Vq3F53KEMJOoftQFutWCukm6J24wbPWRO4k1kMY7gS7ds/uoJkNuV8wDCtWWnuwGcJwpWcih+zEW1Q==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} hasBin: true @@ -10081,7 +10169,7 @@ packages: chalk: 4.1.2 exit: 0.1.2 graceful-fs: 4.2.11 - jest-config: 29.7.0(@types/node@20.8.9) + jest-config: 29.7.0(@types/node@20.8.10) jest-util: 29.7.0 prompts: 2.4.2 transitivePeerDependencies: @@ -10275,10 +10363,6 @@ packages: rrweb-cssom: 0.6.0 dev: false - /csstype@3.1.1: - resolution: {integrity: sha512-DJR/VvkAvSZW9bTouZue2sSxDwdTN92uHjqeKVm+0dAqdfNykRzQ95tay8aXMBAAPpUiq4Qcug2L7neoRh2Egw==} - dev: true - /csstype@3.1.2: resolution: {integrity: sha512-I7K1Uu0MBPzaFKg4nI5Q7Vs2t+3gWWW648spaF+Rg7pI9ds18Ugn+lvg4SHczUdKlHI5LWBXyqfS8+DufyBsgQ==} @@ -10288,8 +10372,8 @@ packages: uniq: 1.0.1 dev: false - /cypress@13.3.3: - resolution: {integrity: sha512-mbdkojHhKB1xbrj7CrKWHi22uFx9P9vQFiR0sYDZZoK99OMp9/ZYN55TO5pjbXmV7xvCJ4JwBoADXjOJK8aCJw==} + /cypress@13.4.0: + resolution: {integrity: sha512-KeWNC9xSHG/ewZURVbaQsBQg2mOKw4XhjJZFKjWbEjgZCdxpPXLpJnfq5Jns1Gvnjp6AlnIfpZfWFlDgVKXdWQ==} engines: {node: ^16.0.0 || ^18.0.0 || >=20.0.0} hasBin: true requiresBuild: true @@ -10765,14 +10849,15 @@ packages: safe-buffer: 5.2.1 dev: false - /editorconfig@0.15.3: - resolution: {integrity: sha512-M9wIMFx96vq0R4F+gRpY3o2exzb8hEj/n9S8unZtHSvYjibBp/iMufSzvmOcV/laG0ZtuTVGtiJggPOSW2r93g==} + /editorconfig@1.0.4: + resolution: {integrity: sha512-L9Qe08KWTlqYMVvMcTIvMAdl1cDUubzRNYL+WfA4bLDMHe4nemKkpmYzkznE1FwLKu0EEmy6obgQKzMJrg4x9Q==} + engines: {node: '>=14'} hasBin: true dependencies: - commander: 2.20.3 - lru-cache: 4.1.5 - semver: 5.7.1 - sigmund: 1.0.1 + '@one-ini/wasm': 0.1.1 + commander: 10.0.1 + minimatch: 9.0.1 + semver: 7.5.4 dev: true /ee-first@1.1.1: @@ -11100,7 +11185,7 @@ packages: - supports-color dev: true - /eslint-module-utils@2.8.0(@typescript-eslint/parser@6.9.0)(eslint-import-resolver-node@0.3.9)(eslint@8.52.0): + /eslint-module-utils@2.8.0(@typescript-eslint/parser@6.9.1)(eslint-import-resolver-node@0.3.9)(eslint@8.52.0): resolution: {integrity: sha512-aWajIYfsqCKRDgUfjEXNN/JlrzauMuSEy5sbd7WXbtW3EH6A6MpwEh42c7qD+MqQo9QMJ6fWLAeIJynx0g6OAw==} engines: {node: '>=4'} peerDependencies: @@ -11121,7 +11206,7 @@ packages: eslint-import-resolver-webpack: optional: true dependencies: - '@typescript-eslint/parser': 6.9.0(eslint@8.52.0)(typescript@5.2.2) + '@typescript-eslint/parser': 6.9.1(eslint@8.52.0)(typescript@5.2.2) debug: 3.2.7(supports-color@5.5.0) eslint: 8.52.0 eslint-import-resolver-node: 0.3.9 @@ -11129,7 +11214,7 @@ packages: - supports-color dev: true - /eslint-plugin-import@2.29.0(@typescript-eslint/parser@6.9.0)(eslint@8.52.0): + /eslint-plugin-import@2.29.0(@typescript-eslint/parser@6.9.1)(eslint@8.52.0): resolution: {integrity: sha512-QPOO5NO6Odv5lpoTkddtutccQjysJuFxoPS7fAHO+9m9udNHvTCPSAMW9zGAYj8lAIdr40I8yPCdUYrncXtrwg==} engines: {node: '>=4'} peerDependencies: @@ -11139,7 +11224,7 @@ packages: '@typescript-eslint/parser': optional: true dependencies: - '@typescript-eslint/parser': 6.9.0(eslint@8.52.0)(typescript@5.2.2) + '@typescript-eslint/parser': 6.9.1(eslint@8.52.0)(typescript@5.2.2) array-includes: 3.1.7 array.prototype.findlastindex: 1.2.3 array.prototype.flat: 1.3.2 @@ -11148,7 +11233,7 @@ packages: doctrine: 2.1.0 eslint: 8.52.0 eslint-import-resolver-node: 0.3.9 - eslint-module-utils: 2.8.0(@typescript-eslint/parser@6.9.0)(eslint-import-resolver-node@0.3.9)(eslint@8.52.0) + eslint-module-utils: 2.8.0(@typescript-eslint/parser@6.9.1)(eslint-import-resolver-node@0.3.9)(eslint@8.52.0) hasown: 2.0.0 is-core-module: 2.13.1 is-glob: 4.0.3 @@ -11286,7 +11371,7 @@ packages: /estree-walker@3.0.3: resolution: {integrity: sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==} dependencies: - '@types/estree': 1.0.3 + '@types/estree': 1.0.4 dev: false /esutils@2.0.3: @@ -13278,7 +13363,7 @@ packages: '@jest/expect': 29.7.0 '@jest/test-result': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 20.8.9 + '@types/node': 20.8.10 chalk: 4.1.2 co: 4.6.0 dedent: 1.3.0 @@ -13299,7 +13384,7 @@ packages: - supports-color dev: true - /jest-cli@29.7.0(@types/node@20.8.9): + /jest-cli@29.7.0(@types/node@20.8.10): resolution: {integrity: sha512-OVVobw2IubN/GSYsxETi+gOe7Ka59EFMR/twOU3Jb2GnKKeMGJB5SGUUrEz3SFVmJASUdZUzy83sLNNQ2gZslg==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} hasBin: true @@ -13313,10 +13398,10 @@ packages: '@jest/test-result': 29.7.0 '@jest/types': 29.6.3 chalk: 4.1.2 - create-jest: 29.7.0(@types/node@20.8.9) + create-jest: 29.7.0(@types/node@20.8.10) exit: 0.1.2 import-local: 3.1.0 - jest-config: 29.7.0(@types/node@20.8.9) + jest-config: 29.7.0(@types/node@20.8.10) jest-util: 29.7.0 jest-validate: 29.7.0 yargs: 17.6.2 @@ -13327,7 +13412,7 @@ packages: - ts-node dev: true - /jest-config@29.7.0(@types/node@20.8.9): + /jest-config@29.7.0(@types/node@20.8.10): resolution: {integrity: sha512-uXbpfeQ7R6TZBqI3/TxCU4q4ttk3u0PJeC+E0zbfSoSjq6bJ7buBPxzQPL0ifrkY4DNu4JUdk0ImlBUYi840eQ==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} peerDependencies: @@ -13342,7 +13427,7 @@ packages: '@babel/core': 7.22.11 '@jest/test-sequencer': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 20.8.9 + '@types/node': 20.8.10 babel-jest: 29.7.0(@babel/core@7.22.11) chalk: 4.1.2 ci-info: 3.7.1 @@ -13422,7 +13507,7 @@ packages: '@jest/environment': 29.7.0 '@jest/fake-timers': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 20.8.9 + '@types/node': 20.8.10 jest-mock: 29.7.0 jest-util: 29.7.0 dev: true @@ -13452,7 +13537,7 @@ packages: dependencies: '@jest/types': 29.6.3 '@types/graceful-fs': 4.1.6 - '@types/node': 20.8.9 + '@types/node': 20.8.10 anymatch: 3.1.3 fb-watchman: 2.0.2 graceful-fs: 4.2.11 @@ -13513,7 +13598,7 @@ packages: engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} dependencies: '@jest/types': 27.5.1 - '@types/node': 20.8.9 + '@types/node': 20.8.10 dev: true /jest-mock@29.7.0: @@ -13521,7 +13606,7 @@ packages: engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: '@jest/types': 29.6.3 - '@types/node': 20.8.9 + '@types/node': 20.8.10 jest-util: 29.7.0 dev: true @@ -13576,7 +13661,7 @@ packages: '@jest/test-result': 29.7.0 '@jest/transform': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 20.8.9 + '@types/node': 20.8.10 chalk: 4.1.2 emittery: 0.13.1 graceful-fs: 4.2.11 @@ -13607,7 +13692,7 @@ packages: '@jest/test-result': 29.7.0 '@jest/transform': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 20.8.9 + '@types/node': 20.8.10 chalk: 4.1.2 cjs-module-lexer: 1.2.2 collect-v8-coverage: 1.0.1 @@ -13659,7 +13744,7 @@ packages: engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: '@jest/types': 29.6.3 - '@types/node': 20.8.9 + '@types/node': 20.8.10 chalk: 4.1.2 ci-info: 3.7.1 graceful-fs: 4.2.11 @@ -13684,7 +13769,7 @@ packages: dependencies: '@jest/test-result': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 20.8.9 + '@types/node': 20.8.10 ansi-escapes: 4.3.2 chalk: 4.1.2 emittery: 0.13.1 @@ -13703,13 +13788,13 @@ packages: resolution: {integrity: sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - '@types/node': 20.8.9 + '@types/node': 20.8.10 jest-util: 29.7.0 merge-stream: 2.0.0 supports-color: 8.1.1 dev: true - /jest@29.7.0(@types/node@20.8.9): + /jest@29.7.0(@types/node@20.8.10): resolution: {integrity: sha512-NIy3oAFp9shda19hy4HK0HRTWKtPJmGdnvywu01nOqNC2vZg+Z+fvJDxpMQA88eb2I9EcafcdjYgsDthnYTvGw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} hasBin: true @@ -13722,7 +13807,7 @@ packages: '@jest/core': 29.7.0 '@jest/types': 29.6.3 import-local: 3.1.0 - jest-cli: 29.7.0(@types/node@20.8.9) + jest-cli: 29.7.0(@types/node@20.8.10) transitivePeerDependencies: - '@types/node' - babel-plugin-macros @@ -13752,13 +13837,13 @@ packages: resolution: {integrity: sha512-WZzeDOEtTOBK4Mdsar0IqEU5sMr3vSV2RqkAIzUEV2BHnUfKGyswWFPFwK5EeDo93K3FohSHbLAjj0s1Wzd+dg==} dev: false - /js-beautify@1.14.6: - resolution: {integrity: sha512-GfofQY5zDp+cuHc+gsEXKPpNw2KbPddreEo35O6jT6i0RVK6LhsoYBhq5TvK4/n74wnA0QbK8gGd+jUZwTMKJw==} - engines: {node: '>=10'} + /js-beautify@1.14.9: + resolution: {integrity: sha512-coM7xq1syLcMyuVGyToxcj2AlzhkDjmfklL8r0JgJ7A76wyGMpJ1oA35mr4APdYNO/o/4YY8H54NQIJzhMbhBg==} + engines: {node: '>=12'} hasBin: true dependencies: config-chain: 1.1.13 - editorconfig: 0.15.3 + editorconfig: 1.0.4 glob: 8.1.0 nopt: 6.0.0 dev: true @@ -14239,6 +14324,7 @@ packages: dependencies: pseudomap: 1.0.2 yallist: 2.1.2 + dev: false /lru-cache@5.1.1: resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==} @@ -14543,6 +14629,13 @@ packages: dependencies: brace-expansion: 2.0.1 + /minimatch@9.0.1: + resolution: {integrity: sha512-0jWhJpD/MdhPXwPuiRkCbfYfSKp2qnn2eOc279qI7f+osl/l+prKSrvhg157zSYvx/1nmgn2NqdT6k2Z7zSH9w==} + engines: {node: '>=16 || 14 >=14.17'} + dependencies: + brace-expansion: 2.0.1 + dev: true + /minimatch@9.0.3: resolution: {integrity: sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==} engines: {node: '>=16 || 14 >=14.17'} @@ -15235,8 +15328,9 @@ packages: resolution: {integrity: sha512-lgHwxlxV1qIg1Eap7LgIeoBWIMFibOjbrYPIPJZcI1mmGAI2m3lNYpK12Y+GBdPQ0U1hRwSord7GIaawz962qQ==} dev: false - /oblivious-set@1.1.1: - resolution: {integrity: sha512-Oh+8fK09mgGmAshFdH6hSVco6KZmd1tTwNFWj35OvzdmJTMZtAkbn05zar2iG3v6sDs1JLEtOiBGNb6BHwkb2w==} + /oblivious-set@1.4.0: + resolution: {integrity: sha512-szyd0ou0T8nsAqHtprRcP3WidfsN1TnAR5yWXf2mFCEr5ek3LEOkT6EZ/92Xfs74HIdyhG5WkGxIssMU0jBaeg==} + engines: {node: '>=16'} dev: false /obuf@1.1.2: @@ -16337,6 +16431,7 @@ packages: /pseudomap@1.0.2: resolution: {integrity: sha512-b/YwNhb8lk1Zz2+bXXpS/LK9OisiZZ1SNsSLxN1x2OXVEhW2Ckr/7mWE5vrC1ZTiJlD9g19jWszTmJsB+oEpFQ==} + dev: false /psl@1.9.0: resolution: {integrity: sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==} @@ -16445,8 +16540,8 @@ packages: pump: 2.0.1 dev: true - /punycode@2.3.0: - resolution: {integrity: sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==} + /punycode@2.3.1: + resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} engines: {node: '>=6'} /puppeteer-core@2.1.1: @@ -16655,7 +16750,7 @@ packages: '@types/doctrine': 0.0.6 '@types/resolve': 1.20.3 doctrine: 3.0.0 - resolve: 1.22.3 + resolve: 1.22.8 strip-indent: 4.0.0 transitivePeerDependencies: - supports-color @@ -17104,7 +17199,7 @@ packages: /resolve@1.19.0: resolution: {integrity: sha512-rArEXAgsBG4UgRGcynxWIWKFvh/XZCcS8UJdHhwy91zwAvCZIbcs+vAbflgBnNjYMs/i/i+/Ux6IZhML1yPvxg==} dependencies: - is-core-module: 2.13.0 + is-core-module: 2.13.1 path-parse: 1.0.7 dev: true @@ -17197,23 +17292,23 @@ packages: optionalDependencies: fsevents: 2.3.2 - /rollup@4.1.4: - resolution: {integrity: sha512-U8Yk1lQRKqCkDBip/pMYT+IKaN7b7UesK3fLSTuHBoBJacCE+oBqo/dfG/gkUdQNNB2OBmRP98cn2C2bkYZkyw==} + /rollup@4.2.0: + resolution: {integrity: sha512-deaMa9Z+jPVeBD2dKXv+h7EbdKte9++V2potc/ADqvVgEr6DEJ3ia9u0joarjC2lX/ubaCRYz3QVx0TzuVqAJA==} engines: {node: '>=18.0.0', npm: '>=8.0.0'} hasBin: true optionalDependencies: - '@rollup/rollup-android-arm-eabi': 4.1.4 - '@rollup/rollup-android-arm64': 4.1.4 - '@rollup/rollup-darwin-arm64': 4.1.4 - '@rollup/rollup-darwin-x64': 4.1.4 - '@rollup/rollup-linux-arm-gnueabihf': 4.1.4 - '@rollup/rollup-linux-arm64-gnu': 4.1.4 - '@rollup/rollup-linux-arm64-musl': 4.1.4 - '@rollup/rollup-linux-x64-gnu': 4.1.4 - '@rollup/rollup-linux-x64-musl': 4.1.4 - '@rollup/rollup-win32-arm64-msvc': 4.1.4 - '@rollup/rollup-win32-ia32-msvc': 4.1.4 - '@rollup/rollup-win32-x64-msvc': 4.1.4 + '@rollup/rollup-android-arm-eabi': 4.2.0 + '@rollup/rollup-android-arm64': 4.2.0 + '@rollup/rollup-darwin-arm64': 4.2.0 + '@rollup/rollup-darwin-x64': 4.2.0 + '@rollup/rollup-linux-arm-gnueabihf': 4.2.0 + '@rollup/rollup-linux-arm64-gnu': 4.2.0 + '@rollup/rollup-linux-arm64-musl': 4.2.0 + '@rollup/rollup-linux-x64-gnu': 4.2.0 + '@rollup/rollup-linux-x64-musl': 4.2.0 + '@rollup/rollup-win32-arm64-msvc': 4.2.0 + '@rollup/rollup-win32-ia32-msvc': 4.2.0 + '@rollup/rollup-win32-x64-msvc': 4.2.0 fsevents: 2.3.2 /rrweb-cssom@0.6.0: @@ -17484,10 +17579,6 @@ packages: resolution: {integrity: sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==} dev: true - /sigmund@1.0.1: - resolution: {integrity: sha512-fCvEXfh6NWpm+YSuY2bpXb/VIihqWA6hLsgboC+0nl71Q7N7o2eaCW8mJa/NLvQhs6jpd3VZV4UiUQlV6+lc8g==} - dev: true - /signal-exit@3.0.7: resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==} @@ -17896,11 +17987,11 @@ packages: resolution: {integrity: sha512-siT1RiqlfQnGqgT/YzXVUNsom9S0H1OX+dpdGN1xkyYATo4I6sep5NmsRD/40s3IIOvlCq6akxkqG82urIZW1w==} dev: true - /storybook@7.5.1: - resolution: {integrity: sha512-Wg3j3z5H03PYnEcmlnhf6bls0OtjmsNPsQ93dTV8F4AweqBECwzjf94Wj++NrP3X+WbfMoCbBU6LRFuEyzCCxw==} + /storybook@7.5.2: + resolution: {integrity: sha512-wuB5VdmI6teU2z5iiBEZ2ziNeP6g6Da/dGM7+tWQVUl8bmfOmpEgzgEyS1/XqdOfm+HoZplspwM0XMHOLo/Now==} hasBin: true dependencies: - '@storybook/cli': 7.5.1 + '@storybook/cli': 7.5.2 transitivePeerDependencies: - bufferutil - encoding @@ -18273,13 +18364,13 @@ packages: unique-string: 2.0.0 dev: true - /terser@5.22.0: - resolution: {integrity: sha512-hHZVLgRA2z4NWcN6aS5rQDc+7Dcy58HOf2zbYwmFcQ+ua3h6eEFf5lIDKTzbWwlazPyOZsFQO8V80/IjVNExEw==} + /terser@5.24.0: + resolution: {integrity: sha512-ZpGR4Hy3+wBEzVEnHvstMvqpD/nABNelQn/z2r0fjVWGQsN3bpOLzQlqDxmb4CDZnXq5lpjnQ+mHQLAOpfM5iw==} engines: {node: '>=10'} hasBin: true dependencies: '@jridgewell/source-map': 0.3.5 - acorn: 8.10.0 + acorn: 8.11.2 commander: 2.20.3 source-map-support: 0.5.21 @@ -18444,7 +18535,7 @@ packages: engines: {node: '>=0.8'} dependencies: psl: 1.9.0 - punycode: 2.3.0 + punycode: 2.3.1 dev: false /tough-cookie@4.1.2: @@ -18452,7 +18543,7 @@ packages: engines: {node: '>=6'} dependencies: psl: 1.9.0 - punycode: 2.3.0 + punycode: 2.3.1 universalify: 0.2.0 url-parse: 1.5.10 dev: false @@ -18462,7 +18553,7 @@ packages: engines: {node: '>=6'} dependencies: psl: 1.9.0 - punycode: 2.3.0 + punycode: 2.3.1 universalify: 0.2.0 url-parse: 1.5.10 dev: true @@ -18475,7 +18566,7 @@ packages: resolution: {integrity: sha512-2lv/66T7e5yNyhAAC4NaKe5nVavzuGJQVVtRYLyQ2OI8tsJ61PMLlelehb0wi2Hx6+hT/OJUWZcw8MjlSRnxvw==} engines: {node: '>=14'} dependencies: - punycode: 2.3.0 + punycode: 2.3.1 dev: false /trace-redirect@1.0.6: @@ -18932,7 +19023,7 @@ packages: /uri-js@4.4.1: resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} dependencies: - punycode: 2.3.0 + punycode: 2.3.1 /url-parse@1.5.10: resolution: {integrity: sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==} @@ -19080,7 +19171,7 @@ packages: core-util-is: 1.0.2 extsprintf: 1.3.0 - /vite-node@0.34.6(@types/node@20.8.9)(sass@1.69.5)(terser@5.22.0): + /vite-node@0.34.6(@types/node@20.8.10)(sass@1.69.5)(terser@5.24.0): resolution: {integrity: sha512-nlBMJ9x6n7/Amaz6F3zJ97EBwR2FkzhBRxF5e+jE6LA3yi6Wtc2lyTij1OnDMIr34v5g/tVQtsVAzhT0jc5ygA==} engines: {node: '>=v14.18.0'} hasBin: true @@ -19090,7 +19181,7 @@ packages: mlly: 1.4.0 pathe: 1.1.1 picocolors: 1.0.0 - vite: 4.5.0(@types/node@20.8.9)(sass@1.69.5)(terser@5.22.0) + vite: 4.5.0(@types/node@20.8.10)(sass@1.69.5)(terser@5.24.0) transitivePeerDependencies: - '@types/node' - less @@ -19106,7 +19197,7 @@ packages: resolution: {integrity: sha512-p4D8CFVhZS412SyQX125qxyzOgIFouwOcvjZWk6bQbNPR1wtaEzFT6jZxAjf1dejlGqa6fqHcuCvQea6EWUkUA==} dev: true - /vite@4.5.0(@types/node@20.8.9)(sass@1.69.5)(terser@5.22.0): + /vite@4.5.0(@types/node@20.8.10)(sass@1.69.5)(terser@5.24.0): resolution: {integrity: sha512-ulr8rNLA6rkyFAlVWw2q5YJ91v098AFQ2R0PRFwPzREXOUJQPtFUG0t+/ZikhaOCDqFoDhN6/v8Sq0o4araFAw==} engines: {node: ^14.18.0 || >=16.0.0} hasBin: true @@ -19134,12 +19225,12 @@ packages: terser: optional: true dependencies: - '@types/node': 20.8.9 + '@types/node': 20.8.10 esbuild: 0.18.17 postcss: 8.4.31 rollup: 3.29.4 sass: 1.69.5 - terser: 5.22.0 + terser: 5.24.0 optionalDependencies: fsevents: 2.3.2 @@ -19150,12 +19241,12 @@ packages: vitest: '>=0.16.0' dependencies: cross-fetch: 3.1.5 - vitest: 0.34.6(happy-dom@10.0.3)(sass@1.69.5)(terser@5.22.0) + vitest: 0.34.6(happy-dom@10.0.3)(sass@1.69.5)(terser@5.24.0) transitivePeerDependencies: - encoding dev: true - /vitest@0.34.6(happy-dom@10.0.3)(sass@1.69.5)(terser@5.22.0): + /vitest@0.34.6(happy-dom@10.0.3)(sass@1.69.5)(terser@5.24.0): resolution: {integrity: sha512-+5CALsOvbNKnS+ZHMXtuUC7nL8/7F1F2DnHGjSsszX8zCjWSSviphCb/NuS9Nzf4Q03KyyDRBAXhF/8lffME4Q==} engines: {node: '>=v14.18.0'} hasBin: true @@ -19188,7 +19279,7 @@ packages: dependencies: '@types/chai': 4.3.5 '@types/chai-subset': 1.3.3 - '@types/node': 20.8.9 + '@types/node': 20.8.10 '@vitest/expect': 0.34.6 '@vitest/runner': 0.34.6 '@vitest/snapshot': 0.34.6 @@ -19208,8 +19299,8 @@ packages: strip-literal: 1.0.1 tinybench: 2.5.0 tinypool: 0.7.0 - vite: 4.5.0(@types/node@20.8.9)(sass@1.69.5)(terser@5.22.0) - vite-node: 0.34.6(@types/node@20.8.9)(sass@1.69.5)(terser@5.22.0) + vite: 4.5.0(@types/node@20.8.10)(sass@1.69.5)(terser@5.24.0) + vite-node: 0.34.6(@types/node@20.8.10)(sass@1.69.5)(terser@5.24.0) why-is-node-running: 2.2.2 transitivePeerDependencies: - less @@ -19237,6 +19328,10 @@ packages: resolution: {integrity: sha512-LK3wJHs3vJxHG292C8cnsRusgyC5SEZDCzDCD01mdE/AoREFMl2tzLRuzwyuEsOIz13tqgBcnvysN3Lxsa14Fw==} dev: true + /vue-component-type-helpers@1.8.4: + resolution: {integrity: sha512-6bnLkn8O0JJyiFSIF0EfCogzeqNXpnjJ0vW/SZzNHfe6sPx30lTtTXlE5TFs2qhJlAtDFybStVNpL73cPe3OMQ==} + dev: true + /vue-demi@0.13.11(vue@3.3.7): resolution: {integrity: sha512-IR8HoEEGM65YY3ZJYAjMlKygDQn25D5ajNFNoKh9RSDMQtlzCxtfQjdQgv9jjK+m3377SsJXY8ysq8kLCZL25A==} engines: {node: '>=12'} @@ -19255,9 +19350,9 @@ packages: /vue-docgen-api@4.64.1(vue@3.3.7): resolution: {integrity: sha512-jbOf7ByE3Zvtuk+429Jorl+eIeh2aB2Fx1GUo3xJd1aByJWE8KDlSEa6b11PB1ze8f0sRUBraRDinICCk0KY7g==} dependencies: - '@babel/parser': 7.22.16 + '@babel/parser': 7.23.0 '@babel/types': 7.22.17 - '@vue/compiler-dom': 3.3.4 + '@vue/compiler-dom': 3.3.7 '@vue/compiler-sfc': 3.3.7 ast-types: 0.14.2 hash-sum: 2.0.0 @@ -19650,6 +19745,7 @@ packages: /yallist@2.1.2: resolution: {integrity: sha512-ncTzHV7NvsQZkYe1DW7cbDLm0YpzHmZF5r/iyP3ZnQtMiJ+pjzisCiMNI+Sj+xQF5pXhSHxSB3uDbsBTzY/c2A==} + dev: false /yallist@3.1.1: resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==} @@ -19780,7 +19876,7 @@ packages: sharp: 0.31.3 dev: false - github.com/misskey-dev/storybook-addon-misskey-theme/cf583db098365b2ccc81a82f63ca9c93bc32b640(@storybook/blocks@7.5.1)(@storybook/components@7.5.1)(@storybook/core-events@7.5.1)(@storybook/manager-api@7.5.1)(@storybook/preview-api@7.5.1)(@storybook/theming@7.5.1)(@storybook/types@7.5.1)(react-dom@18.2.0)(react@18.2.0): + github.com/misskey-dev/storybook-addon-misskey-theme/cf583db098365b2ccc81a82f63ca9c93bc32b640(@storybook/blocks@7.5.2)(@storybook/components@7.5.1)(@storybook/core-events@7.5.2)(@storybook/manager-api@7.5.2)(@storybook/preview-api@7.5.2)(@storybook/theming@7.5.2)(@storybook/types@7.5.2)(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 @@ -19801,13 +19897,13 @@ packages: react-dom: optional: true dependencies: - '@storybook/blocks': 7.5.1(react-dom@18.2.0)(react@18.2.0) + '@storybook/blocks': 7.5.2(react-dom@18.2.0)(react@18.2.0) '@storybook/components': 7.5.1(react-dom@18.2.0)(react@18.2.0) - '@storybook/core-events': 7.5.1 - '@storybook/manager-api': 7.5.1(react-dom@18.2.0)(react@18.2.0) - '@storybook/preview-api': 7.5.1 - '@storybook/theming': 7.5.1(react-dom@18.2.0)(react@18.2.0) - '@storybook/types': 7.5.1 + '@storybook/core-events': 7.5.2 + '@storybook/manager-api': 7.5.2(react-dom@18.2.0)(react@18.2.0) + '@storybook/preview-api': 7.5.2 + '@storybook/theming': 7.5.2(react-dom@18.2.0)(react@18.2.0) + '@storybook/types': 7.5.2 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) dev: true From 9b073e5fe61d3ff75170a297986008a5e9c6c439 Mon Sep 17 00:00:00 2001 From: syuilo Date: Wed, 1 Nov 2023 15:32:35 +0900 Subject: [PATCH 191/311] fix --- packages/backend/src/core/entities/ChannelEntityService.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/packages/backend/src/core/entities/ChannelEntityService.ts b/packages/backend/src/core/entities/ChannelEntityService.ts index 599b1a1d70..9e66834dfa 100644 --- a/packages/backend/src/core/entities/ChannelEntityService.ts +++ b/packages/backend/src/core/entities/ChannelEntityService.ts @@ -14,6 +14,7 @@ import { bindThis } from '@/decorators.js'; import { IdService } from '@/core/IdService.js'; import { DriveFileEntityService } from './DriveFileEntityService.js'; import { NoteEntityService } from './NoteEntityService.js'; +import { In } from 'typeorm'; @Injectable() export class ChannelEntityService { From 821633f878a8bf9c1155546a3d44547ecc59be76 Mon Sep 17 00:00:00 2001 From: syuilo Date: Wed, 1 Nov 2023 15:36:15 +0900 Subject: [PATCH 192/311] :art: --- packages/frontend/src/components/global/MkFooterSpacer.vue | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/frontend/src/components/global/MkFooterSpacer.vue b/packages/frontend/src/components/global/MkFooterSpacer.vue index 07df76b256..e78df6b8d9 100644 --- a/packages/frontend/src/components/global/MkFooterSpacer.vue +++ b/packages/frontend/src/components/global/MkFooterSpacer.vue @@ -4,7 +4,7 @@ SPDX-License-Identifier: AGPL-3.0-only --> diff --git a/packages/frontend/src/components/MkTimeline.vue b/packages/frontend/src/components/MkTimeline.vue index a2ada35f91..845c7a414c 100644 --- a/packages/frontend/src/components/MkTimeline.vue +++ b/packages/frontend/src/components/MkTimeline.vue @@ -4,7 +4,7 @@ SPDX-License-Identifier: AGPL-3.0-only --> @@ -196,25 +196,18 @@ const pagination = { params: query, }; -const reloadTimeline = (fromPR = false) => { - tlNotesCount = 0; +function reloadTimeline() { + return new Promise((res) => { + tlNotesCount = 0; - tlComponent.pagingComponent?.reload().then(() => { - reloadStream(); - if (fromPR) prComponent.refreshFinished(); + tlComponent.pagingComponent?.reload().then(() => { + reloadStream(); + res(); + }); }); -}; - -//const pullRefresh = () => reloadTimeline(true); +} defineExpose({ reloadTimeline, }); - -/* TODO -const timetravel = (date?: Date) => { - this.date = date; - this.$refs.tl.reload(); -}; -*/ From ed699b4aedc8bec8df13e2a6777298992b0f0f95 Mon Sep 17 00:00:00 2001 From: syuilo Date: Thu, 2 Nov 2023 18:12:01 +0900 Subject: [PATCH 207/311] =?UTF-8?q?Revert=20"enhance(frontend):=20?= =?UTF-8?q?=E3=80=8C=E5=86=85=E5=AE=B9=E3=82=92=E9=9A=A0=E3=81=99=E3=80=8D?= =?UTF-8?q?=E3=81=A7=E3=83=AA=E3=82=A2=E3=82=AF=E3=82=B7=E3=83=A7=E3=83=B3?= =?UTF-8?q?=E3=82=82=E9=9A=A0=E3=82=8C=E3=82=8B=E3=82=88=E3=81=86=E3=81=AB?= =?UTF-8?q?"?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This reverts commit e85b8217c0eda4b0cb2ebf5642cabd2af7212140. --- packages/frontend/src/components/MkNote.vue | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/frontend/src/components/MkNote.vue b/packages/frontend/src/components/MkNote.vue index 7b8223dfea..b31ee78532 100644 --- a/packages/frontend/src/components/MkNote.vue +++ b/packages/frontend/src/components/MkNote.vue @@ -84,7 +84,7 @@ SPDX-License-Identifier: AGPL-3.0-only {{ appearNote.channel.name }} - + From e333e7ced8f319be704c5d871a6dd727691e99df Mon Sep 17 00:00:00 2001 From: Tom Anderson Date: Thu, 2 Nov 2023 21:27:43 +1030 Subject: [PATCH 208/311] docs: Remove forum references and use Github Discussions (#12158) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * docs: Replace forum with Github Discussions * Remove outdated forum link from CONTRIBUTING.md * Remove outdated forum link from misskey-js/CONTRIBUTING.md * Remove outdated forum link from misskey-js/docs/CONTRIBUTING.en.md --------- Co-authored-by: かっこかり <67428053+kakkokari-gtyih@users.noreply.github.com> --- CONTRIBUTING.md | 2 +- packages/misskey-js/CONTRIBUTING.md | 2 +- packages/misskey-js/docs/CONTRIBUTING.en.md | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 484fd99413..13e0656041 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -15,7 +15,7 @@ Before creating an issue, please check the following: - To avoid duplication, please search for similar issues before creating a new issue. - Do not use Issues to ask questions or troubleshooting. - Issues should only be used to feature requests, suggestions, and bug tracking. - - Please ask questions or troubleshooting in ~~the [Misskey Forum](https://forum.misskey.io/)~~ [GitHub Discussions](https://github.com/misskey-dev/misskey/discussions) or [Discord](https://discord.gg/Wp8gVStHW3). + - Please ask questions or troubleshooting in [GitHub Discussions](https://github.com/misskey-dev/misskey/discussions) or [Discord](https://discord.gg/Wp8gVStHW3). > **Warning** > Do not close issues that are about to be resolved. It should remain open until a commit that actually resolves it is merged. diff --git a/packages/misskey-js/CONTRIBUTING.md b/packages/misskey-js/CONTRIBUTING.md index aa759345b0..4ed0c70a67 100644 --- a/packages/misskey-js/CONTRIBUTING.md +++ b/packages/misskey-js/CONTRIBUTING.md @@ -15,7 +15,7 @@ Issueを作成する前に、以下をご確認ください: - 重複を防ぐため、既に同様の内容のIssueが作成されていないか検索してから新しいIssueを作ってください。 - Issueを質問に使わないでください。 - Issueは、要望、提案、問題の報告にのみ使用してください。 - - 質問は、[Misskey Forum](https://forum.misskey.io/)や[Discord](https://discord.gg/Wp8gVStHW3)でお願いします。 + - 質問は、[GitHub Discussions](https://github.com/misskey-dev/misskey/discussions)や[Discord](https://discord.gg/Wp8gVStHW3)でお願いします。 ## PRの作成 PRを作成する前に、以下をご確認ください: diff --git a/packages/misskey-js/docs/CONTRIBUTING.en.md b/packages/misskey-js/docs/CONTRIBUTING.en.md index 1db282e356..22fea4c79d 100644 --- a/packages/misskey-js/docs/CONTRIBUTING.en.md +++ b/packages/misskey-js/docs/CONTRIBUTING.en.md @@ -11,7 +11,7 @@ Before creating an issue, please check the following: - To avoid duplication, please search for similar issues before creating a new issue. - Do not use Issues as a question. - Issues should only be used to feature requests, suggestions, and report problems. - - Please ask questions in the [Misskey Forum](https://forum.misskey.io/) or [Discord](https://discord.gg/Wp8gVStHW3). + - Please ask questions in [GitHub Discussions](https://github.com/misskey-dev/misskey/discussions) or [Discord](https://discord.gg/Wp8gVStHW3). ## Creating a PR Thank you for your PR! Before creating a PR, please check the following: From d20f778bd0a92fa9d3a489964f8e75981e4aadeb Mon Sep 17 00:00:00 2001 From: syuilo Date: Thu, 2 Nov 2023 19:59:18 +0900 Subject: [PATCH 209/311] enhance(frontend): tweak MkNotification --- .../src/components/MkNotification.vue | 19 +++-------------- .../src/components/MkReactionIcon.vue | 21 ++++++++++++++++--- packages/frontend/src/scripts/use-tooltip.ts | 2 +- 3 files changed, 22 insertions(+), 20 deletions(-) diff --git a/packages/frontend/src/components/MkNotification.vue b/packages/frontend/src/components/MkNotification.vue index ff20bc591f..fcf4791240 100644 --- a/packages/frontend/src/components/MkNotification.vue +++ b/packages/frontend/src/components/MkNotification.vue @@ -4,7 +4,7 @@ SPDX-License-Identifier: AGPL-3.0-only --> diff --git a/packages/frontend/src/components/MkTutorialDialog.PostNote.vue b/packages/frontend/src/components/MkTutorialDialog.PostNote.vue new file mode 100644 index 0000000000..9b55a1dca7 --- /dev/null +++ b/packages/frontend/src/components/MkTutorialDialog.PostNote.vue @@ -0,0 +1,135 @@ + + + + + + + diff --git a/packages/frontend/src/components/MkTutorialDialog.Sensitive.vue b/packages/frontend/src/components/MkTutorialDialog.Sensitive.vue new file mode 100644 index 0000000000..768d00bb07 --- /dev/null +++ b/packages/frontend/src/components/MkTutorialDialog.Sensitive.vue @@ -0,0 +1,144 @@ + + + + + + + diff --git a/packages/frontend/src/components/MkTutorialDialog.Timeline.vue b/packages/frontend/src/components/MkTutorialDialog.Timeline.vue new file mode 100644 index 0000000000..75b917f33c --- /dev/null +++ b/packages/frontend/src/components/MkTutorialDialog.Timeline.vue @@ -0,0 +1,87 @@ + + + + + + + diff --git a/packages/frontend/src/components/MkTutorialDialog.vue b/packages/frontend/src/components/MkTutorialDialog.vue new file mode 100644 index 0000000000..e28838425f --- /dev/null +++ b/packages/frontend/src/components/MkTutorialDialog.vue @@ -0,0 +1,260 @@ + + + + + + + diff --git a/packages/frontend/src/components/MkUserSetupDialog.vue b/packages/frontend/src/components/MkUserSetupDialog.vue index d60e01c44d..05b55f77a7 100644 --- a/packages/frontend/src/components/MkUserSetupDialog.vue +++ b/packages/frontend/src/components/MkUserSetupDialog.vue @@ -46,24 +46,32 @@ SPDX-License-Identifier: AGPL-3.0-only @@ -214,10 +234,21 @@ async function later(later: boolean) { box-sizing: border-box; } +.pageRoot { + display: flex; + flex-direction: column; + min-height: 100%; +} + +.pageMain { + flex-grow: 1; +} + .pageFooter { position: sticky; bottom: 0; left: 0; + flex-shrink: 0; padding: 12px; border-top: solid 0.5px var(--divider); -webkit-backdrop-filter: blur(15px); diff --git a/packages/frontend/src/pages/timeline.tutorial.vue b/packages/frontend/src/pages/timeline.tutorial.vue deleted file mode 100644 index 66b8e796e5..0000000000 --- a/packages/frontend/src/pages/timeline.tutorial.vue +++ /dev/null @@ -1,123 +0,0 @@ - - - - - - - diff --git a/packages/frontend/src/pages/timeline.vue b/packages/frontend/src/pages/timeline.vue index 5b97385ead..cfe270aefb 100644 --- a/packages/frontend/src/pages/timeline.vue +++ b/packages/frontend/src/pages/timeline.vue @@ -8,7 +8,9 @@ SPDX-License-Identifier: AGPL-3.0-only
- + + {{ i18n.ts._timelineDescription[src] }} +
@@ -31,9 +33,10 @@ SPDX-License-Identifier: AGPL-3.0-only From ec7fd6ff1c1db31bb6645f48eb167d6487776aba Mon Sep 17 00:00:00 2001 From: NoriDev Date: Tue, 7 Nov 2023 16:35:48 +0900 Subject: [PATCH 272/311] nyaize --- packages/frontend/src/components/MkSubNoteContent.vue | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/frontend/src/components/MkSubNoteContent.vue b/packages/frontend/src/components/MkSubNoteContent.vue index 3db16a4446..cfb0ac915e 100644 --- a/packages/frontend/src/components/MkSubNoteContent.vue +++ b/packages/frontend/src/components/MkSubNoteContent.vue @@ -19,7 +19,7 @@ SPDX-License-Identifier: AGPL-3.0-only
{{ i18n.t('translatedFrom', { x: translation.sourceLang }) }}:
- +
From f2d18391ae4c5fa5e56dfdc7ea5a2e866d079b3b Mon Sep 17 00:00:00 2001 From: NoriDev Date: Tue, 7 Nov 2023 16:36:46 +0900 Subject: [PATCH 273/311] =?UTF-8?q?change:=20=ED=94=84=EB=A1=9C=ED=95=84?= =?UTF-8?q?=EC=9D=84=20=EB=B2=88=EC=97=AD=ED=95=A0=20=EB=95=8C=20nyaize?= =?UTF-8?q?=EB=A5=BC=20=EC=82=AC=EC=9A=A9=ED=95=98=EC=A7=80=20=EC=95=8A?= =?UTF-8?q?=EC=9D=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- CHANGELOG_CHERRYPICK.md | 3 +++ packages/frontend/src/pages/user/home.vue | 2 +- 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/CHANGELOG_CHERRYPICK.md b/CHANGELOG_CHERRYPICK.md index 705e03d1f7..4f5d2f8639 100644 --- a/CHANGELOG_CHERRYPICK.md +++ b/CHANGELOG_CHERRYPICK.md @@ -32,6 +32,9 @@ Misskey의 전체 변경 사항을 확인하려면, [CHANGELOG.md#2023xx](CHANGE > 또한, 일부 locale이 누락되거나 기능이 정상적으로 작동하지 않는 등의 문제가 발생할 수 있습니다. > 문제가 발생하면 '설정 - 캐시 비우기'를 진행하거나, 브라우저 캐시를 삭제하십시오. +### General +- Change: 프로필을 번역할 때 nyaize를 사용하지 않음 + ### Client - Feat: 본문 미리보기의 프로필을 표시하지 않도록 설정할 수 있음 - Feat: 이모티콘 피커의 카테고리를 다중 계층 폴더로 분류할 수 있음 (misskey-dev/misskey#12132) diff --git a/packages/frontend/src/pages/user/home.vue b/packages/frontend/src/pages/user/home.vue index 598e7704ea..0c7a50fa88 100644 --- a/packages/frontend/src/pages/user/home.vue +++ b/packages/frontend/src/pages/user/home.vue @@ -88,7 +88,7 @@ SPDX-License-Identifier: AGPL-3.0-only
{{ i18n.t('translatedFrom', { x: translation.sourceLang }) }}:
- +
From 82d21eabd994dada93070ebe418755a66aee1570 Mon Sep 17 00:00:00 2001 From: NoriDev Date: Tue, 7 Nov 2023 17:10:38 +0900 Subject: [PATCH 274/311] =?UTF-8?q?fix(frontend):=20=EB=85=B8=ED=8A=B8?= =?UTF-8?q?=EB=A5=BC=20=EC=9D=B8=EC=9A=A9=ED=95=A0=20=EB=95=8C=20=EC=9E=85?= =?UTF-8?q?=EB=A0=A5=EB=9E=80=EC=97=90=20=EC=9E=90=EB=8F=99=EC=9C=BC?= =?UTF-8?q?=EB=A1=9C=20=ED=8F=AC=EC=BB=A4=EC=8A=A4=EA=B0=80=20=EB=A7=9E?= =?UTF-8?q?=EC=B6=B0=EC=A7=80=EC=A7=80=20=EC=95=8A=EC=9D=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- CHANGELOG_CHERRYPICK.md | 1 + packages/frontend/src/components/MkNote.vue | 6 +++--- packages/frontend/src/components/MkNoteDetailed.vue | 6 +++--- packages/frontend/src/components/MkSubNoteContent.vue | 2 +- 4 files changed, 8 insertions(+), 7 deletions(-) diff --git a/CHANGELOG_CHERRYPICK.md b/CHANGELOG_CHERRYPICK.md index 4f5d2f8639..1888c6551f 100644 --- a/CHANGELOG_CHERRYPICK.md +++ b/CHANGELOG_CHERRYPICK.md @@ -58,6 +58,7 @@ Misskey의 전체 변경 사항을 확인하려면, [CHANGELOG.md#2023xx](CHANGE - 일부 페이지에서 잘못된 디자인이 표시됨 - 일부 페이지에서 액션 항목이 존재해도 버튼이 표시되지 않을 수 있음 - Fix: 네비게이션 메뉴의 하단 프로필 영역이 잘못된 디자인으로 표시됨 +- Fix: 노트를 인용할 때 입력란에 자동으로 포커스가 맞춰지지 않음 ### Server - Feat: 연합에서 노트 수정이 반영됨 (libnare/cp-castella#1) diff --git a/packages/frontend/src/components/MkNote.vue b/packages/frontend/src/components/MkNote.vue index 498b6b2cf1..3146bd746e 100644 --- a/packages/frontend/src/components/MkNote.vue +++ b/packages/frontend/src/components/MkNote.vue @@ -157,7 +157,7 @@ SPDX-License-Identifier: AGPL-3.0-only - - - -
From 06fc285eb74589b7a56c9aa4d38617c22de6b04f Mon Sep 17 00:00:00 2001 From: NoriDev Date: Wed, 8 Nov 2023 17:31:55 +0900 Subject: [PATCH 281/311] refactor --- .../src/components/MkSubNoteContent.vue | 314 ++++++++---------- 1 file changed, 143 insertions(+), 171 deletions(-) diff --git a/packages/frontend/src/components/MkSubNoteContent.vue b/packages/frontend/src/components/MkSubNoteContent.vue index 1dab7d82a4..0a72393eae 100644 --- a/packages/frontend/src/components/MkSubNoteContent.vue +++ b/packages/frontend/src/components/MkSubNoteContent.vue @@ -9,7 +9,16 @@ SPDX-License-Identifier: AGPL-3.0-only ({{ i18n.ts._ffVisibility.private }}) ({{ i18n.ts.deleted }}) - + RN: ...
@@ -36,21 +45,19 @@ SPDX-License-Identifier: AGPL-3.0-only
- -
- +
@@ -101,7 +108,8 @@ SPDX-License-Identifier: AGPL-3.0-only @@ -458,7 +430,7 @@ function showReactions(): void { bottom: 0; left: 0; width: 100%; - height: 64px; + height: 74px; background: linear-gradient(0deg, var(--panel), var(--X15)); > .fadeLabel { From d13d8a7f5aabcaf3d2cdbe0925a16dfe77557f22 Mon Sep 17 00:00:00 2001 From: NoriDev Date: Wed, 8 Nov 2023 17:42:32 +0900 Subject: [PATCH 282/311] =?UTF-8?q?fix(frontend):=20=EC=9C=A0=EC=A0=80=20?= =?UTF-8?q?=ED=94=84=EB=A1=9C=ED=95=84=EC=97=90=EC=84=9C=20=ED=97=A4?= =?UTF-8?q?=EB=8D=94=20=EB=94=94=EC=9E=90=EC=9D=B8=EC=9D=B4=20=EC=9E=98?= =?UTF-8?q?=EB=AA=BB=20=ED=91=9C=EC=8B=9C=EB=90=98=EB=8A=94=20=EB=AC=B8?= =?UTF-8?q?=EC=A0=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- CHANGELOG_CHERRYPICK.md | 1 + packages/frontend/src/components/global/CPPageHeader.vue | 5 ++++- packages/frontend/src/components/global/MkPageHeader.vue | 3 +++ 3 files changed, 8 insertions(+), 1 deletion(-) diff --git a/CHANGELOG_CHERRYPICK.md b/CHANGELOG_CHERRYPICK.md index dcd3894d99..1dbd782030 100644 --- a/CHANGELOG_CHERRYPICK.md +++ b/CHANGELOG_CHERRYPICK.md @@ -60,6 +60,7 @@ Misskey의 전체 변경 사항을 확인하려면, [CHANGELOG.md#2023xx](CHANGE - Fix: 네비게이션 메뉴의 하단 프로필 영역이 잘못된 디자인으로 표시됨 - Fix: 노트를 인용할 때 입력란에 자동으로 포커스가 맞춰지지 않음 - Fix: '모든 미디어 노트 간략화하기' 옵션을 활성화하면 미디어가 아닌 노트에도 '닫기' 버튼이 표시될 수 있음 +- Fix: 유저 프로필에서 헤더 디자인이 잘못 표시되는 문제 ### Server - Feat: 연합에서 노트 수정이 반영됨 (libnare/cp-castella#1) diff --git a/packages/frontend/src/components/global/CPPageHeader.vue b/packages/frontend/src/components/global/CPPageHeader.vue index ecd5e0a28a..0c0937c041 100644 --- a/packages/frontend/src/components/global/CPPageHeader.vue +++ b/packages/frontend/src/components/global/CPPageHeader.vue @@ -13,7 +13,10 @@ SPDX-License-Identifier: AGPL-3.0-only
-
+
+
+
+