diff --git a/CHANGELOG.md b/CHANGELOG.md index a1fb4fe48c..42fbf8a17a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -8,6 +8,7 @@ - アクセシビリティ設定からオフにすることもできます - Enhance: タイムラインのパフォーマンスを向上 - Fix: 一部のブラウザでアコーディオンメニューのアニメーションが動作しない問題を修正 +- Fix: ダイアログのお知らせが画面からはみ出ることがある問題を修正 ### Server - Enhance: 凍結されたユーザのノートが各種タイムラインで表示されないように `#15775` diff --git a/locales/index.d.ts b/locales/index.d.ts index 88fdb3d5d0..c07e564dd7 100644 --- a/locales/index.d.ts +++ b/locales/index.d.ts @@ -5413,6 +5413,10 @@ export interface Locale extends ILocale { * フォルダを作って整理することもできます。 */ "driveAboutTip": string; + /** + * スクロールして閉じる + */ + "scrollToClose": string; /** * リアルタイムモード */ diff --git a/locales/ja-JP.yml b/locales/ja-JP.yml index e0fde01309..0e338c091e 100644 --- a/locales/ja-JP.yml +++ b/locales/ja-JP.yml @@ -1348,6 +1348,7 @@ readonly: "読み取り専用" goToDeck: "デッキへ戻る" federationJobs: "連合ジョブ" driveAboutTip: "ドライブでは、過去にアップロードしたファイルの一覧が表示されます。
\nノートに添付する際に再利用したり、あとで投稿するファイルを予めアップロードしておくこともできます。
\nファイルを削除すると、今までそのファイルを使用した全ての場所(ノート、ページ、アバター、バナー等)からも見えなくなるので注意してください。
\nフォルダを作って整理することもできます。" +scrollToClose: "スクロールして閉じる" realtimeMode: "リアルタイムモード" turnItOn: "オンにする" turnItOff: "オフにする" diff --git a/packages/frontend-embed/package.json b/packages/frontend-embed/package.json index 6a2d6afb38..19193e20fd 100644 --- a/packages/frontend-embed/package.json +++ b/packages/frontend-embed/package.json @@ -34,7 +34,7 @@ "tsconfig-paths": "4.2.0", "typescript": "5.8.3", "uuid": "11.1.0", - "vite": "6.3.3", + "vite": "6.3.4", "vue": "3.5.13" }, "devDependencies": { diff --git a/packages/frontend/package.json b/packages/frontend/package.json index 02f050467f..ad2a72f7fd 100644 --- a/packages/frontend/package.json +++ b/packages/frontend/package.json @@ -74,7 +74,7 @@ "typescript": "5.8.3", "uuid": "11.1.0", "v-code-diff": "1.13.1", - "vite": "6.3.3", + "vite": "6.3.4", "vue": "3.5.13", "vuedraggable": "next", "wanakana": "5.3.1" diff --git a/packages/frontend/src/components/MkAnnouncementDialog.vue b/packages/frontend/src/components/MkAnnouncementDialog.vue index 6e5b29654b..81c92bfb5c 100644 --- a/packages/frontend/src/components/MkAnnouncementDialog.vue +++ b/packages/frontend/src/components/MkAnnouncementDialog.vue @@ -4,7 +4,7 @@ SPDX-License-Identifier: AGPL-3.0-only --> @@ -80,9 +115,12 @@ onMounted(() => { .root { margin: auto; position: relative; - padding: 32px; + padding: 32px 32px 0; min-width: 320px; max-width: 480px; + max-height: 100%; + overflow-y: auto; + overflow-x: hidden; box-sizing: border-box; background: var(--MI_THEME-panel); border-radius: var(--MI-radius); @@ -103,4 +141,14 @@ onMounted(() => { .text { margin: 1em 0; } + +.footer { + position: sticky; + bottom: 0; + left: -32px; + backdrop-filter: var(--MI-blur, blur(15px)); + background: color(from var(--MI_THEME-bg) srgb r g b / 0.5); + margin: 0 -32px; + padding: 24px 32px; +} diff --git a/packages/frontend/src/components/MkPullToRefresh.vue b/packages/frontend/src/components/MkPullToRefresh.vue index 7b5335aa74..b0638db785 100644 --- a/packages/frontend/src/components/MkPullToRefresh.vue +++ b/packages/frontend/src/components/MkPullToRefresh.vue @@ -76,8 +76,8 @@ function unlockDownScroll() { scrollEl.style.overscrollBehavior = 'contain'; } -function moveStart(event: PointerEvent) { - if (event.pointerType === 'mouse' && event.button !== 1) return; +function moveStartByMouse(event: MouseEvent) { + if (event.button !== 1) return; if (isRefreshing.value) return; const scrollPos = scrollEl!.scrollTop; @@ -88,27 +88,39 @@ function moveStart(event: PointerEvent) { lockDownScroll(); - // マウスでのpull時、画面上のテキスト選択が発生したり、ブラウザの中クリックによる挙動が競合したりして画面がスクロールされたりするのを防ぐ - window.document.body.setAttribute('inert', 'true'); + event.preventDefault(); // 中クリックによるスクロール、テキスト選択などを防ぐ isPulling.value = true; startScreenY = getScreenY(event); pullDistance.value = 0; - // タッチデバイスでPointerEventを使うとなんか挙動がおかしいので、TouchEventとMouseEventを使い分ける - if (event.pointerType === 'mouse') { - window.addEventListener('mousemove', moving, { passive: true }); - window.addEventListener('mouseup', () => { - window.removeEventListener('mousemove', moving); - onPullRelease(); - }, { passive: true, once: true }); - } else { - window.addEventListener('touchmove', moving, { passive: true }); - window.addEventListener('touchend', () => { - window.removeEventListener('touchmove', moving); - onPullRelease(); - }, { passive: true, once: true }); + window.addEventListener('mousemove', moving, { passive: true }); + window.addEventListener('mouseup', () => { + window.removeEventListener('mousemove', moving); + onPullRelease(); + }, { passive: true, once: true }); +} + +function moveStartByTouch(event: TouchEvent) { + if (isRefreshing.value) return; + + const scrollPos = scrollEl!.scrollTop; + if (scrollPos !== 0) { + unlockDownScroll(); + return; } + + lockDownScroll(); + + isPulling.value = true; + startScreenY = getScreenY(event); + pullDistance.value = 0; + + window.addEventListener('touchmove', moving, { passive: true }); + window.addEventListener('touchend', () => { + window.removeEventListener('touchmove', moving); + onPullRelease(); + }, { passive: true, once: true }); } function moveBySystem(to: number): Promise { @@ -148,7 +160,6 @@ async function closeContent() { } function onPullRelease() { - window.document.body.removeAttribute('inert'); startScreenY = null; if (isPulledEnough.value) { isPulledEnough.value = false; @@ -208,13 +219,15 @@ onMounted(() => { if (rootEl.value == null) return; scrollEl = getScrollContainer(rootEl.value); lockDownScroll(); - rootEl.value.addEventListener('pointerdown', moveStart, { passive: true }); + rootEl.value.addEventListener('mousedown', moveStartByMouse, { passive: false }); // preventDefaultするため + rootEl.value.addEventListener('touchstart', moveStartByTouch, { passive: true }); rootEl.value.addEventListener('touchend', toggleScrollLockOnTouchEnd, { passive: true }); }); onUnmounted(() => { unlockDownScroll(); - if (rootEl.value) rootEl.value.removeEventListener('pointerdown', moveStart); + if (rootEl.value) rootEl.value.removeEventListener('mousedown', moveStartByMouse); + if (rootEl.value) rootEl.value.removeEventListener('touchstart', moveStartByTouch); if (rootEl.value) rootEl.value.removeEventListener('touchend', toggleScrollLockOnTouchEnd); }); diff --git a/packages/frontend/src/pages/admin/modlog.vue b/packages/frontend/src/pages/admin/modlog.vue index 3701e69fc6..7a40c978b5 100644 --- a/packages/frontend/src/pages/admin/modlog.vue +++ b/packages/frontend/src/pages/admin/modlog.vue @@ -21,7 +21,7 @@ SPDX-License-Identifier: AGPL-3.0-only