kui-vue
Version:
A lightweight desktop UI component library suitable for Vue.js 2.
487 lines (455 loc) • 9.7 kB
text/less
@import "../../styles/var.less";
.k-datepicker {
display: inline-flex;
box-sizing: border-box;
vertical-align: middle;
color: var(--kui-color-font);
background: none;
font-size: 14px;
position: relative;
border: 1px solid var(--kui-color-border);
min-height: 32px;
border-radius: var(--kui-border-radius);
background-color: var(--kui-color-back);
cursor: default;
user-select: none;
// min-width: 135px;
transition: all 0.3s;
flex-shrink: 0;
align-items: center;
padding: 0 8px;
outline: 2px solid transparent;
outline-offset: 1px;
&:hover {
border-color: var(--kui-color-main);
}
&:focus {
outline: 2px solid var(--kui-color-main-80);
}
.k-datepicker-selection {
white-space: nowrap;
width: 100%;
box-sizing: border-box;
display: flex;
align-items: center;
}
.k-icon-calendar {
color: var(--kui-color-icon);
font-size: 14px;
margin-left: 4px;
}
.k-icon-clean {
color: var(--kui-color-icon);
font-size: 14px;
position: absolute;
z-index: 10;
right: 8px;
display: none;
&:hover {
color: var(--kui-color-icon-hover);
}
&:active {
color: var(--kui-color-icon-active);
}
}
.k-datepicker-input {
border: none;
background: none;
outline: none;
line-height: 1;
font-size: 14px;
padding: 0;
margin: 0;
}
.k-datepicker-separator {
margin: 0 5px;
display: flex;
}
.k-datepicker-placeholder,
.k-datepicker-has-clear {
&:hover {
.k-icon-clean {
display: block;
cursor: pointer;
}
.k-icon-calendar {
// display: none;
opacity: 0;
}
}
}
}
.k-datepicker-light {
border-color: transparent;
background-color: var(--kui-color-gray-80);
&:hover,
&:focus {
box-shadow: none;
border-color: transparent;
}
}
.k-datepicker-circle {
border-radius: 30px;
}
.k-datepicker-range {
// min-width: 207px;
.k-datepicker-separator {
display: inline-block;
vertical-align: middle;
padding: 0 5px;
}
}
.k-datepicker-with-time {
.k-datepicker-placeholder {
width: 150px;
}
}
.k-datepicker-opened {
border-color: var(--kui-color-main);
box-shadow: 0 0 0 2px var(--kui-color-main-90);
outline: 2px solid var(--kui-color-main-80);
&.k-datepicker-light {
border-color: transparent;
box-shadow: none;
}
&:focus {
outline: 2px solid var(--kui-color-main-80);
}
}
.k-datepicker-overlay {
position: absolute;
z-index: 1003;
background: var(--kui-color-back-10);
box-shadow: 0 2px 8px rgba(0, 0, 0, 0.15);
border-radius: var(--kui-border-radius);
overflow: hidden;
display: flex;
flex-direction: row;
border: 1px solid var(--kui-color-gray-80);
user-select: none;
}
.k-picker-presets {
display: flex;
flex-direction: column;
min-width: 90px;
max-width: 200px;
border-right: 1px solid var(--kui-color-border);
padding: 8px;
box-sizing: border-box;
overflow: hidden auto;
gap: 5px;
.k-btn {
text-overflow: ellipsis;
}
}
.k-datepicker-sm {
min-height: 24px;
padding: 0 var(--kui-padding-inline-sm);
.k-icon {
font-size: 12px;
}
.k-datepicker-input {
font-size: 12px;
}
.k-datepicker-selection {
white-space: nowrap;
line-height: 0;
}
.k-icon-clean {
right: 5px;
}
}
.k-datepicker-lg {
min-height: 40px;
// min-width: 190px;
padding: 0 9px;
.k-datepicker-input {
font-size: 16px;
}
.k-icon {
font-size: 16px;
right: 10px;
}
.k-icon-clean {
right: 9px;
}
}
.k-datepicker-disabled {
border-color: var(--kui-color-disable-border);
color: var(--kui-color-disabled);
cursor: not-allowed;
background: var(--kui-color-disable-back);
&:hover,
&:focus {
border-color: var(--kui-color-disable-border);
box-shadow: none;
}
}
.k-datepicker-borderless {
border-color: transparent;
box-shadow: none;
background-color: transparent;
&:hover,
&:focus {
border-color: transparent;
box-shadow: none;
}
}
.k-picker-container {
width: 272px;
display: flex;
flex-direction: column;
.k-picker-extra-header,
.k-picker-extra-footer {
padding: 10px;
}
.k-picker-extra-header {
border-bottom: 1px solid var(--kui-color-border);
}
.k-picker-extra-footer {
border-top: 1px solid var(--kui-color-border);
}
.k-picker-header {
text-align: center;
position: relative;
padding: 10px;
display: flex;
align-items: center;
justify-content: space-between;
gap: 5px;
}
.k-picker-body {
// width: 215px;
position: relative;
min-height: 283px;
// min-width: 272px;
padding: 0 10px 10px 10px;
box-sizing: border-box;
display: flex;
flex-direction: column;
flex: 1;
}
.k-picker-weekdays {
font-weight: 500;
.k-picker-weekday {
width: 36px;
height: 36px;
display: inline-block;
text-align: center;
line-height: 36px;
color: var(--kui-color-icon);
font-size: 12px;
}
}
.k-picker-day {
cursor: pointer;
color: var(--kui-color-font);
border-radius: var(--kui-border-radius);
position: relative;
display: inline-block;
text-align: center;
overflow: hidden;
border: 1px solid transparent;
width: 32px;
height: 32px;
line-height: 32px;
font-size: 14px;
margin: 2px;
box-sizing: border-box;
&:hover {
background: var(--kui-color-hover);
}
&:active {
background: var(--kui-color-active);
}
}
.k-picker-day-out {
color: var(--kui-color-icon);
background: none;
}
.k-picker-day-in {
background: var(--kui-color-main-90);
}
.k-picker-is-today {
// border: 1px solid var(--kui-color-main);
color: var(--kui-color-main);
background-color: var(--kui-color-gray-90);
&:after {
content: "";
position: absolute;
width: 5px;
height: 5px;
background: var(--kui-color-main);
right: 1px;
top: 1px;
border-radius: 50%;
}
}
.k-picker-header-label {
font-size: 14px;
color: var(--kui-color-font);
cursor: pointer;
font-weight: bold;
flex: 1;
white-space: nowrap;
display: flex;
align-items: center;
justify-content: center;
gap: 5px;
span:hover {
color: var(--kui-color-main);
}
}
.k-picker-month-body,
.k-picker-year-body {
display: flex;
flex-wrap: wrap;
flex: 1;
gap: 10px;
}
.k-picker-month-item,
.k-picker-year-item {
width: calc((100% - 20px) / 3);
text-align: center;
display: flex;
font-size: 14px;
align-items: center;
justify-content: center;
border-radius: var(--kui-border-radius);
cursor: pointer;
&:hover {
background: var(--kui-color-hover);
}
}
.k-picker-day-selected,
.k-picker-year-selected,
.k-picker-month-selected {
color: #fff;
font-weight: bold;
background: var(--kui-color-main);
&:hover {
background: var(--kui-color-main);
}
&::after {
background-color: #fff;
}
}
.k-picker-footer {
box-sizing: border-box;
font-size: 14px;
border-top: 1px solid var(--kui-color-border);
display: flex;
align-items: center;
justify-content: center;
}
.k-picker-footer-time-split {
width: 40px;
position: relative;
height: 40px;
display: flex;
align-items: center;
justify-content: center;
font-size: 16px;
}
.k-picker-footer-time {
padding: 12px;
box-sizing: border-box;
display: flex;
justify-content: center;
align-items: center;
cursor: pointer;
flex: 1;
&:hover {
background: var(--kui-color-hover);
}
&.active {
color: var(--kui-color-main);
text-shadow: 0 0 1px var(--kui-color-main);
}
}
.k-picker-time-picker {
display: flex;
height: 282px;
border-top: 1px solid var(--kui-color-border);
}
.k-picker-time-col {
flex: 1;
height: 100%;
overflow-y: auto;
text-align: center;
padding: 0;
margin: 0;
list-style: none;
scrollbar-width: none;
position: relative;
z-index: 2;
// scroll-behavior: smooth;
user-select: none;
&::-webkit-scrollbar {
display: none;
}
&::before,
&::after {
content: "";
display: block;
height: 152px; /* (224-32)/2 */
}
&:nth-last-child(2) {
border-left: 1px solid var(--kui-color-border);
border-right: 1px solid var(--kui-color-border);
}
}
.k-picker-time-item {
height: 32px;
line-height: 32px;
cursor: pointer;
color: var(--kui-color-font);
font-size: 13px;
opacity: 0.6;
transition: all 0.2s;
&:hover {
background: var(--kui-color-hover);
opacity: 1;
}
}
.k-picker-time-item.active {
color: var(--kui-color-main);
font-weight: bold;
opacity: 1;
transform: scale(1.1);
}
.k-picker-day-disabled,
.k-picker-time-disabled {
color: var(--kui-color-icon);
background-color: var(--kui-color-disable-back);
opacity: 0.7;
cursor: not-allowed;
&:hover {
background-color: var(--kui-color-disable-back);
}
}
/* 垫片:让首尾元素能滚到中间 */
}
.k-datepicker-overlay[mode="time"] {
.k-picker-time-picker {
border-top: none;
}
}
@keyframes drop-down {
0% {
opacity: 0;
transform: scaleY(0);
}
to {
opacity: 1;
transform: scaleY(1);
}
}
.k-date-picker-enter-active {
transform-origin: 0 0;
animation: drop-down 0.3s;
}
.k-date-picker-leave-active {
transform-origin: 0 0;
animation: drop-down 0.3s reverse;
}