]> git.immae.eu Git - github/Chocobozzz/PeerTube.git/blobdiff - client/src/app/menu/menu.component.scss
Add available themes and plugins in feature table
[github/Chocobozzz/PeerTube.git] / client / src / app / menu / menu.component.scss
index 4ef330b2f5a5ae585ee6d97f2443ad933f3a4ea3..f0919ed289d1930ec8eeb743948e74254a4e17e6 100644 (file)
-@import '_variables';
-@import '_mixins';
+@use 'sass:math';
+@use '_variables' as *;
+@use '_mixins' as *;
+
+$menu-link-icon-size: 22px;
+$menu-link-icon-margin-right: 18px;
+$footer-links-base-opacity: .8;
+
+.menu-link {
+  @include disable-default-a-behaviour;
+  @include padding-left($menu-lateral-padding);
+  @include padding-right(20px);
+
+  display: flex;
+  align-items: center;
+
+  color: pvar(--menuForegroundColor);
+  cursor: pointer;
+  font-size: 16px;
+  white-space: normal;
+  word-break: break-word;
+  transition: background-color .1s ease-in-out;
+  line-height: $line-height-normal;
+
+  &.active {
+    background-color: rgba(255, 255, 255, 0.15);
+  }
+
+  &:hover,
+  &.focus-visible {
+    background-color: rgba(255, 255, 255, 0.1);
+  }
+
+  my-global-icon {
+    @include apply-svg-color(#808080);
+    @include margin-right($menu-link-icon-margin-right);
+
+    display: flex;
+    width: $menu-link-icon-size;
+    height: $menu-link-icon-size;
+  }
+}
 
 .menu-wrapper {
   position: fixed;
   height: calc(100vh - #{$header-height});
   padding: 0;
   width: $menu-width;
+  z-index: z(menu);
+  scrollbar-color: pvar(--actionButtonColor) pvar(--menuBackgroundColor);
 }
 
 menu {
-  background-color: $menu-background;
-  margin: 0;
-  padding: 0;
-  height: 100%;
-  white-space: nowrap;
-  text-overflow: ellipsis;
-  overflow: hidden;
-  z-index: 1000;
-  color: $menu-color;
+  @include ellipsis;
+
+  background-color: pvar(--menuBackgroundColor);
+  color: pvar(--menuForegroundColor);
+
   display: flex;
   flex-direction: column;
+  height: 100%;
+  width: 100%;
+  margin: 0;
+  padding: 0;
 
-  &:focus, &:hover {
+  &:focus,
+  &:hover {
     overflow-y: auto;
   }
 
-  .top-menu {
-    flex-grow: 1;
-    width: $menu-width;
+  @media not all and (hover: hover) and (pointer: fine) {
+    overflow-y: auto;
   }
 
-  .logged-in-block {
-    height: 100px;
-    background-color: rgba(255, 255, 255, 0.15);
+  &.is-logged-in {
+    .panel-block {
+      margin-bottom: 20px;
+    }
+
+    .block-title {
+      margin-bottom: 15px;
+    }
+  }
+}
+
+.top-menu {
+  flex-grow: 1;
+  width: $menu-width;
+}
+
+.logged-in-block {
+  margin-bottom: 20px;
+  background-color: rgba(255, 255, 255, 0.15);
+
+  > div:first-child {
+    height: 80px;
     display: flex;
     align-items: center;
-    justify-content: center;
-    margin-bottom: 35px;
+    justify-content: left;
+  }
+}
 
-    img {
-      @include avatar(34px);
+my-notification {
+  @include margin-left(auto);
+  @include margin-right(15px);
+}
 
-      margin-left: 20px;
-      margin-right: 10px;
+.logged-in-more {
+  @mixin display-hints($is-mobile: false) {
+    background-color: rgba(255, 255, 255, 0.15);
+
+    @if $is-mobile {
+      .dropdown-toggle-indicator {
+        display: inherit !important;
+      }
+
+      .dropdown-toggle {
+        max-width: 88% !important;
+      }
     }
+  }
 
-    .logged-in-info {
-      flex-grow: 1;
+  $main-radius: 25px;
 
-      .logged-in-username {
-        font-size: 16px;
-        font-weight: $font-semibold;
-        color: $menu-color;
-        cursor: pointer;
+  @include margin-left(13px);
 
-        @include disable-default-a-behaviour;
-      }
+  flex: 1;
+  border-radius: $main-radius;
+  transition: all .1s ease-in-out;
+  cursor: pointer;
+  line-height: 1;
 
-      .logged-in-email {
-        font-size: 13px;
-        color: #C6C6C6;
-        white-space: nowrap;
-        overflow: hidden;
-        text-overflow: ellipsis;
-        max-width: 140px;
-      }
+  &.show {
+    background-color: rgba(255, 255, 255, 0.2);
+    box-shadow: inset 0 3px 5px rgba(0, 0, 0, .325);
+  }
+
+  &:hover {
+    @include display-hints;
+  }
+
+  /* smartphones and touchscreens */
+  @media (hover: none) and (pointer: coarse) {
+    @include display-hints($is-mobile: true);
+
+    /* fill space when on mobile */
+    max-width: calc(100% - 80px);
+
+    .dropdown-toggle {
+      max-width: 100%;
     }
 
-    .logged-in-more {
-      margin-right: 20px;
+    .logged-in-info {
+      max-width: calc(100% - 45px) !important;
+    }
+  }
 
-      .glyphicon {
-        cursor: pointer;
-        font-size: 18px;
+  .dropdown-toggle-indicator {
+    position: relative;
+    width: 0;
+    display: none;
+
+    span {
+      position: absolute;
+      right: -35px;
+      top: -8px;
+      color: #808080;
+      width: $main-radius;
+    }
+  }
 
-        &::after {
-          border: none;
-        }
-      }
+  .dropdown-toggle {
+    &::after {
+      border: 0;
     }
   }
 
-  .button-block {
-    margin: 30px 25px 35px 25px;
+  .dropdown-toggle:first-child {
+    display: flex;
+    align-items: center;
+    padding: 5px 7px;
+    border-radius: $main-radius;
+  }
+}
 
-    .login-button {
-      @include peertube-button-link;
-      @include orange-button;
+my-actor-avatar {
+  @include margin-right(10px);
+}
 
-      display: block;
-      width: 100%;
-      margin-bottom: 10px;
+.logged-in-info {
+  max-width: 105px;
+
+  flex-grow: 1;
+}
+
+.logged-in-display-name,
+.logged-in-username {
+  @include ellipsis;
+}
+
+.logged-in-display-name {
+  @include disable-default-a-behaviour;
+
+  font-size: 16px;
+  font-weight: $font-semibold;
+  color: pvar(--menuForegroundColor);
+}
+
+.logged-in-username {
+  font-size: 13px;
+  color: #C6C6C6;
+  margin-top: 3px;
+}
+
+.logged-in-menu {
+  display: flex;
+  flex-direction: column;
+  align-items: flex-start;
+  border-top: 1px solid var(--greyForegroundColor);
+  line-height: $line-height-normal;
+
+  a {
+    $icon-size: 13px;
+    $additional-margin: math.div($menu-link-icon-size - $icon-size, 2);
+
+    font-size: 14px;
+    width: 100%;
+    min-height: 35px;
+
+    my-global-icon {
+      // Keep aligned with other icons
+      @include margin-left($additional-margin);
+
+      width: $icon-size;
+      height: $icon-size;
     }
 
-    .create-account-button {
-      @include peertube-button-link;
+    &.active,
+    &:hover,
+    &:focus-visible {
+      my-global-icon {
+        @include apply-svg-color(var(--menuForegroundColor));
+      }
+    }
 
-      display: block;
-      width: 100%;
+    &.active {
+      $border-left-width: 4px;
 
-      color: #fff;
-      background-color: rgba(255, 255, 255, 0.25);
+      font-weight: $font-semibold;
+      border-left: $border-left-width solid var(--mainColor);
 
-      &:hover {
-        background-color: rgba(255, 255, 255, 0.28);
+      my-global-icon {
+        @include margin-left($additional-margin - $border-left-width);
       }
     }
   }
+}
+
+.login-buttons-block {
+  margin: 30px 25px 35px;
+
+  > a {
+    display: block;
+    width: 100%;
+
+    &:not(:last-child) {
+      margin-bottom: 10px;
+    }
+  }
+}
+
+.create-account-button {
+  color: #fff;
+  background-color: rgba(255, 255, 255, 0.25);
+
+  &:hover {
+    background-color: rgba(255, 255, 255, 0.28);
+  }
+}
+
+.menu-block,
+.footer-block {
+  margin-bottom: 15px;
 
   .block-title {
+    @include ellipsis;
+    @include margin-left(26px);
+    @include margin-right(30px);
+
     text-transform: uppercase;
     font-weight: $font-bold; // Bold
     font-size: 13px;
     margin-bottom: 25px;
-    margin-left: 26px;
   }
 
-  .panel-block {
-    margin-bottom: 45px;
+  a {
+    min-height: 40px;
+  }
+}
 
-    a {
-      display: flex;
-      align-items: center;
-      padding-left: $menu-left-padding;
-      color: $menu-color;
-      cursor: pointer;
-      height: 40px;
-      font-size: 16px;
-      transition: background-color .1s ease-in-out;
-      @include disable-default-a-behaviour;
+.footer {
+  width: $menu-width;
+  padding-bottom: 15px;
+}
 
-      &:hover {
-        background-color: rgba(255, 255, 255, 0.15);
-      }
+.footer-bottom {
+  display: flex;
+  flex-direction: column;
+  padding: 0 $menu-lateral-padding;
+}
 
-      .icon {
-        @include icon(22px);
+.footer-links {
+  &,
+  > div {
+    display: flex;
+    flex-wrap: wrap;
+  }
 
-        margin-right: 18px;
+  a,
+  span[role=button] {
+    @include margin-right(8px);
+
+    display: inline-block;
+    text-decoration: none;
+    color: pvar(--menuForegroundColor);
+    opacity: $footer-links-base-opacity;
+    white-space: nowrap;
+    font-size: 90%;
+    font-weight: 500;
+    line-height: 1.4rem;
+  }
+}
 
-        &.icon-videos-subscriptions {
-          position: relative;
-          top: -1px;
-          background-image: url('../../assets/images/menu/subscriptions.svg');
-        }
+.footer-copyleft small a {
+  @include disable-default-a-behaviour;
 
-        &.icon-videos-overview {
-          position: relative;
-          background-image: url('../../assets/images/menu/globe.svg');
-        }
+  color: pvar(--menuForegroundColor);
+  opacity: $footer-links-base-opacity - .2;
+}
 
-        &.icon-videos-trending {
-          position: relative;
-          top: -1px;
-          background-image: url('../../assets/images/menu/trending.svg');
-        }
+.dropdown {
+  z-index: #{z('menu') + 1} !important;
+}
 
-        &.icon-videos-recently-added {
-          width: 23px;
-          height: 23px;
-          background-image: url('../../assets/images/menu/recently-added.svg');
-        }
+.dropdown-menu {
+  width: calc(100% + 40px);
+}
 
-        &.icon-videos-local {
-          width: 23px;
-          height: 23px;
+.dropdown-item {
+  @include dropdown-with-icon-item;
 
-          position: relative;
-          top: -1px;
+  cursor: pointer;
+  display: flex;
+  align-items: center;
 
-          background-image: url('../../assets/images/menu/home.svg');
-        }
+  i.glyphicon-menu-right {
+    opacity: .4;
+  }
 
-        &.icon-administration {
-          width: 23px;
-          height: 23px;
+  &:hover {
+    .hover-display-toggle {
+      display: none;
+    }
 
-          background-image: url('../../assets/images/menu/administration.svg');
-        }
+    .hover-display-toggle[hidden] {
+      display: inherit !important;
+    }
+  }
+}
+
+.more-settings {
+  text-transform: uppercase;
+  font-size: 80%;
+  color: #6c757d;
+}
 
-        &.icon-about  {
-          width: 23px;
-          height: 23px;
+@media screen and (max-width: $mobile-view) {
+  .menu-wrapper {
+    width: 100% !important;
 
-          background-image: url('../../assets/images/menu/about.svg');
-        }
-      }
+    menu {
+      overflow-y: auto;
     }
   }
 
+  .top-menu,
   .footer {
-    padding-bottom: 15px;
-    padding-left: $menu-left-padding;
-
-    .language, .color-palette {
-      display: inline-block;
-      color: $menu-bottom-color;
-      cursor: pointer;
-      font-size: 12px;
-      font-weight: $font-semibold;
+    width: 100% !important;
+  }
+
+  .dropdown-menu {
+    width: calc(100vw - 30px);
+  }
 
-      .icon {
-        @include icon(28px);
-        opacity: 0.9;
+  .dropdown-item:hover,
+  .dropdown-item:active {
+    &.settings-sensitive my-global-icon ::ng-deep svg {
+      margin-top: 0 !important;
+    }
+  }
+}
 
-        &.icon-language  {
-          position: relative;
-          top: -1px;
-          width: 28px;
-          height: 24px;
+my-global-icon {
+  &[iconName=playlists] {
+    @include margin-right(16px);
 
-          background-image: url('../../assets/images/menu/language.png');
-        }
+    height: 24px;
+    width: 24px;
+  }
 
-        &.icon-moonsun  {
-          margin-left: 10px;
-          position: relative;
-          top: -1px;
-          width: 24px;
-          height: 24px;
+  &[iconName=videos] {
+    position: relative;
+    right: -1px;
+  }
 
-          background-image: url('../../assets/images/menu/moonsun.svg');
-        }
+  &[iconName=channel] {
+    margin-top: -2px;
+  }
 
-        &:hover {
-          opacity: 1;
-        }
-      }
-    }
+  &[iconName='sign-out'] {
+    position: relative;
+    right: -2px;
+    height: 20px;
+    width: 20px;
   }
 }