This commit is contained in:
2025-11-03 17:03:57 +08:00
commit 7a04b85667
16804 changed files with 2492292 additions and 0 deletions

View File

@@ -0,0 +1,7 @@
@use 'mixins/mixins' as *;
@include b(affix) {
@include m(fixed) {
position: fixed;
}
}

View File

@@ -0,0 +1,115 @@
@use 'mixins/mixins' as *;
@use 'mixins/var' as *;
@use 'common/var' as *;
@include b(alert) {
@include set-component-css-var('alert', $alert);
width: 100%;
padding: getCssVar('alert', 'padding');
margin: 0;
box-sizing: border-box;
border-radius: getCssVar('alert', 'border-radius-base');
position: relative;
background-color: getCssVar('color', 'white');
overflow: hidden;
opacity: 1;
display: flex;
align-items: center;
transition: opacity getCssVar('transition-duration', 'fast');
@include when(light) {
.#{$namespace}-alert__close-btn {
color: getCssVar('text-color', 'placeholder');
}
}
@include when(dark) {
.#{$namespace}-alert__close-btn {
color: getCssVar('color', 'white');
}
.#{$namespace}-alert__description {
color: getCssVar('color', 'white');
}
}
@include when(center) {
justify-content: center;
}
@each $type in (primary, success, info, warning, error) {
@include m($type) {
@include css-var-from-global(
('alert', 'bg-color'),
('color', $type, 'light-9')
);
&.is-light {
background-color: getCssVar('alert', 'bg-color');
color: getCssVar('color', $type);
.#{$namespace}-alert__description {
color: getCssVar('color', $type);
}
}
&.is-dark {
background-color: getCssVar('color', $type);
color: getCssVar('color', 'white');
}
}
}
@include e(content) {
display: flex;
flex-direction: column;
gap: 4px;
}
& .#{$namespace}-alert__icon {
font-size: getCssVar('alert', 'icon-size');
width: getCssVar('alert', 'icon-size');
margin-right: 8px;
@include when(big) {
font-size: getCssVar('alert', 'icon-large-size');
width: getCssVar('alert', 'icon-large-size');
margin-right: 12px;
}
}
@include e(title) {
font-size: getCssVar('alert', 'title-font-size');
line-height: 24px;
&.with-description {
font-size: getCssVar('alert', 'title-with-description-font-size');
}
}
& .#{$namespace}-alert__description {
font-size: getCssVar('alert', 'description-font-size');
margin: 0;
}
& .#{$namespace}-alert__close-btn {
font-size: getCssVar('alert', 'close-font-size');
opacity: 1;
position: absolute;
top: 12px;
right: 16px;
cursor: pointer;
@include when(customed) {
font-style: normal;
font-size: getCssVar('alert', 'close-customed-font-size');
line-height: 24px;
top: 8px;
}
}
}
.#{$namespace}-alert-fade-enter-from,
.#{$namespace}-alert-fade-leave-active {
opacity: 0;
}

View File

@@ -0,0 +1,41 @@
@use 'sass:map';
@use 'mixins/mixins' as *;
@use 'mixins/var' as *;
@use 'common/var' as *;
@include b(anchor) {
@include e(item) {
overflow: hidden;
display: flex;
flex-direction: column;
}
@include e(link) {
font-size: getCssVar('anchor-font-size');
line-height: getCssVar('anchor-line-height');
padding: 4px 0;
color: getCssVar('anchor-color');
transition: color getCssVar('transition-duration');
white-space: nowrap;
text-decoration: none;
text-overflow: ellipsis;
overflow: hidden;
max-width: 100%;
outline: none;
cursor: pointer;
&:hover,
&:focus {
color: getCssVar('anchor-color');
}
@include when(active) {
color: getCssVar('anchor-active-color');
}
}
& .#{$namespace}-anchor__list .#{$namespace}-anchor__item a {
display: inline-block;
}
}

View File

@@ -0,0 +1,93 @@
@use 'sass:map';
@use 'mixins/mixins' as *;
@use 'mixins/var' as *;
@use 'common/var' as *;
@include b(anchor) {
@include set-component-css-var('anchor', $anchor);
position: relative;
background-color: getCssVar('anchor-bg-color');
@include e(marker) {
position: absolute;
background-color: getCssVar('anchor-marker-bg-color');
border-radius: 4px;
opacity: 0;
z-index: 0;
}
&.#{$namespace}-anchor--vertical {
@include e(marker) {
width: 4px;
height: 14px;
top: 8px;
left: 0;
transition:
top 0.25s ease-in-out,
opacity 0.25s;
}
@include e(list) {
padding-left: getCssVar('anchor-padding-indent');
}
&.#{$namespace}-anchor--underline {
&::before {
position: absolute;
left: 0;
width: 2px;
height: 100%;
background-color: rgba(5, 5, 5, 0.06);
content: '';
}
@include e(marker) {
width: 2px;
border-radius: unset;
}
}
}
&.#{$namespace}-anchor--horizontal {
@include e(marker) {
height: 2px;
width: 20px;
bottom: 0;
transition:
left 0.25s ease-in-out,
opacity 0.25s,
width 0.25s;
}
@include e(list) {
display: flex;
padding-bottom: 4px;
@include e(item) {
padding-left: 16px;
&:first-child {
padding-left: 0;
}
}
}
&.#{$namespace}-anchor--underline {
&::before {
position: absolute;
bottom: 0;
width: 100%;
height: 2px;
background-color: rgba(5, 5, 5, 0.06);
content: '';
}
@include e(marker) {
height: 2px;
border-radius: unset;
}
}
}
}

View File

@@ -0,0 +1,8 @@
@use 'mixins/mixins' as *;
@include b(aside) {
overflow: auto;
box-sizing: border-box;
flex-shrink: 0;
width: var(#{getCssVarName('aside', 'width')}, 300px);
}

View File

@@ -0,0 +1,96 @@
@use 'sass:map';
@use 'mixins/mixins' as *;
@use 'mixins/utils' as *;
@use 'common/var' as *;
@include b(autocomplete) {
@include set-component-css-var('input', $input);
}
@include b(autocomplete) {
width: getCssVar('input-width');
position: relative;
display: inline-block;
@include e(popper) {
@include picker-popper(
getCssVar('bg-color', 'overlay'),
1px solid getCssVar('border-color', 'light'),
getCssVar('box-shadow', 'light')
);
}
}
@include b(autocomplete-suggestion) {
border-radius: getCssVar('border-radius', 'base');
box-sizing: border-box;
@include e(header) {
padding: 10px;
border-bottom: 1px solid getCssVar('border-color', 'lighter');
}
@include e(footer) {
padding: 10px;
border-top: 1px solid getCssVar('border-color', 'lighter');
}
@include e(wrap) {
max-height: 280px;
padding: 10px 0;
box-sizing: border-box;
}
@include e(list) {
margin: 0;
padding: 0;
}
& li {
padding: 0 20px;
margin: 0;
line-height: 34px;
cursor: pointer;
color: getCssVar('text-color', 'regular');
font-size: getCssVar('font-size', 'base');
list-style: none;
text-align: left;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
&:hover {
background-color: map.get($select-option, 'hover-background');
}
&.highlighted {
background-color: map.get($select-option, 'hover-background');
}
&.divider {
margin-top: 6px;
border-top: 1px solid getCssVar('color', 'black');
}
&.divider:last-child {
margin-bottom: -6px;
}
}
@include when(loading) {
li {
text-align: center;
cursor: default;
height: 100px;
line-height: 100px;
font-size: 20px;
color: getCssVar('text-color', 'secondary');
@include utils-vertical-center;
&:hover {
background-color: getCssVar('bg-color', 'overlay');
}
}
}
}

View File

@@ -0,0 +1,55 @@
@use 'sass:map';
@use 'mixins/mixins' as *;
@use 'mixins/var' as *;
@use 'common/var' as *;
@include b(avatar) {
@include set-component-css-var('avatar', $avatar);
@include set-component-css-var('avatar-size', $avatar-size);
@include set-css-var-value(
('avatar', 'size'),
map.get($avatar-size, 'default')
);
display: inline-flex;
justify-content: center;
align-items: center;
box-sizing: border-box;
text-align: center;
overflow: hidden;
outline: none;
color: getCssVar('avatar', 'text-color');
background: getCssVar('avatar', 'bg-color');
width: getCssVar('avatar', 'size');
height: getCssVar('avatar', 'size');
font-size: getCssVar('avatar', 'text-size');
> img {
display: block;
width: 100%;
height: 100%;
}
@include m(circle) {
border-radius: 50%;
}
@include m(square) {
border-radius: getCssVar('avatar', 'border-radius');
}
@include m(icon) {
font-size: getCssVar('avatar', 'icon-size');
}
@each $size in (small, large) {
@include m($size) {
@include set-css-var-value(
('avatar', 'size'),
map.get($avatar-size, $size)
);
}
}
}

View File

@@ -0,0 +1,29 @@
@use 'mixins/mixins' as *;
@use 'mixins/var' as *;
@use 'common/var' as *;
@include b(backtop) {
@include set-component-css-var('backtop', $backtop);
position: fixed;
background-color: getCssVar('backtop', 'bg-color');
width: 40px;
height: 40px;
border-radius: 50%;
color: getCssVar('backtop', 'text-color');
display: flex;
align-items: center;
justify-content: center;
font-size: 20px;
box-shadow: getCssVar('box-shadow', 'lighter');
cursor: pointer;
z-index: 5;
&:hover {
background-color: getCssVar('backtop', 'hover-bg-color');
}
@include e(icon) {
font-size: 20px;
}
}

View File

@@ -0,0 +1,58 @@
@use 'mixins/mixins' as *;
@use 'mixins/var' as *;
@use 'common/var' as *;
@include b(badge) {
@include set-component-css-var('badge', $badge);
position: relative;
vertical-align: middle;
display: inline-block;
width: fit-content;
@include e(content) {
background-color: getCssVar('badge', 'bg-color');
border-radius: getCssVar('badge', 'radius');
color: getCssVar('color', 'white');
display: inline-flex;
justify-content: center;
align-items: center;
font-size: getCssVar('badge', 'font-size');
height: getCssVar('badge', 'size');
padding: 0 getCssVar('badge', 'padding');
white-space: nowrap;
border: 1px solid getCssVar('bg-color');
@include when(fixed) {
position: absolute;
top: 0;
right: calc(1px + #{getCssVar('badge', 'size')} / 2);
transform: translateY(-50%) translateX(100%);
z-index: getCssVar('index', 'normal');
@include when(dot) {
right: 5px;
}
}
@include when(dot) {
height: 8px;
width: 8px;
padding: 0;
right: 0;
border-radius: 50%;
}
@include when(hide-zero) {
display: none;
}
@each $type in (primary, success, warning, info, danger) {
@include m($type) {
background-color: getCssVar('color', $type);
}
}
}
}

View File

@@ -0,0 +1,3 @@
@use 'var.scss';
@use 'common/transition.scss';
@use 'icon.scss';

View File

@@ -0,0 +1,62 @@
@use 'mixins/mixins' as *;
@use 'mixins/utils' as *;
@use 'common/var' as *;
@include b(breadcrumb) {
font-size: 14px;
line-height: 1;
@include utils-clearfix;
@include e(separator) {
margin: 0 9px;
font-weight: bold;
color: getCssVar('text-color', 'placeholder');
&.#{$namespace}-icon {
margin: 0 6px;
font-weight: normal;
svg {
vertical-align: middle;
}
}
}
@include e(item) {
float: left;
display: inline-flex;
align-items: center;
@include e(inner) {
color: getCssVar('text-color', 'regular');
&.is-link,
& a {
font-weight: bold;
text-decoration: none;
transition: getCssVar('transition', 'color');
color: getCssVar('text-color', 'primary');
&:hover {
color: getCssVar('color-primary');
cursor: pointer;
}
}
}
&:last-child {
.#{$namespace}-breadcrumb__inner,
.#{$namespace}-breadcrumb__inner a {
&,
&:hover {
font-weight: normal;
color: getCssVar('text-color', 'regular');
cursor: text;
}
}
.#{$namespace}-breadcrumb__separator {
display: none;
}
}
}
}

View File

@@ -0,0 +1,80 @@
@use 'sass:map';
@use 'common/var' as *;
@use 'mixins/mixins' as *;
@use 'mixins/utils' as *;
@include b(button-group) {
display: inline-block;
vertical-align: middle;
@include utils-clearfix;
& > .#{$namespace}-button {
float: left;
position: relative;
& + .#{$namespace}-button {
margin-left: 0;
}
&:first-child {
border-top-right-radius: 0;
border-bottom-right-radius: 0;
}
&:last-child {
border-top-left-radius: 0;
border-bottom-left-radius: 0;
}
&:first-child:last-child {
border-top-right-radius: map.get($button-border-radius, 'default');
border-bottom-right-radius: map.get($button-border-radius, 'default');
border-top-left-radius: map.get($button-border-radius, 'default');
border-bottom-left-radius: map.get($button-border-radius, 'default');
&.is-round {
border-radius: getCssVar('border-radius', 'round');
}
&.is-circle {
border-radius: 50%;
}
}
&:not(:first-child):not(:last-child) {
border-radius: 0;
}
&:not(:last-child) {
margin-right: -1px;
}
&:hover,
&:focus,
&:active {
z-index: 1;
}
@include when(active) {
z-index: 1;
}
}
& > .#{$namespace}-dropdown {
& > .#{$namespace}-button {
border-top-left-radius: 0;
border-bottom-left-radius: 0;
border-left-color: getCssVar('button', 'divide-border-color');
}
}
@each $type in (primary, success, warning, danger, info) {
.#{$namespace}-button--#{$type} {
&:first-child {
border-right-color: getCssVar('button', 'divide-border-color');
}
&:last-child {
border-left-color: getCssVar('button', 'divide-border-color');
}
&:not(:first-child):not(:last-child) {
border-left-color: getCssVar('button', 'divide-border-color');
border-right-color: getCssVar('button', 'divide-border-color');
}
}
}
}

View File

@@ -0,0 +1,308 @@
@use 'sass:map';
@use 'common/var' as *;
@use 'mixins/button' as *;
@use 'mixins/mixins' as *;
@use 'mixins/utils' as *;
@use 'mixins/var' as *;
$button-icon-span-gap: () !default;
$button-icon-span-gap: map.merge(
(
'large': 8px,
'default': 6px,
'small': 4px,
),
$button-icon-span-gap
);
@include b(button) {
@include set-component-css-var('button', $button);
}
@include b(button) {
display: inline-flex;
justify-content: center;
align-items: center;
line-height: 1;
// min-height will expand when in flex
height: map.get($input-height, 'default');
white-space: nowrap;
cursor: pointer;
color: getCssVar('button', 'text-color');
text-align: center;
box-sizing: border-box;
outline: none;
transition: 0.1s;
font-weight: getCssVar('button', 'font-weight');
user-select: none;
vertical-align: middle;
-webkit-appearance: none;
background-color: getCssVar('button', 'bg-color');
border: getCssVar('border');
border-color: getCssVar('button', 'border-color');
&:hover {
color: getCssVar('button', 'hover', 'text-color');
border-color: getCssVar('button', 'hover', 'border-color');
background-color: getCssVar('button', 'hover', 'bg-color');
outline: none;
}
&:active {
color: getCssVar('button', 'active', 'text-color');
border-color: getCssVar('button', 'active', 'border-color');
background-color: getCssVar('button', 'active', 'bg-color');
outline: none;
}
&:focus-visible {
outline: 2px solid getCssVar('button', 'outline-color');
outline-offset: 1px;
transition:
outline-offset 0s,
outline 0s;
}
> span {
display: inline-flex;
align-items: center;
}
& + & {
margin-left: 12px;
}
& {
@include button-size(
map.get($button-padding-vertical, 'default') - $button-border-width,
map.get($button-padding-horizontal, 'default') - $button-border-width,
map.get($button-font-size, 'default'),
map.get($button-border-radius, 'default')
);
}
&::-moz-focus-inner {
border: 0;
}
& [class*='#{$namespace}-icon'] {
& + span {
margin-left: map.get($button-icon-span-gap, 'default');
}
svg {
vertical-align: bottom;
}
}
@include when(plain) {
@include css-var-from-global(
('button', 'hover', 'text-color'),
('color', 'primary')
);
@include css-var-from-global(
('button', 'hover', 'bg-color'),
('fill-color', 'blank')
);
@include css-var-from-global(
('button', 'hover', 'border-color'),
('color', 'primary')
);
}
@include when(active) {
color: getCssVar('button', 'active', 'text-color');
border-color: getCssVar('button', 'active', 'border-color');
background-color: getCssVar('button', 'active', 'bg-color');
outline: none;
}
@include when(disabled) {
&,
&:hover {
color: getCssVar('button', 'disabled', 'text-color');
cursor: not-allowed;
background-image: none;
background-color: getCssVar('button', 'disabled', 'bg-color');
border-color: getCssVar('button', 'disabled', 'border-color');
}
}
@include when(loading) {
position: relative;
pointer-events: none;
&:before {
// mask the button
z-index: 1;
pointer-events: none;
content: '';
position: absolute;
left: -1px;
top: -1px;
right: -1px;
bottom: -1px;
border-radius: inherit;
background-color: getCssVar('mask-color', 'extra-light');
}
}
@include when(round) {
border-radius: getCssVar('border-radius', 'round');
}
@include when(circle) {
width: map.get($input-height, 'default');
border-radius: 50%;
padding: map.get($button-padding-vertical, 'default') - $button-border-width;
}
@include when(text) {
color: getCssVar('button', 'text-color');
border: 0 solid transparent;
background-color: transparent;
@include when(disabled) {
color: getCssVar('button', 'disabled', 'text-color');
background-color: transparent !important;
}
&:not(.is-disabled) {
&:hover {
background-color: getCssVar('fill-color', 'light');
}
&:focus-visible {
outline: 2px solid getCssVar('button', 'outline-color');
outline-offset: 1px;
transition:
outline-offset 0s,
outline 0s;
}
&:active {
background-color: getCssVar('fill-color');
}
@include when(has-bg) {
background-color: getCssVar('fill-color', 'light');
&:hover {
background-color: getCssVar('fill-color');
}
&:active {
background-color: getCssVar('fill-color', 'dark');
}
}
}
}
@include e(text) {
@include m(expand) {
letter-spacing: 0.3em;
margin-right: -0.3em;
}
}
@include when(link) {
border-color: transparent;
color: getCssVar('button', 'text-color');
background: transparent;
padding: 2px;
height: auto;
&:hover {
color: getCssVar('button', 'hover', 'link-text-color');
}
@include when(disabled) {
color: getCssVar('button', 'disabled', 'text-color');
background-color: transparent !important;
border-color: transparent !important;
}
&:not(.is-disabled) {
&:hover {
border-color: transparent;
background-color: transparent;
}
&:active {
color: getCssVar('button', 'active-color');
border-color: transparent;
background-color: transparent;
}
}
}
@include m(text) {
border-color: transparent;
background: transparent;
color: getCssVar('color', 'primary');
padding-left: 0;
padding-right: 0;
@include when(disabled) {
color: getCssVar('button', 'disabled', 'text-color');
background-color: transparent !important;
border-color: transparent !important;
}
&:not(.is-disabled) {
&:hover {
color: getCssVar('color', 'primary', 'light-3');
border-color: transparent;
background-color: transparent;
}
&:active {
color: getCssVar('color', 'primary', 'dark-2');
border-color: transparent;
background-color: transparent;
}
}
}
@include e(link) {
@include m(expand) {
letter-spacing: 0.3em;
margin-right: -0.3em;
}
}
@each $type in (primary, success, warning, danger, info) {
@include m($type) {
@include button-variant($type);
}
}
@each $size in (large, small) {
@include m($size) {
@include set-css-var-value(
('button', 'size'),
map.get($input-height, $size)
);
height: getCssVar('button', 'size');
& [class*='#{$namespace}-icon'] {
& + span {
margin-left: map.get($button-icon-span-gap, $size);
}
}
& {
@include button-size(
map.get($button-padding-vertical, $size) - $button-border-width,
map.get($button-padding-horizontal, $size) - $button-border-width,
map.get($button-font-size, $size),
map.get($button-border-radius, $size)
);
}
@include when(circle) {
width: getCssVar('button', 'size');
padding: map.get($button-padding-vertical, $size) - $button-border-width;
}
}
}
}

View File

@@ -0,0 +1,80 @@
@use 'mixins/mixins' as *;
@use 'mixins/var' as *;
@use 'common/var' as *;
@include b(calendar) {
@include set-component-css-var('calendar', $calendar);
background-color: getCssVar('fill-color', 'blank');
@include e(header) {
display: flex;
justify-content: space-between;
padding: 12px 20px;
border-bottom: getCssVar('calendar', 'header-border-bottom');
}
@include e(title) {
color: getCssVar('text-color');
align-self: center;
}
@include e(body) {
padding: 12px 20px 35px;
}
}
@include b(calendar-table) {
table-layout: fixed;
width: 100%;
thead th {
padding: 12px 0;
color: getCssVar('text-color', 'regular');
font-weight: normal;
}
&:not(.is-range) {
td.prev,
td.next {
color: getCssVar('text-color', 'placeholder');
}
}
td {
border-bottom: getCssVar('calendar', 'border');
border-right: getCssVar('calendar', 'border');
vertical-align: top;
transition: background-color getCssVar('transition-duration', 'fast') ease;
@include when(selected) {
background-color: getCssVar('calendar', 'selected-bg-color');
}
@include when(today) {
color: getCssVar('color-primary');
}
}
tr:first-child td {
border-top: getCssVar('calendar', 'border');
}
tr td:first-child {
border-left: getCssVar('calendar', 'border');
}
tr.#{$namespace}-calendar-table__row--hide-border td {
border-top: none;
}
@include b(calendar-day) {
box-sizing: border-box;
padding: 8px;
height: getCssVar('calendar', 'cell-width');
&:hover {
cursor: pointer;
background-color: getCssVar('calendar', 'selected-bg-color');
}
}
}

View File

@@ -0,0 +1,45 @@
@use 'mixins/mixins' as *;
@use 'mixins/var' as *;
@use 'common/var' as *;
@include b(card) {
@include set-component-css-var('card', $card);
}
@include b(card) {
border-radius: getCssVar('card', 'border-radius');
border: 1px solid getCssVar('card', 'border-color');
background-color: getCssVar('card', 'bg-color');
overflow: hidden;
color: getCssVar('text-color', 'primary');
transition: getCssVar('transition-duration');
@include when(always-shadow) {
box-shadow: getCssVar('box-shadow', 'light');
}
@include when(hover-shadow) {
&:hover,
&:focus {
box-shadow: getCssVar('box-shadow', 'light');
}
}
@include e(header) {
padding: calc(#{getCssVar('card', 'padding')} - 2px)
getCssVar('card', 'padding');
border-bottom: 1px solid getCssVar('card', 'border-color');
box-sizing: border-box;
}
@include e(body) {
padding: getCssVar('card', 'padding');
}
@include e(footer) {
padding: calc(#{getCssVar('card', 'padding')} - 2px)
getCssVar('card', 'padding');
border-top: 1px solid getCssVar('card', 'border-color');
box-sizing: border-box;
}
}

View File

@@ -0,0 +1,58 @@
@use 'mixins/mixins' as *;
@use 'common/var' as *;
@include b(carousel) {
@include e(item) {
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
display: inline-block;
overflow: hidden;
z-index: calc(getCssVar('index', 'normal') - 1);
@include when(active) {
z-index: calc(getCssVar('index', 'normal') - 1);
}
@include when(animating) {
transition: transform 0.4s ease-in-out;
}
@include m(card) {
width: 50%;
transition: transform 0.4s ease-in-out;
&.is-in-stage {
cursor: pointer;
z-index: getCssVar('index', 'normal');
&:hover .#{$namespace}-carousel__mask,
&.is-hover .#{$namespace}-carousel__mask {
opacity: 0.12;
}
}
&.is-active {
z-index: calc(getCssVar('index', 'normal') + 1);
}
}
@include m(card-vertical) {
width: 100%;
height: 50%;
}
}
@include e(mask) {
position: absolute;
width: 100%;
height: 100%;
top: 0;
left: 0;
background-color: getCssVar('color', 'white');
opacity: 0.24;
transition: getCssVar('transition-duration', 'fast');
}
}

View File

@@ -0,0 +1,188 @@
@use 'mixins/mixins' as *;
@use 'mixins/var' as *;
@use 'mixins/utils' as *;
@use 'common/var' as *;
@include b(carousel) {
@include set-component-css-var('carousel', $carousel);
position: relative;
@include m(horizontal) {
overflow: hidden;
}
@include m(vertical) {
overflow: hidden;
}
@include e(container) {
position: relative;
height: 300px;
}
@include e(arrow) {
border: none;
outline: none;
padding: 0;
margin: 0;
height: getCssVar('carousel', 'arrow-size');
width: getCssVar('carousel', 'arrow-size');
cursor: pointer;
transition: getCssVar('transition', 'duration');
border-radius: 50%;
background-color: getCssVar('carousel', 'arrow-background');
color: $color-white;
position: absolute;
top: 50%;
z-index: 10;
transform: translateY(-50%);
text-align: center;
font-size: getCssVar('carousel', 'arrow-font-size');
@include utils-inline-flex-center;
@include m(left) {
left: 16px;
}
@include m(right) {
right: 16px;
}
&:hover {
background-color: getCssVar('carousel', 'arrow-hover-background');
}
& i {
cursor: pointer;
}
}
@include e(indicators) {
position: absolute;
list-style: none;
margin: 0;
padding: 0;
z-index: calc(#{getCssVar('index-normal')} + 1);
@include m(horizontal) {
bottom: 0;
left: 50%;
transform: translateX(-50%);
}
@include m(vertical) {
right: 0;
top: 50%;
transform: translateY(-50%);
}
@include m(outside) {
bottom: calc(
getCssVar('carousel-indicator-height') +
getCssVar('carousel-indicator-padding-vertical') * 2
);
text-align: center;
position: static;
transform: none;
.#{$namespace}-carousel__indicator:hover button {
opacity: 0.64;
}
button {
background-color: getCssVar('carousel', 'indicator-out-color');
opacity: 0.24;
}
}
@include m(right) {
right: 0;
}
@include m(labels) {
left: 0;
right: 0;
transform: none;
text-align: center;
.#{$namespace}-carousel__button {
height: auto;
width: auto;
padding: 2px 18px;
font-size: 12px;
color: $color-black;
}
.#{$namespace}-carousel__indicator {
padding: 6px 4px;
}
}
}
@include e(indicator) {
background-color: transparent;
cursor: pointer;
&:hover button {
opacity: 0.72;
}
@include m(horizontal) {
display: inline-block;
padding: getCssVar('carousel-indicator-padding-vertical')
getCssVar('carousel-indicator-padding-horizontal');
}
@include m(vertical) {
padding: getCssVar('carousel-indicator-padding-horizontal')
getCssVar('carousel-indicator-padding-vertical');
.#{$namespace}-carousel__button {
width: getCssVar('carousel-indicator-height');
height: calc(#{getCssVar('carousel-indicator-width')} / 2);
}
}
@include when(active) {
button {
opacity: 1;
}
}
}
@include e(button) {
display: block;
opacity: 0.48;
width: getCssVar('carousel-indicator-width');
height: getCssVar('carousel-indicator-height');
background-color: $color-white;
border: none;
outline: none;
padding: 0;
margin: 0;
cursor: pointer;
transition: getCssVar('transition-duration');
}
}
.carousel-arrow-left-enter-from,
.carousel-arrow-left-leave-active {
transform: translateY(-50%) translateX(-10px);
opacity: 0;
}
.carousel-arrow-right-enter-from,
.carousel-arrow-right-leave-active {
transform: translateY(-50%) translateX(10px);
opacity: 0;
}
.#{$namespace}-transitioning {
filter: url('#elCarouselHorizontal');
}
.#{$namespace}-transitioning-vertical {
filter: url('#elCarouselVertical');
}

View File

@@ -0,0 +1,138 @@
@use 'mixins/mixins' as *;
@use 'mixins/var' as *;
@use 'common/var' as *;
@include b(cascader-panel) {
@include set-component-css-var('cascader', $cascader);
}
@include b(cascader-panel) {
display: flex;
border-radius: getCssVar('cascader-menu', 'radius');
font-size: getCssVar('cascader-menu', 'font-size');
@include when(bordered) {
border: getCssVar('cascader-menu', 'border');
border-radius: getCssVar('cascader-menu', 'radius');
}
}
@include b(cascader-menu) {
min-width: 180px;
box-sizing: border-box;
color: getCssVar('cascader-menu', 'text-color');
border-right: getCssVar('cascader-menu', 'border');
&:last-child {
border-right: none;
.#{$namespace}-cascader-node {
padding-right: 20px;
}
}
@include e(wrap) {
// Raise the priority
&.#{$namespace}-scrollbar__wrap {
height: 204px;
}
}
@include e(list) {
position: relative;
min-height: 100%;
margin: 0;
padding: 6px 0;
list-style: none;
box-sizing: border-box;
}
@include e(hover-zone) {
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
pointer-events: none;
}
@include e(empty-text) {
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
display: flex;
align-items: center;
color: getCssVar('cascader', 'color-empty');
.is-loading {
margin-right: 2px;
}
}
}
@include b(cascader-node) {
position: relative;
display: flex;
align-items: center;
padding: 0 30px 0 20px;
height: 34px;
line-height: 34px;
outline: none;
&.is-selectable.in-active-path {
color: getCssVar('cascader-menu', 'text-color');
}
&.in-active-path,
&.is-selectable.in-checked-path,
&.is-active {
color: getCssVar('cascader-menu', 'selected-text-color');
font-weight: bold;
}
&:not(.is-disabled) {
cursor: pointer;
&:hover,
&:focus {
background: getCssVar('cascader-node', 'background-hover');
}
}
@include when(disabled) {
color: getCssVar('cascader-node', 'color-disabled');
cursor: not-allowed;
}
@include e(prefix) {
position: absolute;
left: 10px;
}
@include e(postfix) {
position: absolute;
right: 10px;
}
@include e(label) {
flex: 1;
text-align: left;
padding: 0 8px;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
}
> .#{$namespace}-checkbox {
margin-right: 0;
}
> .#{$namespace}-radio {
margin-right: 0;
.#{$namespace}-radio__label {
padding-left: 0;
}
}
}

View File

@@ -0,0 +1,257 @@
@use 'sass:map';
@use 'mixins/mixins' as *;
@use 'mixins/var' as *;
@use 'common/var' as *;
@mixin cascader-tag-normal($background-color) {
.#{$namespace}-tag {
display: inline-flex;
align-items: center;
max-width: 100%;
text-overflow: ellipsis;
background: $background-color;
&.#{$namespace}-tag--dark,
&.#{$namespace}-tag--plain {
background-color: getCssVar('tag', 'bg-color');
}
&:not(.is-hit) {
border-color: transparent;
&.#{$namespace}-tag--dark,
&.#{$namespace}-tag--plain {
border-color: getCssVar('tag', 'border-color');
}
}
> span {
flex: 1;
line-height: normal;
overflow: hidden;
text-overflow: ellipsis;
}
.#{$namespace}-icon-close {
flex: none;
background-color: getCssVar('text-color', 'placeholder');
color: getCssVar('color-white');
&:hover {
background-color: getCssVar('text-color', 'secondary');
}
}
& + input {
margin-left: 0;
}
}
}
@include b(cascader) {
@include set-component-css-var('cascader', $cascader);
display: inline-block;
vertical-align: middle;
position: relative;
font-size: getCssVar('font-size', 'base');
line-height: map.get($input-height, 'default');
outline: none;
&:not(.is-disabled):hover {
.#{$namespace}-input__wrapper {
cursor: pointer;
box-shadow: 0 0 0 1px getCssVar('input', 'hover-border-color') inset;
}
}
.#{$namespace}-input {
display: flex;
cursor: pointer;
.#{$namespace}-input__inner {
text-overflow: ellipsis;
cursor: pointer;
}
.#{$namespace}-input__suffix-inner {
.#{$namespace}-icon {
svg {
vertical-align: middle;
}
}
}
.icon-arrow-down {
transition: transform getCssVar('transition-duration');
font-size: 14px;
@include when(reverse) {
transform: rotateZ(180deg);
}
}
.icon-circle-close:hover {
color: var(
#{getCssVarName('input', 'clear-hover-color')},
map.get($input, 'clear-hover-color')
);
}
@include when(focus) {
.#{$namespace}-input__wrapper {
box-shadow: 0 0 0 1px
var(
#{getCssVarName('input', 'focus-border-color')},
map.get($input, 'focus-border-color')
)
inset;
}
}
}
@each $size in (large, small) {
@include m($size) {
font-size: map.get($input-font-size, $size);
line-height: map.get($input-height, $size);
@include e(tags) {
gap: map.get($cascader-item-gap, $size);
padding: map.get($cascader-wrapper-padding, $size);
}
@include e(search-input) {
height: map.get($cascader-item-height, $size);
margin-left: map.get($cascader-search-input-margin-left, $size);
}
}
}
@include when(disabled) {
.#{$namespace}-cascader__label {
z-index: calc(getCssVar('index', 'normal') + 1);
color: getCssVar('disabled-text-color');
}
}
@include e(dropdown) {
@include set-component-css-var('cascader', $cascader);
}
@include e(dropdown) {
font-size: getCssVar('cascader-menu-font-size');
border-radius: getCssVar('cascader-menu-radius');
@include picker-popper(
getCssVar('cascader-menu-fill'),
getCssVar('cascader-menu-border'),
getCssVar('cascader-menu-shadow')
);
&.#{$namespace}-popper {
box-shadow: getCssVar('cascader-menu-shadow');
}
}
@include e(header) {
padding: map.get($cascader-dropdown, 'header-padding');
border-bottom: map.get($cascader-dropdown, 'border');
}
@include e(footer) {
padding: map.get($cascader-dropdown, 'footer-padding');
border-top: map.get($cascader-dropdown, 'border');
}
@include e(tags) {
position: absolute;
left: 0;
right: 30px;
top: 50%;
transform: translateY(-50%);
display: flex;
flex-wrap: wrap;
padding: map.get($cascader-wrapper-padding, 'default');
gap: map.get($cascader-item-gap, 'default');
line-height: normal;
text-align: left;
box-sizing: border-box;
@include cascader-tag-normal(getCssVar('cascader-tag-background'));
&.is-validate {
right: 55px;
}
}
@include e(collapse-tags) {
white-space: normal;
z-index: getCssVar('index-normal');
@include cascader-tag-normal(getCssVar('fill-color'));
.#{$namespace}-tag {
margin: 2px 0;
}
}
@include e(suggestion-panel) {
border-radius: getCssVar('cascader-menu', 'radius');
}
@include e(suggestion-list) {
max-height: 204px;
margin: 0;
padding: 6px 0;
font-size: getCssVar('font-size', 'base');
color: getCssVar('cascader-menu', 'text-color');
text-align: center;
}
@include e(suggestion-item) {
display: flex;
justify-content: space-between;
align-items: center;
height: 34px;
padding: 0 15px;
text-align: left;
outline: none;
cursor: pointer;
&:hover,
&:focus {
background: getCssVar('cascader-node', 'background-hover');
}
&.is-checked {
color: getCssVar('cascader', 'menu-selected-text-color');
font-weight: bold;
}
> span {
margin-right: 10px;
}
}
@include e(empty-text) {
margin: 10px 0;
color: getCssVar('cascader', 'color-empty');
}
@include e(search-input) {
flex: 1;
height: map.get($cascader-item-height, 'default');
min-width: 60px;
margin-left: map.get($cascader-search-input-margin-left, 'default');
padding: 0;
color: getCssVar('cascader', 'menu-text-color');
border: none;
outline: none;
box-sizing: border-box;
background: transparent;
&::placeholder {
// two input overlap
color: transparent;
}
}
}

View File

@@ -0,0 +1,60 @@
@use 'mixins/mixins' as *;
@use 'common/var' as *;
@include b(check-tag) {
background-color: getCssVar('color', 'info', 'light-9');
border-radius: getCssVar('border-radius', 'base');
color: getCssVar('color', 'info');
cursor: pointer;
display: inline-block;
font-size: getCssVar('font-size', 'base');
line-height: getCssVar('font-size', 'base');
padding: 7px 15px;
transition: getCssVar('transition', 'all');
font-weight: bold;
&:hover {
background-color: getCssVar('color', 'info', 'light-7');
}
@each $type in $types {
&.#{bem('check-tag', '', $type)} {
@include when(checked) {
background-color: getCssVar('color', $type, 'light-8');
color: getCssVar('color', $type);
&:hover {
background-color: getCssVar('color', $type, 'light-7');
}
@include when(disabled) {
background-color: getCssVar('color', $type, 'light-8');
color: getCssVar('disabled-text-color');
cursor: not-allowed;
&:hover {
background-color: getCssVar('color', $type, 'light-8');
}
}
}
@include when(disabled) {
@if $type == 'primary' {
background-color: getCssVar('color', 'info', 'light-9');
} @else {
background-color: getCssVar('color', $type, 'light-9');
}
color: getCssVar('disabled-text-color');
cursor: not-allowed;
&:hover {
@if $type == 'primary' {
background-color: getCssVar('color', 'info', 'light-9');
} @else {
background-color: getCssVar('color', $type, 'light-9');
}
}
}
}
}
}

View File

@@ -0,0 +1,140 @@
@use 'sass:map';
@use 'common/var' as *;
@use 'mixins/mixins' as *;
@use 'mixins/utils' as *;
@use 'mixins/var' as *;
@use 'mixins/button' as *;
@include b(checkbox-button) {
@include set-component-css-var('checkbox-button', $checkbox-button);
}
@include b(checkbox-button) {
position: relative;
display: inline-block;
@include e(inner) {
display: inline-block;
line-height: 1;
font-weight: getCssVar('checkbox-font-weight');
white-space: nowrap;
vertical-align: middle;
cursor: pointer;
background: var(
#{getCssVarName('button-bg-color')},
map.get($button, 'bg-color')
);
border: getCssVar('border');
border-left-color: transparent;
color: var(
#{getCssVarName('button-text-color')},
map.get($button, 'text-color')
);
-webkit-appearance: none;
text-align: center;
box-sizing: border-box;
outline: none;
margin: 0;
position: relative;
transition: getCssVar('transition-all');
user-select: none;
@include button-size(
map.get($button-padding-vertical, 'default') - $button-border-width,
map.get($button-padding-horizontal, 'default') - $button-border-width,
map.get($button-font-size, 'default'),
0
);
&:hover {
color: getCssVar('color-primary');
}
& [class*='#{$namespace}-icon-'] {
line-height: 0.9;
& + span {
margin-left: 5px;
}
}
}
@include e(original) {
opacity: 0;
outline: none;
position: absolute;
margin: 0;
z-index: -1;
}
&.is-checked {
& .#{$namespace}-checkbox-button__inner {
color: getCssVar('checkbox-button-checked-text-color');
background-color: getCssVar('checkbox-button-checked-bg-color');
border-color: getCssVar('checkbox-button-checked-border-color');
box-shadow: -1px 0 0 0 getCssVar('color-primary-light-7');
}
&:first-child .#{$namespace}-checkbox-button__inner {
border-left-color: getCssVar('checkbox-button-checked-border-color');
}
}
&.is-disabled {
& .#{$namespace}-checkbox-button__inner {
color: getCssVar('disabled-text-color');
cursor: not-allowed;
background-image: none;
background-color: var(
#{getCssVarName('button-disabled-bg-color')},
map.get($button, 'disabled-bg-color')
);
border-color: var(
#{getCssVarName('button-disabled-border-color')},
map.get($button, 'disabled-border-color')
);
box-shadow: none;
}
&:first-child .#{$namespace}-checkbox-button__inner {
border-left-color: var(
#{getCssVarName('button-disabled-border-color')},
map.get($button, 'disabled-border-color')
);
}
}
&:first-child {
.#{$namespace}-checkbox-button__inner {
border-left: getCssVar('border');
border-top-left-radius: getCssVar('border-radius-base');
border-bottom-left-radius: getCssVar('border-radius-base');
box-shadow: none !important;
}
}
&.is-focus {
& .#{$namespace}-checkbox-button__inner {
border-color: getCssVar('checkbox-button-checked-border-color');
}
}
&:last-child {
.#{$namespace}-checkbox-button__inner {
border-top-right-radius: getCssVar('border-radius-base');
border-bottom-right-radius: getCssVar('border-radius-base');
}
}
@each $size in (large, small) {
@include m($size) {
.#{$namespace}-checkbox-button__inner {
@include button-size(
map.get($button-padding-vertical, $size) - $button-border-width,
map.get($button-padding-horizontal, $size) - $button-border-width,
map.get($button-font-size, $size),
0
);
}
}
}
}

View File

@@ -0,0 +1,7 @@
@use 'common/var' as *;
@use 'mixins/mixins' as *;
@include b(checkbox-group) {
font-size: 0;
line-height: 0;
}

View File

@@ -0,0 +1,300 @@
@use 'sass:map';
@use 'common/var' as *;
@use 'mixins/mixins' as *;
@use 'mixins/var' as *;
@use 'mixins/_button';
@use 'mixins/utils' as *;
$checkbox-height: () !default;
$checkbox-height: map.merge($common-component-size, $checkbox-height);
$checkbox-bordered-input-height: () !default;
$checkbox-bordered-input-height: map.merge(
(
'large': 14px,
'default': 12px,
'small': 12px,
),
$checkbox-bordered-input-height
);
$checkbox-font-size: () !default;
$checkbox-font-size: map.merge(
(
'large': 14px,
'small': 12px,
),
$checkbox-font-size
);
$checkbox-bordered-input-width: () !default;
$checkbox-bordered-input-width: map.merge(
$checkbox-bordered-input-height,
$checkbox-bordered-input-width
);
@include b(checkbox) {
@include set-component-css-var('checkbox', $checkbox);
}
@include b(checkbox) {
color: getCssVar('checkbox-text-color');
font-weight: getCssVar('checkbox-font-weight');
font-size: getCssVar('font-size', 'base');
position: relative;
cursor: pointer;
display: inline-flex;
align-items: center;
white-space: nowrap;
user-select: none;
margin-right: 30px;
height: getCssVarWithDefault(
'checkbox-height',
map.get($checkbox-height, 'default')
);
@include when(disabled) {
cursor: not-allowed;
}
@include when(bordered) {
padding: 0
map.get($checkbox-bordered-padding-right, 'default')-$border-width 0
map.get($checkbox-bordered-padding-left, 'default')-$border-width;
border-radius: getCssVar('border-radius-base');
border: getCssVar('border');
box-sizing: border-box;
&.is-checked {
border-color: getCssVar('color-primary');
}
&.is-disabled {
border-color: getCssVar('border-color-lighter');
}
@each $size in (large, small) {
&.#{$namespace}-checkbox--#{$size} {
padding: 0
map.get($checkbox-bordered-padding-right, $size)-$border-width
0
map.get($checkbox-bordered-padding-left, $size)-$border-width;
border-radius: map.get($button-border-radius, $size);
.#{$namespace}-checkbox__label {
font-size: map.get($button-font-size, $size);
}
.#{$namespace}-checkbox__inner {
height: map.get($checkbox-bordered-input-height, $size);
width: map.get($checkbox-bordered-input-width, $size);
}
}
}
&.#{$namespace}-checkbox--small {
.#{$namespace}-checkbox__inner {
&::after {
height: 6px;
width: 2px;
}
}
}
}
input:focus-visible {
& + .#{$namespace}-checkbox__inner {
outline: 2px solid getCssVar('checkbox-input-border-color-hover');
outline-offset: 1px;
border-radius: getCssVar('checkbox-border-radius');
}
}
@include e(input) {
white-space: nowrap;
cursor: pointer;
outline: none;
display: inline-flex;
position: relative;
@include when(disabled) {
.#{$namespace}-checkbox__inner {
background-color: getCssVar('checkbox-disabled-input-fill');
border-color: getCssVar('checkbox-disabled-border-color');
cursor: not-allowed;
&::after {
cursor: not-allowed;
border-color: getCssVar('checkbox-disabled-icon-color');
}
}
&.is-checked {
.#{$namespace}-checkbox__inner {
background-color: getCssVar('checkbox-disabled-checked-input-fill');
border-color: getCssVar(
'checkbox-disabled-checked-input-border-color'
);
&::after {
border-color: getCssVar('checkbox-disabled-checked-icon-color');
}
}
}
&.is-indeterminate {
.#{$namespace}-checkbox__inner {
background-color: getCssVar('checkbox-disabled-checked-input-fill');
border-color: getCssVar(
'checkbox-disabled-checked-input-border-color'
);
&::before {
background-color: getCssVar('checkbox-disabled-checked-icon-color');
border-color: getCssVar('checkbox-disabled-checked-icon-color');
}
}
}
& + span.#{$namespace}-checkbox__label {
color: getCssVar('disabled-text-color');
cursor: not-allowed;
}
}
@include when(checked) {
.#{$namespace}-checkbox__inner {
background-color: getCssVar('checkbox-checked-bg-color');
border-color: getCssVar('checkbox-checked-input-border-color');
&::after {
transform: translate(-45%, -60%) rotate(45deg) scaleY(1);
border-color: getCssVar('checkbox-checked-icon-color');
}
}
& + .#{$namespace}-checkbox__label {
color: getCssVar('checkbox-checked-text-color');
}
}
@include when(focus) {
// Visually distinguish when focus
&:not(.is-checked) {
.#{$namespace}-checkbox__original:not(:focus-visible) {
border-color: getCssVar('checkbox-input-border-color-hover');
}
}
}
@include when(indeterminate) {
.#{$namespace}-checkbox__inner {
background-color: getCssVar('checkbox-checked-bg-color');
border-color: getCssVar('checkbox-checked-input-border-color');
&::before {
content: '';
position: absolute;
display: block;
background-color: getCssVar('checkbox-checked-icon-color');
height: 2px;
transform: scale(0.5);
left: 0;
right: 0;
top: 5px;
}
&::after {
display: none;
}
}
}
}
@include e(inner) {
display: inline-block;
position: relative;
border: getCssVar('checkbox-input-border');
border-radius: getCssVar('checkbox-border-radius');
box-sizing: border-box;
width: getCssVar('checkbox-input-width');
height: getCssVar('checkbox-input-height');
background-color: getCssVar('checkbox-bg-color');
z-index: getCssVar('index-normal');
transition:
border-color 0.25s cubic-bezier(0.71, -0.46, 0.29, 1.46),
background-color 0.25s cubic-bezier(0.71, -0.46, 0.29, 1.46),
outline 0.25s cubic-bezier(0.71, -0.46, 0.29, 1.46);
&:hover {
border-color: getCssVar('checkbox-input-border-color-hover');
}
&::after {
box-sizing: content-box;
content: '';
border: 1px solid transparent;
border-left: 0;
border-top: 0;
height: 7px;
left: 50%;
position: absolute;
top: 50%;
transform: translate(-45%, -60%) rotate(45deg) scaleY(0);
width: 3px;
transition: transform 0.15s ease-in 0.05s;
transform-origin: center;
}
}
@include e(original) {
opacity: 0;
outline: none;
position: absolute;
margin: 0;
width: 0;
height: 0;
z-index: -1;
}
@include e(label) {
display: inline-block;
padding-left: 8px;
line-height: 1;
font-size: getCssVar('checkbox-font-size');
}
@each $size in (large, small) {
&.#{$namespace}-checkbox--#{$size} {
height: map.get($checkbox-height, $size);
@include e(label) {
font-size: map.get($checkbox-font-size, $size);
}
@include e(inner) {
width: map.get($checkbox-font-size, $size);
height: map.get($checkbox-font-size, $size);
}
}
}
&.#{$namespace}-checkbox--small {
@include e(input) {
@include when(indeterminate) {
@include e(inner) {
&::before {
top: 4px;
}
}
}
}
@include e(inner) {
&::after {
width: 2px;
height: 6px;
}
}
}
&:last-of-type {
margin-right: 0;
}
}

View File

@@ -0,0 +1,48 @@
@use 'sass:math';
@use 'common/var' as *;
@use 'mixins/mixins' as *;
@use 'mixins/_col' as *;
[class*='#{$namespace}-col-'] {
box-sizing: border-box;
@include when(guttered) {
display: block;
min-height: 1px;
}
}
@for $i from 0 through 24 {
.#{$namespace}-col-#{$i} {
display: if($i == 0, none, block);
max-width: (math.div(1, 24) * $i * 100) * 1%;
flex: 0 0 (math.div(1, 24) * $i * 100) * 1%;
@include when(guttered) {
display: if($i == 0, none, block);
}
}
.#{$namespace}-col-offset-#{$i} {
margin-left: (math.div(1, 24) * $i * 100) * 1%;
}
.#{$namespace}-col-pull-#{$i} {
position: relative;
right: (math.div(1, 24) * $i * 100) * 1%;
}
.#{$namespace}-col-push-#{$i} {
position: relative;
left: (math.div(1, 24) * $i * 100) * 1%;
}
}
@include col-size(xs);
@include col-size(sm);
@include col-size(md);
@include col-size(lg);
@include col-size(xl);

View File

View File

@@ -0,0 +1,94 @@
@use 'mixins/mixins' as *;
@use 'mixins/var' as *;
@use 'common/var' as *;
@use 'common/transition';
@include b(collapse) {
@include set-component-css-var('collapse', $collapse);
border-top: 1px solid getCssVar('collapse-border-color');
border-bottom: 1px solid getCssVar('collapse-border-color');
}
@include b(collapse-item) {
@include when(disabled) {
.#{$namespace}-collapse-item__header {
color: getCssVar('text-color-disabled');
cursor: not-allowed;
}
}
@include e(header) {
width: 100%;
padding: 0;
border: none;
display: flex;
align-items: center;
min-height: getCssVar('collapse-header-height');
line-height: getCssVar('collapse-header-height');
background-color: getCssVar('collapse-header-bg-color');
color: getCssVar('collapse-header-text-color');
cursor: pointer;
border-bottom: 1px solid getCssVar('collapse-border-color');
font-size: getCssVar('collapse-header-font-size');
font-weight: 500;
transition: border-bottom-color getCssVar('transition-duration');
outline: none;
@include e(arrow) {
transition: transform getCssVar('transition-duration');
font-weight: 300;
@include when(active) {
transform: rotate(90deg);
}
}
@include e(title) {
text-align: left;
flex: auto;
}
&.focusing:focus:not(:hover) {
color: getCssVar('color-primary');
}
@include when(active) {
border-bottom-color: transparent;
}
}
@include e(wrap) {
will-change: height;
background-color: getCssVar('collapse-content-bg-color');
overflow: hidden;
box-sizing: border-box;
border-bottom: 1px solid getCssVar('collapse-border-color');
}
@include e(content) {
padding-bottom: 25px;
font-size: getCssVar('collapse-content-font-size');
color: getCssVar('collapse-content-text-color');
line-height: 1.769230769230769;
}
&:last-child {
margin-bottom: -1px;
}
}
.#{$namespace}-collapse-icon-position {
&-left {
.#{$namespace}-collapse-item__ {
&header {
gap: 8px;
}
&title {
order: 1;
}
}
}
&-right {
.#{$namespace}-collapse-item__header {
padding-right: 8px;
}
}
}

View File

@@ -0,0 +1,288 @@
@use 'mixins/mixins' as *;
@use 'common/var' as *;
@mixin disable {
cursor: not-allowed;
opacity: 0.3;
}
@mixin alpha-bg {
background-image:
linear-gradient(
45deg,
getCssVar('color-picker', 'alpha-bg-a') 25%,
getCssVar('color-picker', 'alpha-bg-b') 25%
),
linear-gradient(
135deg,
getCssVar('color-picker', 'alpha-bg-a') 25%,
getCssVar('color-picker', 'alpha-bg-b') 25%
),
linear-gradient(
45deg,
getCssVar('color-picker', 'alpha-bg-b') 75%,
getCssVar('color-picker', 'alpha-bg-a') 75%
),
linear-gradient(
135deg,
getCssVar('color-picker', 'alpha-bg-b') 75%,
getCssVar('color-picker', 'alpha-bg-a') 75%
);
background-size: 12px 12px;
background-position:
0 0,
6px 0,
6px -6px,
0 6px;
}
@mixin color-picker-thumb {
position: absolute;
cursor: pointer;
box-sizing: border-box;
left: 0;
top: 0;
width: 4px;
height: 100%;
border-radius: 1px;
background: #fff;
border: 1px solid getCssVar('border-color', 'lighter');
box-shadow: 0 0 2px rgba(0, 0, 0, 0.6);
z-index: 1;
&:focus-visible {
outline: 2px solid getCssVar('color-primary');
outline-offset: 1px;
}
}
@mixin bar-background($side: right) {
background: linear-gradient(
to $side,
#f00 0%,
#ff0 17%,
#0f0 33%,
#0ff 50%,
#00f 67%,
#f0f 83%,
#f00 100%
);
}
@include b(color-picker-panel) {
width: 300px;
padding: 12px;
box-sizing: content-box;
background: getCssVar('bg-color', 'overlay');
@include when(border) {
border: solid 1px getCssVar('border-color-lighter');
border-radius: 4px;
}
@include e(wrapper) {
margin-bottom: 6px;
@include e(footer) {
display: flex;
justify-content: space-between;
margin-top: 12px;
text-align: right;
@include b(input) {
line-height: 26px;
font-size: 12px;
color: $color-black;
width: 160px;
}
}
}
@include when(disabled) {
@include b(color-svpanel) {
@include disable;
}
@include b(color-hue-slider) {
@include disable;
}
@include e(thumb) {
cursor: not-allowed;
}
@include b(color-alpha-slider) {
@include disable;
}
@include b(color-predefine) {
@include e(color-selector) {
@include disable;
}
}
}
}
@include b(color-predefine) {
display: flex;
font-size: 12px;
margin-top: 8px;
width: 280px;
@include e(colors) {
display: flex;
gap: 8px;
flex: 1;
flex-wrap: wrap;
}
@include e(color-selector) {
width: 20px;
height: 20px;
border-radius: 4px;
cursor: pointer;
&.selected {
box-shadow: 0 0 3px 2px getCssVar('color-primary');
}
> div {
display: flex;
height: 100%;
border-radius: 3px;
}
@include when(alpha) {
background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAwAAAAMCAIAAADZF8uwAAAAGUlEQVQYV2M4gwH+YwCGIasIUwhT25BVBADtzYNYrHvv4gAAAABJRU5ErkJggg==);
}
}
}
@include b(color-hue-slider) {
position: relative;
box-sizing: border-box;
width: 280px;
height: 12px;
background-color: #f00;
padding: 0 2px;
float: right;
@include e(bar) {
position: relative;
@include bar-background;
height: 100%;
}
@include e(thumb) {
@include color-picker-thumb;
}
@include when(vertical) {
width: 12px;
height: 180px;
padding: 2px 0;
.#{$namespace}-color-hue-slider__bar {
@include bar-background(bottom);
}
.#{$namespace}-color-hue-slider__thumb {
left: 0;
top: 0;
width: 100%;
height: 4px;
}
}
}
@include b(color-svpanel) {
position: relative;
width: 280px;
height: 180px;
@include e(('white', 'black')) {
position: absolute;
top: 0;
left: 0;
right: 0;
bottom: 0;
}
@include e('white') {
background: linear-gradient(to right, #fff, rgba(255, 255, 255, 0));
}
@include e('black') {
background: linear-gradient(to top, #000, rgba(0, 0, 0, 0));
}
@include e(cursor) {
position: absolute;
> div {
cursor: head;
width: 4px;
height: 4px;
box-shadow:
0 0 0 1.5px #fff,
inset 0 0 1px 1px rgba(0, 0, 0, 0.3),
0 0 1px 2px rgba(0, 0, 0, 0.4);
border-radius: 50%;
transform: translate(-2px, -2px);
}
}
}
@include b(color-alpha-slider) {
position: relative;
box-sizing: border-box;
width: 280px;
height: 12px;
@include alpha-bg;
@include when(disabled) {
@include e(thumb) {
cursor: not-allowed;
}
}
@include e(bar) {
position: relative;
background: linear-gradient(
to right,
rgba(255, 255, 255, 0) 0%,
getCssVar('bg-color') 100%
);
height: 100%;
}
@include e(thumb) {
@include color-picker-thumb;
}
@include when(vertical) {
width: 20px;
height: 180px;
.#{$namespace}-color-alpha-slider__bar {
background: linear-gradient(
to bottom,
rgba(255, 255, 255, 0) 0%,
rgba(255, 255, 255, 1) 100%
);
}
.#{$namespace}-color-alpha-slider__thumb {
left: 0;
top: 0;
width: 100%;
height: 4px;
}
}
}
.#{bem('color-picker-panel')} {
@include set-css-var-value(('color-picker', 'alpha-bg-a'), '#ccc');
@include set-css-var-value(('color-picker', 'alpha-bg-b'), 'transparent');
}
.dark {
.#{bem('color-picker-panel')} {
@include set-css-var-value(('color-picker', 'alpha-bg-a'), '#333333');
}
}

View File

@@ -0,0 +1,165 @@
@use 'sass:map';
@use 'mixins/mixins' as *;
@use 'common/var' as *;
$color-picker-size: () !default;
$color-picker-size: map.merge($common-component-size, $color-picker-size);
@mixin alpha-bg {
background-image:
linear-gradient(
45deg,
getCssVar('color-picker', 'alpha-bg-a') 25%,
getCssVar('color-picker', 'alpha-bg-b') 25%
),
linear-gradient(
135deg,
getCssVar('color-picker', 'alpha-bg-a') 25%,
getCssVar('color-picker', 'alpha-bg-b') 25%
),
linear-gradient(
45deg,
getCssVar('color-picker', 'alpha-bg-b') 75%,
getCssVar('color-picker', 'alpha-bg-a') 75%
),
linear-gradient(
135deg,
getCssVar('color-picker', 'alpha-bg-b') 75%,
getCssVar('color-picker', 'alpha-bg-a') 75%
);
background-size: 12px 12px;
background-position:
0 0,
6px 0,
6px -6px,
0 6px;
}
@include b(color-picker) {
display: inline-block;
position: relative;
line-height: normal;
outline: none;
height: map.get($color-picker-size, 'default');
width: map.get($color-picker-size, 'default');
&:hover:not(.is-disabled, .is-focused) {
.#{$namespace}-color-picker__trigger {
border-color: getCssVar('border-color-hover');
}
}
&:focus-visible:not(.is-disabled) {
.#{$namespace}-color-picker__trigger {
outline: 2px solid getCssVar('color-primary');
outline-offset: 1px;
}
}
@include when(focused) {
.#{$namespace}-color-picker__trigger {
border-color: getCssVar('color-primary');
}
}
@include when(disabled) {
.#{$namespace}-color-picker__trigger {
cursor: not-allowed;
background-color: getCssVar('fill-color', 'light');
}
@include e(color) {
opacity: 0.3;
}
}
@each $size in (large, small) {
@include m($size) {
height: map.get($color-picker-size, $size);
width: map.get($color-picker-size, $size);
}
}
@include m(small) {
.#{$namespace}-color-picker__icon,
.#{$namespace}-color-picker__empty {
transform: scale(0.8);
}
}
@include e(trigger) {
display: inline-flex;
justify-content: center;
align-items: center;
box-sizing: border-box;
height: 100%;
width: 100%;
padding: 4px;
border: 1px solid getCssVar('border-color');
border-radius: 4px;
font-size: 0;
position: relative;
cursor: pointer;
}
@include e(color) {
position: relative;
display: block;
box-sizing: border-box;
border: 1px solid getCssVar('text-color', 'secondary');
border-radius: getCssVar('border-radius-small');
width: 100%;
height: 100%;
text-align: center;
@include when(alpha) {
@include alpha-bg;
// background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAwAAAAMCAIAAADZF8uwAAAAGUlEQVQYV2M4gwH+YwCGIasIUwhT25BVBADtzYNYrHvv4gAAAABJRU5ErkJggg==);
}
}
@include e(color-inner) {
display: inline-flex;
justify-content: center;
align-items: center;
width: 100%;
height: 100%;
}
& .#{$namespace}-color-picker__empty {
font-size: 12px;
color: getCssVar('text-color', 'secondary');
}
& .#{$namespace}-color-picker__icon {
display: inline-flex;
justify-content: center;
align-items: center;
color: $color-white;
font-size: 12px;
}
@include e(panel) {
background-color: $color-white;
border-radius: getCssVar('border-radius-base');
box-shadow: map.get($dropdown, 'menu-box-shadow');
&.#{$namespace}-popper {
border: 1px solid getCssVar('border-color-lighter');
}
}
}
.#{bem('color-picker')},
.#{bem('color-picker', 'panel')} {
@include set-css-var-value(('color-picker', 'alpha-bg-a'), '#ccc');
@include set-css-var-value(('color-picker', 'alpha-bg-b'), 'transparent');
}
.dark {
.#{bem('color-picker')},
.#{bem('color-picker', 'panel')} {
@include set-css-var-value(('color-picker', 'alpha-bg-a'), '#333333');
}
}

View File

@@ -0,0 +1,20 @@
@use 'sass:color';
@use 'sass:string';
@function rgb2hex($color) {
@return string.unquote('#' + #{string.slice(color.ie-hex-str($color), 4)});
}
// rgba color above solid color
@function mix-overlay-color($upper, $lower) {
$opacity: color.alpha($upper);
$red: color.channel($upper, 'red') * $opacity + color.channel($lower, 'red') *
(1 - $opacity);
$green: color.channel($upper, 'green') * $opacity +
color.channel($lower, 'green') * (1 - $opacity);
$blue: color.channel($upper, 'blue') * $opacity +
color.channel($lower, 'blue') * (1 - $opacity);
@return rgb2hex(rgb($red, $green, $blue));
}

View File

@@ -0,0 +1,47 @@
@use './var' as *;
@use '../mixins/mixins' as *;
@use '../mixins/var' as *;
:root {
@include set-component-css-var('popup', $popup);
}
.v-modal-enter {
animation: v-modal-in getCssVar('transition-duration-fast') ease;
}
.v-modal-leave {
animation: v-modal-out getCssVar('transition-duration-fast') ease forwards;
}
@keyframes v-modal-in {
0% {
opacity: 0;
}
100% {
}
}
@keyframes v-modal-out {
0% {
}
100% {
opacity: 0;
}
}
.v-modal {
position: fixed;
left: 0;
top: 0;
width: 100%;
height: 100%;
opacity: getCssVar('popup-modal-opacity');
background: getCssVar('popup-modal-bg-color');
}
@include b(popup-parent) {
@include m(hidden) {
overflow: hidden;
}
}

View File

@@ -0,0 +1,125 @@
@use '../mixins/config' as *;
@use '../mixins/mixins' as *;
.fade-in-linear-enter-active,
.fade-in-linear-leave-active {
transition: getCssVar('transition-fade', 'linear');
}
.fade-in-linear-enter-from,
.fade-in-linear-leave-to {
opacity: 0;
}
.#{$namespace}-fade-in-linear-enter-active,
.#{$namespace}-fade-in-linear-leave-active {
transition: getCssVar('transition-fade', 'linear');
}
.#{$namespace}-fade-in-linear-enter-from,
.#{$namespace}-fade-in-linear-leave-to {
opacity: 0;
}
.#{$namespace}-fade-in-enter-active,
.#{$namespace}-fade-in-leave-active {
transition: all getCssVar('transition-duration') cubic-bezier(0.55, 0, 0.1, 1);
}
.#{$namespace}-fade-in-enter-from,
.#{$namespace}-fade-in-leave-active {
opacity: 0;
}
.#{$namespace}-zoom-in-center-enter-active,
.#{$namespace}-zoom-in-center-leave-active {
transition: all getCssVar('transition-duration') cubic-bezier(0.55, 0, 0.1, 1);
}
.#{$namespace}-zoom-in-center-enter-from,
.#{$namespace}-zoom-in-center-leave-active {
opacity: 0;
transform: scaleX(0);
}
.#{$namespace}-zoom-in-top-enter-active,
.#{$namespace}-zoom-in-top-leave-active {
opacity: 1;
transform: scaleY(1);
transition: getCssVar('transition-md-fade');
transform-origin: center top;
&[data-popper-placement^='top'] {
transform-origin: center bottom;
}
}
.#{$namespace}-zoom-in-top-enter-from,
.#{$namespace}-zoom-in-top-leave-active {
opacity: 0;
transform: scaleY(0);
}
.#{$namespace}-zoom-in-bottom-enter-active,
.#{$namespace}-zoom-in-bottom-leave-active {
opacity: 1;
transform: scaleY(1);
transition: getCssVar('transition-md-fade');
transform-origin: center bottom;
}
.#{$namespace}-zoom-in-bottom-enter-from,
.#{$namespace}-zoom-in-bottom-leave-active {
opacity: 0;
transform: scaleY(0);
}
.#{$namespace}-zoom-in-left-enter-active,
.#{$namespace}-zoom-in-left-leave-active {
opacity: 1;
transform: scale(1, 1);
transition: getCssVar('transition-md-fade');
transform-origin: top left;
}
.#{$namespace}-zoom-in-left-enter-from,
.#{$namespace}-zoom-in-left-leave-active {
opacity: 0;
transform: scale(0.45, 0.45);
}
.collapse-transition {
transition:
getCssVar('transition-duration') height ease-in-out,
getCssVar('transition-duration') padding-top ease-in-out,
getCssVar('transition-duration') padding-bottom ease-in-out;
}
.#{$namespace}-collapse-transition-leave-active,
.#{$namespace}-collapse-transition-enter-active {
transition:
getCssVar('transition-duration') max-height ease-in-out,
getCssVar('transition-duration') padding-top ease-in-out,
getCssVar('transition-duration') padding-bottom ease-in-out;
}
.horizontal-collapse-transition {
transition:
getCssVar('transition-duration') width ease-in-out,
getCssVar('transition-duration') padding-left ease-in-out,
getCssVar('transition-duration') padding-right ease-in-out;
}
.#{$namespace}-list-enter-active,
.#{$namespace}-list-leave-active {
transition: all 1s;
}
.#{$namespace}-list-enter-from,
.#{$namespace}-list-leave-to {
opacity: 0;
transform: translateY(-30px);
}
.#{$namespace}-list-leave-active {
position: absolute !important;
}
.#{$namespace}-opacity-transition {
transition: opacity getCssVar('transition-duration')
cubic-bezier(0.55, 0, 0.1, 1);
}

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,14 @@
@use 'mixins/mixins' as *;
@include b(container) {
display: flex;
flex-direction: row;
flex: 1;
flex-basis: auto;
box-sizing: border-box;
min-width: 0;
@include when(vertical) {
flex-direction: column;
}
}

View File

@@ -0,0 +1,39 @@
// CSS3 var
@use './var' as *;
@use '../mixins/_var.scss' as *;
@use '../mixins/mixins.scss' as *;
html.dark {
color-scheme: dark;
// hex colors
@each $type in (primary, success, warning, danger, error, info) {
@include set-css-color-type($colors, $type);
}
// --el-box-shadow-#{$type}
@include set-component-css-var('box-shadow', $box-shadow);
// color-scheme
// Background --el-bg-color-#{$type}
@include set-component-css-var('bg-color', $bg-color);
// --el-text-color-#{$type}
@include set-component-css-var('text-color', $text-color);
// --el-border-color-#{$type}
@include set-component-css-var('border-color', $border-color);
// Fill --el-fill-color-#{$type}
@include set-component-css-var('fill-color', $fill-color);
@include set-component-css-var('mask-color', $mask-color);
}
@include dark(button) {
@include set-component-css-var('button', $button);
}
@include dark(card) {
@include set-component-css-var('card', $card);
}
@include dark(empty) {
@include set-component-css-var('empty', $empty);
}

View File

@@ -0,0 +1,224 @@
@use 'sass:map';
@use 'sass:math';
@use 'sass:color';
@use '../common/var.scss' as common;
@use '../mixins/mixins.scss' as *;
@use '../color/index.scss' as *;
@use '../mixins/function.scss' as *;
$colors: () !default;
@each $type in common.$types {
$colors: map.deep-merge(
(
$type: (
'base': map.get(common.$colors, $type, 'base'),
),
),
$colors
) !global;
}
// https://sass-lang.com/documentation/values/maps#immutability
// mix colors with white/black to generate light/dark level
@mixin set-color-mix-level(
$type,
$number,
$mode: 'light',
$mix-color: $color-white
) {
// hex mix color
$colors: map.deep-merge(
(
$type: (
'#{$mode}-#{$number}': roundColor(
color.mix(
$mix-color,
map.get($colors, $type, 'base'),
math.percentage(math.div($number, 10))
)
),
),
),
$colors
) !global;
// for designer to view transparent
// $colors: map.deep-merge(
// (
// $type: (
// '#{$mode}-#{$number}':
// rgba(map.get($colors, $type, 'base'), math.div(10 - $number, 10)),
// ),
// ),
// $colors
// ) !global;
}
// Background
$bg-color: () !default;
$bg-color: map.merge(
(
'page': #0a0a0a,
'': #141414,
'overlay': #1d1e1f,
),
$bg-color
);
// dark-mode
@each $type in common.$types {
@for $i from 1 through 9 {
@include set-color-mix-level($type, $i, 'light', map.get($bg-color, ''));
}
}
@each $type in common.$types {
@include set-color-mix-level($type, 2, 'dark', common.$color-white);
}
// border
$border-color-base: #f5f8ff;
$border-color: () !default;
$border-color: map.merge(
(
'darker': rgba($border-color-base, 0.35),
'dark': rgba($border-color-base, 0.3),
'': rgba($border-color-base, 0.25),
'light': rgba($border-color-base, 0.2),
'lighter': rgba($border-color-base, 0.15),
'extra-light': rgba($border-color-base, 0.1),
),
$border-color
);
// mix to hex to avoid overlay issues
@each $key, $val in $border-color {
$border-color: map.merge(
$border-color,
(
$key: mix-overlay-color($val, map.get($bg-color, '')),
)
) !global;
}
// Box-shadow
$box-shadow: () !default;
$box-shadow: map.merge(
(
'': (
0px 12px 32px 4px rgba(0, 0, 0, 0.36),
0px 8px 20px rgba(0, 0, 0, 0.72),
),
'light': (
0px 0px 12px rgba(0, 0, 0, 0.72),
),
'lighter': (
0px 0px 6px rgba(0, 0, 0, 0.72),
),
'dark': (
0px 16px 48px 16px rgba(0, 0, 0, 0.72),
0px 12px 32px #000000,
0px 8px 16px -8px #000000,
),
),
$box-shadow
);
// fill
$fill-color-base: #fafcff;
$fill-color: () !default;
$fill-color: map.merge(
(
'darker': rgba($fill-color-base, 0.2),
'dark': rgba($fill-color-base, 0.16),
'': rgba($fill-color-base, 0.12),
'light': rgba($fill-color-base, 0.08),
'lighter': rgba($fill-color-base, 0.04),
'extra-light': rgba($fill-color-base, 0.02),
'blank': transparent,
),
$fill-color
);
// mix to hex to avoid overlay issues
@each $key, $val in $fill-color {
@if ($key != 'blank') {
$fill-color: map.merge(
$fill-color,
(
$key: mix-overlay-color($val, map.get($bg-color, '')),
)
) !global;
}
}
// text
$text-color-base: #f0f5ff;
$text-color: () !default;
$text-color: map.merge(
(
'primary': rgba($text-color-base, 0.95),
'regular': rgba($text-color-base, 0.85),
'secondary': rgba($text-color-base, 0.65),
'placeholder': rgba($text-color-base, 0.55),
'disabled': rgba($text-color-base, 0.4),
),
$text-color
);
// mix to hex to avoid overlay issues
@each $key, $val in $text-color {
$text-color: map.merge(
$text-color,
(
$key: mix-overlay-color($val, map.get($bg-color, '')),
)
) !global;
}
// mask
$mask-color: () !default;
$mask-color: map.merge(
(
'': rgba(0, 0, 0, 0.8),
'extra-light': rgba(0, 0, 0, 0.3),
),
$mask-color
);
// Button
// css3 var in packages/theme-chalk/src/button.scss
$button: () !default;
$button: map.merge(
(
'disabled-text-color': rgba(255, 255, 255, 0.5),
),
$button
);
// card
$card: () !default;
$card: map.merge(
(
'bg-color': getCssVar('bg-color', 'overlay'),
),
$card
);
// Empty
// css3 var in packages/theme-chalk/src/empty.scss
$empty: () !default;
$empty: map.merge(
(
'fill-color-0': getCssVar('color-black'),
'fill-color-1': #4b4b52,
'fill-color-2': #36383d,
'fill-color-3': #1e1e20,
'fill-color-4': #262629,
'fill-color-5': #202124,
'fill-color-6': #212224,
'fill-color-7': #1b1c1f,
'fill-color-8': #1c1d1f,
'fill-color-9': #18181a,
),
$empty
);

View File

@@ -0,0 +1,34 @@
@use 'common/var' as *;
@use 'mixins/mixins' as *;
@use 'mixins/var' as *;
@forward './date-picker/date-table.scss';
@forward './date-picker/month-table.scss';
@forward './date-picker/year-table.scss';
@forward './date-picker/time-spinner.scss';
@forward './date-picker/picker.scss';
@forward './date-picker/date-picker.scss';
@forward './date-picker/date-range-picker.scss';
@forward './date-picker/time-range-picker.scss';
@forward './date-picker/time-picker.scss';
@include b(picker-panel) {
@include when(border) {
border: solid 1px getCssVar('border-color-lighter');
@include e(body-wrapper) {
position: relative;
}
&.#{$namespace}-picker-panel *[slot='sidebar'],
&.#{$namespace}-picker-panel__sidebar {
position: absolute;
top: 0;
height: 100%;
width: 110px;
border-right: 1px solid getCssVar('datepicker-inner-border-color');
box-sizing: border-box;
padding-top: 6px;
overflow: auto;
}
}
}

View File

View File

@@ -0,0 +1,117 @@
@use '../common/var' as *;
@use '../mixins/mixins' as *;
@use '../mixins/var' as *;
@use './picker-panel.scss';
@use './utils.scss' as *;
@include b(date-picker) {
@include set-component-css-var('datepicker', $datepicker);
}
@include b(date-picker) {
width: 322px;
&.has-sidebar.has-time {
width: 434px;
}
&.has-sidebar {
width: 438px;
}
&.has-time .#{$namespace}-picker-panel__body-wrapper {
position: relative;
}
.#{$namespace}-picker-panel__content {
width: 292px;
}
table {
table-layout: fixed;
width: 100%;
}
@include e(editor-wrap) {
position: relative;
display: table-cell;
padding: 0 5px;
}
@include e(time-header) {
position: relative;
border-bottom: 1px solid getCssVar('datepicker-inner-border-color');
font-size: 12px;
padding: 8px 5px 5px;
display: table;
width: 100%;
box-sizing: border-box;
}
@include e(header) {
padding: 12px 12px 0;
text-align: center;
@include m(bordered) {
margin-bottom: 0;
padding-bottom: 12px;
border-bottom: solid 1px getCssVar('border-color-lighter');
& + .#{$namespace}-picker-panel__content {
margin-top: 0;
}
}
}
@include e(header-label) {
font-size: 16px;
font-weight: 500;
padding: 0 5px;
line-height: 22px;
text-align: center;
cursor: pointer;
color: getCssVar('text-color', 'regular');
&:hover {
color: getCssVar('datepicker-hover-text-color');
}
&:focus-visible {
outline: none;
color: getCssVar('datepicker-hover-text-color');
}
&.active {
color: getCssVar('datepicker-active-color');
}
}
@include e(prev-btn) {
float: left;
}
@include e(next-btn) {
float: right;
}
@include e(time-wrap) {
padding: 10px;
text-align: center;
}
@include e(time-label) {
float: left;
cursor: pointer;
line-height: 30px;
margin-left: 10px;
}
.#{$namespace}-time-panel {
position: absolute;
}
@include when(disabled) {
@include e(header-label) {
@include disable;
}
}
}

View File

@@ -0,0 +1,141 @@
@use '../mixins/mixins' as *;
@use '../common/var' as *;
@use '../mixins/var' as *;
@use './utils.scss' as *;
@include b(date-range-picker) {
@include set-component-css-var('datepicker', $datepicker);
}
@include b(date-range-picker) {
width: 646px;
&.has-sidebar {
width: 756px;
}
&.has-time .#{$namespace}-picker-panel__body-wrapper {
position: relative;
}
table {
table-layout: fixed;
width: 100%;
}
.#{$namespace}-picker-panel__body {
min-width: 513px;
}
.#{$namespace}-picker-panel__content {
margin: 0;
}
@include e(header) {
position: relative;
text-align: center;
height: 28px;
[class*='arrow-left'] {
float: left;
}
[class*='arrow-right'] {
float: right;
}
div {
font-size: 16px;
font-weight: 500;
margin-right: 50px;
}
}
@include e(header-label) {
font-size: 16px;
font-weight: 500;
padding: 0 5px;
line-height: 22px;
text-align: center;
cursor: pointer;
color: getCssVar('text-color', 'regular');
&:hover {
color: getCssVar('datepicker-hover-text-color');
}
&:focus-visible {
outline: none;
color: getCssVar('datepicker-hover-text-color');
}
&.active {
color: getCssVar('datepicker-active-color');
}
}
@include e(content) {
display: table-cell;
width: 50%;
box-sizing: border-box;
margin: 0;
padding: 16px;
@include when(left) {
border-right: 1px solid getCssVar('datepicker-inner-border-color');
}
.#{$namespace}-date-range-picker__header {
div {
margin-left: 50px;
margin-right: 50px;
}
}
}
@include e(editors-wrap) {
box-sizing: border-box;
display: table-cell;
@include when(right) {
text-align: right;
}
}
@include e(time-header) {
position: relative;
border-bottom: 1px solid getCssVar('datepicker-inner-border-color');
font-size: 12px;
padding: 8px 5px 5px 5px;
display: table;
width: 100%;
box-sizing: border-box;
> .#{$namespace}-icon-arrow-right {
font-size: 20px;
vertical-align: middle;
display: table-cell;
color: getCssVar('datepicker-icon-color');
}
}
@include e(time-picker-wrap) {
position: relative;
display: table-cell;
padding: 0 5px;
.#{$namespace}-picker-panel {
position: absolute;
top: 13px;
right: 0;
z-index: 1;
background: $color-white;
}
.#{$namespace}-time-panel {
position: absolute;
}
}
@include when(disabled) {
@include e(header-label) {
@include disable;
}
}
}

View File

@@ -0,0 +1,164 @@
@use '../common/var' as *;
@use '../mixins/mixins' as *;
@include b(date-table) {
font-size: 12px;
user-select: none;
@include when(week-mode) {
.#{$namespace}-date-table__row {
&:hover {
.#{$namespace}-date-table-cell {
background-color: getCssVar('datepicker-inrange-bg-color');
}
td.available:hover {
color: getCssVar('datepicker-text-color');
}
td:first-child .#{$namespace}-date-table-cell {
margin-left: 5px;
border-top-left-radius: 15px;
border-bottom-left-radius: 15px;
}
td:last-child .#{$namespace}-date-table-cell {
margin-right: 5px;
border-top-right-radius: 15px;
border-bottom-right-radius: 15px;
}
}
&.current .#{$namespace}-date-table-cell {
background-color: getCssVar('datepicker-inrange-bg-color');
}
}
}
td {
width: 32px;
height: 30px;
padding: 4px 0;
box-sizing: border-box;
text-align: center;
cursor: pointer;
position: relative;
@include b(date-table-cell) {
height: 30px;
padding: 3px 0;
box-sizing: border-box;
@include b(date-table-cell__text) {
width: 24px;
height: 24px;
display: block;
margin: 0 auto;
line-height: 24px;
position: absolute;
left: 50%;
transform: translateX(-50%);
border-radius: 50%;
}
}
&.next-month,
&.prev-month {
color: getCssVar('datepicker-off-text-color');
}
&.today {
position: relative;
.#{$namespace}-date-table-cell__text {
color: getCssVar('color-primary');
font-weight: bold;
}
&.start-date .#{$namespace}-date-table-cell__text,
&.end-date .#{$namespace}-date-table-cell__text {
color: $color-white;
}
}
&.available:hover {
color: getCssVar('datepicker-hover-text-color');
}
&.in-range .#{$namespace}-date-table-cell {
background-color: getCssVar('datepicker-inrange-bg-color');
&:hover {
background-color: getCssVar('datepicker-inrange-hover-bg-color');
}
}
&.current:not(.disabled) {
.#{$namespace}-date-table-cell__text {
color: $color-white;
background-color: getCssVar('datepicker-active-color');
}
&:focus-visible {
.#{$namespace}-date-table-cell__text {
outline: 2px solid getCssVar('datepicker-active-color');
outline-offset: 1px;
}
}
}
&.start-date .#{$namespace}-date-table-cell,
&.end-date .#{$namespace}-date-table-cell {
color: $color-white;
}
&.start-date .#{$namespace}-date-table-cell__text,
&.end-date .#{$namespace}-date-table-cell__text {
background-color: getCssVar('datepicker-active-color');
}
&.start-date .#{$namespace}-date-table-cell {
margin-left: 5px;
border-top-left-radius: 15px;
border-bottom-left-radius: 15px;
}
&.end-date .#{$namespace}-date-table-cell {
margin-right: 5px;
border-top-right-radius: 15px;
border-bottom-right-radius: 15px;
}
&.disabled .#{$namespace}-date-table-cell {
background-color: getCssVar('fill-color', 'light');
opacity: 1;
cursor: not-allowed;
color: getCssVar('text-color', 'placeholder');
}
&.selected .#{$namespace}-date-table-cell {
margin-left: 5px;
margin-right: 5px;
border-radius: 15px;
}
&.selected .#{$namespace}-date-table-cell__text {
background-color: getCssVar('datepicker-active-color');
color: $color-white;
border-radius: 15px;
}
&.week {
font-size: 80%;
color: getCssVar('datepicker-off-text-color');
cursor: default;
}
&:focus {
outline: none;
}
}
th {
padding: 5px;
color: getCssVar('datepicker-header-text-color');
font-weight: 400;
border-bottom: solid 1px getCssVar('border-color-lighter');
&.#{$namespace}-date-table__week-header {
padding: 0;
width: 24px;
}
}
}

View File

@@ -0,0 +1,112 @@
@use '../mixins/mixins' as *;
@use '../common/var' as *;
@include b(month-table) {
font-size: 12px;
margin: -1px;
border-collapse: collapse;
td {
width: 68px;
text-align: center;
padding: 8px 0;
cursor: pointer;
position: relative;
@include b(date-table-cell) {
height: 48px;
padding: 6px 0;
box-sizing: border-box;
}
&.today {
.#{$namespace}-date-table-cell__text {
color: getCssVar('color-primary');
font-weight: bold;
}
&.start-date .#{$namespace}-date-table-cell__text,
&.end-date .#{$namespace}-date-table-cell__text {
color: $color-white;
}
}
&.disabled .#{$namespace}-date-table-cell__text {
background-color: getCssVar('fill-color', 'light');
cursor: not-allowed;
color: getCssVar('text-color', 'placeholder');
&:hover {
color: getCssVar('text-color', 'placeholder');
}
}
@include b(date-table-cell__text) {
width: 54px;
height: 36px;
display: block;
line-height: 36px;
color: getCssVar('datepicker-text-color');
margin: 0 auto;
border-radius: 18px;
position: absolute;
left: 50%;
transform: translateX(-50%);
&:hover {
color: getCssVar('datepicker-hover-text-color');
}
}
&.in-range .#{$namespace}-date-table-cell {
background-color: getCssVar('datepicker-inrange-bg-color');
&:hover {
background-color: getCssVar('datepicker-inrange-hover-bg-color');
}
}
&.start-date .#{$namespace}-date-table-cell,
&.end-date .#{$namespace}-date-table-cell {
color: $color-white;
}
&.start-date .#{$namespace}-date-table-cell__text,
&.end-date .#{$namespace}-date-table-cell__text {
color: $color-white;
background-color: getCssVar('datepicker-active-color');
}
&.start-date .#{$namespace}-date-table-cell {
margin-left: 3px;
border-top-left-radius: 24px;
border-bottom-left-radius: 24px;
}
&.end-date .#{$namespace}-date-table-cell {
margin-right: 3px;
border-top-right-radius: 24px;
border-bottom-right-radius: 24px;
}
&.current:not(.disabled) .#{$namespace}-date-table-cell {
border-radius: 24px;
margin-left: 3px;
margin-right: 3px;
}
&.current:not(.disabled) .#{$namespace}-date-table-cell__text {
color: $color-white;
background-color: getCssVar('datepicker-active-color');
}
&:focus-visible {
outline: none;
.#{$namespace}-date-table-cell__text {
outline: 2px solid getCssVar('datepicker-active-color');
outline-offset: 1px;
}
}
}
}

View File

@@ -0,0 +1,147 @@
@use '../mixins/mixins' as *;
@use '../common/var' as *;
@use './utils.scss' as *;
@include b(picker-panel) {
color: getCssVar('text-color', 'regular');
background: getCssVar('bg-color', 'overlay');
border-radius: getCssVarWithDefault(
('popper', 'border-radius'),
getCssVar('border-radius-base')
);
line-height: 30px;
.#{$namespace}-time-panel {
margin: 5px 0;
border: solid 1px getCssVar('datepicker-border-color');
background-color: getCssVar('bg-color', 'overlay');
box-shadow: getCssVar('box-shadow-light');
}
@include e((body, body-wrapper)) {
&::after {
content: '';
display: table;
clear: both;
}
}
@include e(content) {
position: relative;
margin: 15px;
}
@include e(footer) {
border-top: 1px solid getCssVar('datepicker-inner-border-color');
padding: 4px 12px;
text-align: right;
background-color: getCssVar('bg-color', 'overlay');
position: relative;
font-size: 0;
}
@include e(shortcut) {
display: block;
width: 100%;
border: 0;
background-color: transparent;
line-height: 28px;
font-size: 14px;
color: getCssVar('datepicker-text-color');
padding-left: 12px;
text-align: left;
outline: none;
cursor: pointer;
&:hover {
color: getCssVar('datepicker-hover-text-color');
}
&.active {
background-color: #e6f1fe;
color: getCssVar('datepicker-active-color');
}
}
@include e(btn) {
border: 1px solid getCssVar('fill-color', 'darker');
color: getCssVar('text-color', 'primary');
line-height: 24px;
border-radius: 2px;
padding: 0 20px;
cursor: pointer;
background-color: transparent;
outline: none;
font-size: 12px;
&[disabled] {
color: getCssVar('text-color', 'disabled');
cursor: not-allowed;
}
}
@include e(icon-btn) {
font-size: 12px;
color: getCssVar('datepicker-icon-color');
border: 0;
background: transparent;
cursor: pointer;
outline: none;
line-height: 1;
padding: 1px 6px;
&:hover {
color: getCssVar('datepicker-hover-text-color');
}
&:focus-visible {
color: getCssVar('datepicker-hover-text-color');
}
@include when(disabled) {
@include disable;
}
& .#{$namespace}-icon {
cursor: pointer;
font-size: inherit;
}
}
@include e(link-btn) {
vertical-align: middle;
}
@include when(disabled) {
@include e(prev-btn) {
@include disable;
}
@include e(next-btn) {
@include disable;
}
@include e(icon-btn) {
@include disable;
}
@include e(shortcut) {
@include disable;
}
}
}
.#{$namespace}-picker-panel *[slot='sidebar'],
.#{$namespace}-picker-panel__sidebar {
position: absolute;
top: 0;
bottom: 0;
width: 110px;
border-right: 1px solid getCssVar('datepicker-inner-border-color');
box-sizing: border-box;
padding-top: 6px;
overflow: auto;
}
.#{$namespace}-picker-panel
*[slot='sidebar']
+ .#{$namespace}-picker-panel__body,
.#{$namespace}-picker-panel__sidebar + .#{$namespace}-picker-panel__body {
margin-left: 110px;
}

View File

@@ -0,0 +1,217 @@
@use 'sass:map';
@use '../mixins/mixins' as *;
@use '../mixins/var' as *;
@use '../common/var' as *;
@use '../common/transition' as *;
@include b(picker) {
@include e(popper) {
@include set-css-var-type('datepicker', 'border-color', $datepicker);
@include picker-popper(
getCssVar('bg-color', 'overlay'),
1px solid getCssVar('datepicker', 'border-color'),
getCssVar('box-shadow', 'light')
);
}
}
@include b(date-editor) {
@include set-component-css-var('date-editor', $date-editor);
@include set-component-css-var('input', $input);
position: relative;
text-align: left;
vertical-align: middle;
&.#{$namespace}-input__wrapper {
@include inset-input-border(
var(
#{getCssVarName('input-border-color')},
map.get($input, 'border-color')
)
);
&:hover {
@include inset-input-border(#{getCssVar('input', 'hover-border-color')});
}
}
@include when(focus) {
.#{$namespace}-input__wrapper {
@include inset-input-border(#{getCssVar('input', 'focus-border-color')});
}
}
&.#{$namespace}-input,
&.#{$namespace}-input__wrapper {
width: getCssVar('date-editor-width');
height: var(#{getCssVarName('input-height')}, getCssVar('component-size'));
}
@include m((monthrange)) {
@include css-var-from-global(
'date-editor-width',
'date-editor-monthrange-width'
);
}
@include m((daterange, timerange)) {
@include css-var-from-global(
'date-editor-width',
'date-editor-daterange-width'
);
}
@include m(datetimerange) {
@include css-var-from-global(
'date-editor-width',
'date-editor-datetimerange-width'
);
}
@include m(dates) {
.#{$namespace}-input__wrapper {
text-overflow: ellipsis;
white-space: nowrap;
}
}
.close-icon {
cursor: pointer;
}
.clear-icon {
cursor: pointer;
&:hover {
color: getCssVar('input-clear-hover-color');
}
}
.#{$namespace}-range__icon {
height: inherit;
font-size: 14px;
color: getCssVar('text-color', 'placeholder');
float: left;
svg {
vertical-align: middle;
}
}
.#{$namespace}-range-input {
appearance: none;
border: none;
outline: none;
display: inline-block;
height: #{map.get($input-height, 'default') - 2};
line-height: #{map.get($input-height, 'default') - 2};
margin: 0;
padding: 0;
width: 39%;
text-align: center;
font-size: getCssVar('font-size', 'base');
color: getCssVar('text-color', 'regular');
background-color: transparent;
&::placeholder {
color: getCssVar('text-color', 'placeholder');
}
}
.#{$namespace}-range-separator {
flex: 1;
display: inline-flex;
justify-content: center;
align-items: center;
height: 100%;
padding: 0 5px;
margin: 0;
font-size: 14px;
overflow-wrap: break-word;
color: getCssVar('text-color', 'primary');
}
.#{$namespace}-range__close-icon {
font-size: 14px;
color: getCssVar('text-color', 'placeholder');
height: inherit;
width: unset;
cursor: pointer;
&:hover {
color: getCssVar('input-clear-hover-color');
}
svg {
vertical-align: middle;
}
&--hidden {
opacity: 0;
visibility: hidden;
}
}
}
@include b(range-editor) {
&.#{$namespace}-input__wrapper {
display: inline-flex;
align-items: center;
padding: 0 10px;
vertical-align: middle;
}
@include when(active) {
@include inset-input-border(#{getCssVar('input', 'focus-border-color')});
&:hover {
@include inset-input-border(#{getCssVar('input', 'focus-border-color')});
}
}
@each $size in (large, small) {
@include m($size) {
line-height: getCssVar('component-size', $size);
&.#{$namespace}-input__wrapper {
height: getCssVar('component-size', $size);
}
.#{$namespace}-range-separator {
line-height: map.get($input-line-height, $size);
font-size: map.get($input-font-size, $size);
}
.#{$namespace}-range-input {
height: #{map.get($input-height, $size) - 2};
line-height: #{map.get($input-height, $size) - 2};
font-size: map.get($input-font-size, $size);
}
}
}
@include when(disabled) {
background-color: map.get($input-disabled, 'fill');
border-color: map.get($input-disabled, 'border');
color: map.get($input-disabled, 'text-color');
cursor: not-allowed;
&:hover,
&:focus {
border-color: map.get($input-disabled, 'border');
}
input {
background-color: map.get($input-disabled, 'fill');
color: map.get($input-disabled, 'text-color');
cursor: not-allowed;
&::placeholder {
color: map.get($input-disabled, 'placeholder-color');
}
}
.#{$namespace}-range-separator {
color: map.get($input-disabled, 'text-color');
}
}
}

View File

@@ -0,0 +1,90 @@
@use '../mixins/mixins' as *;
@use '../common/var' as *;
@include b(time-panel) {
border-radius: 2px;
position: relative;
width: 180px;
left: 0;
z-index: getCssVar('index-top');
user-select: none;
box-sizing: content-box;
@include e(content) {
font-size: 0;
position: relative;
overflow: hidden;
&::after,
&::before {
content: '';
top: 50%;
position: absolute;
margin-top: -16px;
height: 32px;
z-index: -1;
left: 0;
right: 0;
box-sizing: border-box;
padding-top: 6px;
text-align: left;
}
&::after {
left: 50%;
margin-left: 12%;
margin-right: 12%;
}
&::before {
padding-left: 50%;
margin-right: 12%;
margin-left: 12%;
border-top: 1px solid getCssVar('border-color-light');
border-bottom: 1px solid getCssVar('border-color-light');
}
&.has-seconds {
&::after {
left: calc(100% / 3 * 2);
}
&::before {
padding-left: calc(100% / 3);
}
}
}
@include e(footer) {
border-top: 1px solid
var(
#{getCssVarName('timepicker-inner-border-color')},
#{getCssVar('border-color-light')}
);
padding: 4px;
height: 36px;
line-height: 25px;
text-align: right;
box-sizing: border-box;
}
@include e(btn) {
border: none;
line-height: 28px;
padding: 0 5px;
margin: 0 5px;
cursor: pointer;
background-color: transparent;
outline: none;
font-size: 12px;
color: getCssVar('text-color', 'primary');
&.confirm {
font-weight: 800;
color: var(
#{getCssVarName('timepicker-active-color')},
#{getCssVar('color-primary')}
);
}
}
}

View File

@@ -0,0 +1,33 @@
@use '../mixins/mixins' as *;
@use '../common/var' as *;
@include b(time-range-picker) {
width: 354px;
overflow: visible;
@include e(content) {
position: relative;
text-align: center;
padding: 10px;
z-index: 1;
}
@include e(cell) {
box-sizing: border-box;
margin: 0;
padding: 4px 7px 7px;
width: 50%;
display: inline-block;
}
@include e(header) {
margin-bottom: 5px;
text-align: center;
font-size: 14px;
}
@include e(body) {
border-radius: 2px;
border: 1px solid getCssVar('datepicker-border-color');
}
}

View File

@@ -0,0 +1,115 @@
@use '../mixins/mixins' as *;
@use '../common/var' as *;
@include b(time-spinner) {
&.has-seconds {
.#{$namespace}-time-spinner__wrapper {
width: 33.3%;
}
}
@include e(wrapper) {
max-height: 192px;
overflow: auto;
display: inline-block;
width: 50%;
vertical-align: top;
position: relative;
&.#{$namespace}-scrollbar__wrap:not(
.#{$namespace}-scrollbar__wrap--hidden-default
) {
padding-bottom: 15px;
}
@include when(arrow) {
box-sizing: border-box;
text-align: center;
overflow: hidden;
.#{$namespace}-time-spinner__list {
transform: translateY(-32px);
}
.#{$namespace}-time-spinner__item:hover:not(.is-disabled):not(
.is-active
) {
background: getCssVar('fill-color', 'light');
cursor: default;
}
}
}
@include e(arrow) {
font-size: 12px;
color: getCssVar('text-color', 'secondary');
position: absolute;
left: 0;
width: 100%;
z-index: getCssVar('index-normal');
text-align: center;
height: 30px;
line-height: 30px;
cursor: pointer;
&:hover {
color: getCssVar('color-primary');
}
&.arrow-up {
top: 10px;
}
&.arrow-down {
bottom: 10px;
}
}
@include e(input) {
&.#{$namespace}-input {
width: 70%;
.#{$namespace}-input__inner {
padding: 0;
text-align: center;
}
}
}
@include e(list) {
padding: 0;
margin: 0;
list-style: none;
text-align: center;
&::after,
&::before {
content: '';
display: block;
width: 100%;
height: 80px;
}
}
@include e(item) {
height: 32px;
line-height: 32px;
font-size: 12px;
color: getCssVar('text-color', 'regular');
&:hover:not(.is-disabled):not(.is-active) {
background: getCssVar('fill-color', 'light');
cursor: pointer;
}
&.is-active:not(.is-disabled) {
color: getCssVar('text-color', 'primary');
font-weight: bold;
}
&.is-disabled {
color: getCssVar('text-color', 'placeholder');
cursor: not-allowed;
}
}
}

View File

@@ -0,0 +1,14 @@
@use '../mixins/mixins' as *;
@use '../common/var' as *;
@mixin disable {
color: getCssVar('text-color-disabled');
&:hover {
cursor: not-allowed;
}
& .#{$namespace}-icon {
cursor: inherit;
}
}

View File

@@ -0,0 +1,108 @@
@use '../mixins/mixins' as *;
@use '../common/var' as *;
@include b(year-table) {
font-size: 12px;
margin: -1px;
border-collapse: collapse;
.#{$namespace}-icon {
color: getCssVar('datepicker', 'icon-color');
}
td {
width: 68px;
text-align: center;
padding: 8px 0px;
cursor: pointer;
position: relative;
@include b(date-table-cell) {
height: 48px;
padding: 6px 0;
box-sizing: border-box;
}
&.today {
.#{$namespace}-date-table-cell__text {
color: getCssVar('color', 'primary');
font-weight: bold;
}
&.start-date .#{$namespace}-date-table-cell__text,
&.end-date .#{$namespace}-date-table-cell__text {
color: $color-white;
}
}
&.disabled .#{$namespace}-date-table-cell__text {
background-color: getCssVar('fill-color', 'light');
cursor: not-allowed;
color: getCssVar('text-color', 'placeholder');
&:hover {
color: getCssVar('text-color', 'placeholder');
}
}
@include b(date-table-cell__text) {
width: 60px;
height: 36px;
display: block;
line-height: 36px;
color: getCssVar('datepicker-text-color');
border-radius: 18px;
margin: 0 auto;
position: absolute;
left: 50%;
transform: translateX(-50%);
&:hover {
color: getCssVar('datepicker-hover-text-color');
}
}
&.in-range .#{$namespace}-date-table-cell {
background-color: getCssVar('datepicker-inrange-bg-color');
&:hover {
background-color: getCssVar('datepicker-inrange-hover-bg-color');
}
}
&.start-date .#{$namespace}-date-table-cell,
&.end-date .#{$namespace}-date-table-cell {
color: $color-white;
}
&.start-date .#{$namespace}-date-table-cell__text,
&.end-date .#{$namespace}-date-table-cell__text {
color: $color-white;
background-color: getCssVar('datepicker-active-color');
}
&.start-date .#{$namespace}-date-table-cell {
border-top-left-radius: 24px;
border-bottom-left-radius: 24px;
}
&.end-date .#{$namespace}-date-table-cell {
border-top-right-radius: 24px;
border-bottom-right-radius: 24px;
}
&.current:not(.disabled) .#{$namespace}-date-table-cell__text {
color: $color-white;
background-color: getCssVar('datepicker-active-color');
}
&:focus-visible {
outline: none;
.#{$namespace}-date-table-cell__text {
outline: 2px solid getCssVar('datepicker-active-color');
outline-offset: 1px;
}
}
}
}

View File

@@ -0,0 +1,77 @@
@use 'sass:map';
@use 'mixins/mixins' as *;
@use 'common/var' as *;
$descriptions-item-label-margin-right: () !default;
$descriptions-item-label-margin-right: map.merge(
(
'large': 16px,
'default': 16px,
'small': 12px,
),
$descriptions-item-label-margin-right
);
$descriptions-item-vertical-label-padding-bottom: () !default;
$descriptions-item-vertical-label-padding-bottom: map.merge(
(
'large': 8px,
'default': 6px,
'small': 4px,
),
$descriptions-item-vertical-label-padding-bottom
);
@include b(descriptions) {
@include e(label) {
&.#{$namespace}-descriptions__cell.is-bordered-label {
font-weight: bold;
color: getCssVar('text-color', 'regular');
background: getCssVar('descriptions-item-bordered-label-background');
}
&:not(.is-bordered-label) {
color: getCssVar('text-color', 'primary');
margin-right: map.get($descriptions-item-label-margin-right, 'default');
}
&.#{$namespace}-descriptions__cell:not(
.is-bordered-label
).is-vertical-label {
padding-bottom: map.get(
$descriptions-item-vertical-label-padding-bottom,
'default'
);
}
}
@include e(content) {
&.#{$namespace}-descriptions__cell.is-bordered-content {
color: getCssVar('text-color', 'primary');
}
&:not(.is-bordered-label) {
color: getCssVar('text-color', 'regular');
}
}
@each $size in (large, small) {
@include m($size) {
@include e(label) {
&:not(.is-bordered-label) {
margin-right: map.get($descriptions-item-label-margin-right, $size);
}
&.#{$namespace}-descriptions__cell:not(
.is-bordered-label
).is-vertical-label {
padding-bottom: map.get(
$descriptions-item-vertical-label-padding-bottom,
$size
);
}
}
}
}
}

View File

@@ -0,0 +1,151 @@
@use 'sass:map';
@use 'mixins/mixins' as *;
@use 'mixins/var' as *;
@use 'common/var' as *;
$descriptions-header-margin-bottom: () !default;
$descriptions-header-margin-bottom: map.merge(
(
'large': 20px,
'default': 16px,
'small': 12px,
),
$descriptions-header-margin-bottom
);
$descriptions-title-font-size: () !default;
$descriptions-title-font-size: map.merge(
(
'large': 16px,
'default': 16px,
'small': 14px,
),
$descriptions-title-font-size
);
$descriptions-cell-padding-bottom: () !default;
$descriptions-cell-padding-bottom: map.merge(
(
'large': 16px,
'default': 12px,
'small': 8px,
),
$descriptions-cell-padding-bottom
);
$descriptions-bordered-cell-padding: () !default;
$descriptions-bordered-cell-padding: map.merge(
(
'large': 12px 15px,
'default': 8px 11px,
'small': 4px 7px,
),
$descriptions-bordered-cell-padding
);
$descriptions-cell-font-size: () !default;
$descriptions-cell-font-size: map.merge(
(
'large': 14px,
'default': 14px,
'small': 12px,
),
$descriptions-cell-font-size
);
@include b(descriptions) {
@include set-component-css-var('descriptions', $descriptions);
box-sizing: border-box;
font-size: getCssVar('font-size', 'base');
color: getCssVar('text-color', 'primary');
@include e(header) {
display: flex;
justify-content: space-between;
align-items: center;
margin-bottom: map.get($descriptions-header-margin-bottom, 'default');
@include e(title) {
color: getCssVar('text-color', 'primary');
font-size: map.get($descriptions-title-font-size, 'default');
font-weight: bold;
}
}
@include e(body) {
background-color: getCssVar('fill-color', 'blank');
.#{$namespace}-descriptions__table {
border-collapse: collapse;
width: 100%;
.#{$namespace}-descriptions__cell {
box-sizing: border-box;
text-align: left;
line-height: 23px;
font-size: map.get($descriptions-cell-font-size, 'default');
@include when(left) {
text-align: left;
}
@include when(center) {
text-align: center;
}
@include when(right) {
text-align: right;
}
}
&.is-bordered {
.#{$namespace}-descriptions__cell {
border: getCssVar('descriptions-table-border');
padding: map.get($descriptions-bordered-cell-padding, 'default');
}
}
&:not(.is-bordered) {
.#{$namespace}-descriptions__cell {
padding-bottom: map.get($descriptions-cell-padding-bottom, 'default');
}
}
}
}
@each $size in (large, small) {
@include m($size) {
font-size: map.get($input-font-size, $size);
@include e(header) {
margin-bottom: map.get($descriptions-header-margin-bottom, $size);
@include e(title) {
font-size: map.get($descriptions-title-font-size, $size);
}
}
@include e(body) {
.#{$namespace}-descriptions__table {
.#{$namespace}-descriptions__cell {
font-size: map.get($descriptions-cell-font-size, $size);
}
&.is-bordered {
.#{$namespace}-descriptions__cell {
padding: map.get($descriptions-bordered-cell-padding, $size);
}
}
&:not(.is-bordered) {
.#{$namespace}-descriptions__cell {
padding-bottom: map.get($descriptions-cell-padding-bottom, $size);
}
}
}
}
}
}
}

View File

@@ -0,0 +1,202 @@
@use 'sass:map';
@use 'mixins/mixins' as *;
@use 'mixins/utils' as *;
@use 'mixins/var' as *;
@use 'common/var' as *;
@use 'common/popup' as *;
@include b(dialog) {
@include set-component-css-var('dialog', $dialog);
position: relative;
margin: var(#{getCssVarName('dialog-margin-top')}, 15vh) auto 50px;
background: getCssVar('dialog', 'bg-color');
border-radius: getCssVar('dialog', 'border-radius');
box-shadow: getCssVar('dialog', 'box-shadow');
box-sizing: border-box;
padding: getCssVar('dialog', 'padding-primary');
width: var(#{getCssVarName('dialog-width')}, 50%);
overflow-wrap: break-word;
&:focus {
outline: none !important;
}
@include when(align-center) {
margin: auto;
}
@include when(fullscreen) {
@include set-css-var-value('dialog-width', 100%);
@include set-css-var-value('dialog-margin-top', 0);
margin-bottom: 0;
height: 100%;
overflow: auto;
border-radius: 0px;
}
@include e(wrapper) {
position: fixed;
top: 0;
right: 0;
bottom: 0;
left: 0;
overflow: auto;
margin: 0;
}
@include when(draggable) {
@include e(header) {
cursor: move;
user-select: none;
}
}
@include e(header) {
padding-bottom: getCssVar('dialog', 'padding-primary');
&.show-close {
padding-right: calc(
getCssVar('dialog', 'padding-primary') +
var(
#{getCssVarName('message-close-size')},
map.get($message, 'close-size')
)
);
}
}
@include e(headerbtn) {
position: absolute;
top: 0;
right: 0;
padding: 0;
width: 48px;
height: 48px;
background: transparent;
border: none;
outline: none;
cursor: pointer;
font-size: var(
#{getCssVarName('message-close-size')},
map.get($message, 'close-size')
);
.#{$namespace}-dialog__close {
color: getCssVar('color', 'info');
font-size: inherit;
}
&:focus,
&:hover {
.#{$namespace}-dialog__close {
color: getCssVar('color', 'primary');
}
}
}
@include e(title) {
line-height: getCssVar('dialog-font-line-height');
font-size: getCssVar('dialog-title-font-size');
color: getCssVar('text-color', 'primary');
}
@include e(body) {
color: getCssVar('text-color', 'regular');
font-size: getCssVar('dialog-content-font-size');
}
@include e(footer) {
padding-top: getCssVar('dialog', 'padding-primary');
text-align: right;
box-sizing: border-box;
}
// 内容居中布局
@include m(center) {
text-align: center;
@include e(body) {
text-align: initial;
}
@include e(footer) {
text-align: inherit;
}
}
}
.#{$namespace}-modal-dialog {
&.is-penetrable {
pointer-events: none;
.#{$namespace}-dialog {
pointer-events: auto;
}
}
}
.#{$namespace}-overlay-dialog {
position: fixed;
top: 0;
right: 0;
bottom: 0;
left: 0;
overflow: auto;
}
.dialog-fade-enter-active {
animation: modal-fade-in getCssVar('transition-duration');
.#{$namespace}-overlay-dialog {
animation: dialog-fade-in getCssVar('transition-duration');
}
}
.dialog-fade-leave-active {
animation: modal-fade-out getCssVar('transition-duration');
.#{$namespace}-overlay-dialog {
animation: dialog-fade-out getCssVar('transition-duration');
}
}
@keyframes dialog-fade-in {
0% {
transform: translate3d(0, -20px, 0);
opacity: 0;
}
100% {
transform: translate3d(0, 0, 0);
opacity: 1;
}
}
@keyframes dialog-fade-out {
0% {
transform: translate3d(0, 0, 0);
opacity: 1;
}
100% {
transform: translate3d(0, -20px, 0);
opacity: 0;
}
}
@keyframes modal-fade-in {
0% {
opacity: 0;
}
100% {
opacity: 1;
}
}
@keyframes modal-fade-out {
0% {
opacity: 1;
}
100% {
opacity: 0;
}
}

View File

@@ -0,0 +1,12 @@
@use 'common/var' as *;
@use 'mixins/mixins' as *;
.hidden {
@each $break-point-name, $value in $breakpoints-spec {
&-#{$break-point-name} {
@include res($break-point-name, $breakpoints-spec) {
display: none !important;
}
}
}
}

View File

@@ -0,0 +1,48 @@
@use 'common/var' as *;
@use 'mixins/mixins' as *;
@include b(divider) {
position: relative;
@include m(horizontal) {
display: block;
height: 1px;
width: 100%;
margin: 24px 0;
border-top: 1px getCssVar('border-color') getCssVar('border-style');
}
@include m(vertical) {
display: inline-block;
width: 1px;
height: 1em;
margin: 0 8px;
vertical-align: middle;
position: relative;
border-left: 1px getCssVar('border-color') getCssVar('border-style');
}
@include e(text) {
position: absolute;
background-color: getCssVar('bg-color');
padding: 0 20px;
font-weight: 500;
color: getCssVar('text-color', 'primary');
font-size: 14px;
@include when(left) {
left: 20px;
transform: translateY(-50%);
}
@include when(center) {
left: 50%;
transform: translateX(-50%) translateY(-50%);
}
@include when(right) {
right: 20px;
transform: translateY(-50%);
}
}
}

View File

@@ -0,0 +1,241 @@
@use 'mixins/mixins' as *;
@use 'mixins/var' as *;
@use 'common/var' as *;
$directions: rtl, ltr, ttb, btt;
.#{$namespace}-overlay.is-drawer {
overflow: hidden;
}
@include b(drawer) {
@include set-component-css-var('drawer', $drawer);
}
@include b(drawer) {
position: absolute;
box-sizing: border-box;
background-color: getCssVar('drawer', 'bg-color');
display: flex;
flex-direction: column;
box-shadow: getCssVar('box-shadow', 'dark');
transition: all getCssVar('transition-duration');
@each $direction in $directions {
.#{$direction} {
transform: translate(0, 0);
}
}
&__sr-focus:focus {
outline: none !important;
}
&__header {
align-items: center;
color: getCssVar('text-color', 'primary');
display: flex;
margin-bottom: 32px;
padding: getCssVar('drawer-padding-primary');
padding-bottom: 0;
overflow: hidden;
& > :first-child {
flex: 1;
}
}
&__title {
margin: 0;
flex: 1;
line-height: inherit;
font-size: 16px;
}
@include e(footer) {
padding: getCssVar('drawer-padding-primary');
padding-top: 10px;
text-align: right;
overflow: hidden;
}
&__close-btn {
display: inline-flex;
border: none;
cursor: pointer;
font-size: getCssVar('font-size-extra-large');
color: inherit;
background-color: transparent;
outline: none;
&:focus,
&:hover {
i {
color: getCssVar('color-primary');
}
}
}
&__body {
flex: 1;
padding: getCssVar('drawer-padding-primary');
overflow: auto;
& > * {
box-sizing: border-box;
}
}
@include when(dragging) {
transition: none;
}
@include e(dragger) {
position: absolute;
background-color: transparent;
user-select: none;
transition: all 0.2s;
&::before {
content: '';
position: absolute;
background-color: transparent;
transition: all 0.2s;
}
&:hover::before {
background-color: getCssVar('color-primary');
}
}
&.ltr,
&.rtl {
height: 100%;
top: 0;
bottom: 0;
> .#{$namespace}-drawer__dragger {
height: 100%;
width: getCssVar('drawer-dragger-size');
top: 0;
bottom: 0;
cursor: ew-resize;
&::before {
top: 0;
bottom: 0;
width: 3px;
}
}
}
&.ttb,
&.btt {
width: 100%;
left: 0;
right: 0;
> .#{$namespace}-drawer__dragger {
width: 100%;
height: getCssVar('drawer-dragger-size');
left: 0;
right: 0;
cursor: ns-resize;
&::before {
left: 0;
right: 0;
height: 3px;
}
}
}
&.ltr {
left: 0;
> .#{$namespace}-drawer__dragger {
right: 0;
&::before {
right: -2px;
}
}
}
&.rtl {
right: 0;
> .#{$namespace}-drawer__dragger {
left: 0;
&::before {
left: -2px;
}
}
}
&.ttb {
top: 0;
> .#{$namespace}-drawer__dragger {
bottom: 0;
&::before {
bottom: -2px;
}
}
}
&.btt {
bottom: 0;
> .#{$namespace}-drawer__dragger {
top: 0;
&::before {
top: -2px;
}
}
}
}
.#{$namespace}-drawer-fade {
&-enter-active,
&-leave-active {
transition: all getCssVar('transition-duration');
}
&-enter-from,
&-enter-active,
&-enter-to,
&-leave-from,
&-leave-active,
&-leave-to {
overflow: hidden !important;
}
&-enter-from,
&-leave-to {
background-color: transparent !important;
}
&-enter-from,
&-leave-to {
@each $direction in $directions {
.#{$direction} {
@if $direction == ltr {
transform: translateX(-100%);
}
@if $direction == rtl {
transform: translateX(100%);
}
@if $direction == ttb {
transform: translateY(-100%);
}
@if $direction == btt {
transform: translateY(100%);
}
}
}
}
}

View File

View File

View File

@@ -0,0 +1,208 @@
@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);
}
}
}
}
}

View File

@@ -0,0 +1,49 @@
@use 'mixins/mixins' as *;
@use 'mixins/var' as *;
@use 'common/var' as *;
@include b(empty) {
@include set-component-css-var('empty', $empty);
display: flex;
justify-content: center;
align-items: center;
flex-direction: column;
text-align: center;
box-sizing: border-box;
padding: getCssVar('empty-padding');
@include e(image) {
width: getCssVar('empty-image-width');
img {
user-select: none;
width: 100%;
height: 100%;
vertical-align: top;
object-fit: contain;
}
svg {
color: getCssVar('svg-monochrome-grey');
fill: currentColor;
width: 100%;
height: 100%;
vertical-align: top;
}
}
@include e(description) {
margin-top: getCssVar('empty-description-margin-top');
p {
margin: 0;
font-size: getCssVar('font-size', 'base');
color: getCssVar('text-color', 'secondary');
}
}
@include e(bottom) {
margin-top: getCssVar('empty-bottom-margin-top');
}
}

View File

@@ -0,0 +1,12 @@
@use 'mixins/mixins' as *;
@use 'mixins/var' as *;
@use 'common/var' as *;
@include b(footer) {
@include set-component-css-var('footer', $footer);
padding: getCssVar('footer-padding');
box-sizing: border-box;
flex-shrink: 0;
height: getCssVar('footer-height');
}

View File

View File

@@ -0,0 +1,253 @@
@use 'sass:map';
@use 'mixins/mixins' as *;
@use 'mixins/utils' as *;
@use 'mixins/var' as *;
@use 'common/var' as *;
$form-item-margin-bottom: () !default;
$form-item-margin-bottom: map.merge(
(
'large': 22px,
'default': 18px,
'small': 18px,
),
$form-item-margin-bottom
);
$form-item-line-height: () !default;
$form-item-line-height: map.merge(
(
'large': 40px,
'default': 32px,
'small': 24px,
),
$form-item-line-height
);
$form-item-error-padding-top: () !default;
$form-item-error-padding-top: map.merge(
(
'large': 4px,
'default': 2px,
'small': 2px,
),
$form-item-error-padding-top
);
$form-item-label-top-line-height: () !default;
$form-item-label-top-line-height: map.merge(
(
'large': 22px,
'default': 22px,
'small': 20px,
),
$form-item-label-top-line-height
);
$form-item-label-top-margin-bottom: () !default;
$form-item-label-top-margin-bottom: map.merge(
(
'large': 12px,
'default': 8px,
'small': 4px,
),
$form-item-label-top-margin-bottom
);
@include b(form) {
@include set-component-css-var('form', $form);
@include m(inline) {
.#{$namespace}-form-item {
display: inline-flex;
vertical-align: middle;
margin-right: 32px;
}
&.#{$namespace}-form--label-top {
display: flex;
flex-wrap: wrap;
.#{$namespace}-form-item {
display: block;
}
}
}
}
@include b(form-item) {
display: flex;
--font-size: #{map.get($input-font-size, 'default')};
margin-bottom: #{map.get($form-item-margin-bottom, 'default')};
.#{$namespace}-form-item {
margin-bottom: 0;
}
.#{$namespace}-input__validateIcon {
display: none;
}
@each $size in (large, default, small) {
@include m($size) {
--font-size: #{map.get($input-font-size, $size)};
@include set-css-var-value(('form', 'label-font-size'), var(--font-size));
margin-bottom: #{map.get($form-item-margin-bottom, $size)};
@include e(label) {
height: #{map.get($form-item-line-height, $size)};
line-height: #{map.get($form-item-line-height, $size)};
}
@include e(content) {
line-height: #{map.get($form-item-line-height, $size)};
}
@include e(error) {
padding-top: #{map.get($form-item-error-padding-top, $size)};
}
}
}
@include m(label-left) {
.#{$namespace}-form-item__label {
text-align: left;
justify-content: flex-start;
}
}
@include m(label-right) {
.#{$namespace}-form-item__label {
text-align: right;
justify-content: flex-end;
}
}
@include m(label-top) {
display: block;
.#{$namespace}-form-item__label {
display: block;
width: fit-content;
height: auto;
text-align: left;
margin-bottom: #{map.get($form-item-label-top-margin-bottom, 'default')};
line-height: #{map.get($form-item-label-top-line-height, 'default')};
}
}
@include e(label-wrap) {
display: flex;
}
@include e(label) {
display: inline-flex;
align-items: flex-start;
flex: 0 0 auto;
font-size: getCssVar('form-label-font-size');
color: getCssVar('text-color', 'regular');
height: #{map.get($form-item-line-height, 'default')};
line-height: #{map.get($form-item-line-height, 'default')};
padding: 0 12px 0 0;
box-sizing: border-box;
}
@include e(content) {
display: flex;
flex-wrap: wrap;
align-items: center;
flex: 1;
line-height: #{map.get($form-item-line-height, 'default')};
position: relative;
font-size: var(--font-size);
min-width: 0;
.#{$namespace}-input-group {
vertical-align: top;
}
}
@include e(error) {
color: getCssVar('color-danger');
font-size: 12px;
line-height: 1;
padding-top: #{map.get($form-item-error-padding-top, 'default')};
position: absolute;
top: 100%;
left: 0;
@include m(inline) {
position: relative;
top: auto;
left: auto;
display: inline-block;
margin-left: 10px;
}
}
@include when(required) {
@include pseudo('not(.is-no-asterisk)') {
&.asterisk-left {
> .#{$namespace}-form-item__label:before,
> .#{$namespace}-form-item__label-wrap
> .#{$namespace}-form-item__label:before {
content: '*';
color: getCssVar('color-danger');
margin-right: 4px;
}
}
&.asterisk-right {
> .#{$namespace}-form-item__label:after,
> .#{$namespace}-form-item__label-wrap
> .#{$namespace}-form-item__label:after {
content: '*';
color: getCssVar('color-danger');
margin-left: 4px;
}
}
}
}
@include when(error) {
@include e(content) {
.#{$namespace}-input__wrapper,
.#{$namespace}-textarea__inner,
.#{$namespace}-select__wrapper,
.#{$namespace}-input-tag__wrapper {
&,
&:hover,
&:focus,
&.is-focus {
box-shadow: 0 0 0 1px getCssVar('color-danger') inset;
}
}
.#{$namespace}-input-group__append,
.#{$namespace}-input-group__prepend {
.#{$namespace}-input__wrapper {
box-shadow: 0 0 0 1px transparent inset;
}
.#{$namespace}-input__validateIcon {
display: none;
}
}
.#{$namespace}-input__validateIcon {
color: getCssVar('color-danger');
}
}
}
@include m(feedback) {
.#{$namespace}-input__validateIcon {
display: inline-flex;
}
}
}

View File

@@ -0,0 +1,12 @@
@use 'mixins/mixins' as *;
@use 'mixins/var' as *;
@use 'common/var' as *;
@include b(header) {
@include set-component-css-var('header', $header);
padding: getCssVar('header-padding');
box-sizing: border-box;
flex-shrink: 0;
height: getCssVar('header-height');
}

View File

@@ -0,0 +1,41 @@
@use 'mixins/mixins' as *;
@use 'common/var' as *;
.#{$namespace}-icon--right {
margin-left: 5px;
}
.#{$namespace}-icon--left {
margin-right: 5px;
}
@keyframes rotating {
0% {
transform: rotateZ(0deg);
}
100% {
transform: rotateZ(360deg);
}
}
@include b(icon) {
--color: inherit;
height: 1em;
width: 1em;
line-height: 1em;
display: inline-flex;
justify-content: center;
align-items: center;
position: relative;
fill: currentColor;
color: var(--color);
font-size: inherit;
@include when(loading) {
animation: rotating 2s linear infinite;
}
svg {
height: 1em;
width: 1em;
}
}

View File

@@ -0,0 +1,155 @@
@use 'mixins/mixins' as *;
@use 'common/var' as *;
@mixin op-icon() {
width: 44px;
height: 44px;
font-size: 24px;
color: #fff;
background-color: getCssVar('text-color', 'regular');
border-color: #fff;
}
@include b(image-viewer) {
@include e(wrapper) {
position: fixed;
top: 0;
right: 0;
bottom: 0;
left: 0;
&:focus {
outline: none !important;
}
}
@include e(btn) {
position: absolute;
z-index: 1;
display: flex;
align-items: center;
justify-content: center;
border-radius: 50%;
opacity: 0.8;
cursor: pointer;
box-sizing: border-box;
user-select: none;
.#{$namespace}-icon {
cursor: pointer;
}
}
@include e(close) {
top: 40px;
right: 40px;
width: 40px;
height: 40px;
font-size: 40px;
}
@include e(canvas) {
position: static;
width: 100%;
height: 100%;
display: flex;
justify-content: center;
align-items: center;
user-select: none;
}
@include e(actions) {
left: 50%;
bottom: 30px;
transform: translateX(-50%);
height: 44px;
padding: 0 23px;
background-color: getCssVar('text-color', 'regular');
border-color: #fff;
border-radius: 22px;
@include e(actions__inner) {
width: 100%;
height: 100%;
cursor: default;
font-size: 23px;
color: #fff;
display: flex;
align-items: center;
justify-content: space-around;
gap: 22px;
padding: 0 6px;
@include e(actions__divider) {
margin: 0 -6px;
}
}
}
@include e(progress) {
left: 50%;
transform: translateX(-50%);
cursor: default;
color: #fff;
bottom: 90px;
}
@include e(prev) {
top: 50%;
transform: translateY(-50%);
left: 40px;
@include op-icon();
}
@include e(next) {
top: 50%;
transform: translateY(-50%);
right: 40px;
text-indent: 2px;
@include op-icon();
}
@include e(close) {
@include op-icon();
}
@include e(mask) {
position: absolute;
width: 100%;
height: 100%;
top: 0;
left: 0;
opacity: 0.5;
background: #000;
}
}
.viewer-fade-enter-active {
animation: viewer-fade-in getCssVar('transition-duration');
}
.viewer-fade-leave-active {
animation: viewer-fade-out getCssVar('transition-duration');
}
@keyframes viewer-fade-in {
0% {
transform: translate3d(0, -20px, 0);
opacity: 0;
}
100% {
transform: translate3d(0, 0, 0);
opacity: 1;
}
}
@keyframes viewer-fade-out {
0% {
transform: translate3d(0, 0, 0);
opacity: 1;
}
100% {
transform: translate3d(0, -20px, 0);
opacity: 0;
}
}

View File

@@ -0,0 +1,49 @@
@use 'mixins/mixins' as *;
@use 'common/var' as *;
%size {
width: 100%;
height: 100%;
}
@include b(image) {
position: relative;
display: inline-block;
overflow: hidden;
@include e(inner) {
@extend %size !optional;
vertical-align: top;
opacity: 1;
@include when(loading) {
opacity: 0;
}
}
@include e(wrapper) {
@extend %size !optional;
position: absolute;
top: 0;
left: 0;
}
@include e(placeholder) {
@extend %size !optional;
background: getCssVar('fill-color', 'light');
}
@include e(error) {
@extend %size !optional;
display: flex;
justify-content: center;
align-items: center;
font-size: 14px;
background: getCssVar('fill-color', 'light');
color: getCssVar('text-color', 'placeholder');
vertical-align: middle;
}
@include e(preview) {
cursor: pointer;
}
}

View File

@@ -0,0 +1,114 @@
@use './base.scss';
// component styles
@use './affix.scss';
@use './alert.scss';
@use './aside.scss';
@use './autocomplete.scss';
@use './avatar.scss';
@use './backtop.scss';
@use './badge.scss';
@use './breadcrumb-item.scss';
@use './breadcrumb.scss';
@use './button-group.scss';
@use './button.scss';
@use './calendar.scss';
@use './card.scss';
@use './carousel-item.scss';
@use './carousel.scss';
@use './cascader-panel.scss';
@use './cascader.scss';
@use './check-tag.scss';
@use './checkbox-button.scss';
@use './checkbox-group.scss';
@use './checkbox.scss';
@use './col.scss';
@use './collapse-item.scss';
@use './collapse.scss';
@use './color-picker-panel.scss';
@use './color-picker.scss';
@use './config-provider.scss';
@use './container.scss';
@use './date-picker-panel.scss';
@use './date-picker.scss';
@use './descriptions';
@use './descriptions-item';
@use './dialog.scss';
@use './divider.scss';
@use './drawer.scss';
@use './dropdown-item.scss';
@use './dropdown-menu.scss';
@use './dropdown.scss';
@use './empty.scss';
@use './footer.scss';
@use './form-item.scss';
@use './form.scss';
@use './header.scss';
@use './image-viewer.scss';
@use './image.scss';
@use './infinite-scroll.scss';
@use './input.scss';
@use './input-number.scss';
@use './input-tag.scss';
@use './link.scss';
@use './loading.scss';
@use './main.scss';
@use './menu-item-group.scss';
@use './menu-item.scss';
@use './menu.scss';
@use './message-box.scss';
@use './message.scss';
@use './notification.scss';
@use './overlay.scss';
@use './page-header.scss';
@use './pagination.scss';
@use './popconfirm.scss';
@use './popover.scss';
@use './progress.scss';
@use './radio-button.scss';
@use './radio-group.scss';
@use './radio.scss';
@use './rate.scss';
@use './result.scss';
@use './row.scss';
@use './scrollbar.scss';
@use './select-v2.scss';
@use './select.scss';
@use './skeleton-item.scss';
@use './skeleton.scss';
@use './slider.scss';
@use './space.scss';
@use './spinner.scss';
@use './step.scss';
@use './steps.scss';
@use './sub-menu.scss';
@use './switch.scss';
@use './tab-pane.scss';
@use './table-column.scss';
@use './table.scss';
@use './table-v2.scss';
@use './tabs.scss';
@use './tag.scss';
@use './text.scss';
@use './time-picker.scss';
@use './time-select.scss';
@use './timeline-item.scss';
@use './timeline.scss';
@use './tooltip.scss';
@use './transfer.scss';
@use './tree.scss';
@use './tree-select.scss';
@use './upload.scss';
@use './virtual-list.scss';
@use './popper.scss';
@use './select-dropdown-v2.scss';
@use './select-dropdown.scss';
@use './option.scss';
@use './option-group.scss';
@use './statistic.scss';
@use './tour.scss';
@use './anchor.scss';
@use './anchor-link.scss';
@use './segmented.scss';
@use './mention.scss';
@use './splitter.scss';
@use './splitter-panel.scss';

View File

@@ -0,0 +1,192 @@
@use 'sass:math';
@use 'sass:map';
@use 'mixins/mixins' as *;
@use 'common/var' as *;
@include b(input-number) {
position: relative;
display: inline-flex;
width: map.get($input-number-width, 'default');
line-height: #{map.get($input-height, 'default') - 2};
vertical-align: middle;
.#{$namespace}-input {
&__wrapper {
padding-left: #{map.get($input-height, 'default') + 10};
padding-right: #{map.get($input-height, 'default') + 10};
}
&__inner {
-webkit-appearance: none;
-moz-appearance: textfield;
text-align: center;
line-height: 1;
&::-webkit-inner-spin-button,
&::-webkit-outer-spin-button {
margin: 0;
-webkit-appearance: none;
}
}
}
@each $align in (left, right, center) {
@include when($align) {
.#{$namespace}-input__inner {
text-align: $align;
}
}
}
@include e((increase, decrease)) {
display: flex;
justify-content: center;
align-items: center;
height: auto;
position: absolute;
z-index: 1;
top: 1px;
bottom: 1px;
width: map.get($input-height, 'default');
background: getCssVar('fill-color', 'light');
color: getCssVar('text-color', 'regular');
cursor: pointer;
font-size: 13px;
user-select: none;
&:hover {
color: getCssVar('color-primary');
& ~ .#{$namespace}-input:not(.is-disabled) .#{$namespace}-input__wrapper {
box-shadow: 0 0 0 1px
var(
#{getCssVarName('input', 'focus-border-color')},
map.get($input, 'focus-border-color')
)
inset;
}
}
&.is-disabled {
color: getCssVar('disabled-text-color');
cursor: not-allowed;
}
}
@include e(increase) {
right: 1px;
border-radius: 0 getCssVar('border-radius-base')
getCssVar('border-radius-base') 0;
border-left: getCssVar('border');
}
@include e(decrease) {
left: 1px;
border-radius: getCssVar('border-radius-base') 0 0
getCssVar('border-radius-base');
border-right: getCssVar('border');
}
@include when(disabled) {
@include e((increase, decrease)) {
border-color: getCssVar('disabled-border-color');
color: getCssVar('disabled-border-color');
&:hover {
color: getCssVar('disabled-border-color');
cursor: not-allowed;
}
}
}
@each $size in (large, small) {
@include m($size) {
width: map.get($input-number-width, $size);
line-height: #{map.get($input-height, $size) - 2};
@include e((increase, decrease)) {
width: map.get($input-height, $size);
font-size: map.get($input-font-size, $size);
}
@include when(controls-right) {
.#{$namespace}-input--#{$size} {
.#{$namespace}-input__wrapper {
padding-right: #{map.get($input-height, $size) + 7};
}
}
}
.#{$namespace}-input--#{$size} {
.#{$namespace}-input__wrapper {
padding-left: #{map.get($input-height, $size) + 7};
padding-right: #{map.get($input-height, $size) + 7};
}
}
}
}
@include m(small) {
@include e((increase, decrease)) {
[class*='#{$namespace}-icon'] {
transform: scale(0.9);
}
}
}
@include when(without-controls) {
.#{$namespace}-input__wrapper {
padding-left: 15px;
padding-right: 15px;
}
}
@include when(controls-right) {
.#{$namespace}-input__wrapper {
padding-left: 15px;
padding-right: #{map.get($input-height, 'default') + 10};
}
@include e((increase, decrease)) {
@include set-css-var-value(
('input', 'number-controls-height'),
math.div(map.get($input-height, 'default') - 2, 2)
);
height: getCssVar('input-number-controls-height');
line-height: getCssVar('input-number-controls-height');
[class*='#{$namespace}-icon'] {
transform: scale(0.8);
}
}
@include e(increase) {
bottom: auto;
left: auto;
border-radius: 0 getCssVar('border-radius-base') 0 0;
border-bottom: getCssVar('border');
}
@include e(decrease) {
right: 1px;
top: auto;
left: auto;
border-right: none;
border-left: getCssVar('border');
border-radius: 0 0 getCssVar('border-radius-base') 0;
}
@each $size in (large, small) {
&[class*='#{$size}'] {
[class*='increase'],
[class*='decrease'] {
@include set-css-var-value(
('input', 'number-controls-height'),
math.div(map.get($input-height, $size) - 2, 2)
);
}
}
}
}
}

View File

@@ -0,0 +1,246 @@
@use 'sass:map';
@use 'mixins/mixins' as *;
@use 'mixins/utils' as *;
@use 'mixins/var' as *;
@use 'common/var' as *;
@mixin mixed-input-border($color) {
box-shadow: 0 0 0 1px $color inset;
}
@include b(input-tag) {
@include set-component-css-var('input-tag', $input-tag);
@include css-var-from-global('input-tag-mini-height', 'component-size');
@include set-css-var-value(
('input-tag', 'gap'),
map.get($input-tag-gap, default)
);
@include set-css-var-value(
('input-tag', 'padding'),
map.get($input-tag-padding, default)
);
@include set-css-var-value(
('input-tag', 'inner-padding'),
map.get($input-tag-inner-padding, default)
);
@include set-css-var-value(
('input-tag', 'line-height'),
map.get($tag-height, default)
);
}
@include b(input-tag) {
display: flex;
align-items: center;
box-sizing: border-box;
cursor: pointer;
font-size: getCssVar('input-tag-font-size');
padding: getCssVar('input-tag-padding');
width: getCssVar('input-tag-width');
min-height: getCssVar('input-tag-mini-height');
line-height: getCssVar('input-tag-line-height');
border-radius: getCssVar('border-radius-base');
background-color: getCssVar('fill-color', 'blank');
transition: getCssVar('transition', 'duration');
transform: translate3d(0, 0, 0);
@include mixed-input-border(#{getCssVar('border-color')});
@include when(focused) {
@include mixed-input-border(#{getCssVar('color-primary')});
}
@include when(hovering) {
&:not(.is-focused) {
@include mixed-input-border(#{getCssVar('border-color-hover')});
}
}
@include when(disabled) {
cursor: not-allowed;
background-color: getCssVar('fill-color', 'light');
@include mixed-input-border(#{getCssVar('input-tag-disabled-border')});
&:hover {
@include mixed-input-border(#{getCssVar('input-tag-disabled-border')});
}
&.is-focus {
@include mixed-input-border(#{getCssVar('input-focus-border-color')});
}
@include e(inner) {
@include e(input) {
cursor: not-allowed;
}
.#{$namespace}-tag {
cursor: not-allowed;
}
}
}
@include e(prefix) {
display: flex;
align-items: center;
flex-shrink: 0;
padding: 0 getCssVar('input-tag-inner-padding');
color: var(
#{getCssVarName('input-icon-color')},
map.get($input, 'icon-color')
);
}
@include e(suffix) {
display: flex;
align-items: center;
flex-shrink: 0;
padding: 0 getCssVar('input-tag-inner-padding');
gap: 8px;
color: var(
#{getCssVarName('input-icon-color')},
map.get($input, 'icon-color')
);
}
@include e(input-tag-list) {
position: relative;
display: flex;
flex-wrap: wrap;
align-items: center;
flex: 1;
min-width: 0;
gap: map.get($input-tag-gap, 'default');
@include when(near) {
margin-left: map.get($select-near-margin-left, 'default');
}
.#{$namespace}-tag {
cursor: pointer;
border-color: transparent;
&.#{$namespace}-tag--plain {
border-color: getCssVar('tag', 'border-color');
}
.#{$namespace}-tag__content {
min-width: 0;
}
}
}
@include e(inner) {
position: relative;
display: flex;
flex-wrap: wrap;
align-items: center;
flex: 1;
max-width: 100%;
min-width: 0;
gap: getCssVar('input-tag-gap');
@include when(left-space) {
margin-left: getCssVar('input-tag-inner-padding');
}
@include when(right-space) {
margin-right: getCssVar('input-tag-inner-padding');
}
@include when(draggable) {
.#{$namespace}-tag {
cursor: move;
user-select: none;
}
}
@include e(drop-indicator) {
position: absolute;
top: 0;
width: 1px;
height: var(--el-input-tag-line-height);
background-color: getCssVar('color-primary');
}
.#{$namespace}-tag {
max-width: 100%;
cursor: pointer;
border-color: transparent;
&.#{$namespace}-tag--plain {
border-color: getCssVar('tag', 'border-color');
}
.#{$namespace}-tag__content {
min-width: 0;
line-height: normal;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}
}
}
@include e(input-wrapper) {
flex: 1;
}
@include e(input) {
border: none;
outline: none;
padding: 0;
color: getCssVar('input-tag-text-color');
font-size: inherit;
font-family: inherit;
line-height: inherit;
appearance: none;
width: 100%;
background-color: transparent;
&::placeholder {
color: getCssVar('input-tag-placeholder-color');
}
}
@include e(input-calculator) {
position: absolute;
left: 0;
top: 0;
max-width: 100%;
visibility: hidden;
white-space: pre;
overflow: hidden;
}
@each $size in (large, small) {
@include m($size) {
@include set-css-var-value(
('input-tag', 'gap'),
map.get($input-tag-gap, $size)
);
@include set-css-var-value(
('input-tag', 'padding'),
map.get($input-tag-padding, $size)
);
@include set-css-var-value(
('input-tag', 'padding-left'),
map.get($input-tag-inner-padding, $size)
);
@include set-css-var-value(
('input-tag', 'font-size'),
map.get($input-font-size, $size)
);
@if $size == small {
@include set-css-var-value(
('input-tag', 'line-height'),
map.get($tag-height, $size)
);
@include css-var-from-global(
'input-tag-mini-height',
('component-size', $size)
);
}
}
}
}

View File

@@ -0,0 +1,514 @@
@use 'sass:map';
@use 'mixins/mixins' as *;
@use 'mixins/var' as *;
@use 'common/var' as *;
@mixin inset-prepend-border($color) {
box-shadow:
1px 0 0 0 $color inset,
0 1px 0 0 $color inset,
0 -1px 0 0 $color inset;
}
@mixin inset-append-border($color) {
box-shadow:
0 1px 0 0 $color inset,
0 -1px 0 0 $color inset,
-1px 0 0 0 $color inset;
}
@mixin inset-prepend-input-border($color) {
box-shadow:
1px 0 0 0 $color inset,
1px 0 0 0 $color,
0 1px 0 0 $color inset,
0 -1px 0 0 $color inset !important;
}
@mixin inset-append-input-border($color) {
box-shadow:
-1px 0 0 0 $color,
-1px 0 0 0 $color inset,
0 1px 0 0 $color inset,
0 -1px 0 0 $color inset !important;
}
@mixin mixed-input-border($color) {
box-shadow: 0 0 0 1px $color inset;
}
@include b(textarea) {
@include set-component-css-var('input', $input);
}
@include b(textarea) {
position: relative;
display: inline-block;
width: 100%;
vertical-align: bottom;
font-size: getCssVar('font-size', 'base');
@include e(inner) {
position: relative;
display: block;
resize: vertical;
padding: 5px map.get($input-padding-horizontal, 'default')-$border-width;
line-height: 1.5;
box-sizing: border-box;
width: 100%;
font-size: inherit;
font-family: inherit;
color: var(
#{getCssVarName('input-text-color')},
map.get($input, 'text-color')
);
background-color: var(
#{getCssVarName('input-bg-color')},
map.get($input, 'bg-color')
);
background-image: none;
-webkit-appearance: none;
@include inset-input-border(
var(
#{getCssVarName('input-border-color')},
map.get($input, 'border-color')
)
);
border-radius: getCssVarWithDefault(
'input-border-radius',
map.get($input, 'border-radius')
);
transition: getCssVar('transition-box-shadow');
border: none;
&::placeholder {
color: getCssVarWithDefault(
'input-placeholder-color',
map.get($input, 'placeholder-color')
);
}
&:hover {
@include inset-input-border(#{getCssVar('input', 'hover-border-color')});
}
&:focus {
outline: none;
@include inset-input-border(#{getCssVar('input', 'focus-border-color')});
}
}
& .#{$namespace}-input__count {
color: getCssVar('color-info');
background: getCssVar('fill-color', 'blank');
position: absolute;
font-size: 12px;
line-height: 14px;
bottom: 5px;
right: 10px;
@include when(outside) {
position: absolute;
background: transparent;
padding-top: 2px;
top: 100%;
right: 0;
bottom: unset;
line-height: 1;
}
}
@include when(disabled) {
.#{$namespace}-textarea__inner {
@include inset-input-border(#{getCssVar('disabled-border-color')});
background-color: map.get($input-disabled, 'fill');
color: map.get($input-disabled, 'text-color');
cursor: not-allowed;
&::placeholder {
color: map.get($input-disabled, 'placeholder-color');
}
}
}
@include when(exceed) {
.#{$namespace}-textarea__inner {
@include mixed-input-border(#{getCssVar('color-danger')});
}
.#{$namespace}-input__count {
color: getCssVar('color-danger');
}
}
}
@include b(input) {
@include set-component-css-var('input', $input);
}
@include b(input) {
@include css-var-from-global('input-height', 'component-size');
position: relative;
font-size: getCssVar('font-size', 'base');
display: inline-flex;
width: getCssVar('input-width');
line-height: getCssVar('input-height');
box-sizing: border-box;
vertical-align: middle;
@include scroll-bar;
& .#{$namespace}-input__clear,
& .#{$namespace}-input__password {
color: getCssVar('input-icon-color');
font-size: map.get($input-font-size, 'default');
cursor: pointer;
&:hover {
color: getCssVar('input-clear-hover-color');
}
}
& .#{$namespace}-input__count {
height: 100%;
display: inline-flex;
align-items: center;
color: getCssVar('color-info');
font-size: 12px;
.#{$namespace}-input__count-inner {
background: getCssVar('fill-color', 'blank');
line-height: initial;
display: inline-block;
padding-left: 8px;
}
@include when(outside) {
height: unset;
position: absolute;
padding-top: 2px;
top: 100%;
right: 0;
.#{$namespace}-input__count-inner {
background: transparent;
padding-left: 0px;
line-height: 1;
}
}
}
@include e(wrapper) {
display: inline-flex;
flex-grow: 1;
align-items: center;
justify-content: center;
padding: $border-width
map.get($input-padding-horizontal, 'default')-$border-width;
background-color: var(
#{getCssVarName('input-bg-color')},
map.get($input, 'bg-color')
);
background-image: none;
border-radius: getCssVarWithDefault(
'input-border-radius',
map.get($input, 'border-radius')
);
cursor: text;
transition: getCssVar('transition-box-shadow');
transform: translate3d(0, 0, 0);
@include inset-input-border(
var(
#{getCssVarName('input-border-color')},
map.get($input, 'border-color')
)
);
&:hover {
@include inset-input-border(#{getCssVar('input', 'hover-border-color')});
}
@include when(focus) {
@include inset-input-border(#{getCssVar('input', 'focus-border-color')});
}
}
& {
// use map.get as default value for date picker range
@include set-css-var-value(
'input-inner-height',
calc(
var(
#{getCssVarName('input-height')},
#{map.get($input-height, 'default')}
) -
$border-width * 2
)
);
}
@include e(inner) {
width: 100%;
flex-grow: 1;
-webkit-appearance: none;
color: var(
#{getCssVarName('input-text-color')},
map.get($input, 'text-color')
);
font-size: inherit;
height: getCssVar('input-inner-height');
line-height: getCssVar('input-inner-height');
padding: 0;
outline: none;
border: none;
background: none;
box-sizing: border-box;
&:focus {
outline: none;
}
&::placeholder {
color: getCssVarWithDefault(
'input-placeholder-color',
map.get($input, 'placeholder-color')
);
}
// override edge default style
&[type='password']::-ms-reveal {
display: none;
}
&[type='number'] {
line-height: 1;
}
}
@each $slot in (prefix, suffix) {
@include e($slot) {
display: inline-flex;
white-space: nowrap;
flex-shrink: 0;
flex-wrap: nowrap;
height: 100%;
line-height: getCssVar('input-inner-height');
text-align: center;
color: var(
#{getCssVarName('input-icon-color')},
map.get($input, 'icon-color')
);
transition: all getCssVar('transition-duration');
pointer-events: none;
}
@include e(#{$slot}-inner) {
pointer-events: all;
display: inline-flex;
align-items: center;
justify-content: center;
@if $slot == prefix {
> :last-child {
margin-right: 8px;
}
> :first-child {
&,
&.#{$namespace}-input__icon {
margin-left: 0;
}
}
} @else {
> :first-child {
margin-left: 8px;
}
}
}
}
& .#{$namespace}-input__icon {
height: inherit;
line-height: inherit;
display: flex;
justify-content: center;
align-items: center;
transition: all getCssVar('transition-duration');
margin-left: 8px;
}
@include e(validateIcon) {
pointer-events: none;
}
@include when(active) {
.#{$namespace}-input__wrapper {
@include mixed-input-border(
var(
#{getCssVarName('input-focus-color')},
map.get($input, 'focus-color')
)
);
}
}
@include when(disabled) {
cursor: not-allowed;
.#{$namespace}-input__wrapper {
background-color: map.get($input-disabled, 'fill');
cursor: not-allowed;
@include mixed-input-border(map.get($input-disabled, 'border'));
}
.#{$namespace}-input__inner {
color: map.get($input-disabled, 'text-color');
-webkit-text-fill-color: map.get($input-disabled, 'text-color');
cursor: not-allowed;
&::placeholder {
color: map.get($input-disabled, 'placeholder-color');
}
}
.#{$namespace}-input__icon {
cursor: not-allowed;
}
.#{$namespace}-input__prefix-inner,
.#{$namespace}-input__suffix-inner {
pointer-events: none;
}
}
@include when(exceed) {
.#{$namespace}-input__wrapper {
@include mixed-input-border(#{getCssVar('color-danger')});
}
.#{$namespace}-input__suffix {
.#{$namespace}-input__count {
color: getCssVar('color-danger');
}
}
}
@each $size in (large, small) {
@include m($size) {
@include css-var-from-global('input-height', ('component-size', $size));
font-size: map.get($input-font-size, $size);
@include e(wrapper) {
padding: $border-width
map.get($input-padding-horizontal, $size)-$border-width;
}
& {
@include set-css-var-value(
'input-inner-height',
calc(
var(
#{getCssVarName('input-height')},
#{map.get($input-height, $size)}
) -
$border-width * 2
)
);
}
}
}
}
@include b(input-group) {
display: inline-flex;
width: 100%;
align-items: stretch;
@include e((append, prepend)) {
background-color: getCssVar('fill-color', 'light');
color: getCssVar('color-info');
position: relative;
display: inline-flex;
align-items: center;
justify-content: center;
min-height: 100%;
border-radius: getCssVar('input-border-radius');
padding: 0 20px;
white-space: nowrap;
&:focus {
outline: none;
}
.#{$namespace}-select,
.#{$namespace}-button {
display: inline-block;
flex: 1;
margin: 0 -20px;
}
button.#{$namespace}-button,
button.#{$namespace}-button:hover,
div.#{$namespace}-select .#{$namespace}-select__wrapper,
div.#{$namespace}-select:hover .#{$namespace}-select__wrapper {
border-color: transparent;
background-color: transparent;
color: inherit;
}
.#{$namespace}-button,
.#{$namespace}-input {
font-size: inherit;
}
}
@include e(prepend) {
border-right: 0;
border-top-right-radius: 0;
border-bottom-right-radius: 0;
@include inset-prepend-border(#{getCssVar('input-border-color')});
}
@include e(append) {
border-left: 0;
border-top-left-radius: 0;
border-bottom-left-radius: 0;
@include inset-append-border(#{getCssVar('input-border-color')});
}
@include m(prepend) {
> .#{$namespace}-input__wrapper {
border-top-left-radius: 0;
border-bottom-left-radius: 0;
}
@include e(prepend) {
.#{$namespace}-select {
.#{$namespace}-select__wrapper {
border-top-right-radius: 0;
border-bottom-right-radius: 0;
@include inset-prepend-border(#{getCssVar('input-border-color')});
}
}
}
}
@include m(append) {
> .#{$namespace}-input__wrapper {
border-top-right-radius: 0;
border-bottom-right-radius: 0;
}
@include e(append) {
.#{$namespace}-select {
.#{$namespace}-select__wrapper {
border-top-left-radius: 0;
border-bottom-left-radius: 0;
@include inset-append-border(#{getCssVar('input-border-color')});
}
}
}
}
}
@include b(input-hidden) {
display: none !important;
}

View File

@@ -0,0 +1,93 @@
@use 'sass:map';
@use 'mixins/mixins' as *;
@use 'mixins/var' as *;
@use 'mixins/utils' as *;
@use 'common/var' as *;
@include b(link) {
@include set-component-css-var('link', $link);
}
@include b(link) {
display: inline-flex;
flex-direction: row;
align-items: center;
justify-content: center;
vertical-align: middle;
position: relative;
text-decoration: none;
outline: none;
cursor: pointer;
padding: 0;
font-size: getCssVar('link', 'font-size');
font-weight: getCssVar('link', 'font-weight');
color: getCssVar('link', 'text-color');
@include when(hover-underline) {
&:hover:after {
content: '';
position: absolute;
left: 0;
right: 0;
height: 0;
bottom: 0;
border-bottom: 1px solid getCssVar('link', 'hover-text-color');
}
}
@include when(underline) {
&:after {
content: '';
position: absolute;
left: 0;
right: 0;
height: 0;
bottom: 0;
border-bottom: 1px solid getCssVar('link', 'text-color');
}
}
&:hover {
color: getCssVar('link', 'hover-text-color');
&:after {
border-color: getCssVar('link', 'hover-text-color');
}
}
& [class*='#{$namespace}-icon-'] {
& + span {
margin-left: 5px;
}
}
@include e(inner) {
display: inline-flex;
justify-content: center;
align-items: center;
}
@each $type in $types {
&.#{$namespace}-link--#{$type} {
@include css-var-from-global(('link', 'text-color'), ('color', $type));
@include css-var-from-global(
('link', 'hover-text-color'),
('color', $type, 'light-3')
);
@include css-var-from-global(
('link', 'disabled-text-color'),
('color', $type, 'light-5')
);
}
}
@include when(disabled) {
color: getCssVar('link', 'disabled-text-color');
cursor: not-allowed;
&:after {
border-color: getCssVar('link', 'disabled-text-color');
}
}
}

View File

@@ -0,0 +1,104 @@
@use 'mixins/mixins' as *;
@use 'mixins/var' as *;
@use 'common/var' as *;
:root {
@include set-component-css-var('loading', $loading);
}
@include b(loading-parent) {
@include m(relative) {
position: relative !important;
}
@include m(hidden) {
overflow: hidden !important;
}
}
@include b(loading-mask) {
position: absolute;
z-index: 2000;
background-color: getCssVar('mask-color');
margin: 0;
top: 0;
right: 0;
bottom: 0;
left: 0;
transition: opacity getCssVar('transition-duration');
@include when(fullscreen) {
position: fixed;
.#{$namespace}-loading-spinner {
margin-top: calc(
(0px - getCssVar('loading-fullscreen-spinner-size')) / 2
);
.circular {
height: getCssVar('loading-fullscreen-spinner-size');
width: getCssVar('loading-fullscreen-spinner-size');
}
}
}
}
@include b(loading-spinner) {
top: 50%;
margin-top: calc((0px - getCssVar('loading-spinner-size')) / 2);
width: 100%;
text-align: center;
position: absolute;
.#{$namespace}-loading-text {
color: getCssVar('color-primary');
margin: 3px 0;
font-size: 14px;
}
.circular {
display: inline;
height: getCssVar('loading-spinner-size');
width: getCssVar('loading-spinner-size');
animation: loading-rotate 2s linear infinite;
}
.path {
animation: loading-dash 1.5s ease-in-out infinite;
stroke-dasharray: 90, 150;
stroke-dashoffset: 0;
stroke-width: 2;
stroke: getCssVar('color-primary');
stroke-linecap: round;
}
i {
color: getCssVar('color-primary');
}
}
.#{$namespace}-loading-fade-enter-from,
.#{$namespace}-loading-fade-leave-to {
opacity: 0;
}
@keyframes loading-rotate {
100% {
transform: rotate(360deg);
}
}
@keyframes loading-dash {
0% {
stroke-dasharray: 1, 200;
stroke-dashoffset: 0;
}
50% {
stroke-dasharray: 90, 150;
stroke-dashoffset: -40px;
}
100% {
stroke-dasharray: 90, 150;
stroke-dashoffset: -120px;
}
}

View File

@@ -0,0 +1,14 @@
@use 'mixins/mixins' as *;
@use 'mixins/var' as *;
@use 'common/var' as *;
@include b(main) {
@include set-component-css-var('main', $main);
display: block;
flex: 1;
flex-basis: auto;
overflow: auto;
box-sizing: border-box;
padding: getCssVar('main-padding');
}

View File

@@ -0,0 +1,88 @@
@use 'sass:map';
@use 'mixins/mixins' as *;
@use 'mixins/var' as *;
@use 'common/var' as *;
@include b(mention) {
position: relative;
width: 100%;
@include e(popper) {
@include picker-popper(
map.get($mention, 'bg-color'),
map.get($mention, 'border'),
map.get($mention, 'shadow')
);
}
}
@include b(mention-dropdown) {
@include set-component-css-var('mention', $mention);
@include e(item) {
font-size: getCssVar('mention-font-size');
padding: 0 20px;
position: relative;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
color: getCssVar('mention-option-color');
height: getCssVar('mention-option-height');
line-height: getCssVar('mention-option-height');
box-sizing: border-box;
min-width: getCssVar('mention-option-min-width');
cursor: pointer;
@include when(hovering) {
background-color: getCssVar('mention-option-hover-background');
}
@include when(selected) {
color: getCssVar('mention-option-selected-color');
font-weight: bold;
}
@include when(disabled) {
color: getCssVar('mention-option-disabled-color');
cursor: not-allowed;
background-color: unset;
}
}
}
@include b(mention-dropdown) {
z-index: calc(#{getCssVar('index-top')} + 1);
border-radius: getCssVar('border-radius-base');
box-sizing: border-box;
}
@include b(mention-dropdown__loading) {
padding: 10px 0;
margin: 0;
text-align: center;
color: getCssVar('mention-option-loading-color');
font-size: 12px;
min-width: getCssVar('mention-option-min-width');
}
@include b(mention-dropdown__wrap) {
max-height: getCssVar('mention-max-height');
}
@include b(mention-dropdown__list) {
list-style: none;
padding: getCssVar('mention-padding');
margin: 0;
box-sizing: border-box;
}
@include b(mention-dropdown__header) {
padding: getCssVar('mention-header-padding');
border-bottom: getCssVar('mention-border');
}
@include b(mention-dropdown__footer) {
padding: getCssVar('mention-footer-padding');
border-top: getCssVar('mention-border');
}

View File

View File

@@ -0,0 +1,371 @@
@use 'mixins/mixins' as *;
@use 'mixins/var' as *;
@use 'mixins/utils' as *;
@use 'common/var' as *;
@use 'common/transition';
@mixin menu-item {
display: flex;
align-items: center;
height: getCssVar('menu-item-height');
line-height: getCssVar('menu-item-height');
font-size: getCssVar('menu-item-font-size');
color: getCssVar('menu-text-color');
padding: 0 getCssVar('menu-base-level-padding');
list-style: none;
cursor: pointer;
position: relative;
transition:
border-color getCssVar('transition-duration'),
background-color getCssVar('transition-duration'),
color getCssVar('transition-duration');
box-sizing: border-box;
white-space: nowrap;
* {
vertical-align: bottom;
}
i {
color: inherit;
}
&:hover,
&:focus {
outline: none;
}
&:hover {
background-color: getCssVar('menu-hover-bg-color');
}
@include when(disabled) {
opacity: 0.25;
cursor: not-allowed;
background: none !important;
}
}
:root {
// They are defined on :root so they can be inherited by sub-menu instead of overwritten
@include set-component-css-var('menu', $menu);
}
@include b(menu) {
border-right: solid 1px getCssVar('menu-border-color');
list-style: none;
position: relative;
margin: 0;
padding-left: 0;
background-color: getCssVar('menu-bg-color');
box-sizing: border-box;
@include m(vertical) {
&:not(.#{$namespace}-menu--collapse):not(
.#{$namespace}-menu--popup-container
) {
& .#{$namespace}-menu-item,
& .#{$namespace}-sub-menu__title,
& .#{$namespace}-menu-item-group__title {
white-space: nowrap;
padding-left: calc(
#{getCssVar('menu-base-level-padding')} + #{getCssVar('menu-level')} *
#{getCssVar('menu-level-padding')}
);
}
}
}
&:not(.#{$namespace}-menu--collapse) .#{$namespace}-sub-menu__title {
padding-right: calc(
#{getCssVar('menu-base-level-padding')} + #{getCssVar('menu-icon-width')}
);
}
@include m(horizontal) {
display: flex;
flex-wrap: nowrap;
border-right: none;
height: getCssVar('menu-horizontal-height');
// reset menu-item popup height
&.#{$namespace}-menu--popup-container {
height: unset;
}
&.#{$namespace}-menu {
border-bottom: solid 1px getCssVar('menu-border-color');
}
& > .#{$namespace}-menu-item {
display: inline-flex;
justify-content: center;
align-items: center;
height: 100%;
margin: 0;
border-bottom: 2px solid transparent;
color: getCssVar('menu-text-color');
a,
a:hover {
color: inherit;
}
}
& > .#{$namespace}-sub-menu {
&:focus,
&:hover {
outline: none;
}
&:hover {
.#{$namespace}-sub-menu__title {
color: getCssVar('menu-hover-text-color');
}
}
&.is-active {
.#{$namespace}-sub-menu__title {
border-bottom: 2px solid getCssVar('menu-active-color');
color: getCssVar('menu-active-color');
}
}
& .#{$namespace}-sub-menu__title {
height: 100%;
border-bottom: 2px solid transparent;
color: getCssVar('menu-text-color');
&:hover {
background-color: getCssVar('menu-bg-color');
}
}
}
& .#{$namespace}-menu {
& .#{$namespace}-menu-item,
& .#{$namespace}-sub-menu__title {
background-color: getCssVar('menu-bg-color');
display: flex;
align-items: center;
height: getCssVar('menu-horizontal-sub-item-height');
line-height: getCssVar('menu-horizontal-sub-item-height');
padding: 0 10px;
color: getCssVar('menu-text-color');
}
& .#{$namespace}-sub-menu__title {
padding-right: 40px;
}
& .#{$namespace}-menu-item.is-active,
& .#{$namespace}-menu-item.is-active:hover,
& .#{$namespace}-sub-menu.is-active > .#{$namespace}-sub-menu__title,
&
.#{$namespace}-sub-menu.is-active
> .#{$namespace}-sub-menu__title:hover {
color: getCssVar('menu-active-color');
}
}
& .#{$namespace}-menu-item:not(.is-disabled):hover,
& .#{$namespace}-menu-item:not(.is-disabled):focus {
outline: none;
color: getCssVarWithDefault(
'menu-active-color',
getCssVar('menu-hover-text-color')
);
background-color: getCssVar('menu-hover-bg-color');
}
& > .#{$namespace}-menu-item.is-active {
border-bottom: 2px solid getCssVar('menu-active-color');
color: getCssVar('menu-active-color') !important;
}
}
@include m(collapse) {
width: calc(
#{getCssVar('menu-icon-width')} +
#{getCssVar('menu-base-level-padding')} * 2
);
> .#{$namespace}-menu-item,
> .#{$namespace}-sub-menu > .#{$namespace}-sub-menu__title,
> .#{$namespace}-menu-item-group
> ul
> .#{$namespace}-sub-menu
> .#{$namespace}-sub-menu__title {
[class^='#{$namespace}-icon'] {
margin: 0;
vertical-align: middle;
width: getCssVar('menu-icon-width');
text-align: center;
}
.#{$namespace}-sub-menu__icon-arrow {
display: none;
}
> span {
height: 0;
width: 0;
overflow: hidden;
visibility: hidden;
display: inline-block;
}
}
> .#{$namespace}-menu-item.is-active i {
color: inherit;
}
.#{$namespace}-menu .#{$namespace}-sub-menu {
min-width: 200px;
}
.#{$namespace}-sub-menu {
&.is-active .#{$namespace}-sub-menu__title {
color: getCssVar('menu-active-color');
}
}
}
@include m(popup) {
z-index: 100;
min-width: 200px;
border: none;
padding: 5px 0;
border-radius: getCssVar('border-radius-small');
box-shadow: getCssVar('box-shadow-light');
}
.#{$namespace}-icon {
flex-shrink: 0;
}
}
@include b(menu-item) {
@include menu-item;
& [class^='#{$namespace}-icon'] {
margin-right: 5px;
width: getCssVar('menu-icon-width');
text-align: center;
font-size: 18px;
vertical-align: middle;
}
@include when(active) {
color: getCssVar('menu-active-color');
i {
color: inherit;
}
}
.#{$namespace}-menu-tooltip__trigger {
position: absolute;
left: 0;
top: 0;
height: 100%;
width: 100%;
display: inline-flex;
align-items: center;
box-sizing: border-box;
padding: 0 getCssVar('menu-base-level-padding');
}
}
@include b(sub-menu) {
list-style: none;
margin: 0;
padding-left: 0;
@include e(title) {
@include menu-item;
&:hover {
background-color: getCssVar('menu-hover-bg-color');
}
}
& .#{$namespace}-menu {
border: none;
}
& .#{$namespace}-menu-item {
height: getCssVar('menu-sub-item-height');
line-height: getCssVar('menu-sub-item-height');
}
&.#{$namespace}-sub-menu__hide-arrow .#{$namespace}-sub-menu__title {
padding-right: getCssVar('menu-base-level-padding');
}
@include e(hide-arrow) {
.#{$namespace}-sub-menu__icon-arrow {
display: none !important;
}
}
@include when(active) {
.#{$namespace}-sub-menu__title {
border-bottom-color: getCssVar('menu-active-color');
}
}
@include when(disabled) {
.#{$namespace}-sub-menu__title,
.#{$namespace}-menu-item {
opacity: 0.25;
cursor: not-allowed;
background: none !important;
}
}
.#{$namespace}-icon {
vertical-align: middle;
margin-right: 5px;
width: getCssVar('menu-icon-width');
text-align: center;
font-size: 18px;
&.#{$namespace}-sub-menu__icon-more {
margin-right: 0 !important;
}
}
.#{$namespace}-sub-menu__icon-arrow {
position: absolute;
top: 50%;
right: getCssVar('menu-base-level-padding');
margin-top: -6px;
transition: transform getCssVar('transition-duration');
font-size: 12px;
margin-right: 0;
width: inherit;
}
}
@include b(menu-item-group) {
> ul {
padding: 0;
}
@include e(title) {
padding: 7px 0 7px getCssVar('menu-base-level-padding');
line-height: normal;
font-size: 12px;
color: getCssVar('text-color', 'secondary');
}
}
.horizontal-collapse-transition
.#{$namespace}-sub-menu__title
.#{$namespace}-sub-menu__icon-arrow {
transition: getCssVar('transition-duration-fast');
opacity: 0;
}

View File

@@ -0,0 +1,214 @@
@use 'sass:map';
@use 'mixins/mixins' as *;
@use 'mixins/var' as *;
@use 'common/var' as *;
@use 'common/popup' as *;
@include b(message-box) {
@include set-component-css-var('messagebox', $messagebox);
}
@include b(message-box) {
display: inline-block;
position: relative;
max-width: getCssVar('messagebox-width');
width: 100%;
padding: getCssVar('messagebox-padding-primary');
vertical-align: middle;
background-color: getCssVar('bg-color');
border-radius: getCssVar('messagebox-border-radius');
font-size: getCssVar('messagebox-font-size');
box-shadow: getCssVar('messagebox-box-shadow');
text-align: left;
overflow: hidden;
backface-visibility: hidden;
// To avoid small screen overflowing, see #11919
box-sizing: border-box;
overflow-wrap: break-word;
&:focus {
outline: none !important;
}
@at-root .is-message-box {
.#{$namespace}-overlay-message-box {
text-align: center;
position: fixed;
top: 0;
right: 0;
bottom: 0;
left: 0;
padding: 16px;
overflow: auto;
&::after {
content: '';
display: inline-block;
height: 100%;
width: 0;
vertical-align: middle;
}
}
}
@include when(draggable) {
@include e(header) {
cursor: move;
user-select: none;
}
}
@include e(header) {
padding-bottom: getCssVar('messagebox-padding-primary');
&.show-close {
padding-right: calc(
getCssVar('messagebox-padding-primary') +
var(
#{getCssVarName('message-close-size')},
map.get($message, 'close-size')
)
);
}
}
@include e(title) {
font-size: getCssVar('messagebox-font-size');
line-height: getCssVar('messagebox-font-line-height');
color: getCssVar('messagebox-title-color');
}
@include e(headerbtn) {
position: absolute;
top: 0;
right: 0;
padding: 0;
width: 40px;
height: 40px;
border: none;
outline: none;
background: transparent;
font-size: var(
#{getCssVarName('message-close-size')},
map.get($message, 'close-size')
);
cursor: pointer;
.#{$namespace}-message-box__close {
color: getCssVar('color-info');
font-size: inherit;
}
&:focus,
&:hover {
.#{$namespace}-message-box__close {
color: getCssVar('color-primary');
}
}
}
@include e(content) {
color: getCssVar('messagebox-content-color');
font-size: getCssVar('messagebox-content-font-size');
}
@include e(container) {
display: flex;
align-items: center;
gap: 12px;
}
@include e(input) {
padding-top: 12px;
& div.invalid > input {
border-color: getCssVar('color-error');
&:focus {
border-color: getCssVar('color-error');
}
}
}
@include e(status) {
font-size: 24px;
@each $type in (primary, success, info, warning, error) {
&.#{$namespace}-message-box-icon--#{$type} {
@include css-var-from-global(('messagebox', 'color'), ('color', $type));
color: getCssVar('messagebox-color');
}
}
}
@include e(message) {
margin: 0;
min-width: 0;
& p {
margin: 0;
line-height: getCssVar('messagebox-font-line-height');
}
}
@include e(errormsg) {
color: getCssVar('color-error');
font-size: getCssVar('messagebox-error-font-size');
line-height: getCssVar('messagebox-font-line-height');
}
@include e(btns) {
display: flex;
flex-wrap: wrap;
justify-content: flex-end;
align-items: center;
padding-top: getCssVar('messagebox-padding-primary');
}
// centerAlign 布局
@include m(center) {
@include e(title) {
display: flex;
align-items: center;
justify-content: center;
gap: 6px;
}
@include e(status) {
font-size: inherit;
}
@include e(btns) {
justify-content: center;
}
@include e(container) {
justify-content: center;
}
}
}
.fade-in-linear-enter-active {
.#{$namespace}-overlay-message-box {
animation: msgbox-fade-in getCssVar('transition-duration');
}
}
.fade-in-linear-leave-active {
.#{$namespace}-overlay-message-box {
animation: msgbox-fade-in getCssVar('transition-duration') reverse;
}
}
@keyframes msgbox-fade-in {
0% {
transform: translate3d(0, -20px, 0);
opacity: 0;
}
100% {
transform: translate3d(0, 0, 0);
opacity: 1;
}
}

View File

@@ -0,0 +1,113 @@
@use 'mixins/mixins' as *;
@use 'mixins/var' as *;
@use 'common/var' as *;
@include b(message) {
@include set-component-css-var('message', $message);
}
@include b(message) {
width: fit-content;
max-width: calc(100% - 32px);
box-sizing: border-box;
border-radius: getCssVar('border-radius-base');
border-width: getCssVar('border-width');
border-style: getCssVar('border-style');
border-color: getCssVar('message', 'border-color');
position: fixed;
background-color: getCssVar('message', 'bg-color');
transition:
opacity getCssVar('transition-duration'),
transform 0.4s,
top 0.4s,
bottom 0.4s;
padding: getCssVar('message', 'padding');
display: flex;
align-items: center;
gap: 8px;
&.is-left {
left: 16px;
}
&.is-right {
right: 16px;
}
&.is-center {
left: 0;
right: 0;
margin: 0 auto;
}
@include when(plain) {
background-color: getCssVar('bg-color', 'overlay');
border-color: getCssVar('bg-color', 'overlay');
box-shadow: getCssVar('box-shadow-light');
}
p {
margin: 0;
}
@each $type in (primary, success, info, warning, error) {
@include m($type) {
@include css-var-from-global(
('message', 'bg-color'),
('color', $type, 'light-9')
);
@include css-var-from-global(
('message', 'border-color'),
('color', $type, 'light-8')
);
@include css-var-from-global(('message', 'text-color'), ('color', $type));
.#{$namespace}-message__content {
color: getCssVar('message', 'text-color');
overflow-wrap: break-word;
}
}
& .#{$namespace}-message-icon--#{$type} {
color: getCssVar('message', 'text-color');
}
}
.#{$namespace}-message__badge {
position: absolute;
top: -8px;
right: -8px;
}
@include e(content) {
padding: 0;
font-size: 14px;
line-height: 1;
&:focus {
outline-width: 0;
}
}
& .#{$namespace}-message__closeBtn {
cursor: pointer;
color: getCssVar('message', 'close-icon-color');
font-size: getCssVar('message', 'close-size');
&:focus {
outline-width: 0;
}
&:hover {
color: getCssVar('message', 'close-hover-color');
}
}
}
.#{$namespace}-message-fade-enter-from,
.#{$namespace}-message-fade-leave-to {
opacity: 0;
transform: translateY(-100%);
&.is-bottom {
transform: translateY(100%);
}
}

View File

@@ -0,0 +1,165 @@
@use '../mixins/var' as *;
@use '../mixins/function' as *;
@use '../common/var' as *;
@mixin button-plain($type) {
$button-color-types: (
'': (
'text-color': (
'color',
$type,
),
'bg-color': (
'color',
$type,
'light-9',
),
'border-color': (
'color',
$type,
'light-5',
),
),
'hover': (
'text-color': (
'color',
'white',
),
'bg-color': (
'color',
$type,
),
'border-color': (
'color',
$type,
),
),
'active': (
'text-color': (
'color',
'white',
),
),
);
@each $type, $typeMap in $button-color-types {
@each $typeColor, $list in $typeMap {
@include css-var-from-global(('button', $type, $typeColor), $list);
}
}
&.is-disabled {
&,
&:hover,
&:focus,
&:active {
color: getCssVar('color', $type, 'light-5');
background-color: getCssVar('color', $type, 'light-9');
border-color: getCssVar('color', $type, 'light-8');
}
}
}
@mixin button-variant($type) {
$button-color-types: (
'': (
'text-color': (
'color',
'white',
),
'bg-color': (
'color',
$type,
),
'border-color': (
'color',
$type,
),
'outline-color': (
'color',
$type,
'light-5',
),
'active-color': (
'color',
$type,
'dark-2',
),
),
'hover': (
'text-color': (
'color',
'white',
),
'link-text-color': (
'color',
$type,
'light-5',
),
'bg-color': (
'color',
$type,
'light-3',
),
'border-color': (
'color',
$type,
'light-3',
),
),
'active': (
'bg-color': (
'color',
$type,
'dark-2',
),
'border-color': (
'color',
$type,
'dark-2',
),
),
'disabled': (
'text-color': (
'color',
'white',
),
'bg-color': (
'color',
$type,
'light-5',
),
'border-color': (
'color',
$type,
'light-5',
),
),
);
@each $type, $typeMap in $button-color-types {
@each $typeColor, $list in $typeMap {
@include css-var-from-global(('button', $type, $typeColor), $list);
}
}
&.is-plain,
&.is-text,
&.is-link {
@include button-plain($type);
}
}
@mixin button-size(
$padding-vertical,
$padding-horizontal,
$font-size,
$border-radius
) {
padding: $padding-vertical $padding-horizontal;
font-size: $font-size;
border-radius: $border-radius;
&.is-round {
padding: $padding-vertical $padding-horizontal;
}
}

View File

@@ -0,0 +1,33 @@
@use 'sass:math';
@use '../common/var' as *;
@use './mixins' as *;
@mixin col-size($size) {
@include res($size) {
@for $i from 0 through 24 {
.#{$namespace}-col-#{$size}-#{$i} {
display: if($i == 0, none, block);
max-width: (math.div(1, 24) * $i * 100) * 1%;
flex: 0 0 (math.div(1, 24) * $i * 100) * 1%;
@include when(guttered) {
display: if($i == 0, none, block);
}
}
.#{$namespace}-col-#{$size}-offset-#{$i} {
margin-left: (math.div(1, 24) * $i * 100) * 1%;
}
.#{$namespace}-col-#{$size}-pull-#{$i} {
position: relative;
right: (math.div(1, 24) * $i * 100) * 1%;
}
.#{$namespace}-col-#{$size}-push-#{$i} {
position: relative;
left: (math.div(1, 24) * $i * 100) * 1%;
}
}
}
}

View File

@@ -0,0 +1,67 @@
@use 'sass:map';
@use 'sass:color';
@use 'config';
@use 'function' as *;
@use '../common/var' as *;
// set css var value, because we need translate value to string
// for example:
// @include set-css-var-value(('color', 'primary'), red);
// --el-color-primary: red;
@mixin set-css-var-value($name, $value) {
#{joinVarName($name)}: #{$value};
}
// @include set-css-var-type('color', 'primary', $map);
// --el-color-primary: #{map.get($map, 'primary')};
@mixin set-css-var-type($name, $type, $variables) {
#{getCssVarName($name, $type)}: #{map.get($variables, $type)};
}
@mixin set-css-color-type($colors, $type) {
@include set-css-var-value(('color', $type), map.get($colors, $type, 'base'));
@each $i in (3, 5, 7, 8, 9) {
@include set-css-var-value(
('color', $type, 'light', $i),
map.get($colors, $type, 'light-#{$i}')
);
}
@include set-css-var-value(
('color', $type, 'dark-2'),
map.get($colors, $type, 'dark-2')
);
}
// set all css var for component by map
@mixin set-component-css-var($name, $variables) {
@each $attribute, $value in $variables {
@if $attribute == 'default' {
#{getCssVarName($name)}: #{$value};
} @else {
#{getCssVarName($name, $attribute)}: #{$value};
}
}
}
@mixin set-css-color-rgb($type) {
$color: map.get($colors, $type, 'base');
@include set-css-var-value(
('color', $type, 'rgb'),
#{color.channel($color, 'red'),
color.channel($color, 'green'),
color.channel($color, 'blue')}
);
}
// generate css var from existing css var
// for example:
// @include css-var-from-global(('button', 'text-color'), ('color', $type))
// --el-button-text-color: var(--el-color-#{$type});
@mixin css-var-from-global($var, $gVar) {
$varName: joinVarName($var);
$gVarName: joinVarName($gVar);
#{$varName}: var(#{$gVarName});
}

View File

@@ -0,0 +1,5 @@
$namespace: 'el' !default;
$common-separator: '-' !default;
$element-separator: '__' !default;
$modifier-separator: '--' !default;
$state-prefix: 'is-' !default;

View File

@@ -0,0 +1,99 @@
@use 'config';
@use 'sass:meta';
@use 'sass:string';
@use 'sass:math';
@use 'sass:color';
// BEM support Func
@function selectorToString($selector) {
$selector: meta.inspect($selector);
$selector: string.slice($selector, 2, -2);
@return $selector;
}
@function containsModifier($selector) {
$selector: selectorToString($selector);
@if string.index($selector, config.$modifier-separator) {
@return true;
} @else {
@return false;
}
}
@function containWhenFlag($selector) {
$selector: selectorToString($selector);
@if string.index($selector, '.' + config.$state-prefix) {
@return true;
} @else {
@return false;
}
}
@function containPseudoClass($selector) {
$selector: selectorToString($selector);
@if string.index($selector, ':') {
@return true;
} @else {
@return false;
}
}
@function hitAllSpecialNestRule($selector) {
@return containsModifier($selector) or containWhenFlag($selector) or
containPseudoClass($selector);
}
// join var name
// joinVarName(('button', 'text-color')) => '--el-button-text-color'
@function joinVarName($list) {
$name: '--' + config.$namespace;
@each $item in $list {
@if $item != '' {
$name: $name + '-' + $item;
}
}
@return $name;
}
// getCssVarName('button', 'text-color') => '--el-button-text-color'
@function getCssVarName($args...) {
@return joinVarName($args);
}
// getCssVar('button', 'text-color') => var(--el-button-text-color)
@function getCssVar($args...) {
@return var(#{joinVarName($args)});
}
// getCssVarWithDefault(('button', 'text-color'), red) => var(--el-button-text-color, red)
@function getCssVarWithDefault($args, $default) {
@return var(#{joinVarName($args)}, #{$default});
}
// bem('block', 'element', 'modifier') => 'el-block__element--modifier'
@function bem($block, $element: '', $modifier: '') {
$name: config.$namespace + config.$common-separator + $block;
@if $element != '' {
$name: $name + config.$element-separator + $element;
}
@if $modifier != '' {
$name: $name + config.$modifier-separator + $modifier;
}
// @debug $name;
@return $name;
}
@function roundColor($color) {
$r: math.round(color.channel($color, 'red'));
$g: math.round(color.channel($color, 'green'));
$b: math.round(color.channel($color, 'blue'));
$a: color.channel($color, 'alpha');
@return rgba($r, $g, $b, $a);
}

View File

@@ -0,0 +1,240 @@
@use 'function' as *;
@use '../common/var' as *;
// forward mixins
@forward 'config';
@forward 'function';
@forward '_var';
@use 'config' as *;
@use 'sass:string';
@use 'sass:map';
$B: null;
$E: null;
// Break-points
@mixin res($key, $map: $breakpoints) {
// loop breakpoint Map, return if present
@if map.has-key($map, $key) {
@media only screen and #{string.unquote(map.get($map, $key))} {
@content;
}
} @else {
@warn "Undefined points: `#{$map}`";
}
}
// Scrollbar
@mixin scroll-bar {
$scrollbar-thumb-background: getCssVar('text-color', 'disabled');
$scrollbar-track-background: getCssVar('fill-color', 'blank');
&::-webkit-scrollbar {
z-index: 11;
width: 6px;
&:horizontal {
height: 6px;
}
&-thumb {
border-radius: 5px;
width: 6px;
background: $scrollbar-thumb-background;
}
&-corner {
background: $scrollbar-track-background;
}
&-track {
background: $scrollbar-track-background;
&-piece {
background: $scrollbar-track-background;
width: 6px;
}
}
}
}
// BEM
@mixin b($block) {
$B: $namespace + $common-separator + $block !global;
.#{$B} {
@content;
}
}
@mixin e($element) {
$E: $element !global;
$selector: &;
$currentSelector: '';
@each $unit in $element {
$currentSelector: #{$currentSelector +
'.' +
$B +
$element-separator +
$unit +
','};
}
@if hitAllSpecialNestRule($selector) {
@at-root {
#{$selector} {
#{$currentSelector} {
@content;
}
}
}
} @else {
@at-root {
#{$currentSelector} {
@content;
}
}
}
}
@mixin m($modifier) {
$selector: &;
$currentSelector: '';
@each $unit in $modifier {
$currentSelector: #{$currentSelector +
$selector +
$modifier-separator +
$unit +
','};
}
@at-root {
#{$currentSelector} {
@content;
}
}
}
@mixin configurable-m($modifier, $E-flag: false) {
$selector: &;
$interpolation: '';
@if $E-flag {
$interpolation: $element-separator + $E-flag;
}
@at-root {
#{$selector} {
.#{$B + $interpolation + $modifier-separator + $modifier} {
@content;
}
}
}
}
@mixin spec-selector(
$specSelector: '',
$element: $E,
$modifier: false,
$block: $B
) {
$modifierCombo: '';
@if $modifier {
$modifierCombo: $modifier-separator + $modifier;
}
@at-root {
#{&}#{$specSelector}.#{$block
+ $element-separator
+ $element
+ $modifierCombo} {
@content;
}
}
}
@mixin meb($modifier: false, $element: $E, $block: $B) {
$selector: &;
$modifierCombo: '';
@if $modifier {
$modifierCombo: $modifier-separator + $modifier;
}
@at-root {
#{$selector} {
.#{$block + $element-separator + $element + $modifierCombo} {
@content;
}
}
}
}
@mixin when($state) {
@at-root {
&.#{$state-prefix + $state} {
@content;
}
}
}
@mixin extend-rule($name) {
@extend #{'%shared-' + $name} !optional;
}
@mixin share-rule($name) {
$rule-name: '%shared-' + $name;
@at-root #{$rule-name} {
@content;
}
}
@mixin pseudo($pseudo) {
@at-root #{&}#{':#{$pseudo}'} {
@content;
}
}
@mixin picker-popper($background, $border, $box-shadow) {
&.#{$namespace}-popper {
background: $background;
border: $border;
box-shadow: $box-shadow;
.#{$namespace}-popper__arrow {
&::before {
border: $border;
}
}
@each $placement,
$adjacency
in ('top': 'left', 'bottom': 'right', 'left': 'bottom', 'right': 'top')
{
&[data-popper-placement^='#{$placement}'] {
.#{$namespace}-popper__arrow::before {
border-#{$placement}-color: transparent;
border-#{$adjacency}-color: transparent;
}
}
}
}
}
// dark
@mixin dark($block) {
html.dark {
@include b($block) {
@content;
}
}
}
@mixin inset-input-border($color, $important: false) {
@if $important == true {
box-shadow: 0 0 0 1px $color inset !important;
} @else {
box-shadow: 0 0 0 1px $color inset;
}
}

View File

@@ -0,0 +1,39 @@
@mixin utils-clearfix {
$selector: &;
@at-root {
#{$selector}::before,
#{$selector}::after {
display: table;
content: '';
}
#{$selector}::after {
clear: both;
}
}
}
@mixin utils-vertical-center {
$selector: &;
@at-root {
#{$selector}::after {
display: inline-block;
content: '';
height: 100%;
vertical-align: middle;
}
}
}
@mixin utils-ellipsis {
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}
@mixin utils-inline-flex-center {
display: inline-flex;
justify-content: center;
align-items: center;
}

View File

@@ -0,0 +1,109 @@
@use 'mixins/mixins' as *;
@use 'mixins/var' as *;
@use 'common/var' as *;
@include b(notification) {
@include set-component-css-var('notification', $notification);
}
@include b(notification) {
display: flex;
width: getCssVar('notification-width');
padding: getCssVar('notification-padding');
border-radius: getCssVar('notification-radius');
box-sizing: border-box;
border: 1px solid getCssVar('notification-border-color');
position: fixed;
background-color: getCssVar('bg-color', 'overlay');
box-shadow: getCssVar('notification-shadow');
transition:
opacity getCssVar('transition-duration'),
transform getCssVar('transition-duration'),
left getCssVar('transition-duration'),
right getCssVar('transition-duration'),
top 0.4s,
bottom getCssVar('transition-duration');
overflow-wrap: break-word;
overflow: hidden;
z-index: 9999;
&.right {
right: 16px;
}
&.left {
left: 16px;
}
@include e(group) {
flex: 1;
min-width: 0;
margin-left: getCssVar('notification-group-margin-left');
margin-right: getCssVar('notification-group-margin-right');
}
@include e(title) {
font-weight: bold;
font-size: getCssVar('notification-title-font-size');
line-height: getCssVar('notification-icon-size');
color: getCssVar('notification-title-color');
margin: 0;
}
@include e(content) {
font-size: getCssVar('notification-content-font-size');
line-height: 24px;
margin: 6px 0 0;
color: getCssVar('notification-content-color');
p {
margin: 0;
}
}
& .#{$namespace}-notification__icon {
flex-shrink: 0;
height: getCssVar('notification-icon-size');
width: getCssVar('notification-icon-size');
font-size: getCssVar('notification-icon-size');
}
& .#{$namespace}-notification__closeBtn {
position: absolute;
top: 18px;
right: 15px;
cursor: pointer;
color: getCssVar('notification-close-color');
font-size: getCssVar('notification-close-font-size');
&:hover {
color: getCssVar('notification-close-hover-color');
}
}
@each $type in (primary, success, info, warning, error) {
& .#{$namespace}-notification--#{$type} {
@include css-var-from-global(
('notification', 'icon-color'),
('color', $type)
);
color: getCssVar('notification-icon-color');
}
}
}
.#{$namespace}-notification-fade-enter-from {
&.right {
right: 0;
transform: translateX(100%);
}
&.left {
left: 0;
transform: translateX(-100%);
}
}
.#{$namespace}-notification-fade-leave-to {
opacity: 0;
}

View File

@@ -0,0 +1,33 @@
@use 'sass:map';
@use 'mixins/mixins' as *;
@use 'common/var' as *;
@include b(select-group) {
$gap: 20px;
margin: 0;
padding: 0;
@include e(wrap) {
position: relative;
list-style: none;
margin: 0;
padding: 0;
}
@include e(title) {
box-sizing: border-box;
padding: 0 $gap;
font-size: map.get($select-group, 'font-size');
color: map.get($select-group, 'text-color');
line-height: map.get($select-group, 'height');
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}
& .#{$namespace}-select-dropdown__item {
padding-left: $gap;
}
}

View File

@@ -0,0 +1,71 @@
@use 'sass:map';
@use 'mixins/mixins' as *;
@use 'common/var' as *;
$checked-icon: "data:image/svg+xml;utf8,%3Csvg class='icon' width='200' height='200' viewBox='0 0 1024 1024' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath fill='currentColor' d='M406.656 706.944L195.84 496.256a32 32 0 10-45.248 45.248l256 256 512-512a32 32 0 00-45.248-45.248L406.592 706.944z'%3E%3C/path%3E%3C/svg%3E";
@mixin checked-icon {
content: '';
position: absolute;
top: 50%;
right: 20px;
border-top: none;
border-right: none;
background-repeat: no-repeat;
background-position: center;
background-color: map.get($select-option, 'selected-text-color');
mask: url('#{$checked-icon}') no-repeat;
mask-size: 100% 100%;
-webkit-mask: url('#{$checked-icon}') no-repeat;
-webkit-mask-size: 100% 100%;
transform: translateY(-50%);
width: 12px;
height: 12px;
}
@include b(select-dropdown) {
@include e(item) {
font-size: map.get($select, 'font-size');
// 20 as the padding of option item, 12 as the size of ✓ icon size
padding: 0 #{20 + 12}px 0 20px;
position: relative;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
color: map.get($select-option, 'text-color');
height: map.get($select-option, 'height');
line-height: map.get($select-option, 'height');
box-sizing: border-box;
cursor: pointer;
@include when(hovering) {
background-color: map.get($select-option, 'hover-background');
}
@include when(selected) {
color: map.get($select-option, 'selected-text-color');
font-weight: bold;
}
@include when(disabled) {
color: map.get($select-option, 'disabled-color');
cursor: not-allowed;
background-color: unset;
}
}
@include when(multiple) {
.#{$namespace}-select-dropdown__item.is-selected {
&::after {
@include checked-icon;
}
}
.#{$namespace}-select-dropdown__item.is-disabled {
&::after {
background-color: map.get($select-option, 'disabled-color');
}
}
}
}

View File

@@ -0,0 +1,17 @@
@use 'mixins/mixins' as *;
@use 'common/var' as *;
@include b(overlay) {
position: fixed;
top: 0;
right: 0;
bottom: 0;
left: 0;
z-index: 2000;
height: 100%;
background-color: getCssVar('overlay-color', 'lighter');
overflow: auto;
#{& + '-root'} {
height: 0;
}
}

View File

@@ -0,0 +1,60 @@
@use 'mixins/mixins' as *;
@use 'common/var' as *;
@include b(page-header) {
@include when(contentful) {
@include e('main') {
border-top: 1px solid getCssVar('border-color', 'light');
margin-top: 16px;
}
}
@include e(header) {
display: flex;
align-items: center;
justify-content: space-between;
line-height: 24px;
@include e(left) {
display: flex;
align-items: center;
margin-right: 40px;
position: relative;
@include e('back') {
display: flex;
align-items: center;
cursor: pointer;
}
.#{$namespace}-divider--vertical {
margin: 0 16px;
}
@include e(icon) {
font-size: 16px;
margin-right: 10px;
display: flex;
align-items: center;
.#{$namespace}-icon {
font-size: inherit;
}
}
@include e(title) {
font-size: 14px;
font-weight: 500;
}
}
}
@include e(content) {
font-size: 18px;
color: getCssVar('text-color', 'primary');
}
@include e(breadcrumb) {
margin-bottom: 16px;
}
}

View File

@@ -0,0 +1,238 @@
@use 'mixins/mixins' as *;
@use 'mixins/utils' as *;
@use 'mixins/var' as *;
@use 'common/var' as *;
@mixin pagination-button {
display: flex;
justify-content: center;
align-items: center;
font-size: getCssVar('pagination-font-size');
min-width: getCssVar('pagination-button-width');
height: getCssVar('pagination-button-height');
line-height: getCssVar('pagination-button-height');
color: getCssVar('pagination-button-color');
background: getCssVar('pagination-bg-color');
padding: 0 4px;
border: none;
border-radius: getCssVar('pagination-border-radius');
cursor: pointer;
text-align: center;
box-sizing: border-box;
* {
pointer-events: none;
}
&:focus {
outline: none;
}
&:hover {
color: getCssVar('pagination-hover-color');
}
&.is-active {
color: getCssVar('pagination-hover-color');
cursor: default;
font-weight: bold;
&.is-disabled {
font-weight: bold;
color: getCssVar('text-color', 'secondary');
}
}
&:disabled,
&.is-disabled {
color: getCssVar('pagination-button-disabled-color');
background-color: getCssVar('pagination-button-disabled-bg-color');
cursor: not-allowed;
}
&:focus-visible {
outline: 1px solid getCssVar('pagination-hover-color');
outline-offset: -1px;
}
}
@include b(pagination) {
@include set-component-css-var('pagination', $pagination);
white-space: nowrap;
color: getCssVar('pagination-text-color');
font-size: getCssVar('pagination-font-size');
font-weight: normal;
display: flex;
align-items: center;
.#{$namespace}-input__inner {
text-align: center;
-moz-appearance: textfield;
}
.#{$namespace}-select {
width: 128px;
}
button {
@include pagination-button;
}
.btn-prev,
.btn-next {
.#{$namespace}-icon {
display: block;
font-size: 12px;
font-weight: bold;
width: inherit;
}
}
& > * {
@include when(first) {
margin-left: 0 !important;
}
@include when(last) {
margin-right: 0 !important;
}
}
.btn-prev {
margin-left: getCssVar('pagination-item-gap');
}
@include e(sizes) {
margin-left: getCssVar('pagination-item-gap');
font-weight: normal;
color: getCssVar('text-color', 'regular');
}
@include e(total) {
margin-left: getCssVar('pagination-item-gap');
font-weight: normal;
color: getCssVar('text-color', 'regular');
&[disabled='true'] {
color: getCssVar('text-color', 'placeholder');
}
}
@include e(jump) {
display: flex;
align-items: center;
margin-left: getCssVar('pagination-item-gap');
font-weight: normal;
color: getCssVar('text-color', 'regular');
&[disabled='true'] {
color: getCssVar('text-color', 'placeholder');
}
@include e(goto) {
margin-right: 8px;
}
@include e(editor) {
text-align: center;
box-sizing: border-box;
&.#{$namespace}-input {
width: 56px;
}
.#{$namespace}-input__inner::-webkit-inner-spin-button,
.#{$namespace}-input__inner::-webkit-outer-spin-button {
-webkit-appearance: none;
margin: 0;
}
}
@include e(classifier) {
margin-left: 8px;
}
}
@include e(rightwrapper) {
flex: 1;
display: flex;
align-items: center;
justify-content: flex-end;
}
@include when(background) {
.btn-prev,
.btn-next,
.#{$namespace}-pager li {
margin: 0 4px;
background-color: getCssVar('pagination-button-bg-color');
&.is-active {
background-color: getCssVar('color-primary');
color: getCssVar('color-white');
}
&:disabled,
&.is-disabled {
color: getCssVar('text-color', 'placeholder');
background-color: getCssVar('disabled-bg-color');
&.is-active {
color: getCssVar('text-color', 'secondary');
background-color: getCssVar('fill-color', 'dark');
}
}
}
.btn-prev {
margin-left: getCssVar('pagination-item-gap');
}
}
@include m(small) {
.btn-prev,
.btn-next,
.#{$namespace}-pager li {
height: getCssVar('pagination-button-height-small');
line-height: getCssVar('pagination-button-height-small');
font-size: getCssVar('pagination-font-size-small');
min-width: getCssVar('pagination-button-width-small');
}
span:not([class*='suffix']),
button {
font-size: getCssVar('pagination-font-size-small');
}
.#{$namespace}-select {
width: 100px;
}
}
@include m(large) {
.btn-prev,
.btn-next,
.#{$namespace}-pager li {
height: getCssVar('pagination-button-height-large');
line-height: getCssVar('pagination-button-height-large');
min-width: getCssVar('pagination-button-width-large');
}
.#{$namespace}-select .#{$namespace}-input {
width: 160px;
}
}
}
@include b(pager) {
user-select: none;
list-style: none;
font-size: 0;
padding: 0;
margin: 0;
display: flex;
align-items: center;
li {
@include pagination-button;
}
}

View File

@@ -0,0 +1,17 @@
@use 'mixins/mixins' as *;
@use 'common/var' as *;
@include b(popconfirm) {
outline: none;
@include e(main) {
display: flex;
align-items: center;
}
@include e(icon) {
margin-right: 5px;
}
@include e(action) {
text-align: right;
margin-top: 8px;
}
}

View File

@@ -0,0 +1,61 @@
@use 'mixins/mixins' as *;
@use 'mixins/var' as *;
@use 'common/var' as *;
@include b(popover) {
@include set-component-css-var('popover', $popover);
&.#{$namespace}-popper {
background: getCssVar('popover-bg-color');
min-width: 150px;
border-radius: getCssVar('popover-border-radius');
border: 1px solid getCssVar('popover-border-color');
padding: getCssVar('popover-padding');
z-index: getCssVar('index-popper');
color: getCssVar('text-color', 'regular');
line-height: 1.4;
font-size: getCssVar('popover-font-size');
box-shadow: getCssVar('box-shadow-light');
overflow-wrap: break-word;
box-sizing: border-box;
@include m(plain) {
padding: getCssVar('popover-padding-large');
}
@include e(title) {
color: getCssVar('popover-title-text-color');
font-size: getCssVar('popover-title-font-size');
line-height: 1;
margin-bottom: 12px;
}
@include e(reference) {
&:focus:not(.focusing),
&:focus:hover {
outline-width: 0;
}
}
@include when(dark) {
@include set-css-var-value(
('popover', 'bg-color'),
var(#{getCssVarName('text-color', 'primary')})
);
@include set-css-var-value(
('popover', 'border-color'),
var(#{getCssVarName('text-color', 'primary')})
);
@include set-css-var-value(
('popover', 'title-text-color'),
var(#{getCssVarName('bg-color')})
);
color: getCssVar('bg-color');
}
&:focus:active,
&:focus {
outline-width: 0;
}
}
}

View File

@@ -0,0 +1,107 @@
@use 'mixins/mixins' as *;
@use 'mixins/var' as *;
@use 'common/var' as *;
@include b(popper) {
@include set-component-css-var('popper', $popper);
}
@include b(popper) {
position: absolute;
border-radius: getCssVar('popper', 'border-radius');
padding: 5px 11px;
z-index: 2000;
font-size: 12px;
line-height: 20px;
min-width: 10px;
overflow-wrap: break-word;
word-break: normal;
visibility: visible;
$arrow-selector: #{& + '__arrow'};
@include when(dark) {
color: getCssVar('bg-color');
background: getCssVar('text-color', 'primary');
border: 1px solid getCssVar('text-color', 'primary');
> #{$arrow-selector}::before {
border: 1px solid getCssVar('text-color', 'primary');
background: getCssVar('text-color', 'primary');
right: 0;
}
}
@include when(light) {
background: getCssVar('bg-color', 'overlay');
border: 1px solid getCssVar('border-color', 'light');
> #{$arrow-selector}::before {
border: 1px solid getCssVar('border-color', 'light');
background: getCssVar('bg-color', 'overlay');
right: 0;
}
}
@include when(pure) {
padding: 0;
}
@include e(arrow) {
position: absolute;
width: 10px;
height: 10px;
z-index: -1;
&::before {
position: absolute;
width: 10px;
height: 10px;
z-index: -1;
content: ' ';
transform: rotate(45deg);
background: getCssVar('text-color', 'primary');
box-sizing: border-box;
}
}
$placements: (
'top': 'bottom',
'bottom': 'top',
'left': 'right',
'right': 'left',
);
@each $placement, $opposite in $placements {
&[data-popper-placement^='#{$placement}'] > #{$arrow-selector} {
#{$opposite}: -5px;
&::before {
@if $placement == top {
border-bottom-right-radius: 2px;
}
@if $placement == bottom {
border-top-left-radius: 2px;
}
@if $placement == left {
border-top-right-radius: 2px;
}
@if $placement == right {
border-bottom-left-radius: 2px;
}
}
}
}
@each $placement,
$adjacency
in ('top': 'left', 'bottom': 'right', 'left': 'bottom', 'right': 'top')
{
&[data-popper-placement^='#{$placement}'] > {
#{$arrow-selector}::before {
border-#{$placement}-color: transparent !important;
border-#{$adjacency}-color: transparent !important;
}
}
}
}

View File

@@ -0,0 +1,179 @@
@use 'mixins/mixins' as *;
@use 'mixins/utils' as *;
@use 'common/var' as *;
@include b(progress) {
position: relative;
line-height: 1;
display: flex;
align-items: center;
@include e(text) {
font-size: 14px;
color: getCssVar('text-color', 'regular');
margin-left: 5px;
min-width: 50px;
line-height: 1;
i {
vertical-align: middle;
display: block;
}
}
@include m((circle, dashboard)) {
display: inline-block;
.#{$namespace}-progress__text {
position: absolute;
top: 50%;
left: 0;
width: 100%;
text-align: center;
margin: 0;
transform: translate(0, -50%);
i {
vertical-align: middle;
display: inline-block;
}
}
}
@include m(without-text) {
.#{$namespace}-progress__text {
display: none;
}
.#{$namespace}-progress-bar {
padding-right: 0;
margin-right: 0;
display: block;
}
}
@include m(text-inside) {
.#{$namespace}-progress-bar {
padding-right: 0;
margin-right: 0;
}
}
@include when(success) {
.#{$namespace}-progress-bar__inner {
background-color: getCssVar('color-success');
}
.#{$namespace}-progress__text {
color: getCssVar('color-success');
}
}
@include when(warning) {
.#{$namespace}-progress-bar__inner {
background-color: getCssVar('color-warning');
}
.#{$namespace}-progress__text {
color: getCssVar('color-warning');
}
}
@include when(exception) {
.#{$namespace}-progress-bar__inner {
background-color: getCssVar('color-danger');
}
.#{$namespace}-progress__text {
color: getCssVar('color-danger');
}
}
}
@include b(progress-bar) {
flex-grow: 1;
box-sizing: border-box;
@include e(outer) {
height: 6px;
border-radius: 100px;
background-color: getCssVar('border-color-lighter');
overflow: hidden;
position: relative;
vertical-align: middle;
}
@include e(inner) {
position: absolute;
left: 0;
top: 0;
height: 100%;
background-color: getCssVar('color-primary');
text-align: right;
border-radius: 100px;
line-height: 1;
white-space: nowrap;
transition: width 0.6s ease;
@include utils-vertical-center;
@include m(indeterminate) {
transform: translateZ(0);
animation: indeterminate 3s infinite;
}
@include m(striped) {
background-image: linear-gradient(
45deg,
rgba(0, 0, 0, 0.1) 25%,
transparent 25%,
transparent 50%,
rgba(0, 0, 0, 0.1) 50%,
rgba(0, 0, 0, 0.1) 75%,
transparent 75%,
transparent
);
background-size: 1.25em 1.25em;
&.#{$namespace}-progress-bar__inner--striped-flow {
animation: striped-flow 3s linear infinite;
}
}
}
@include e(innerText) {
display: inline-block;
vertical-align: middle;
color: $color-white;
font-size: 12px;
margin: 0 5px;
}
}
@keyframes progress {
0% {
background-position: 0 0;
}
100% {
background-position: 32px 0;
}
}
@keyframes indeterminate {
0% {
left: -100%;
}
100% {
left: 100%;
}
}
@keyframes striped-flow {
0% {
background-position: -100%;
}
100% {
background-position: 100%;
}
}

View File

@@ -0,0 +1,169 @@
@use 'sass:map';
@use 'mixins/mixins' as *;
@use 'mixins/utils' as *;
@use 'mixins/var' as *;
@use 'mixins/button' as *;
@use 'common/var' as *;
@include b(radio-button) {
@include set-component-css-var('radio-button', $radio-button);
}
@include b(radio-button) {
position: relative;
display: inline-block;
outline: none;
@include e(inner) {
display: inline-block;
line-height: 1;
white-space: nowrap;
vertical-align: middle;
background: var(
#{getCssVarName('button-bg-color')},
map.get($button, 'bg-color')
);
border: getCssVar('border');
font-weight: var(
#{getCssVarName('button-font-weight')},
map.get($button, 'font-weight')
);
border-left: 0;
color: var(
#{getCssVarName('button-text-color')},
map.get($button, 'text-color')
);
-webkit-appearance: none;
text-align: center;
box-sizing: border-box;
outline: none;
margin: 0;
position: relative;
cursor: pointer;
transition: getCssVar('transition-all');
user-select: none;
@include button-size(
map.get($button-padding-vertical, 'default') - $button-border-width,
map.get($button-padding-horizontal, 'default') - $button-border-width,
map.get($button-font-size, 'default'),
0
);
&:hover {
color: getCssVar('color-primary');
}
& [class*='#{$namespace}-icon-'] {
line-height: 0.9;
& + span {
margin-left: 5px;
}
}
}
&:first-child {
.#{$namespace}-radio-button__inner {
border-left: getCssVar('border');
border-radius: getCssVar('border-radius-base') 0 0
getCssVar('border-radius-base');
box-shadow: none !important;
}
}
@include when(active) {
@include e(original-radio) {
&:not(:disabled) {
& + .#{$namespace}-radio-button__inner {
color: getCssVarWithDefault(
('radio-button', 'checked-text-color'),
map.get($radio-button, 'checked-text-color')
);
background-color: getCssVarWithDefault(
'radio-button-checked-bg-color',
map.get($radio-button, 'checked-bg-color')
);
border-color: getCssVarWithDefault(
'radio-button-checked-border-color',
map.get($radio-button, 'checked-border-color')
);
box-shadow: -1px 0 0 0
getCssVarWithDefault(
'radio-button-checked-border-color',
map.get($radio-button, 'checked-border-color')
);
}
}
}
}
@include e(original-radio) {
opacity: 0;
outline: none;
position: absolute;
z-index: -1;
&:focus-visible {
& + .#{$namespace}-radio-button__inner {
border-left: getCssVar('border');
border-left-color: getCssVarWithDefault(
'radio-button-checked-border-color',
map.get($radio-button, 'checked-border-color')
);
outline: 2px solid getCssVar('radio-button-checked-border-color');
outline-offset: 1px;
z-index: 2;
border-radius: getCssVar('border-radius-base');
box-shadow: none;
}
}
&:disabled {
& + .#{$namespace}-radio-button__inner {
color: getCssVar('disabled-text-color');
cursor: not-allowed;
background-image: none;
background-color: getCssVarWithDefault(
'button-disabled-bg-color',
map.get($button, 'disabled-bg-color')
);
border-color: getCssVarWithDefault(
'button-disabled-border-color',
map.get($button, 'disabled-border-color')
);
box-shadow: none;
}
&:checked + .#{$namespace}-radio-button__inner {
background-color: getCssVar('radio-button-disabled-checked-fill');
}
}
}
&:last-child {
.#{$namespace}-radio-button__inner {
border-radius: 0 getCssVar('border-radius-base')
getCssVar('border-radius-base') 0;
}
}
&:first-child:last-child {
.#{$namespace}-radio-button__inner {
border-radius: getCssVar('border-radius-base');
}
}
@each $size in (large, small) {
@include m($size) {
& .#{$namespace}-radio-button__inner {
@include button-size(
map.get($button-padding-vertical, $size) - $button-border-width,
map.get($button-padding-horizontal, $size) - $button-border-width,
map.get($button-font-size, $size),
0
);
}
}
}
}

Some files were not shown because too many files have changed in this diff Show More