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;
}