From 8608801fee6736b8bef91c54358c53d7b7f95f11 Mon Sep 17 00:00:00 2001 From: kakkokari-gtyih Date: Wed, 31 Jan 2024 17:55:18 +0900 Subject: [PATCH 001/567] =?UTF-8?q?feat(reversi):=20=E3=82=B2=E3=83=BC?= =?UTF-8?q?=E3=83=A0=E4=B8=AD=E3=81=AB=E3=83=AA=E3=82=A2=E3=82=AF=E3=82=B7?= =?UTF-8?q?=E3=83=A7=E3=83=B3=E3=82=92=E6=89=93=E3=81=A6=E3=82=8B=E3=82=88?= =?UTF-8?q?=E3=81=86=E3=81=AB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../backend/src/core/GlobalEventService.ts | 4 + packages/backend/src/core/ReactionService.ts | 2 +- packages/backend/src/core/ReversiService.ts | 41 ++++ .../api/stream/channels/reversi-game.ts | 8 + .../frontend/src/components/MkBalloon.vue | 77 +++++++ .../frontend/src/pages/reversi/game.board.vue | 189 +++++++++++++++++- .../src/pages/reversi/game.emoji-balloon.vue | 88 ++++++++ packages/misskey-js/src/streaming.types.ts | 2 + 8 files changed, 408 insertions(+), 3 deletions(-) create mode 100644 packages/frontend/src/components/MkBalloon.vue create mode 100644 packages/frontend/src/pages/reversi/game.emoji-balloon.vue diff --git a/packages/backend/src/core/GlobalEventService.ts b/packages/backend/src/core/GlobalEventService.ts index 6a72671665..7e96904b4c 100644 --- a/packages/backend/src/core/GlobalEventService.ts +++ b/packages/backend/src/core/GlobalEventService.ts @@ -191,6 +191,10 @@ export interface ReversiGameEventTypes { canceled: { userId: MiUser['id']; }; + reacted: { + userId: MiUser['id']; + reaction: string; + }; } //#endregion diff --git a/packages/backend/src/core/ReactionService.ts b/packages/backend/src/core/ReactionService.ts index 2e8f76fa8a..c205d08802 100644 --- a/packages/backend/src/core/ReactionService.ts +++ b/packages/backend/src/core/ReactionService.ts @@ -64,7 +64,7 @@ type DecodedReaction = { host?: string | null; }; -const isCustomEmojiRegexp = /^:([\w+-]+)(?:@\.)?:$/; +export const isCustomEmojiRegexp = /^:([\w+-]+)(?:@\.)?:$/; const decodeCustomEmojiRegexp = /^:([\w+-]+)(?:@([\w.-]+))?:$/; @Injectable() diff --git a/packages/backend/src/core/ReversiService.ts b/packages/backend/src/core/ReversiService.ts index 186ec6d7b1..9531bbb001 100644 --- a/packages/backend/src/core/ReversiService.ts +++ b/packages/backend/src/core/ReversiService.ts @@ -20,6 +20,8 @@ import { UserEntityService } from '@/core/entities/UserEntityService.js'; import { GlobalEventService } from '@/core/GlobalEventService.js'; import { IdService } from '@/core/IdService.js'; import { NotificationService } from '@/core/NotificationService.js'; +import { CustomEmojiService } from '@/core/CustomEmojiService.js'; +import { isCustomEmojiRegexp, ReactionService } from '@/core/ReactionService.js'; import { Serialized } from '@/types.js'; import { ReversiGameEntityService } from './entities/ReversiGameEntityService.js'; import type { OnApplicationShutdown, OnModuleInit } from '@nestjs/common'; @@ -44,6 +46,8 @@ export class ReversiService implements OnApplicationShutdown, OnModuleInit { private globalEventService: GlobalEventService, private reversiGameEntityService: ReversiGameEntityService, private idService: IdService, + private customEmojiService: CustomEmojiService, + private reactionService: ReactionService, ) { } @@ -602,6 +606,43 @@ export class ReversiService implements OnApplicationShutdown, OnModuleInit { } } + @bindThis + public async sendReaction(gameId: MiReversiGame['id'], user: MiUser, reaction: string) { + const game = await this.get(gameId); + if (game == null) throw new Error('game not found'); + if (!game.isStarted || game.isEnded) return; + if ((game.user1Id !== user.id) && (game.user2Id !== user.id)) return; + + const lastReactedAt = await this.redisClient.get(`reversi:game:lastReactedAt:${game.id}:${user.id}`); + + if (lastReactedAt && (Date.now() - parseInt(lastReactedAt, 10) < 3000)) { + // レートリミット(3秒) + return; + } + + let _reaction = '❤️'; + + const custom = reaction.match(isCustomEmojiRegexp); + + if (custom) { + const name = custom[1]; + + const emoji = (await this.customEmojiService.localEmojisCache.fetch()).get(name); + if (emoji && !emoji.isSensitive) { + _reaction = `:${name}:`; + } + } else { + _reaction = this.reactionService.normalize(reaction); + } + + this.globalEventService.publishReversiGameStream(game.id, 'reacted', { + userId: user.id, + reaction: _reaction, + }); + + this.redisClient.setex(`reversi:game:lastReactedAt:${game.id}:${user.id}`, 60 * 60, Date.now().toString()); + } + @bindThis public dispose(): void { } diff --git a/packages/backend/src/server/api/stream/channels/reversi-game.ts b/packages/backend/src/server/api/stream/channels/reversi-game.ts index fb24a29b75..a2cddc749f 100644 --- a/packages/backend/src/server/api/stream/channels/reversi-game.ts +++ b/packages/backend/src/server/api/stream/channels/reversi-game.ts @@ -42,6 +42,7 @@ class ReversiGameChannel extends Channel { case 'cancel': this.cancelGame(); break; case 'putStone': this.putStone(body.pos, body.id); break; case 'claimTimeIsUp': this.claimTimeIsUp(); break; + case 'reaction': this.sendReaction(body); break; } } @@ -80,6 +81,13 @@ class ReversiGameChannel extends Channel { this.reversiService.checkTimeout(this.gameId!); } + @bindThis + private async sendReaction(reaction: string) { + if (this.user == null) return; + + this.reversiService.sendReaction(this.gameId!, this.user, reaction); + } + @bindThis public dispose() { // Unsubscribe events diff --git a/packages/frontend/src/components/MkBalloon.vue b/packages/frontend/src/components/MkBalloon.vue new file mode 100644 index 0000000000..57df4509a4 --- /dev/null +++ b/packages/frontend/src/components/MkBalloon.vue @@ -0,0 +1,77 @@ + + + + + + + diff --git a/packages/frontend/src/pages/reversi/game.board.vue b/packages/frontend/src/pages/reversi/game.board.vue index eb4dbfdee0..14c71a3ee5 100644 --- a/packages/frontend/src/pages/reversi/game.board.vue +++ b/packages/frontend/src/pages/reversi/game.board.vue @@ -8,9 +8,13 @@ SPDX-License-Identifier: AGPL-3.0-only
({{ i18n.ts._reversi.black }}) - +
+ +
vs - +
+ +
({{ i18n.ts._reversi.white }})
@@ -121,6 +125,19 @@ SPDX-License-Identifier: AGPL-3.0-only
+
+
{{ i18n.ts.reaction }}
+
+ + +
+
+
@@ -145,9 +162,12 @@ SPDX-License-Identifier: AGPL-3.0-only import { computed, onActivated, onDeactivated, onMounted, onUnmounted, ref, shallowRef, triggerRef, watch } from 'vue'; import * as Misskey from 'misskey-js'; import * as Reversi from 'misskey-reversi'; +import type { UnicodeEmojiDef } from '@/scripts/emojilist.js'; import MkButton from '@/components/MkButton.vue'; import MkFolder from '@/components/MkFolder.vue'; import MkSwitch from '@/components/MkSwitch.vue'; +import MkRippleEffect from '@/components/MkRippleEffect.vue'; +import XEmojiBalloon from './game.emoji-balloon.vue'; import { deepClone } from '@/scripts/clone.js'; import { useInterval } from '@/scripts/use-interval.js'; import { signinRequired } from '@/account.js'; @@ -156,6 +176,8 @@ import { misskeyApi } from '@/scripts/misskey-api.js'; import { userPage } from '@/filters/user.js'; import * as sound from '@/scripts/sound.js'; import * as os from '@/os.js'; +import { defaultStore } from '@/store.js'; +import { reactionPicker } from '@/scripts/reaction-picker.js'; import { confetti } from '@/scripts/confetti.js'; const $i = signinRequired(); @@ -183,6 +205,7 @@ const iAmPlayer = computed(() => { return game.value.user1Id === $i.id || game.value.user2Id === $i.id; }); +// true: 黒, false: 白 const myColor = computed(() => { if (!iAmPlayer.value) return null; if (game.value.user1Id === $i.id && game.value.black === 1) return true; @@ -447,9 +470,109 @@ function share() { }); } +const _reactionEmojis = ref(defaultStore.reactiveState.reactions.value); +const reactionEmojis = computed(() => _reactionEmojis.value.slice(0, 10)); + +const blackUserEl = ref(null); +const whiteUserEl = ref(null); + +const canReact = ref(true); +let canReactFallbackTimer: number | null = null; + +function getKey(emoji: string | Misskey.entities.EmojiSimple | UnicodeEmojiDef): string { + return typeof emoji === 'string' ? emoji : 'char' in emoji ? emoji.char : `:${emoji.name}:`; +} + +// 既にでている絵文字をクリックした際の挙動 +function onReactionEmojiClick(emoji: string, ev?: MouseEvent) { + const el = ev && (ev.currentTarget ?? ev.target) as HTMLElement | null | undefined; + if (el) { + const rect = el.getBoundingClientRect(); + const x = rect.left + (el.offsetWidth / 2); + const y = rect.top + (el.offsetHeight / 2); + os.popup(MkRippleEffect, { x, y }, {}, 'end'); + } + + const key = getKey(emoji); + + sendReaction(key); + + if (!_reactionEmojis.value.includes(key)) { + _reactionEmojis.value.unshift(key); + } +} + +// #region リアクションピッカー +const reactButton = ref(null); + +function onReactionPickerClick() { + reactionPicker.show(reactButton.value ?? null, reaction => { + const key = getKey(reaction); + sendReaction(key); + + if (!_reactionEmojis.value.includes(key)) { + _reactionEmojis.value.unshift(key); + } + }); +} +// #endregion + +function sendReaction(emojiKey: string) { + if (!canReact.value) return; + canReact.value = false; + + // リアクション音は受信時のみ + props.connection!.send('reaction', emojiKey); + + // リアクションを無効にする(受信を確認できて3秒後 or 明らかに遅い場合は解除) + if (canReactFallbackTimer != null) { + window.clearTimeout(canReactFallbackTimer); + } + canReactFallbackTimer = window.setTimeout(() => { + if (!canReact.value) { + canReact.value = true; + } + }, 10000); +} + +function onReacted(payload: Parameters['0']) { + console.log('onReacted', payload); + + const { userId, reaction } = payload; + + sound.playMisskeySfx('reaction'); + + const el = (userId === blackUser.value.id) ? blackUserEl.value : whiteUserEl.value; + + if (el) { + const rect = el.getBoundingClientRect(); + const x = rect.right; + const y = rect.bottom; + os.popup(XEmojiBalloon, { + reaction, + tail: 'left', + x, + y, + }, {}, 'end'); + } + + if (userId === $i.id) { + // リアクションが可能になるまでのタイマー + window.setTimeout(() => { + if (canReactFallbackTimer != null) { + window.clearTimeout(canReactFallbackTimer); + } + if (!canReact.value) { + canReact.value = true; + } + }, 3000); + } +} + onMounted(() => { if (props.connection != null) { props.connection.on('log', onStreamLog); + props.connection.on('reacted', onReacted); props.connection.on('ended', onStreamEnded); } }); @@ -457,6 +580,7 @@ onMounted(() => { onActivated(() => { if (props.connection != null) { props.connection.on('log', onStreamLog); + props.connection.on('reacted', onReacted); props.connection.on('ended', onStreamEnded); } }); @@ -464,6 +588,7 @@ onActivated(() => { onDeactivated(() => { if (props.connection != null) { props.connection.off('log', onStreamLog); + props.connection.off('reacted', onReacted); props.connection.off('ended', onStreamEnded); } }); @@ -471,6 +596,7 @@ onDeactivated(() => { onUnmounted(() => { if (props.connection != null) { props.connection.off('log', onStreamLog); + props.connection.off('reacted', onReacted); props.connection.off('ended', onStreamEnded); } }); @@ -630,4 +756,63 @@ $gap: 4px; height: 100%; border-radius: 100%; } + +.reactionLabel { + font-size: 0.85em; + padding: 0 0 8px 0; + user-select: none; + + &:empty { + display: none; + } +} + +.reactionPickerBar { + display: flex; + flex-wrap: wrap; + padding: 12px; + background: var(--bg); + border-radius: calc(var(--radius) / 2); +} + +.emojisItem { + font-size: 24px; + border-radius: 4px; + width: 40px; + height: 40px; + + &.plus { + font-size: 16px; + + &:active { + background: var(--accentedBg); + } + } + + &:focus-visible { + outline: solid 2px var(--focus); + z-index: 1; + } + + &:hover { + background: rgba(0, 0, 0, 0.05); + } + + &:not(:disabled):active { + background: var(--accent); + box-shadow: inset 0 0.15em 0.3em rgba(27, 31, 35, 0.15); + } + + &:disabled { + opacity: 0.7; + } + + > .emoji { + height: 1.25em; + vertical-align: -.25em; + pointer-events: none; + width: 100%; + object-fit: contain; + } +} diff --git a/packages/frontend/src/pages/reversi/game.emoji-balloon.vue b/packages/frontend/src/pages/reversi/game.emoji-balloon.vue new file mode 100644 index 0000000000..8d943f1fdb --- /dev/null +++ b/packages/frontend/src/pages/reversi/game.emoji-balloon.vue @@ -0,0 +1,88 @@ + + + + + diff --git a/packages/misskey-js/src/streaming.types.ts b/packages/misskey-js/src/streaming.types.ts index 0ba5715d68..5657ec326e 100644 --- a/packages/misskey-js/src/streaming.types.ts +++ b/packages/misskey-js/src/streaming.types.ts @@ -208,6 +208,7 @@ export type Channels = { canceled: (payload: { userId: User['id']; }) => void; changeReadyStates: (payload: { user1: boolean; user2: boolean; }) => void; updateSettings: (payload: { userId: User['id']; key: string; value: any; }) => void; + reacted: (payload: { userId: User['id']; reaction: string; }) => void; log: (payload: Record) => void; }; receives: { @@ -222,6 +223,7 @@ export type Channels = { value: any; }; claimTimeIsUp: null | Record; + reaction: string; } } }; From efc272a340be7c1cb62b6a3adeb1ec5784cc9b08 Mon Sep 17 00:00:00 2001 From: kakkokari-gtyih Date: Wed, 31 Jan 2024 17:56:30 +0900 Subject: [PATCH 002/567] run api extractor --- packages/misskey-js/etc/misskey-js.api.md | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/packages/misskey-js/etc/misskey-js.api.md b/packages/misskey-js/etc/misskey-js.api.md index 860d3629d6..7b45912cb8 100644 --- a/packages/misskey-js/etc/misskey-js.api.md +++ b/packages/misskey-js/etc/misskey-js.api.md @@ -715,6 +715,10 @@ export type Channels = { key: string; value: any; }) => void; + reacted: (payload: { + userId: User['id']; + reaction: string; + }) => void; log: (payload: Record) => void; }; receives: { @@ -729,6 +733,7 @@ export type Channels = { value: any; }; claimTimeIsUp: null | Record; + reaction: string; }; }; }; From 4c50b0a5dd75b8444c50b20acff2b925cf5622d6 Mon Sep 17 00:00:00 2001 From: kakkokari-gtyih Date: Thu, 1 Feb 2024 07:26:05 +0900 Subject: [PATCH 003/567] =?UTF-8?q?=E3=83=AA=E3=82=A2=E3=82=AF=E3=82=B7?= =?UTF-8?q?=E3=83=A7=E3=83=B3=E3=82=92=E8=A1=A8=E7=A4=BA=E3=81=99=E3=82=8B?= =?UTF-8?q?=E3=81=8B=E3=81=A9=E3=81=86=E3=81=8B=E3=82=92=E9=81=B8=E3=81=B9?= =?UTF-8?q?=E3=82=8B=E3=82=88=E3=81=86=E3=81=AB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../frontend/src/pages/reversi/game.board.vue | 38 ++++++++++--------- .../src/pages/reversi/game.emoji-balloon.vue | 5 +-- 2 files changed, 22 insertions(+), 21 deletions(-) diff --git a/packages/frontend/src/pages/reversi/game.board.vue b/packages/frontend/src/pages/reversi/game.board.vue index 14c71a3ee5..4dcc5043f4 100644 --- a/packages/frontend/src/pages/reversi/game.board.vue +++ b/packages/frontend/src/pages/reversi/game.board.vue @@ -142,6 +142,7 @@ SPDX-License-Identifier: AGPL-3.0-only
Show labels + Show reactions useAvatarAsStone
@@ -188,6 +189,7 @@ const props = defineProps<{ }>(); const showBoardLabels = ref(false); +const showReactions = ref(true); const useAvatarAsStone = ref(true); const autoplaying = ref(false); // eslint-disable-next-line vue/no-setup-props-destructure @@ -536,24 +538,24 @@ function sendReaction(emojiKey: string) { } function onReacted(payload: Parameters['0']) { - console.log('onReacted', payload); - const { userId, reaction } = payload; - sound.playMisskeySfx('reaction'); - - const el = (userId === blackUser.value.id) ? blackUserEl.value : whiteUserEl.value; - - if (el) { - const rect = el.getBoundingClientRect(); - const x = rect.right; - const y = rect.bottom; - os.popup(XEmojiBalloon, { - reaction, - tail: 'left', - x, - y, - }, {}, 'end'); + if (showReactions.value || userId === $i.id) { + sound.playMisskeySfx('reaction'); + + const el = (userId === blackUser.value.id) ? blackUserEl.value : whiteUserEl.value; + + if (el) { + const rect = el.getBoundingClientRect(); + const x = rect.right; + const y = rect.bottom; + os.popup(XEmojiBalloon, { + reaction, + tail: 'left', + x, + y, + }, {}, 'end'); + } } if (userId === $i.id) { @@ -789,12 +791,12 @@ $gap: 4px; } } - &:focus-visible { + &:not(:disabled):focus-visible { outline: solid 2px var(--focus); z-index: 1; } - &:hover { + &:not(:disabled):hover { background: rgba(0, 0, 0, 0.05); } diff --git a/packages/frontend/src/pages/reversi/game.emoji-balloon.vue b/packages/frontend/src/pages/reversi/game.emoji-balloon.vue index 8d943f1fdb..fecb760430 100644 --- a/packages/frontend/src/pages/reversi/game.emoji-balloon.vue +++ b/packages/frontend/src/pages/reversi/game.emoji-balloon.vue @@ -49,7 +49,7 @@ onMounted(() => { active.value = false; setTimeout(() => { emit('end'); - }, 1000); + }, 750); }, 3000); }); @@ -60,7 +60,7 @@ onMounted(() => { } .transition_balloon_leaveActive { - transition: all 1s ease; + transition: all .75s ease; } .transition_balloon_enterFrom { @@ -75,7 +75,6 @@ onMounted(() => { .balloonRoot { position: absolute; filter: drop-shadow(0 2px 8px var(--shadow)); - --balloon-radius: 24px; user-select: none; pointer-events: none; } From 46c61602d4be9d4dbf13ea6491e24a71a2f28143 Mon Sep 17 00:00:00 2001 From: kakkokari-gtyih Date: Thu, 1 Feb 2024 07:32:47 +0900 Subject: [PATCH 004/567] fix --- packages/frontend/src/pages/reversi/game.board.vue | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/packages/frontend/src/pages/reversi/game.board.vue b/packages/frontend/src/pages/reversi/game.board.vue index 4dcc5043f4..50910b8649 100644 --- a/packages/frontend/src/pages/reversi/game.board.vue +++ b/packages/frontend/src/pages/reversi/game.board.vue @@ -142,7 +142,7 @@ SPDX-License-Identifier: AGPL-3.0-only
Show labels - Show reactions + Show reaction useAvatarAsStone
@@ -189,7 +189,7 @@ const props = defineProps<{ }>(); const showBoardLabels = ref(false); -const showReactions = ref(true); +const showReaction = ref(true); const useAvatarAsStone = ref(true); const autoplaying = ref(false); // eslint-disable-next-line vue/no-setup-props-destructure @@ -540,7 +540,7 @@ function sendReaction(emojiKey: string) { function onReacted(payload: Parameters['0']) { const { userId, reaction } = payload; - if (showReactions.value || userId === $i.id) { + if (showReaction.value || userId === $i.id) { sound.playMisskeySfx('reaction'); const el = (userId === blackUser.value.id) ? blackUserEl.value : whiteUserEl.value; From 66a7a9e9d1050d5ffeecbd961f96236afed03bd7 Mon Sep 17 00:00:00 2001 From: kakkokari-gtyih Date: Thu, 1 Feb 2024 07:36:32 +0900 Subject: [PATCH 005/567] spdx --- packages/frontend/src/pages/reversi/game.emoji-balloon.vue | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/packages/frontend/src/pages/reversi/game.emoji-balloon.vue b/packages/frontend/src/pages/reversi/game.emoji-balloon.vue index fecb760430..6beebebd4c 100644 --- a/packages/frontend/src/pages/reversi/game.emoji-balloon.vue +++ b/packages/frontend/src/pages/reversi/game.emoji-balloon.vue @@ -1,3 +1,8 @@ + +
- +
- + + + -
+
@@ -126,12 +156,16 @@ SPDX-License-Identifier: AGPL-3.0-only
- + - + + + -
+
@@ -173,17 +207,10 @@ SPDX-License-Identifier: AGPL-3.0-only
-
+ - @@ -195,7 +222,6 @@ import MkSwitch from '@/components/MkSwitch.vue'; import MkInput from '@/components/MkInput.vue'; import MkTextarea from '@/components/MkTextarea.vue'; import MkInfo from '@/components/MkInfo.vue'; -import FormSection from '@/components/form/section.vue'; import FormSplit from '@/components/form/split.vue'; import FormSuspense from '@/components/form/suspense.vue'; import * as os from '@/os.js'; @@ -258,8 +284,8 @@ async function init(): Promise { urlPreviewSummaryProxyUrl.value = meta.urlPreviewSummaryProxyUrl; } -async function save() { - await os.apiWithDialog('admin/update-meta', { +function saveInfo() { + os.apiWithDialog('admin/update-meta', { name: name.value, shortName: shortName.value === '' ? null : shortName.value, description: description.value, @@ -270,22 +296,57 @@ async function save() { inquiryUrl: inquiryUrl.value, repositoryUrl: repositoryUrl.value, impressumUrl: impressumUrl.value, + }).then(() => { + fetchInstance(true); + }); +} + +function save_pinnedUsers() { + os.apiWithDialog('admin/update-meta', { pinnedUsers: pinnedUsers.value.split('\n'), + }).then(() => { + fetchInstance(true); + }); +} + +function saveFiles() { + os.apiWithDialog('admin/update-meta', { cacheRemoteFiles: cacheRemoteFiles.value, cacheRemoteSensitiveFiles: cacheRemoteSensitiveFiles.value, + }).then(() => { + fetchInstance(true); + }); +} + +function saveServiceWorker() { + os.apiWithDialog('admin/update-meta', { enableServiceWorker: enableServiceWorker.value, swPublicKey: swPublicKey.value, swPrivateKey: swPrivateKey.value, + }).then(() => { + fetchInstance(true); + }); +} + +function saveAd() { + os.apiWithDialog('admin/update-meta', { notesPerOneAd: notesPerOneAd.value, + }).then(() => { + fetchInstance(true); + }); +} + +function saveUrlPreview() { + os.apiWithDialog('admin/update-meta', { urlPreviewEnabled: urlPreviewEnabled.value, urlPreviewTimeout: urlPreviewTimeout.value, urlPreviewMaximumContentLength: urlPreviewMaximumContentLength.value, urlPreviewRequireContentLength: urlPreviewRequireContentLength.value, urlPreviewUserAgent: urlPreviewUserAgent.value, urlPreviewSummaryProxyUrl: urlPreviewSummaryProxyUrl.value, + }).then(() => { + fetchInstance(true); }); - - fetchInstance(true); } const headerTabs = computed(() => []); @@ -297,11 +358,6 @@ definePageMetadata(() => ({ diff --git a/packages/frontend/src/components/MkFormFooter.vue b/packages/frontend/src/components/MkFormFooter.vue new file mode 100644 index 0000000000..1e88d59d8e --- /dev/null +++ b/packages/frontend/src/components/MkFormFooter.vue @@ -0,0 +1,49 @@ + + + + + + + diff --git a/packages/frontend/src/pages/admin/performance.vue b/packages/frontend/src/pages/admin/performance.vue index 0f4d94aa4e..57f68a2a26 100644 --- a/packages/frontend/src/pages/admin/performance.vue +++ b/packages/frontend/src/pages/admin/performance.vue @@ -7,103 +7,100 @@ SPDX-License-Identifier: AGPL-3.0-only - -
-
- - - - -
+
+
+ + + + +
+ +
+ + + + +
+ +
+ + + + +
-
- - - +
+ + + + +
+ + + + + + + + +
+ + + -
-
- - - + + + -
-
- - - + + + + + + + + + + + + + + + +
+
+ + + + + + + + +
+ + +
- - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - -
-
- - - - - - - - -
- - - - -
-
-
- + +
diff --git a/packages/frontend/src/pages/admin/security.vue b/packages/frontend/src/pages/admin/security.vue index 9bccee89a5..975a4a1265 100644 --- a/packages/frontend/src/pages/admin/security.vue +++ b/packages/frontend/src/pages/admin/security.vue @@ -7,119 +7,115 @@ SPDX-License-Identifier: AGPL-3.0-only - -
- - - - - - - - - - - - - - - - - - - - -
- {{ i18n.ts._sensitiveMediaDetection.description }} - - - - - - - - - - - - - - - - - - - - - - - - - - {{ i18n.ts.save }} -
-
- - - - - - -
- {{ i18n.ts.activeEmailValidationDescription }} - - - - - - - - - - - - - - - - - - - - - - {{ i18n.ts.save }} -
-
- - - - -
- - - - {{ i18n.ts.save }} -
-
- - - - - - -
- - - -
-
-
-
+
+ + + + + + + + + + + +
+ {{ i18n.ts._sensitiveMediaDetection.description }} + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+ {{ i18n.ts.activeEmailValidationDescription }} + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + +
+ + + +
+
+ + + + + + + +
+ + + +
+
+
@@ -131,83 +127,80 @@ import XHeader from './_header_.vue'; import MkFolder from '@/components/MkFolder.vue'; import MkRadios from '@/components/MkRadios.vue'; import MkSwitch from '@/components/MkSwitch.vue'; -import FormSuspense from '@/components/form/suspense.vue'; import MkRange from '@/components/MkRange.vue'; import MkInput from '@/components/MkInput.vue'; -import MkButton from '@/components/MkButton.vue'; import MkTextarea from '@/components/MkTextarea.vue'; import * as os from '@/os.js'; import { misskeyApi } from '@/scripts/misskey-api.js'; import { fetchInstance } from '@/instance.js'; import { i18n } from '@/i18n.js'; import { definePageMetadata } from '@/scripts/page-metadata.js'; - -const enableHcaptcha = ref(false); -const enableMcaptcha = ref(false); -const enableRecaptcha = ref(false); -const enableTurnstile = ref(false); -const sensitiveMediaDetection = ref('none'); -const sensitiveMediaDetectionSensitivity = ref(0); -const setSensitiveFlagAutomatically = ref(false); -const enableSensitiveMediaDetectionForVideos = ref(false); -const enableIpLogging = ref(false); -const enableActiveEmailValidation = ref(false); -const enableVerifymailApi = ref(false); -const verifymailAuthKey = ref(null); -const enableTruemailApi = ref(false); -const truemailInstance = ref(null); -const truemailAuthKey = ref(null); -const bannedEmailDomains = ref(''); - -async function init() { - const meta = await misskeyApi('admin/meta'); - enableHcaptcha.value = meta.enableHcaptcha; - enableMcaptcha.value = meta.enableMcaptcha; - enableRecaptcha.value = meta.enableRecaptcha; - enableTurnstile.value = meta.enableTurnstile; - sensitiveMediaDetection.value = meta.sensitiveMediaDetection; - sensitiveMediaDetectionSensitivity.value = - meta.sensitiveMediaDetectionSensitivity === 'veryLow' ? 0 : - meta.sensitiveMediaDetectionSensitivity === 'low' ? 1 : - meta.sensitiveMediaDetectionSensitivity === 'medium' ? 2 : - meta.sensitiveMediaDetectionSensitivity === 'high' ? 3 : - meta.sensitiveMediaDetectionSensitivity === 'veryHigh' ? 4 : 0; - setSensitiveFlagAutomatically.value = meta.setSensitiveFlagAutomatically; - enableSensitiveMediaDetectionForVideos.value = meta.enableSensitiveMediaDetectionForVideos; - enableIpLogging.value = meta.enableIpLogging; - enableActiveEmailValidation.value = meta.enableActiveEmailValidation; - enableVerifymailApi.value = meta.enableVerifymailApi; - verifymailAuthKey.value = meta.verifymailAuthKey; - enableTruemailApi.value = meta.enableTruemailApi; - truemailInstance.value = meta.truemailInstance; - truemailAuthKey.value = meta.truemailAuthKey; - bannedEmailDomains.value = meta.bannedEmailDomains?.join('\n') || ''; -} - -function save() { - os.apiWithDialog('admin/update-meta', { - sensitiveMediaDetection: sensitiveMediaDetection.value, +import { useForm } from '@/scripts/use-form.js'; +import MkFormFooter from '@/components/MkFormFooter.vue'; + +const meta = await misskeyApi('admin/meta'); + +const sensitiveMediaDetectionForm = useForm({ + sensitiveMediaDetection: meta.sensitiveMediaDetection, + sensitiveMediaDetectionSensitivity: meta.sensitiveMediaDetectionSensitivity === 'veryLow' ? 0 : + meta.sensitiveMediaDetectionSensitivity === 'low' ? 1 : + meta.sensitiveMediaDetectionSensitivity === 'medium' ? 2 : + meta.sensitiveMediaDetectionSensitivity === 'high' ? 3 : + meta.sensitiveMediaDetectionSensitivity === 'veryHigh' ? 4 : 0, + setSensitiveFlagAutomatically: meta.setSensitiveFlagAutomatically, + enableSensitiveMediaDetectionForVideos: meta.enableSensitiveMediaDetectionForVideos, +}, async (state) => { + await os.apiWithDialog('admin/update-meta', { + sensitiveMediaDetection: state.sensitiveMediaDetection, sensitiveMediaDetectionSensitivity: - sensitiveMediaDetectionSensitivity.value === 0 ? 'veryLow' : - sensitiveMediaDetectionSensitivity.value === 1 ? 'low' : - sensitiveMediaDetectionSensitivity.value === 2 ? 'medium' : - sensitiveMediaDetectionSensitivity.value === 3 ? 'high' : - sensitiveMediaDetectionSensitivity.value === 4 ? 'veryHigh' : + state.sensitiveMediaDetectionSensitivity === 0 ? 'veryLow' : + state.sensitiveMediaDetectionSensitivity === 1 ? 'low' : + state.sensitiveMediaDetectionSensitivity === 2 ? 'medium' : + state.sensitiveMediaDetectionSensitivity === 3 ? 'high' : + state.sensitiveMediaDetectionSensitivity === 4 ? 'veryHigh' : 0, - setSensitiveFlagAutomatically: setSensitiveFlagAutomatically.value, - enableSensitiveMediaDetectionForVideos: enableSensitiveMediaDetectionForVideos.value, - enableIpLogging: enableIpLogging.value, - enableActiveEmailValidation: enableActiveEmailValidation.value, - enableVerifymailApi: enableVerifymailApi.value, - verifymailAuthKey: verifymailAuthKey.value, - enableTruemailApi: enableTruemailApi.value, - truemailInstance: truemailInstance.value, - truemailAuthKey: truemailAuthKey.value, - bannedEmailDomains: bannedEmailDomains.value.split('\n'), - }).then(() => { - fetchInstance(true); + setSensitiveFlagAutomatically: state.setSensitiveFlagAutomatically, + enableSensitiveMediaDetectionForVideos: state.enableSensitiveMediaDetectionForVideos, + }); + fetchInstance(true); +}); + +const ipLoggingForm = useForm({ + enableIpLogging: meta.enableIpLogging, +}, async (state) => { + await os.apiWithDialog('admin/update-meta', { + enableIpLogging: state.enableIpLogging, + }); + fetchInstance(true); +}); + +const emailValidationForm = useForm({ + enableActiveEmailValidation: meta.enableActiveEmailValidation, + enableVerifymailApi: meta.enableVerifymailApi, + verifymailAuthKey: meta.verifymailAuthKey, + enableTruemailApi: meta.enableTruemailApi, + truemailInstance: meta.truemailInstance, + truemailAuthKey: meta.truemailAuthKey, +}, async (state) => { + await os.apiWithDialog('admin/update-meta', { + enableActiveEmailValidation: state.enableActiveEmailValidation, + enableVerifymailApi: state.enableVerifymailApi, + verifymailAuthKey: state.verifymailAuthKey, + enableTruemailApi: state.enableTruemailApi, + truemailInstance: state.truemailInstance, + truemailAuthKey: state.truemailAuthKey, + }); + fetchInstance(true); +}); + +const bannedEmailDomainsForm = useForm({ + bannedEmailDomains: meta.bannedEmailDomains?.join('\n') || '', +}, async (state) => { + await os.apiWithDialog('admin/update-meta', { + bannedEmailDomains: state.bannedEmailDomains.split('\n'), }); -} + fetchInstance(true); +}); const headerActions = computed(() => []); From 3f0aaaa41efe42776d70490ea213e3c8b194c152 Mon Sep 17 00:00:00 2001 From: syuilo <4439005+syuilo@users.noreply.github.com> Date: Mon, 23 Sep 2024 19:49:52 +0900 Subject: [PATCH 130/567] perf(embed): improve embed performance (#14613) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * wip * wip * wip * refactor * refactor --------- Co-authored-by: かっこかり <67428053+kakkokari-gtyih@users.noreply.github.com> --- .../src/server/web/ClientServerService.ts | 66 +++++++++++++++++++ .../src/server/web/views/base-embed.pug | 3 + packages/frontend-embed/src/boot.ts | 10 ++- .../src/components/EmNoteDetailed.vue | 4 +- .../frontend-embed/src/components/EmNotes.vue | 6 +- packages/frontend-embed/src/di.ts | 2 + packages/frontend-embed/src/pages/clip.vue | 44 +++++++------ packages/frontend-embed/src/pages/note.vue | 33 +++++----- packages/frontend-embed/src/pages/tag.vue | 7 +- .../src/pages/user-timeline.vue | 51 ++++++++------ packages/frontend-embed/src/server-context.ts | 21 ++++++ packages/frontend-embed/src/ui.vue | 16 +++-- 12 files changed, 190 insertions(+), 73 deletions(-) create mode 100644 packages/frontend-embed/src/server-context.ts diff --git a/packages/backend/src/server/web/ClientServerService.ts b/packages/backend/src/server/web/ClientServerService.ts index 063141273a..5de1f87667 100644 --- a/packages/backend/src/server/web/ClientServerService.ts +++ b/packages/backend/src/server/web/ClientServerService.ts @@ -785,6 +785,72 @@ export class ClientServerService { //#endregion //#region embed pages + fastify.get<{ Params: { user: string; } }>('/embed/user-timeline/:user', async (request, reply) => { + reply.removeHeader('X-Frame-Options'); + + const user = await this.usersRepository.findOneBy({ + id: request.params.user, + }); + + if (user == null) return; + if (user.host != null) return; + + const _user = await this.userEntityService.pack(user); + + reply.header('Cache-Control', 'public, max-age=3600'); + return await reply.view('base-embed', { + title: this.meta.name ?? 'Misskey', + ...await this.generateCommonPugData(this.meta), + embedCtx: htmlSafeJsonStringify({ + user: _user, + }), + }); + }); + + fastify.get<{ Params: { note: string; } }>('/embed/notes/:note', async (request, reply) => { + reply.removeHeader('X-Frame-Options'); + + const note = await this.notesRepository.findOneBy({ + id: request.params.note, + }); + + if (note == null) return; + if (note.visibility !== 'public') return; + if (note.userHost != null) return; + + const _note = await this.noteEntityService.pack(note, null, { detail: true }); + + reply.header('Cache-Control', 'public, max-age=3600'); + return await reply.view('base-embed', { + title: this.meta.name ?? 'Misskey', + ...await this.generateCommonPugData(this.meta), + embedCtx: htmlSafeJsonStringify({ + note: _note, + }), + }); + }); + + fastify.get<{ Params: { clip: string; } }>('/embed/clips/:clip', async (request, reply) => { + reply.removeHeader('X-Frame-Options'); + + const clip = await this.clipsRepository.findOneBy({ + id: request.params.clip, + }); + + if (clip == null) return; + + const _clip = await this.clipEntityService.pack(clip); + + reply.header('Cache-Control', 'public, max-age=3600'); + return await reply.view('base-embed', { + title: this.meta.name ?? 'Misskey', + ...await this.generateCommonPugData(this.meta), + embedCtx: htmlSafeJsonStringify({ + clip: _clip, + }), + }); + }); + fastify.get('/embed/*', async (request, reply) => { reply.removeHeader('X-Frame-Options'); diff --git a/packages/backend/src/server/web/views/base-embed.pug b/packages/backend/src/server/web/views/base-embed.pug index d773f2676a..2bab20a36c 100644 --- a/packages/backend/src/server/web/views/base-embed.pug +++ b/packages/backend/src/server/web/views/base-embed.pug @@ -43,6 +43,9 @@ html(class='embed') script(type='application/json' id='misskey_meta' data-generated-at=now) != metaJson + script(type='application/json' id='misskey_embedCtx' data-generated-at=now) + != embedCtx + script include ../boot.embed.js diff --git a/packages/frontend-embed/src/boot.ts b/packages/frontend-embed/src/boot.ts index fcea7d32ea..00c7944eb3 100644 --- a/packages/frontend-embed/src/boot.ts +++ b/packages/frontend-embed/src/boot.ts @@ -20,16 +20,19 @@ import { serverMetadata } from '@/server-metadata.js'; import { url } from '@@/js/config.js'; import { parseEmbedParams } from '@@/js/embed-page.js'; import { postMessageToParentWindow, setIframeId } from '@/post-message.js'; +import { serverContext } from '@/server-context.js'; import type { Theme } from '@/theme.js'; console.log('Misskey Embed'); +//#region Embedパラメータの取得・パース const params = new URLSearchParams(location.search); const embedParams = parseEmbedParams(params); - if (_DEV_) console.log(embedParams); +//#endregion +//#region テーマ function parseThemeOrNull(theme: string | null): Theme | null { if (theme == null) return null; try { @@ -65,6 +68,7 @@ if (embedParams.colorMode === 'dark') { } }); } +//#endregion // サイズの制限 document.documentElement.style.maxWidth = '500px'; @@ -89,6 +93,10 @@ const app = createApp( app.provide(DI.mediaProxy, new MediaProxy(serverMetadata, url)); +app.provide(DI.serverMetadata, serverMetadata); + +app.provide(DI.serverContext, serverContext); + app.provide(DI.embedParams, embedParams); // https://github.com/misskey-dev/misskey/pull/8575#issuecomment-1114239210 diff --git a/packages/frontend-embed/src/components/EmNoteDetailed.vue b/packages/frontend-embed/src/components/EmNoteDetailed.vue index 8169f500a9..a233011af7 100644 --- a/packages/frontend-embed/src/components/EmNoteDetailed.vue +++ b/packages/frontend-embed/src/components/EmNoteDetailed.vue @@ -142,8 +142,8 @@ import EmAcct from '@/components/EmAcct.vue'; import { userPage } from '@/utils.js'; import { notePage } from '@/utils.js'; import { i18n } from '@/i18n.js'; +import { DI } from '@/di.js'; import { shouldCollapsed } from '@@/js/collapsed.js'; -import { serverMetadata } from '@/server-metadata.js'; import { url } from '@@/js/config.js'; import EmMfm from '@/components/EmMfm.js'; @@ -151,6 +151,8 @@ const props = defineProps<{ note: Misskey.entities.Note; }>(); +const serverMetadata = inject(DI.serverMetadata)!; + const inChannel = inject('inChannel', null); const note = ref(props.note); diff --git a/packages/frontend-embed/src/components/EmNotes.vue b/packages/frontend-embed/src/components/EmNotes.vue index 6370f4aeae..3418d97f77 100644 --- a/packages/frontend-embed/src/components/EmNotes.vue +++ b/packages/frontend-embed/src/components/EmNotes.vue @@ -20,12 +20,12 @@ SPDX-License-Identifier: AGPL-3.0-only From 1b2b95e199938d30be546c1afa1088eecdc1097c Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Tue, 24 Sep 2024 01:22:57 +0000 Subject: [PATCH 143/567] Bump version to 2024.9.0-alpha.8 --- package.json | 2 +- packages/misskey-js/package.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/package.json b/package.json index 3bfa95a206..63c22cdc5b 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "misskey", - "version": "2024.9.0-alpha.7", + "version": "2024.9.0-alpha.8", "codename": "nasubi", "repository": { "type": "git", diff --git a/packages/misskey-js/package.json b/packages/misskey-js/package.json index 6c07ce87da..0f797e8259 100644 --- a/packages/misskey-js/package.json +++ b/packages/misskey-js/package.json @@ -1,7 +1,7 @@ { "type": "module", "name": "misskey-js", - "version": "2024.9.0-alpha.7", + "version": "2024.9.0-alpha.8", "description": "Misskey SDK for JavaScript", "license": "MIT", "main": "./built/index.js", From 4be307f22363ab594984c240a292509bfb6895fa Mon Sep 17 00:00:00 2001 From: syuilo <4439005+syuilo@users.noreply.github.com> Date: Tue, 24 Sep 2024 13:55:35 +0900 Subject: [PATCH 144/567] refactor --- packages/frontend/src/ui/_common_/navbar-for-mobile.vue | 2 +- packages/frontend/src/ui/_common_/navbar.vue | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/frontend/src/ui/_common_/navbar-for-mobile.vue b/packages/frontend/src/ui/_common_/navbar-for-mobile.vue index e80d5fd399..5115d21d56 100644 --- a/packages/frontend/src/ui/_common_/navbar-for-mobile.vue +++ b/packages/frontend/src/ui/_common_/navbar-for-mobile.vue @@ -82,7 +82,7 @@ function more() { diff --git a/idea/README.md b/idea/README.md new file mode 100644 index 0000000000..f64d16800a --- /dev/null +++ b/idea/README.md @@ -0,0 +1 @@ +使われなくなったけど消すのは勿体ない(将来使えるかもしれない)コードを入れておくとこ diff --git a/packages/frontend/src/pages/admin/performance.vue b/packages/frontend/src/pages/admin/performance.vue index 57f68a2a26..7e0a932f82 100644 --- a/packages/frontend/src/pages/admin/performance.vue +++ b/packages/frontend/src/pages/admin/performance.vue @@ -45,7 +45,7 @@ SPDX-License-Identifier: AGPL-3.0-only -
+
- - - - +
@@ -110,7 +112,6 @@ import MkSwitch from '@/components/MkSwitch.vue'; import MkFolder from '@/components/MkFolder.vue'; import MkInput from '@/components/MkInput.vue'; import MkLink from '@/components/MkLink.vue'; -import MkButton from '@/components/MkButton.vue'; import { useForm } from '@/scripts/use-form.js'; import MkFormFooter from '@/components/MkFormFooter.vue'; diff --git a/packages/frontend/src/pages/admin/settings.vue b/packages/frontend/src/pages/admin/settings.vue index 537c86cb14..5207f0e38e 100644 --- a/packages/frontend/src/pages/admin/settings.vue +++ b/packages/frontend/src/pages/admin/settings.vue @@ -169,42 +169,44 @@ SPDX-License-Identifier: AGPL-3.0-only - - - - - - - - - +
@@ -230,7 +232,6 @@ SPDX-License-Identifier: AGPL-3.0-only From 8c3be57ab362b8b2a24dad9b42ac0c3762bcb34e 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: Wed, 25 Sep 2024 16:12:34 +0900 Subject: [PATCH 166/567] =?UTF-8?q?fix(frontend-embed):=20URL=E3=82=A8?= =?UTF-8?q?=E3=83=B3=E3=82=B3=E3=83=BC=E3=83=89=E3=81=95=E3=82=8C=E3=81=9F?= =?UTF-8?q?=E6=96=87=E5=AD=97=E5=88=97=E3=81=8C=E6=AD=A3=E5=B8=B8=E3=81=AB?= =?UTF-8?q?=E8=AA=AD=E3=81=BF=E8=BE=BC=E3=82=81=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(#14630)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * fix(frontend-embed): URLエンコードされた文字列が正常に読み込めない問題を修正 * fix(frontend-embed): bring back missing bits --- packages/frontend-embed/src/pages/user-timeline.vue | 13 ++++++++++++- packages/frontend-embed/src/ui.vue | 10 +++++++++- 2 files changed, 21 insertions(+), 2 deletions(-) diff --git a/packages/frontend-embed/src/pages/user-timeline.vue b/packages/frontend-embed/src/pages/user-timeline.vue index 2d5dbb687b..85e6f52d50 100644 --- a/packages/frontend-embed/src/pages/user-timeline.vue +++ b/packages/frontend-embed/src/pages/user-timeline.vue @@ -11,7 +11,7 @@ SPDX-License-Identifier: AGPL-3.0-only -
+
+ + diff --git a/packages/frontend/src/pages/settings/general.vue b/packages/frontend/src/pages/settings/general.vue index 8561024879..e5bd72a7a7 100644 --- a/packages/frontend/src/pages/settings/general.vue +++ b/packages/frontend/src/pages/settings/general.vue @@ -38,250 +38,6 @@ SPDX-License-Identifier: AGPL-3.0-only
- - - -
-
- - - - - - - - CherryPick - - {{ i18n.ts.collapseLongNoteContent }} CherryPick - {{ i18n.ts.collapseDefault }} CherryPick - {{ i18n.ts.showNoteActionsOnlyHover }} - {{ i18n.ts.showClipButtonInNoteFooter }} - {{ i18n.ts.showTranslateButtonInNote }} CherryPick - {{ i18n.ts.enableAdvancedMfm }} - {{ i18n.ts.enableAnimatedMfm }} -
-
- -
-
- -
-
- {{ i18n.ts.enableQuickAddMfmFunction }} - {{ i18n.ts.showReactionsCount }} - {{ i18n.ts.showGapBetweenNotesInTimeline }} - {{ i18n.ts.loadRawImages }} - - - - - - - {{ i18n.ts.limitWidthOfReaction }} - {{ i18n.ts.hideAvatarsInNote }} CherryPick - {{ i18n.ts.enableAbsoluteTime }} CherryPick - {{ i18n.ts.enableMarkByDate }} CherryPick - {{ i18n.ts.showSubNoteFooterButton }} CherryPick - {{ i18n.ts.infoButtonForNoteActions }} CherryPick - {{ i18n.ts.showReplyInNotification }} CherryPick - {{ i18n.ts.renoteQuoteButtonSeparation }} CherryPick - {{ i18n.ts.showRenoteVisibilitySelector }} CherryPick - - - - - - - - {{ i18n.ts.showFixedPostFormInReplies }} CherryPick - {{ i18n.ts.allMediaNoteCollapse }} CherryPick - {{ i18n.ts.alwaysShowCw }} CherryPick - {{ i18n.ts.showReplyTargetNoteInSemiTransparent }} CherryPick -
- -
-
{{ i18n.ts.noteFooterButton }} CherryPick
- - {{ i18n.ts.reply }} - {{ i18n.ts.renote }} - {{ i18n.ts.like }} - {{ i18n.ts.doReaction }} - {{ i18n.ts.quote }} - {{ i18n.ts.more }} -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- - - - -
- {{ i18n.ts.useGroupedNotifications }} - - - - - - - - - - - - - - - - {{ i18n.ts._notification.checkNotificationBehavior }} -
-
- - - - -
-
- {{ i18n.ts.reduceUiAnimation }} - {{ i18n.ts.useBlurEffect }} - {{ i18n.ts.useBlurEffectForModal }} - {{ i18n.ts.removeModalBgColorForBlur }} CherryPick - {{ i18n.ts.disableShowingAnimatedImages }} - - - - - - - {{ i18n.ts.highlightSensitiveMedia }} - {{ i18n.ts.squareAvatars }} - {{ i18n.ts.showAvatarDecorations }} - {{ i18n.ts.useSystemFont }} - {{ i18n.ts.forceShowAds }} - {{ i18n.ts.seasonalScreenEffect }} - {{ i18n.ts.useNativeUIForVideoAudioPlayer }} - {{ i18n.ts.showUnreadNotificationsCount }} - - {{ i18n.ts.filesGridLayoutInUserPage }} CherryPick - - -
- - - - - - - - -
- - - - - - -
-
- - - -
-
{{ i18n.ts.fontSize }} CherryPick
-
-
{{ i18n.ts._mfm.dummy }}
-
{{ i18n.ts._mfm.dummy }}
-
{{ i18n.ts._mfm.dummy }}
-
{{ i18n.ts._mfm.dummy }}
-
{{ i18n.ts._mfm.dummy }}
-
{{ i18n.ts._mfm.dummy }}
-
{{ i18n.ts._mfm.dummy }}
-
{{ i18n.ts._mfm.dummy }}
-
{{ i18n.ts._mfm.dummy }}
-
{{ i18n.ts._mfm.dummy }}
-
{{ i18n.ts._mfm.dummy }}
-
{{ i18n.ts._mfm.dummy }}
-
{{ i18n.ts._mfm.dummy }}
-
{{ i18n.ts._mfm.dummy }}
-
{{ i18n.ts._mfm.dummy }}
-
{{ i18n.ts._mfm.dummy }}
-
{{ i18n.ts._mfm.dummy }}
-
{{ i18n.ts._mfm.dummy }}
-
{{ i18n.ts._mfm.dummy }}
-
-
-
Aa
- - -
Aa
-
- {{ i18n.ts.reloadToApplySetting2 }} - {{ i18n.ts.useBoldFont }} -
-
-
- @@ -385,8 +141,7 @@ SPDX-License-Identifier: AGPL-3.0-only - - diff --git a/packages/frontend/src/pages/settings/index.vue b/packages/frontend/src/pages/settings/index.vue index 43e9c6b0af..57d52416ae 100644 --- a/packages/frontend/src/pages/settings/index.vue +++ b/packages/frontend/src/pages/settings/index.vue @@ -105,6 +105,11 @@ const menuDef = computed(() => [{ text: i18n.ts.general, to: '/settings/general', active: currentPage.value?.route.name === 'general', + }, { + icon: 'ti ti-brush', + text: i18n.ts.appearance, + to: '/settings/appearance', + active: currentPage.value?.route.name === 'appearance', }, { icon: 'ti ti-palette', text: i18n.ts.theme, diff --git a/packages/frontend/src/router/definition.ts b/packages/frontend/src/router/definition.ts index c4b14d3afb..e7d04d4669 100644 --- a/packages/frontend/src/router/definition.ts +++ b/packages/frontend/src/router/definition.ts @@ -191,6 +191,10 @@ const routes: RouteDef[] = [{ path: '/cherrypick', name: 'cherrypick', component: page(() => import('@/pages/settings/cherrypick.vue')), + }, { + path: '/appearance', + name: 'appearance', + component: page(() => import('@/pages/settings/appearance.vue')), }, { path: '/', component: page(() => import('@/pages/_empty_.vue')), From f22d66c27251a4b3252d203fe2ab97b6a2055c5d Mon Sep 17 00:00:00 2001 From: NoriDev Date: Wed, 2 Oct 2024 22:06:11 +0900 Subject: [PATCH 234/567] Update ko-KR.yml --- locales/ko-KR.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/locales/ko-KR.yml b/locales/ko-KR.yml index 75c8234d5e..14563f9272 100644 --- a/locales/ko-KR.yml +++ b/locales/ko-KR.yml @@ -1354,7 +1354,7 @@ overwriteContentConfirm: "현재 내용을 덮어쓰기 하게 돼요. 그래도 seasonalScreenEffect: "계절에 따른 화면 연출" decorate: "장식하기" addMfmFunction: "장식 추가" -enableQuickAddMfmFunction: "고급 MFM 선택기 표시하기" +enableQuickAddMfmFunction: "고급 MFM 선택기 표시" bubbleGame: "버블 게임" sfx: "효과음" soundWillBePlayed: "사운드가 재생돼요" From 5d29b05a284846edbe07cd7a0ec2c125f1dde2ae Mon Sep 17 00:00:00 2001 From: NoriDev Date: Wed, 2 Oct 2024 22:07:43 +0900 Subject: [PATCH 235/567] =?UTF-8?q?=F0=9F=8E=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- packages/frontend/src/components/MkPostForm.vue | 2 +- packages/frontend/src/components/MkPostFormSimple.vue | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/frontend/src/components/MkPostForm.vue b/packages/frontend/src/components/MkPostForm.vue index 48af1d7515..faf0ab6620 100644 --- a/packages/frontend/src/components/MkPostForm.vue +++ b/packages/frontend/src/components/MkPostForm.vue @@ -1300,7 +1300,7 @@ defineExpose({ //#endregion .preview { - padding: 16px 20px 0 20px; + padding: 16px 20px; // min-height: 75px; max-height: 150px; overflow: auto; diff --git a/packages/frontend/src/components/MkPostFormSimple.vue b/packages/frontend/src/components/MkPostFormSimple.vue index 0fef5023b1..7f05f6849f 100644 --- a/packages/frontend/src/components/MkPostFormSimple.vue +++ b/packages/frontend/src/components/MkPostFormSimple.vue @@ -1343,7 +1343,7 @@ defineExpose({ //#endregion .preview { - padding: 16px 20px 0 20px; + padding: 16px 20px; // min-height: 75px; max-height: 150px; overflow: auto; From 497e0564afbd409d2f518c8cdf47ac7efd0c2818 Mon Sep 17 00:00:00 2001 From: NoriDev Date: Wed, 2 Oct 2024 23:32:17 +0900 Subject: [PATCH 236/567] =?UTF-8?q?enhance(frontend):=20=EB=85=B8=ED=8A=B8?= =?UTF-8?q?=EC=97=90=202=EA=B0=9C=20=EC=9D=B4=EC=83=81=EC=9D=98=20?= =?UTF-8?q?=EB=AF=B8=EB=94=94=EC=96=B4=EA=B0=80=20=EC=9E=88=EB=8A=94=20?= =?UTF-8?q?=EA=B2=BD=EC=9A=B0=20=EC=95=84=EC=9D=B4=EC=BD=98=EC=9C=BC?= =?UTF-8?q?=EB=A1=9C=20=ED=91=9C=EC=8B=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../pages/user/index.timeline.files.files.vue | 23 ++++++++++++++++--- 1 file changed, 20 insertions(+), 3 deletions(-) diff --git a/packages/frontend/src/pages/user/index.timeline.files.files.vue b/packages/frontend/src/pages/user/index.timeline.files.files.vue index 5b6b804686..7a90be342c 100644 --- a/packages/frontend/src/pages/user/index.timeline.files.files.vue +++ b/packages/frontend/src/pages/user/index.timeline.files.files.vue @@ -4,7 +4,7 @@ SPDX-License-Identifier: AGPL-3.0-only --> @@ -81,6 +84,10 @@ onUnmounted(() => { diff --git a/packages/frontend/src/widgets/index.ts b/packages/frontend/src/widgets/index.ts index e269fcf9eb..9c533feecf 100644 --- a/packages/frontend/src/widgets/index.ts +++ b/packages/frontend/src/widgets/index.ts @@ -34,6 +34,7 @@ export default function(app: App) { app.component('WidgetUserList', defineAsyncComponent(() => import('./WidgetUserList.vue'))); app.component('WidgetClicker', defineAsyncComponent(() => import('./WidgetClicker.vue'))); app.component('WidgetBirthdayFollowings', defineAsyncComponent(() => import('./WidgetBirthdayFollowings.vue'))); + app.component('WidgetSearch', defineAsyncComponent(() => import('./WidgetSearch.vue'))); } export const widgets = [ @@ -65,4 +66,5 @@ export const widgets = [ 'userList', 'clicker', 'birthdayFollowings', + 'search', ]; From 1a5f3d963bf5295dbb62bad3dbb89cc16411df3f Mon Sep 17 00:00:00 2001 From: NoriDev Date: Thu, 3 Oct 2024 08:51:59 +0900 Subject: [PATCH 242/567] Update CHANGELOG_CHERRYPICK.md --- CHANGELOG_CHERRYPICK.md | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/CHANGELOG_CHERRYPICK.md b/CHANGELOG_CHERRYPICK.md index a3896b5100..59cea6ce3e 100644 --- a/CHANGELOG_CHERRYPICK.md +++ b/CHANGELOG_CHERRYPICK.md @@ -28,9 +28,11 @@ Misskey의 전체 변경 사항을 확인하려면, [CHANGELOG.md#2024xx](CHANGE 기반 Misskey 버전: 2024.x.x
Misskey의 전체 변경 사항을 확인하려면, [CHANGELOG.md#2024xx](CHANGELOG.md#2024xx) 문서를 참고하십시오. -### General -- Change: Enable condensed line의 기본값을 꺼짐으로 설정함 +## NOTE +- Change: Enable condensed line의 기본값이 꺼짐으로 변경됨 - 디자인이 상대적으로 이상하게 보일 수 있으며, 실험실 기능이므로 이 기능이 변경하는 부분을 확실히 알고 있는 사용자만 활성화할 것을 권장합니다. + +### General - Feat: 위젯 영역을 숨길 수 있음 - 기존 Friendly UI 한정 기능이 다른 UI에서도 사용할 수 있도록 확대됨 - Feat: '내용 숨기기'로 설정한 내용을 항상 보이게 설정할 수 있음 (kokonect-link/cherrypick#495) From 6fd4de246c8ba0c59afe6f0c0a588d01783514fe Mon Sep 17 00:00:00 2001 From: Julia Date: Wed, 2 Oct 2024 20:09:08 -0400 Subject: [PATCH 243/567] Make post form attachments accessible (#14666) * fix(frontend): Make post form attachments accessible Adds a role="button", tabindex, and @keydown to MkPostFormAttaches in order to make it accessible to keyboard users. * Fix for linter * Add spacing in type signature --- .../src/components/MkPostFormAttaches.vue | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/packages/frontend/src/components/MkPostFormAttaches.vue b/packages/frontend/src/components/MkPostFormAttaches.vue index 80b75a0875..42322fec3d 100644 --- a/packages/frontend/src/components/MkPostFormAttaches.vue +++ b/packages/frontend/src/components/MkPostFormAttaches.vue @@ -7,7 +7,14 @@ SPDX-License-Identifier: AGPL-3.0-only
@@ -82,6 +83,7 @@ const props = withDefaults(defineProps<{ forceBlurhash?: boolean; onlyAvgColor?: boolean; // 軽量化のためにBlurhashを使わずに平均色だけを描画 noDrag?: boolean; + showAltIndicator?: boolean; }>(), { transition: null, src: null, @@ -93,6 +95,7 @@ const props = withDefaults(defineProps<{ forceBlurhash: false, onlyAvgColor: false, noDrag: false, + showAltIndicator: false, }); const viewId = uuid(); @@ -269,4 +272,21 @@ onUnmounted(() => { -webkit-user-drag: none; } } + +.altIndicator { + display: flex; + gap: 4px; + position: absolute; + border-radius: 8px; + overflow: hidden; + top: 2.5px; + right: 2px; + background-color: var(--bg); + -webkit-backdrop-filter: var(--blur, blur(15px)); + backdrop-filter: var(--blur, blur(15px)); + color: var(--accent); + font-size: 1em; + padding: 2px 4px; + text-align: center; +} diff --git a/packages/frontend/src/components/MkMediaImage.vue b/packages/frontend/src/components/MkMediaImage.vue index bae422cd1c..43456cae1d 100644 --- a/packages/frontend/src/components/MkMediaImage.vue +++ b/packages/frontend/src/components/MkMediaImage.vue @@ -23,7 +23,7 @@ SPDX-License-Identifier: AGPL-3.0-only :forceBlurhash="hide" :cover="hide || cover" :alt="image.comment || image.name" - :title="image.comment || image.name" + :title="image.name" :width="image.properties.width" :height="image.properties.height" :style="hide ? 'filter: brightness(0.7);' : null" @@ -44,7 +44,8 @@ SPDX-License-Identifier: AGPL-3.0-only + + diff --git a/packages/frontend/src/os.ts b/packages/frontend/src/os.ts index 72a63415c2..00510551b0 100644 --- a/packages/frontend/src/os.ts +++ b/packages/frontend/src/os.ts @@ -24,6 +24,7 @@ import MkPasswordDialog from '@/components/MkPasswordDialog.vue'; import MkEmojiPickerDialog from '@/components/MkEmojiPickerDialog.vue'; import MkPopupMenu from '@/components/MkPopupMenu.vue'; import MkContextMenu from '@/components/MkContextMenu.vue'; +import MkQRcode from '@/components/MkQRcode.vue'; import { copyToClipboard } from '@/scripts/copy-to-clipboard.js'; import { pleaseLogin } from '@/scripts/please-login.js'; import { showMovedDialog } from '@/scripts/show-moved-dialog.js'; @@ -737,3 +738,20 @@ export function checkExistence(fileData: ArrayBuffer): Promise { }); }); }*/ + +export async function displayQRCode(qrCode: string) { + (await new Promise<(() => void ) | undefined>((resolve) => { + let dispose: (() => void ) | undefined; + popup( + MkQRcode, + { qrCode }, + { + closed: () => { + resolve(dispose); + }, + }, + ).then((res) => { + dispose = res.dispose; + }); + }))?.(); +} diff --git a/packages/frontend/src/pages/flash/flash.vue b/packages/frontend/src/pages/flash/flash.vue index 7f3ec4676d..83d9d2d656 100644 --- a/packages/frontend/src/pages/flash/flash.vue +++ b/packages/frontend/src/pages/flash/flash.vue @@ -22,6 +22,7 @@ SPDX-License-Identifier: AGPL-3.0-only {{ flash.likedCount }} {{ flash.likedCount }} +
@@ -130,6 +131,11 @@ function copyLink() { os.success(); } +function shareQRCode() { + if (!flash.value) return; + os.displayQRCode(`${url}/play/${flash.value.id}`); +} + function shareWithNavigator() { if (!flash.value) return; diff --git a/packages/frontend/src/pages/gallery/post.vue b/packages/frontend/src/pages/gallery/post.vue index 8f4f31cfb4..d338674735 100644 --- a/packages/frontend/src/pages/gallery/post.vue +++ b/packages/frontend/src/pages/gallery/post.vue @@ -30,6 +30,7 @@ SPDX-License-Identifier: AGPL-3.0-only +
@@ -128,6 +129,10 @@ function shareWithNote() { }); } +function shareQRCode() { + os.displayQRCode(`${url}/gallery/${post.value.id}`); +} + function like() { os.apiWithDialog('gallery/posts/like', { postId: props.postId, @@ -283,7 +288,7 @@ definePageMetadata(() => ({ > button { padding: 8px; - margin: 0 8px; + margin: 0 6px; &:hover { color: var(--fgHighlighted); @@ -324,7 +329,6 @@ definePageMetadata(() => ({ margin: var(--margin); > .post { - } } diff --git a/packages/frontend/src/pages/page.vue b/packages/frontend/src/pages/page.vue index fa297688d7..20697cb054 100644 --- a/packages/frontend/src/pages/page.vue +++ b/packages/frontend/src/pages/page.vue @@ -64,6 +64,7 @@ SPDX-License-Identifier: AGPL-3.0-only
+
@@ -191,6 +192,11 @@ function copyLink() { os.success(); } +function shareQRCode() { + if (!page.value) return; + os.displayQRCode(`${url}/@${page.value.user.username}/pages/${page.value.name}`); +} + function shareWithNote() { if (!page.value) return; diff --git a/packages/frontend/src/scripts/get-note-menu.ts b/packages/frontend/src/scripts/get-note-menu.ts index c88b7fb1d6..4f44d2029f 100644 --- a/packages/frontend/src/scripts/get-note-menu.ts +++ b/packages/frontend/src/scripts/get-note-menu.ts @@ -404,6 +404,14 @@ export function getNoteMenu(props: { getCopyNoteLinkMenu(appearNote, i18n.ts.copyLink); + menuItems.push({ + icon: 'ti ti-qrcode', + text: i18n.ts.getQRCode, + action: () => { + os.displayQRCode(`${url}/notes/${appearNote.id}`); + }, + }); + menuItems.push({ icon: 'ti ti-copy', text: i18n.ts.copyContent, diff --git a/packages/frontend/src/scripts/get-user-menu.ts b/packages/frontend/src/scripts/get-user-menu.ts index b589d45b30..2925397b0b 100644 --- a/packages/frontend/src/scripts/get-user-menu.ts +++ b/packages/frontend/src/scripts/get-user-menu.ts @@ -310,6 +310,12 @@ export function getUserMenu(user: Misskey.entities.UserDetailed, router: IRouter copyToClipboard(`${url}/${canonical}`); os.toast(i18n.ts.copiedLink, 'copied'); }, + }, { + icon: 'ti ti-qrcode', + text: i18n.ts.getQRCode, + action: () => { + os.displayQRCode(`https://${user.host ?? host}/@${user.username}`); + }, }); if ($i) { diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index b500c0521d..aaf8d26de3 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -923,6 +923,12 @@ importers: punycode: specifier: 2.3.1 version: 2.3.1 + qrcode: + specifier: ^1.5.4 + version: 1.5.4 + qrcode-vue3: + specifier: ^1.7.1 + version: 1.7.1 rollup: specifier: 4.22.5 version: 4.22.5 @@ -1065,6 +1071,9 @@ importers: '@types/punycode': specifier: 2.1.4 version: 2.1.4 + '@types/qrcode': + specifier: ^1.5.5 + version: 1.5.5 '@types/sanitize-html': specifier: 2.13.0 version: 2.13.0 @@ -10073,6 +10082,12 @@ packages: resolution: {integrity: sha512-pMpnA0qRdFp32b1sJl1wOJNxZLQ2cbQx+k6tjNtZ8CpvVhNqEPRgivZ2WOUev2YMajecdH7ctUPDvEe87nariQ==} engines: {node: '>=6.0.0'} + qrcode-generator@1.4.4: + resolution: {integrity: sha512-HM7yY8O2ilqhmULxGMpcHSF1EhJJ9yBj8gvDEuZ6M+KGJ0YY2hKpnXvRD+hZPLrDVck3ExIGhmPtSdcjC+guuw==} + + qrcode-vue3@1.7.1: + resolution: {integrity: sha512-Xa82NslFJUqsnQbLtc1qO+xPEOeFaTRxktg3ugRd2Pk116kta1X+7GLSEPQj9gor8jWVyfmLmhYZHuANnRZoLQ==} + qrcode@1.5.4: resolution: {integrity: sha512-1ca71Zgiu6ORjHqFBDpnSMTR2ReToX4l1Au1VFLyVeBTFavzQnv5JxMFr3ukHVKpSrSA2MCk0lNJSykjUfz7Zg==} engines: {node: '>=10.13.0'} @@ -22724,6 +22739,12 @@ snapshots: pvutils@1.1.3: {} + qrcode-generator@1.4.4: {} + + qrcode-vue3@1.7.1: + dependencies: + qrcode-generator: 1.4.4 + qrcode@1.5.4: dependencies: dijkstrajs: 1.0.2 From 659dc64b08c66323f143b48a19414660acc1ae43 Mon Sep 17 00:00:00 2001 From: NoriDev Date: Thu, 3 Oct 2024 21:09:50 +0900 Subject: [PATCH 273/567] =?UTF-8?q?fix(frontend):=20=ED=8E=98=EC=9D=B4?= =?UTF-8?q?=EC=A7=80=EC=97=90=EC=84=9C=20=ED=8E=98=EC=9D=B4=EC=A7=80=20?= =?UTF-8?q?=EC=83=9D=EC=84=B1=20=EB=B2=84=ED=8A=BC=EC=9D=B4=20=EB=B3=B8?= =?UTF-8?q?=EB=AC=B8=EC=97=90=20=EC=A4=91=EB=B3=B5=EC=9C=BC=EB=A1=9C=20?= =?UTF-8?q?=ED=91=9C=EC=8B=9C=EB=90=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Update CHANGELOG_CHERRYPICK.md fix --- CHANGELOG_CHERRYPICK.md | 1 + packages/frontend/src/pages/pages.vue | 1 - 2 files changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGELOG_CHERRYPICK.md b/CHANGELOG_CHERRYPICK.md index b076a5e47e..6bbf505e8c 100644 --- a/CHANGELOG_CHERRYPICK.md +++ b/CHANGELOG_CHERRYPICK.md @@ -73,6 +73,7 @@ Misskey의 전체 변경 사항을 확인하려면, [CHANGELOG.md#2024xx](CHANGE - Enhance: 미디어 숨기기 버튼의 디자인을 개선함 - Fix: 환경설정 백업 시 일부 설정이 누락되어 백업될 수 있음 - Fix: 이미지 자르기를 할 때 이미지 크기 전체를 표시하지 못할 수 있음 +- Fix: 페이지에서 페이지 생성 버튼이 본문에 중복으로 표시됨 --- diff --git a/packages/frontend/src/pages/pages.vue b/packages/frontend/src/pages/pages.vue index 46a6c56e3c..9c7306d4be 100644 --- a/packages/frontend/src/pages/pages.vue +++ b/packages/frontend/src/pages/pages.vue @@ -17,7 +17,6 @@ SPDX-License-Identifier: AGPL-3.0-only
-
From f4c63b57f6133513547d37f7fe9c8f558d3fc2a8 Mon Sep 17 00:00:00 2001 From: NoriDev Date: Thu, 3 Oct 2024 21:11:29 +0900 Subject: [PATCH 274/567] =?UTF-8?q?enhance(frontend):=20=EA=B0=A4=EB=9F=AC?= =?UTF-8?q?=EB=A6=AC=EB=A5=BC=20=EB=85=B8=ED=8A=B8=EB=A1=9C=20=EA=B3=B5?= =?UTF-8?q?=EC=9C=A0=ED=95=A0=20=EB=95=8C=20=EC=A4=84=EB=B0=94=EA=BF=88?= =?UTF-8?q?=EC=9D=B4=20=EC=A0=81=EC=9A=A9=EB=90=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- CHANGELOG_CHERRYPICK.md | 1 + packages/frontend/src/pages/gallery/post.vue | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/CHANGELOG_CHERRYPICK.md b/CHANGELOG_CHERRYPICK.md index 6bbf505e8c..a74bad9004 100644 --- a/CHANGELOG_CHERRYPICK.md +++ b/CHANGELOG_CHERRYPICK.md @@ -71,6 +71,7 @@ Misskey의 전체 변경 사항을 확인하려면, [CHANGELOG.md#2024xx](CHANGE - Enhance: 이미지 뷰어가 파일 이름과 캡션을 동시에 표시하도록 변경 - Enhance: 노트를 작성할 때 첨부한 파일에 캡션이 존재하는 경우 파일 목록에 아이콘을 표시함 - Enhance: 미디어 숨기기 버튼의 디자인을 개선함 +- Enhance: 갤러리를 노트로 공유할 때 줄바꿈이 적용됨 - Fix: 환경설정 백업 시 일부 설정이 누락되어 백업될 수 있음 - Fix: 이미지 자르기를 할 때 이미지 크기 전체를 표시하지 못할 수 있음 - Fix: 페이지에서 페이지 생성 버튼이 본문에 중복으로 표시됨 diff --git a/packages/frontend/src/pages/gallery/post.vue b/packages/frontend/src/pages/gallery/post.vue index d338674735..92ad710422 100644 --- a/packages/frontend/src/pages/gallery/post.vue +++ b/packages/frontend/src/pages/gallery/post.vue @@ -125,7 +125,7 @@ function share() { function shareWithNote() { os.post({ - initialText: `${post.value.title} ${url}/gallery/${post.value.id}`, + initialText: `${post.value.title}\n${url}/gallery/${post.value.id}`, }); } From 650e22c90d22af1e6ffdbad2f17cb4a59c1ee7d4 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Thu, 3 Oct 2024 12:47:03 +0000 Subject: [PATCH 275/567] Bump version to 2024.10.0-beta.2 --- package.json | 2 +- packages/misskey-js/package.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/package.json b/package.json index fd8f828773..626b679a95 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "misskey", - "version": "2024.10.0-alpha.1", + "version": "2024.10.0-beta.2", "codename": "nasubi", "repository": { "type": "git", diff --git a/packages/misskey-js/package.json b/packages/misskey-js/package.json index b3e7a6a20a..a5f96647ed 100644 --- a/packages/misskey-js/package.json +++ b/packages/misskey-js/package.json @@ -1,7 +1,7 @@ { "type": "module", "name": "misskey-js", - "version": "2024.10.0-alpha.1", + "version": "2024.10.0-beta.2", "description": "Misskey SDK for JavaScript", "license": "MIT", "main": "./built/index.js", From 17ed323f6346ad3355b3b9d6611f03f53ce39474 Mon Sep 17 00:00:00 2001 From: NoriDev Date: Thu, 3 Oct 2024 22:16:11 +0900 Subject: [PATCH 276/567] chore --- .../frontend/src/components/MkPollEditor.vue | 19 ++++++++++--------- 1 file changed, 10 insertions(+), 9 deletions(-) diff --git a/packages/frontend/src/components/MkPollEditor.vue b/packages/frontend/src/components/MkPollEditor.vue index 3726ddf822..e5d2b6bc47 100644 --- a/packages/frontend/src/components/MkPollEditor.vue +++ b/packages/frontend/src/components/MkPollEditor.vue @@ -120,15 +120,16 @@ function get(): PollEditorModelValue { const calcAfter = () => { let base = parseInt(after.value.toString()); switch (unit.value) { - // @ts-expect-error fallthrough - case 'day': base *= 24; - // @ts-expect-error fallthrough - case 'hour': base *= 60; - // @ts-expect-error fallthrough - case 'minute': base *= 60; - // eslint-disable-next-line no-fallthrough - case 'second': return base *= 1000; - default: return null; + case 'day': + return base *= 24; + case 'hour': + return base *= 60; + case 'minute': + return base *= 60; + case 'second': + return base *= 1000; + default: + return null; } }; From e7abb27cf340bcc8d3dcd8c3dffceac8a4895aa8 Mon Sep 17 00:00:00 2001 From: NoriDev Date: Thu, 3 Oct 2024 22:50:04 +0900 Subject: [PATCH 277/567] =?UTF-8?q?feat:=20=EC=84=A4=EC=A0=95=ED=95=9C=20?= =?UTF-8?q?=EC=8B=9C=EA=B0=84=EC=9D=B4=20=EC=A7=80=EB=82=98=EB=A9=B4=20?= =?UTF-8?q?=EB=85=B8=ED=8A=B8=EB=A5=BC=20=EC=9E=90=EB=8F=99=EC=9C=BC?= =?UTF-8?q?=EB=A1=9C=20=EC=82=AD=EC=A0=9C=ED=95=A0=20=EC=88=98=20=EC=9E=88?= =?UTF-8?q?=EC=9D=8C=20(1673beta/cherrypick#70)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- CHANGELOG_CHERRYPICK.md | 1 + locales/en-US.yml | 8 + locales/index.d.ts | 30 ++++ locales/ja-JP.yml | 9 + locales/ko-KR.yml | 8 + .../migration/1720161864577-AddDeleteAt.js | 11 ++ .../backend/src/core/NoteCreateService.ts | 12 ++ packages/backend/src/core/QueueModule.ts | 12 ++ packages/backend/src/core/QueueService.ts | 2 + .../src/core/entities/NoteEntityService.ts | 1 + packages/backend/src/models/Note.ts | 5 + .../backend/src/models/json-schema/note.ts | 6 +- .../backend/src/queue/QueueProcessorModule.ts | 2 + .../src/queue/QueueProcessorService.ts | 20 +++ packages/backend/src/queue/const.ts | 1 + .../ScheduledNoteDeleteProcessorService.ts | 45 +++++ packages/backend/src/queue/types.ts | 4 + .../src/server/api/endpoints/notes/create.ts | 25 +++ .../src/server/web/ClientServerService.ts | 3 + packages/cherrypick-js/src/autogen/types.ts | 6 + .../src/components/MkNoteDetailed.vue | 1 + .../frontend/src/components/MkNoteHeader.vue | 1 + .../frontend/src/components/MkPostForm.vue | 24 +++ .../src/components/MkPostFormSimple.vue | 24 +++ .../src/components/MkScheduledNoteDelete.vue | 165 ++++++++++++++++++ 25 files changed, 425 insertions(+), 1 deletion(-) create mode 100644 packages/backend/migration/1720161864577-AddDeleteAt.js create mode 100644 packages/backend/src/queue/processors/ScheduledNoteDeleteProcessorService.ts create mode 100644 packages/frontend/src/components/MkScheduledNoteDelete.vue diff --git a/CHANGELOG_CHERRYPICK.md b/CHANGELOG_CHERRYPICK.md index a74bad9004..0b9a8f708f 100644 --- a/CHANGELOG_CHERRYPICK.md +++ b/CHANGELOG_CHERRYPICK.md @@ -56,6 +56,7 @@ Misskey의 전체 변경 사항을 확인하려면, [CHANGELOG.md#2024xx](CHANGE - 갤러리를 QR 코드로 공유 (1673beta/cherrypick#51) - 페이지를 QR 코드로 공유 (1673beta/cherrypick#53) - Play를 QR 코드로 공유 +- Feat: 설정한 시간이 지나면 노트를 자동으로 삭제할 수 있음 (1673beta/cherrypick#70) ### Client - Enhance: CherryPick 업데이트 페이지를 제어판 목록에 추가함 diff --git a/locales/en-US.yml b/locales/en-US.yml index b1c387c85f..9ea5a21eed 100644 --- a/locales/en-US.yml +++ b/locales/en-US.yml @@ -1,5 +1,6 @@ --- _lang_: "English" +scheduledNoteDelete: "Schedule note deletion" getQRCode: "Get QR code" customSplashText: "Custom splash text" customSplashTextDescription: "This text will be displayed on the loading page." @@ -3029,3 +3030,10 @@ _dice: rollDice: "Roll the dice" diceCount: "Number of dice" diceFaces: "Number of dice faces" +_scheduledNoteDelete: + expiration: "End of note deletion" + at: "End at..." + after: "End after..." + deadlineDate: "End date" + deadlineTime: "Time" + duration: "Duration" diff --git a/locales/index.d.ts b/locales/index.d.ts index 3612bd0298..d1de848d8d 100644 --- a/locales/index.d.ts +++ b/locales/index.d.ts @@ -13,6 +13,10 @@ export interface Locale extends ILocale { * 日本語 */ "_lang_": string; + /** + * ノートの削除を予約 + */ + "scheduledNoteDelete": string; /** * QRコードを取得 */ @@ -11842,6 +11846,32 @@ export interface Locale extends ILocale { */ "diceFaces": string; }; + "_scheduledNoteDelete": { + /** + * 期限 + */ + "expiration": string; + /** + * 日時指定 + */ + "at": string; + /** + * 経過指定 + */ + "after": string; + /** + * 期日 + */ + "deadlineDate": string; + /** + * 時間 + */ + "deadlineTime": string; + /** + * 期間 + */ + "duration": string; + }; } declare const locales: { [lang: string]: Locale; diff --git a/locales/ja-JP.yml b/locales/ja-JP.yml index a71c0fde33..9eefbd7deb 100644 --- a/locales/ja-JP.yml +++ b/locales/ja-JP.yml @@ -1,5 +1,6 @@ _lang_: "日本語" +scheduledNoteDelete: "ノートの削除を予約" getQRCode: "QRコードを取得" customSplashText: "カスタムスプラッシュテキスト" customSplashTextDescription: "ロード画面に表示されるテキストを設定します。改行で区切って複数設定できます。" @@ -3155,3 +3156,11 @@ _dice: rollDice: "サイコロを振る" diceCount: "サイコロの数" diceFaces: "サイコロの面数" + +_scheduledNoteDelete: + expiration: "期限" + at: "日時指定" + after: "経過指定" + deadlineDate: "期日" + deadlineTime: "時間" + duration: "期間" diff --git a/locales/ko-KR.yml b/locales/ko-KR.yml index e641e50b02..1431b69b7f 100644 --- a/locales/ko-KR.yml +++ b/locales/ko-KR.yml @@ -1,5 +1,6 @@ --- _lang_: "한국어" +scheduledNoteDelete: "노트 삭제 예약" getQRCode: "QR 코드 생성" customSplashText: "사용자 정의 스플래시 텍스트" customSplashTextDescription: "스플래시 화면에 표시되는 텍스트를 설정해요. 줄바꿈으로 구분해 설정할 수 있어요." @@ -3060,3 +3061,10 @@ _dice: rollDice: "주사위 던지기" diceCount: "주사위 개수" diceFaces: "주사위 면의 수" +_scheduledNoteDelete: + expiration: "삭제 기한" + at: "일시 지정" + after: "기간 지정" + deadlineDate: "기한" + deadlineTime: "시간" + duration: "기간" diff --git a/packages/backend/migration/1720161864577-AddDeleteAt.js b/packages/backend/migration/1720161864577-AddDeleteAt.js new file mode 100644 index 0000000000..9257fae14e --- /dev/null +++ b/packages/backend/migration/1720161864577-AddDeleteAt.js @@ -0,0 +1,11 @@ +export class AddDeleteAt1720161864577 { + name = 'AddDeleteAt1720161864577' + + async up(queryRunner) { + await queryRunner.query(`ALTER TABLE "note" ADD "deleteAt" TIMESTAMP WITH TIME ZONE`); + } + + async down(queryRunner) { + await queryRunner.query(`ALTER TABLE "note" DROP COLUMN "deleteAt"`) + } +} diff --git a/packages/backend/src/core/NoteCreateService.ts b/packages/backend/src/core/NoteCreateService.ts index a61ff464bd..d14bf7539d 100644 --- a/packages/backend/src/core/NoteCreateService.ts +++ b/packages/backend/src/core/NoteCreateService.ts @@ -147,6 +147,7 @@ type Option = { uri?: string | null; url?: string | null; app?: MiApp | null; + deleteAt?: Date | null; }; @Injectable() @@ -445,6 +446,7 @@ export class NoteCreateService implements OnApplicationShutdown { renoteUserId: data.renote ? data.renote.userId : null, renoteUserHost: data.renote ? data.renote.userHost : null, userHost: user.host, + deleteAt: data.deleteAt, }); if (data.uri != null) insert.uri = data.uri; @@ -745,6 +747,16 @@ export class NoteCreateService implements OnApplicationShutdown { }); } + if (data.deleteAt) { + const delay = data.deleteAt.getTime() - Date.now(); + this.queueService.scheduledNoteDeleteQueue.add(note.id, { + noteId: note.id, + }, { + delay, + removeOnComplete: true, + }); + } + // Register to search database this.index(note); } diff --git a/packages/backend/src/core/QueueModule.ts b/packages/backend/src/core/QueueModule.ts index 98a25b0ff5..e4395792e1 100644 --- a/packages/backend/src/core/QueueModule.ts +++ b/packages/backend/src/core/QueueModule.ts @@ -17,6 +17,7 @@ import { RelationshipJobData, UserWebhookDeliverJobData, SystemWebhookDeliverJobData, + ScheduledNoteDeleteJobData, } from '../queue/types.js'; import type { Provider } from '@nestjs/common'; @@ -29,6 +30,7 @@ export type RelationshipQueue = Bull.Queue; export type ObjectStorageQueue = Bull.Queue; export type UserWebhookDeliverQueue = Bull.Queue; export type SystemWebhookDeliverQueue = Bull.Queue; +export type ScheduledNoteDeleteQueue = Bull.Queue; const $system: Provider = { provide: 'queue:system', @@ -84,6 +86,12 @@ const $systemWebhookDeliver: Provider = { inject: [DI.config, DI.redisForJobQueue], }; +const $scheduledNoteDelete: Provider = { + provide: 'queue:scheduledNoteDelete', + useFactory: (config: Config, redisForJobQueue: Redis.Redis) => new Bull.Queue(QUEUE.SCHEDULED_NOTE_DELETE, baseQueueOptions(config, QUEUE.SCHEDULED_NOTE_DELETE, redisForJobQueue)), + inject: [DI.config, DI.redisForJobQueue], +}; + @Module({ imports: [ ], @@ -97,6 +105,7 @@ const $systemWebhookDeliver: Provider = { $objectStorage, $userWebhookDeliver, $systemWebhookDeliver, + $scheduledNoteDelete, ], exports: [ $system, @@ -108,6 +117,7 @@ const $systemWebhookDeliver: Provider = { $objectStorage, $userWebhookDeliver, $systemWebhookDeliver, + $scheduledNoteDelete, ], }) export class QueueModule implements OnApplicationShutdown { @@ -121,6 +131,7 @@ export class QueueModule implements OnApplicationShutdown { @Inject('queue:objectStorage') public objectStorageQueue: ObjectStorageQueue, @Inject('queue:userWebhookDeliver') public userWebhookDeliverQueue: UserWebhookDeliverQueue, @Inject('queue:systemWebhookDeliver') public systemWebhookDeliverQueue: SystemWebhookDeliverQueue, + @Inject('queue:scheduledNoteDelete') public scheduledNoteDeleteQueue: ScheduledNoteDeleteQueue, ) {} public async dispose(): Promise { @@ -137,6 +148,7 @@ export class QueueModule implements OnApplicationShutdown { this.objectStorageQueue.close(), this.userWebhookDeliverQueue.close(), this.systemWebhookDeliverQueue.close(), + this.scheduledNoteDeleteQueue.close(), ]); } diff --git a/packages/backend/src/core/QueueService.ts b/packages/backend/src/core/QueueService.ts index d7969611f2..497fb54349 100644 --- a/packages/backend/src/core/QueueService.ts +++ b/packages/backend/src/core/QueueService.ts @@ -33,6 +33,7 @@ import type { SystemQueue, UserWebhookDeliverQueue, SystemWebhookDeliverQueue, + ScheduledNoteDeleteQueue, } from './QueueModule.js'; import type httpSignature from '@peertube/http-signature'; import type * as Bull from 'bullmq'; @@ -52,6 +53,7 @@ export class QueueService { @Inject('queue:objectStorage') public objectStorageQueue: ObjectStorageQueue, @Inject('queue:userWebhookDeliver') public userWebhookDeliverQueue: UserWebhookDeliverQueue, @Inject('queue:systemWebhookDeliver') public systemWebhookDeliverQueue: SystemWebhookDeliverQueue, + @Inject('queue:scheduledNoteDelete') public scheduledNoteDeleteQueue: ScheduledNoteDeleteQueue, ) { this.systemQueue.add('tickCharts', { }, { diff --git a/packages/backend/src/core/entities/NoteEntityService.ts b/packages/backend/src/core/entities/NoteEntityService.ts index a113683b93..53c67f278c 100644 --- a/packages/backend/src/core/entities/NoteEntityService.ts +++ b/packages/backend/src/core/entities/NoteEntityService.ts @@ -412,6 +412,7 @@ export class NoteEntityService implements OnModuleInit { poll: note.hasPoll ? this.populatePoll(note, meId) : undefined, event: note.hasEvent ? this.populateEvent(note) : undefined, + deleteAt: note.deleteAt?.toISOString() ?? undefined, ...(meId && Object.keys(reactions).length > 0 ? { myReaction: this.populateMyReaction({ diff --git a/packages/backend/src/models/Note.ts b/packages/backend/src/models/Note.ts index 9709dc840c..41939cf02c 100644 --- a/packages/backend/src/models/Note.ts +++ b/packages/backend/src/models/Note.ts @@ -258,6 +258,11 @@ export class MiNote { comment: '[Denormalized]', }) public renoteUserHost: string | null; + + @Column('timestamp with time zone', { + nullable: true, + }) + public deleteAt: Date | null; //#endregion constructor(data: Partial) { diff --git a/packages/backend/src/models/json-schema/note.ts b/packages/backend/src/models/json-schema/note.ts index 980c868d0e..b00990d9e3 100644 --- a/packages/backend/src/models/json-schema/note.ts +++ b/packages/backend/src/models/json-schema/note.ts @@ -282,10 +282,14 @@ export const packedNoteSchema = { type: 'number', optional: true, nullable: false, }, - myReaction: { type: 'string', optional: true, nullable: true, }, + deleteAt: { + type: 'string', + optional: true, nullable: true, + format: 'date-time', + }, }, } as const; diff --git a/packages/backend/src/queue/QueueProcessorModule.ts b/packages/backend/src/queue/QueueProcessorModule.ts index 88f101a388..8e604909ae 100644 --- a/packages/backend/src/queue/QueueProcessorModule.ts +++ b/packages/backend/src/queue/QueueProcessorModule.ts @@ -41,6 +41,7 @@ import { TickChartsProcessorService } from './processors/TickChartsProcessorServ import { AggregateRetentionProcessorService } from './processors/AggregateRetentionProcessorService.js'; import { ExportFavoritesProcessorService } from './processors/ExportFavoritesProcessorService.js'; import { RelationshipProcessorService } from './processors/RelationshipProcessorService.js'; +import { ScheduledNoteDeleteProcessorService } from './processors/ScheduledNoteDeleteProcessorService.js'; @Module({ imports: [ @@ -83,6 +84,7 @@ import { RelationshipProcessorService } from './processors/RelationshipProcessor InboxProcessorService, AggregateRetentionProcessorService, QueueProcessorService, + ScheduledNoteDeleteProcessorService, ], exports: [ QueueProcessorService, diff --git a/packages/backend/src/queue/QueueProcessorService.ts b/packages/backend/src/queue/QueueProcessorService.ts index 98ada69582..bc082dec5f 100644 --- a/packages/backend/src/queue/QueueProcessorService.ts +++ b/packages/backend/src/queue/QueueProcessorService.ts @@ -44,6 +44,7 @@ import { CheckExpiredMutingsProcessorService } from './processors/CheckExpiredMu import { BakeBufferedReactionsProcessorService } from './processors/BakeBufferedReactionsProcessorService.js'; import { CleanProcessorService } from './processors/CleanProcessorService.js'; import { AggregateRetentionProcessorService } from './processors/AggregateRetentionProcessorService.js'; +import { ScheduledNoteDeleteProcessorService } from './processors/ScheduledNoteDeleteProcessorService.js'; import { QueueLoggerService } from './QueueLoggerService.js'; import { QUEUE, baseQueueOptions } from './const.js'; @@ -85,6 +86,7 @@ export class QueueProcessorService implements OnApplicationShutdown { private relationshipQueueWorker: Bull.Worker; private objectStorageQueueWorker: Bull.Worker; private endedPollNotificationQueueWorker: Bull.Worker; + private scheduledNoteDeleteQueueWorker: Bull.Worker; constructor( @Inject(DI.config) @@ -127,6 +129,7 @@ export class QueueProcessorService implements OnApplicationShutdown { private checkExpiredMutingsProcessorService: CheckExpiredMutingsProcessorService, private bakeBufferedReactionsProcessorService: BakeBufferedReactionsProcessorService, private cleanProcessorService: CleanProcessorService, + private scheduledNoteDeleteProcessorService: ScheduledNoteDeleteProcessorService, ) { this.logger = this.queueLoggerService.logger; @@ -511,6 +514,21 @@ export class QueueProcessorService implements OnApplicationShutdown { }); } //#endregion + + //#region scheduled note delete + { + this.scheduledNoteDeleteQueueWorker = new Bull.Worker(QUEUE.SCHEDULED_NOTE_DELETE, (job) => { + if (this.config.sentryForBackend) { + return Sentry.startSpan({ name: 'Queue: ScheduledNoteDelete' }, () => this.scheduledNoteDeleteProcessorService.process(job)); + } else { + return this.scheduledNoteDeleteProcessorService.process(job); + } + }, { + ...baseQueueOptions(this.config, QUEUE.SCHEDULED_NOTE_DELETE, this.redisForJobQueue), + autorun: false, + }); + } + //#endregion } @bindThis @@ -525,6 +543,7 @@ export class QueueProcessorService implements OnApplicationShutdown { this.relationshipQueueWorker.run(), this.objectStorageQueueWorker.run(), this.endedPollNotificationQueueWorker.run(), + this.scheduledNoteDeleteQueueWorker.run(), ]); } @@ -540,6 +559,7 @@ export class QueueProcessorService implements OnApplicationShutdown { this.relationshipQueueWorker.close(), this.objectStorageQueueWorker.close(), this.endedPollNotificationQueueWorker.close(), + this.scheduledNoteDeleteQueueWorker.close(), ]); } diff --git a/packages/backend/src/queue/const.ts b/packages/backend/src/queue/const.ts index 488c76e024..2dc0a08e1c 100644 --- a/packages/backend/src/queue/const.ts +++ b/packages/backend/src/queue/const.ts @@ -17,6 +17,7 @@ export const QUEUE = { OBJECT_STORAGE: 'objectStorage', USER_WEBHOOK_DELIVER: 'userWebhookDeliver', SYSTEM_WEBHOOK_DELIVER: 'systemWebhookDeliver', + SCHEDULED_NOTE_DELETE: 'scheduledNoteDelete', }; export function baseQueueOptions(config: Config, queueName: typeof QUEUE[keyof typeof QUEUE], redisConnection: Redis.Redis): Bull.QueueOptions { diff --git a/packages/backend/src/queue/processors/ScheduledNoteDeleteProcessorService.ts b/packages/backend/src/queue/processors/ScheduledNoteDeleteProcessorService.ts new file mode 100644 index 0000000000..c522a75de6 --- /dev/null +++ b/packages/backend/src/queue/processors/ScheduledNoteDeleteProcessorService.ts @@ -0,0 +1,45 @@ +import { Inject, Injectable } from '@nestjs/common'; +import { DI } from '@/di-symbols.js'; +import type { NotesRepository, UsersRepository } from '@/models/_.js'; +import type Logger from '@/logger.js'; +import { bindThis } from '@/decorators.js'; +import { NoteDeleteService } from '@/core/NoteDeleteService.js'; +import { QueueLoggerService } from '../QueueLoggerService.js'; +import type * as Bull from 'bullmq'; +import type { ScheduledNoteDeleteJobData } from '../types.js'; + +@Injectable() +export class ScheduledNoteDeleteProcessorService { + private logger: Logger; + + constructor( + @Inject(DI.notesRepository) + private notesRepository: NotesRepository, + + @Inject(DI.usersRepository) + private usersRepository: UsersRepository, + + private noteDeleteService: NoteDeleteService, + private queueLoggerService: QueueLoggerService, + ) { + this.logger = this.queueLoggerService.logger.createSubLogger('scheduled-note-delete'); + } + + @bindThis + public async process(job: Bull.Job): Promise { + const note = await this.notesRepository.findOneBy({ id: job.data.noteId }); + + if (note == null) { + return; + } + + const user = await this.usersRepository.findOneBy({ id: note.userId }); + + if (user == null) { + return; + } + + await this.noteDeleteService.delete(user, note); + this.logger.info(`Delete note ${note.id}`); + } +} diff --git a/packages/backend/src/queue/types.ts b/packages/backend/src/queue/types.ts index 8c0a87bfe5..0a5da0d3bc 100644 --- a/packages/backend/src/queue/types.ts +++ b/packages/backend/src/queue/types.ts @@ -133,3 +133,7 @@ export type UserWebhookDeliverJobData = { export type ThinUser = { id: MiUser['id']; }; + +export type ScheduledNoteDeleteJobData = { + noteId: MiNote['id']; +}; diff --git a/packages/backend/src/server/api/endpoints/notes/create.ts b/packages/backend/src/server/api/endpoints/notes/create.ts index bba9c13440..f02f4a1709 100644 --- a/packages/backend/src/server/api/endpoints/notes/create.ts +++ b/packages/backend/src/server/api/endpoints/notes/create.ts @@ -130,6 +130,12 @@ export const meta = { code: 'CONTAINS_TOO_MANY_MENTIONS', id: '4de0363a-3046-481b-9b0f-feff3e211025', }, + + cannotScheduleDeleteEarlierThanNow: { + message: 'Cannot specify delete time earlier than now.', + code: 'CANNOT_SCHEDULE_DELETE_EARLIER_THAN_NOW', + id: '9f04994a-3aa2-11ef-a495-177eea74788f', + }, }, } as const; @@ -200,6 +206,14 @@ export const paramDef = { metadata: { type: 'object' }, }, }, + scheduledDelete: { + type: 'object', + nullable: true, + properties: { + deleteAt: { type: 'integer', nullable: true }, + deleteAfter: { type: 'integer', nullable: true, minimum: 1 }, + }, + }, }, // (re)note with text, files and poll are optional if: { @@ -371,6 +385,16 @@ export default class extends Endpoint { // eslint- } } + if (ps.scheduledDelete) { + if (typeof ps.scheduledDelete.deleteAt === 'number') { + if (ps.scheduledDelete.deleteAt < Date.now()) { + throw new ApiError(meta.errors.cannotScheduleDeleteEarlierThanNow); + } else if (typeof ps.scheduledDelete.deleteAfter === 'number') { + ps.scheduledDelete.deleteAt = Date.now() + ps.scheduledDelete.deleteAfter; + } + } + } + // 投稿を作成 try { const note = await this.noteCreateService.create(me, { @@ -400,6 +424,7 @@ export default class extends Endpoint { // eslint- apMentions: ps.noExtractMentions ? [] : undefined, apHashtags: ps.noExtractHashtags ? [] : undefined, apEmojis: ps.noExtractEmojis ? [] : undefined, + deleteAt: ps.scheduledDelete?.deleteAt ? new Date(ps.scheduledDelete.deleteAt) : ps.scheduledDelete?.deleteAfter ? new Date(Date.now() + ps.scheduledDelete.deleteAfter) : null, }); return { diff --git a/packages/backend/src/server/web/ClientServerService.ts b/packages/backend/src/server/web/ClientServerService.ts index fdcefb03e1..bb6d9bf163 100644 --- a/packages/backend/src/server/web/ClientServerService.ts +++ b/packages/backend/src/server/web/ClientServerService.ts @@ -33,6 +33,7 @@ import type { SystemQueue, UserWebhookDeliverQueue, SystemWebhookDeliverQueue, + ScheduledNoteDeleteQueue, } from '@/core/QueueModule.js'; import { UserEntityService } from '@/core/entities/UserEntityService.js'; import { NoteEntityService } from '@/core/entities/NoteEntityService.js'; @@ -124,6 +125,7 @@ export class ClientServerService { @Inject('queue:objectStorage') public objectStorageQueue: ObjectStorageQueue, @Inject('queue:userWebhookDeliver') public userWebhookDeliverQueue: UserWebhookDeliverQueue, @Inject('queue:systemWebhookDeliver') public systemWebhookDeliverQueue: SystemWebhookDeliverQueue, + @Inject('queue:scheduledNoteDelete') public scheduledNoteDeleteQueue: ScheduledNoteDeleteQueue, ) { //this.createServer = this.createServer.bind(this); } @@ -252,6 +254,7 @@ export class ClientServerService { this.objectStorageQueue, this.userWebhookDeliverQueue, this.systemWebhookDeliverQueue, + this.scheduledNoteDeleteQueue, ].map(q => new BullMQAdapter(q)), serverAdapter: bullBoardServerAdapter, }); diff --git a/packages/cherrypick-js/src/autogen/types.ts b/packages/cherrypick-js/src/autogen/types.ts index fef1af4df4..4044484940 100644 --- a/packages/cherrypick-js/src/autogen/types.ts +++ b/packages/cherrypick-js/src/autogen/types.ts @@ -4466,6 +4466,8 @@ export type components = { reactionAndUserPairCache?: string[]; clippedCount?: number; myReaction?: string | null; + /** Format: date-time */ + deleteAt?: string | null; }; NoteReaction: { /** @@ -22661,6 +22663,10 @@ export type operations = { end?: number | null; metadata?: Record; }) | null; + scheduledDelete?: ({ + deleteAt?: number | null; + deleteAfter?: number | null; + }) | null; }; }; }; diff --git a/packages/frontend/src/components/MkNoteDetailed.vue b/packages/frontend/src/components/MkNoteDetailed.vue index b811abd874..ceb209830b 100644 --- a/packages/frontend/src/components/MkNoteDetailed.vue +++ b/packages/frontend/src/components/MkNoteDetailed.vue @@ -81,6 +81,7 @@ SPDX-License-Identifier: AGPL-3.0-only +
diff --git a/packages/frontend/src/components/MkNoteHeader.vue b/packages/frontend/src/components/MkNoteHeader.vue index 6bdc046194..7e78076a55 100644 --- a/packages/frontend/src/components/MkNoteHeader.vue +++ b/packages/frontend/src/components/MkNoteHeader.vue @@ -38,6 +38,7 @@ SPDX-License-Identifier: AGPL-3.0-only +
diff --git a/packages/frontend/src/components/MkPostForm.vue b/packages/frontend/src/components/MkPostForm.vue index 3ed451a05b..86e6ee170c 100644 --- a/packages/frontend/src/components/MkPostForm.vue +++ b/packages/frontend/src/components/MkPostForm.vue @@ -76,6 +76,7 @@ SPDX-License-Identifier: AGPL-3.0-only +
@@ -91,6 +92,7 @@ SPDX-License-Identifier: AGPL-3.0-only +
@@ -136,6 +138,7 @@ import { emojiPicker } from '@/scripts/emoji-picker.js'; import { vibrate } from '@/scripts/vibrate.js'; import * as sound from '@/scripts/sound.js'; import { mfmFunctionPicker } from '@/scripts/mfm-function-picker.js'; +import MkScheduledNoteDelete, { type DeleteScheduleEditorModelValue } from '@/components/MkScheduledNoteDelete.vue'; const $i = signinRequired(); @@ -218,6 +221,7 @@ const imeText = ref(''); const showingOptions = ref(false); const disableRightClick = ref(false); const textAreaReadOnly = ref(false); +const scheduledNoteDelete = ref(null); const draftKey = computed((): string => { let key = props.channel ? `channel:${props.channel.id}` : ''; @@ -396,6 +400,7 @@ function watchForDraft() { watch(localOnly, () => saveDraft()); watch(quoteId, () => saveDraft()); watch(reactionAcceptance, () => saveDraft()); + watch(scheduledNoteDelete, () => saveDraft()); } function checkMissingMention() { @@ -763,6 +768,7 @@ function saveDraft() { visibleUserIds: visibility.value === 'specified' ? visibleUsers.value.map(x => x.id) : undefined, quoteId: quoteId.value, reactionAcceptance: reactionAcceptance.value, + scheduledNoteDelete: scheduledNoteDelete.value, }, }; @@ -878,6 +884,7 @@ async function post(ev?: MouseEvent) { reactionAcceptance: reactionAcceptance.value, disableRightClick: disableRightClick.value, noteId: props.updateMode ? props.initialNote?.id : undefined, + scheduledDelete: scheduledNoteDelete.value, }; if (withHashtags.value && hashtags.value && hashtags.value.trim() !== '') { @@ -1091,6 +1098,17 @@ function showPreviewMenu(ev: MouseEvent) { }], ev.currentTarget ?? ev.target); } +function toggleScheduledNoteDelete() { + if (scheduledNoteDelete.value) { + scheduledNoteDelete.value = null; + } else { + scheduledNoteDelete.value = { + deleteAt: null, + deleteAfter: null, + }; + } +} + onMounted(() => { if (props.autofocus) { focus(); @@ -1166,6 +1184,12 @@ onMounted(() => { quoteId.value = init.renote ? init.renote.id : null; reactionAcceptance.value = init.reactionAcceptance; disableRightClick.value = init.disableRightClick != null; + if (init.deletedAt) { + scheduledNoteDelete.value = { + deleteAt: init.deletedAt ? (new Date(init.deletedAt)).getTime() : null, + deleteAfter: null, + }; + } } nextTick(() => watchForDraft()); diff --git a/packages/frontend/src/components/MkPostFormSimple.vue b/packages/frontend/src/components/MkPostFormSimple.vue index 71cddef2d4..847b8c11ff 100644 --- a/packages/frontend/src/components/MkPostFormSimple.vue +++ b/packages/frontend/src/components/MkPostFormSimple.vue @@ -87,6 +87,7 @@ SPDX-License-Identifier: AGPL-3.0-only +
@@ -106,6 +107,7 @@ SPDX-License-Identifier: AGPL-3.0-only +
@@ -153,6 +155,7 @@ import { vibrate } from '@/scripts/vibrate.js'; import XSigninDialog from '@/components/MkSigninDialog.vue'; import * as sound from '@/scripts/sound.js'; import { mfmFunctionPicker } from '@/scripts/mfm-function-picker.js'; +import MkScheduledNoteDelete, { type DeleteScheduleEditorModelValue } from '@/components/MkScheduledNoteDelete.vue'; const $i = signinRequired(); @@ -236,6 +239,7 @@ const imeText = ref(''); const showingOptions = ref(false); const disableRightClick = ref(false); const textAreaReadOnly = ref(false); +const scheduledNoteDelete = ref(null); const draftKey = computed((): string => { let key = props.channel ? `channel:${props.channel.id}` : ''; @@ -388,6 +392,7 @@ function watchForDraft() { watch(localOnly, () => saveDraft()); watch(quoteId, () => saveDraft()); watch(reactionAcceptance, () => saveDraft()); + watch(scheduledNoteDelete, () => saveDraft()); } function checkMissingMention() { @@ -752,6 +757,7 @@ function saveDraft() { visibleUserIds: visibility.value === 'specified' ? visibleUsers.value.map(x => x.id) : undefined, quoteId: quoteId.value, reactionAcceptance: reactionAcceptance.value, + scheduledNoteDelete: scheduledNoteDelete.value, }, }; @@ -867,6 +873,7 @@ async function post(ev?: MouseEvent) { reactionAcceptance: reactionAcceptance.value, disableRightClick: disableRightClick.value, noteId: props.updateMode ? props.initialNote?.id : undefined, + scheduledDelete: scheduledNoteDelete.value, }; if (withHashtags.value && hashtags.value && hashtags.value.trim() !== '') { @@ -1116,6 +1123,17 @@ function showPreviewMenu(ev: MouseEvent) { }], ev.currentTarget ?? ev.target); } +function toggleScheduledNoteDelete() { + if (scheduledNoteDelete.value) { + scheduledNoteDelete.value = null; + } else { + scheduledNoteDelete.value = { + deleteAt: null, + deleteAfter: null, + }; + } +} + onMounted(() => { if (props.autofocus) { focus(); @@ -1193,6 +1211,12 @@ onMounted(() => { quoteId.value = init.renote ? init.renote.id : null; reactionAcceptance.value = init.reactionAcceptance; disableRightClick.value = init.disableRightClick != null; + if (init.deletedAt) { + scheduledNoteDelete.value = { + deleteAt: init.deletedAt ? (new Date(init.deletedAt)).getTime() : null, + deleteAfter: null, + }; + } } nextTick(() => watchForDraft()); diff --git a/packages/frontend/src/components/MkScheduledNoteDelete.vue b/packages/frontend/src/components/MkScheduledNoteDelete.vue new file mode 100644 index 0000000000..f2997edf87 --- /dev/null +++ b/packages/frontend/src/components/MkScheduledNoteDelete.vue @@ -0,0 +1,165 @@ + + + + + From 06faf6c6a60eb774e7875f7e152b0ec7a2b4dd2f Mon Sep 17 00:00:00 2001 From: NoriDev Date: Thu, 3 Oct 2024 23:04:50 +0900 Subject: [PATCH 278/567] =?UTF-8?q?fix(backend):=20=EC=9D=B4=EB=AA=A8?= =?UTF-8?q?=EC=A7=80=EB=A5=BC=20=EB=93=B1=EB=A1=9D=ED=95=98=EA=B1=B0?= =?UTF-8?q?=EB=82=98=20=EA=B0=80=EC=A0=B8=EC=98=A4=EB=A0=A4=EA=B3=A0=20?= =?UTF-8?q?=ED=95=A0=20=EB=95=8C=20=EC=98=A4=EB=A5=98=EA=B0=80=20=EB=B0=9C?= =?UTF-8?q?=EC=83=9D=ED=95=A0=20=EC=88=98=20=EC=9E=88=EC=9D=8C=20(kokonect?= =?UTF-8?q?-link/cherrypick#508)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- CHANGELOG_CHERRYPICK.md | 3 +++ packages/backend/src/core/CustomEmojiService.ts | 2 +- 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/CHANGELOG_CHERRYPICK.md b/CHANGELOG_CHERRYPICK.md index 0b9a8f708f..efe09cbc4d 100644 --- a/CHANGELOG_CHERRYPICK.md +++ b/CHANGELOG_CHERRYPICK.md @@ -77,6 +77,9 @@ Misskey의 전체 변경 사항을 확인하려면, [CHANGELOG.md#2024xx](CHANGE - Fix: 이미지 자르기를 할 때 이미지 크기 전체를 표시하지 못할 수 있음 - Fix: 페이지에서 페이지 생성 버튼이 본문에 중복으로 표시됨 +### Server +- Fix: 이모지를 등록하거나 가져오려고 할 때 오류가 발생할 수 있음 (kokonect-link/cherrypick#508) + --- ## 4.11.1 diff --git a/packages/backend/src/core/CustomEmojiService.ts b/packages/backend/src/core/CustomEmojiService.ts index 41aebde7cb..e453b99aad 100644 --- a/packages/backend/src/core/CustomEmojiService.ts +++ b/packages/backend/src/core/CustomEmojiService.ts @@ -88,7 +88,7 @@ export class CustomEmojiService implements OnApplicationShutdown { this.localEmojisCache.refresh(); //this.prefetchEmojis([{name: data.name, host: null}]); - this.cache.set(`${data.name} ${data.host}`, emoji); + this.emojisCache.set(`${data.name} ${data.host}`, emoji); this.globalEventService.publishBroadcastStream('emojiAdded', { emoji: await this.emojiEntityService.packDetailed(emoji.id), From dc3501f1facc3669bfd568d743429f3929d086ba Mon Sep 17 00:00:00 2001 From: NoriDev Date: Thu, 3 Oct 2024 23:04:57 +0900 Subject: [PATCH 279/567] 4.12.0-beta.9 --- package.json | 2 +- packages/cherrypick-js/package.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/package.json b/package.json index 2363997f2a..8f71f2a59f 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "cherrypick", - "version": "4.12.0-beta.8", + "version": "4.12.0-beta.9", "basedMisskeyVersion": "2024.9.0", "codename": "nasubi", "repository": { diff --git a/packages/cherrypick-js/package.json b/packages/cherrypick-js/package.json index 6aa7801df1..8b6c3953ae 100644 --- a/packages/cherrypick-js/package.json +++ b/packages/cherrypick-js/package.json @@ -1,7 +1,7 @@ { "type": "module", "name": "cherrypick-js", - "version": "4.12.0-beta.8", + "version": "4.12.0-beta.9", "basedMisskeyVersion": "2024.9.0", "description": "CherryPick SDK for JavaScript", "license": "MIT", From 505cc07eb92742caa3d4ca8b29d3937d48f3c053 Mon Sep 17 00:00:00 2001 From: NoriDev Date: Thu, 3 Oct 2024 23:06:44 +0900 Subject: [PATCH 280/567] Update CHANGELOG_CHERRYPICK.md --- CHANGELOG_CHERRYPICK.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGELOG_CHERRYPICK.md b/CHANGELOG_CHERRYPICK.md index efe09cbc4d..b171feafc4 100644 --- a/CHANGELOG_CHERRYPICK.md +++ b/CHANGELOG_CHERRYPICK.md @@ -78,7 +78,7 @@ Misskey의 전체 변경 사항을 확인하려면, [CHANGELOG.md#2024xx](CHANGE - Fix: 페이지에서 페이지 생성 버튼이 본문에 중복으로 표시됨 ### Server -- Fix: 이모지를 등록하거나 가져오려고 할 때 오류가 발생할 수 있음 (kokonect-link/cherrypick#508) +- Fix: 이모지를 등록하거나 가져오려고 할 때 오류가 발생할 수 있음 (kokonect-link/cherrypick#487), (kokonect-link/cherrypick#508) --- From bbc3637bee4504ea13b1b2607df9b014f4acda30 Mon Sep 17 00:00:00 2001 From: NoriDev Date: Thu, 3 Oct 2024 23:18:53 +0900 Subject: [PATCH 281/567] Update CHANGELOG_CHERRYPICK.md --- CHANGELOG_CHERRYPICK.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGELOG_CHERRYPICK.md b/CHANGELOG_CHERRYPICK.md index b171feafc4..5cdb307814 100644 --- a/CHANGELOG_CHERRYPICK.md +++ b/CHANGELOG_CHERRYPICK.md @@ -72,7 +72,7 @@ Misskey의 전체 변경 사항을 확인하려면, [CHANGELOG.md#2024xx](CHANGE - Enhance: 이미지 뷰어가 파일 이름과 캡션을 동시에 표시하도록 변경 - Enhance: 노트를 작성할 때 첨부한 파일에 캡션이 존재하는 경우 파일 목록에 아이콘을 표시함 - Enhance: 미디어 숨기기 버튼의 디자인을 개선함 -- Enhance: 갤러리를 노트로 공유할 때 줄바꿈이 적용됨 +- Enhance: 갤러리를 노트로 공유할 때 노트 내용에 줄바꿈을 적용함 - Fix: 환경설정 백업 시 일부 설정이 누락되어 백업될 수 있음 - Fix: 이미지 자르기를 할 때 이미지 크기 전체를 표시하지 못할 수 있음 - Fix: 페이지에서 페이지 생성 버튼이 본문에 중복으로 표시됨 From 4e359dce4a326838e6665c98eaffbee5952a8a0f Mon Sep 17 00:00:00 2001 From: NoriDev Date: Thu, 3 Oct 2024 23:23:26 +0900 Subject: [PATCH 282/567] Update CHANGELOG_CHERRYPICK.md --- CHANGELOG_CHERRYPICK.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGELOG_CHERRYPICK.md b/CHANGELOG_CHERRYPICK.md index 5cdb307814..3aaf0ed9c2 100644 --- a/CHANGELOG_CHERRYPICK.md +++ b/CHANGELOG_CHERRYPICK.md @@ -30,7 +30,7 @@ Misskey의 전체 변경 사항을 확인하려면, [CHANGELOG.md#2024xx](CHANGE ## NOTE - Change: Enable condensed line의 기본값이 꺼짐으로 변경됨 - - 디자인이 상대적으로 이상하게 보일 수 있으며, 실험실 기능이므로 이 기능이 변경하는 부분을 확실히 알고 있는 사용자만 활성화할 것을 권장합니다. + - 활성화하면 글자를 표시하기 위한 여유 공간이 좁을 때 디자인이 상대적으로 어색하게 보일 수 있으며, 실험실 기능이므로 이 기능이 변경하는 부분을 확실히 알고 있는 사용자만 활성화할 것을 권장합니다. ### General - Feat: 위젯 영역을 숨길 수 있음 From 56b5192d7d2a5ced2f438ff2356b07536c76560a Mon Sep 17 00:00:00 2001 From: NoriDev Date: Thu, 3 Oct 2024 23:30:36 +0900 Subject: [PATCH 283/567] fix build error --- packages/frontend/src/os.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/frontend/src/os.ts b/packages/frontend/src/os.ts index 00510551b0..5f0f399667 100644 --- a/packages/frontend/src/os.ts +++ b/packages/frontend/src/os.ts @@ -24,7 +24,7 @@ import MkPasswordDialog from '@/components/MkPasswordDialog.vue'; import MkEmojiPickerDialog from '@/components/MkEmojiPickerDialog.vue'; import MkPopupMenu from '@/components/MkPopupMenu.vue'; import MkContextMenu from '@/components/MkContextMenu.vue'; -import MkQRcode from '@/components/MkQRcode.vue'; +import MkQRCode from '@/components/MkQRCode.vue'; import { copyToClipboard } from '@/scripts/copy-to-clipboard.js'; import { pleaseLogin } from '@/scripts/please-login.js'; import { showMovedDialog } from '@/scripts/show-moved-dialog.js'; @@ -743,7 +743,7 @@ export async function displayQRCode(qrCode: string) { (await new Promise<(() => void ) | undefined>((resolve) => { let dispose: (() => void ) | undefined; popup( - MkQRcode, + MkQRCode, { qrCode }, { closed: () => { From a08a38c29ac7a2f78872a76a50a76e0a4bd5c9b1 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: Fri, 4 Oct 2024 07:54:19 +0900 Subject: [PATCH 284/567] =?UTF-8?q?fix(test):=20=E5=88=9D=E6=9C=9F?= =?UTF-8?q?=E3=82=BB=E3=83=83=E3=83=88=E3=82=A2=E3=83=83=E3=83=97=E3=81=A7?= =?UTF-8?q?=E5=88=9D=E6=9C=9F=E3=83=91=E3=82=B9=E3=83=AF=E3=83=BC=E3=83=89?= =?UTF-8?q?=E3=82=92=E5=85=A5=E5=8A=9B=E3=81=97=E3=81=A6=E3=81=84=E3=81=AA?= =?UTF-8?q?=E3=81=84=E3=81=AE=E3=82=92=E4=BF=AE=E6=AD=A3=20(#14685)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- cypress/support/commands.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/cypress/support/commands.ts b/cypress/support/commands.ts index 281f2e6ccd..3cdf4e2087 100644 --- a/cypress/support/commands.ts +++ b/cypress/support/commands.ts @@ -48,6 +48,7 @@ Cypress.Commands.add('registerUser', (username, password, isAdmin = false) => { cy.request('POST', route, { username: username, password: password, + ...(isAdmin ? { setupPassword: 'example_password_please_change_this_or_you_will_get_hacked' } : {}), }).its('body').as(username); }); From c1597be45806be25974a11bacc09dcc77c0ae96c Mon Sep 17 00:00:00 2001 From: syuilo <4439005+syuilo@users.noreply.github.com> Date: Fri, 4 Oct 2024 10:18:36 +0900 Subject: [PATCH 285/567] :art: --- .../frontend/src/components/MkAbuseReport.vue | 142 +++++++++--------- packages/frontend/src/components/MkFolder.vue | 7 +- .../src/components/global/RouterView.vue | 3 + packages/frontend/src/pages/admin/abuses.vue | 6 +- packages/frontend/src/pages/admin/index.vue | 2 +- .../frontend/src/pages/settings/index.vue | 2 +- 6 files changed, 83 insertions(+), 79 deletions(-) diff --git a/packages/frontend/src/components/MkAbuseReport.vue b/packages/frontend/src/components/MkAbuseReport.vue index a28e7c2559..aa2bffaa17 100644 --- a/packages/frontend/src/components/MkAbuseReport.vue +++ b/packages/frontend/src/components/MkAbuseReport.vue @@ -4,112 +4,106 @@ SPDX-License-Identifier: AGPL-3.0-only --> - diff --git a/packages/frontend/src/components/MkFolder.vue b/packages/frontend/src/components/MkFolder.vue index a5f3069d45..8262ae5d0c 100644 --- a/packages/frontend/src/components/MkFolder.vue +++ b/packages/frontend/src/components/MkFolder.vue @@ -38,9 +38,12 @@ SPDX-License-Identifier: AGPL-3.0-only >
- + +
+ +
@@ -59,9 +62,11 @@ import { defaultStore } from '@/store.js'; const props = withDefaults(defineProps<{ defaultOpen?: boolean; maxHeight?: number | null; + withSpacer?: boolean; }>(), { defaultOpen: false, maxHeight: null, + withSpacer: true, }); const getBgColor = (el: HTMLElement) => { diff --git a/packages/frontend/src/components/global/RouterView.vue b/packages/frontend/src/components/global/RouterView.vue index 19bd794a5d..38bdfc52d4 100644 --- a/packages/frontend/src/components/global/RouterView.vue +++ b/packages/frontend/src/components/global/RouterView.vue @@ -27,6 +27,7 @@ import MkLoadingPage from '@/pages/_loading_.vue'; const props = defineProps<{ router?: IRouter; + nested?: boolean; }>(); const router = props.router ?? inject('router'); @@ -39,6 +40,8 @@ const currentDepth = inject('routerCurrentDepth', 0); provide('routerCurrentDepth', currentDepth + 1); function resolveNested(current: Resolved, d = 0): Resolved | null { + if (!props.nested) return current; + if (d === currentDepth) { return current; } else { diff --git a/packages/frontend/src/pages/admin/abuses.vue b/packages/frontend/src/pages/admin/abuses.vue index 0b9847fed3..33021ae025 100644 --- a/packages/frontend/src/pages/admin/abuses.vue +++ b/packages/frontend/src/pages/admin/abuses.vue @@ -44,8 +44,10 @@ SPDX-License-Identifier: AGPL-3.0-only
--> - - + +
+ +
diff --git a/packages/frontend/src/pages/admin/index.vue b/packages/frontend/src/pages/admin/index.vue index db87bd996d..61745e0ff3 100644 --- a/packages/frontend/src/pages/admin/index.vue +++ b/packages/frontend/src/pages/admin/index.vue @@ -25,7 +25,7 @@ SPDX-License-Identifier: AGPL-3.0-only
- +
diff --git a/packages/frontend/src/pages/settings/index.vue b/packages/frontend/src/pages/settings/index.vue index 7d16740a3e..96a95f1635 100644 --- a/packages/frontend/src/pages/settings/index.vue +++ b/packages/frontend/src/pages/settings/index.vue @@ -17,7 +17,7 @@ SPDX-License-Identifier: AGPL-3.0-only
- +
From 864327b4a7c59d79b5ba17459c795f007c110e82 Mon Sep 17 00:00:00 2001 From: syuilo <4439005+syuilo@users.noreply.github.com> Date: Fri, 4 Oct 2024 11:20:56 +0900 Subject: [PATCH 286/567] update deps --- packages/backend/package.json | 6 +- packages/frontend-embed/package.json | 12 +- packages/frontend/package.json | 50 +- pnpm-lock.yaml | 949 +++++++++++++++------------ 4 files changed, 554 insertions(+), 463 deletions(-) diff --git a/packages/backend/package.json b/packages/backend/package.json index bd5dab618a..c6e31797f8 100644 --- a/packages/backend/package.json +++ b/packages/backend/package.json @@ -101,7 +101,7 @@ "bcryptjs": "2.4.3", "blurhash": "2.0.5", "body-parser": "1.20.3", - "bullmq": "5.13.2", + "bullmq": "5.15.0", "cacheable-lookup": "7.0.0", "cbor": "9.0.2", "chalk": "5.3.0", @@ -166,7 +166,7 @@ "rename": "1.0.4", "rss-parser": "3.13.0", "rxjs": "7.8.1", - "sanitize-html": "2.13.0", + "sanitize-html": "2.13.1", "secure-json-parse": "2.7.0", "sharp": "0.33.5", "slacc": "0.0.10", @@ -194,7 +194,7 @@ "@types/archiver": "6.0.2", "@types/bcryptjs": "2.4.6", "@types/body-parser": "1.19.5", - "@types/color-convert": "2.0.3", + "@types/color-convert": "2.0.4", "@types/content-disposition": "0.5.8", "@types/fluent-ffmpeg": "2.1.26", "@types/htmlescape": "1.1.3", diff --git a/packages/frontend-embed/package.json b/packages/frontend-embed/package.json index 9e720b9835..cb62191c3b 100644 --- a/packages/frontend-embed/package.json +++ b/packages/frontend-embed/package.json @@ -18,7 +18,7 @@ "@tabler/icons-webfont": "3.3.0", "@twemoji/parser": "15.1.1", "@vitejs/plugin-vue": "5.1.4", - "@vue/compiler-sfc": "3.5.10", + "@vue/compiler-sfc": "3.5.11", "astring": "1.9.0", "buraha": "0.0.1", "estree-walker": "3.0.3", @@ -27,8 +27,8 @@ "frontend-shared": "workspace:*", "punycode": "2.3.1", "rollup": "4.22.5", - "sass": "1.79.3", - "shiki": "1.12.0", + "sass": "1.79.4", + "shiki": "1.21.0", "tinycolor2": "1.6.0", "tsc-alias": "1.8.10", "tsconfig-paths": "4.2.0", @@ -36,7 +36,7 @@ "uuid": "10.0.0", "json5": "2.2.3", "vite": "5.4.8", - "vue": "3.5.10" + "vue": "3.5.11" }, "devDependencies": { "@misskey-dev/summaly": "5.1.0", @@ -51,10 +51,10 @@ "@typescript-eslint/eslint-plugin": "7.17.0", "@typescript-eslint/parser": "7.17.0", "@vitest/coverage-v8": "1.6.0", - "@vue/runtime-core": "3.5.10", + "@vue/runtime-core": "3.5.11", "acorn": "8.12.1", "cross-env": "7.0.3", - "eslint-plugin-import": "2.30.0", + "eslint-plugin-import": "2.31.0", "eslint-plugin-vue": "9.28.0", "fast-glob": "3.3.2", "happy-dom": "10.0.3", diff --git a/packages/frontend/package.json b/packages/frontend/package.json index 02878c64d9..11d7ff3963 100644 --- a/packages/frontend/package.json +++ b/packages/frontend/package.json @@ -28,7 +28,7 @@ "@tabler/icons-webfont": "3.3.0", "@twemoji/parser": "15.1.1", "@vitejs/plugin-vue": "5.1.4", - "@vue/compiler-sfc": "3.5.10", + "@vue/compiler-sfc": "3.5.11", "aiscript-vscode": "github:aiscript-dev/aiscript-vscode#v0.1.11", "astring": "1.9.0", "broadcast-channel": "7.0.0", @@ -39,7 +39,7 @@ "chartjs-chart-matrix": "2.0.1", "chartjs-plugin-gradient": "0.6.1", "chartjs-plugin-zoom": "2.0.1", - "chromatic": "11.10.4", + "chromatic": "11.11.0", "compare-versions": "6.1.1", "cropperjs": "2.0.0-rc.2", "date-fns": "2.30.0", @@ -58,7 +58,7 @@ "photoswipe": "5.4.4", "punycode": "2.3.1", "rollup": "4.22.5", - "sanitize-html": "2.13.0", + "sanitize-html": "2.13.1", "sass": "1.79.3", "shiki": "1.21.0", "strict-event-emitter-types": "2.0.0", @@ -72,29 +72,29 @@ "uuid": "10.0.0", "v-code-diff": "1.13.1", "vite": "5.4.8", - "vue": "3.5.10", + "vue": "3.5.11", "vuedraggable": "next" }, "devDependencies": { "@misskey-dev/summaly": "5.1.0", - "@storybook/addon-actions": "8.3.3", - "@storybook/addon-essentials": "8.3.3", - "@storybook/addon-interactions": "8.3.3", - "@storybook/addon-links": "8.3.3", - "@storybook/addon-mdx-gfm": "8.3.3", - "@storybook/addon-storysource": "8.3.3", - "@storybook/blocks": "8.3.3", - "@storybook/components": "8.3.3", - "@storybook/core-events": "8.3.3", - "@storybook/manager-api": "8.3.3", - "@storybook/preview-api": "8.3.3", - "@storybook/react": "8.3.3", - "@storybook/react-vite": "8.3.3", - "@storybook/test": "8.3.3", - "@storybook/theming": "8.3.3", - "@storybook/types": "8.3.3", - "@storybook/vue3": "8.3.3", - "@storybook/vue3-vite": "8.3.3", + "@storybook/addon-actions": "8.3.4", + "@storybook/addon-essentials": "8.3.4", + "@storybook/addon-interactions": "8.3.4", + "@storybook/addon-links": "8.3.4", + "@storybook/addon-mdx-gfm": "8.3.4", + "@storybook/addon-storysource": "8.3.4", + "@storybook/blocks": "8.3.4", + "@storybook/components": "8.3.4", + "@storybook/core-events": "8.3.4", + "@storybook/manager-api": "8.3.4", + "@storybook/preview-api": "8.3.4", + "@storybook/react": "8.3.4", + "@storybook/react-vite": "8.3.4", + "@storybook/test": "8.3.4", + "@storybook/theming": "8.3.4", + "@storybook/types": "8.3.4", + "@storybook/vue3": "8.3.4", + "@storybook/vue3-vite": "8.3.4", "@testing-library/vue": "8.1.0", "@types/estree": "1.0.6", "@types/matter-js": "0.19.7", @@ -110,11 +110,11 @@ "@typescript-eslint/eslint-plugin": "7.17.0", "@typescript-eslint/parser": "7.17.0", "@vitest/coverage-v8": "1.6.0", - "@vue/runtime-core": "3.5.10", + "@vue/runtime-core": "3.5.11", "acorn": "8.12.1", "cross-env": "7.0.3", "cypress": "13.15.0", - "eslint-plugin-import": "2.30.0", + "eslint-plugin-import": "2.31.0", "eslint-plugin-vue": "9.28.0", "fast-glob": "3.3.2", "happy-dom": "10.0.3", @@ -128,7 +128,7 @@ "react-dom": "18.3.1", "seedrandom": "3.0.5", "start-server-and-test": "2.0.8", - "storybook": "8.3.3", + "storybook": "8.3.4", "storybook-addon-misskey-theme": "github:misskey-dev/storybook-addon-misskey-theme", "vite-plugin-turbosnap": "1.0.3", "vitest": "1.6.0", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 53d5dbbde0..b21a74cf57 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -52,7 +52,7 @@ importers: devDependencies: '@misskey-dev/eslint-plugin': specifier: 2.0.3 - version: 2.0.3(@eslint/compat@1.1.1)(@typescript-eslint/eslint-plugin@7.17.0(@typescript-eslint/parser@7.17.0(eslint@9.8.0)(typescript@5.6.2))(eslint@9.8.0)(typescript@5.6.2))(@typescript-eslint/parser@7.17.0(eslint@9.8.0)(typescript@5.6.2))(eslint-plugin-import@2.30.0(@typescript-eslint/parser@7.17.0(eslint@9.8.0)(typescript@5.6.2))(eslint@9.8.0))(eslint@9.8.0)(globals@15.9.0) + version: 2.0.3(@eslint/compat@1.1.1)(@typescript-eslint/eslint-plugin@7.17.0(@typescript-eslint/parser@7.17.0(eslint@9.8.0)(typescript@5.6.2))(eslint@9.8.0)(typescript@5.6.2))(@typescript-eslint/parser@7.17.0(eslint@9.8.0)(typescript@5.6.2))(eslint-plugin-import@2.31.0(@typescript-eslint/parser@7.17.0(eslint@9.8.0)(typescript@5.6.2))(eslint@9.8.0))(eslint@9.8.0)(globals@15.9.0) '@types/node': specifier: 20.14.12 version: 20.14.12 @@ -192,8 +192,8 @@ importers: specifier: 1.20.3 version: 1.20.3 bullmq: - specifier: 5.13.2 - version: 5.13.2 + specifier: 5.15.0 + version: 5.15.0 cacheable-lookup: specifier: 7.0.0 version: 7.0.0 @@ -387,8 +387,8 @@ importers: specifier: 7.8.1 version: 7.8.1 sanitize-html: - specifier: 2.13.0 - version: 2.13.0 + specifier: 2.13.1 + version: 2.13.1 secure-json-parse: specifier: 2.7.0 version: 2.7.0 @@ -554,8 +554,8 @@ importers: specifier: 1.19.5 version: 1.19.5 '@types/color-convert': - specifier: 2.0.3 - version: 2.0.3 + specifier: 2.0.4 + version: 2.0.4 '@types/content-disposition': specifier: 0.5.8 version: 0.5.8 @@ -723,10 +723,10 @@ importers: version: 15.1.1 '@vitejs/plugin-vue': specifier: 5.1.4 - version: 5.1.4(vite@5.4.8(@types/node@20.14.12)(sass@1.79.3)(terser@5.33.0))(vue@3.5.10(typescript@5.6.2)) + version: 5.1.4(vite@5.4.8(@types/node@20.14.12)(sass@1.79.3)(terser@5.33.0))(vue@3.5.11(typescript@5.6.2)) '@vue/compiler-sfc': - specifier: 3.5.10 - version: 3.5.10 + specifier: 3.5.11 + version: 3.5.11 aiscript-vscode: specifier: github:aiscript-dev/aiscript-vscode#v0.1.11 version: https://codeload.github.com/aiscript-dev/aiscript-vscode/tar.gz/e1e1b27f2f72cd28a473e004b6da0d8fc0bd40d9 @@ -758,8 +758,8 @@ importers: specifier: 2.0.1 version: 2.0.1(chart.js@4.4.4) chromatic: - specifier: 11.10.4 - version: 11.10.4 + specifier: 11.11.0 + version: 11.11.0 compare-versions: specifier: 6.1.1 version: 6.1.1 @@ -815,8 +815,8 @@ importers: specifier: 4.22.5 version: 4.22.5 sanitize-html: - specifier: 2.13.0 - version: 2.13.0 + specifier: 2.13.1 + version: 2.13.1 sass: specifier: 1.79.3 version: 1.79.3 @@ -852,77 +852,77 @@ importers: version: 10.0.0 v-code-diff: specifier: 1.13.1 - version: 1.13.1(vue@3.5.10(typescript@5.6.2)) + version: 1.13.1(vue@3.5.11(typescript@5.6.2)) vite: specifier: 5.4.8 version: 5.4.8(@types/node@20.14.12)(sass@1.79.3)(terser@5.33.0) vue: - specifier: 3.5.10 - version: 3.5.10(typescript@5.6.2) + specifier: 3.5.11 + version: 3.5.11(typescript@5.6.2) vuedraggable: specifier: next - version: 4.1.0(vue@3.5.10(typescript@5.6.2)) + version: 4.1.0(vue@3.5.11(typescript@5.6.2)) devDependencies: '@misskey-dev/summaly': specifier: 5.1.0 version: 5.1.0 '@storybook/addon-actions': - specifier: 8.3.3 - version: 8.3.3(storybook@8.3.3(bufferutil@4.0.8)(utf-8-validate@6.0.4)) + specifier: 8.3.4 + version: 8.3.4(storybook@8.3.4(bufferutil@4.0.8)(utf-8-validate@6.0.4)) '@storybook/addon-essentials': - specifier: 8.3.3 - version: 8.3.3(storybook@8.3.3(bufferutil@4.0.8)(utf-8-validate@6.0.4)) + specifier: 8.3.4 + version: 8.3.4(storybook@8.3.4(bufferutil@4.0.8)(utf-8-validate@6.0.4)) '@storybook/addon-interactions': - specifier: 8.3.3 - version: 8.3.3(storybook@8.3.3(bufferutil@4.0.8)(utf-8-validate@6.0.4)) + specifier: 8.3.4 + version: 8.3.4(storybook@8.3.4(bufferutil@4.0.8)(utf-8-validate@6.0.4)) '@storybook/addon-links': - specifier: 8.3.3 - version: 8.3.3(react@18.3.1)(storybook@8.3.3(bufferutil@4.0.8)(utf-8-validate@6.0.4)) + specifier: 8.3.4 + version: 8.3.4(react@18.3.1)(storybook@8.3.4(bufferutil@4.0.8)(utf-8-validate@6.0.4)) '@storybook/addon-mdx-gfm': - specifier: 8.3.3 - version: 8.3.3(storybook@8.3.3(bufferutil@4.0.8)(utf-8-validate@6.0.4)) + specifier: 8.3.4 + version: 8.3.4(storybook@8.3.4(bufferutil@4.0.8)(utf-8-validate@6.0.4)) '@storybook/addon-storysource': - specifier: 8.3.3 - version: 8.3.3(storybook@8.3.3(bufferutil@4.0.8)(utf-8-validate@6.0.4)) + specifier: 8.3.4 + version: 8.3.4(storybook@8.3.4(bufferutil@4.0.8)(utf-8-validate@6.0.4)) '@storybook/blocks': - specifier: 8.3.3 - version: 8.3.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@8.3.3(bufferutil@4.0.8)(utf-8-validate@6.0.4)) + specifier: 8.3.4 + version: 8.3.4(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@8.3.4(bufferutil@4.0.8)(utf-8-validate@6.0.4)) '@storybook/components': - specifier: 8.3.3 - version: 8.3.3(storybook@8.3.3(bufferutil@4.0.8)(utf-8-validate@6.0.4)) + specifier: 8.3.4 + version: 8.3.4(storybook@8.3.4(bufferutil@4.0.8)(utf-8-validate@6.0.4)) '@storybook/core-events': - specifier: 8.3.3 - version: 8.3.3(storybook@8.3.3(bufferutil@4.0.8)(utf-8-validate@6.0.4)) + specifier: 8.3.4 + version: 8.3.4(storybook@8.3.4(bufferutil@4.0.8)(utf-8-validate@6.0.4)) '@storybook/manager-api': - specifier: 8.3.3 - version: 8.3.3(storybook@8.3.3(bufferutil@4.0.8)(utf-8-validate@6.0.4)) + specifier: 8.3.4 + version: 8.3.4(storybook@8.3.4(bufferutil@4.0.8)(utf-8-validate@6.0.4)) '@storybook/preview-api': - specifier: 8.3.3 - version: 8.3.3(storybook@8.3.3(bufferutil@4.0.8)(utf-8-validate@6.0.4)) + specifier: 8.3.4 + version: 8.3.4(storybook@8.3.4(bufferutil@4.0.8)(utf-8-validate@6.0.4)) '@storybook/react': - specifier: 8.3.3 - version: 8.3.3(@storybook/test@8.3.3(storybook@8.3.3(bufferutil@4.0.8)(utf-8-validate@6.0.4)))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@8.3.3(bufferutil@4.0.8)(utf-8-validate@6.0.4))(typescript@5.6.2) + specifier: 8.3.4 + version: 8.3.4(@storybook/test@8.3.4(storybook@8.3.4(bufferutil@4.0.8)(utf-8-validate@6.0.4)))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@8.3.4(bufferutil@4.0.8)(utf-8-validate@6.0.4))(typescript@5.6.2) '@storybook/react-vite': - specifier: 8.3.3 - version: 8.3.3(@storybook/test@8.3.3(storybook@8.3.3(bufferutil@4.0.8)(utf-8-validate@6.0.4)))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(rollup@4.22.5)(storybook@8.3.3(bufferutil@4.0.8)(utf-8-validate@6.0.4))(typescript@5.6.2)(vite@5.4.8(@types/node@20.14.12)(sass@1.79.3)(terser@5.33.0)) + specifier: 8.3.4 + version: 8.3.4(@storybook/test@8.3.4(storybook@8.3.4(bufferutil@4.0.8)(utf-8-validate@6.0.4)))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(rollup@4.22.5)(storybook@8.3.4(bufferutil@4.0.8)(utf-8-validate@6.0.4))(typescript@5.6.2)(vite@5.4.8(@types/node@20.14.12)(sass@1.79.3)(terser@5.33.0)) '@storybook/test': - specifier: 8.3.3 - version: 8.3.3(storybook@8.3.3(bufferutil@4.0.8)(utf-8-validate@6.0.4)) + specifier: 8.3.4 + version: 8.3.4(storybook@8.3.4(bufferutil@4.0.8)(utf-8-validate@6.0.4)) '@storybook/theming': - specifier: 8.3.3 - version: 8.3.3(storybook@8.3.3(bufferutil@4.0.8)(utf-8-validate@6.0.4)) + specifier: 8.3.4 + version: 8.3.4(storybook@8.3.4(bufferutil@4.0.8)(utf-8-validate@6.0.4)) '@storybook/types': - specifier: 8.3.3 - version: 8.3.3(storybook@8.3.3(bufferutil@4.0.8)(utf-8-validate@6.0.4)) + specifier: 8.3.4 + version: 8.3.4(storybook@8.3.4(bufferutil@4.0.8)(utf-8-validate@6.0.4)) '@storybook/vue3': - specifier: 8.3.3 - version: 8.3.3(storybook@8.3.3(bufferutil@4.0.8)(utf-8-validate@6.0.4))(vue@3.5.10(typescript@5.6.2)) + specifier: 8.3.4 + version: 8.3.4(storybook@8.3.4(bufferutil@4.0.8)(utf-8-validate@6.0.4))(vue@3.5.11(typescript@5.6.2)) '@storybook/vue3-vite': - specifier: 8.3.3 - version: 8.3.3(storybook@8.3.3(bufferutil@4.0.8)(utf-8-validate@6.0.4))(vite@5.4.8(@types/node@20.14.12)(sass@1.79.3)(terser@5.33.0))(vue@3.5.10(typescript@5.6.2)) + specifier: 8.3.4 + version: 8.3.4(storybook@8.3.4(bufferutil@4.0.8)(utf-8-validate@6.0.4))(vite@5.4.8(@types/node@20.14.12)(sass@1.79.3)(terser@5.33.0))(vue@3.5.11(typescript@5.6.2)) '@testing-library/vue': specifier: 8.1.0 - version: 8.1.0(@vue/compiler-sfc@3.5.10)(@vue/server-renderer@3.5.10(vue@3.5.10(typescript@5.6.2)))(vue@3.5.10(typescript@5.6.2)) + version: 8.1.0(@vue/compiler-sfc@3.5.11)(@vue/server-renderer@3.5.11(vue@3.5.11(typescript@5.6.2)))(vue@3.5.11(typescript@5.6.2)) '@types/estree': specifier: 1.0.6 version: 1.0.6 @@ -966,8 +966,8 @@ importers: specifier: 1.6.0 version: 1.6.0(vitest@1.6.0(@types/node@20.14.12)(happy-dom@10.0.3)(jsdom@24.1.1(bufferutil@4.0.8)(utf-8-validate@6.0.4))(sass@1.79.3)(terser@5.33.0)) '@vue/runtime-core': - specifier: 3.5.10 - version: 3.5.10 + specifier: 3.5.11 + version: 3.5.11 acorn: specifier: 8.12.1 version: 8.12.1 @@ -978,8 +978,8 @@ importers: specifier: 13.15.0 version: 13.15.0 eslint-plugin-import: - specifier: 2.30.0 - version: 2.30.0(@typescript-eslint/parser@7.17.0(eslint@9.11.0)(typescript@5.6.2))(eslint@9.11.0) + specifier: 2.31.0 + version: 2.31.0(@typescript-eslint/parser@7.17.0(eslint@9.11.0)(typescript@5.6.2))(eslint@9.11.0) eslint-plugin-vue: specifier: 9.28.0 version: 9.28.0(eslint@9.11.0) @@ -1020,11 +1020,11 @@ importers: specifier: 2.0.8 version: 2.0.8 storybook: - specifier: 8.3.3 - version: 8.3.3(bufferutil@4.0.8)(utf-8-validate@6.0.4) + specifier: 8.3.4 + version: 8.3.4(bufferutil@4.0.8)(utf-8-validate@6.0.4) storybook-addon-misskey-theme: specifier: github:misskey-dev/storybook-addon-misskey-theme - version: https://codeload.github.com/misskey-dev/storybook-addon-misskey-theme/tar.gz/cf583db098365b2ccc81a82f63ca9c93bc32b640(@storybook/blocks@8.3.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@8.3.3(bufferutil@4.0.8)(utf-8-validate@6.0.4)))(@storybook/components@8.3.3(storybook@8.3.3(bufferutil@4.0.8)(utf-8-validate@6.0.4)))(@storybook/core-events@8.3.3(storybook@8.3.3(bufferutil@4.0.8)(utf-8-validate@6.0.4)))(@storybook/manager-api@8.3.3(storybook@8.3.3(bufferutil@4.0.8)(utf-8-validate@6.0.4)))(@storybook/preview-api@8.3.3(storybook@8.3.3(bufferutil@4.0.8)(utf-8-validate@6.0.4)))(@storybook/theming@8.3.3(storybook@8.3.3(bufferutil@4.0.8)(utf-8-validate@6.0.4)))(@storybook/types@8.3.3(storybook@8.3.3(bufferutil@4.0.8)(utf-8-validate@6.0.4)))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + version: https://codeload.github.com/misskey-dev/storybook-addon-misskey-theme/tar.gz/cf583db098365b2ccc81a82f63ca9c93bc32b640(@storybook/blocks@8.3.4(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@8.3.4(bufferutil@4.0.8)(utf-8-validate@6.0.4)))(@storybook/components@8.3.4(storybook@8.3.4(bufferutil@4.0.8)(utf-8-validate@6.0.4)))(@storybook/core-events@8.3.4(storybook@8.3.4(bufferutil@4.0.8)(utf-8-validate@6.0.4)))(@storybook/manager-api@8.3.4(storybook@8.3.4(bufferutil@4.0.8)(utf-8-validate@6.0.4)))(@storybook/preview-api@8.3.4(storybook@8.3.4(bufferutil@4.0.8)(utf-8-validate@6.0.4)))(@storybook/theming@8.3.4(storybook@8.3.4(bufferutil@4.0.8)(utf-8-validate@6.0.4)))(@storybook/types@8.3.4(storybook@8.3.4(bufferutil@4.0.8)(utf-8-validate@6.0.4)))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) vite-plugin-turbosnap: specifier: 1.0.3 version: 1.0.3 @@ -1066,10 +1066,10 @@ importers: version: 15.1.1 '@vitejs/plugin-vue': specifier: 5.1.4 - version: 5.1.4(vite@5.4.8(@types/node@20.14.12)(sass@1.79.3)(terser@5.33.0))(vue@3.5.10(typescript@5.6.2)) + version: 5.1.4(vite@5.4.8(@types/node@20.14.12)(sass@1.79.4)(terser@5.33.0))(vue@3.5.11(typescript@5.6.2)) '@vue/compiler-sfc': - specifier: 3.5.10 - version: 3.5.10 + specifier: 3.5.11 + version: 3.5.11 astring: specifier: 1.9.0 version: 1.9.0 @@ -1098,11 +1098,11 @@ importers: specifier: 4.22.5 version: 4.22.5 sass: - specifier: 1.79.3 - version: 1.79.3 + specifier: 1.79.4 + version: 1.79.4 shiki: - specifier: 1.12.0 - version: 1.12.0 + specifier: 1.21.0 + version: 1.21.0 tinycolor2: specifier: 1.6.0 version: 1.6.0 @@ -1120,17 +1120,17 @@ importers: version: 10.0.0 vite: specifier: 5.4.8 - version: 5.4.8(@types/node@20.14.12)(sass@1.79.3)(terser@5.33.0) + version: 5.4.8(@types/node@20.14.12)(sass@1.79.4)(terser@5.33.0) vue: - specifier: 3.5.10 - version: 3.5.10(typescript@5.6.2) + specifier: 3.5.11 + version: 3.5.11(typescript@5.6.2) devDependencies: '@misskey-dev/summaly': specifier: 5.1.0 version: 5.1.0 '@testing-library/vue': specifier: 8.1.0 - version: 8.1.0(@vue/compiler-sfc@3.5.10)(@vue/server-renderer@3.5.10(vue@3.5.10(typescript@5.6.2)))(vue@3.5.10(typescript@5.6.2)) + version: 8.1.0(@vue/compiler-sfc@3.5.11)(@vue/server-renderer@3.5.11(vue@3.5.11(typescript@5.6.2)))(vue@3.5.11(typescript@5.6.2)) '@types/estree': specifier: 1.0.6 version: 1.0.6 @@ -1160,10 +1160,10 @@ importers: version: 7.17.0(eslint@9.11.0)(typescript@5.6.2) '@vitest/coverage-v8': specifier: 1.6.0 - version: 1.6.0(vitest@1.6.0(@types/node@20.14.12)(happy-dom@10.0.3)(jsdom@24.1.1)(sass@1.79.3)(terser@5.33.0)) + version: 1.6.0(vitest@1.6.0(@types/node@20.14.12)(happy-dom@10.0.3)(jsdom@24.1.1)(sass@1.79.4)(terser@5.33.0)) '@vue/runtime-core': - specifier: 3.5.10 - version: 3.5.10 + specifier: 3.5.11 + version: 3.5.11 acorn: specifier: 8.12.1 version: 8.12.1 @@ -1171,8 +1171,8 @@ importers: specifier: 7.0.3 version: 7.0.3 eslint-plugin-import: - specifier: 2.30.0 - version: 2.30.0(@typescript-eslint/parser@7.17.0(eslint@9.11.0)(typescript@5.6.2))(eslint@9.11.0) + specifier: 2.31.0 + version: 2.31.0(@typescript-eslint/parser@7.17.0(eslint@9.11.0)(typescript@5.6.2))(eslint@9.11.0) eslint-plugin-vue: specifier: 9.28.0 version: 9.28.0(eslint@9.11.0) @@ -3697,9 +3697,6 @@ packages: resolution: {integrity: sha512-+1I5H8dojURiEUGPliDwheQk8dhjp8uV1sMccR/W/zjFrt4wZyPs+Ttp/V7gzm9LDJoNek9tmELert/jQqWTgg==} engines: {node: '>=14.18'} - '@shikijs/core@1.12.0': - resolution: {integrity: sha512-mc1cLbm6UQ8RxLc0dZES7v5rkH+99LxQp/ZvTqV3NLyYsO/fD6JhEflP1H5b2SDq9gI0+0G36AVZWxvounfR9w==} - '@shikijs/core@1.21.0': resolution: {integrity: sha512-zAPMJdiGuqXpZQ+pWNezQAk5xhzRXBNiECFPcJLtUdsFM3f//G95Z15EHTnHchYycU8kIIysqGgxp8OVSj1SPQ==} @@ -4001,97 +3998,97 @@ packages: '@sqltools/formatter@1.2.5': resolution: {integrity: sha512-Uy0+khmZqUrUGm5dmMqVlnvufZRSK0FbYzVgp0UMstm+F5+W2/jnEEQyc9vo1ZR/E5ZI/B1WjjoTqBqwJL6Krw==} - '@storybook/addon-actions@8.3.3': - resolution: {integrity: sha512-cbpksmld7iADwDGXgojZ4r8LGI3YA3NP68duAHg2n1dtnx1oUaFK5wd6dbNuz7GdjyhIOIy3OKU1dAuylYNGOQ==} + '@storybook/addon-actions@8.3.4': + resolution: {integrity: sha512-1y0yD3upKcyzNwwA6loAGW2cRDqExwl4oAT7GJQA4tmabI+fNwmANSgU/ezLvvSUf4Qo0eJHg2Zcn8y+Apq2eA==} peerDependencies: - storybook: ^8.3.3 + storybook: ^8.3.4 - '@storybook/addon-backgrounds@8.3.3': - resolution: {integrity: sha512-aX0OIrtjIB7UgSaiv20SFkfC1iWwJIGMPsPSJ5ZPhXIIOWIEBtSujh8YXwjDEXSC4DOHalmeT4bitRRe5KrVKA==} + '@storybook/addon-backgrounds@8.3.4': + resolution: {integrity: sha512-o3nl7cN3x8erJNxLEv8YptanEQAnbqnaseOAsvSC6/nnSAcRYBSs3BvekKvo4CcpS2mxn7F5NJTBFYnCXzy8EA==} peerDependencies: - storybook: ^8.3.3 + storybook: ^8.3.4 - '@storybook/addon-controls@8.3.3': - resolution: {integrity: sha512-78xRtVpY7eX/Lti00JLgwYCBRB6ZcvzY3SWk0uQjEqcTnQGoQkVg2L7oWFDlDoA1LBY18P5ei2vu8MYT9GXU4g==} + '@storybook/addon-controls@8.3.4': + resolution: {integrity: sha512-qQcaK6dczsb6wXkzGZKOjUYNA7FfKBewRv6NvoVKYY6LfhllGOkmUAtYpdtQG8adsZWTSoZaAOJS2vP2uM67lw==} peerDependencies: - storybook: ^8.3.3 + storybook: ^8.3.4 - '@storybook/addon-docs@8.3.3': - resolution: {integrity: sha512-REUandqq1RnMNOhsocRwx5q2fdlBAYPTDFlKASYfEn4Ln5NgbQRGxOAWl7yXAAFzbDmUDU7K20hkauecF0tyMw==} + '@storybook/addon-docs@8.3.4': + resolution: {integrity: sha512-TWauhqF/gJgfwPuWeM6KM3LwC+ErCOM+K2z16w3vgao9s67sij8lnrdAoQ0hjA+kw2/KAdCakFS6FyciG81qog==} peerDependencies: - storybook: ^8.3.3 + storybook: ^8.3.4 - '@storybook/addon-essentials@8.3.3': - resolution: {integrity: sha512-E/uXoUYcg8ulG3lVbsEKb4v5hnMeGkq9YJqiZYKgVK7iRFa6p4HeVB1wU1adnm7RgjWvh+p0vQRo4KL2CTNXqw==} + '@storybook/addon-essentials@8.3.4': + resolution: {integrity: sha512-C3+3hpmSn/8zdx5sXEP0eE6zMzxgRosHVZYfe9nBcMiEDp6UKVUyHVetWxEULOEgN46ysjcpllZ0bUkRYxi2IQ==} peerDependencies: - storybook: ^8.3.3 + storybook: ^8.3.4 - '@storybook/addon-highlight@8.3.3': - resolution: {integrity: sha512-MB084xJM66rLU+iFFk34kjLUiAWzDiy6Kz4uZRa1CnNqEK0sdI8HaoQGgOxTIa2xgJor05/8/mlYlMkP/0INsQ==} + '@storybook/addon-highlight@8.3.4': + resolution: {integrity: sha512-rxZTeuZyZ7RnU+xmRhS01COFLbGnVEmlUNxBw8ArsrTEZKW5PbKpIxNLTj9F0zdH8H0MfryJGP+Aadcm0oHWlw==} peerDependencies: - storybook: ^8.3.3 + storybook: ^8.3.4 - '@storybook/addon-interactions@8.3.3': - resolution: {integrity: sha512-3w5tpCGYdF33wF44xEhTS3Zmcwd6nITtwy5q+PJvHCJAm3fpjzL3xrjtlHKDvXNwYacJPRCbWKn2QwtxZIdN0g==} + '@storybook/addon-interactions@8.3.4': + resolution: {integrity: sha512-ORxqe35wUmF7EDHo45mdDHiju3Ryk2pZ1vO9PyvW6ZItNlHt/IxAr7T/TysGejZ/eTBg6tMZR3ExGky3lTg/CQ==} peerDependencies: - storybook: ^8.3.3 + storybook: ^8.3.4 - '@storybook/addon-links@8.3.3': - resolution: {integrity: sha512-rz4KEbzr1ca4zZEZwbOnhKiaEsokCl1KkngxT/C1YIkpW908j/kg2nnIb5MrtlAW1nirXguAR74t6CGntvdU9w==} + '@storybook/addon-links@8.3.4': + resolution: {integrity: sha512-R1DjARmxRIKJDGIG6uxmQ1yFNyoQbb+QIPUFjgWCak8+AdLJbC7W+Esvo9F5hQfh6czyy0piiM3qj5hpQJVh3A==} peerDependencies: react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta - storybook: ^8.3.3 + storybook: ^8.3.4 peerDependenciesMeta: react: optional: true - '@storybook/addon-mdx-gfm@8.3.3': - resolution: {integrity: sha512-jdwVXoBSEdmuw8L4MxUeJ/qIInADfCwdtShnfTQIJBBRucOl8ykgfTKKNjllT79TFiK0gsWoiZmE05P4wuBofw==} + '@storybook/addon-mdx-gfm@8.3.4': + resolution: {integrity: sha512-O0sMP7VFo1fKsdViY+W6OMNYEXvB5FzEEsqgsydMcsJ0qOKR1li2l3cLCMLXdUKVZ+2uRbEhnm2RnB9RWF5O7g==} peerDependencies: - storybook: ^8.3.3 + storybook: ^8.3.4 - '@storybook/addon-measure@8.3.3': - resolution: {integrity: sha512-R20Z83gnxDRrocES344dw1Of/zDhe3XHSM6TLq80UQTJ9PhnMI+wYHQlK9DsdP3KiRkI+pQA6GCOp0s2ZRy5dg==} + '@storybook/addon-measure@8.3.4': + resolution: {integrity: sha512-IJ6WKEbqmG+r7sukFjo+bVmPB2Zry04sylGx/OGyOh7zIhhqAqpwOwMHP0uQrc3tLNnUM6qB/o83UyYX79ql+A==} peerDependencies: - storybook: ^8.3.3 + storybook: ^8.3.4 - '@storybook/addon-outline@8.3.3': - resolution: {integrity: sha512-OwqYfieNuqSqWNtUZLu3UmsfQNnwA2UaSMBZyeC2Dte9Jd59PPYggcWmH+b0S6OTbYXWNAUK5U6WdK+X9Ypzdw==} + '@storybook/addon-outline@8.3.4': + resolution: {integrity: sha512-kRRJTTLKM8gMfeh/e83djN5XLlc0hFtr9zKWxuZxaXt9Hmr+9tH/PRFtVK/S4SgqnBDoXk49Wgv6raiwj5/e3A==} peerDependencies: - storybook: ^8.3.3 + storybook: ^8.3.4 - '@storybook/addon-storysource@8.3.3': - resolution: {integrity: sha512-yPYQH9NepSNxoSsV9E7OV3/EVFrbU/r2B3E5WP/mCfqTXPg/5noce7iRi+rWqcVM1tsN1qPnSjfQQc7noF0h0Q==} + '@storybook/addon-storysource@8.3.4': + resolution: {integrity: sha512-uHTUiK7dzWRZAKpPafBH3U5PWAP7+J97lg66HDKAHpmmQdy7v3HfXaYNX1FoI+PeC5piUxFETXM0z+BNvJCknA==} peerDependencies: - storybook: ^8.3.3 + storybook: ^8.3.4 - '@storybook/addon-toolbars@8.3.3': - resolution: {integrity: sha512-4WyiVqDm4hlJdENIVQg9pLNLdfhnNKa+haerYYSzTVjzYrUx0X6Bxafshq+sud6aRtSYU14abwP56lfW8hgTlA==} + '@storybook/addon-toolbars@8.3.4': + resolution: {integrity: sha512-Km1YciVIxqluDbd1xmHjANNFyMonEOtnA6e4MrnBnC9XkPXSigeFlj0JvxyI/zjBsLBoFRmQiwq55W6l3hQ9sA==} peerDependencies: - storybook: ^8.3.3 + storybook: ^8.3.4 - '@storybook/addon-viewport@8.3.3': - resolution: {integrity: sha512-2S+UpbKAL+z1ppzUCkixjaem2UDMkfmm/kyJ1wm3A/ofGLYi4fjMSKNRckk+7NdolXGQJjBo0RcaotUTxFIFwQ==} + '@storybook/addon-viewport@8.3.4': + resolution: {integrity: sha512-fU4LdXSSqIOLbCEh2leq/tZUYlFliXZBWr/+igQHdUoU7HY8RIImXqVUaR9wlCaTb48WezAWT60vJtwNijyIiQ==} peerDependencies: - storybook: ^8.3.3 + storybook: ^8.3.4 - '@storybook/blocks@8.3.3': - resolution: {integrity: sha512-8Vsvxqstop3xfbsx3Dn1nEjyxvQUcOYd8vpxyp2YumxYO8FlXIRuYL6HAkYbcX8JexsKvCZYxor52D2vUGIKZg==} + '@storybook/blocks@8.3.4': + resolution: {integrity: sha512-1g4aCrd5CcN+pVhF2ATu9ZRVvAIgBMb2yF9KkCuTpdvqKDuDNK3sGb0CxjS7jp3LOvyjJr9laTOQsz8v8MQc5A==} peerDependencies: react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta - storybook: ^8.3.3 + storybook: ^8.3.4 peerDependenciesMeta: react: optional: true react-dom: optional: true - '@storybook/builder-vite@8.3.3': - resolution: {integrity: sha512-3yTXCLaB6bzhoPH3PqtacKkcaC1uV4L+IHTf1Zypx1NO1pLZHyhYf0T7dIOxTh2JZfqu1Pm9hTvOmWfR12m+9w==} + '@storybook/builder-vite@8.3.4': + resolution: {integrity: sha512-Sa6SZ7LeHpkrnuvua8P8MR8e8a+MPKbyMmr9TqCCy8Ud/t4AM4kHY3JpJGtrgeK9l43fBnBwfdZYoRl5J6oWeA==} peerDependencies: '@preact/preset-vite': '*' - storybook: ^8.3.3 + storybook: ^8.3.4 typescript: '>= 4.3.x' vite: ^4.0.0 || ^5.0.0 vite-plugin-glimmerx: '*' @@ -4103,23 +4100,23 @@ packages: vite-plugin-glimmerx: optional: true - '@storybook/components@8.3.3': - resolution: {integrity: sha512-i2JYtesFGkdu+Hwuj+o9fLuO3yo+LPT1/8o5xBVYtEqsgDtEAyuRUWjSz8d8NPtzloGPOv5kvR6MokWDfbeMfw==} + '@storybook/components@8.3.4': + resolution: {integrity: sha512-iQzLJd87uGbFBbYNqlrN/ABrnx3dUrL0tjPCarzglzshZoPCNOsllJeJx5TJwB9kCxSZ8zB9TTOgr7NXl+oyVA==} peerDependencies: - storybook: ^8.3.3 + storybook: ^8.3.4 - '@storybook/core-events@8.3.3': - resolution: {integrity: sha512-YL+gBuCS81qktzTkvw0MXUJW0bYAXfRzMoiLfDBTrEKZfcJOB4JAlMGmvRRar0+jygK3icD42Rl5BwWoZY6KFQ==} + '@storybook/core-events@8.3.4': + resolution: {integrity: sha512-3/5oJN2UnlmUILXCh7SXMTa2MYZOvrjeZCm3wFomoQASU2FFzS5AxBYYnwNdtrZmn4w32uw4T7qvA0+96Utwsg==} peerDependencies: - storybook: ^8.3.3 + storybook: ^8.3.4 - '@storybook/core@8.3.3': - resolution: {integrity: sha512-pmf2bP3fzh45e56gqOuBT8sDX05hGdUKIZ/hcI84d5xmd6MeHiPW8th2v946wCHcxHzxib2/UU9vQUh+mB4VNw==} + '@storybook/core@8.3.4': + resolution: {integrity: sha512-4PZB91JJpuKfcjeOR2LXj3ABaPLLSd2P/SfYOKNCygrDstsQa/yay3/yN5Z9yi1cIG84KRr6/sUW+0x8HsGLPg==} - '@storybook/csf-plugin@8.3.3': - resolution: {integrity: sha512-7AD7ojpXr3THqpTcEI4K7oKUfSwt1hummgL/cASuQvEPOwAZCVZl2gpGtKxcXhtJXTkn3GMCAvlYMoe7O/1YWw==} + '@storybook/csf-plugin@8.3.4': + resolution: {integrity: sha512-ZMFWYxeTN4GxCn8dyIH4roECyLDy29yv/QKM+pHM3AC5Ny2HWI35SohWao4fGBAFxPQFbR5hPN8xa6ofHPSSTg==} peerDependencies: - storybook: ^8.3.3 + storybook: ^8.3.4 '@storybook/csf@0.1.11': resolution: {integrity: sha512-dHYFQH3mA+EtnCkHXzicbLgsvzYjcDJ1JWsogbItZogkPHgSJM/Wr71uMkcvw8v9mmCyP4NpXJuu6bPoVsOnzg==} @@ -4134,45 +4131,45 @@ packages: react: ^16.8.0 || ^17.0.0 || ^18.0.0 react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 - '@storybook/instrumenter@8.3.3': - resolution: {integrity: sha512-ZiODB9EwCQkl4PBxGJjBHXRTLxcNs68ZZvR+xeMr0eMFzzlJG+trXoX5kK95oA4BFhGN+3uM0Zl3MoRjBtJTNA==} + '@storybook/instrumenter@8.3.4': + resolution: {integrity: sha512-jVhfNOPekOyJmta0BTkQl9Z6rgRbFHlc0eV4z1oSrzaawSlc9TFzAeDCtCP57vg3FuBX8ydDYAvyZ7s4xPpLyg==} peerDependencies: - storybook: ^8.3.3 + storybook: ^8.3.4 - '@storybook/manager-api@8.3.3': - resolution: {integrity: sha512-Na4U+McOeVUJAR6qzJfQ6y2Qt0kUgEDUriNoAn+curpoKPTmIaZ79RAXBzIqBl31VyQKknKpZbozoRGf861YaQ==} + '@storybook/manager-api@8.3.4': + resolution: {integrity: sha512-tBx7MBfPUrKSlD666zmVjtIvoNArwCciZiW/UJ8IWmomrTJRfFBnVvPVM2gp1lkDIzRHYmz5x9BHbYaEDNcZWQ==} peerDependencies: - storybook: ^8.3.3 + storybook: ^8.3.4 - '@storybook/preview-api@8.3.3': - resolution: {integrity: sha512-GP2QlaF3BBQGAyo248N7549YkTQjCentsc1hUvqPnFWU4xfjkejbnFk8yLaIw0VbYbL7jfd7npBtjZ+6AnphMQ==} + '@storybook/preview-api@8.3.4': + resolution: {integrity: sha512-/YKQ3QDVSHmtFXXCShf5w0XMlg8wkfTpdYxdGv1CKFV8DU24f3N7KWulAgeWWCWQwBzZClDa9kzxmroKlQqx3A==} peerDependencies: - storybook: ^8.3.3 + storybook: ^8.3.4 - '@storybook/react-dom-shim@8.3.3': - resolution: {integrity: sha512-0dPC9K7+K5+X/bt3GwYmh+pCpisUyKVjWsI+PkzqGnWqaXFakzFakjswowIAIO1rf7wYZR591x3ehUAyL2bJiQ==} + '@storybook/react-dom-shim@8.3.4': + resolution: {integrity: sha512-L4llDvjaAzqPx6h4ddZMh36wPr75PrI2S8bXy+flLqAeVRYnRt4WNKGuxqH0t0U6MwId9+vlCZ13JBfFuY7eQQ==} peerDependencies: react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta - storybook: ^8.3.3 + storybook: ^8.3.4 - '@storybook/react-vite@8.3.3': - resolution: {integrity: sha512-vzOqVaA/rv+X5J17eWKxdZztMKEKfsCSP8pNNmrqXWxK3pSlW0fAPxtn1kw3UNxGtAv71pcqvaCUtTJKqI1PYA==} + '@storybook/react-vite@8.3.4': + resolution: {integrity: sha512-0Xm8eTH+jQ7SV4moLkPN4G6U2IDrqXPXUqsZdXaccepIMcD4G75foQFm2LOrFJuY+IMySPspKeTqf8OLskPppw==} engines: {node: '>=18.0.0'} peerDependencies: react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta - storybook: ^8.3.3 + storybook: ^8.3.4 vite: ^4.0.0 || ^5.0.0 - '@storybook/react@8.3.3': - resolution: {integrity: sha512-fHOW/mNqI+sZWttGOE32Q+rAIbN7/Oib091cmE8usOM0z0vPNpywUBtqC2cCQH39vp19bhTsQaSsTcoBSweAHw==} + '@storybook/react@8.3.4': + resolution: {integrity: sha512-PA7iQL4/9X2/iLrv+AUPNtlhTHJWhDao9gQIT1Hef39FtFk+TU9lZGbv+g29R1H9V3cHP5162nG2aTu395kmbA==} engines: {node: '>=18.0.0'} peerDependencies: - '@storybook/test': 8.3.3 + '@storybook/test': 8.3.4 react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta - storybook: ^8.3.3 + storybook: ^8.3.4 typescript: '>= 4.2.x' peerDependenciesMeta: '@storybook/test': @@ -4180,38 +4177,38 @@ packages: typescript: optional: true - '@storybook/source-loader@8.3.3': - resolution: {integrity: sha512-NeP7l53mvnnfwi+91vtRaibZer+UJi6gkoaGRCpphL3L+3qVIXN3p41uXhAy+TahdFI2dbrWvLSNgtsvdXVaFg==} + '@storybook/source-loader@8.3.4': + resolution: {integrity: sha512-wH//LuWfa2iOmjykSqsub8M8e0EdhEUZoHUFhwBeizfYQQHaMaSEBhhAQCaWWKmdGB9lnCe1cioQ32c2IWtBIw==} peerDependencies: - storybook: ^8.3.3 + storybook: ^8.3.4 - '@storybook/test@8.3.3': - resolution: {integrity: sha512-uZ8nMIovfI2ry989K2+cYAeEVD/3dpjj2+Rbmy7DiZWWVhFALfmqaTRkzZfShLmlH0TFv+rfcBPihGccBtw0FQ==} + '@storybook/test@8.3.4': + resolution: {integrity: sha512-HRiUenitln8QPHu6DEWUg9s9cEoiGN79lMykzXzw9shaUvdEIhWCsh82YKtmB3GJPj6qcc6dZL/Aio8srxyGAg==} peerDependencies: - storybook: ^8.3.3 + storybook: ^8.3.4 - '@storybook/theming@8.3.3': - resolution: {integrity: sha512-gWJKetI6XJQgkrvvry4ez10+jLaGNCQKi5ygRPM9N+qrjA3BB8F2LCuFUTBuisa4l64TILDNjfwP/YTWV5+u5A==} + '@storybook/theming@8.3.4': + resolution: {integrity: sha512-D4XVsQgTtpHEHLhwkx59aGy1GBwOedVr/mNns7hFrH8FjEpxrrWCuZQASq1ZpCl8LXlh7uvmT5sM2rOdQbGuGg==} peerDependencies: - storybook: ^8.3.3 + storybook: ^8.3.4 - '@storybook/types@8.3.3': - resolution: {integrity: sha512-wV1kupG1tfTMOXaBrtVHXuqp19vURVDqWTQX6nqkoUFD7Xb1lz/YNVeGP1uT/zJdJy42/HIyoib9JPx9h0Vx9w==} + '@storybook/types@8.3.4': + resolution: {integrity: sha512-kIyb0g8C6EizI0Mv+l6L6yjCJe9/vW3UvgsZL5BXqs8THTAfs3/+A9Q9jDEMovSIVI3EgesO79+OCEazDUHmOA==} peerDependencies: - storybook: ^8.3.3 + storybook: ^8.3.4 - '@storybook/vue3-vite@8.3.3': - resolution: {integrity: sha512-IFcoOGlUGuUkL3rpm9UFs8FK9JX1ZdfGpLXRObVOVRhW3t+MsNLpx4Fqp3a/re6WcCC3yvHzbLXgvGcjpapkbw==} + '@storybook/vue3-vite@8.3.4': + resolution: {integrity: sha512-0H1tLbRd8i6L3EW8QC9bDlgPIUM5i6b7onvyyQhyIxODWRfigHi6UP9sjHfrljdvnlOtYlZT2A5QbpkugzwLjg==} engines: {node: '>=18.0.0'} peerDependencies: - storybook: ^8.3.3 + storybook: ^8.3.4 vite: ^4.0.0 || ^5.0.0 - '@storybook/vue3@8.3.3': - resolution: {integrity: sha512-peu8MFGwmhpXoD3n42qG6TxeVHRhfHZ0/HW4+A6FXSB1c9w0CC4AzHs5f1w3yUvshtexNN5bkw9Q4nSVKtfU7A==} + '@storybook/vue3@8.3.4': + resolution: {integrity: sha512-NNQXwidr+QjLndORWtPjXv/obsNNfJhP5Xj6vUZslrDpdIyTL3NEM+ktLK2EMw/a3zUbJMnMkyMgoWvioCNHxQ==} engines: {node: '>=18.0.0'} peerDependencies: - storybook: ^8.3.3 + storybook: ^8.3.4 vue: ^3.0.0 '@swc/cli@0.3.12': @@ -4591,8 +4588,8 @@ packages: '@types/cacheable-request@6.0.3': resolution: {integrity: sha512-IQ3EbTzGxIigb1I3qPZc1rWJnH0BmSKv5QYTalEwweFvyBDLSAe24zP0le/hyi7ecGfZVlIVAg4BZqb8WBwKqw==} - '@types/color-convert@2.0.3': - resolution: {integrity: sha512-2Q6wzrNiuEvYxVQqhh7sXM2mhIhvZR/Paq4FdsQkOMgWsCIkKvSGj8Le1/XalulrmgOzPMqNa0ix+ePY4hTrfg==} + '@types/color-convert@2.0.4': + resolution: {integrity: sha512-Ub1MmDdyZ7mX//g25uBAoH/mWGd9swVbt8BseymnaE18SU4po/PjmCrHxqIIRjBo3hV/vh1KGr0eMxUhp+t+dQ==} '@types/color-name@1.1.1': resolution: {integrity: sha512-rr+OQyAjxze7GgWrSaJwydHStIhHq2lvY3BOC2Mj7KnzI7XK0Uw1TOOdI9lDoajEbSWLiYgoo4f1R51erQfhPQ==} @@ -5106,8 +5103,8 @@ packages: '@vue/compiler-core@3.5.10': resolution: {integrity: sha512-iXWlk+Cg/ag7gLvY0SfVucU8Kh2CjysYZjhhP70w9qI4MvSox4frrP+vDGvtQuzIcgD8+sxM6lZvCtdxGunTAA==} - '@vue/compiler-core@3.5.7': - resolution: {integrity: sha512-A0gay3lK71MddsSnGlBxRPOugIVdACze9L/rCo5X5srCyjQfZOfYtSFMJc3aOZCM+xN55EQpb4R97rYn/iEbSw==} + '@vue/compiler-core@3.5.11': + resolution: {integrity: sha512-PwAdxs7/9Hc3ieBO12tXzmTD+Ln4qhT/56S+8DvrrZ4kLDn4Z/AMUr8tXJD0axiJBS0RKIoNaR0yMuQB9v9Udg==} '@vue/compiler-dom@3.4.37': resolution: {integrity: sha512-rIiSmL3YrntvgYV84rekAtU/xfogMUJIclUMeIKEtVBFngOL3IeZHhsH3UaFEgB5iFGpj6IW+8YuM/2Up+vVag==} @@ -5115,20 +5112,20 @@ packages: '@vue/compiler-dom@3.5.10': resolution: {integrity: sha512-DyxHC6qPcktwYGKOIy3XqnHRrrXyWR2u91AjP+nLkADko380srsC2DC3s7Y1Rk6YfOlxOlvEQKa9XXmLI+W4ZA==} - '@vue/compiler-dom@3.5.7': - resolution: {integrity: sha512-GYWl3+gO8/g0ZdYaJ18fYHdI/WVic2VuuUd1NsPp60DWXKy+XjdhFsDW7FbUto8siYYZcosBGn9yVBkjhq1M8Q==} + '@vue/compiler-dom@3.5.11': + resolution: {integrity: sha512-pyGf8zdbDDRkBrEzf8p7BQlMKNNF5Fk/Cf/fQ6PiUz9at4OaUfyXW0dGJTo2Vl1f5U9jSLCNf0EZJEogLXoeew==} '@vue/compiler-sfc@3.4.37': resolution: {integrity: sha512-vCfetdas40Wk9aK/WWf8XcVESffsbNkBQwS5t13Y/PcfqKfIwJX2gF+82th6dOpnpbptNMlMjAny80li7TaCIg==} - '@vue/compiler-sfc@3.5.10': - resolution: {integrity: sha512-to8E1BgpakV7224ZCm8gz1ZRSyjNCAWEplwFMWKlzCdP9DkMKhRRwt0WkCjY7jkzi/Vz3xgbpeig5Pnbly4Tow==} + '@vue/compiler-sfc@3.5.11': + resolution: {integrity: sha512-gsbBtT4N9ANXXepprle+X9YLg2htQk1sqH/qGJ/EApl+dgpUBdTv3yP7YlR535uHZY3n6XaR0/bKo0BgwwDniw==} '@vue/compiler-ssr@3.4.37': resolution: {integrity: sha512-TyAgYBWrHlFrt4qpdACh8e9Ms6C/AZQ6A6xLJaWrCL8GCX5DxMzxyeFAEMfU/VFr4tylHm+a2NpfJpcd7+20XA==} - '@vue/compiler-ssr@3.5.10': - resolution: {integrity: sha512-hxP4Y3KImqdtyUKXDRSxKSRkSm1H9fCvhojEYrnaoWhE4w/y8vwWhnosJoPPe2AXm5sU7CSbYYAgkt2ZPhDz+A==} + '@vue/compiler-ssr@3.5.11': + resolution: {integrity: sha512-P4+GPjOuC2aFTk1Z4WANvEhyOykcvEd5bIj2KVNGKGfM745LaXGr++5njpdBTzVz5pZifdlR1kpYSJJpIlSePA==} '@vue/compiler-vue2@2.7.16': resolution: {integrity: sha512-qYC3Psj9S/mfu9uVi5WvNZIzq+xnXMhOwbTFKKDD7b1lhpnn71jXSFdTQ+WsIEk0ONCd7VV2IMm7ONl6tbQ86A==} @@ -5152,30 +5149,30 @@ packages: '@vue/reactivity@3.4.37': resolution: {integrity: sha512-UmdKXGx0BZ5kkxPqQr3PK3tElz6adTey4307NzZ3whZu19i5VavYal7u2FfOmAzlcDVgE8+X0HZ2LxLb/jgbYw==} - '@vue/reactivity@3.5.10': - resolution: {integrity: sha512-kW08v06F6xPSHhid9DJ9YjOGmwNDOsJJQk0ax21wKaUYzzuJGEuoKNU2Ujux8FLMrP7CFJJKsHhXN9l2WOVi2g==} + '@vue/reactivity@3.5.11': + resolution: {integrity: sha512-Nqo5VZEn8MJWlCce8XoyVqHZbd5P2NH+yuAaFzuNSR96I+y1cnuUiq7xfSG+kyvLSiWmaHTKP1r3OZY4mMD50w==} '@vue/runtime-core@3.4.37': resolution: {integrity: sha512-MNjrVoLV/sirHZoD7QAilU1Ifs7m/KJv4/84QVbE6nyAZGQNVOa1HGxaOzp9YqCG+GpLt1hNDC4RbH+KtanV7w==} - '@vue/runtime-core@3.5.10': - resolution: {integrity: sha512-9Q86I5Qq3swSkFfzrZ+iqEy7Vla325M7S7xc1NwKnRm/qoi1Dauz0rT6mTMmscqx4qz0EDJ1wjB+A36k7rl8mA==} + '@vue/runtime-core@3.5.11': + resolution: {integrity: sha512-7PsxFGqwfDhfhh0OcDWBG1DaIQIVOLgkwA5q6MtkPiDFjp5gohVnJEahSktwSFLq7R5PtxDKy6WKURVN1UDbzA==} '@vue/runtime-dom@3.4.37': resolution: {integrity: sha512-Mg2EwgGZqtwKrqdL/FKMF2NEaOHuH+Ks9TQn3DHKyX//hQTYOun+7Tqp1eo0P4Ds+SjltZshOSRq6VsU0baaNg==} - '@vue/runtime-dom@3.5.10': - resolution: {integrity: sha512-t3x7ht5qF8ZRi1H4fZqFzyY2j+GTMTDxRheT+i8M9Ph0oepUxoadmbwlFwMoW7RYCpNQLpP2Yx3feKs+fyBdpA==} + '@vue/runtime-dom@3.5.11': + resolution: {integrity: sha512-GNghjecT6IrGf0UhuYmpgaOlN7kxzQBhxWEn08c/SQDxv1yy4IXI1bn81JgEpQ4IXjRxWtPyI8x0/7TF5rPfYQ==} '@vue/server-renderer@3.4.37': resolution: {integrity: sha512-jZ5FAHDR2KBq2FsRUJW6GKDOAG9lUTX8aBEGq4Vf6B/35I9fPce66BornuwmqmKgfiSlecwuOb6oeoamYMohkg==} peerDependencies: vue: 3.4.37 - '@vue/server-renderer@3.5.10': - resolution: {integrity: sha512-IVE97tt2kGKwHNq9yVO0xdh1IvYfZCShvDSy46JIh5OQxP1/EXSpoDqetVmyIzL7CYOWnnmMkVqd7YK2QSWkdw==} + '@vue/server-renderer@3.5.11': + resolution: {integrity: sha512-cVOwYBxR7Wb1B1FoxYvtjJD8X/9E5nlH4VSkJy2uMA1MzYNdzAAB//l8nrmN9py/4aP+3NjWukf9PZ3TeWULaA==} peerDependencies: - vue: 3.5.10 + vue: 3.5.11 '@vue/shared@3.4.37': resolution: {integrity: sha512-nIh8P2fc3DflG8+5Uw8PT/1i17ccFn0xxN/5oE9RfV5SVnd7G0XEFRwakrnNFE/jlS95fpGXDVG5zDETS26nmg==} @@ -5183,8 +5180,8 @@ packages: '@vue/shared@3.5.10': resolution: {integrity: sha512-VkkBhU97Ki+XJ0xvl4C9YJsIZ2uIlQ7HqPpZOS3m9VCvmROPaChZU6DexdMJqvz9tbgG+4EtFVrSuailUq5KGQ==} - '@vue/shared@3.5.7': - resolution: {integrity: sha512-NBE1PBIvzIedxIc2RZiKXvGbJkrZ2/hLf3h8GlS4/sP9xcXEZMFWOazFkNd6aGeUCMaproe5MHVYB3/4AW9q9g==} + '@vue/shared@3.5.11': + resolution: {integrity: sha512-W8GgysJVnFo81FthhzurdRAWP/byq3q2qIw70e0JWblzVhjgOMiC2GyovXrZTFQJnFVryYaKGP3Tc9vYzYm6PQ==} '@vue/test-utils@2.4.1': resolution: {integrity: sha512-VO8nragneNzUZUah6kOjiFmD/gwRjUauG9DROh6oaOeFwX1cZRUNHhdeogE8635cISigXFTtGLUQWx5KCb0xeg==} @@ -5665,8 +5662,8 @@ packages: resolution: {integrity: sha512-4T53u4PdgsXqKaIctwF8ifXlRTTmEPJ8iEPWFdGZvcf7sbwYo6FKFEX9eNNAnzFZ7EzJAQ3CJeOtCRA4rDp7Pw==} engines: {node: '>=6.14.2'} - bullmq@5.13.2: - resolution: {integrity: sha512-McGE8k3mrCvdUHdU0sHkTKDS1xr4pff+hbEKBY51wk5S6Za0gkuejYA620VQTo3Zz37E/NVWMgumwiXPQ3yZcA==} + bullmq@5.15.0: + resolution: {integrity: sha512-h53shVjx8s6wxYGtUfzAfENpSP7N5T0D4PMTvbZncozLjb8yUKhopfpa7PmcpQfq7SSO9dm/OZ9XQuGOCSGNug==} buraha@0.0.1: resolution: {integrity: sha512-G563A0mTbzknm2jDaNxfZuNKIdeArs8T+XQN6t+KbmgnOoevXSXhKDkyf8Md/36Jrx99ikwbCag37VGe3myExQ==} @@ -5864,8 +5861,8 @@ packages: resolution: {integrity: sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==} engines: {node: '>=10'} - chromatic@11.10.4: - resolution: {integrity: sha512-nfgDpW5gQ4FtgV1lZXXfqLjONKDCh2K4vwI3dbZrtU1ObOL9THyAzpIdnK9LRcNSeisDLX+XFCryfMg1Ql2U2g==} + chromatic@11.11.0: + resolution: {integrity: sha512-mwmYsNMsZlRLtlfFUEtac5zhoVRhc+O/lsuMdOpwkiDQiKX6WdSNIhic+dkLenfuzao2r18s50nphcOgFoatBg==} hasBin: true peerDependencies: '@chromatic-com/cypress': ^0.*.* || ^1.0.0 @@ -6684,6 +6681,27 @@ packages: eslint-import-resolver-webpack: optional: true + eslint-module-utils@2.12.0: + resolution: {integrity: sha512-wALZ0HFoytlyh/1+4wuZ9FJCD/leWHQzzrxJ8+rebyReSLk7LApMyd3WJaLVoN+D5+WIdJyDK1c6JnE65V4Zyg==} + engines: {node: '>=4'} + peerDependencies: + '@typescript-eslint/parser': '*' + eslint: '*' + eslint-import-resolver-node: '*' + eslint-import-resolver-typescript: '*' + eslint-import-resolver-webpack: '*' + peerDependenciesMeta: + '@typescript-eslint/parser': + optional: true + eslint: + optional: true + eslint-import-resolver-node: + optional: true + eslint-import-resolver-typescript: + optional: true + eslint-import-resolver-webpack: + optional: true + eslint-plugin-import@2.30.0: resolution: {integrity: sha512-/mHNE9jINJfiD2EKkg1BKyPyUk4zdnT54YgbOgfjSakWT5oyX/qQLVNTkehyfpcMxZXMy1zyonZ2v7hZTX43Yw==} engines: {node: '>=4'} @@ -6694,6 +6712,16 @@ packages: '@typescript-eslint/parser': optional: true + eslint-plugin-import@2.31.0: + resolution: {integrity: sha512-ixmkI62Rbc2/w8Vfxyh1jQRTdRTF52VxwRVHl/ykPAmqG+Nb7/kNn+byLP0LxPgI7zWA16Jt82SybJInmMia3A==} + engines: {node: '>=4'} + peerDependencies: + '@typescript-eslint/parser': '*' + eslint: ^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8 || ^9 + peerDependenciesMeta: + '@typescript-eslint/parser': + optional: true + eslint-plugin-vue@9.27.0: resolution: {integrity: sha512-5Dw3yxEyuBSXTzT5/Ge1X5kIkRTQ3nvBn/VwPwInNiZBSJOO/timWMUaflONnFBzU6NhB68lxnCda7ULV5N7LA==} engines: {node: ^14.17.0 || >=16.0.0} @@ -9618,10 +9646,6 @@ packages: postcss-value-parser@4.2.0: resolution: {integrity: sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==} - postcss@8.4.40: - resolution: {integrity: sha512-YF2kKIUzAofPMpfH6hOi2cGnv/HrUlfucspc7pDyvv7kGdqXrfj8SCl/t8owkEgKEuu8ZcRjSOxFxVLqwChZ2Q==} - engines: {node: ^10 || ^12 || >=14} - postcss@8.4.47: resolution: {integrity: sha512-56rxCq7G/XfB4EkXq9Egn5GCqugWvDFjafDOThIdMBsI15iqPqR5r15TfSr1YPYeEI19YeaXMCbY6u88Y76GLQ==} engines: {node: ^10 || ^12 || >=14} @@ -10174,14 +10198,19 @@ packages: safer-buffer@2.1.2: resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} - sanitize-html@2.13.0: - resolution: {integrity: sha512-Xff91Z+4Mz5QiNSLdLWwjgBDm5b1RU6xBT0+12rapjiaR7SwfRdjw8f+6Rir2MXKLrDicRFHdb51hGOAxmsUIA==} + sanitize-html@2.13.1: + resolution: {integrity: sha512-ZXtKq89oue4RP7abL9wp/9URJcqQNABB5GGJ2acW1sdO8JTVl92f4ygD7Yc9Ze09VAZhnt2zegeU0tbNsdcLYg==} sass@1.79.3: resolution: {integrity: sha512-m7dZxh0W9EZ3cw50Me5GOuYm/tVAJAn91SUnohLRo9cXBixGUOdvmryN+dXpwR831bhoY3Zv7rEFt85PUwTmzA==} engines: {node: '>=14.0.0'} hasBin: true + sass@1.79.4: + resolution: {integrity: sha512-K0QDSNPXgyqO4GZq2HO5Q70TLxTH6cIT59RdoCHMivrC8rqzaTw5ab9prjz9KUN1El4FLXrBXJhik61JR4HcGg==} + engines: {node: '>=14.0.0'} + hasBin: true + sax@1.2.4: resolution: {integrity: sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==} @@ -10284,9 +10313,6 @@ packages: resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} engines: {node: '>=8'} - shiki@1.12.0: - resolution: {integrity: sha512-BuAxWOm5JhRcbSOl7XCei8wGjgJJonnV0oipUupPY58iULxUGyHhW5CF+9FRMuM1pcJ5cGEJGll1LusX6FwpPA==} - shiki@1.21.0: resolution: {integrity: sha512-apCH5BoWTrmHDPGgg3RF8+HAAbEL/CdbYr8rMw7eIrdhCkZHdVGat5mMNlRtd1erNG01VPMIKHNQ0Pj2HMAiog==} @@ -10557,8 +10583,8 @@ packages: react-dom: optional: true - storybook@8.3.3: - resolution: {integrity: sha512-FG2KAVQN54T9R6voudiEftehtkXtLO+YVGP2gBPfacEdDQjY++ld7kTbHzpTT/bpCDx7Yq3dqOegLm9arVJfYw==} + storybook@8.3.4: + resolution: {integrity: sha512-nzvuK5TsEgJwcWGLGgafabBOxKn37lfJVv7ZoUVPgJIjk2mNRyJDFwYRJzUZaD37eiR/c/lQ6MoaeqlGwiXoxw==} hasBin: true stream-browserify@3.0.0: @@ -11445,8 +11471,8 @@ packages: typescript: optional: true - vue@3.5.10: - resolution: {integrity: sha512-Vy2kmJwHPlouC/tSnIgXVg03SG+9wSqT1xu1Vehc+ChsXsRd7jLkKgMltVEFOzUdBr3uFwBCG+41LJtfAcBRng==} + vue@3.5.11: + resolution: {integrity: sha512-/8Wurrd9J3lb72FTQS7gRMNQD4nztTtKPmuDuPuhqXmmpD6+skVjAeahNpVzsuky6Sy9gy7wn8UadqPtt9SQIg==} peerDependencies: typescript: '*' peerDependenciesMeta: @@ -12501,7 +12527,7 @@ snapshots: '@babel/template@7.22.15': dependencies: '@babel/code-frame': 7.24.7 - '@babel/parser': 7.24.7 + '@babel/parser': 7.25.6 '@babel/types': 7.24.7 '@babel/template@7.24.0': @@ -12513,7 +12539,7 @@ snapshots: '@babel/template@7.24.7': dependencies: '@babel/code-frame': 7.24.7 - '@babel/parser': 7.24.7 + '@babel/parser': 7.25.6 '@babel/types': 7.24.7 '@babel/traverse@7.23.5': @@ -12524,7 +12550,7 @@ snapshots: '@babel/helper-function-name': 7.23.0 '@babel/helper-hoist-variables': 7.22.5 '@babel/helper-split-export-declaration': 7.22.6 - '@babel/parser': 7.24.7 + '@babel/parser': 7.25.6 '@babel/types': 7.24.7 debug: 4.3.7(supports-color@8.1.1) globals: 11.12.0 @@ -12539,7 +12565,7 @@ snapshots: '@babel/helper-function-name': 7.24.7 '@babel/helper-hoist-variables': 7.24.7 '@babel/helper-split-export-declaration': 7.24.7 - '@babel/parser': 7.24.7 + '@babel/parser': 7.25.6 '@babel/types': 7.24.7 debug: 4.3.7(supports-color@8.1.1) globals: 11.12.0 @@ -13652,13 +13678,13 @@ snapshots: '@misskey-dev/browser-image-resizer@2024.1.0': {} - '@misskey-dev/eslint-plugin@2.0.3(@eslint/compat@1.1.1)(@typescript-eslint/eslint-plugin@7.17.0(@typescript-eslint/parser@7.17.0(eslint@9.8.0)(typescript@5.6.2))(eslint@9.8.0)(typescript@5.6.2))(@typescript-eslint/parser@7.17.0(eslint@9.8.0)(typescript@5.6.2))(eslint-plugin-import@2.30.0(@typescript-eslint/parser@7.17.0(eslint@9.8.0)(typescript@5.6.2))(eslint@9.8.0))(eslint@9.8.0)(globals@15.9.0)': + '@misskey-dev/eslint-plugin@2.0.3(@eslint/compat@1.1.1)(@typescript-eslint/eslint-plugin@7.17.0(@typescript-eslint/parser@7.17.0(eslint@9.8.0)(typescript@5.6.2))(eslint@9.8.0)(typescript@5.6.2))(@typescript-eslint/parser@7.17.0(eslint@9.8.0)(typescript@5.6.2))(eslint-plugin-import@2.31.0(@typescript-eslint/parser@7.17.0(eslint@9.8.0)(typescript@5.6.2))(eslint@9.8.0))(eslint@9.8.0)(globals@15.9.0)': dependencies: '@eslint/compat': 1.1.1 '@typescript-eslint/eslint-plugin': 7.17.0(@typescript-eslint/parser@7.17.0(eslint@9.8.0)(typescript@5.6.2))(eslint@9.8.0)(typescript@5.6.2) '@typescript-eslint/parser': 7.17.0(eslint@9.8.0)(typescript@5.6.2) eslint: 9.8.0 - eslint-plugin-import: 2.30.0(@typescript-eslint/parser@7.17.0(eslint@9.8.0)(typescript@5.6.2))(eslint@9.8.0) + eslint-plugin-import: 2.31.0(@typescript-eslint/parser@7.17.0(eslint@9.8.0)(typescript@5.6.2))(eslint@9.8.0) globals: 15.9.0 '@misskey-dev/sharp-read-bmp@1.2.0': @@ -13834,7 +13860,7 @@ snapshots: '@npmcli/fs@3.1.0': dependencies: - semver: 7.6.0 + semver: 7.6.3 '@nsfw-filter/gif-frames@1.0.2': dependencies: @@ -14344,10 +14370,6 @@ snapshots: dependencies: '@sentry/types': 8.20.0 - '@shikijs/core@1.12.0': - dependencies: - '@types/hast': 3.0.4 - '@shikijs/core@1.21.0': dependencies: '@shikijs/engine-javascript': 1.21.0 @@ -14800,120 +14822,120 @@ snapshots: '@sqltools/formatter@1.2.5': {} - '@storybook/addon-actions@8.3.3(storybook@8.3.3(bufferutil@4.0.8)(utf-8-validate@6.0.4))': + '@storybook/addon-actions@8.3.4(storybook@8.3.4(bufferutil@4.0.8)(utf-8-validate@6.0.4))': dependencies: '@storybook/global': 5.0.0 '@types/uuid': 9.0.8 dequal: 2.0.3 polished: 4.2.2 - storybook: 8.3.3(bufferutil@4.0.8)(utf-8-validate@6.0.4) + storybook: 8.3.4(bufferutil@4.0.8)(utf-8-validate@6.0.4) uuid: 9.0.1 - '@storybook/addon-backgrounds@8.3.3(storybook@8.3.3(bufferutil@4.0.8)(utf-8-validate@6.0.4))': + '@storybook/addon-backgrounds@8.3.4(storybook@8.3.4(bufferutil@4.0.8)(utf-8-validate@6.0.4))': dependencies: '@storybook/global': 5.0.0 memoizerific: 1.11.3 - storybook: 8.3.3(bufferutil@4.0.8)(utf-8-validate@6.0.4) + storybook: 8.3.4(bufferutil@4.0.8)(utf-8-validate@6.0.4) ts-dedent: 2.2.0 - '@storybook/addon-controls@8.3.3(storybook@8.3.3(bufferutil@4.0.8)(utf-8-validate@6.0.4))': + '@storybook/addon-controls@8.3.4(storybook@8.3.4(bufferutil@4.0.8)(utf-8-validate@6.0.4))': dependencies: '@storybook/global': 5.0.0 dequal: 2.0.3 lodash: 4.17.21 - storybook: 8.3.3(bufferutil@4.0.8)(utf-8-validate@6.0.4) + storybook: 8.3.4(bufferutil@4.0.8)(utf-8-validate@6.0.4) ts-dedent: 2.2.0 - '@storybook/addon-docs@8.3.3(storybook@8.3.3(bufferutil@4.0.8)(utf-8-validate@6.0.4))': + '@storybook/addon-docs@8.3.4(storybook@8.3.4(bufferutil@4.0.8)(utf-8-validate@6.0.4))': dependencies: '@mdx-js/react': 3.0.1(@types/react@18.0.28)(react@18.3.1) - '@storybook/blocks': 8.3.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@8.3.3(bufferutil@4.0.8)(utf-8-validate@6.0.4)) - '@storybook/csf-plugin': 8.3.3(storybook@8.3.3(bufferutil@4.0.8)(utf-8-validate@6.0.4)) + '@storybook/blocks': 8.3.4(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@8.3.4(bufferutil@4.0.8)(utf-8-validate@6.0.4)) + '@storybook/csf-plugin': 8.3.4(storybook@8.3.4(bufferutil@4.0.8)(utf-8-validate@6.0.4)) '@storybook/global': 5.0.0 - '@storybook/react-dom-shim': 8.3.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@8.3.3(bufferutil@4.0.8)(utf-8-validate@6.0.4)) + '@storybook/react-dom-shim': 8.3.4(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@8.3.4(bufferutil@4.0.8)(utf-8-validate@6.0.4)) '@types/react': 18.0.28 fs-extra: 11.1.1 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) rehype-external-links: 3.0.0 rehype-slug: 6.0.0 - storybook: 8.3.3(bufferutil@4.0.8)(utf-8-validate@6.0.4) + storybook: 8.3.4(bufferutil@4.0.8)(utf-8-validate@6.0.4) ts-dedent: 2.2.0 - '@storybook/addon-essentials@8.3.3(storybook@8.3.3(bufferutil@4.0.8)(utf-8-validate@6.0.4))': - dependencies: - '@storybook/addon-actions': 8.3.3(storybook@8.3.3(bufferutil@4.0.8)(utf-8-validate@6.0.4)) - '@storybook/addon-backgrounds': 8.3.3(storybook@8.3.3(bufferutil@4.0.8)(utf-8-validate@6.0.4)) - '@storybook/addon-controls': 8.3.3(storybook@8.3.3(bufferutil@4.0.8)(utf-8-validate@6.0.4)) - '@storybook/addon-docs': 8.3.3(storybook@8.3.3(bufferutil@4.0.8)(utf-8-validate@6.0.4)) - '@storybook/addon-highlight': 8.3.3(storybook@8.3.3(bufferutil@4.0.8)(utf-8-validate@6.0.4)) - '@storybook/addon-measure': 8.3.3(storybook@8.3.3(bufferutil@4.0.8)(utf-8-validate@6.0.4)) - '@storybook/addon-outline': 8.3.3(storybook@8.3.3(bufferutil@4.0.8)(utf-8-validate@6.0.4)) - '@storybook/addon-toolbars': 8.3.3(storybook@8.3.3(bufferutil@4.0.8)(utf-8-validate@6.0.4)) - '@storybook/addon-viewport': 8.3.3(storybook@8.3.3(bufferutil@4.0.8)(utf-8-validate@6.0.4)) - storybook: 8.3.3(bufferutil@4.0.8)(utf-8-validate@6.0.4) + '@storybook/addon-essentials@8.3.4(storybook@8.3.4(bufferutil@4.0.8)(utf-8-validate@6.0.4))': + dependencies: + '@storybook/addon-actions': 8.3.4(storybook@8.3.4(bufferutil@4.0.8)(utf-8-validate@6.0.4)) + '@storybook/addon-backgrounds': 8.3.4(storybook@8.3.4(bufferutil@4.0.8)(utf-8-validate@6.0.4)) + '@storybook/addon-controls': 8.3.4(storybook@8.3.4(bufferutil@4.0.8)(utf-8-validate@6.0.4)) + '@storybook/addon-docs': 8.3.4(storybook@8.3.4(bufferutil@4.0.8)(utf-8-validate@6.0.4)) + '@storybook/addon-highlight': 8.3.4(storybook@8.3.4(bufferutil@4.0.8)(utf-8-validate@6.0.4)) + '@storybook/addon-measure': 8.3.4(storybook@8.3.4(bufferutil@4.0.8)(utf-8-validate@6.0.4)) + '@storybook/addon-outline': 8.3.4(storybook@8.3.4(bufferutil@4.0.8)(utf-8-validate@6.0.4)) + '@storybook/addon-toolbars': 8.3.4(storybook@8.3.4(bufferutil@4.0.8)(utf-8-validate@6.0.4)) + '@storybook/addon-viewport': 8.3.4(storybook@8.3.4(bufferutil@4.0.8)(utf-8-validate@6.0.4)) + storybook: 8.3.4(bufferutil@4.0.8)(utf-8-validate@6.0.4) ts-dedent: 2.2.0 - '@storybook/addon-highlight@8.3.3(storybook@8.3.3(bufferutil@4.0.8)(utf-8-validate@6.0.4))': + '@storybook/addon-highlight@8.3.4(storybook@8.3.4(bufferutil@4.0.8)(utf-8-validate@6.0.4))': dependencies: '@storybook/global': 5.0.0 - storybook: 8.3.3(bufferutil@4.0.8)(utf-8-validate@6.0.4) + storybook: 8.3.4(bufferutil@4.0.8)(utf-8-validate@6.0.4) - '@storybook/addon-interactions@8.3.3(storybook@8.3.3(bufferutil@4.0.8)(utf-8-validate@6.0.4))': + '@storybook/addon-interactions@8.3.4(storybook@8.3.4(bufferutil@4.0.8)(utf-8-validate@6.0.4))': dependencies: '@storybook/global': 5.0.0 - '@storybook/instrumenter': 8.3.3(storybook@8.3.3(bufferutil@4.0.8)(utf-8-validate@6.0.4)) - '@storybook/test': 8.3.3(storybook@8.3.3(bufferutil@4.0.8)(utf-8-validate@6.0.4)) + '@storybook/instrumenter': 8.3.4(storybook@8.3.4(bufferutil@4.0.8)(utf-8-validate@6.0.4)) + '@storybook/test': 8.3.4(storybook@8.3.4(bufferutil@4.0.8)(utf-8-validate@6.0.4)) polished: 4.2.2 - storybook: 8.3.3(bufferutil@4.0.8)(utf-8-validate@6.0.4) + storybook: 8.3.4(bufferutil@4.0.8)(utf-8-validate@6.0.4) ts-dedent: 2.2.0 - '@storybook/addon-links@8.3.3(react@18.3.1)(storybook@8.3.3(bufferutil@4.0.8)(utf-8-validate@6.0.4))': + '@storybook/addon-links@8.3.4(react@18.3.1)(storybook@8.3.4(bufferutil@4.0.8)(utf-8-validate@6.0.4))': dependencies: '@storybook/csf': 0.1.11 '@storybook/global': 5.0.0 - storybook: 8.3.3(bufferutil@4.0.8)(utf-8-validate@6.0.4) + storybook: 8.3.4(bufferutil@4.0.8)(utf-8-validate@6.0.4) ts-dedent: 2.2.0 optionalDependencies: react: 18.3.1 - '@storybook/addon-mdx-gfm@8.3.3(storybook@8.3.3(bufferutil@4.0.8)(utf-8-validate@6.0.4))': + '@storybook/addon-mdx-gfm@8.3.4(storybook@8.3.4(bufferutil@4.0.8)(utf-8-validate@6.0.4))': dependencies: remark-gfm: 4.0.0 - storybook: 8.3.3(bufferutil@4.0.8)(utf-8-validate@6.0.4) + storybook: 8.3.4(bufferutil@4.0.8)(utf-8-validate@6.0.4) ts-dedent: 2.2.0 transitivePeerDependencies: - supports-color - '@storybook/addon-measure@8.3.3(storybook@8.3.3(bufferutil@4.0.8)(utf-8-validate@6.0.4))': + '@storybook/addon-measure@8.3.4(storybook@8.3.4(bufferutil@4.0.8)(utf-8-validate@6.0.4))': dependencies: '@storybook/global': 5.0.0 - storybook: 8.3.3(bufferutil@4.0.8)(utf-8-validate@6.0.4) + storybook: 8.3.4(bufferutil@4.0.8)(utf-8-validate@6.0.4) tiny-invariant: 1.3.3 - '@storybook/addon-outline@8.3.3(storybook@8.3.3(bufferutil@4.0.8)(utf-8-validate@6.0.4))': + '@storybook/addon-outline@8.3.4(storybook@8.3.4(bufferutil@4.0.8)(utf-8-validate@6.0.4))': dependencies: '@storybook/global': 5.0.0 - storybook: 8.3.3(bufferutil@4.0.8)(utf-8-validate@6.0.4) + storybook: 8.3.4(bufferutil@4.0.8)(utf-8-validate@6.0.4) ts-dedent: 2.2.0 - '@storybook/addon-storysource@8.3.3(storybook@8.3.3(bufferutil@4.0.8)(utf-8-validate@6.0.4))': + '@storybook/addon-storysource@8.3.4(storybook@8.3.4(bufferutil@4.0.8)(utf-8-validate@6.0.4))': dependencies: - '@storybook/source-loader': 8.3.3(storybook@8.3.3(bufferutil@4.0.8)(utf-8-validate@6.0.4)) + '@storybook/source-loader': 8.3.4(storybook@8.3.4(bufferutil@4.0.8)(utf-8-validate@6.0.4)) estraverse: 5.3.0 - storybook: 8.3.3(bufferutil@4.0.8)(utf-8-validate@6.0.4) + storybook: 8.3.4(bufferutil@4.0.8)(utf-8-validate@6.0.4) tiny-invariant: 1.3.3 - '@storybook/addon-toolbars@8.3.3(storybook@8.3.3(bufferutil@4.0.8)(utf-8-validate@6.0.4))': + '@storybook/addon-toolbars@8.3.4(storybook@8.3.4(bufferutil@4.0.8)(utf-8-validate@6.0.4))': dependencies: - storybook: 8.3.3(bufferutil@4.0.8)(utf-8-validate@6.0.4) + storybook: 8.3.4(bufferutil@4.0.8)(utf-8-validate@6.0.4) - '@storybook/addon-viewport@8.3.3(storybook@8.3.3(bufferutil@4.0.8)(utf-8-validate@6.0.4))': + '@storybook/addon-viewport@8.3.4(storybook@8.3.4(bufferutil@4.0.8)(utf-8-validate@6.0.4))': dependencies: memoizerific: 1.11.3 - storybook: 8.3.3(bufferutil@4.0.8)(utf-8-validate@6.0.4) + storybook: 8.3.4(bufferutil@4.0.8)(utf-8-validate@6.0.4) - '@storybook/blocks@8.3.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@8.3.3(bufferutil@4.0.8)(utf-8-validate@6.0.4))': + '@storybook/blocks@8.3.4(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@8.3.4(bufferutil@4.0.8)(utf-8-validate@6.0.4))': dependencies: '@storybook/csf': 0.1.11 '@storybook/global': 5.0.0 @@ -14926,7 +14948,7 @@ snapshots: memoizerific: 1.11.3 polished: 4.2.2 react-colorful: 5.6.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - storybook: 8.3.3(bufferutil@4.0.8)(utf-8-validate@6.0.4) + storybook: 8.3.4(bufferutil@4.0.8)(utf-8-validate@6.0.4) telejson: 7.2.0 ts-dedent: 2.2.0 util-deprecate: 1.0.2 @@ -14934,9 +14956,9 @@ snapshots: react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - '@storybook/builder-vite@8.3.3(storybook@8.3.3(bufferutil@4.0.8)(utf-8-validate@6.0.4))(typescript@5.6.2)(vite@5.4.8(@types/node@20.14.12)(sass@1.79.3)(terser@5.33.0))': + '@storybook/builder-vite@8.3.4(storybook@8.3.4(bufferutil@4.0.8)(utf-8-validate@6.0.4))(typescript@5.6.2)(vite@5.4.8(@types/node@20.14.12)(sass@1.79.3)(terser@5.33.0))': dependencies: - '@storybook/csf-plugin': 8.3.3(storybook@8.3.3(bufferutil@4.0.8)(utf-8-validate@6.0.4)) + '@storybook/csf-plugin': 8.3.4(storybook@8.3.4(bufferutil@4.0.8)(utf-8-validate@6.0.4)) '@types/find-cache-dir': 3.2.1 browser-assert: 1.2.1 es-module-lexer: 1.5.4 @@ -14944,7 +14966,7 @@ snapshots: find-cache-dir: 3.3.2 fs-extra: 11.1.1 magic-string: 0.30.11 - storybook: 8.3.3(bufferutil@4.0.8)(utf-8-validate@6.0.4) + storybook: 8.3.4(bufferutil@4.0.8)(utf-8-validate@6.0.4) ts-dedent: 2.2.0 vite: 5.4.8(@types/node@20.14.12)(sass@1.79.3)(terser@5.33.0) optionalDependencies: @@ -14952,15 +14974,15 @@ snapshots: transitivePeerDependencies: - supports-color - '@storybook/components@8.3.3(storybook@8.3.3(bufferutil@4.0.8)(utf-8-validate@6.0.4))': + '@storybook/components@8.3.4(storybook@8.3.4(bufferutil@4.0.8)(utf-8-validate@6.0.4))': dependencies: - storybook: 8.3.3(bufferutil@4.0.8)(utf-8-validate@6.0.4) + storybook: 8.3.4(bufferutil@4.0.8)(utf-8-validate@6.0.4) - '@storybook/core-events@8.3.3(storybook@8.3.3(bufferutil@4.0.8)(utf-8-validate@6.0.4))': + '@storybook/core-events@8.3.4(storybook@8.3.4(bufferutil@4.0.8)(utf-8-validate@6.0.4))': dependencies: - storybook: 8.3.3(bufferutil@4.0.8)(utf-8-validate@6.0.4) + storybook: 8.3.4(bufferutil@4.0.8)(utf-8-validate@6.0.4) - '@storybook/core@8.3.3(bufferutil@4.0.8)(utf-8-validate@6.0.4)': + '@storybook/core@8.3.4(bufferutil@4.0.8)(utf-8-validate@6.0.4)': dependencies: '@storybook/csf': 0.1.11 '@types/express': 4.17.21 @@ -14980,9 +15002,9 @@ snapshots: - supports-color - utf-8-validate - '@storybook/csf-plugin@8.3.3(storybook@8.3.3(bufferutil@4.0.8)(utf-8-validate@6.0.4))': + '@storybook/csf-plugin@8.3.4(storybook@8.3.4(bufferutil@4.0.8)(utf-8-validate@6.0.4))': dependencies: - storybook: 8.3.3(bufferutil@4.0.8)(utf-8-validate@6.0.4) + storybook: 8.3.4(bufferutil@4.0.8)(utf-8-validate@6.0.4) unplugin: 1.4.0 '@storybook/csf@0.1.11': @@ -14996,40 +15018,40 @@ snapshots: react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - '@storybook/instrumenter@8.3.3(storybook@8.3.3(bufferutil@4.0.8)(utf-8-validate@6.0.4))': + '@storybook/instrumenter@8.3.4(storybook@8.3.4(bufferutil@4.0.8)(utf-8-validate@6.0.4))': dependencies: '@storybook/global': 5.0.0 '@vitest/utils': 2.1.1 - storybook: 8.3.3(bufferutil@4.0.8)(utf-8-validate@6.0.4) + storybook: 8.3.4(bufferutil@4.0.8)(utf-8-validate@6.0.4) util: 0.12.5 - '@storybook/manager-api@8.3.3(storybook@8.3.3(bufferutil@4.0.8)(utf-8-validate@6.0.4))': + '@storybook/manager-api@8.3.4(storybook@8.3.4(bufferutil@4.0.8)(utf-8-validate@6.0.4))': dependencies: - storybook: 8.3.3(bufferutil@4.0.8)(utf-8-validate@6.0.4) + storybook: 8.3.4(bufferutil@4.0.8)(utf-8-validate@6.0.4) - '@storybook/preview-api@8.3.3(storybook@8.3.3(bufferutil@4.0.8)(utf-8-validate@6.0.4))': + '@storybook/preview-api@8.3.4(storybook@8.3.4(bufferutil@4.0.8)(utf-8-validate@6.0.4))': dependencies: - storybook: 8.3.3(bufferutil@4.0.8)(utf-8-validate@6.0.4) + storybook: 8.3.4(bufferutil@4.0.8)(utf-8-validate@6.0.4) - '@storybook/react-dom-shim@8.3.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@8.3.3(bufferutil@4.0.8)(utf-8-validate@6.0.4))': + '@storybook/react-dom-shim@8.3.4(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@8.3.4(bufferutil@4.0.8)(utf-8-validate@6.0.4))': dependencies: react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - storybook: 8.3.3(bufferutil@4.0.8)(utf-8-validate@6.0.4) + storybook: 8.3.4(bufferutil@4.0.8)(utf-8-validate@6.0.4) - '@storybook/react-vite@8.3.3(@storybook/test@8.3.3(storybook@8.3.3(bufferutil@4.0.8)(utf-8-validate@6.0.4)))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(rollup@4.22.5)(storybook@8.3.3(bufferutil@4.0.8)(utf-8-validate@6.0.4))(typescript@5.6.2)(vite@5.4.8(@types/node@20.14.12)(sass@1.79.3)(terser@5.33.0))': + '@storybook/react-vite@8.3.4(@storybook/test@8.3.4(storybook@8.3.4(bufferutil@4.0.8)(utf-8-validate@6.0.4)))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(rollup@4.22.5)(storybook@8.3.4(bufferutil@4.0.8)(utf-8-validate@6.0.4))(typescript@5.6.2)(vite@5.4.8(@types/node@20.14.12)(sass@1.79.3)(terser@5.33.0))': dependencies: '@joshwooding/vite-plugin-react-docgen-typescript': 0.3.0(typescript@5.6.2)(vite@5.4.8(@types/node@20.14.12)(sass@1.79.3)(terser@5.33.0)) '@rollup/pluginutils': 5.1.2(rollup@4.22.5) - '@storybook/builder-vite': 8.3.3(storybook@8.3.3(bufferutil@4.0.8)(utf-8-validate@6.0.4))(typescript@5.6.2)(vite@5.4.8(@types/node@20.14.12)(sass@1.79.3)(terser@5.33.0)) - '@storybook/react': 8.3.3(@storybook/test@8.3.3(storybook@8.3.3(bufferutil@4.0.8)(utf-8-validate@6.0.4)))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@8.3.3(bufferutil@4.0.8)(utf-8-validate@6.0.4))(typescript@5.6.2) + '@storybook/builder-vite': 8.3.4(storybook@8.3.4(bufferutil@4.0.8)(utf-8-validate@6.0.4))(typescript@5.6.2)(vite@5.4.8(@types/node@20.14.12)(sass@1.79.3)(terser@5.33.0)) + '@storybook/react': 8.3.4(@storybook/test@8.3.4(storybook@8.3.4(bufferutil@4.0.8)(utf-8-validate@6.0.4)))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@8.3.4(bufferutil@4.0.8)(utf-8-validate@6.0.4))(typescript@5.6.2) find-up: 5.0.0 magic-string: 0.30.11 react: 18.3.1 react-docgen: 7.0.1 react-dom: 18.3.1(react@18.3.1) resolve: 1.22.8 - storybook: 8.3.3(bufferutil@4.0.8)(utf-8-validate@6.0.4) + storybook: 8.3.4(bufferutil@4.0.8)(utf-8-validate@6.0.4) tsconfig-paths: 4.2.0 vite: 5.4.8(@types/node@20.14.12)(sass@1.79.3)(terser@5.33.0) transitivePeerDependencies: @@ -15040,14 +15062,14 @@ snapshots: - typescript - vite-plugin-glimmerx - '@storybook/react@8.3.3(@storybook/test@8.3.3(storybook@8.3.3(bufferutil@4.0.8)(utf-8-validate@6.0.4)))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@8.3.3(bufferutil@4.0.8)(utf-8-validate@6.0.4))(typescript@5.6.2)': + '@storybook/react@8.3.4(@storybook/test@8.3.4(storybook@8.3.4(bufferutil@4.0.8)(utf-8-validate@6.0.4)))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@8.3.4(bufferutil@4.0.8)(utf-8-validate@6.0.4))(typescript@5.6.2)': dependencies: - '@storybook/components': 8.3.3(storybook@8.3.3(bufferutil@4.0.8)(utf-8-validate@6.0.4)) + '@storybook/components': 8.3.4(storybook@8.3.4(bufferutil@4.0.8)(utf-8-validate@6.0.4)) '@storybook/global': 5.0.0 - '@storybook/manager-api': 8.3.3(storybook@8.3.3(bufferutil@4.0.8)(utf-8-validate@6.0.4)) - '@storybook/preview-api': 8.3.3(storybook@8.3.3(bufferutil@4.0.8)(utf-8-validate@6.0.4)) - '@storybook/react-dom-shim': 8.3.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@8.3.3(bufferutil@4.0.8)(utf-8-validate@6.0.4)) - '@storybook/theming': 8.3.3(storybook@8.3.3(bufferutil@4.0.8)(utf-8-validate@6.0.4)) + '@storybook/manager-api': 8.3.4(storybook@8.3.4(bufferutil@4.0.8)(utf-8-validate@6.0.4)) + '@storybook/preview-api': 8.3.4(storybook@8.3.4(bufferutil@4.0.8)(utf-8-validate@6.0.4)) + '@storybook/react-dom-shim': 8.3.4(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@8.3.4(bufferutil@4.0.8)(utf-8-validate@6.0.4)) + '@storybook/theming': 8.3.4(storybook@8.3.4(bufferutil@4.0.8)(utf-8-validate@6.0.4)) '@types/escodegen': 0.0.6 '@types/estree': 0.0.51 '@types/node': 22.5.5 @@ -15061,72 +15083,72 @@ snapshots: react-dom: 18.3.1(react@18.3.1) react-element-to-jsx-string: 15.0.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) semver: 7.6.3 - storybook: 8.3.3(bufferutil@4.0.8)(utf-8-validate@6.0.4) + storybook: 8.3.4(bufferutil@4.0.8)(utf-8-validate@6.0.4) ts-dedent: 2.2.0 type-fest: 2.19.0 util-deprecate: 1.0.2 optionalDependencies: - '@storybook/test': 8.3.3(storybook@8.3.3(bufferutil@4.0.8)(utf-8-validate@6.0.4)) + '@storybook/test': 8.3.4(storybook@8.3.4(bufferutil@4.0.8)(utf-8-validate@6.0.4)) typescript: 5.6.2 - '@storybook/source-loader@8.3.3(storybook@8.3.3(bufferutil@4.0.8)(utf-8-validate@6.0.4))': + '@storybook/source-loader@8.3.4(storybook@8.3.4(bufferutil@4.0.8)(utf-8-validate@6.0.4))': dependencies: '@storybook/csf': 0.1.11 estraverse: 5.3.0 lodash: 4.17.21 prettier: 3.3.3 - storybook: 8.3.3(bufferutil@4.0.8)(utf-8-validate@6.0.4) + storybook: 8.3.4(bufferutil@4.0.8)(utf-8-validate@6.0.4) - '@storybook/test@8.3.3(storybook@8.3.3(bufferutil@4.0.8)(utf-8-validate@6.0.4))': + '@storybook/test@8.3.4(storybook@8.3.4(bufferutil@4.0.8)(utf-8-validate@6.0.4))': dependencies: '@storybook/csf': 0.1.11 '@storybook/global': 5.0.0 - '@storybook/instrumenter': 8.3.3(storybook@8.3.3(bufferutil@4.0.8)(utf-8-validate@6.0.4)) + '@storybook/instrumenter': 8.3.4(storybook@8.3.4(bufferutil@4.0.8)(utf-8-validate@6.0.4)) '@testing-library/dom': 10.4.0 '@testing-library/jest-dom': 6.5.0 '@testing-library/user-event': 14.5.2(@testing-library/dom@10.4.0) '@vitest/expect': 2.0.5 '@vitest/spy': 2.0.5 - storybook: 8.3.3(bufferutil@4.0.8)(utf-8-validate@6.0.4) + storybook: 8.3.4(bufferutil@4.0.8)(utf-8-validate@6.0.4) util: 0.12.5 - '@storybook/theming@8.3.3(storybook@8.3.3(bufferutil@4.0.8)(utf-8-validate@6.0.4))': + '@storybook/theming@8.3.4(storybook@8.3.4(bufferutil@4.0.8)(utf-8-validate@6.0.4))': dependencies: - storybook: 8.3.3(bufferutil@4.0.8)(utf-8-validate@6.0.4) + storybook: 8.3.4(bufferutil@4.0.8)(utf-8-validate@6.0.4) - '@storybook/types@8.3.3(storybook@8.3.3(bufferutil@4.0.8)(utf-8-validate@6.0.4))': + '@storybook/types@8.3.4(storybook@8.3.4(bufferutil@4.0.8)(utf-8-validate@6.0.4))': dependencies: - storybook: 8.3.3(bufferutil@4.0.8)(utf-8-validate@6.0.4) + storybook: 8.3.4(bufferutil@4.0.8)(utf-8-validate@6.0.4) - '@storybook/vue3-vite@8.3.3(storybook@8.3.3(bufferutil@4.0.8)(utf-8-validate@6.0.4))(vite@5.4.8(@types/node@20.14.12)(sass@1.79.3)(terser@5.33.0))(vue@3.5.10(typescript@5.6.2))': + '@storybook/vue3-vite@8.3.4(storybook@8.3.4(bufferutil@4.0.8)(utf-8-validate@6.0.4))(vite@5.4.8(@types/node@20.14.12)(sass@1.79.3)(terser@5.33.0))(vue@3.5.11(typescript@5.6.2))': dependencies: - '@storybook/builder-vite': 8.3.3(storybook@8.3.3(bufferutil@4.0.8)(utf-8-validate@6.0.4))(typescript@5.6.2)(vite@5.4.8(@types/node@20.14.12)(sass@1.79.3)(terser@5.33.0)) - '@storybook/vue3': 8.3.3(storybook@8.3.3(bufferutil@4.0.8)(utf-8-validate@6.0.4))(vue@3.5.10(typescript@5.6.2)) + '@storybook/builder-vite': 8.3.4(storybook@8.3.4(bufferutil@4.0.8)(utf-8-validate@6.0.4))(typescript@5.6.2)(vite@5.4.8(@types/node@20.14.12)(sass@1.79.3)(terser@5.33.0)) + '@storybook/vue3': 8.3.4(storybook@8.3.4(bufferutil@4.0.8)(utf-8-validate@6.0.4))(vue@3.5.11(typescript@5.6.2)) find-package-json: 1.2.0 magic-string: 0.30.11 - storybook: 8.3.3(bufferutil@4.0.8)(utf-8-validate@6.0.4) + storybook: 8.3.4(bufferutil@4.0.8)(utf-8-validate@6.0.4) typescript: 5.6.2 vite: 5.4.8(@types/node@20.14.12)(sass@1.79.3)(terser@5.33.0) vue-component-meta: 2.0.16(typescript@5.6.2) - vue-docgen-api: 4.75.1(vue@3.5.10(typescript@5.6.2)) + vue-docgen-api: 4.75.1(vue@3.5.11(typescript@5.6.2)) transitivePeerDependencies: - '@preact/preset-vite' - supports-color - vite-plugin-glimmerx - vue - '@storybook/vue3@8.3.3(storybook@8.3.3(bufferutil@4.0.8)(utf-8-validate@6.0.4))(vue@3.5.10(typescript@5.6.2))': + '@storybook/vue3@8.3.4(storybook@8.3.4(bufferutil@4.0.8)(utf-8-validate@6.0.4))(vue@3.5.11(typescript@5.6.2))': dependencies: - '@storybook/components': 8.3.3(storybook@8.3.3(bufferutil@4.0.8)(utf-8-validate@6.0.4)) + '@storybook/components': 8.3.4(storybook@8.3.4(bufferutil@4.0.8)(utf-8-validate@6.0.4)) '@storybook/global': 5.0.0 - '@storybook/manager-api': 8.3.3(storybook@8.3.3(bufferutil@4.0.8)(utf-8-validate@6.0.4)) - '@storybook/preview-api': 8.3.3(storybook@8.3.3(bufferutil@4.0.8)(utf-8-validate@6.0.4)) - '@storybook/theming': 8.3.3(storybook@8.3.3(bufferutil@4.0.8)(utf-8-validate@6.0.4)) - '@vue/compiler-core': 3.5.7 - storybook: 8.3.3(bufferutil@4.0.8)(utf-8-validate@6.0.4) + '@storybook/manager-api': 8.3.4(storybook@8.3.4(bufferutil@4.0.8)(utf-8-validate@6.0.4)) + '@storybook/preview-api': 8.3.4(storybook@8.3.4(bufferutil@4.0.8)(utf-8-validate@6.0.4)) + '@storybook/theming': 8.3.4(storybook@8.3.4(bufferutil@4.0.8)(utf-8-validate@6.0.4)) + '@vue/compiler-core': 3.5.10 + storybook: 8.3.4(bufferutil@4.0.8)(utf-8-validate@6.0.4) ts-dedent: 2.2.0 type-fest: 2.19.0 - vue: 3.5.10(typescript@5.6.2) + vue: 3.5.11(typescript@5.6.2) vue-component-type-helpers: 2.1.6 '@swc/cli@0.3.12(@swc/core@1.6.6)(chokidar@3.5.3)': @@ -15434,14 +15456,14 @@ snapshots: dependencies: '@testing-library/dom': 10.4.0 - '@testing-library/vue@8.1.0(@vue/compiler-sfc@3.5.10)(@vue/server-renderer@3.5.10(vue@3.5.10(typescript@5.6.2)))(vue@3.5.10(typescript@5.6.2))': + '@testing-library/vue@8.1.0(@vue/compiler-sfc@3.5.11)(@vue/server-renderer@3.5.11(vue@3.5.11(typescript@5.6.2)))(vue@3.5.11(typescript@5.6.2))': dependencies: '@babel/runtime': 7.23.4 '@testing-library/dom': 9.3.4 - '@vue/test-utils': 2.4.1(@vue/server-renderer@3.5.10(vue@3.5.10(typescript@5.6.2)))(vue@3.5.10(typescript@5.6.2)) - vue: 3.5.10(typescript@5.6.2) + '@vue/test-utils': 2.4.1(@vue/server-renderer@3.5.11(vue@3.5.11(typescript@5.6.2)))(vue@3.5.11(typescript@5.6.2)) + vue: 3.5.11(typescript@5.6.2) optionalDependencies: - '@vue/compiler-sfc': 3.5.10 + '@vue/compiler-sfc': 3.5.11 transitivePeerDependencies: - '@vue/server-renderer' @@ -15506,7 +15528,7 @@ snapshots: '@types/node': 20.14.12 '@types/responselike': 1.0.0 - '@types/color-convert@2.0.3': + '@types/color-convert@2.0.4': dependencies: '@types/color-name': 1.1.1 @@ -16131,10 +16153,15 @@ snapshots: '@ungap/structured-clone@1.2.0': {} - '@vitejs/plugin-vue@5.1.4(vite@5.4.8(@types/node@20.14.12)(sass@1.79.3)(terser@5.33.0))(vue@3.5.10(typescript@5.6.2))': + '@vitejs/plugin-vue@5.1.4(vite@5.4.8(@types/node@20.14.12)(sass@1.79.3)(terser@5.33.0))(vue@3.5.11(typescript@5.6.2))': dependencies: vite: 5.4.8(@types/node@20.14.12)(sass@1.79.3)(terser@5.33.0) - vue: 3.5.10(typescript@5.6.2) + vue: 3.5.11(typescript@5.6.2) + + '@vitejs/plugin-vue@5.1.4(vite@5.4.8(@types/node@20.14.12)(sass@1.79.4)(terser@5.33.0))(vue@3.5.11(typescript@5.6.2))': + dependencies: + vite: 5.4.8(@types/node@20.14.12)(sass@1.79.4)(terser@5.33.0) + vue: 3.5.11(typescript@5.6.2) '@vitest/coverage-v8@1.6.0(vitest@1.6.0(@types/node@20.14.12)(happy-dom@10.0.3)(jsdom@24.1.1(bufferutil@4.0.8)(utf-8-validate@6.0.4))(sass@1.79.3)(terser@5.33.0))': dependencies: @@ -16155,7 +16182,7 @@ snapshots: transitivePeerDependencies: - supports-color - '@vitest/coverage-v8@1.6.0(vitest@1.6.0(@types/node@20.14.12)(happy-dom@10.0.3)(jsdom@24.1.1)(sass@1.79.3)(terser@5.33.0))': + '@vitest/coverage-v8@1.6.0(vitest@1.6.0(@types/node@20.14.12)(happy-dom@10.0.3)(jsdom@24.1.1)(sass@1.79.4)(terser@5.33.0))': dependencies: '@ampproject/remapping': 2.2.1 '@bcoe/v8-coverage': 0.2.3 @@ -16170,7 +16197,7 @@ snapshots: std-env: 3.7.0 strip-literal: 2.1.0 test-exclude: 6.0.0 - vitest: 1.6.0(@types/node@20.14.12)(happy-dom@10.0.3)(jsdom@24.1.1)(sass@1.79.3)(terser@5.33.0) + vitest: 1.6.0(@types/node@20.14.12)(happy-dom@10.0.3)(jsdom@24.1.1)(sass@1.79.4)(terser@5.33.0) transitivePeerDependencies: - supports-color @@ -16276,10 +16303,10 @@ snapshots: estree-walker: 2.0.2 source-map-js: 1.2.1 - '@vue/compiler-core@3.5.7': + '@vue/compiler-core@3.5.11': dependencies: '@babel/parser': 7.25.6 - '@vue/shared': 3.5.7 + '@vue/shared': 3.5.11 entities: 4.5.0 estree-walker: 2.0.2 source-map-js: 1.2.1 @@ -16294,10 +16321,10 @@ snapshots: '@vue/compiler-core': 3.5.10 '@vue/shared': 3.5.10 - '@vue/compiler-dom@3.5.7': + '@vue/compiler-dom@3.5.11': dependencies: - '@vue/compiler-core': 3.5.7 - '@vue/shared': 3.5.7 + '@vue/compiler-core': 3.5.11 + '@vue/shared': 3.5.11 '@vue/compiler-sfc@3.4.37': dependencies: @@ -16311,13 +16338,13 @@ snapshots: postcss: 8.4.47 source-map-js: 1.2.0 - '@vue/compiler-sfc@3.5.10': + '@vue/compiler-sfc@3.5.11': dependencies: '@babel/parser': 7.25.6 - '@vue/compiler-core': 3.5.10 - '@vue/compiler-dom': 3.5.10 - '@vue/compiler-ssr': 3.5.10 - '@vue/shared': 3.5.10 + '@vue/compiler-core': 3.5.11 + '@vue/compiler-dom': 3.5.11 + '@vue/compiler-ssr': 3.5.11 + '@vue/shared': 3.5.11 estree-walker: 2.0.2 magic-string: 0.30.11 postcss: 8.4.47 @@ -16328,10 +16355,10 @@ snapshots: '@vue/compiler-dom': 3.4.37 '@vue/shared': 3.4.37 - '@vue/compiler-ssr@3.5.10': + '@vue/compiler-ssr@3.5.11': dependencies: - '@vue/compiler-dom': 3.5.10 - '@vue/shared': 3.5.10 + '@vue/compiler-dom': 3.5.11 + '@vue/shared': 3.5.11 '@vue/compiler-vue2@2.7.16': dependencies: @@ -16341,8 +16368,8 @@ snapshots: '@vue/language-core@2.0.16(typescript@5.6.2)': dependencies: '@volar/language-core': 2.2.0 - '@vue/compiler-dom': 3.5.7 - '@vue/shared': 3.5.7 + '@vue/compiler-dom': 3.5.11 + '@vue/shared': 3.5.11 computeds: 0.0.1 minimatch: 9.0.4 path-browserify: 1.0.1 @@ -16355,7 +16382,7 @@ snapshots: '@volar/language-core': 2.4.5 '@vue/compiler-dom': 3.4.37 '@vue/compiler-vue2': 2.7.16 - '@vue/shared': 3.4.37 + '@vue/shared': 3.5.11 computeds: 0.0.1 minimatch: 9.0.4 muggle-string: 0.4.1 @@ -16367,19 +16394,19 @@ snapshots: dependencies: '@vue/shared': 3.4.37 - '@vue/reactivity@3.5.10': + '@vue/reactivity@3.5.11': dependencies: - '@vue/shared': 3.5.10 + '@vue/shared': 3.5.11 '@vue/runtime-core@3.4.37': dependencies: '@vue/reactivity': 3.4.37 '@vue/shared': 3.4.37 - '@vue/runtime-core@3.5.10': + '@vue/runtime-core@3.5.11': dependencies: - '@vue/reactivity': 3.5.10 - '@vue/shared': 3.5.10 + '@vue/reactivity': 3.5.11 + '@vue/shared': 3.5.11 '@vue/runtime-dom@3.4.37': dependencies: @@ -16388,11 +16415,11 @@ snapshots: '@vue/shared': 3.4.37 csstype: 3.1.3 - '@vue/runtime-dom@3.5.10': + '@vue/runtime-dom@3.5.11': dependencies: - '@vue/reactivity': 3.5.10 - '@vue/runtime-core': 3.5.10 - '@vue/shared': 3.5.10 + '@vue/reactivity': 3.5.11 + '@vue/runtime-core': 3.5.11 + '@vue/shared': 3.5.11 csstype: 3.1.3 '@vue/server-renderer@3.4.37(vue@3.4.37(typescript@5.5.4))': @@ -16401,25 +16428,25 @@ snapshots: '@vue/shared': 3.4.37 vue: 3.4.37(typescript@5.5.4) - '@vue/server-renderer@3.5.10(vue@3.5.10(typescript@5.6.2))': + '@vue/server-renderer@3.5.11(vue@3.5.11(typescript@5.6.2))': dependencies: - '@vue/compiler-ssr': 3.5.10 - '@vue/shared': 3.5.10 - vue: 3.5.10(typescript@5.6.2) + '@vue/compiler-ssr': 3.5.11 + '@vue/shared': 3.5.11 + vue: 3.5.11(typescript@5.6.2) '@vue/shared@3.4.37': {} '@vue/shared@3.5.10': {} - '@vue/shared@3.5.7': {} + '@vue/shared@3.5.11': {} - '@vue/test-utils@2.4.1(@vue/server-renderer@3.5.10(vue@3.5.10(typescript@5.6.2)))(vue@3.5.10(typescript@5.6.2))': + '@vue/test-utils@2.4.1(@vue/server-renderer@3.5.11(vue@3.5.11(typescript@5.6.2)))(vue@3.5.11(typescript@5.6.2))': dependencies: js-beautify: 1.14.9 - vue: 3.5.10(typescript@5.6.2) + vue: 3.5.11(typescript@5.6.2) vue-component-type-helpers: 1.8.4 optionalDependencies: - '@vue/server-renderer': 3.5.10(vue@3.5.10(typescript@5.6.2)) + '@vue/server-renderer': 3.5.11(vue@3.5.11(typescript@5.6.2)) '@webgpu/types@0.1.30': {} @@ -16973,14 +17000,14 @@ snapshots: node-gyp-build: 4.6.0 optional: true - bullmq@5.13.2: + bullmq@5.15.0: dependencies: cron-parser: 4.8.1 ioredis: 5.4.1 msgpackr: 1.10.1 node-abort-controller: 3.1.1 - semver: 7.6.0 - tslib: 2.6.3 + semver: 7.6.3 + tslib: 2.7.0 uuid: 9.0.1 transitivePeerDependencies: - supports-color @@ -17228,7 +17255,7 @@ snapshots: chownr@2.0.0: {} - chromatic@11.10.4: {} + chromatic@11.11.0: {} ci-info@3.7.1: {} @@ -17488,12 +17515,12 @@ snapshots: css-tree@2.2.1: dependencies: mdn-data: 2.0.28 - source-map-js: 1.2.0 + source-map-js: 1.2.1 css-tree@2.3.1: dependencies: mdn-data: 2.0.30 - source-map-js: 1.2.0 + source-map-js: 1.2.1 css-what@6.1.0: {} @@ -17927,7 +17954,7 @@ snapshots: '@one-ini/wasm': 0.1.1 commander: 10.0.1 minimatch: 9.0.1 - semver: 7.6.0 + semver: 7.6.3 ee-first@1.1.1: {} @@ -18321,7 +18348,17 @@ snapshots: transitivePeerDependencies: - supports-color - eslint-module-utils@2.11.0(@typescript-eslint/parser@7.17.0(eslint@9.8.0)(typescript@5.6.2))(eslint-import-resolver-node@0.3.9)(eslint@9.8.0): + eslint-module-utils@2.12.0(@typescript-eslint/parser@7.17.0(eslint@9.11.0)(typescript@5.6.2))(eslint-import-resolver-node@0.3.9)(eslint@9.11.0): + dependencies: + debug: 3.2.7(supports-color@8.1.1) + optionalDependencies: + '@typescript-eslint/parser': 7.17.0(eslint@9.11.0)(typescript@5.6.2) + eslint: 9.11.0 + eslint-import-resolver-node: 0.3.9 + transitivePeerDependencies: + - supports-color + + eslint-module-utils@2.12.0(@typescript-eslint/parser@7.17.0(eslint@9.8.0)(typescript@5.6.2))(eslint-import-resolver-node@0.3.9)(eslint@9.8.0): dependencies: debug: 3.2.7(supports-color@8.1.1) optionalDependencies: @@ -18359,7 +18396,36 @@ snapshots: - eslint-import-resolver-webpack - supports-color - eslint-plugin-import@2.30.0(@typescript-eslint/parser@7.17.0(eslint@9.8.0)(typescript@5.6.2))(eslint@9.8.0): + eslint-plugin-import@2.31.0(@typescript-eslint/parser@7.17.0(eslint@9.11.0)(typescript@5.6.2))(eslint@9.11.0): + dependencies: + '@rtsao/scc': 1.1.0 + array-includes: 3.1.8 + array.prototype.findlastindex: 1.2.5 + array.prototype.flat: 1.3.2 + array.prototype.flatmap: 1.3.2 + debug: 3.2.7(supports-color@8.1.1) + doctrine: 2.1.0 + eslint: 9.11.0 + eslint-import-resolver-node: 0.3.9 + eslint-module-utils: 2.12.0(@typescript-eslint/parser@7.17.0(eslint@9.11.0)(typescript@5.6.2))(eslint-import-resolver-node@0.3.9)(eslint@9.11.0) + hasown: 2.0.2 + is-core-module: 2.15.1 + is-glob: 4.0.3 + minimatch: 3.1.2 + object.fromentries: 2.0.8 + object.groupby: 1.0.3 + object.values: 1.2.0 + semver: 6.3.1 + string.prototype.trimend: 1.0.8 + tsconfig-paths: 3.15.0 + optionalDependencies: + '@typescript-eslint/parser': 7.17.0(eslint@9.11.0)(typescript@5.6.2) + transitivePeerDependencies: + - eslint-import-resolver-typescript + - eslint-import-resolver-webpack + - supports-color + + eslint-plugin-import@2.31.0(@typescript-eslint/parser@7.17.0(eslint@9.8.0)(typescript@5.6.2))(eslint@9.8.0): dependencies: '@rtsao/scc': 1.1.0 array-includes: 3.1.8 @@ -18370,7 +18436,7 @@ snapshots: doctrine: 2.1.0 eslint: 9.8.0 eslint-import-resolver-node: 0.3.9 - eslint-module-utils: 2.11.0(@typescript-eslint/parser@7.17.0(eslint@9.8.0)(typescript@5.6.2))(eslint-import-resolver-node@0.3.9)(eslint@9.8.0) + eslint-module-utils: 2.12.0(@typescript-eslint/parser@7.17.0(eslint@9.8.0)(typescript@5.6.2))(eslint-import-resolver-node@0.3.9)(eslint@9.8.0) hasown: 2.0.2 is-core-module: 2.15.1 is-glob: 4.0.3 @@ -18379,6 +18445,7 @@ snapshots: object.groupby: 1.0.3 object.values: 1.2.0 semver: 6.3.1 + string.prototype.trimend: 1.0.8 tsconfig-paths: 3.15.0 optionalDependencies: '@typescript-eslint/parser': 7.17.0(eslint@9.8.0)(typescript@5.6.2) @@ -19633,7 +19700,7 @@ snapshots: is-boolean-object@1.1.2: dependencies: - call-bind: 1.0.2 + call-bind: 1.0.7 has-tostringtag: 1.0.0 is-buffer@1.1.6: {} @@ -19781,7 +19848,7 @@ snapshots: is-weakset@2.0.2: dependencies: - call-bind: 1.0.2 + call-bind: 1.0.7 get-intrinsic: 1.2.1 is-wsl@2.2.0: @@ -19818,7 +19885,7 @@ snapshots: '@babel/parser': 7.24.7 '@istanbuljs/schema': 0.1.3 istanbul-lib-coverage: 3.2.2 - semver: 7.6.0 + semver: 7.6.3 transitivePeerDependencies: - supports-color @@ -20545,7 +20612,7 @@ snapshots: lru-cache@10.0.2: dependencies: - semver: 7.6.0 + semver: 7.6.3 lru-cache@10.2.2: {} @@ -20596,7 +20663,7 @@ snapshots: make-dir@4.0.0: dependencies: - semver: 7.6.0 + semver: 7.6.3 make-fetch-happen@13.0.0: dependencies: @@ -21395,7 +21462,7 @@ snapshots: dependencies: hosted-git-info: 4.1.0 is-core-module: 2.13.1 - semver: 7.6.0 + semver: 7.6.3 validate-npm-package-license: 3.0.4 normalize-path@3.0.0: {} @@ -22006,12 +22073,6 @@ snapshots: postcss-value-parser@4.2.0: {} - postcss@8.4.40: - dependencies: - nanoid: 3.3.7 - picocolors: 1.0.1 - source-map-js: 1.2.0 - postcss@8.4.47: dependencies: nanoid: 3.3.7 @@ -22664,14 +22725,14 @@ snapshots: safer-buffer@2.1.2: {} - sanitize-html@2.13.0: + sanitize-html@2.13.1: dependencies: deepmerge: 4.2.2 escape-string-regexp: 4.0.0 htmlparser2: 8.0.1 is-plain-object: 5.0.0 parse-srcset: 1.0.2 - postcss: 8.4.40 + postcss: 8.4.47 sass@1.79.3: dependencies: @@ -22679,6 +22740,12 @@ snapshots: immutable: 4.2.2 source-map-js: 1.2.0 + sass@1.79.4: + dependencies: + chokidar: 3.5.3 + immutable: 4.2.2 + source-map-js: 1.2.1 + sax@1.2.4: {} saxes@6.0.0: @@ -22809,11 +22876,6 @@ snapshots: shebang-regex@3.0.0: {} - shiki@1.12.0: - dependencies: - '@shikijs/core': 1.12.0 - '@types/hast': 3.0.4 - shiki@1.21.0: dependencies: '@shikijs/core': 1.21.0 @@ -23073,22 +23135,22 @@ snapshots: dependencies: internal-slot: 1.0.5 - storybook-addon-misskey-theme@https://codeload.github.com/misskey-dev/storybook-addon-misskey-theme/tar.gz/cf583db098365b2ccc81a82f63ca9c93bc32b640(@storybook/blocks@8.3.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@8.3.3(bufferutil@4.0.8)(utf-8-validate@6.0.4)))(@storybook/components@8.3.3(storybook@8.3.3(bufferutil@4.0.8)(utf-8-validate@6.0.4)))(@storybook/core-events@8.3.3(storybook@8.3.3(bufferutil@4.0.8)(utf-8-validate@6.0.4)))(@storybook/manager-api@8.3.3(storybook@8.3.3(bufferutil@4.0.8)(utf-8-validate@6.0.4)))(@storybook/preview-api@8.3.3(storybook@8.3.3(bufferutil@4.0.8)(utf-8-validate@6.0.4)))(@storybook/theming@8.3.3(storybook@8.3.3(bufferutil@4.0.8)(utf-8-validate@6.0.4)))(@storybook/types@8.3.3(storybook@8.3.3(bufferutil@4.0.8)(utf-8-validate@6.0.4)))(react-dom@18.3.1(react@18.3.1))(react@18.3.1): + storybook-addon-misskey-theme@https://codeload.github.com/misskey-dev/storybook-addon-misskey-theme/tar.gz/cf583db098365b2ccc81a82f63ca9c93bc32b640(@storybook/blocks@8.3.4(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@8.3.4(bufferutil@4.0.8)(utf-8-validate@6.0.4)))(@storybook/components@8.3.4(storybook@8.3.4(bufferutil@4.0.8)(utf-8-validate@6.0.4)))(@storybook/core-events@8.3.4(storybook@8.3.4(bufferutil@4.0.8)(utf-8-validate@6.0.4)))(@storybook/manager-api@8.3.4(storybook@8.3.4(bufferutil@4.0.8)(utf-8-validate@6.0.4)))(@storybook/preview-api@8.3.4(storybook@8.3.4(bufferutil@4.0.8)(utf-8-validate@6.0.4)))(@storybook/theming@8.3.4(storybook@8.3.4(bufferutil@4.0.8)(utf-8-validate@6.0.4)))(@storybook/types@8.3.4(storybook@8.3.4(bufferutil@4.0.8)(utf-8-validate@6.0.4)))(react-dom@18.3.1(react@18.3.1))(react@18.3.1): dependencies: - '@storybook/blocks': 8.3.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@8.3.3(bufferutil@4.0.8)(utf-8-validate@6.0.4)) - '@storybook/components': 8.3.3(storybook@8.3.3(bufferutil@4.0.8)(utf-8-validate@6.0.4)) - '@storybook/core-events': 8.3.3(storybook@8.3.3(bufferutil@4.0.8)(utf-8-validate@6.0.4)) - '@storybook/manager-api': 8.3.3(storybook@8.3.3(bufferutil@4.0.8)(utf-8-validate@6.0.4)) - '@storybook/preview-api': 8.3.3(storybook@8.3.3(bufferutil@4.0.8)(utf-8-validate@6.0.4)) - '@storybook/theming': 8.3.3(storybook@8.3.3(bufferutil@4.0.8)(utf-8-validate@6.0.4)) - '@storybook/types': 8.3.3(storybook@8.3.3(bufferutil@4.0.8)(utf-8-validate@6.0.4)) + '@storybook/blocks': 8.3.4(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@8.3.4(bufferutil@4.0.8)(utf-8-validate@6.0.4)) + '@storybook/components': 8.3.4(storybook@8.3.4(bufferutil@4.0.8)(utf-8-validate@6.0.4)) + '@storybook/core-events': 8.3.4(storybook@8.3.4(bufferutil@4.0.8)(utf-8-validate@6.0.4)) + '@storybook/manager-api': 8.3.4(storybook@8.3.4(bufferutil@4.0.8)(utf-8-validate@6.0.4)) + '@storybook/preview-api': 8.3.4(storybook@8.3.4(bufferutil@4.0.8)(utf-8-validate@6.0.4)) + '@storybook/theming': 8.3.4(storybook@8.3.4(bufferutil@4.0.8)(utf-8-validate@6.0.4)) + '@storybook/types': 8.3.4(storybook@8.3.4(bufferutil@4.0.8)(utf-8-validate@6.0.4)) optionalDependencies: react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - storybook@8.3.3(bufferutil@4.0.8)(utf-8-validate@6.0.4): + storybook@8.3.4(bufferutil@4.0.8)(utf-8-validate@6.0.4): dependencies: - '@storybook/core': 8.3.3(bufferutil@4.0.8)(utf-8-validate@6.0.4) + '@storybook/core': 8.3.4(bufferutil@4.0.8)(utf-8-validate@6.0.4) transitivePeerDependencies: - bufferutil - supports-color @@ -23765,13 +23827,13 @@ snapshots: uuid@9.0.1: {} - v-code-diff@1.13.1(vue@3.5.10(typescript@5.6.2)): + v-code-diff@1.13.1(vue@3.5.11(typescript@5.6.2)): dependencies: diff: 5.2.0 diff-match-patch: 1.0.5 highlight.js: 11.10.0 - vue: 3.5.10(typescript@5.6.2) - vue-demi: 0.14.7(vue@3.5.10(typescript@5.6.2)) + vue: 3.5.11(typescript@5.6.2) + vue-demi: 0.14.7(vue@3.5.11(typescript@5.6.2)) v8-to-istanbul@9.2.0: dependencies: @@ -23823,6 +23885,24 @@ snapshots: - supports-color - terser + vite-node@1.6.0(@types/node@20.14.12)(sass@1.79.4)(terser@5.33.0): + dependencies: + cac: 6.7.14 + debug: 4.3.5(supports-color@8.1.1) + pathe: 1.1.2 + picocolors: 1.0.1 + vite: 5.4.8(@types/node@20.14.12)(sass@1.79.4)(terser@5.33.0) + transitivePeerDependencies: + - '@types/node' + - less + - lightningcss + - sass + - sass-embedded + - stylus + - sugarss + - supports-color + - terser + vite-plugin-turbosnap@1.0.3: {} vite@5.4.8(@types/node@20.14.12)(sass@1.79.3)(terser@5.33.0): @@ -23836,6 +23916,17 @@ snapshots: sass: 1.79.3 terser: 5.33.0 + vite@5.4.8(@types/node@20.14.12)(sass@1.79.4)(terser@5.33.0): + dependencies: + esbuild: 0.21.5 + postcss: 8.4.47 + rollup: 4.22.5 + optionalDependencies: + '@types/node': 20.14.12 + fsevents: 2.3.3 + sass: 1.79.4 + terser: 5.33.0 + vitest-fetch-mock@0.2.2(encoding@0.1.13)(vitest@1.6.0(@types/node@20.14.12)(happy-dom@10.0.3)(jsdom@24.1.1(bufferutil@4.0.8)(utf-8-validate@6.0.4))(sass@1.79.3)(terser@5.33.0)): dependencies: cross-fetch: 3.1.6(encoding@0.1.13) @@ -23879,7 +23970,7 @@ snapshots: - supports-color - terser - vitest@1.6.0(@types/node@20.14.12)(happy-dom@10.0.3)(jsdom@24.1.1)(sass@1.79.3)(terser@5.33.0): + vitest@1.6.0(@types/node@20.14.12)(happy-dom@10.0.3)(jsdom@24.1.1)(sass@1.79.4)(terser@5.33.0): dependencies: '@vitest/expect': 1.6.0 '@vitest/runner': 1.6.0 @@ -23898,8 +23989,8 @@ snapshots: strip-literal: 2.1.0 tinybench: 2.6.0 tinypool: 0.8.4 - vite: 5.4.8(@types/node@20.14.12)(sass@1.79.3)(terser@5.33.0) - vite-node: 1.6.0(@types/node@20.14.12)(sass@1.79.3)(terser@5.33.0) + vite: 5.4.8(@types/node@20.14.12)(sass@1.79.4)(terser@5.33.0) + vite-node: 1.6.0(@types/node@20.14.12)(sass@1.79.4)(terser@5.33.0) why-is-node-running: 2.2.2 optionalDependencies: '@types/node': 20.14.12 @@ -23922,7 +24013,7 @@ snapshots: vscode-languageclient@9.0.1: dependencies: minimatch: 5.1.2 - semver: 7.6.0 + semver: 7.6.3 vscode-languageserver-protocol: 3.17.5 vscode-languageserver-protocol@3.17.5: @@ -23955,24 +24046,24 @@ snapshots: vue-component-type-helpers@2.1.6: {} - vue-demi@0.14.7(vue@3.5.10(typescript@5.6.2)): + vue-demi@0.14.7(vue@3.5.11(typescript@5.6.2)): dependencies: - vue: 3.5.10(typescript@5.6.2) + vue: 3.5.11(typescript@5.6.2) - vue-docgen-api@4.75.1(vue@3.5.10(typescript@5.6.2)): + vue-docgen-api@4.75.1(vue@3.5.11(typescript@5.6.2)): dependencies: '@babel/parser': 7.25.6 '@babel/types': 7.25.6 - '@vue/compiler-dom': 3.5.7 - '@vue/compiler-sfc': 3.5.10 + '@vue/compiler-dom': 3.5.10 + '@vue/compiler-sfc': 3.5.11 ast-types: 0.16.1 hash-sum: 2.0.0 lru-cache: 8.0.4 pug: 3.0.3 recast: 0.23.6 ts-map: 1.0.3 - vue: 3.5.10(typescript@5.6.2) - vue-inbrowser-compiler-independent-utils: 4.71.1(vue@3.5.10(typescript@5.6.2)) + vue: 3.5.11(typescript@5.6.2) + vue-inbrowser-compiler-independent-utils: 4.71.1(vue@3.5.11(typescript@5.6.2)) vue-eslint-parser@9.4.3(eslint@9.11.0): dependencies: @@ -23987,9 +24078,9 @@ snapshots: transitivePeerDependencies: - supports-color - vue-inbrowser-compiler-independent-utils@4.71.1(vue@3.5.10(typescript@5.6.2)): + vue-inbrowser-compiler-independent-utils@4.71.1(vue@3.5.11(typescript@5.6.2)): dependencies: - vue: 3.5.10(typescript@5.6.2) + vue: 3.5.11(typescript@5.6.2) vue-template-compiler@2.7.14: dependencies: @@ -24013,20 +24104,20 @@ snapshots: optionalDependencies: typescript: 5.5.4 - vue@3.5.10(typescript@5.6.2): + vue@3.5.11(typescript@5.6.2): dependencies: - '@vue/compiler-dom': 3.5.10 - '@vue/compiler-sfc': 3.5.10 - '@vue/runtime-dom': 3.5.10 - '@vue/server-renderer': 3.5.10(vue@3.5.10(typescript@5.6.2)) - '@vue/shared': 3.5.10 + '@vue/compiler-dom': 3.5.11 + '@vue/compiler-sfc': 3.5.11 + '@vue/runtime-dom': 3.5.11 + '@vue/server-renderer': 3.5.11(vue@3.5.11(typescript@5.6.2)) + '@vue/shared': 3.5.11 optionalDependencies: typescript: 5.6.2 - vuedraggable@4.1.0(vue@3.5.10(typescript@5.6.2)): + vuedraggable@4.1.0(vue@3.5.11(typescript@5.6.2)): dependencies: sortablejs: 1.14.0 - vue: 3.5.10(typescript@5.6.2) + vue: 3.5.11(typescript@5.6.2) w3c-xmlserializer@5.0.0: dependencies: From ed71b0b7d44ea5c56d1afa5dd113330832e60155 Mon Sep 17 00:00:00 2001 From: syuilo <4439005+syuilo@users.noreply.github.com> Date: Fri, 4 Oct 2024 11:27:08 +0900 Subject: [PATCH 287/567] :art: --- packages/frontend/src/components/MkAbuseReport.vue | 1 + 1 file changed, 1 insertion(+) diff --git a/packages/frontend/src/components/MkAbuseReport.vue b/packages/frontend/src/components/MkAbuseReport.vue index aa2bffaa17..c9c629046e 100644 --- a/packages/frontend/src/components/MkAbuseReport.vue +++ b/packages/frontend/src/components/MkAbuseReport.vue @@ -10,6 +10,7 @@ SPDX-License-Identifier: AGPL-3.0-only +