diff --git a/CHANGELOG.md b/CHANGELOG.md
index f49a4335b1..21ce5932b1 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -32,6 +32,7 @@
- チャットなど、一部の機能は引き続き設定に関わらずWebsocket接続が行われます
- Feat: 絵文字をミュート可能にする機能
- 絵文字(ユニコードの絵文字・カスタム絵文字)毎にミュートし、不可視化することができるようになりました
+- Feat: モバイルデバイスで折りたたまれたUIの展開表示に全画面ページを使用できるように(実験的)
- Enhance: メモリ使用量を軽減しました
- Enhance: 画像の高品質なプレースホルダを無効化してパフォーマンスを向上させるオプションを追加
- Enhance: 招待されているが参加していないルームを開いたときに、招待を承認するかどうか尋ねるように
diff --git a/packages/frontend/src/components/MkFolder.vue b/packages/frontend/src/components/MkFolder.vue
index e86861c874..9f5bc8da6c 100644
--- a/packages/frontend/src/components/MkFolder.vue
+++ b/packages/frontend/src/components/MkFolder.vue
@@ -19,13 +19,42 @@ SPDX-License-Identifier: AGPL-3.0-only
-
+
+
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
(), {
defaultOpen: false,
maxHeight: null,
withSpacer: true,
spacerMin: 14,
spacerMax: 22,
+ canPage: true,
});
const rootEl = useTemplateRef('rootEl');
+const asPage = props.canPage && deviceKind === 'smartphone' && prefer.s['experimental.enableFolderPageView'];
const bgSame = ref(false);
-const opened = ref(props.defaultOpen);
-const openedAtLeastOnce = ref(props.defaultOpen);
+const opened = ref(asPage ? false : props.defaultOpen);
+const openedAtLeastOnce = ref(opened.value);
//#region interpolate-sizeに対応していないブラウザ向け(TODO: 主要ブラウザが対応したら消す)
function enter(el: Element) {
@@ -126,7 +161,22 @@ function afterLeave(el: Element) {
}
//#endregion
-function toggle() {
+let pageId = pageFolderTeleportCount.value;
+pageFolderTeleportCount.value += 1000;
+
+async function toggle() {
+ if (asPage && !opened.value) {
+ pageId++;
+ const { dispose } = await popup(MkFolderPage, {
+ pageId,
+ }, {
+ closed: () => {
+ opened.value = false;
+ dispose();
+ },
+ });
+ }
+
if (!opened.value) {
openedAtLeastOnce.value = true;
}
diff --git a/packages/frontend/src/components/MkFolderPage.vue b/packages/frontend/src/components/MkFolderPage.vue
new file mode 100644
index 0000000000..6d9ee1af1d
--- /dev/null
+++ b/packages/frontend/src/components/MkFolderPage.vue
@@ -0,0 +1,157 @@
+
+
+
+
+
+
+
+
+
+
+
diff --git a/packages/frontend/src/os.ts b/packages/frontend/src/os.ts
index fea050e787..a513ae4902 100644
--- a/packages/frontend/src/os.ts
+++ b/packages/frontend/src/os.ts
@@ -790,3 +790,5 @@ export function launchUploader(
});
});
}
+
+export const pageFolderTeleportCount = ref(0);
diff --git a/packages/frontend/src/pages/settings/other.vue b/packages/frontend/src/pages/settings/other.vue
index 83a6aa167c..7b6ad5e56e 100644
--- a/packages/frontend/src/pages/settings/other.vue
+++ b/packages/frontend/src/pages/settings/other.vue
@@ -96,6 +96,9 @@ SPDX-License-Identifier: AGPL-3.0-only
Enable stacking router view
+
+ Enable folder page view
+
@@ -157,6 +160,7 @@ const enableCondensedLine = prefer.model('enableCondensedLine');
const skipNoteRender = prefer.model('skipNoteRender');
const devMode = prefer.model('devMode');
const stackingRouterView = prefer.model('experimental.stackingRouterView');
+const enableFolderPageView = prefer.model('experimental.enableFolderPageView');
watch(skipNoteRender, async () => {
await reloadAsk({ reason: i18n.ts.reloadToApplySetting, unison: true });
diff --git a/packages/frontend/src/preferences/def.ts b/packages/frontend/src/preferences/def.ts
index 7b0628e937..27402a8e6a 100644
--- a/packages/frontend/src/preferences/def.ts
+++ b/packages/frontend/src/preferences/def.ts
@@ -417,4 +417,7 @@ export const PREF_DEF = {
'experimental.stackingRouterView': {
default: false,
},
+ 'experimental.enableFolderPageView': {
+ default: false,
+ },
} satisfies PreferencesDefinition;