You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

208 lines
4.6 KiB

@use 'sass:map';
@use 'mixins/mixins' as *;
@use 'mixins/var' as *;
@use 'common/var' as *;
$dropdown-item-line-height: () !default;
$dropdown-item-line-height: map.merge(
(
'large': 22px,
'default': 22px,
'small': 20px,
),
$dropdown-item-line-height
);
$dropdown-item-padding: () !default;
$dropdown-item-padding: map.merge(
(
'large': 7px 20px,
'default': 5px 16px,
'small': 2px 12px,
),
$dropdown-item-padding
);
$dropdown-item-divided-margin: () !default;
$dropdown-item-divided-margin: map.merge(
(
'large': 8px 0,
'default': 6px 0,
'small': 4px 0,
),
$dropdown-item-divided-margin
);
$dropdown-caret-width: () !default;
$dropdown-caret-width: map.merge($common-component-size, $dropdown-caret-width);
$dropdown-divider-width: 1px !default;
@include b(dropdown) {
@include set-component-css-var('dropdown', $dropdown);
display: inline-flex;
position: relative;
color: getCssVar('text-color', 'regular');
font-size: getCssVar('font-size', 'base');
line-height: 1;
vertical-align: top;
&.is-disabled {
color: getCssVar('text-color', 'placeholder');
cursor: not-allowed;
}
@include e(popper) {
@include set-component-css-var('dropdown', $dropdown);
// using attributes selector to override
@include picker-popper(
getCssVar('bg-color', 'overlay'),
1px solid getCssVar('border-color-light'),
getCssVar('dropdown-menu-box-shadow')
);
.#{$namespace}-dropdown-menu {
border: none;
}
#{& + '-selfdefine'} {
outline: none;
}
@include b(scrollbar__bar) {
z-index: calc(#{getCssVar('dropdown', 'menu-index')} + 1);
}
@include b(dropdown__list) {
list-style: none;
padding: 0;
margin: 0;
box-sizing: border-box;
}
}
& .#{$namespace}-dropdown__caret-button {
padding-left: 0;
padding-right: 0;
display: inline-flex;
justify-content: center;
align-items: center;
width: map.get($dropdown-caret-width, 'default');
border-left: none;
> span {
display: inline-flex;
}
&::before {
content: '';
position: absolute;
display: block;
width: 1px;
top: -1px;
bottom: -1px;
left: 0;
background: getCssVar('overlay-color', 'lighter');
}
&.#{$namespace}-button::before {
background: getCssVar('border-color');
opacity: 0.5;
}
& .#{$namespace}-dropdown__icon {
font-size: inherit;
padding-left: 0;
}
}
.#{$namespace}-dropdown-selfdefine {
// 自定义
outline: none;
}
@each $size in (large, small) {
@include m($size) {
.#{$namespace}-dropdown__caret-button {
width: map.get($dropdown-caret-width, $size);
}
}
}
}
$dropdown-menu-padding-vertical: () !default;
$dropdown-menu-padding-vertical: map.merge(
(
'large': 8px,
'default': 6px,
'small': 4px,
),
$dropdown-menu-padding-vertical
);
@include b(dropdown-menu) {
position: relative;
top: 0;
left: 0;
z-index: getCssVar('dropdown-menu-index');
padding: map.get($dropdown-menu-padding-vertical, 'default')-$border-width 0;
margin: 0;
background-color: getCssVar('bg-color', 'overlay');
border: none;
border-radius: getCssVar('border-radius-base');
box-shadow: none;
list-style: none;
@include e(item) {
display: flex;
align-items: center;
white-space: nowrap;
list-style: none;
line-height: map.get($dropdown-item-line-height, 'default');
padding: map.get($dropdown-item-padding, 'default');
margin: 0;
font-size: getCssVar('font-size', 'base');
color: getCssVar('text-color', 'regular');
cursor: pointer;
outline: none;
&:not(.is-disabled):hover,
&:not(.is-disabled):focus {
background-color: getCssVar('dropdown-menuItem-hover-fill');
color: getCssVar('dropdown-menuItem-hover-color');
}
i {
margin-right: 5px;
}
@include m(divided) {
margin: map.get($dropdown-item-divided-margin, 'default');
border-top: 1px solid getCssVar('border-color-lighter');
}
@include when(disabled) {
cursor: not-allowed;
color: getCssVar('text-color-disabled');
}
}
@each $size in (large, small) {
@include m($size) {
padding: map.get($dropdown-menu-padding-vertical, $size)-$border-width 0;
@include e(item) {
padding: map.get($dropdown-item-padding, $size);
line-height: map.get($dropdown-item-line-height, $size);
font-size: map.get($input-font-size, $size);
@include m(divided) {
margin: map.get($dropdown-item-divided-margin, $size);
}
}
}
}
}