diff --git a/resources/assets/js/components/menu/CustomSidebar.vue b/resources/assets/js/components/menu/CustomSidebar.vue
index 5ede3fe14..a9de55953 100644
--- a/resources/assets/js/components/menu/CustomSidebar.vue
+++ b/resources/assets/js/components/menu/CustomSidebar.vue
@@ -22,10 +22,13 @@
+
diff --git a/resources/assets/js/components/menu/sidebar/components/SidebarMenuBadge.vue b/resources/assets/js/components/menu/sidebar/components/SidebarMenuBadge.vue
new file mode 100755
index 000000000..9fb7ab565
--- /dev/null
+++ b/resources/assets/js/components/menu/sidebar/components/SidebarMenuBadge.vue
@@ -0,0 +1,22 @@
+
+
+ {{ badge.text }}
+
+
+
+
diff --git a/resources/assets/js/components/menu/sidebar/components/SidebarMenuIcon.vue b/resources/assets/js/components/menu/sidebar/components/SidebarMenuIcon.vue
new file mode 100755
index 000000000..8bef7503f
--- /dev/null
+++ b/resources/assets/js/components/menu/sidebar/components/SidebarMenuIcon.vue
@@ -0,0 +1,22 @@
+
+
+ {{ icon.text }}
+
+
+
+
diff --git a/resources/assets/js/components/menu/sidebar/components/SidebarMenuItem.vue b/resources/assets/js/components/menu/sidebar/components/SidebarMenuItem.vue
new file mode 100755
index 000000000..672ffce61
--- /dev/null
+++ b/resources/assets/js/components/menu/sidebar/components/SidebarMenuItem.vue
@@ -0,0 +1,375 @@
+
+
+
+
+
+
+
+
+ {{ item.title }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/resources/assets/js/components/menu/sidebar/components/SidebarMenuLink.vue b/resources/assets/js/components/menu/sidebar/components/SidebarMenuLink.vue
new file mode 100755
index 000000000..25c4c8777
--- /dev/null
+++ b/resources/assets/js/components/menu/sidebar/components/SidebarMenuLink.vue
@@ -0,0 +1,33 @@
+
+
+
+
+
+
+
diff --git a/resources/assets/js/components/menu/sidebar/index.js b/resources/assets/js/components/menu/sidebar/index.js
new file mode 100755
index 000000000..c6b3ecbdb
--- /dev/null
+++ b/resources/assets/js/components/menu/sidebar/index.js
@@ -0,0 +1,9 @@
+import SidebarMenu from './components/SidebarMenu.vue'
+
+export default {
+ install (Vue) {
+ Vue.component('sidebar-menu', SidebarMenu)
+ }
+}
+
+export { SidebarMenu }
diff --git a/resources/assets/js/components/menu/sidebar/scss/_base.scss b/resources/assets/js/components/menu/sidebar/scss/_base.scss
new file mode 100755
index 000000000..2882bd3cb
--- /dev/null
+++ b/resources/assets/js/components/menu/sidebar/scss/_base.scss
@@ -0,0 +1,201 @@
+.v-sidebar-menu {
+ * {
+ box-sizing: border-box;
+ }
+
+ position: fixed;
+ top: 0;
+ left: 0;
+ bottom: 0;
+ display: flex;
+ flex-direction: column;
+ z-index: 999;
+ box-sizing: border-box;
+ width: 100%;
+ text-align: left;
+ transition: 0.3s max-width ease;
+
+ .vsm--scroll-wrapper {
+ height: 100%;
+ overflow-y: auto;
+ overflow-x: hidden;
+ }
+
+ .vsm--dropdown > .vsm--list {
+ padding: 5px;
+ }
+
+ .vsm--item {
+ position: relative;
+ display: block;
+ width: 100%;
+ white-space: nowrap;
+ }
+
+ .vsm--link {
+ cursor: pointer;
+ position: relative;
+ display: flex;
+ align-items: center;
+ font-size: $item-font-size;
+ font-weight: 400;
+ padding: $item-padding;
+ line-height: $item-line-height;
+ text-decoration: none;
+ user-select: none;
+ z-index: 20;
+ transition: 0.3s all ease;
+ &_exact-active,
+ &_active {
+ font-weight: 600;
+ }
+ &_disabled {
+ opacity: 0.4;
+ pointer-events: none;
+ }
+ &_level-1 {
+ .vsm--icon {
+ height: $icon-height;
+ line-height: $icon-height;
+ width: $icon-width;
+ flex-shrink: 0;
+ text-align: center;
+ border-radius: 3px;
+ }
+ }
+ }
+
+ .vsm--icon {
+ display: inline-block;
+ margin-right: 10px;
+ }
+
+ .vsm--title {
+ flex-grow: 1;
+ }
+
+ .vsm--arrow {
+ width: 30px;
+ text-align: center;
+ font-style: normal;
+ font-weight: 900;
+ transition: 0.3s transform ease;
+ &:after {
+ content: '\f105';
+ font-family: 'Font Awesome 5 Free';
+ }
+ &_open {
+ transform: rotate(90deg);
+ }
+ &_slot:after {
+ display: none;
+ }
+ }
+
+ .vsm--header {
+ font-size: 14px;
+ font-weight: 600;
+ padding: 10px;
+ white-space: nowrap;
+ text-transform: uppercase;
+ }
+
+ .vsm--badge {
+ &_default {
+ padding: 0px 6px;
+ font-size: 12px;
+ border-radius: 3px;
+ height: 20px;
+ line-height: 20px;
+ font-weight: 600;
+ text-transform: uppercase;
+ }
+ }
+
+ .vsm--toggle-btn {
+ display: block;
+ text-align: center;
+ font-style: normal;
+ font-weight: 900;
+ height: 50px;
+ cursor: pointer;
+ border: none;
+ width: 100%;
+ &:after {
+ content: '\f337';
+ font-family: 'Font Awesome 5 Free';
+ }
+ &_slot:after {
+ display: none;
+ }
+ }
+
+ &.vsm_collapsed {
+ & .vsm--link_level-1 {
+ &.vsm--link_hover,
+ &:hover {
+ background-color: transparent !important;
+ }
+ }
+ }
+
+ &.vsm_rtl {
+ right: 0;
+ left: inherit;
+ text-align: right;
+ direction: rtl;
+
+ & .vsm--icon {
+ margin-left: 10px;
+ margin-right: 0px;
+ }
+ }
+
+ &.vsm_relative {
+ position: relative;
+ height: 100%;
+ }
+
+ .expand-enter-active,
+ .expand-leave-active {
+ transition: height 0.3s ease;
+ overflow: hidden;
+ }
+ .expand-enter,
+ .expand-leave-to {
+ height: 0 !important;
+ }
+
+ .slide-animation-enter-active {
+ transition: width 0.3s ease;
+ }
+ .slide-animation-leave-active {
+ transition: width 0.3s ease;
+ }
+ .slide-animation-enter,
+ .slide-animation-leave-to {
+ width: 0 !important;
+ }
+
+ .fade-animation-enter-active {
+ transition: opacity 0.3s ease, visibility 0.3s ease;
+ }
+ .fade-animation-leave-active {
+ transition: opacity 0.3s ease, visibility 0.3s ease;
+ }
+ .fade-animation-enter,
+ .fade-animation-leave-to {
+ opacity: 0 !important;
+ visibility: hidden !important;
+ }
+
+ .vsm--mobile-item>.vsm--item {
+ padding: 0 !important;
+ margin: 0 !important;
+ }
+ .vsm--mobile-item>.vsm--item>.vsm--link {
+ margin: 0 !important;
+ background-color: transparent !important;
+ line-height: $icon-height !important;
+ }
+ }
\ No newline at end of file
diff --git a/resources/assets/js/components/menu/sidebar/scss/_variables.scss b/resources/assets/js/components/menu/sidebar/scss/_variables.scss
new file mode 100755
index 000000000..47d76f41c
--- /dev/null
+++ b/resources/assets/js/components/menu/sidebar/scss/_variables.scss
@@ -0,0 +1,36 @@
+$primary-color: #4285f4 !default;
+$base-bg: #2a2a2e !default;
+
+$item-color: #fff !default;
+
+$item-active-color: null !default;
+$item-active-bg: null !default;
+
+$item-open-color: #fff !default;
+$item-open-bg: $primary-color !default;
+
+$item-hover-color: null !default;
+$item-hover-bg: rgba(darken($base-bg, 5%), 0.5) !default;
+
+$icon-color: null !default;
+$icon-bg: darken( $base-bg, 5% ) !default;
+
+$icon-active-color: null !default;
+$icon-active-bg: null !default;
+
+$icon-open-color: null !default;
+$icon-open-bg: $item-open-bg !default;
+
+$mobile-item-color: #fff !default;
+$mobile-item-bg: $primary-color !default;
+$mobile-icon-color: $mobile-item-color !default;
+$mobile-icon-bg: $mobile-item-bg !default;
+
+$dropdown-bg: lighten( $base-bg, 5% ) !default;
+$dropdown-color: null !default;
+
+$item-font-size: 16px !default;
+$item-line-height: 30px !default;
+$item-padding: 10px !default;
+$icon-height: 30px !default;
+$icon-width: 30px !default;
\ No newline at end of file
diff --git a/resources/assets/js/components/menu/sidebar/scss/themes/default-theme.scss b/resources/assets/js/components/menu/sidebar/scss/themes/default-theme.scss
new file mode 100755
index 000000000..fb839c5a6
--- /dev/null
+++ b/resources/assets/js/components/menu/sidebar/scss/themes/default-theme.scss
@@ -0,0 +1,100 @@
+.v-sidebar-menu {
+ background-color: $base-bg;
+ .vsm--link {
+ color: $item-color;
+ &_exact-active,
+ &_active {
+ color: $item-active-color;
+ background-color: $item-active-bg;
+ }
+ &_level-1 {
+ &.vsm--link_exact-active,
+ &.vsm--link_active {
+ box-shadow: 3px 0px 0px 0px $primary-color inset;
+ & .vsm--icon {
+ color: $icon-active-color;
+ background-color: $icon-active-bg;
+ }
+ }
+ & .vsm--icon {
+ background-color: $icon-bg;
+ }
+ }
+ &_hover,
+ &:hover {
+ color: $item-hover-color;
+ background-color: $item-hover-bg;
+ }
+ &_mobile-item {
+ color: $mobile-item-color;
+ &.vsm--link_hover,
+ &:hover {
+ color: $mobile-item-color;
+ }
+ }
+ }
+
+ &.vsm_collapsed {
+ .vsm--link_level-1.vsm--link_hover,
+ .vsm--link_level-1:hover {
+ .vsm--icon {
+ color: $mobile-icon-color;
+ background-color: $mobile-icon-bg;
+ }
+ }
+ }
+
+ .vsm--icon {
+ color: $icon-color;
+ }
+
+ .vsm--dropdown {
+ & .vsm--list {
+ background-color: $dropdown-bg;
+ }
+ & .vsm--link {
+ color: $dropdown-color;
+ }
+ & .vsm--icon {
+ color: $dropdown-color;
+ }
+ }
+
+ .vsm--mobile-bg {
+ background-color: $mobile-item-bg;
+ }
+
+ &.vsm_expanded {
+ .vsm--item_open {
+ .vsm--link {
+ &_level-1 {
+ color: $item-open-color;
+ background-color: $item-open-bg;
+ & .vsm--icon {
+ color: $icon-open-color;
+ background-color: $icon-open-bg;
+ }
+ }
+ }
+ }
+ }
+
+ &.vsm_rtl {
+ .vsm--link_level-1.vsm--link_active,
+ .vsm--link_level-1.vsm--link_exact-active {
+ box-shadow: -3px 0px 0px 0px $primary-color inset;
+ }
+ }
+
+ .vsm--header {
+ color: rgba($item-color, 0.7);
+ }
+ .vsm--badge_default {
+ color: $item-color;
+ background-color: darken( $base-bg, 5% );
+ }
+ .vsm--toggle-btn {
+ color: $item-color;
+ background-color: darken( $base-bg, 5% );
+ }
+}
\ No newline at end of file
diff --git a/resources/assets/js/components/menu/sidebar/scss/themes/white-theme.scss b/resources/assets/js/components/menu/sidebar/scss/themes/white-theme.scss
new file mode 100755
index 000000000..251c245ed
--- /dev/null
+++ b/resources/assets/js/components/menu/sidebar/scss/themes/white-theme.scss
@@ -0,0 +1,108 @@
+$base-bg: #fff;
+$item-color: #262626;
+$icon-bg: #bbc5d6;
+$icon-active-color: #fff;
+$icon-active-bg: $item-color;
+$item-hover-bg: rgba(darken($base-bg, 5%), 0.5);
+$dropdown-bg: #e3e3e3;
+
+.v-sidebar-menu.vsm_white-theme {
+ background-color: $base-bg;
+ .vsm--link {
+ color: $item-color;
+ &_exact-active,
+ &_active {
+ color: $item-active-color;
+ background-color: $item-active-bg;
+ }
+ &_level-1 {
+ &.vsm--link_exact-active,
+ &.vsm--link_active {
+ box-shadow: 3px 0px 0px 0px $primary-color inset;
+ & .vsm--icon {
+ color: $icon-active-color;
+ background-color: $icon-active-bg;
+ }
+ }
+ & .vsm--icon {
+ background-color: $icon-bg;
+ }
+ }
+ &_hover,
+ &:hover {
+ color: $item-hover-color;
+ background-color: $item-hover-bg;
+ }
+ &_mobile-item {
+ color: $mobile-item-color;
+ &.vsm--link_hover,
+ &:hover {
+ color: $mobile-item-color;
+ }
+ }
+ }
+
+ &.vsm_collapsed {
+ .vsm--link_level-1.vsm--link_hover,
+ .vsm--link_level-1:hover {
+ .vsm--icon {
+ color: $mobile-icon-color;
+ background-color: $mobile-icon-bg;
+ }
+ }
+ }
+
+ .vsm--icon {
+ color: $icon-color;
+ }
+
+ .vsm--dropdown {
+ & .vsm--list {
+ background-color: $dropdown-bg;
+ }
+ & .vsm--link {
+ color: $dropdown-color;
+ }
+ & .vsm--icon {
+ color: $dropdown-color;
+ }
+ }
+
+ .vsm--mobile-bg {
+ background-color: $mobile-item-bg;
+ }
+
+ &.vsm_expanded {
+ .vsm--item_open {
+ .vsm--link {
+ &_level-1 {
+ color: $item-open-color;
+ background-color: $item-open-bg;
+ & .vsm--icon {
+ color: $icon-open-color;
+ background-color: $icon-open-bg;
+ }
+ }
+ }
+ }
+ }
+
+ &.vsm_rtl {
+ .vsm--link_level-1.vsm--link_active,
+ .vsm--link_level-1.vsm--link_exact-active {
+ box-shadow: -3px 0px 0px 0px $primary-color inset;
+ }
+ }
+
+ .vsm--header {
+ color: rgba($item-color, 0.7);
+ }
+ .vsm--badge_default {
+ color: $item-color;
+ background-color: darken( $base-bg, 5% );
+ }
+ .vsm--toggle-btn {
+ color: $item-color;
+ background-color: darken( $base-bg, 5% );
+ }
+}
\ No newline at end of file
diff --git a/resources/assets/js/components/menu/sidebar/scss/vue-sidebar-menu.scss b/resources/assets/js/components/menu/sidebar/scss/vue-sidebar-menu.scss
new file mode 100755
index 000000000..cc51cd082
--- /dev/null
+++ b/resources/assets/js/components/menu/sidebar/scss/vue-sidebar-menu.scss
@@ -0,0 +1,7 @@
+// base styles
+@import './variables';
+@import './base';
+
+// themes
+@import './themes/default-theme';
+@import './themes/white-theme';
\ No newline at end of file
diff --git a/resources/assets/js/components/utils/CustomTooltip.vue b/resources/assets/js/components/utils/CustomTooltip.vue
index 111ed8cb0..885617c62 100644
--- a/resources/assets/js/components/utils/CustomTooltip.vue
+++ b/resources/assets/js/components/utils/CustomTooltip.vue
@@ -1,14 +1,39 @@
- {{ data.title }}
+
+ {{ data.title }}
+
+
+
+ {{ data.title }}
+
+
+
+
{{ labelTooltip }}
@@ -23,11 +48,19 @@