diff --git a/CHANGELOG.md b/CHANGELOG.md
index 9053d0e803..0707ba24d4 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -5,7 +5,12 @@
- Fix: システムアカウントが削除できる問題を修正
### Client
--
+- Enhance: モデレーターがセンシティブ設定を変更する際に確認ダイアログを出すように
+- Enhance: ユーザーページのノート一覧と前後のノート表示でチャンネルのノートを含めるように
+- Enhance: 「UIのアニメーションを減らす」で画面上のエフェクトも減らせるように
+- Fix: 削除して編集の削除タイミングを投稿後になるように `#14498`
+- Fix: フォローされたときのメッセージがちらつくことがある問題を修正
+- Fix: 投稿ダイアログがサイズ限界を超えた際にスクロールできない問題を修正
### Server
- Fix: 特定のケースでActivityPubの処理がデッドロックになることがあるのを修正
diff --git a/locales/index.d.ts b/locales/index.d.ts
index dfdc5a3b37..947b577792 100644
--- a/locales/index.d.ts
+++ b/locales/index.d.ts
@@ -5262,6 +5262,14 @@ export interface Locale extends ILocale {
* " {emoji} " をリアクションしますか?
*/
"reactAreYouSure": ParameterizedString<"emoji">;
+ /**
+ * このメディアをセンシティブとして設定しますか?
+ */
+ "markAsSensitiveConfirm": string;
+ /**
+ * このメディアのセンシティブ指定を解除しますか?
+ */
+ "unmarkAsSensitiveConfirm": string;
"_accountSettings": {
/**
* コンテンツの表示にログインを必須にする
diff --git a/locales/ja-JP.yml b/locales/ja-JP.yml
index c3d6fa5a41..fbe4d98896 100644
--- a/locales/ja-JP.yml
+++ b/locales/ja-JP.yml
@@ -1311,6 +1311,8 @@ federationSpecified: "このサーバーはホワイトリスト連合で運用
federationDisabled: "このサーバーは連合が無効化されています。他のサーバーのユーザーとやり取りすることはできません。"
confirmOnReact: "リアクションする際に確認する"
reactAreYouSure: "\" {emoji} \" をリアクションしますか?"
+markAsSensitiveConfirm: "このメディアをセンシティブとして設定しますか?"
+unmarkAsSensitiveConfirm: "このメディアのセンシティブ指定を解除しますか?"
_accountSettings:
requireSigninToViewContents: "コンテンツの表示にログインを必須にする"
diff --git a/packages/frontend-embed/package.json b/packages/frontend-embed/package.json
index 416aa89bc0..9d6443bd1f 100644
--- a/packages/frontend-embed/package.json
+++ b/packages/frontend-embed/package.json
@@ -25,7 +25,7 @@
"misskey-js": "workspace:*",
"frontend-shared": "workspace:*",
"punycode.js": "2.3.1",
- "rollup": "4.34.8",
+ "rollup": "4.34.9",
"sass": "1.85.1",
"shiki": "3.1.0",
"tinycolor2": "1.6.0",
@@ -42,7 +42,7 @@
"@testing-library/vue": "8.1.0",
"@types/estree": "1.0.6",
"@types/micromatch": "4.0.9",
- "@types/node": "22.13.7",
+ "@types/node": "22.13.8",
"@types/punycode.js": "npm:@types/punycode@2.1.4",
"@types/tinycolor2": "1.4.6",
"@types/ws": "8.5.14",
@@ -60,11 +60,11 @@
"micromatch": "4.0.8",
"msw": "2.7.3",
"nodemon": "3.1.9",
- "prettier": "3.5.2",
+ "prettier": "3.5.3",
"start-server-and-test": "2.0.10",
"vite-plugin-turbosnap": "1.0.3",
- "vue-component-type-helpers": "2.2.4",
+ "vue-component-type-helpers": "2.2.8",
"vue-eslint-parser": "9.4.3",
- "vue-tsc": "2.2.4"
+ "vue-tsc": "2.2.8"
}
}
diff --git a/packages/frontend-shared/package.json b/packages/frontend-shared/package.json
index 10df3b3999..392571582a 100644
--- a/packages/frontend-shared/package.json
+++ b/packages/frontend-shared/package.json
@@ -21,7 +21,7 @@
"lint": "pnpm typecheck && pnpm eslint"
},
"devDependencies": {
- "@types/node": "22.13.7",
+ "@types/node": "22.13.8",
"@typescript-eslint/eslint-plugin": "8.25.0",
"@typescript-eslint/parser": "8.25.0",
"esbuild": "0.25.0",
diff --git a/packages/frontend/package.json b/packages/frontend/package.json
index c4b81b847d..ddf2a20189 100644
--- a/packages/frontend/package.json
+++ b/packages/frontend/package.json
@@ -42,7 +42,7 @@
"chartjs-plugin-zoom": "2.2.0",
"chromatic": "11.26.1",
"compare-versions": "6.1.1",
- "cropperjs": "2.0.0-rc.2",
+ "cropperjs": "2.0.0",
"date-fns": "4.1.0",
"estree-walker": "3.0.3",
"eventemitter3": "5.0.1",
@@ -58,7 +58,7 @@
"misskey-reversi": "workspace:*",
"photoswipe": "5.4.4",
"punycode.js": "2.3.1",
- "rollup": "4.34.8",
+ "rollup": "4.34.9",
"sanitize-html": "2.14.0",
"sass": "1.85.1",
"shiki": "3.1.0",
@@ -78,30 +78,30 @@
},
"devDependencies": {
"@misskey-dev/summaly": "5.2.0",
- "@storybook/addon-actions": "8.6.2",
- "@storybook/addon-essentials": "8.6.2",
- "@storybook/addon-interactions": "8.6.2",
- "@storybook/addon-links": "8.6.2",
- "@storybook/addon-mdx-gfm": "8.6.2",
- "@storybook/addon-storysource": "8.6.2",
- "@storybook/blocks": "8.6.2",
- "@storybook/components": "8.6.2",
- "@storybook/core-events": "8.6.2",
- "@storybook/manager-api": "8.6.2",
- "@storybook/preview-api": "8.6.2",
- "@storybook/react": "8.6.2",
- "@storybook/react-vite": "8.6.2",
- "@storybook/test": "8.6.2",
- "@storybook/theming": "8.6.2",
- "@storybook/types": "8.6.2",
- "@storybook/vue3": "8.6.2",
- "@storybook/vue3-vite": "8.6.2",
+ "@storybook/addon-actions": "8.6.3",
+ "@storybook/addon-essentials": "8.6.3",
+ "@storybook/addon-interactions": "8.6.3",
+ "@storybook/addon-links": "8.6.3",
+ "@storybook/addon-mdx-gfm": "8.6.3",
+ "@storybook/addon-storysource": "8.6.3",
+ "@storybook/blocks": "8.6.3",
+ "@storybook/components": "8.6.3",
+ "@storybook/core-events": "8.6.3",
+ "@storybook/manager-api": "8.6.3",
+ "@storybook/preview-api": "8.6.3",
+ "@storybook/react": "8.6.3",
+ "@storybook/react-vite": "8.6.3",
+ "@storybook/test": "8.6.3",
+ "@storybook/theming": "8.6.3",
+ "@storybook/types": "8.6.3",
+ "@storybook/vue3": "8.6.3",
+ "@storybook/vue3-vite": "8.6.3",
"@testing-library/vue": "8.1.0",
"@types/canvas-confetti": "1.9.0",
"@types/estree": "1.0.6",
"@types/matter-js": "0.19.8",
"@types/micromatch": "4.0.9",
- "@types/node": "22.13.7",
+ "@types/node": "22.13.8",
"@types/punycode.js": "npm:@types/punycode@2.1.4",
"@types/sanitize-html": "2.13.0",
"@types/seedrandom": "3.0.8",
@@ -124,18 +124,18 @@
"msw": "2.7.3",
"msw-storybook-addon": "2.0.4",
"nodemon": "3.1.9",
- "prettier": "3.5.2",
+ "prettier": "3.5.3",
"react": "19.0.0",
"react-dom": "19.0.0",
"seedrandom": "3.0.5",
"start-server-and-test": "2.0.10",
- "storybook": "8.6.2",
+ "storybook": "8.6.3",
"storybook-addon-misskey-theme": "github:misskey-dev/storybook-addon-misskey-theme",
"vite-plugin-turbosnap": "1.0.3",
"vitest": "3.0.7",
"vitest-fetch-mock": "0.4.4",
- "vue-component-type-helpers": "2.2.4",
+ "vue-component-type-helpers": "2.2.8",
"vue-eslint-parser": "9.4.3",
- "vue-tsc": "2.2.4"
+ "vue-tsc": "2.2.8"
}
}
diff --git a/packages/frontend/src/components/MkEmojiPicker.vue b/packages/frontend/src/components/MkEmojiPicker.vue
index 5da161dae8..62a1000674 100644
--- a/packages/frontend/src/components/MkEmojiPicker.vue
+++ b/packages/frontend/src/components/MkEmojiPicker.vue
@@ -413,7 +413,7 @@ function computeButtonTitle(ev: MouseEvent): void {
function chosen(emoji: string | Misskey.entities.EmojiSimple | UnicodeEmojiDef, ev?: MouseEvent) {
const el = ev && (ev.currentTarget ?? ev.target) as HTMLElement | null | undefined;
- if (el) {
+ if (el && defaultStore.state.animation) {
const rect = el.getBoundingClientRect();
const x = rect.left + (el.offsetWidth / 2);
const y = rect.top + (el.offsetHeight / 2);
diff --git a/packages/frontend/src/components/MkMediaAudio.vue b/packages/frontend/src/components/MkMediaAudio.vue
index 8cf88abaaf..3d2795b37a 100644
--- a/packages/frontend/src/components/MkMediaAudio.vue
+++ b/packages/frontend/src/components/MkMediaAudio.vue
@@ -259,7 +259,14 @@ function showMenu(ev: MouseEvent) {
});
}
-function toggleSensitive(file: Misskey.entities.DriveFile) {
+async function toggleSensitive(file: Misskey.entities.DriveFile) {
+ const { canceled } = await os.confirm({
+ type: 'warning',
+ text: file.isSensitive ? i18n.ts.unmarkAsSensitiveConfirm : i18n.ts.markAsSensitiveConfirm,
+ });
+
+ if (canceled) return;
+
os.apiWithDialog('drive/files/update', {
fileId: file.id,
isSensitive: !file.isSensitive,
diff --git a/packages/frontend/src/components/MkMediaImage.vue b/packages/frontend/src/components/MkMediaImage.vue
index 3645a4a66e..8ab990b926 100644
--- a/packages/frontend/src/components/MkMediaImage.vue
+++ b/packages/frontend/src/components/MkMediaImage.vue
@@ -124,11 +124,21 @@ function showMenu(ev: MouseEvent) {
if (iAmModerator) {
menuItems.push({
- text: i18n.ts.markAsSensitive,
+ text: props.image.isSensitive ? i18n.ts.unmarkAsSensitive : i18n.ts.markAsSensitive,
icon: 'ti ti-eye-exclamation',
danger: true,
- action: () => {
- os.apiWithDialog('drive/files/update', { fileId: props.image.id, isSensitive: true });
+ action: async () => {
+ const { canceled } = await os.confirm({
+ type: 'warning',
+ text: props.image.isSensitive ? i18n.ts.unmarkAsSensitiveConfirm : i18n.ts.markAsSensitiveConfirm,
+ });
+
+ if (canceled) return;
+
+ os.apiWithDialog('drive/files/update', {
+ fileId: props.image.id,
+ isSensitive: !props.image.isSensitive,
+ });
},
});
}
diff --git a/packages/frontend/src/components/MkMediaVideo.vue b/packages/frontend/src/components/MkMediaVideo.vue
index 26372e1a52..682da22711 100644
--- a/packages/frontend/src/components/MkMediaVideo.vue
+++ b/packages/frontend/src/components/MkMediaVideo.vue
@@ -284,7 +284,14 @@ function showMenu(ev: MouseEvent) {
});
}
-function toggleSensitive(file: Misskey.entities.DriveFile) {
+async function toggleSensitive(file: Misskey.entities.DriveFile) {
+ const { canceled } = await os.confirm({
+ type: 'warning',
+ text: file.isSensitive ? i18n.ts.unmarkAsSensitiveConfirm : i18n.ts.markAsSensitiveConfirm,
+ });
+
+ if (canceled) return;
+
os.apiWithDialog('drive/files/update', {
fileId: file.id,
isSensitive: !file.isSensitive,
diff --git a/packages/frontend/src/components/MkNote.vue b/packages/frontend/src/components/MkNote.vue
index 193dfe5b7e..8e1d854660 100644
--- a/packages/frontend/src/components/MkNote.vue
+++ b/packages/frontend/src/components/MkNote.vue
@@ -479,7 +479,7 @@ function react(): void {
reaction: '❤️',
});
const el = reactButton.value;
- if (el) {
+ if (el && defaultStore.state.animation) {
const rect = el.getBoundingClientRect();
const x = rect.left + (el.offsetWidth / 2);
const y = rect.top + (el.offsetHeight / 2);
diff --git a/packages/frontend/src/components/MkNoteDetailed.vue b/packages/frontend/src/components/MkNoteDetailed.vue
index d5bd4ad133..27d8a399cc 100644
--- a/packages/frontend/src/components/MkNoteDetailed.vue
+++ b/packages/frontend/src/components/MkNoteDetailed.vue
@@ -442,7 +442,7 @@ function react(): void {
reaction: '❤️',
});
const el = reactButton.value;
- if (el) {
+ if (el && defaultStore.state.animation) {
const rect = el.getBoundingClientRect();
const x = rect.left + (el.offsetWidth / 2);
const y = rect.top + (el.offsetHeight / 2);
diff --git a/packages/frontend/src/components/MkPostForm.vue b/packages/frontend/src/components/MkPostForm.vue
index ad0a332f99..255aa6ca19 100644
--- a/packages/frontend/src/components/MkPostForm.vue
+++ b/packages/frontend/src/components/MkPostForm.vue
@@ -67,7 +67,7 @@ SPDX-License-Identifier: AGPL-3.0-only