1
1
<template >
2
2
<ul :class =" classes.wrapper" >
3
- <router-link :class =" tw`mr-6`" to =" /" >
4
- <img
5
- :class ="
6
- tw`w-6 transition ease-in-out duration-200 transform scale-100 hover:scale-110`
7
- "
8
- src =" @/views/assets/images/logo-detailed.svg"
9
- alt =" Vue Zephyrs"
10
- />
11
- </router-link >
12
- <ul :class =" tw`flex items-center space-x-4`" >
13
- <li >
14
- <Link to =" /docs/install" variant =" button" >Documentation</Link >
3
+ <div :class =" tw`flex items-stretch justify-between`" >
4
+ <router-link :class =" tw`mr-2 flex items-center`" to =" /" >
5
+ <img
6
+ :class =" [tw`w-9 p-2.5`, classes.options.item]"
7
+ src =" @/views/assets/images/logo-detailed.svg"
8
+ alt =" Vue Zephyrs"
9
+ />
10
+ <span :class =" tw`inline-block md:hidden mt-0.5 ml-3 font-bold text-lg`"
11
+ >Vue Zephyrs</span
12
+ >
13
+ </router-link >
14
+ <button
15
+ @click =" navIsOpen = !navIsOpen"
16
+ :class =" [classes.options.item, tw`md:hidden`]"
17
+ >
18
+ <svg
19
+ :class =" tw`w-4`"
20
+ xmlns =" http://www.w3.org/2000/svg"
21
+ fill =" none"
22
+ viewBox =" 0 0 24 24"
23
+ stroke =" currentColor"
24
+ >
25
+ <path
26
+ stroke-linecap =" round"
27
+ stroke-linejoin =" round"
28
+ stroke-width =" 2"
29
+ d =" M4 6h16M4 12h16M4 18h16"
30
+ />
31
+ </svg >
32
+ </button >
33
+ </div >
34
+ <ul :class =" classes.nav.wrapper" >
35
+ <li :class =" classes.nav.item" >
36
+ <div :class =" tw`inline-block`" @click =" navIsOpen = false" >
37
+ <Link to =" /docs/install" variant =" button" >Documentation</Link >
38
+ </div >
15
39
</li >
16
- <li >
17
- <Link to =" /guides" variant =" button" >Guides</Link >
40
+ <li :class =" classes.nav.item" >
41
+ <div :class =" tw`inline-block`" @click =" navIsOpen = false" >
42
+ <Link to =" /guides" variant =" button" >Guides</Link >
43
+ </div >
18
44
</li >
19
- <li >
20
- <Anchor href =" https://twitter.com/usezephyr" variant =" button" newTab >
21
- Updates
22
- </Anchor >
45
+ <li :class =" classes.nav.item" >
46
+ <div :class =" tw`inline-block`" @click =" navIsOpen = false" >
47
+ <Anchor href =" https://twitter.com/usezephyr" variant =" button" newTab >
48
+ Updates
49
+ </Anchor >
50
+ </div >
23
51
</li >
24
52
</ul >
25
- <div :class =" tw`flex items-center ml-auto space-x-2`" >
26
- <LightSwitch
27
- :class ="
28
- tw`items-center inline-flex space-x-2 uppercase cursor-pointer select-none text(gray-500 dark:gray-300 hover:dark:white hover:green-700) px-2.5 py-2 rounded hover:(bg(green-100 dark:gray-700 opacity-50 dark:opacity-50))`
29
- "
30
- />
53
+ <div :class =" classes.options.wrapper" >
54
+ <LightSwitch :class =" [classes.options.item, tw`px-3`]" />
31
55
<Dropdown >
32
- <DropdownButton
33
- as =" button"
34
- classAppend =" items-center uppercase cursor-pointer inline-flex space-x-2 text(gray-500 dark:gray-300 hover:dark:white hover:green-700) px-2.5 py-2 rounded hover:(bg(green-100 dark:gray-700 opacity-50 dark:opacity-50))"
35
- >
56
+ <DropdownButton as =" button" :class =" classes.options.item" >
36
57
<div >{{ locale === "zh-CN" ? "中文" : locale }}</div >
37
58
<svg
38
- :class =" tw`w-5`"
59
+ :class =" tw`w-4 md:w- 5`"
39
60
xmlns =" http://www.w3.org/2000/svg"
40
61
viewBox =" 0 0 20 20"
41
62
fill =" currentColor"
62
83
</template >
63
84
64
85
<script lang="ts">
65
- import { defineComponent , computed } from " vue" ;
86
+ import { defineComponent , computed , ref } from " vue" ;
66
87
import { tw } from " twind" ;
67
88
import { toTitleCase } from " @/views/utils/stringMods" ;
68
89
import { locale , updateLocale } from " @/views/utils/locale" ;
@@ -75,6 +96,7 @@ export default defineComponent({
75
96
Link ,
76
97
},
77
98
setup() {
99
+ const navIsOpen = ref (false );
78
100
const links = [
79
101
{
80
102
href: null ,
@@ -96,12 +118,32 @@ export default defineComponent({
96
118
];
97
119
const classes = computed (() => {
98
120
return {
99
- wrapper: tw (
100
- " relative z-10 flex items-center rounded py-4 px-8 bg-gray-50 dark:bg-gray-800"
101
- ),
121
+ wrapper: tw ` relative z-10 flex flex-col md:flex-row items-stretch rounded p-5 md:(px-8 px-6) bg-gray-50 dark:bg-gray-800 ` ,
122
+ nav: {
123
+ wrapper: [
124
+ ! navIsOpen .value ? tw ` hidden md:flex ` : tw ` flex ` ,
125
+ tw ` flex-col md:flex-row md:items-center md:space-x-2 border-y border-gray-200 dark:border-gray-700 my-4 py-4 md:(border-0 py-0 my-0) ` ,
126
+ ],
127
+ item: " " ,
128
+ },
129
+ options: {
130
+ wrapper: [
131
+ ! navIsOpen .value ? tw ` hidden md:flex ` : tw ` flex ` ,
132
+ tw ` items-stretch justify-between md:justify-start md:ml-auto space-x-2 ` ,
133
+ ],
134
+ item: tw ` text-sm md:text-base items-center flex space-x-2 uppercase cursor-pointer select-none text(gray-500 dark:gray-300 hover:dark:white hover:green-700) px-2 py-1.5 md:px-2.5 md:py-2 rounded bg-gray-100 dark:bg-gray-700 hover:(bg(green-100 dark:gray-600 opacity-50 dark:opacity-50)) ` ,
135
+ },
102
136
};
103
137
});
104
- return { tw , links , updateLocale , locale , classes , toTitleCase };
138
+ return {
139
+ tw ,
140
+ links ,
141
+ updateLocale ,
142
+ locale ,
143
+ classes ,
144
+ toTitleCase ,
145
+ navIsOpen ,
146
+ };
105
147
},
106
148
});
107
149
</script >
0 commit comments