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 @@ + + + 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 @@ + + + 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 @@ + + + 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 @@