blob: 82512c3e159931bd555bdb85cf8c2a50309bbd1f (
plain) (
blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
|
export default defineNuxtPlugin((ctx: any) => {
// Menu visible reference
const visible = ref(false)
// Open the menu
const open = () => (visible.value = true)
// Close the menu
const close = () => (visible.value = false)
// Toggle the menu (useful for one-off buttons)
const toggle = () => (visible.value = !visible.value)
// Watch route change, close on change
ctx.$router.afterEach(() => setTimeout(close, 50))
// Watch visible and remove overflow so the scrollbar disappears when menu is opened
if (process.client) {
watch(
visible,
(isVisible) => {
const html = document.documentElement
if (isVisible) {
html.style.overflow = 'hidden'
} else {
setTimeout(() => {
html.style.overflow = ''
}, 100) /* had to put it, because of layout shift on leave transition */
}
},
{
immediate: true
}
)
}
return {
provide: {
menu: {
visible,
close,
open,
toggle
}
}
}
})
|