457 lines
14 KiB
JavaScript
457 lines
14 KiB
JavaScript
import BaseStyle from 'primevue/base/style';
|
|
|
|
const theme = ({ dt }) => `
|
|
.p-datepicker {
|
|
display: inline-flex;
|
|
max-width: 100%;
|
|
}
|
|
|
|
.p-datepicker-input {
|
|
flex: 1 1 auto;
|
|
width: 1%;
|
|
}
|
|
|
|
.p-datepicker:has(.p-datepicker-dropdown) .p-datepicker-input {
|
|
border-top-right-radius: 0;
|
|
border-bottom-right-radius: 0;
|
|
}
|
|
|
|
.p-datepicker-dropdown {
|
|
cursor: pointer;
|
|
display: inline-flex;
|
|
cursor: pointer;
|
|
user-select: none;
|
|
align-items: center;
|
|
justify-content: center;
|
|
overflow: hidden;
|
|
position: relative;
|
|
width: ${dt('datepicker.dropdown.width')};
|
|
border-top-right-radius: ${dt('datepicker.dropdown.border.radius')};
|
|
border-bottom-right-radius: ${dt('datepicker.dropdown.border.radius')};
|
|
background: ${dt('datepicker.dropdown.background')};
|
|
border: 1px solid ${dt('datepicker.dropdown.border.color')};
|
|
border-left: 0 none;
|
|
color: ${dt('datepicker.dropdown.color')};
|
|
transition: background ${dt('datepicker.transition.duration')}, color ${dt('datepicker.transition.duration')}, border-color ${dt('datepicker.transition.duration')}, outline-color ${dt('datepicker.transition.duration')};
|
|
outline-color: transparent;
|
|
}
|
|
|
|
.p-datepicker-dropdown:not(:disabled):hover {
|
|
background: ${dt('datepicker.dropdown.hover.background')};
|
|
border-color: ${dt('datepicker.dropdown.hover.border.color')};
|
|
color: ${dt('datepicker.dropdown.hover.color')};
|
|
}
|
|
|
|
.p-datepicker-dropdown:not(:disabled):active {
|
|
background: ${dt('datepicker.dropdown.active.background')};
|
|
border-color: ${dt('datepicker.dropdown.active.border.color')};
|
|
color: ${dt('datepicker.dropdown.active.color')};
|
|
}
|
|
|
|
.p-datepicker-dropdown:focus-visible {
|
|
box-shadow: ${dt('datepicker.dropdown.focus.ring.shadow')};
|
|
outline: ${dt('datepicker.dropdown.focus.ring.width')} ${dt('datepicker.dropdown.focus.ring.style')} ${dt('datepicker.dropdown.focus.ring.color')};
|
|
outline-offset: ${dt('datepicker.dropdown.focus.ring.offset')};
|
|
}
|
|
|
|
.p-datepicker:has(.p-datepicker-input-icon-container) {
|
|
position: relative;
|
|
}
|
|
|
|
.p-datepicker:has(.p-datepicker-input-icon-container) .p-datepicker-input {
|
|
padding-right: calc((${dt('form.field.padding.x')} * 2) + ${dt('icon.size')});
|
|
}
|
|
|
|
.p-datepicker-input-icon-container {
|
|
cursor: pointer;
|
|
position: absolute;
|
|
top: 50%;
|
|
right: ${dt('form.field.padding.x')};
|
|
margin-top: calc(-1 * (${dt('icon.size')} / 2));
|
|
color: ${dt('datepicker.input.icon.color')};
|
|
}
|
|
|
|
.p-fluid .p-datepicker {
|
|
display: flex;
|
|
}
|
|
|
|
.p-fluid .p-datepicker-input {
|
|
width: 1%;
|
|
}
|
|
|
|
.p-datepicker .p-datepicker-panel {
|
|
min-width: 100%;
|
|
}
|
|
|
|
.p-datepicker-panel {
|
|
width: auto;
|
|
padding: ${dt('datepicker.panel.padding')};
|
|
background: ${dt('datepicker.panel.background')};
|
|
color: ${dt('datepicker.panel.color')};
|
|
border: 1px solid ${dt('datepicker.panel.border.color')};
|
|
border-radius: ${dt('datepicker.panel.border.radius')};
|
|
box-shadow: ${dt('datepicker.panel.shadow')};
|
|
}
|
|
|
|
.p-datepicker-panel-inline {
|
|
display: inline-block;
|
|
overflow-x: auto;
|
|
box-shadow: none;
|
|
}
|
|
|
|
.p-datepicker-header {
|
|
display: flex;
|
|
align-items: center;
|
|
justify-content: space-between;
|
|
padding: ${dt('datepicker.header.padding')};
|
|
font-weight: ${dt('datepicker.header.font.weight')};
|
|
background: ${dt('datepicker.header.background')};
|
|
color: ${dt('datepicker.header.color')};
|
|
border-bottom: 1px solid ${dt('datepicker.header.border.color')};
|
|
}
|
|
|
|
.p-datepicker-title {
|
|
display: flex;
|
|
align-items: center;
|
|
justify-content: space-between;
|
|
gap: ${dt('datepicker.title.gap')};
|
|
font-weight: ${dt('datepicker.title.font.weight')};
|
|
}
|
|
|
|
.p-datepicker-select-year,
|
|
.p-datepicker-select-month {
|
|
border: none;
|
|
background: transparent;
|
|
margin: 0;
|
|
cursor: pointer;
|
|
font-weight: inherit;
|
|
transition: background ${dt('datepicker.transition.duration')}, color ${dt('datepicker.transition.duration')}, border-color ${dt('datepicker.transition.duration')}, outline-color ${dt('datepicker.transition.duration')}, box-shadow ${dt(
|
|
'datepicker.transition.duration'
|
|
)};
|
|
}
|
|
|
|
.p-datepicker-select-month {
|
|
padding: ${dt('datepicker.view.month.padding')};
|
|
color: ${dt('datepicker.view.month.color')};
|
|
border-radius: ${dt('datepicker.view.month.border.radius')};
|
|
}
|
|
|
|
.p-datepicker-select-year {
|
|
padding: ${dt('datepicker.view.year.padding')};
|
|
color: ${dt('datepicker.view.year.color')};
|
|
border-radius: ${dt('datepicker.view.year.border.radius')};
|
|
}
|
|
|
|
.p-datepicker-select-month:enabled:hover {
|
|
background: ${dt('datepicker.view.month.hover.background')};
|
|
color: ${dt('datepicker.view.month.hover.color')};
|
|
}
|
|
|
|
.p-datepicker-select-year:enabled:hover {
|
|
background: ${dt('datepicker.view.year.hover.background')};
|
|
color: ${dt('datepicker.view.year.hover.color')};
|
|
}
|
|
|
|
.p-datepicker-calendar-container {
|
|
display: flex;
|
|
}
|
|
|
|
.p-datepicker-calendar-container .p-datepicker-calendar {
|
|
flex: 1 1 auto;
|
|
border-left: 1px solid ${dt('datepicker.group.border.color')};
|
|
padding-right: ${dt('datepicker.group.gap')};
|
|
padding-left: ${dt('datepicker.group.gap')};
|
|
}
|
|
|
|
.p-datepicker-calendar-container .p-datepicker-calendar:first-child {
|
|
padding-left: 0;
|
|
border-left: 0 none;
|
|
}
|
|
|
|
.p-datepicker-calendar-container .p-datepicker-calendar:last-child {
|
|
padding-right: 0;
|
|
}
|
|
|
|
.p-datepicker-day-view {
|
|
width: 100%;
|
|
border-collapse: collapse;
|
|
font-size: 1rem;
|
|
margin: ${dt('datepicker.day.view.margin')};
|
|
}
|
|
|
|
.p-datepicker-weekday-cell {
|
|
padding: ${dt('datepicker.week.day.padding')};
|
|
}
|
|
|
|
.p-datepicker-weekday {
|
|
font-weight: ${dt('datepicker.week.day.font.weight')};
|
|
color: ${dt('datepicker.week.day.color')};
|
|
}
|
|
|
|
.p-datepicker-day-cell {
|
|
padding: ${dt('datepicker.date.padding')};
|
|
}
|
|
|
|
.p-datepicker-day {
|
|
display: flex;
|
|
justify-content: center;
|
|
align-items: center;
|
|
cursor: pointer;
|
|
margin: 0 auto;
|
|
overflow: hidden;
|
|
position: relative;
|
|
width: ${dt('datepicker.date.width')};
|
|
height: ${dt('datepicker.date.height')};
|
|
border-radius: ${dt('datepicker.date.border.radius')};
|
|
transition: background ${dt('datepicker.transition.duration')}, color ${dt('datepicker.transition.duration')}, border-color ${dt('datepicker.transition.duration')},
|
|
box-shadow ${dt('datepicker.transition.duration')}, outline-color ${dt('datepicker.transition.duration')};
|
|
border: 1px solid transparent;
|
|
outline-color: transparent;
|
|
color: ${dt('datepicker.date.color')};
|
|
}
|
|
|
|
.p-datepicker-day:not(.p-datepicker-day-selected):not(.p-disabled):hover {
|
|
background: ${dt('datepicker.date.hover.background')};
|
|
color: ${dt('datepicker.date.hover.color')};
|
|
}
|
|
|
|
.p-datepicker-day:focus-visible {
|
|
box-shadow: ${dt('datepicker.date.focus.ring.shadow')};
|
|
outline: ${dt('datepicker.date.focus.ring.width')} ${dt('datepicker.date.focus.ring.style')} ${dt('datepicker.date.focus.ring.color')};
|
|
outline-offset: ${dt('datepicker.date.focus.ring.offset')};
|
|
}
|
|
|
|
.p-datepicker-day-selected {
|
|
background: ${dt('datepicker.date.selected.background')};
|
|
color: ${dt('datepicker.date.selected.color')};
|
|
}
|
|
|
|
.p-datepicker-today > .p-datepicker-day {
|
|
background: ${dt('datepicker.today.background')};
|
|
color: ${dt('datepicker.today.color')};
|
|
}
|
|
|
|
.p-datepicker-today > .p-datepicker-day-selected {
|
|
background: ${dt('datepicker.date.selected.background')};
|
|
color: ${dt('datepicker.date.selected.color')};
|
|
}
|
|
|
|
.p-datepicker-weeknumber {
|
|
text-align: center
|
|
}
|
|
|
|
.p-datepicker-month-view {
|
|
margin: ${dt('datepicker.month.view.margin')};
|
|
}
|
|
|
|
.p-datepicker-month {
|
|
width: 33.3%;
|
|
display: inline-flex;
|
|
align-items: center;
|
|
justify-content: center;
|
|
cursor: pointer;
|
|
overflow: hidden;
|
|
position: relative;
|
|
padding: ${dt('datepicker.date.padding')};
|
|
transition: background ${dt('datepicker.transition.duration')}, color ${dt('datepicker.transition.duration')}, border-color ${dt('datepicker.transition.duration')}, box-shadow ${dt('datepicker.transition.duration')}, outline-color ${dt(
|
|
'datepicker.transition.duration'
|
|
)};
|
|
border-radius: ${dt('datepicker.month.border.radius')};
|
|
outline-color: transparent;
|
|
color: ${dt('datepicker.date.color')};
|
|
}
|
|
|
|
.p-datepicker-month:not(.p-disabled):not(.p-datepicker-month-selected):hover {
|
|
color: ${dt('datepicker.date.hover.color')};
|
|
background: ${dt('datepicker.date.hover.background')};
|
|
}
|
|
|
|
.p-datepicker-month-selected {
|
|
color: ${dt('datepicker.date.selected.color')};
|
|
background: ${dt('datepicker.date.selected.background')};
|
|
}
|
|
|
|
.p-datepicker-month:not(.p-disabled):focus-visible {
|
|
box-shadow: ${dt('datepicker.date.focus.ring.shadow')};
|
|
outline: ${dt('datepicker.date.focus.ring.width')} ${dt('datepicker.date.focus.ring.style')} ${dt('datepicker.date.focus.ring.color')};
|
|
outline-offset: ${dt('datepicker.date.focus.ring.offset')};
|
|
}
|
|
|
|
.p-datepicker-year-view {
|
|
margin: ${dt('datepicker.year.view.margin')};
|
|
}
|
|
|
|
.p-datepicker-year {
|
|
width: 50%;
|
|
display: inline-flex;
|
|
align-items: center;
|
|
justify-content: center;
|
|
cursor: pointer;
|
|
overflow: hidden;
|
|
position: relative;
|
|
padding: ${dt('datepicker.date.padding')};
|
|
transition: background ${dt('datepicker.transition.duration')}, color ${dt('datepicker.transition.duration')}, border-color ${dt('datepicker.transition.duration')}, box-shadow ${dt('datepicker.transition.duration')}, outline-color ${dt(
|
|
'datepicker.transition.duration'
|
|
)};
|
|
border-radius: ${dt('datepicker.year.border.radius')};
|
|
outline-color: transparent;
|
|
color: ${dt('datepicker.date.color')};
|
|
}
|
|
|
|
.p-datepicker-year:not(.p-disabled):not(.p-datepicker-year-selected):hover {
|
|
color: ${dt('datepicker.date.hover.color')};
|
|
background: ${dt('datepicker.date.hover.background')};
|
|
}
|
|
|
|
.p-datepicker-year-selected {
|
|
color: ${dt('datepicker.date.selected.color')};
|
|
background: ${dt('datepicker.date.selected.background')};
|
|
}
|
|
|
|
.p-datepicker-year:not(.p-disabled):focus-visible {
|
|
box-shadow: ${dt('datepicker.date.focus.ring.shadow')};
|
|
outline: ${dt('datepicker.date.focus.ring.width')} ${dt('datepicker.date.focus.ring.style')} ${dt('datepicker.date.focus.ring.color')};
|
|
outline-offset: ${dt('datepicker.date.focus.ring.offset')};
|
|
}
|
|
|
|
.p-datepicker-buttonbar {
|
|
display: flex;
|
|
justify-content: space-between;
|
|
align-items: center;
|
|
padding: ${dt('datepicker.buttonbar.padding')};
|
|
border-top: 1px solid ${dt('datepicker.buttonbar.border.color')};
|
|
}
|
|
|
|
.p-datepicker-buttonbar .p-button {
|
|
width: auto;
|
|
}
|
|
|
|
.p-datepicker-time-picker {
|
|
display: flex;
|
|
justify-content: center;
|
|
align-items: center;
|
|
border-top: 1px solid ${dt('datepicker.time.picker.border.color')};
|
|
padding: 0;
|
|
gap: ${dt('datepicker.time.picker.gap')};
|
|
}
|
|
|
|
.p-datepicker-calendar-container + .p-datepicker-time-picker {
|
|
padding: ${dt('datepicker.time.picker.padding')};
|
|
}
|
|
|
|
.p-datepicker-time-picker > div {
|
|
display: flex;
|
|
align-items: center;
|
|
flex-direction: column;
|
|
gap: ${dt('datepicker.time.picker.button.gap')};
|
|
}
|
|
|
|
.p-datepicker-time-picker span {
|
|
font-size: 1rem;
|
|
}
|
|
|
|
.p-datepicker-timeonly .p-datepicker-time-picker {
|
|
border-top: 0 none;
|
|
}
|
|
`;
|
|
|
|
const inlineStyles = {
|
|
root: ({ props }) => ({ position: props.appendTo === 'self' ? 'relative' : undefined })
|
|
};
|
|
|
|
const classes = {
|
|
root: ({ props, state }) => [
|
|
'p-datepicker p-component p-inputwrapper',
|
|
{
|
|
'p-invalid': props.invalid,
|
|
'p-inputwrapper-filled': props.modelValue,
|
|
'p-inputwrapper-focus': state.focused,
|
|
'p-focus': state.focused || state.overlayVisible
|
|
}
|
|
],
|
|
pcInput: 'p-datepicker-input',
|
|
dropdown: 'p-datepicker-dropdown',
|
|
inputIconContainer: 'p-datepicker-input-icon-container',
|
|
inputIcon: 'p-datepicker-input-icon',
|
|
panel: ({ props }) => [
|
|
'p-datepicker-panel p-component',
|
|
{
|
|
'p-datepicker-panel-inline': props.inline,
|
|
'p-disabled': props.disabled,
|
|
'p-datepicker-timeonly': props.timeOnly
|
|
}
|
|
],
|
|
calendarContainer: 'p-datepicker-calendar-container',
|
|
calendar: 'p-datepicker-calendar',
|
|
header: 'p-datepicker-header',
|
|
pcPrevButton: 'p-datepicker-prev-button',
|
|
title: 'p-datepicker-title',
|
|
selectMonth: 'p-datepicker-select-month',
|
|
selectYear: 'p-datepicker-select-year',
|
|
decade: 'p-datepicker-decade',
|
|
pcNextButton: 'p-datepicker-next-button',
|
|
dayView: 'p-datepicker-day-view',
|
|
weekHeader: 'p-datepicker-weekheader p-disabled',
|
|
weekNumber: 'p-datepicker-weeknumber',
|
|
weekLabelContainer: 'p-datepicker-weeklabel-container p-disabled',
|
|
weekDayCell: 'p-datepicker-weekday-cell',
|
|
weekDay: 'p-datepicker-weekday',
|
|
dayCell: ({ date }) => [
|
|
'p-datepicker-day-cell',
|
|
{
|
|
'p-datepicker-other-month': date.otherMonth,
|
|
'p-datepicker-today': date.today
|
|
}
|
|
],
|
|
day: ({ instance, props, date }) => {
|
|
let selectedDayClass = '';
|
|
|
|
if (instance.isRangeSelection() && instance.isSelected(date) && date.selectable) {
|
|
selectedDayClass = date.day === props.modelValue[0].getDate() || date.day === props.modelValue[1].getDate() ? 'p-datepicker-day-selected' : 'p-datepicker-day-selected-range';
|
|
}
|
|
|
|
return [
|
|
'p-datepicker-day',
|
|
{
|
|
'p-datepicker-day-selected': !instance.isRangeSelection() && instance.isSelected(date) && date.selectable,
|
|
'p-disabled': props.disabled || !date.selectable
|
|
},
|
|
selectedDayClass
|
|
];
|
|
},
|
|
monthView: 'p-datepicker-month-view',
|
|
month: ({ instance, props, month, index }) => [
|
|
'p-datepicker-month',
|
|
{
|
|
'p-datepicker-month-selected': instance.isMonthSelected(index),
|
|
'p-disabled': props.disabled || !month.selectable
|
|
}
|
|
],
|
|
yearView: 'p-datepicker-year-view',
|
|
year: ({ instance, props, year }) => [
|
|
'p-datepicker-year',
|
|
{
|
|
'p-datepicker-year-selected': instance.isYearSelected(year.value),
|
|
'p-disabled': props.disabled || !year.selectable
|
|
}
|
|
],
|
|
timePicker: 'p-datepicker-time-picker',
|
|
hourPicker: 'p-datepicker-hour-picker',
|
|
pcIncrementButton: 'p-datepicker-increment-button',
|
|
pcDecrementButton: 'p-datepicker-decrement-button',
|
|
separator: 'p-datepicker-separator',
|
|
minutePicker: 'p-datepicker-minute-picker',
|
|
secondPicker: 'p-datepicker-second-picker',
|
|
ampmPicker: 'p-datepicker-ampm-picker',
|
|
buttonbar: 'p-datepicker-buttonbar',
|
|
pcTodayButton: 'p-datepicker-today-button',
|
|
pcClearButton: 'p-datepicker-clear-button'
|
|
};
|
|
|
|
export default BaseStyle.extend({
|
|
name: 'datepicker',
|
|
theme,
|
|
classes,
|
|
inlineStyles
|
|
});
|