diff --git a/packages/frontend/src/components/MkPageWindow.vue b/packages/frontend/src/components/MkPageWindow.vue index 67b3165ade..8a1a9c58d2 100644 --- a/packages/frontend/src/components/MkPageWindow.vue +++ b/packages/frontend/src/components/MkPageWindow.vue @@ -22,8 +22,9 @@ SPDX-License-Identifier: AGPL-3.0-only -
- +
+ +
@@ -31,13 +32,11 @@ SPDX-License-Identifier: AGPL-3.0-only diff --git a/packages/frontend/src/components/global/RouterView.vue b/packages/frontend/src/components/global/RouterView.vue index 25a29a4ae7..b01e355c5e 100644 --- a/packages/frontend/src/components/global/RouterView.vue +++ b/packages/frontend/src/components/global/RouterView.vue @@ -4,18 +4,20 @@ SPDX-License-Identifier: AGPL-3.0-only --> + + diff --git a/packages/frontend/src/components/index.ts b/packages/frontend/src/components/index.ts index 66ac871f7d..c28c457e33 100644 --- a/packages/frontend/src/components/index.ts +++ b/packages/frontend/src/components/index.ts @@ -16,6 +16,8 @@ import MkTime from './global/MkTime.vue'; import MkUrl from './global/MkUrl.vue'; import I18n from './global/I18n.vue'; import RouterView from './global/RouterView.vue'; +import NestedRouterView from './global/NestedRouterView.vue'; +import StackingRouterView from './global/StackingRouterView.vue'; import MkLoading from './global/MkLoading.vue'; import MkError from './global/MkError.vue'; import MkAd from './global/MkAd.vue'; @@ -38,6 +40,8 @@ export default function(app: App) { export const components = { I18n: I18n, RouterView: RouterView, + NestedRouterView: NestedRouterView, + StackingRouterView: StackingRouterView, Mfm: Mfm, MkA: MkA, MkAcct: MkAcct, @@ -65,6 +69,8 @@ declare module '@vue/runtime-core' { export interface GlobalComponents { I18n: typeof I18n; RouterView: typeof RouterView; + NestedRouterView: typeof NestedRouterView; + StackingRouterView: typeof StackingRouterView; Mfm: typeof Mfm; MkA: typeof MkA; MkAcct: typeof MkAcct; diff --git a/packages/frontend/src/di.ts b/packages/frontend/src/di.ts index 192242984c..2afe35550d 100644 --- a/packages/frontend/src/di.ts +++ b/packages/frontend/src/di.ts @@ -10,4 +10,5 @@ export const DI = { routerCurrentDepth: Symbol() as InjectionKey, router: Symbol() as InjectionKey, mock: Symbol() as InjectionKey, + pageMetadata: Symbol() as InjectionKey>>, }; diff --git a/packages/frontend/src/page.ts b/packages/frontend/src/page.ts index f3ec09a16f..0107f17be4 100644 --- a/packages/frontend/src/page.ts +++ b/packages/frontend/src/page.ts @@ -5,6 +5,7 @@ import * as Misskey from 'misskey-js'; import { inject, isRef, onActivated, onBeforeUnmount, provide, ref, toValue, watch } from 'vue'; +import { DI } from './di.js'; import type { MaybeRefOrGetter, Ref } from 'vue'; export type PageMetadata = { @@ -31,9 +32,6 @@ const METADATA_KEY = Symbol('MetadataKey'); const setMetadata = (v: Ref): void => { provide>(METADATA_KEY, v); }; -const getMetadata = (): Ref | undefined => { - return inject>(METADATA_KEY); -}; export const definePage = (maybeRefOrGetterMetadata: MaybeRefOrGetter): void => { const metadataRef = ref(toValue(maybeRefOrGetterMetadata)); @@ -55,6 +53,8 @@ export const definePage = (maybeRefOrGetterMetadata: MaybeRefOrGetter { receiver?.(metadataGetter); }); + + provide(DI.pageMetadata, metadataRef); }; export const provideMetadataReceiver = (receiver: PageMetadataReceiver): void => { @@ -64,8 +64,3 @@ export const provideMetadataReceiver = (receiver: PageMetadataReceiver): void => export const provideReactiveMetadata = (metadataRef: Ref): void => { setMetadata(metadataRef); }; - -export const injectReactiveMetadata = (): Ref => { - const metadataRef = getMetadata(); - return isRef(metadataRef) ? metadataRef : ref(null); -}; diff --git a/packages/frontend/src/pages/admin/_header_.vue b/packages/frontend/src/pages/admin/_header_.vue index 1382cad9a4..f073a4af7e 100644 --- a/packages/frontend/src/pages/admin/_header_.vue +++ b/packages/frontend/src/pages/admin/_header_.vue @@ -33,13 +33,13 @@ SPDX-License-Identifier: AGPL-3.0-only - - diff --git a/packages/frontend/src/preferences/def.ts b/packages/frontend/src/preferences/def.ts index 9ad604ae72..dd1e39ab06 100644 --- a/packages/frontend/src/preferences/def.ts +++ b/packages/frontend/src/preferences/def.ts @@ -367,4 +367,8 @@ export const PREF_DEF = { sfxVolume: 1, }, }, + + 'experimental.stackingRouterView': { + default: false, + }, } satisfies PreferencesDefinition; diff --git a/packages/frontend/src/style.scss b/packages/frontend/src/style.scss index c449b0e956..7251674f28 100644 --- a/packages/frontend/src/style.scss +++ b/packages/frontend/src/style.scss @@ -170,6 +170,20 @@ rt { text-align: center; } +._pageContainer { + container-type: size; + contain: strict; + overflow: auto; + overscroll-behavior: contain; +} + +._pageScrollable { + height: 100%; + overflow: auto; + overflow-y: scroll; + overscroll-behavior: contain; +} + ._indicatorCircle { display: inline-block; width: 1em; diff --git a/packages/frontend/src/ui/deck/column.vue b/packages/frontend/src/ui/deck/column.vue index 7fdf75c026..3358b4e52b 100644 --- a/packages/frontend/src/ui/deck/column.vue +++ b/packages/frontend/src/ui/deck/column.vue @@ -358,7 +358,6 @@ function onDrop(ev) { > .body { background: var(--MI_THEME-bg) !important; - overflow-y: scroll !important; scrollbar-color: var(--MI_THEME-scrollbarHandle) transparent; &::-webkit-scrollbar-track { diff --git a/packages/frontend/src/ui/deck/main-column.vue b/packages/frontend/src/ui/deck/main-column.vue index 1ba01a4c8d..b4d494fb09 100644 --- a/packages/frontend/src/ui/deck/main-column.vue +++ b/packages/frontend/src/ui/deck/main-column.vue @@ -12,15 +12,15 @@ SPDX-License-Identifier: AGPL-3.0-only -
- +
+ +
diff --git a/packages/frontend/src/ui/minimum.vue b/packages/frontend/src/ui/minimum.vue index 95d564f5a3..7b58829ff5 100644 --- a/packages/frontend/src/ui/minimum.vue +++ b/packages/frontend/src/ui/minimum.vue @@ -5,7 +5,7 @@ SPDX-License-Identifier: AGPL-3.0-only