Merge branch 'develop' into feat/hide-sensitive-from-antenna

This commit is contained in:
Nanashi. 2025-03-05 08:56:24 +09:00 committed by GitHub
commit 5fb6631777
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
20 changed files with 655 additions and 625 deletions

View File

@ -7,7 +7,7 @@
### Client ### Client
- Enhance: モデレーターがセンシティブ設定を変更する際に確認ダイアログを出すように - Enhance: モデレーターがセンシティブ設定を変更する際に確認ダイアログを出すように
- Enhance: ユーザーページのノート一覧と前後のノート表示でチャンネルのノートを含めるように - Enhance: 「UIのアニメーションを減らす」で画面上のエフェクトも減らせるように
- Fix: 削除して編集の削除タイミングを投稿後になるように `#14498` - Fix: 削除して編集の削除タイミングを投稿後になるように `#14498`
- Fix: フォローされたときのメッセージがちらつくことがある問題を修正 - Fix: フォローされたときのメッセージがちらつくことがある問題を修正
- Fix: 投稿ダイアログがサイズ限界を超えた際にスクロールできない問題を修正 - Fix: 投稿ダイアログがサイズ限界を超えた際にスクロールできない問題を修正

View File

@ -25,7 +25,7 @@
"misskey-js": "workspace:*", "misskey-js": "workspace:*",
"frontend-shared": "workspace:*", "frontend-shared": "workspace:*",
"punycode.js": "2.3.1", "punycode.js": "2.3.1",
"rollup": "4.34.8", "rollup": "4.34.9",
"sass": "1.85.1", "sass": "1.85.1",
"shiki": "3.1.0", "shiki": "3.1.0",
"tinycolor2": "1.6.0", "tinycolor2": "1.6.0",
@ -42,7 +42,7 @@
"@testing-library/vue": "8.1.0", "@testing-library/vue": "8.1.0",
"@types/estree": "1.0.6", "@types/estree": "1.0.6",
"@types/micromatch": "4.0.9", "@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/punycode.js": "npm:@types/punycode@2.1.4",
"@types/tinycolor2": "1.4.6", "@types/tinycolor2": "1.4.6",
"@types/ws": "8.5.14", "@types/ws": "8.5.14",
@ -60,11 +60,11 @@
"micromatch": "4.0.8", "micromatch": "4.0.8",
"msw": "2.7.3", "msw": "2.7.3",
"nodemon": "3.1.9", "nodemon": "3.1.9",
"prettier": "3.5.2", "prettier": "3.5.3",
"start-server-and-test": "2.0.10", "start-server-and-test": "2.0.10",
"vite-plugin-turbosnap": "1.0.3", "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-eslint-parser": "9.4.3",
"vue-tsc": "2.2.4" "vue-tsc": "2.2.8"
} }
} }

View File

@ -21,7 +21,7 @@
"lint": "pnpm typecheck && pnpm eslint" "lint": "pnpm typecheck && pnpm eslint"
}, },
"devDependencies": { "devDependencies": {
"@types/node": "22.13.7", "@types/node": "22.13.8",
"@typescript-eslint/eslint-plugin": "8.25.0", "@typescript-eslint/eslint-plugin": "8.25.0",
"@typescript-eslint/parser": "8.25.0", "@typescript-eslint/parser": "8.25.0",
"esbuild": "0.25.0", "esbuild": "0.25.0",

View File

@ -42,7 +42,7 @@
"chartjs-plugin-zoom": "2.2.0", "chartjs-plugin-zoom": "2.2.0",
"chromatic": "11.26.1", "chromatic": "11.26.1",
"compare-versions": "6.1.1", "compare-versions": "6.1.1",
"cropperjs": "2.0.0-rc.2", "cropperjs": "2.0.0",
"date-fns": "4.1.0", "date-fns": "4.1.0",
"estree-walker": "3.0.3", "estree-walker": "3.0.3",
"eventemitter3": "5.0.1", "eventemitter3": "5.0.1",
@ -58,7 +58,7 @@
"misskey-reversi": "workspace:*", "misskey-reversi": "workspace:*",
"photoswipe": "5.4.4", "photoswipe": "5.4.4",
"punycode.js": "2.3.1", "punycode.js": "2.3.1",
"rollup": "4.34.8", "rollup": "4.34.9",
"sanitize-html": "2.14.0", "sanitize-html": "2.14.0",
"sass": "1.85.1", "sass": "1.85.1",
"shiki": "3.1.0", "shiki": "3.1.0",
@ -78,30 +78,30 @@
}, },
"devDependencies": { "devDependencies": {
"@misskey-dev/summaly": "5.2.0", "@misskey-dev/summaly": "5.2.0",
"@storybook/addon-actions": "8.6.2", "@storybook/addon-actions": "8.6.3",
"@storybook/addon-essentials": "8.6.2", "@storybook/addon-essentials": "8.6.3",
"@storybook/addon-interactions": "8.6.2", "@storybook/addon-interactions": "8.6.3",
"@storybook/addon-links": "8.6.2", "@storybook/addon-links": "8.6.3",
"@storybook/addon-mdx-gfm": "8.6.2", "@storybook/addon-mdx-gfm": "8.6.3",
"@storybook/addon-storysource": "8.6.2", "@storybook/addon-storysource": "8.6.3",
"@storybook/blocks": "8.6.2", "@storybook/blocks": "8.6.3",
"@storybook/components": "8.6.2", "@storybook/components": "8.6.3",
"@storybook/core-events": "8.6.2", "@storybook/core-events": "8.6.3",
"@storybook/manager-api": "8.6.2", "@storybook/manager-api": "8.6.3",
"@storybook/preview-api": "8.6.2", "@storybook/preview-api": "8.6.3",
"@storybook/react": "8.6.2", "@storybook/react": "8.6.3",
"@storybook/react-vite": "8.6.2", "@storybook/react-vite": "8.6.3",
"@storybook/test": "8.6.2", "@storybook/test": "8.6.3",
"@storybook/theming": "8.6.2", "@storybook/theming": "8.6.3",
"@storybook/types": "8.6.2", "@storybook/types": "8.6.3",
"@storybook/vue3": "8.6.2", "@storybook/vue3": "8.6.3",
"@storybook/vue3-vite": "8.6.2", "@storybook/vue3-vite": "8.6.3",
"@testing-library/vue": "8.1.0", "@testing-library/vue": "8.1.0",
"@types/canvas-confetti": "1.9.0", "@types/canvas-confetti": "1.9.0",
"@types/estree": "1.0.6", "@types/estree": "1.0.6",
"@types/matter-js": "0.19.8", "@types/matter-js": "0.19.8",
"@types/micromatch": "4.0.9", "@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/punycode.js": "npm:@types/punycode@2.1.4",
"@types/sanitize-html": "2.13.0", "@types/sanitize-html": "2.13.0",
"@types/seedrandom": "3.0.8", "@types/seedrandom": "3.0.8",
@ -124,18 +124,18 @@
"msw": "2.7.3", "msw": "2.7.3",
"msw-storybook-addon": "2.0.4", "msw-storybook-addon": "2.0.4",
"nodemon": "3.1.9", "nodemon": "3.1.9",
"prettier": "3.5.2", "prettier": "3.5.3",
"react": "19.0.0", "react": "19.0.0",
"react-dom": "19.0.0", "react-dom": "19.0.0",
"seedrandom": "3.0.5", "seedrandom": "3.0.5",
"start-server-and-test": "2.0.10", "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", "storybook-addon-misskey-theme": "github:misskey-dev/storybook-addon-misskey-theme",
"vite-plugin-turbosnap": "1.0.3", "vite-plugin-turbosnap": "1.0.3",
"vitest": "3.0.7", "vitest": "3.0.7",
"vitest-fetch-mock": "0.4.4", "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-eslint-parser": "9.4.3",
"vue-tsc": "2.2.4" "vue-tsc": "2.2.8"
} }
} }

View File

@ -413,7 +413,7 @@ function computeButtonTitle(ev: MouseEvent): void {
function chosen(emoji: string | Misskey.entities.EmojiSimple | UnicodeEmojiDef, ev?: MouseEvent) { function chosen(emoji: string | Misskey.entities.EmojiSimple | UnicodeEmojiDef, ev?: MouseEvent) {
const el = ev && (ev.currentTarget ?? ev.target) as HTMLElement | null | undefined; const el = ev && (ev.currentTarget ?? ev.target) as HTMLElement | null | undefined;
if (el) { if (el && defaultStore.state.animation) {
const rect = el.getBoundingClientRect(); const rect = el.getBoundingClientRect();
const x = rect.left + (el.offsetWidth / 2); const x = rect.left + (el.offsetWidth / 2);
const y = rect.top + (el.offsetHeight / 2); const y = rect.top + (el.offsetHeight / 2);

View File

@ -8,7 +8,7 @@ SPDX-License-Identifier: AGPL-3.0-only
<img :class="$style.icon" :src="avatarUrl" alt=""> <img :class="$style.icon" :src="avatarUrl" alt="">
<span> <span>
<span>@{{ username }}</span> <span>@{{ username }}</span>
<span v-if="(host != localHost) || defaultStore.state.showFullAcct" :class="$style.host">@{{ toUnicode(host) }}</span> <span v-if="(host != localHost)" :class="$style.host">@{{ toUnicode(host) }}</span>
</span> </span>
</MkA> </MkA>
</template> </template>
@ -17,10 +17,10 @@ SPDX-License-Identifier: AGPL-3.0-only
import { toUnicode } from 'punycode.js'; import { toUnicode } from 'punycode.js';
import { computed } from 'vue'; import { computed } from 'vue';
import { host as localHost } from '@@/js/config.js'; import { host as localHost } from '@@/js/config.js';
import type { MkABehavior } from '@/components/global/MkA.vue';
import { $i } from '@/account.js'; import { $i } from '@/account.js';
import { defaultStore } from '@/store.js'; import { defaultStore } from '@/store.js';
import { getStaticImageUrl } from '@/scripts/media-proxy.js'; import { getStaticImageUrl } from '@/scripts/media-proxy.js';
import type { MkABehavior } from '@/components/global/MkA.vue';
const props = defineProps<{ const props = defineProps<{
username: string; username: string;

View File

@ -479,7 +479,7 @@ function react(): void {
reaction: '❤️', reaction: '❤️',
}); });
const el = reactButton.value; const el = reactButton.value;
if (el) { if (el && defaultStore.state.animation) {
const rect = el.getBoundingClientRect(); const rect = el.getBoundingClientRect();
const x = rect.left + (el.offsetWidth / 2); const x = rect.left + (el.offsetWidth / 2);
const y = rect.top + (el.offsetHeight / 2); const y = rect.top + (el.offsetHeight / 2);

View File

@ -442,7 +442,7 @@ function react(): void {
reaction: '❤️', reaction: '❤️',
}); });
const el = reactButton.value; const el = reactButton.value;
if (el) { if (el && defaultStore.state.animation) {
const rect = el.getBoundingClientRect(); const rect = el.getBoundingClientRect();
const x = rect.left + (el.offsetWidth / 2); const x = rect.left + (el.offsetWidth / 2);
const y = rect.top + (el.offsetHeight / 2); const y = rect.top + (el.offsetHeight / 2);

View File

@ -752,7 +752,7 @@ async function post(ev?: MouseEvent) {
if (ev) { if (ev) {
const el = (ev.currentTarget ?? ev.target) as HTMLElement | null; const el = (ev.currentTarget ?? ev.target) as HTMLElement | null;
if (el) { if (el && defaultStore.state.animation) {
const rect = el.getBoundingClientRect(); const rect = el.getBoundingClientRect();
const x = rect.left + (el.offsetWidth / 2); const x = rect.left + (el.offsetWidth / 2);
const y = rect.top + (el.offsetHeight / 2); const y = rect.top + (el.offsetHeight / 2);

View File

@ -6,7 +6,7 @@ SPDX-License-Identifier: AGPL-3.0-only
<template> <template>
<span> <span>
<span>@{{ user.username }}</span> <span>@{{ user.username }}</span>
<span v-if="user.host || detail || defaultStore.state.showFullAcct" style="opacity: 0.5;">@{{ user.host || host }}</span> <span v-if="user.host || detail" style="opacity: 0.5;">@{{ user.host || host }}</span>
</span> </span>
</template> </template>
@ -14,7 +14,6 @@ SPDX-License-Identifier: AGPL-3.0-only
import * as Misskey from 'misskey-js'; import * as Misskey from 'misskey-js';
import { toUnicode } from 'punycode.js'; import { toUnicode } from 'punycode.js';
import { host as hostRaw } from '@@/js/config.js'; import { host as hostRaw } from '@@/js/config.js';
import { defaultStore } from '@/store.js';
defineProps<{ defineProps<{
user: Misskey.entities.UserLite; user: Misskey.entities.UserLite;

View File

@ -4,12 +4,14 @@
*/ */
import MkRippleEffect from '@/components/MkRippleEffect.vue'; import MkRippleEffect from '@/components/MkRippleEffect.vue';
import { defaultStore } from '@/store.js';
import { popup } from '@/os.js'; import { popup } from '@/os.js';
export default { export default {
mounted(el, binding, vn) { mounted(el, binding, vn) {
// 明示的に false であればバインドしない // 明示的に false であればバインドしない
if (binding.value === false) return; if (binding.value === false) return;
if (!defaultStore.state.animation) return;
el.addEventListener('click', () => { el.addEventListener('click', () => {
const rect = el.getBoundingClientRect(); const rect = el.getBoundingClientRect();

View File

@ -87,7 +87,6 @@ const prevUserPagination: Paging = {
params: computed(() => note.value ? ({ params: computed(() => note.value ? ({
userId: note.value.userId, userId: note.value.userId,
untilId: note.value.id, untilId: note.value.id,
withChannelNotes: true,
}) : undefined), }) : undefined),
}; };
@ -98,8 +97,6 @@ const nextUserPagination: Paging = {
params: computed(() => note.value ? ({ params: computed(() => note.value ? ({
userId: note.value.userId, userId: note.value.userId,
sinceId: note.value.id, sinceId: note.value.id,
withChannelNotes: true,
includeSensitiveChannel: $i != null,
}) : undefined), }) : undefined),
}; };

View File

@ -120,6 +120,7 @@ import { i18n } from '@/i18n.js';
import { instance } from '@/instance.js'; import { instance } from '@/instance.js';
import * as os from '@/os.js'; import * as os from '@/os.js';
import { misskeyApi } from '@/scripts/misskey-api.js'; import { misskeyApi } from '@/scripts/misskey-api.js';
import { apLookup } from '@/scripts/lookup.js';
import { useRouter } from '@/router/supplier.js'; import { useRouter } from '@/router/supplier.js';
import MkButton from '@/components/MkButton.vue'; import MkButton from '@/components/MkButton.vue';
import MkFoldableSection from '@/components/MkFoldableSection.vue'; import MkFoldableSection from '@/components/MkFoldableSection.vue';
@ -260,13 +261,7 @@ async function search() {
text: i18n.ts.lookupConfirm, text: i18n.ts.lookupConfirm,
}); });
if (!confirm.canceled) { if (!confirm.canceled) {
const promise = misskeyApi('ap/show', { const res = await apLookup(searchParams.value.query);
uri: searchParams.value.query,
});
os.promiseDialog(promise, null, null, i18n.ts.fetchingAsApObject);
const res = await promise;
if (res.type === 'User') { if (res.type === 'User') {
router.push(`/@${res.object.username}@${res.object.host}`); router.push(`/@${res.object.username}@${res.object.host}`);

View File

@ -43,7 +43,7 @@ const pagination = computed(() => tab.value === 'featured' ? {
userId: props.user.id, userId: props.user.id,
withRenotes: tab.value === 'all', withRenotes: tab.value === 'all',
withReplies: tab.value === 'all', withReplies: tab.value === 'all',
withChannelNotes: true, withChannelNotes: tab.value === 'all',
withFiles: tab.value === 'files', withFiles: tab.value === 'files',
}, },
}); });

View File

@ -550,7 +550,7 @@ export function getRenoteMenu(props: {
icon: 'ti ti-repeat', icon: 'ti ti-repeat',
action: () => { action: () => {
const el = props.renoteButton.value; const el = props.renoteButton.value;
if (el) { if (el && defaultStore.state.animation) {
const rect = el.getBoundingClientRect(); const rect = el.getBoundingClientRect();
const x = rect.left + (el.offsetWidth / 2); const x = rect.left + (el.offsetWidth / 2);
const y = rect.top + (el.offsetHeight / 2); const y = rect.top + (el.offsetHeight / 2);
@ -588,7 +588,7 @@ export function getRenoteMenu(props: {
icon: 'ti ti-repeat', icon: 'ti ti-repeat',
action: () => { action: () => {
const el = props.renoteButton.value; const el = props.renoteButton.value;
if (el) { if (el && defaultStore.state.animation) {
const rect = el.getBoundingClientRect(); const rect = el.getBoundingClientRect();
const x = rect.left + (el.offsetWidth / 2); const x = rect.left + (el.offsetWidth / 2);
const y = rect.top + (el.offsetHeight / 2); const y = rect.top + (el.offsetHeight / 2);
@ -639,7 +639,7 @@ export function getRenoteMenu(props: {
text: channel.name, text: channel.name,
action: () => { action: () => {
const el = props.renoteButton.value; const el = props.renoteButton.value;
if (el) { if (el && defaultStore.state.animation) {
const rect = el.getBoundingClientRect(); const rect = el.getBoundingClientRect();
const x = rect.left + (el.offsetWidth / 2); const x = rect.left + (el.offsetWidth / 2);
const y = rect.top + (el.offsetHeight / 2); const y = rect.top + (el.offsetHeight / 2);

View File

@ -29,6 +29,19 @@ export async function lookup(router?: Router) {
} }
if (query.startsWith('https://')) { if (query.startsWith('https://')) {
const res = await apLookup(query);
if (res.type === 'User') {
_router.push(`/@${res.object.username}@${res.object.host}`);
} else if (res.type === 'Note') {
_router.push(`/notes/${res.object.id}`);
}
return;
}
}
export async function apLookup(query: string) {
const promise = misskeyApi('ap/show', { const promise = misskeyApi('ap/show', {
uri: query, uri: query,
}); });
@ -67,14 +80,5 @@ export async function lookup(router?: Router) {
}); });
}, i18n.ts.fetchingAsApObject); }, i18n.ts.fetchingAsApObject);
const res = await promise; return await promise;
if (res.type === 'User') {
_router.push(`/@${res.object.username}@${res.object.host}`);
} else if (res.type === 'Note') {
_router.push(`/notes/${res.object.id}`);
}
return;
}
} }

View File

@ -10,8 +10,8 @@ import lightTheme from '@@/themes/l-light.json5';
import darkTheme from '@@/themes/d-green-lime.json5'; import darkTheme from '@@/themes/d-green-lime.json5';
import type { SoundType } from '@/scripts/sound.js'; import type { SoundType } from '@/scripts/sound.js';
import type { Ast } from '@syuilo/aiscript'; import type { Ast } from '@syuilo/aiscript';
import { DEFAULT_DEVICE_KIND } from '@/scripts/device-kind.js';
import type { DeviceKind } from '@/scripts/device-kind.js'; import type { DeviceKind } from '@/scripts/device-kind.js';
import { DEFAULT_DEVICE_KIND } from '@/scripts/device-kind.js';
import { miLocalStorage } from '@/local-storage.js'; import { miLocalStorage } from '@/local-storage.js';
import { Storage } from '@/pizzax.js'; import { Storage } from '@/pizzax.js';
@ -89,10 +89,6 @@ export const defaultStore = markRaw(new Storage('base', {
where: 'account', where: 'account',
default: true, default: true,
}, },
showFullAcct: {
where: 'account',
default: false,
},
collapseRenotes: { collapseRenotes: {
where: 'account', where: 'account',
default: true, default: true,

View File

@ -24,7 +24,7 @@
"devDependencies": { "devDependencies": {
"@types/matter-js": "0.19.8", "@types/matter-js": "0.19.8",
"@types/seedrandom": "3.0.8", "@types/seedrandom": "3.0.8",
"@types/node": "22.13.7", "@types/node": "22.13.8",
"@typescript-eslint/eslint-plugin": "8.25.0", "@typescript-eslint/eslint-plugin": "8.25.0",
"@typescript-eslint/parser": "8.25.0", "@typescript-eslint/parser": "8.25.0",
"nodemon": "3.1.9", "nodemon": "3.1.9",

View File

@ -22,7 +22,7 @@
"lint": "pnpm typecheck && pnpm eslint" "lint": "pnpm typecheck && pnpm eslint"
}, },
"devDependencies": { "devDependencies": {
"@types/node": "22.13.7", "@types/node": "22.13.8",
"@typescript-eslint/eslint-plugin": "8.25.0", "@typescript-eslint/eslint-plugin": "8.25.0",
"@typescript-eslint/parser": "8.25.0", "@typescript-eslint/parser": "8.25.0",
"execa": "9.5.2", "execa": "9.5.2",

File diff suppressed because it is too large Load Diff