feat: replace back button with HomeButton and fix view transition

- Use HomeButton component in HeaderNote for logo, hover, and view-transition-name
- Eagerly import HeaderNote in FluxNote so the logo exists in the DOM when the transition snapshot is taken
- Wait for afterEach + nextTick in the view transition hook to handle lazy-loaded routes
- Add cursor: pointer to font change button

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
Julien Calixte
2026-03-28 20:19:59 +01:00
parent 6dc98c80ca
commit 10c3e1ca60
3 changed files with 10 additions and 33 deletions

View File

@@ -1,7 +1,6 @@
<script lang="ts" setup> <script lang="ts" setup>
import { import {
computed, computed,
defineAsyncComponent,
nextTick, nextTick,
onMounted, onMounted,
onUnmounted, onUnmounted,
@@ -9,6 +8,7 @@ import {
watch watch
} from "vue" } from "vue"
import HeaderNote from "@/components/HeaderNote.vue"
import SkeletonLoader from "@/components/SkeletonLoader.vue" import SkeletonLoader from "@/components/SkeletonLoader.vue"
import StackedNote from "@/components/StackedNote.vue" import StackedNote from "@/components/StackedNote.vue"
import { useLinks } from "@/hooks/useLinks.hook" import { useLinks } from "@/hooks/useLinks.hook"
@@ -21,10 +21,6 @@ import CacheAllNotes from "@/modules/note/components/CacheAllNote.vue"
import { useUserRepoStore } from "@/modules/repo/store/userRepo.store" import { useUserRepoStore } from "@/modules/repo/store/userRepo.store"
import { useUserSettings } from "@/modules/user/hooks/useUserSettings.hook" import { useUserSettings } from "@/modules/user/hooks/useUserSettings.hook"
const HeaderNote = defineAsyncComponent(
() => import("@/components/HeaderNote.vue")
)
const props = withDefaults( const props = withDefaults(
defineProps<{ defineProps<{
user: string user: string

View File

@@ -1,32 +1,13 @@
<script lang="ts" setup> <script lang="ts" setup>
import FontChange from "@/components/FontChange.vue" import FontChange from "@/components/FontChange.vue"
import HomeButton from "@/components/HomeButton.vue"
defineProps<{ user: string; repo: string }>() defineProps<{ user: string; repo: string }>()
</script> </script>
<template> <template>
<header class="header-note"> <header class="header-note">
<router-link <home-button />
:to="{ name: 'Home' }"
class="button is-small is-white back-button"
>
<svg
xmlns="http://www.w3.org/2000/svg"
class="icon icon-tabler icon-tabler-arrow-narrow-left"
width="28"
height="28"
viewBox="0 0 24 24"
stroke-width="1.5"
stroke="currentColor"
fill="none"
stroke-linecap="round"
stroke-linejoin="round"
>
<line x1="5" y1="12" x2="19" y2="12" />
<line x1="5" y1="12" x2="9" y2="16" />
<line x1="5" y1="12" x2="9" y2="8" />
</svg>
</router-link>
<!-- <router-link <!-- <router-link
:to="{ name: 'SpacedRepetitionCard', params: { user, repo } }" :to="{ name: 'SpacedRepetitionCard', params: { user, repo } }"
> >
@@ -168,14 +149,9 @@ defineProps<{ user: string; repo: string }>()
justify-content: space-between; justify-content: space-between;
margin-top: 10px; margin-top: 10px;
img { button {
&:hover { color: var(--color-accent);
cursor: pointer; cursor: pointer;
} }
} }
button {
color: var(--color-accent);
}
}
</style> </style>

View File

@@ -104,7 +104,12 @@ router.beforeEach(() => {
} }
).startViewTransition(async () => { ).startViewTransition(async () => {
resolve() resolve()
await nextTick() await new Promise<void>((r) => {
const unwatch = router.afterEach(() => {
unwatch()
nextTick().then(r)
})
})
}) })
}) })
}) })