mirror of
https://github.com/penpot/penpot.git
synced 2026-09-22 20:06:16 +00:00
403 lines
8.0 KiB
SCSS
403 lines
8.0 KiB
SCSS
// This Source Code Form is subject to the terms of the Mozilla Public
|
|
// License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
// file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
|
//
|
|
// Copyright (c) KALEIDOS SUBSIDIARY SL
|
|
|
|
@use "ds/typography.scss" as t;
|
|
@use "ds/colors.scss" as *;
|
|
@use "ds/spacing.scss" as *;
|
|
@use "ds/_borders.scss" as *;
|
|
@use "ds/_sizes.scss" as *;
|
|
@use "ds/_utils.scss" as *;
|
|
@use "ds/z-index.scss" as *;
|
|
@use "common/refactor/common-dashboard";
|
|
@use "common/refactor/common-refactor.scss" as deprecated;
|
|
|
|
// SIDEBAR COMPONENT
|
|
.dashboard-sidebar {
|
|
display: grid;
|
|
grid-row: 1 / span 2;
|
|
grid-column: 1 / span 2;
|
|
grid-template-rows: auto 1fr auto;
|
|
height: 100%;
|
|
width: 100%;
|
|
margin: 0 var(--sp-l) 0 0;
|
|
border-right: $b-1 solid var(--panel-border-color);
|
|
background-color: var(--panel-background-color);
|
|
}
|
|
|
|
// SIDEBAR CONTENT COMPONENT
|
|
.sidebar-content-wrapper {
|
|
display: flex;
|
|
flex-direction: column;
|
|
min-height: 0;
|
|
height: 100%;
|
|
overflow: hidden;
|
|
}
|
|
|
|
.sidebar-content {
|
|
display: grid;
|
|
grid-template-rows: auto auto auto auto 1fr;
|
|
gap: var(--sp-xxl);
|
|
flex: 1;
|
|
min-height: 0;
|
|
padding: 0;
|
|
overflow: hidden auto;
|
|
}
|
|
|
|
.sidebar-content-nitrate {
|
|
padding: var(--sp-m) 0 0 0;
|
|
border-block-start: $b-1 solid var(--color-background-quaternary);
|
|
}
|
|
|
|
.separator {
|
|
height: var(--sp-xxs);
|
|
width: 94%;
|
|
margin-left: 3%;
|
|
}
|
|
|
|
.overflow-separator {
|
|
border-bottom: $b-1 solid var(--color-background-quaternary);
|
|
}
|
|
|
|
.sidebar-section-title {
|
|
@include t.use-typography("headline-small");
|
|
|
|
padding: 0 var(--sp-s) var(--sp-s) var(--sp-xxl);
|
|
color: var(--color-foreground-secondary);
|
|
}
|
|
|
|
// Sections
|
|
.sidebar-nav {
|
|
margin: 0;
|
|
user-select: none;
|
|
}
|
|
|
|
.pinned-projects {
|
|
overflow-y: auto;
|
|
}
|
|
|
|
.sidebar-nav-item {
|
|
cursor: pointer;
|
|
|
|
&:hover {
|
|
background-color: var(--sidebar-element-background-color-hover);
|
|
|
|
span {
|
|
color: var(--sidebar-element-foreground-color-hover);
|
|
}
|
|
}
|
|
|
|
&.current {
|
|
background-color: var(--sidebar-element-background-color-selected);
|
|
|
|
.element-title {
|
|
color: var(--sidebar-element-foreground-color-selected);
|
|
}
|
|
}
|
|
}
|
|
|
|
.recent-projects svg {
|
|
stroke: var(--main-icon-foreground);
|
|
}
|
|
|
|
.sidebar-link {
|
|
display: block;
|
|
padding: var(--sp-s) var(--sp-s) var(--sp-s) var(--sp-xxl);
|
|
font-weight: deprecated.$fw400;
|
|
width: 100%;
|
|
|
|
&:hover {
|
|
text-decoration: none;
|
|
}
|
|
}
|
|
|
|
.project-element {
|
|
padding: var(--sp-s) var(--sp-s) var(--sp-s) var(--sp-xxl);
|
|
}
|
|
|
|
.element-title {
|
|
@include deprecated.text-ellipsis;
|
|
|
|
width: deprecated.$s-256;
|
|
color: var(--color-foreground-primary);
|
|
font-size: deprecated.$fs-14;
|
|
}
|
|
|
|
// Pinned projects
|
|
|
|
.sidebar-empty-placeholder {
|
|
padding: var(--sp-m);
|
|
color: var(--empty-message-foreground-color);
|
|
display: flex;
|
|
align-items: center;
|
|
}
|
|
|
|
.pin-icon {
|
|
@extend %button-icon-small;
|
|
|
|
stroke: var(--icon-foreground);
|
|
margin: 0 var(--sp-m);
|
|
}
|
|
|
|
.empty-text {
|
|
font-size: deprecated.$fs-12;
|
|
}
|
|
|
|
// Search
|
|
|
|
.sidebar-search {
|
|
position: relative;
|
|
display: grid;
|
|
grid-template-columns: 1fr;
|
|
align-items: center;
|
|
border: $b-1 solid transparent;
|
|
margin: 0 var(--sp-l);
|
|
border-radius: $br-8;
|
|
background-color: var(--search-bar-input-background-color);
|
|
}
|
|
|
|
.input-text {
|
|
@include t.use-typography("title-small");
|
|
|
|
height: $sz-40;
|
|
width: 100%;
|
|
padding: $sz-6 var(--sp-m);
|
|
margin: 0;
|
|
border: transparent;
|
|
border-radius: $br-8;
|
|
background: transparent;
|
|
color: var(--search-bar-foreground-color);
|
|
|
|
&:focus,
|
|
&:focus-within,
|
|
&:focus-visible {
|
|
outline: none;
|
|
border: $b-1 solid var(--search-bar-input-border-color-focus);
|
|
}
|
|
|
|
::placeholder {
|
|
color: var(--search-bar-placeholder-foreground-color);
|
|
}
|
|
}
|
|
|
|
.search-btn {
|
|
@include deprecated.button-style;
|
|
@include deprecated.flex-center;
|
|
|
|
position: absolute;
|
|
right: 0;
|
|
height: var(--sp-xxl);
|
|
width: var(--sp-xxxl);
|
|
padding: 0 var(--sp-s);
|
|
}
|
|
|
|
.search-icon,
|
|
.clear-search-btn {
|
|
@extend %button-icon;
|
|
|
|
--sidebar-search-foreground-color: var(--search-bar-icon-foreground-color);
|
|
|
|
stroke: var(--sidebar-search-foreground-color);
|
|
}
|
|
|
|
.clear-search-btn:hover {
|
|
--sidebar-search-foreground-color: var(--search-bar-icon-foreground-color-hover);
|
|
}
|
|
|
|
// Profile
|
|
.profile-section {
|
|
position: relative;
|
|
display: grid;
|
|
grid-template-columns: 1fr auto;
|
|
padding: var(--sp-m) var(--sp-l);
|
|
border-top: $b-1 solid var(--panel-border-color);
|
|
background-color: var(--profile-section-background-color);
|
|
cursor: pointer;
|
|
}
|
|
|
|
.profile {
|
|
@include deprecated.button-style;
|
|
|
|
display: grid;
|
|
grid-template-columns: auto 1fr;
|
|
gap: var(--sp-s);
|
|
cursor: pointer;
|
|
text-align: left;
|
|
}
|
|
|
|
.profile-fullname {
|
|
@include t.use-typography("title-small");
|
|
@include deprecated.text-ellipsis;
|
|
|
|
align-self: center;
|
|
max-width: var(--sp-l) 0;
|
|
color: var(--profile-foreground-color);
|
|
}
|
|
|
|
.profile-img {
|
|
height: $sz-40;
|
|
width: $sz-40;
|
|
border-radius: $br-circle;
|
|
}
|
|
|
|
.profile-dropdown {
|
|
@extend %menu-dropdown;
|
|
|
|
inset-inline-start: var(--sp-s);
|
|
inset-block-end: px2rem(72); // 72 is the height of the profile button
|
|
min-width: calc(100% - var(--sp-s));
|
|
|
|
// TODO ADD animation fadeInUp
|
|
}
|
|
|
|
.profile-dropdown-item {
|
|
@extend %menu-item-base;
|
|
@include t.use-typography("body-medium");
|
|
|
|
block-size: $sz-40;
|
|
margin-block-end: var(--sp-xs);
|
|
padding: var(--sp-s);
|
|
padding-inline-start: var(--sp-l);
|
|
|
|
&:hover {
|
|
color: var(--menu-foreground-color-hover);
|
|
|
|
.open-arrow {
|
|
--icon-stroke-color: var(--menu-foreground-color-hover);
|
|
}
|
|
}
|
|
}
|
|
|
|
.profile-dropdown-item .open-arrow {
|
|
@include deprecated.flex-center;
|
|
}
|
|
|
|
.profile-dropdown-item .open-arrow svg {
|
|
@extend %button-icon;
|
|
|
|
stroke: var(--icon-foreground);
|
|
}
|
|
|
|
.sub-menu {
|
|
@extend %menu-dropdown;
|
|
|
|
inset-inline-start: calc(deprecated.$s-292 + var(--sp-s));
|
|
min-width: deprecated.$s-192;
|
|
}
|
|
|
|
// Each submenu is positioned via its bottom edge; the visual top lands
|
|
// at `inset-block-end + submenu_height`. Help & Learning (3 items,
|
|
// taller) needs the same inset as Community (2 items, shorter) so that
|
|
// its top edge sits one row above Community — aligning with the
|
|
// "Help & Learning" trigger row in the parent menu.
|
|
.sub-menu.help-learning {
|
|
inset-block-end: deprecated.$s-120;
|
|
}
|
|
|
|
.sub-menu.community {
|
|
inset-block-end: deprecated.$s-120;
|
|
}
|
|
|
|
.sub-menu.about {
|
|
inset-block-end: $sz-24;
|
|
}
|
|
|
|
.submenu-item {
|
|
@extend %menu-item-base;
|
|
@include t.use-typography("body-medium");
|
|
|
|
block-size: $sz-40;
|
|
margin-block-end: var(--sp-xs);
|
|
padding-block: var(--sp-s);
|
|
padding-inline: var(--sp-l);
|
|
|
|
&:hover {
|
|
color: var(--menu-foreground-color-hover);
|
|
}
|
|
|
|
&.checking {
|
|
color: var(--color-foreground-secondary);
|
|
pointer-events: none;
|
|
|
|
&:hover {
|
|
color: var(--color-foreground-secondary);
|
|
background-color: transparent;
|
|
}
|
|
}
|
|
}
|
|
|
|
.checking-icon {
|
|
flex-shrink: 0;
|
|
animation: spin-animation 1s infinite linear;
|
|
}
|
|
|
|
.submenu-separator {
|
|
border-top: $b-1 solid var(--color-background-quaternary);
|
|
margin: 0;
|
|
}
|
|
|
|
.about-penpot {
|
|
align-items: baseline;
|
|
display: grid;
|
|
grid-template-columns: auto 1fr;
|
|
}
|
|
|
|
.menu-version {
|
|
@include t.use-typography("code-font");
|
|
@include deprecated.text-ellipsis;
|
|
|
|
color: var(--color-foreground-secondary);
|
|
margin-inline-start: var(--sp-s);
|
|
text-transform: uppercase;
|
|
}
|
|
|
|
.profile-separator {
|
|
height: $sz-6;
|
|
border-top: $b-1 solid var(--color-background-quaternary);
|
|
}
|
|
|
|
.item-with-icon {
|
|
display: grid;
|
|
grid-template-columns: auto 1fr;
|
|
gap: var(--sp-s);
|
|
}
|
|
|
|
.exit-icon {
|
|
@extend %button-icon;
|
|
|
|
stroke: var(--icon-foreground);
|
|
}
|
|
|
|
.upgrade-plan-section {
|
|
@include deprecated.button-style;
|
|
|
|
display: flex;
|
|
justify-content: space-between;
|
|
border: $b-1 solid var(--color-background-quaternary);
|
|
border-radius: var(--sp-s);
|
|
padding: var(--sp-m);
|
|
margin: var(--sp-m);
|
|
color: var(--color-foreground-secondary);
|
|
cursor: pointer;
|
|
}
|
|
|
|
.penpot-free {
|
|
@include t.use-typography("body-medium");
|
|
|
|
display: flex;
|
|
flex-direction: column;
|
|
text-align: left;
|
|
}
|
|
|
|
.no-limits {
|
|
@include t.use-typography("body-small");
|
|
}
|
|
|
|
.power-up {
|
|
@include t.use-typography("body-small");
|
|
|
|
color: var(--color-accent-tertiary);
|
|
}
|