Skip to content

Commit a4d88f5

Browse files
authored
Collapsable docs sidebar (#11)
* Install an svg-to-vue-component package * Configure webpack for vue-svg-loader * Left & right chevrons icon * Make docs sidebar collapsible * Fixed position and increase z-index * FIX: Add "," * Use "vue-svg-loader" instead of "svg-to-vue-component" * Decrease size of sidebar toggle fab * Padding 1rem (left & right) in sidebar
1 parent 47bd442 commit a4d88f5

File tree

3 files changed

+59
-2
lines changed

3 files changed

+59
-2
lines changed

src/assets/images/chevrons-left.svg

+1
Loading

src/assets/images/chevrons-right.svg

+1
Loading

src/layouts/Docs.vue

+57-2
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
<div class="docs">
33
<Header theme="dark" :size="1" />
44
<div class="docs__container">
5-
<div class="docs__sidebar">
5+
<div :class="{ 'docs__sidebar-none': !sidebar }" class="docs__sidebar">
66
<template v-for="group in links" class="sidebar__menu">
77
<h6 :key="`title-${group.title}`" class="sidebar__menu-heading">
88
{{ group.title }}
@@ -25,22 +25,45 @@
2525
</PostLayout>
2626
</div>
2727
</div>
28+
<div @click="toggleSidebar()" class="docs__sidebar-toggle">
29+
<LeftArrow v-if="sidebar" />
30+
<RightArrow v-else />
31+
</div>
2832
</div>
2933
</div>
3034
</template>
3135

3236
<script>
3337
import Header from "../components/Header";
3438
import PostLayout from "./Post";
39+
import LeftArrow from "../assets/images/chevrons-left.svg";
40+
import RightArrow from "../assets/images/chevrons-right.svg";
3541
3642
export default {
3743
name: "DocsLayout",
44+
data() {
45+
return {
46+
sidebarToggleable: false
47+
}
48+
},
3849
components: {
3950
Header,
40-
PostLayout
51+
PostLayout,
52+
LeftArrow,
53+
RightArrow
4154
},
4255
props: {
4356
links: Array
57+
},
58+
computed: {
59+
sidebar() {
60+
return this.sidebarToggleable && (window.innerWidth <= 768)
61+
}
62+
},
63+
methods: {
64+
toggleSidebar() {
65+
this.sidebarToggleable = !this.sidebarToggleable
66+
}
4467
}
4568
};
4669
</script>
@@ -63,6 +86,23 @@ export default {
6386
right: 2rem
6487
bottom: 2rem
6588
height: calc(100vh - 69px)
89+
z-index: 5
90+
background-color: white
91+
92+
&-toggle
93+
position: fixed
94+
background-color: #00ADB5
95+
bottom: 1.225rem
96+
cursor: pointer
97+
right: 1.5rem
98+
display: flex
99+
border-radius: 50px
100+
padding: .6rem
101+
102+
svg
103+
stroke: white
104+
width: 25px
105+
height: 25px
66106
67107
&__content
68108
padding-top: 2rem
@@ -100,4 +140,19 @@ export default {
100140
101141
&:hover
102142
color: #00ADB5
143+
144+
@media (max-width: 768px)
145+
.docs
146+
&__sidebar
147+
position: fixed
148+
padding:
149+
left: 1rem
150+
right: 1rem
151+
152+
&-none
153+
display: none
154+
155+
@media (min-width: 768px)
156+
.docs__sidebar-toggle
157+
display: none
103158
</style>

0 commit comments

Comments
 (0)