+
@@ -63,7 +63,7 @@ SPDX-License-Identifier: AGPL-3.0-only
+
+
+
+
diff --git a/packages/frontend/src/components/MkEmojiPicker.section.vue b/packages/frontend/src/components/MkEmojiPicker.section.vue
index c13164c2968d..fca7aa2f4ec1 100644
--- a/packages/frontend/src/components/MkEmojiPicker.section.vue
+++ b/packages/frontend/src/components/MkEmojiPicker.section.vue
@@ -62,7 +62,7 @@ SPDX-License-Identifier: AGPL-3.0-only
+
+
diff --git a/packages/frontend/src/components/MkImgWithBlurhash.vue b/packages/frontend/src/components/MkImgWithBlurhash.vue
index 8d301f16bd4e..c04d0864fb1e 100644
--- a/packages/frontend/src/components/MkImgWithBlurhash.vue
+++ b/packages/frontend/src/components/MkImgWithBlurhash.vue
@@ -23,8 +23,8 @@ SPDX-License-Identifier: AGPL-3.0-only
@@ -196,10 +208,19 @@ function showMenu(ev: MouseEvent) {
position: relative;
//box-shadow: 0 0 0 1px var(--divider) inset;
background: var(--bg);
- background-image: linear-gradient(45deg, var(--c) 16.67%, var(--bg) 16.67%, var(--bg) 50%, var(--c) 50%, var(--c) 66.67%, var(--bg) 66.67%, var(--bg) 100%);
background-size: 16px 16px;
}
+html[data-color-scheme=dark] .visible {
+ --c: rgb(255 255 255 / 2%);
+ background-image: linear-gradient(45deg, var(--c) 16.67%, var(--bg) 16.67%, var(--bg) 50%, var(--c) 50%, var(--c) 66.67%, var(--bg) 66.67%, var(--bg) 100%);
+}
+
+html[data-color-scheme=light] .visible {
+ --c: rgb(0 0 0 / 2%);
+ background-image: linear-gradient(45deg, var(--c) 16.67%, var(--bg) 16.67%, var(--bg) 50%, var(--c) 50%, var(--c) 66.67%, var(--bg) 66.67%, var(--bg) 100%);
+}
+
.menu {
display: block;
position: absolute;
diff --git a/packages/frontend/src/components/MkMediaList.vue b/packages/frontend/src/components/MkMediaList.vue
index 2300802dcff8..4a4a99be253c 100644
--- a/packages/frontend/src/components/MkMediaList.vue
+++ b/packages/frontend/src/components/MkMediaList.vue
@@ -37,7 +37,7 @@ import XBanner from '@/components/MkMediaBanner.vue';
import XImage from '@/components/MkMediaImage.vue';
import XVideo from '@/components/MkMediaVideo.vue';
import * as os from '@/os.js';
-import { FILE_TYPE_BROWSERSAFE } from '@/const.js';
+import { FILE_TYPE_BROWSERSAFE } from '@@/js/const.js';
import { defaultStore } from '@/store.js';
import { focusParent } from '@/scripts/focus.js';
diff --git a/packages/frontend/src/components/MkMediaVideo.vue b/packages/frontend/src/components/MkMediaVideo.vue
index 7c5a36514835..1b1915e6c8b0 100644
--- a/packages/frontend/src/components/MkMediaVideo.vue
+++ b/packages/frontend/src/components/MkMediaVideo.vue
@@ -192,9 +192,7 @@ async function show() {
const menuShowing = ref(false);
function showMenu(ev: MouseEvent) {
- let menu: MenuItem[] = [];
-
- menu = [
+ const menu: MenuItem[] = [
// TODO: 再生キューに追加
{
type: 'switch',
@@ -247,7 +245,7 @@ function showMenu(ev: MouseEvent) {
menu.push({
type: 'divider',
}, {
- type: 'link' as const,
+ type: 'link',
text: i18n.ts._fileViewer.title,
icon: 'ti ti-info-circle',
to: `/my/drive/file/${props.video.id}`,
diff --git a/packages/frontend/src/components/MkMention.vue b/packages/frontend/src/components/MkMention.vue
index bfb49a416ef3..9d9661e8166f 100644
--- a/packages/frontend/src/components/MkMention.vue
+++ b/packages/frontend/src/components/MkMention.vue
@@ -17,7 +17,7 @@ SPDX-License-Identifier: AGPL-3.0-only
import { toUnicode } from 'punycode';
import { computed } from 'vue';
import tinycolor from 'tinycolor2';
-import { host as localHost } from '@/config.js';
+import { host as localHost } from '@@/js/config.js';
import { $i } from '@/account.js';
import { defaultStore } from '@/store.js';
import { getStaticImageUrl } from '@/scripts/media-proxy.js';
diff --git a/packages/frontend/src/components/MkMenu.child.vue b/packages/frontend/src/components/MkMenu.child.vue
index 235790556c5b..086573ba6dd6 100644
--- a/packages/frontend/src/components/MkMenu.child.vue
+++ b/packages/frontend/src/components/MkMenu.child.vue
@@ -12,7 +12,7 @@ SPDX-License-Identifier: AGPL-3.0-only
diff --git a/packages/frontend/src/components/MkPreview.vue b/packages/frontend/src/components/MkPreview.vue
index 649dee2fdb71..6efd99d14bf5 100644
--- a/packages/frontend/src/components/MkPreview.vue
+++ b/packages/frontend/src/components/MkPreview.vue
@@ -42,7 +42,7 @@ import MkSwitch from '@/components/MkSwitch.vue';
import MkTextarea from '@/components/MkTextarea.vue';
import MkRadio from '@/components/MkRadio.vue';
import * as os from '@/os.js';
-import * as config from '@/config.js';
+import * as config from '@@/js/config.js';
import { $i } from '@/account.js';
const text = ref('');
diff --git a/packages/frontend/src/components/MkPullToRefresh.vue b/packages/frontend/src/components/MkPullToRefresh.vue
index e0d0b561beb0..4fb4c6fe56a3 100644
--- a/packages/frontend/src/components/MkPullToRefresh.vue
+++ b/packages/frontend/src/components/MkPullToRefresh.vue
@@ -25,7 +25,7 @@ SPDX-License-Identifier: AGPL-3.0-only
diff --git a/packages/frontend/src/components/global/MkEmoji.vue b/packages/frontend/src/components/global/MkEmoji.vue
index fa780d4ad369..f0acd3bc27c5 100644
--- a/packages/frontend/src/components/global/MkEmoji.vue
+++ b/packages/frontend/src/components/global/MkEmoji.vue
@@ -10,13 +10,14 @@ SPDX-License-Identifier: AGPL-3.0-only
diff --git a/packages/frontend/src/components/global/MkMisskeyFlavoredMarkdown.stories.impl.ts b/packages/frontend/src/components/global/MkMfm.stories.impl.ts
similarity index 78%
rename from packages/frontend/src/components/global/MkMisskeyFlavoredMarkdown.stories.impl.ts
rename to packages/frontend/src/components/global/MkMfm.stories.impl.ts
index 730351f79534..1daf7a29cb60 100644
--- a/packages/frontend/src/components/global/MkMisskeyFlavoredMarkdown.stories.impl.ts
+++ b/packages/frontend/src/components/global/MkMfm.stories.impl.ts
@@ -2,16 +2,15 @@
* SPDX-FileCopyrightText: syuilo and misskey-project
* SPDX-License-Identifier: AGPL-3.0-only
*/
-
-/* eslint-disable @typescript-eslint/explicit-function-return-type */
+
import { StoryObj } from '@storybook/vue3';
import { expect, within } from '@storybook/test';
-import MkMisskeyFlavoredMarkdown from './MkMisskeyFlavoredMarkdown.js';
+import MkMfm from './MkMfm.js';
export const Default = {
render(args) {
return {
components: {
- MkMisskeyFlavoredMarkdown,
+ MkMfm,
},
setup() {
return {
@@ -25,7 +24,7 @@ export const Default = {
};
},
},
- template: '',
+ template: '',
};
},
async play({ canvasElement, args }) {
@@ -54,25 +53,25 @@ export const Default = {
parameters: {
layout: 'centered',
},
-} satisfies StoryObj;
+} satisfies StoryObj;
export const Plain = {
...Default,
args: {
...Default.args,
plain: true,
},
-} satisfies StoryObj;
+} satisfies StoryObj;
export const Nowrap = {
...Default,
args: {
...Default.args,
nowrap: true,
},
-} satisfies StoryObj;
+} satisfies StoryObj;
export const IsNotNote = {
...Default,
args: {
...Default.args,
isNote: false,
},
-} satisfies StoryObj;
+} satisfies StoryObj;
diff --git a/packages/frontend/src/components/global/MkMisskeyFlavoredMarkdown.ts b/packages/frontend/src/components/global/MkMfm.ts
similarity index 97%
rename from packages/frontend/src/components/global/MkMisskeyFlavoredMarkdown.ts
rename to packages/frontend/src/components/global/MkMfm.ts
index 0d869892bdd2..d914492231d8 100644
--- a/packages/frontend/src/components/global/MkMisskeyFlavoredMarkdown.ts
+++ b/packages/frontend/src/components/global/MkMfm.ts
@@ -17,10 +17,15 @@ import MkCodeInline from '@/components/MkCodeInline.vue';
import MkGoogle from '@/components/MkGoogle.vue';
import MkSparkle from '@/components/MkSparkle.vue';
import MkA, { MkABehavior } from '@/components/global/MkA.vue';
-import { host } from '@/config.js';
+import { host } from '@@/js/config.js';
import { defaultStore } from '@/store.js';
-import { nyaize as doNyaize } from '@/scripts/nyaize.js';
-import { safeParseFloat } from '@/scripts/safe-parse.js';
+
+function safeParseFloat(str: unknown): number | null {
+ if (typeof str !== 'string' || str === '') return null;
+ const num = parseFloat(str);
+ if (isNaN(num)) return null;
+ return num;
+}
const QUOTE_STYLE = `
display: block;
@@ -86,7 +91,7 @@ export default function (props: MfmProps, { emit }: { emit: SetupContext
@@ -24,7 +25,7 @@ SPDX-License-Identifier: AGPL-3.0-only
diff --git a/packages/frontend/src/pages/admin/branding.vue b/packages/frontend/src/pages/admin/branding.vue
index fe1b7c561daf..947dde767eef 100644
--- a/packages/frontend/src/pages/admin/branding.vue
+++ b/packages/frontend/src/pages/admin/branding.vue
@@ -117,7 +117,7 @@ import { i18n } from '@/i18n.js';
import { definePageMetadata } from '@/scripts/page-metadata.js';
import MkButton from '@/components/MkButton.vue';
import MkColorInput from '@/components/MkColorInput.vue';
-import { host } from '@/config.js';
+import { host } from '@@/js/config.js';
const iconUrl = ref
(null);
const app192IconUrl = ref(null);
diff --git a/packages/frontend/src/pages/admin/external-services.vue b/packages/frontend/src/pages/admin/external-services.vue
index e0b82eb02ea0..91f41166e990 100644
--- a/packages/frontend/src/pages/admin/external-services.vue
+++ b/packages/frontend/src/pages/admin/external-services.vue
@@ -8,7 +8,7 @@ SPDX-License-Identifier: AGPL-3.0-only
-
+
DeepL Translation
@@ -19,17 +19,11 @@ SPDX-License-Identifier: AGPL-3.0-only
Pro account
+ Save
-
+
-
-
-
- {{ i18n.ts.save }}
-
-
-
@@ -40,12 +34,12 @@ import MkInput from '@/components/MkInput.vue';
import MkButton from '@/components/MkButton.vue';
import MkSwitch from '@/components/MkSwitch.vue';
import FormSuspense from '@/components/form/suspense.vue';
-import FormSection from '@/components/form/section.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';
+import MkFolder from '@/components/MkFolder.vue';
const deeplAuthKey = ref('');
const deeplIsPro = ref(false);
@@ -56,7 +50,7 @@ async function init() {
deeplIsPro.value = meta.deeplIsPro;
}
-function save() {
+function save_deepl() {
os.apiWithDialog('admin/update-meta', {
deeplAuthKey: deeplAuthKey.value,
deeplIsPro: deeplIsPro.value,
@@ -74,10 +68,3 @@ definePageMetadata(() => ({
icon: 'ti ti-link',
}));
-
-
diff --git a/packages/frontend/src/pages/admin/index.vue b/packages/frontend/src/pages/admin/index.vue
index 40dec55deb75..db87bd996d00 100644
--- a/packages/frontend/src/pages/admin/index.vue
+++ b/packages/frontend/src/pages/admin/index.vue
@@ -199,16 +199,6 @@ const menuDef = computed(() => [{
text: i18n.ts.relays,
to: '/admin/relays',
active: currentPage.value?.route.name === 'relays',
- }, {
- icon: 'ti ti-ban',
- text: i18n.ts.instanceBlocking,
- to: '/admin/instance-block',
- active: currentPage.value?.route.name === 'instance-block',
- }, {
- icon: 'ti ti-ghost',
- text: i18n.ts.proxyAccount,
- to: '/admin/proxy-account',
- active: currentPage.value?.route.name === 'proxy-account',
}, {
icon: 'ti ti-link',
text: i18n.ts.externalServices,
@@ -220,10 +210,10 @@ const menuDef = computed(() => [{
to: '/admin/system-webhook',
active: currentPage.value?.route.name === 'system-webhook',
}, {
- icon: 'ti ti-adjustments',
- text: i18n.ts.other,
- to: '/admin/other-settings',
- active: currentPage.value?.route.name === 'other-settings',
+ icon: 'ti ti-bolt',
+ text: i18n.ts.performance,
+ to: '/admin/performance',
+ active: currentPage.value?.route.name === 'performance',
}],
}, {
title: i18n.ts.info,
diff --git a/packages/frontend/src/pages/admin/instance-block.vue b/packages/frontend/src/pages/admin/instance-block.vue
deleted file mode 100644
index e090616b26a2..000000000000
--- a/packages/frontend/src/pages/admin/instance-block.vue
+++ /dev/null
@@ -1,84 +0,0 @@
-
-
-
-
-
-
-
-
-
- {{ i18n.ts.blockedInstances }}
- {{ i18n.ts.blockedInstancesDescription }}
-
-
-
-
- {{ i18n.ts.silencedInstances }}
- {{ i18n.ts.silencedInstancesDescription }}
-
-
- {{ i18n.ts.mediaSilencedInstances }}
- {{ i18n.ts.mediaSilencedInstancesDescription }}
-
-
- {{ i18n.ts.save }}
-
-
-
-
-
-
diff --git a/packages/frontend/src/pages/admin/moderation.vue b/packages/frontend/src/pages/admin/moderation.vue
index a75799696d8f..54eb95cd51d1 100644
--- a/packages/frontend/src/pages/admin/moderation.vue
+++ b/packages/frontend/src/pages/admin/moderation.vue
@@ -10,61 +10,102 @@ SPDX-License-Identifier: AGPL-3.0-only
-
+
{{ i18n.ts.enableRegistration }}
-
+
{{ i18n.ts.emailRequiredForSignup }}
{{ i18n.ts.serverRules }}
-
-
- {{ i18n.ts.tosUrl }}
-
-
-
-
- {{ i18n.ts.privacyPolicyUrl }}
-
-
-
-
- {{ i18n.ts._serverSettings.inquiryUrl }}
- {{ i18n.ts._serverSettings.inquiryUrlDescription }}
-
-
-
+
+
{{ i18n.ts.preservedUsernames }}
- {{ i18n.ts.preservedUsernamesDescription }}
-
-
+
+
+ {{ i18n.ts.preservedUsernamesDescription }}
+
+ {{ i18n.ts.save }}
+
+
+
+
+
{{ i18n.ts.sensitiveWords }}
- {{ i18n.ts.sensitiveWordsDescription }}
{{ i18n.ts.sensitiveWordsDescription2 }}
-
-
+
+
+ {{ i18n.ts.sensitiveWordsDescription }}
{{ i18n.ts.sensitiveWordsDescription2 }}
+
+ {{ i18n.ts.save }}
+
+
+
+
+
{{ i18n.ts.prohibitedWords }}
- {{ i18n.ts.prohibitedWordsDescription }}
{{ i18n.ts.prohibitedWordsDescription2 }}
-
-
+
+
+ {{ i18n.ts.prohibitedWordsDescription }}
{{ i18n.ts.prohibitedWordsDescription2 }}
+
+ {{ i18n.ts.save }}
+
+
+
+
+
{{ i18n.ts.hiddenTags }}
- {{ i18n.ts.hiddenTagsDescription }}
-
+
+
+
+ {{ i18n.ts.hiddenTagsDescription }}
+
+ {{ i18n.ts.save }}
+
+
+
+
+
+ {{ i18n.ts.silencedInstances }}
+
+
+
+ {{ i18n.ts.silencedInstancesDescription }}
+
+ {{ i18n.ts.save }}
+
+
+
+
+
+ {{ i18n.ts.mediaSilencedInstances }}
+
+
+
+ {{ i18n.ts.mediaSilencedInstancesDescription }}
+
+ {{ i18n.ts.save }}
+
+
+
+
+
+ {{ i18n.ts.blockedInstances }}
+
+
+
+ {{ i18n.ts.blockedInstancesDescription }}
+
+ {{ i18n.ts.save }}
+
+
-
-
-
- {{ i18n.ts.save }}
-
-
-
@@ -83,6 +124,7 @@ import { i18n } from '@/i18n.js';
import { definePageMetadata } from '@/scripts/page-metadata.js';
import MkButton from '@/components/MkButton.vue';
import FormLink from '@/components/form/link.vue';
+import MkFolder from '@/components/MkFolder.vue';
const enableRegistration = ref