···282282 e.target.closest('[data-view-transition-name]') ||
283283 e.target.querySelector('[data-view-transition-name]');
284284 if (el) {
285285- if (!onClick) e.preventDefault();
286286- el.style.viewTransitionName = mediaVTN;
287287- document.startViewTransition(() => {
288288- el.style.viewTransitionName = '';
289289- onClick?.(e);
290290- if (!onClick || !e.defaultPrevented) {
285285+ // BUG: both link and onClick is triggered at the same time
286286+ // Temporarily disable view transition if has onClick
287287+ // Detecting preventDefault for an onClick has to happen before view transition but it's only possible after click, and this mean the link is already clicked even before we know it's default prevented.
288288+ if (onClick) {
289289+ onClick(e);
290290+ } else {
291291+ e.preventDefault();
292292+ el.style.viewTransitionName = mediaVTN;
293293+ document.startViewTransition(() => {
294294+ el.style.viewTransitionName = '';
291295 location.hash = `#${to}`;
292292- }
293293- });
296296+ });
297297+ }
294298 } else {
295299 onClick?.(e);
296300 }