@@ -63,8 +76,10 @@ import { deviceKind } from '@/scripts/device-kind';
import MkNotes from '@/components/MkNotes.vue';
import { url } from '@/config';
import MkButton from '@/components/MkButton.vue';
+import MkInput from '@/components/MkInput.vue';
import { defaultStore } from '@/store';
import MkNote from '@/components/MkNote.vue';
+import MkInfo from '@/components/MkInfo.vue';
import MkFoldableSection from '@/components/MkFoldableSection.vue';
const router = useRouter();
@@ -76,6 +91,8 @@ const props = defineProps<{
let tab = $ref('timeline');
let channel = $ref(null);
let favorited = $ref(false);
+let searchQuery = $ref('');
+let searchPagination = $ref();
const featuredPagination = $computed(() => ({
endpoint: 'notes/featured' as const,
limit: 10,
@@ -123,6 +140,21 @@ async function unfavorite() {
});
}
+async function search() {
+ const query = searchQuery.toString().trim();
+
+ if (query == null) return;
+
+ searchPagination = {
+ endpoint: 'notes/search',
+ limit: 10,
+ params: {
+ query: searchQuery,
+ channelId: channel.id,
+ },
+ };
+}
+
const headerActions = $computed(() => {
if (channel && channel.userId) {
const share = {
@@ -160,6 +192,10 @@ const headerTabs = $computed(() => [{
key: 'featured',
title: i18n.ts.featured,
icon: 'ti ti-bolt',
+}, {
+ key: 'search',
+ title: i18n.ts.search,
+ icon: 'ti ti-search',
}]);
definePageMetadata(computed(() => channel ? {
@@ -170,7 +206,7 @@ definePageMetadata(computed(() => channel ? {
diff --git a/packages/frontend/src/pages/settings/account-info.vue b/packages/frontend/src/pages/settings/account-stats.vue
similarity index 94%
rename from packages/frontend/src/pages/settings/account-info.vue
rename to packages/frontend/src/pages/settings/account-stats.vue
index 584808b0b4cd..a0f1541b4016 100644
--- a/packages/frontend/src/pages/settings/account-info.vue
+++ b/packages/frontend/src/pages/settings/account-stats.vue
@@ -1,18 +1,6 @@
-
- ID
- {{ $i.id }}
-
-
-
-
- {{ i18n.ts.registeredDate }}
-
-
-
-
-
+
{{ i18n.ts.statistics }}
{{ i18n.ts.notesCount }}
diff --git a/packages/frontend/src/pages/settings/delete-account.vue b/packages/frontend/src/pages/settings/delete-account.vue
deleted file mode 100644
index c6e79165c5ae..000000000000
--- a/packages/frontend/src/pages/settings/delete-account.vue
+++ /dev/null
@@ -1,52 +0,0 @@
-
-
- {{ i18n.ts._accountDelete.mayTakeTime }}
- {{ i18n.ts._accountDelete.sendEmail }}
- {{ i18n.ts._accountDelete.requestAccountDelete }}
- {{ i18n.ts._accountDelete.inProgress }}
-
-
-
-
diff --git a/packages/frontend/src/pages/settings/drive.vue b/packages/frontend/src/pages/settings/drive.vue
index d3fb422e01d4..73c2b2e6040e 100644
--- a/packages/frontend/src/pages/settings/drive.vue
+++ b/packages/frontend/src/pages/settings/drive.vue
@@ -119,6 +119,13 @@ function saveProfile() {
os.api('i/update', {
alwaysMarkNsfw: !!alwaysMarkNsfw,
autoSensitive: !!autoSensitive,
+ }).catch(err => {
+ os.alert({
+ type: 'error',
+ title: i18n.ts.error,
+ text: err.message,
+ });
+ alwaysMarkNsfw = true;
});
}
diff --git a/packages/frontend/src/pages/settings/general.vue b/packages/frontend/src/pages/settings/general.vue
index 904fd3f95291..ba0f3274fc82 100644
--- a/packages/frontend/src/pages/settings/general.vue
+++ b/packages/frontend/src/pages/settings/general.vue
@@ -20,24 +20,71 @@
- {{ i18n.ts.showFixedPostForm }}
- {{ i18n.ts.showFixedPostFormInChannel }}
+
+
+ {{ i18n.ts.showFixedPostForm }}
+ {{ i18n.ts.showFixedPostFormInChannel }}
+
+
- {{ i18n.ts.behavior }}
+ {{ i18n.ts.displayOfNote }}
- {{ i18n.ts.openImageInNewTab }}
- {{ i18n.ts.enableInfiniteScroll }}
+ {{ i18n.ts.showNoteActionsOnlyHover }}
+ {{ i18n.ts.showClipButtonInNoteFooter }}
+ {{ i18n.ts.largeNoteReactions }}
+ {{ i18n.ts.collapseRenotes }}
+ {{ i18n.ts.enableAdvancedMfm }}
+ {{ i18n.ts.enableAnimatedMfm }}
+ {{ i18n.ts.showGapBetweenNotesInTimeline }}
+ {{ i18n.ts.loadRawImages }}
{{ i18n.ts.useReactionPickerForContextMenu }}
-
- {{ i18n.ts.whenServerDisconnected }}
-
-
-
+
+
+ {{ i18n.ts.instanceTicker }}
+
+
+
+
+
+ {{ i18n.ts.nsfw }}
+
+
+
+
+
+
+
+
+
+ {{ i18n.ts.notificationDisplay }}
+
+
+
+ {{ i18n.ts.position }}
+
+
+
+
+
+
+
+ {{ i18n.ts.stackAxis }}
+
+
+
@@ -46,22 +93,15 @@
- {{ i18n.ts.showNoteActionsOnlyHover }}
- {{ i18n.ts.showClipButtonInNoteFooter }}
- {{ i18n.ts.largeNoteReactions }}
- {{ i18n.ts.collapseRenotes }}
- {{ i18n.ts.enableAdvancedMfm }}
- {{ i18n.ts.enableAnimatedMfm }}
{{ i18n.ts.reduceUiAnimation }}
{{ i18n.ts.useBlurEffect }}
{{ i18n.ts.useBlurEffectForModal }}
- {{ i18n.ts.showGapBetweenNotesInTimeline }}
- {{ i18n.ts.loadRawImages }}
{{ i18n.ts.disableShowingAnimatedImages }}
{{ i18n.ts.squareAvatars }}
{{ i18n.ts.useSystemFont }}
{{ i18n.ts.disableDrawer }}
{{ i18n.ts.forceShowAds }}
+ {{ i18n.ts.dataSaver }}
@@ -84,27 +124,29 @@
- {{ i18n.ts.aiChanMode }}
-
-
-
- {{ i18n.ts.instanceTicker }}
-
-
-
-
+ {{ i18n.ts.behavior }}
-
- {{ i18n.ts.nsfw }}
-
-
-
-
+
+
+ {{ i18n.ts.openImageInNewTab }}
+ {{ i18n.ts.enableInfiniteScroll }}
+
+
+ {{ i18n.ts.whenServerDisconnected }}
+
+
+
+
+
+ {{ i18n.ts.numberOfPageCache }}
+ {{ i18n.ts.numberOfPageCacheDescription }}
+
+
+
-
- {{ i18n.ts.numberOfPageCache }}
- {{ i18n.ts.numberOfPageCacheDescription }}
-
+
+ {{ i18n.ts.aiChanMode }}
+
{{ i18n.ts.deck }}
@@ -160,6 +202,7 @@ const disableDrawer = computed(defaultStore.makeGetterSetter('disableDrawer'));
const disableShowingAnimatedImages = computed(defaultStore.makeGetterSetter('disableShowingAnimatedImages'));
const forceShowAds = computed(defaultStore.makeGetterSetter('forceShowAds'));
const loadRawImages = computed(defaultStore.makeGetterSetter('loadRawImages'));
+const enableDataSaverMode = computed(defaultStore.makeGetterSetter('enableDataSaverMode'));
const imageNewTab = computed(defaultStore.makeGetterSetter('imageNewTab'));
const nsfw = computed(defaultStore.makeGetterSetter('nsfw'));
const showFixedPostForm = computed(defaultStore.makeGetterSetter('showFixedPostForm'));
@@ -170,6 +213,9 @@ const enableInfiniteScroll = computed(defaultStore.makeGetterSetter('enableInfin
const useReactionPickerForContextMenu = computed(defaultStore.makeGetterSetter('useReactionPickerForContextMenu'));
const squareAvatars = computed(defaultStore.makeGetterSetter('squareAvatars'));
const aiChanMode = computed(defaultStore.makeGetterSetter('aiChanMode'));
+const mediaListWithOneImageAppearance = computed(defaultStore.makeGetterSetter('mediaListWithOneImageAppearance'));
+const notificationPosition = computed(defaultStore.makeGetterSetter('notificationPosition'));
+const notificationStackAxis = computed(defaultStore.makeGetterSetter('notificationStackAxis'));
watch(lang, () => {
miLocalStorage.setItem('lang', lang.value as string);
diff --git a/packages/frontend/src/pages/settings/import-export.vue b/packages/frontend/src/pages/settings/import-export.vue
index a8274f560139..89b4104020f2 100644
--- a/packages/frontend/src/pages/settings/import-export.vue
+++ b/packages/frontend/src/pages/settings/import-export.vue
@@ -32,7 +32,7 @@
{{ i18n.ts.export }}
-
+
{{ i18n.ts.import }}
{{ i18n.ts.import }}
@@ -47,7 +47,7 @@
{{ i18n.ts.export }}
-
+
{{ i18n.ts.import }}
{{ i18n.ts.import }}
@@ -62,7 +62,7 @@
{{ i18n.ts.export }}
-
+
{{ i18n.ts.import }}
{{ i18n.ts.import }}
@@ -77,13 +77,28 @@
{{ i18n.ts.export }}
-
+
{{ i18n.ts.import }}
{{ i18n.ts.import }}
+
+ {{ i18n.ts.antennas }}
+
+
+ {{ i18n.ts.export }}
+
+ {{ i18n.ts.export }}
+
+
+ {{ i18n.ts.import }}
+
+ {{ i18n.ts.import }}
+
+
+
@@ -97,6 +112,7 @@ import * as os from '@/os';
import { selectFile } from '@/scripts/select-file';
import { i18n } from '@/i18n';
import { definePageMetadata } from '@/scripts/page-metadata';
+import { $i } from '@/account';
const excludeMutingUsers = ref(false);
const excludeInactiveUsers = ref(false);
@@ -150,6 +166,10 @@ const exportMuting = () => {
os.api('i/export-mute', {}).then(onExportSuccess).catch(onError);
};
+const exportAntennas = () => {
+ os.api('i/export-antennas', {}).then(onExportSuccess).catch(onError);
+};
+
const importFollowing = async (ev) => {
const file = await selectFile(ev.currentTarget ?? ev.target);
os.api('i/import-following', { fileId: file.id }).then(onImportSuccess).catch(onError);
@@ -170,6 +190,11 @@ const importBlocking = async (ev) => {
os.api('i/import-blocking', { fileId: file.id }).then(onImportSuccess).catch(onError);
};
+const importAntennas = async (ev) => {
+ const file = await selectFile(ev.currentTarget ?? ev.target);
+ os.api('i/import-antennas', { fileId: file.id }).then(onImportSuccess).catch(onError);
+};
+
const headerActions = $computed(() => []);
const headerTabs = $computed(() => []);
diff --git a/packages/frontend/src/pages/settings/index.vue b/packages/frontend/src/pages/settings/index.vue
index 17af7417fda4..34a962ef4cf8 100644
--- a/packages/frontend/src/pages/settings/index.vue
+++ b/packages/frontend/src/pages/settings/index.vue
@@ -164,12 +164,12 @@ const menuDef = computed(() => [{
text: i18n.ts.importAndExport,
to: '/settings/import-export',
active: currentPage?.route.name === 'import-export',
- }, /*{
+ }, {
icon: 'ti ti-plane',
- text: i18n.ts.accountMigration,
+ text: `${i18n.ts.accountMigration} (${i18n.ts.experimental})`,
to: '/settings/migration',
active: currentPage?.route.name === 'migration',
- },*/ {
+ }, {
icon: 'ti ti-dots',
text: i18n.ts.other,
to: '/settings/other',
diff --git a/packages/frontend/src/pages/settings/migration.vue b/packages/frontend/src/pages/settings/migration.vue
index 2ef8af7481d1..541992875e5b 100644
--- a/packages/frontend/src/pages/settings/migration.vue
+++ b/packages/frontend/src/pages/settings/migration.vue
@@ -1,63 +1,121 @@
-
+
+ {{ i18n.ts.thisIsExperimentalFeature }}
+
+
+
+ {{ i18n.ts._accountMigration.moveFrom }}
+ {{ i18n.ts._accountMigration.moveFromSub }}
+
+
+
+ {{ i18n.ts._accountMigration.moveFromDescription }}
+
+
+ {{ i18n.ts.add }}
+ {{ i18n.ts.save }}
+
+
+
+
+ {{ i18n.t('_accountMigration.moveFromLabel', { n: i + 1 }) }}
+
+
+
+
+
+
+
{{ i18n.ts._accountMigration.moveTo }}
-
-
- {{ i18n.ts._accountMigration.moveToLabel }}
-
-
-
{{ i18n.ts._accountMigration.moveAccountDescription }}
-
- {{ i18n.ts._accountMigration.moveFrom }}
-
-
- {{ i18n.ts._accountMigration.moveFromLabel }}
-
-
-
{{ i18n.ts._accountMigration.moveFromDescription }}
+
+
{{ i18n.ts._accountMigration.moveAccountDescription }}
+
+
+ {{ i18n.ts._accountMigration.moveAccountHowTo }}
+ {{ i18n.ts._accountMigration.moveCannotBeUndone }}
+
+
+
+ {{ i18n.ts._accountMigration.moveToLabel }}
+
+
+ {{ i18n.ts._accountMigration.startMigration }}
+
+
+
+ {{ i18n.ts._accountMigration.postMigrationNote }}
+ {{ i18n.ts._accountMigration.movedAndCannotBeUndone }}
+ {{ i18n.ts._accountMigration.movedTo }}
+
+
+
+
diff --git a/packages/frontend/src/pages/timeline.vue b/packages/frontend/src/pages/timeline.vue
index 9f13f7a1dd33..1bf4cdc99ae4 100644
--- a/packages/frontend/src/pages/timeline.vue
+++ b/packages/frontend/src/pages/timeline.vue
@@ -3,7 +3,7 @@
-
+
diff --git a/packages/frontend/src/pages/user/home.vue b/packages/frontend/src/pages/user/home.vue
index 8c3478d8f226..9c133346d544 100644
--- a/packages/frontend/src/pages/user/home.vue
+++ b/packages/frontend/src/pages/user/home.vue
@@ -7,7 +7,7 @@
-
+
@@ -21,6 +21,9 @@
+
{{ i18n.ts.followsYou }}
@@ -45,6 +48,25 @@
{{ role.name }}
+
+
+ Moderation note
+
+
+ Add moderation note
+
+
+
@@ -113,15 +135,17 @@
diff --git a/packages/frontend/src/pages/welcome.entrance.c.vue b/packages/frontend/src/pages/welcome.entrance.c.vue
deleted file mode 100644
index eca4e5764dd5..000000000000
--- a/packages/frontend/src/pages/welcome.entrance.c.vue
+++ /dev/null
@@ -1,308 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-

-
-
-
-
-
-
-
-
-
-
diff --git a/packages/frontend/src/pages/welcome.setup.vue b/packages/frontend/src/pages/welcome.setup.vue
index 212d156a8349..7728d97a6554 100644
--- a/packages/frontend/src/pages/welcome.setup.vue
+++ b/packages/frontend/src/pages/welcome.setup.vue
@@ -1,8 +1,11 @@
-