From bee40886e6ada71ec5ee908a8ce39403c913f02e Mon Sep 17 00:00:00 2001 From: VanRoove Date: Fri, 17 Jul 2026 15:36:28 -0700 Subject: [PATCH] fix: stop link preview flicker on hover within nested anchors --- .../BrowserEngine/Scripts/OraBrowserScripts.swift | 13 ++++++++----- .../Browser/Views/BrowserWebContentView.swift | 1 + 2 files changed, 9 insertions(+), 5 deletions(-) diff --git a/ora/Core/BrowserEngine/Scripts/OraBrowserScripts.swift b/ora/Core/BrowserEngine/Scripts/OraBrowserScripts.swift index 35b5690f..2bc9dc82 100644 --- a/ora/Core/BrowserEngine/Scripts/OraBrowserScripts.swift +++ b/ora/Core/BrowserEngine/Scripts/OraBrowserScripts.swift @@ -93,16 +93,19 @@ enum OraBrowserScripts { post('linkHover', url || ""); } + function currentAnchor(node) { + return node && node.closest ? node.closest('a[href]') : null; + } + function onMouseOver(event) { - const anchor = event.target.closest && event.target.closest('a[href]'); + const anchor = currentAnchor(event.target); postHover(anchor ? anchor.href : ''); } function onMouseOut(event) { - const related = event.relatedTarget; - if (!related || !event.currentTarget.contains(related)) { - postHover(""); - } + const from = currentAnchor(event.target); + const to = currentAnchor(event.relatedTarget); + if (from !== to) postHover(to ? to.href : ''); } document.addEventListener('mouseover', onMouseOver, true); diff --git a/ora/Features/Browser/Views/BrowserWebContentView.swift b/ora/Features/Browser/Views/BrowserWebContentView.swift index 3ea5c6e8..61049842 100644 --- a/ora/Features/Browser/Views/BrowserWebContentView.swift +++ b/ora/Features/Browser/Views/BrowserWebContentView.swift @@ -88,6 +88,7 @@ struct BrowserWebContentView: View { LinkPreview(text: hovered) } } + .animation(.easeOut(duration: 0.12), value: tab.hoveredLinkURL) } else { ZStack { Rectangle().fill(theme.background)