From 77f9d201005b0866cd174432a9b7445ddafcb53c Mon Sep 17 00:00:00 2001 From: Titus Kirch Date: Mon, 14 Sep 2026 23:37:39 +0200 Subject: [PATCH 1/5] fix(image): cover the whole viewport from the zoom dialog's first frame The darkening and blur sat on the dialog content, which scales in from 95%, so the page's text showed unblurred along the edges until the animation ended. They now live on the overlay, which only fades. --- app/components/content/ProseImg.vue | 11 +++++++++-- app/components/ui/dialog/DialogContent.vue | 11 +++++++++-- 2 files changed, 18 insertions(+), 4 deletions(-) diff --git a/app/components/content/ProseImg.vue b/app/components/content/ProseImg.vue index fa645fe7..1aacf5c4 100644 --- a/app/components/content/ProseImg.vue +++ b/app/components/content/ProseImg.vue @@ -525,11 +525,18 @@ if (import.meta.server && import.meta.prerender) { + separates the picture from the page, not a border. + + THE DARKENING AND THE BLUR BELONG TO THE OVERLAY, not to this box. + The content scales in from 95%, so a surface painted here reached + the viewport's edges only once that animation ended — and for 200ms + the page's text showed unblurred along the bottom. The overlay only + fades, so it covers the whole screen from the first frame. --> diff --git a/app/components/ui/dialog/DialogContent.vue b/app/components/ui/dialog/DialogContent.vue index c0f7f0c1..53ec7635 100644 --- a/app/components/ui/dialog/DialogContent.vue +++ b/app/components/ui/dialog/DialogContent.vue @@ -19,6 +19,8 @@ const props = withDefaults( defineProps< DialogContentProps & { class?: HTMLAttributes['class']; + /** Classes for the backdrop, which does not scale in with the content. */ + overlayClass?: HTMLAttributes['class']; showCloseButton?: boolean; } >(), @@ -28,14 +30,19 @@ const props = withDefaults( ); const emits = defineEmits(); -const delegatedProps = reactiveOmit(props, 'class', 'showCloseButton'); +const delegatedProps = reactiveOmit( + props, + 'class', + 'overlayClass', + 'showCloseButton' +); const forwarded = useForwardPropsEmits(delegatedProps, emits);