# vue-awesome-sidebar
**Repository Path**: git_discovery/vue-awesome-sidebar
## Basic Information
- **Project Name**: vue-awesome-sidebar
- **Description**: A Modern and Fast sidebar Menu component for vue(3x) capable with vue-router.
- **Primary Language**: Unknown
- **License**: MIT
- **Default Branch**: main
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 1
- **Created**: 2026-01-20
- **Last Updated**: 2026-01-20
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# Vue Awesome Sidebar
## About
Vue Awesome Sidbar is a powerfull, fast vue js(3x) sidbar navigation library with a set of components and slots that are flexible and customizable using sass and css which is very easy to use.
## Demo
Check out Live demo at [**_amirkian007.github.io/vasmenu_**](https://amirkian007.github.io/vasmenu/)
## Features
- Built with typescript and vite with 0 dependants.
- Support for vue.js (3x) and nuxt.js (3x).
- Customization support for every component slots , CSS and SASS.
- Capable with Vue-router.
- Multiple Menu types(more will be added in the future).
- Complete RTL support.
- Dark and White mode support.
- Responsive design.
# Table of Contents
- [**_Demo_**](#demo)
- [**_Installation_**](#installation)
- [**_Basic Usage_**](#basic-usage)
- [**_Api_**](#Api)
- [**_Props_**](#props)
- [**_Events_**](#events)
- [**_Slots_**](#slots)
- [**_Styling_**](#styling)
- [**_Sass varibales_**](#sass-varibles)
- [**_Css_**](#css-class)
- [**_Author_**](#author)
- [**_License_**](#license)
# Installation
```
npm i vue-awesome-sidebar --save
```
or
```
yarn add vue-awesome-sidebar --save
```
Install the component globally.
Vue js 3:
```js
//main.js
import { createApp } from 'vue'
import App from './App.vue'
import vueAwesomeSidebar from 'vue-awesome-sidebar'
import 'vue-awesome-sidebar/dist/vue-awesome-sidebar.css'
const app = createApp(App)
app.use(vueAwesomeSidebar)
app.mount("#app")
```
Nuxt js 3:
```js
import vueAwesomeSidebar from "vue-awesome-sidebar";
import "vue-awesome-sidebar/dist/vue-awesome-sidebar.css";
export default defineNuxtPlugin((nuxtApp) => {
nuxtApp.vueApp.use(vueAwesomeSidebar);
});
```
or Install the component loacally :
```js
//App.vue
import vueAwesomeSidebar from 'vue-awesome-sidebar'
import 'vue-awesome-sidebar/dist/vue-awesome-sidebar.css'
export default {
components: {
vueAwesomeSidebar
}
}
```
# Basic Usage
a simple example would be like this :
check out [**_props_**](#props) for properites
NOTE : you have to load the icons separately like loading material-icons files with cdn
```html
```
## Api
### Props
| Prop | Type |Default| Description |
|-----------------------|:-------:|:-----:|:--------------------------------------------------------------------------------------------------------|
| menu | Array | null | required - Array list of [**_item properties_**](#menu-properties) |
| menuType | string | simple| style of the menu can be either "fully" or "simple" |
| collapsed | Boolean | false | sets menus collapsed state - should be used with v-model |
| miniMenu | boolean | false | sets mini menus state - should be used with v-model |
| width | string | 290px | sets width for menu |
| widthMiniMenu | string | 65px | sets width for miniMenu |
| autoCollapse | number | null | adds event listner to collapse menu when the given value(in px) is lower than the viewport width |
| closeOnClickOutSide | Boolean | false | Adds event listner to collapse Menu when outside is clicked |
| overLayerOnOpen | Boolean | false | Adds overlayer under the Menu when the menu is open - usefull on mobile |
| childrenOpenAnimation | Boolean | true | opens menu items children with animation |
| keepChildrenOpen | Boolean | flase | keeps children items opened when parent item is closed |
| position | string | fixed | sets menu positiong - by default menu is fixed on viewport |
|ChildrenOpenActiveRoute| Boolean | true |opens meneitem children on page-load if an item with active "href" inside and miniActive class is applied|
| checkButtonActive | Boolean | true | checks if menuitems href is active, if so activeClass is added to it and miniActive class to the parent |
| vueRouterEnabel | Boolean | true | when a meueitem is clicked vue-router will pushe the route to the items "href" property |
| BottomMiniMenuBtn | Boolean | true | Adds mini menu toggle bottom to bottom of menu |
| paddingTop | String | 0px | Adds padding to top of menu - usefull when using with app bar with higher z-index |
| dark | Boolean | false | makes the theme of menu dark - color can be customized with sass vars |
| rtl | Boolean | false | Makes the entire menu right to left align |
|closeOpenMenuOnHrefPush| Boolean | false | close MenuItems with children that are expanded on router/herf push |
|keepOneMenuOpenAtAtime | Boolean | false | keep one open menu at a time |
### menu properties
```ts
interface MenuItem {
href: string | object // vue-router Object
name: string
icon?: MenuItemIcon
children?: Array< MenuItem | MenuHeaderItem >
class?: string
collapseOnClick?: boolean //collapses menu when clicked - this behavior can also be achieved with Events
activeClass?: boolean
miniActiveClass?: boolean
}
interface MenuItemIcon {
text: string
class?: string
element?: string //defualt is
attributes?: object
}
interface MenuHeaderItem {
title: string
class?: string
attributes?: object
}
interface MenuLine {
LineShow: boolean
class?: string
attributes?: object
element?: string
}
```
### Events
| Event Name | Description |
|--------------------------------|:-----------------------------------------------------------------------|
| `@item-click(MenuItem)` | fired when a menu item is clicked |
|`@update:collapsed(isCollapsed)`| fired when menu collapse state changes - should be used with "v-model" |
| `@update:miniMenu(isMiniMenu)` | fired when mini menu state changes - should be used with "v-model" |
### Slots
```html
```
## Styling
### Sass varibles
to use sass varibles import the SCSS file insted of Css, then import custom varibles,
example:
```scss
//style.scss
@import "custom-var.scss";
@import "vue-awesome-sidebar/src/scss/vue-awesome-sidebar.scss";
```
```js
//main.js
import vueAwesomeSidebar from 'vue-awesome-sidebar'
//import 'vue-awesome-sidebar/dist/vue-awesome-sidebar.css'
import './style.scss'
```
Sass varibles:
```scss
//z-index of the menu components rage form 848-854
//<--BASE-->
$overlayer-bg-color: rgba(0, 0, 0, 0.6);
$toggle-mini-btn-height: 50px;
$menu-item-simpleType-icon-height: 35px;
$menu-item-fullyType-height: 44px;
$label-font-size: 16px;//may not work with slots
$label-icon-size: 20px;//may not work with slots
$scroll-bar-width: 13px;
//<--COLORS-->
//NOTE : the "-white" at the end of each var defines the theme, you can change it to "-dark" to set it for dark mode theme
//example :"$icon-color-dark : #000000 " for dark theme and "$icon-color-white : #fafafa " for white theme
//note : may not work with slots depending on how the slots is used
//Menu
$menu-back-ground-color-white: white; -dark: #0d1117; //==> $menu-back-ground-color-dark:#0d1117
$border-color-white: #cfcfcf; -dark: rgba(170, 170, 170, 0.329);
$scroll-bar-color-white: rgb(184, 184, 184); -dark: #686868;
$header-color-white: #213547; -dark: #ffffffde;
//Menu item prepend icon
$icon-color-white: rgb(28, 30, 33); -dark: rgb(218, 221, 225);
$icon-active-color-white: #2c7ae0; -dark: rgb(44, 122, 224);
$icon-mini-active-color-white: #2c7ae0; -dark: rgb(44, 122, 224);
$icon-hover-color-white: ''; -dark: '';
//Menu item
$menu-item-bg-color-white: none; -dark: none;
$menu-item-hover-bg-white: rgb(242, 242, 242); -dark: hsla(0, 0%, 100%, 0.05);
$menu-item-active-bg-color-white: rgb(242, 242, 242); -dark: hsla(0, 0%, 100%, 0.05);
$mini-active-item-bg-color-white: none; -dark: none;
//Menu item label
$text-color-none-hover-white: rgb(28, 30, 33); -dark: rgb(218, 221, 225);
$text-active-color-white: #2c7ae0; -dark: rgb(44, 122, 224);
$text-mini-active-color-white: #2c7ae0; -dark: rgb(44, 122, 224);
$text-hover-color-white: none; -dark: none;
//menu item append icon
$append-icon-color-white: rgb(28, 30, 33); -dark: rgb(218, 221, 225);
$append-active-icon-color-white: rgb(28, 30, 33); -dark: rgb(218, 221, 225);
//horizental line
$hr-line-color-white: rgba(211, 211, 211, 0.548); -dark: rgba(211, 211, 211, 0.548);
//bottomBtn for miniMenu
$bottomBtn-bg-color-white: white; -dark: #13161b;
```
### Css class
```scss
//menu
.vas-menu{}
.menu-wraper{}//menu scroll wrapper
.miniCoolapseMenu{} //for mini menu
.compeleteCoolapseMenu{} //for collapsed menu
.dark-theme{}
.white-theme{}
.vas-footer{}
.bottomBtn{} // mini menutoggle button
//menu item
.menu-item-base{// wrapper for menu item ant children
&.menuExpanded
}//apllayed to all menuitem
.menuExpanded{}
.label{
.menu-icond{}
.labelName{}
.icons{}
.postIconOpenAnima{}
}
.menuexpand{}
.activeClass{}
.miniActiveClass{}
.labelHoverClass{}
//container
.items-container{}
.topContainer{}
```
## Contributing
``` bash
$ pnpm i
# dev server
$ pnpm run dev
```
## License
vue-awesome-sidebar is open-sourced software licensed under the [MIT license](https://opensource.org/licenses/MIT).