mirror of
https://github.com/penpot/penpot.git
synced 2026-08-15 17:29:00 +00:00
310 lines
6.7 KiB
SCSS
310 lines
6.7 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 INC Sucursal en España SL
|
|
|
|
@use "ds/_borders.scss" as *;
|
|
@use "ds/_sizes.scss" as *;
|
|
@use "ds/typography.scss" as *;
|
|
@use "ds/colors.scss" as *;
|
|
@use "ds/mixins.scss" as *;
|
|
@use "ds/z-index.scss" as *;
|
|
@use "ds/_utils.scss" as *;
|
|
|
|
.custom-select {
|
|
@include custom-scrollbar;
|
|
@include use-typography("body-small");
|
|
|
|
--border-color: var(--color-background-tertiary);
|
|
--bg-color: var(--color-background-tertiary);
|
|
--icon-color: var(--color-foreground-secondary);
|
|
--text-color: var(--color-foreground-primary);
|
|
|
|
position: relative;
|
|
display: grid;
|
|
grid-template-columns: 1fr auto;
|
|
align-items: center;
|
|
block-size: $sz-32;
|
|
inline-size: 100%;
|
|
margin: 0;
|
|
padding: var(--sp-s);
|
|
border-radius: $br-8;
|
|
background-color: var(--bg-color);
|
|
border: $b-1 solid var(--border-color);
|
|
color: var(--text-color);
|
|
cursor: pointer;
|
|
|
|
&.icon {
|
|
grid-template-columns: auto 1fr auto;
|
|
}
|
|
|
|
&:hover {
|
|
--bg-color: var(--color-background-quaternary);
|
|
--border-color: var(--color-background-tertiary);
|
|
--icon-color: var(--color-foreground-primary);
|
|
}
|
|
|
|
&:has(*:focus-visible) {
|
|
--bg-color: var(--color-background-tertiary);
|
|
--border-color: var(--color-accent-primary);
|
|
}
|
|
}
|
|
|
|
.searchable-select {
|
|
--searchable-select-bg-color: var(--color-background-tertiary);
|
|
--searchable-select-icon-color: var(--color-foreground-secondary);
|
|
--searchable-select-outline-color: none;
|
|
|
|
background: var(--searchable-select-bg-color);
|
|
outline: $b-1 solid var(--searchable-select-outline-color);
|
|
|
|
&:hover {
|
|
--searchable-select-bg-color: var(--color-background-quaternary);
|
|
}
|
|
|
|
&:has(*:focus-visible) {
|
|
--searchable-select-bg-color: var(--color-background-primary);
|
|
--searchable-select-outline-color: var(--color-accent-primary);
|
|
}
|
|
|
|
&:has(*:disabled) {
|
|
--searchable-select-bg-color: var(--color-background-primary);
|
|
--searchable-select-outline-color: var(--color-background-quaternary);
|
|
}
|
|
|
|
&[data-option-focused="true"]:has(*:focus-visible) {
|
|
--searchable-select-bg-color: var(--color-background-tertiary);
|
|
--searchable-select-outline-color: none;
|
|
}
|
|
}
|
|
|
|
.disabled {
|
|
--bg-color: var(--color-background-primary);
|
|
--border-color: var(--color-background-quaternary);
|
|
--icon-color: var(--color-foreground-secondary);
|
|
--text-color: var(--color-foreground-secondary);
|
|
|
|
pointer-events: none;
|
|
cursor: default;
|
|
}
|
|
|
|
.dropdown-button {
|
|
display: flex;
|
|
justify-content: center;
|
|
align-items: center;
|
|
margin-inline-end: var(--sp-xxs);
|
|
|
|
svg {
|
|
display: flex;
|
|
align-items: center;
|
|
gap: var(--sp-xxs);
|
|
color: transparent;
|
|
fill: none;
|
|
block-size: $sz-12;
|
|
inline-size: $sz-12;
|
|
stroke-width: 1.33px;
|
|
stroke: var(--color-foreground-secondary);
|
|
transform: rotate(90deg);
|
|
}
|
|
}
|
|
|
|
.current-icon {
|
|
display: flex;
|
|
justify-content: center;
|
|
align-items: center;
|
|
inline-size: $sz-24;
|
|
padding-inline-end: var(--sp-xs);
|
|
|
|
svg {
|
|
display: flex;
|
|
align-items: center;
|
|
gap: var(--sp-xxs);
|
|
color: transparent;
|
|
fill: none;
|
|
block-size: $sz-12;
|
|
inline-size: $sz-12;
|
|
stroke-width: 1.33px;
|
|
visibility: hidden;
|
|
stroke: var(--color-foreground-secondary);
|
|
}
|
|
}
|
|
|
|
.custom-select-dropdown {
|
|
box-shadow: 0 0 $sz-12 0 var(--color-shadow-dark);
|
|
position: absolute;
|
|
top: $sz-32;
|
|
left: 0;
|
|
inline-size: 100%;
|
|
max-block-size: var(--menu-max-height, px2rem(300));
|
|
padding: var(--sp-xxs);
|
|
margin: 0;
|
|
margin-block-start: 1px;
|
|
border-radius: $br-8;
|
|
z-index: var(--z-index-dropdown);
|
|
overflow: hidden auto;
|
|
background-color: var(--color-background-tertiary);
|
|
color: var(--color-foreground-primary);
|
|
border: $b-2 solid var(--color-background-quaternary);
|
|
|
|
.separator {
|
|
margin: 0;
|
|
block-size: $sz-12;
|
|
border-block-start: $b-1 solid var(--color-background-primary);
|
|
}
|
|
|
|
&[data-direction="up"] {
|
|
bottom: $sz-32;
|
|
top: auto;
|
|
max-block-size: var(--menu-max-height-up, px2rem(300));
|
|
}
|
|
}
|
|
|
|
.current-label-input {
|
|
@include text-ellipsis;
|
|
|
|
inline-size: 100%;
|
|
block-size: 100%;
|
|
margin: 0;
|
|
padding: 0;
|
|
border: none;
|
|
background-color: transparent;
|
|
color: inherit;
|
|
font: inherit;
|
|
outline: none;
|
|
cursor: pointer;
|
|
|
|
&::placeholder {
|
|
color: inherit;
|
|
opacity: 1;
|
|
}
|
|
|
|
&:focus {
|
|
cursor: text;
|
|
}
|
|
|
|
&:disabled {
|
|
cursor: default;
|
|
}
|
|
}
|
|
|
|
.custom-select-no-matches {
|
|
@include use-typography("body-small");
|
|
|
|
padding: var(--sp-s) var(--sp-m);
|
|
color: var(--color-foreground-secondary);
|
|
text-align: center;
|
|
pointer-events: none;
|
|
}
|
|
|
|
.custom-select-dropdown[data-direction="up"] {
|
|
bottom: $sz-32;
|
|
top: auto;
|
|
}
|
|
|
|
.checked-element {
|
|
@include use-typography("body-small");
|
|
|
|
display: flex;
|
|
align-items: center;
|
|
gap: var(--sp-s);
|
|
block-size: $sz-32;
|
|
padding: 0 var(--sp-s);
|
|
border-radius: $br-6;
|
|
cursor: pointer;
|
|
color: var(--color-foreground-primary);
|
|
|
|
&:hover {
|
|
background-color: var(--color-background-quaternary);
|
|
color: var(--color-foreground-primary);
|
|
|
|
svg {
|
|
stroke: var(--color-foreground-primary);
|
|
}
|
|
}
|
|
|
|
span {
|
|
@include text-ellipsis;
|
|
|
|
display: flex;
|
|
align-items: center;
|
|
|
|
svg {
|
|
display: flex;
|
|
align-items: center;
|
|
gap: var(--sp-xxs);
|
|
color: transparent;
|
|
fill: none;
|
|
block-size: $sz-12;
|
|
inline-size: $sz-12;
|
|
stroke-width: 1.33px;
|
|
visibility: hidden;
|
|
stroke: var(--color-foreground-secondary);
|
|
}
|
|
}
|
|
|
|
.icon {
|
|
display: flex;
|
|
justify-content: center;
|
|
align-items: center;
|
|
block-size: $sz-24;
|
|
inline-size: $sz-24;
|
|
padding-inline-end: var(--sp-xs);
|
|
|
|
svg {
|
|
display: flex;
|
|
align-items: center;
|
|
gap: var(--sp-xxs);
|
|
color: transparent;
|
|
fill: none;
|
|
block-size: $sz-16;
|
|
width: $sz-16;
|
|
stroke-width: px2rem(1);
|
|
visibility: hidden;
|
|
stroke: var(--color-foreground-secondary);
|
|
}
|
|
}
|
|
|
|
.label {
|
|
flex-grow: 1;
|
|
inline-size: 100%;
|
|
}
|
|
|
|
.check-icon {
|
|
display: flex;
|
|
justify-content: center;
|
|
align-items: center;
|
|
|
|
svg {
|
|
display: flex;
|
|
align-items: center;
|
|
gap: var(--sp-xxs);
|
|
color: transparent;
|
|
fill: none;
|
|
block-size: $sz-12;
|
|
inline-size: $sz-12;
|
|
stroke-width: 1.33px;
|
|
visibility: hidden;
|
|
stroke: var(--color-foreground-secondary);
|
|
}
|
|
}
|
|
|
|
&.is-selected {
|
|
color: var(--color-accent-primary);
|
|
background-color: var(--color-background-quaternary);
|
|
|
|
.check-icon svg {
|
|
stroke: var(--color-foreground-primary);
|
|
visibility: visible;
|
|
}
|
|
}
|
|
|
|
&.disabled {
|
|
display: none;
|
|
}
|
|
}
|
|
|
|
.current-label {
|
|
@include text-ellipsis;
|
|
}
|