add calendar

pull/9/head
tjz 2018-03-13 22:40:13 +08:00
parent cee7acf327
commit 2cdffdc6b4
47 changed files with 975 additions and 0 deletions

View File

@ -0,0 +1,4 @@
// https://github.com/moment/moment/issues/3650
export default function callMoment (moment, ...args) {
return (moment.default || moment)(...args)
}

View File

@ -0,0 +1 @@
export const PREFIX_CLS = 'ant-fullcalendar'

View File

@ -0,0 +1,130 @@
<script>
import { PREFIX_CLS } from './Constants'
import Select from '../select'
import { Group, Button } from '../radio'
import PropTypes from '@/components/_util/vue-types'
import { initDefaultProps } from '@/components/_util/props-util'
const Option = Select.Option
export const HeaderProps = {
prefixCls: PropTypes.string,
locale: PropTypes.any,
fullscreen: PropTypes.boolean,
yearSelectOffset: PropTypes.number,
yearSelectTotal: PropTypes.number,
type: PropTypes.string,
// onValueChange: PropTypes.(value: moment.Moment) => void,
// onTypeChange: PropTypes.(type: string) => void,
value: PropTypes.any,
}
export default {
props: initDefaultProps(HeaderProps, {
prefixCls: `${PREFIX_CLS}-header`,
yearSelectOffset: 10,
yearSelectTotal: 20,
}),
// private calenderHeaderNode: HTMLDivElement;
methods: {
getYearSelectElement (year) {
const { yearSelectOffset, yearSelectTotal, locale, prefixCls, fullscreen } = this
const start = year - yearSelectOffset
const end = start + yearSelectTotal
const suffix = locale.year === '年' ? '年' : ''
const options = []
for (let index = start; index < end; index++) {
options.push(<Option key={`${index}`}>{index + suffix}</Option>)
}
return (
<Select
size={fullscreen ? 'default' : 'small'}
dropdownMatchSelectWidth={false}
class={`${prefixCls}-year-select`}
onChange={this.onYearChange}
value={String(year)}
getPopupContainer={() => this.calenderHeaderNode}
>
{options}
</Select>
)
},
getMonthsLocale (value) {
const current = value.clone()
const localeData = value.localeData()
const months = []
for (let i = 0; i < 12; i++) {
current.month(i)
months.push(localeData.monthsShort(current))
}
return months
},
getMonthSelectElement (month, months) {
const { prefixCls, fullscreen } = this
const options = []
for (let index = 0; index < 12; index++) {
options.push(<Option key={`${index}`}>{months[index]}</Option>)
}
return (
<Select
size={fullscreen ? 'default' : 'small'}
dropdownMatchSelectWidth={false}
class={`${prefixCls}-month-select`}
value={String(month)}
onChange={this.onMonthChange}
getPopupContainer={() => this.getCalenderHeaderNode}
>
{options}
</Select>
)
},
onYearChange (year) {
const newValue = this.value.clone()
newValue.year(parseInt(year, 10))
this.$emit('valueChange', newValue)
},
onMonthChange (month) {
const newValue = this.value.clone()
newValue.month(parseInt(month, 10))
this.$emit('valueChange', newValue)
},
onTypeChange (e) {
this.$emit('typeChange', e.target.value)
},
getCalenderHeaderNode () {
return this.$refs.calenderHeaderNode
},
},
render () {
const { type, value, prefixCls, locale, fullscreen } = this
const yearSelect = this.getYearSelectElement(value.year())
const monthSelect = type === 'date'
? this.getMonthSelectElement(value.month(), this.getMonthsLocale(value)) : null
const size = fullscreen ? 'default' : 'small'
const typeSwitch = (
<Group onChange={this.onTypeChange} value={type} size={size}>
<Button value='date'>{locale.month}</Button>
<Button value='month'>{locale.year}</Button>
</Group>
)
return (
<div class={`${prefixCls}-header`} ref='calenderHeaderNode'>
{yearSelect}
{monthSelect}
{typeSwitch}
</div>
)
},
}
</script>

View File

@ -0,0 +1,26 @@
---
order: 0
title:
zh-CN: 基本
en-US: Basic
---
## zh-CN
一个通用的日历面板,支持年/月切换。
## en-US
A basic calendar component with Year/Month switch.
````jsx
import { Calendar } from 'antd';
function onPanelChange(value, mode) {
console.log(value, mode);
}
ReactDOM.render(
<Calendar onPanelChange={onPanelChange} />
, mountNode);
````

View File

@ -0,0 +1,28 @@
---
order: 2
title:
zh-CN: 卡片模式
en-US: Card
---
## zh-CN
用于嵌套在空间有限的容器中。
## en-US
Nested inside a container element for rendering in limited space.
````jsx
import { Calendar } from 'antd';
function onPanelChange(value, mode) {
console.log(value, mode);
}
ReactDOM.render(
<div style={{ width: 300, border: '1px solid #d9d9d9', borderRadius: 4 }}>
<Calendar fullscreen={false} onPanelChange={onPanelChange} />
</div>
, mountNode);
````

View File

@ -0,0 +1,103 @@
---
order: 1
title:
zh-CN: 通知事项日历
en-US: Notice Calendar
---
## zh-CN
一个复杂的应用示例,用 `dateCellRender``monthCellRender` 函数来自定义需要渲染的数据。
## en-US
This component can be rendered by using `dateCellRender` and `monthCellRender` with the data you need.
````jsx
import { Calendar, Badge } from 'antd';
function getListData(value) {
let listData;
switch (value.date()) {
case 8:
listData = [
{ type: 'warning', content: 'This is warning event.' },
{ type: 'success', content: 'This is usual event.' },
]; break;
case 10:
listData = [
{ type: 'warning', content: 'This is warning event.' },
{ type: 'success', content: 'This is usual event.' },
{ type: 'error', content: 'This is error event.' },
]; break;
case 15:
listData = [
{ type: 'warning', content: 'This is warning event' },
{ type: 'success', content: 'This is very long usual event。。....' },
{ type: 'error', content: 'This is error event 1.' },
{ type: 'error', content: 'This is error event 2.' },
{ type: 'error', content: 'This is error event 3.' },
{ type: 'error', content: 'This is error event 4.' },
]; break;
default:
}
return listData || [];
}
function dateCellRender(value) {
const listData = getListData(value);
return (
<ul className="events">
{
listData.map(item => (
<li key={item.content}>
<Badge status={item.type} text={item.content} />
</li>
))
}
</ul>
);
}
function getMonthData(value) {
if (value.month() === 8) {
return 1394;
}
}
function monthCellRender(value) {
const num = getMonthData(value);
return num ? (
<div className="notes-month">
<section>{num}</section>
<span>Backlog number</span>
</div>
) : null;
}
ReactDOM.render(
<Calendar dateCellRender={dateCellRender} monthCellRender={monthCellRender} />
, mountNode);
````
````css
.events {
list-style: none;
margin: 0;
padding: 0;
}
.events .ant-badge-status {
overflow: hidden;
white-space: nowrap;
width: 100%;
text-overflow: ellipsis;
font-size: 12px;
}
.notes-month {
text-align: center;
font-size: 28px;
}
.notes-month section {
font-size: 28px;
}
````

View File

@ -0,0 +1,46 @@
---
order: 3
title:
zh-CN: 选择功能
en-US: Selectable Calendar
---
## zh-CN
一个通用的日历面板,支持年/月切换。
## en-US
A basic calendar component with Year/Month switch.
````jsx
import { Calendar, Alert } from 'antd';
import moment from 'moment';
class App extends React.Component {
state = {
value: moment('2017-01-25'),
selectedValue: moment('2017-01-25'),
}
onSelect = (value) => {
this.setState({
value,
selectedValue: value,
});
}
onPanelChange = (value) => {
this.setState({ value });
}
render() {
const { value, selectedValue } = this.state;
return (
<div>
<Alert message={`You selected date: ${selectedValue && selectedValue.format('YYYY-MM-DD')}`} />
<Calendar value={value} onSelect={this.onSelect} onPanelChange={this.onPanelChange} />
</div>
);
}
}
ReactDOM.render(<App />, mountNode);
````

View File

@ -0,0 +1,45 @@
---
category: Components
type: Data Display
cols: 1
title: Calendar
---
Container for displaying data in calendar form.
## When To Use
When data is in the form of dates, such as schedules, timetables, prices calendar, lunar calendar. This component also supports Year/Month switch.
## API
**Note:** Part of the Calendar's locale is read from `value`. So, please set the locale of `moment` correctly.
```jsx
// The default locale is en-US, if you want to use other locale, just set locale in entry file globaly.
// import moment from 'moment';
// import 'moment/locale/zh-cn';
// moment.locale('zh-cn');
<Calendar
dateCellRender={dateCellRender}
monthCellRender={monthCellRender}
onPanelChange={onPanelChange}
onSelect={onSelect}
/>
```
| Property | Description | Type | Default |
| -------- | ----------- | ---- | ------- |
| dateCellRender | Customize the display of the date cell, the returned content will be appended to the cell | function(date: moment): ReactNode | - |
| dateFullCellRender | Customize the display of the date cell, the returned content will override the cell | function(date: moment): ReactNode | - |
| defaultValue | The date selected by default | [moment](http://momentjs.com/) | default date |
| disabledDate | Function that specifies the dates that cannot be selected | (currentDate: moment) => boolean | - |
| fullscreen | Whether to display in full-screen | boolean | `true` |
| locale | The calendar's locale | object | [default](https://github.com/ant-design/ant-design/blob/master/components/date-picker/locale/example.json) |
| mode | The display mode of the calendar | `month` \| `year` | `month` |
| monthCellRender | Customize the display of the month cell, the returned content will be appended to the cell | function(date: moment): ReactNode | - |
| monthFullCellRender | Customize the display of the month cell, the returned content will override the cell | function(date: moment): ReactNode | - |
| value | The current selected date | [moment](http://momentjs.com/) | current date |
| onPanelChange | Callback for when panel changes | function(date: moment, mode: string) | - |
| onSelect | Callback for when a date is selected | function(date: moment | - |

View File

@ -0,0 +1,204 @@
<script>
import PropTypes from '@/components/_util/vue-types'
import BaseMixin from '@/components/_util/BaseMixin'
import { getOptionProps, hasProp, initDefaultProps } from '@/components/_util/props-util'
import * as moment from 'moment'
import FullCalendar from '../vc-calendar/src/FullCalendar'
import LocaleReceiver from '../locale-provider/LocaleReceiver'
import { PREFIX_CLS } from './Constants'
import Header from './Header'
import callMoment from '../_util/callMoment'
import enUS from './locale/en_US'
export { HeaderProps } from './Header'
function noop () { return null }
function zerofixed (v) {
if (v < 10) {
return `0${v}`
}
return `${v}`
}
export const MomentType = {
type: Object,
validator: function (value) {
return moment.isMoment(value)
},
}
export const CalendarMode = PropTypes.oneOf(['month', 'year'])
export const CalendarProps = () => ({
prefixCls: PropTypes.string,
value: MomentType,
defaultValue: MomentType,
mode: CalendarMode,
fullscreen: PropTypes.bool,
dateCellRender: PropTypes.func,
monthCellRender: PropTypes.func,
dateFullCellRender: PropTypes.func,
monthFullCellRender: PropTypes.func,
locale: PropTypes.any,
// onPanelChange?: (date?: moment.Moment, mode?: CalendarMode) => void;
// onSelect?: (date?: moment.Moment) => void;
disabledDate: PropTypes.func,
})
export default {
mixins: [BaseMixin],
props: initDefaultProps(CalendarProps(), {
locale: {},
fullscreen: true,
prefixCls: PREFIX_CLS,
mode: 'month',
}),
data () {
const value = this.value || this.defaultValue || callMoment(moment)
if (!moment.isMoment(value)) {
throw new Error(
'The value/defaultValue of Calendar must be a moment object, ',
)
}
return {
sValue: value,
sMode: this.mode,
}
},
watch: {
value (val) {
this.setState({
sValue: val,
})
},
mode (val) {
this.setState({
sMode: val,
})
},
},
methods: {
monthCellRender (value) {
const { prefixCls, monthCellRender = noop } = this
return (
<div class={`${prefixCls}-month`}>
<div class={`${prefixCls}-value`}>
{value.localeData().monthsShort(value)}
</div>
<div class={`${prefixCls}-content`}>
{monthCellRender(value)}
</div>
</div>
)
},
dateCellRender (value) {
const { prefixCls, dateCellRender = noop } = this
return (
<div class={`${prefixCls}-date`}>
<div class={`${prefixCls}-value`}>
{zerofixed(value.date())}
</div>
<div class={`${prefixCls}-content`}>
{dateCellRender(value)}
</div>
</div>
)
},
setValue (value, way) {
if (!hasProp(this, 'value')) {
this.setState({ sValue: value })
}
if (way === 'select') {
this.$emit('select', value)
} else if (way === 'changePanel') {
this.$emit('panelChange', value, this.sMode)
}
},
setType (type) {
const mode = (type === 'date') ? 'month' : 'year'
if (this.sMode !== mode) {
this.setState({ sMode: mode })
this.$emit('panelChange', this.sValue, this.sMode)
}
},
onHeaderValueChange (value) {
this.setValue(value, 'changePanel')
},
onHeaderTypeChange (type) {
this.setType(type)
},
onPanelChange (value, mode) {
this.$emit('panelChange', value, mode)
},
onSelect (value) {
this.setValue(value, 'select')
},
renderCalendar (locale, localeCode) {
const props = getOptionProps(this)
const { sValue: value, sMode: mode, $listeners } = this
if (value && localeCode) {
value.locale(localeCode)
}
const { prefixCls, fullscreen, dateFullCellRender, monthFullCellRender } = props
const type = (mode === 'year') ? 'month' : 'date'
let cls = ''
if (fullscreen) {
cls += (` ${prefixCls}-fullscreen`)
}
const monthCellRender = monthFullCellRender || this.monthCellRender
const dateCellRender = dateFullCellRender || this.dateCellRender
const fullCalendarProps = {
props: {
...props,
Select: noop,
locale: locale.lang,
type: type,
prefixCls: prefixCls,
showHeader: false,
value: value,
monthCellRender: monthCellRender,
dateCellRender: dateCellRender,
},
on: {
...$listeners,
select: this.onSelect,
},
}
return (
<div class={cls}>
<Header
fullscreen={fullscreen}
type={type}
value={value}
locale={locale.lang}
prefixCls={prefixCls}
onTypeChange={this.onHeaderTypeChange}
onValueChange={this.onHeaderValueChange}
/>
<FullCalendar {...fullCalendarProps}/>
</div>
)
},
},
render () {
return (
<LocaleReceiver
componentName='Calendar'
defaultLocale={enUS}
children={this.renderCalendar}
/>
)
},
}
</script>

View File

@ -0,0 +1,46 @@
---
category: Components
type: Data Display
subtitle: 日历
cols: 1
title: Calendar
---
按照日历形式展示数据的容器。
## 何时使用
当数据是日期或按照日期划分时,例如日程、课表、价格日历等,农历等。目前支持年/月切换。
## API
**注意:**Calendar 部分 locale 是从 value 中读取,所以请先正确设置 moment 的 locale。
```jsx
// 默认语言为 en-US所以如果需要使用其他语言推荐在入口文件全局设置 locale
// import moment from 'moment';
// import 'moment/locale/zh-cn';
// moment.locale('zh-cn');
<Calendar
dateCellRender={dateCellRender}
monthCellRender={monthCellRender}
onPanelChange={onPanelChange}
onSelect={onSelect}
/>
```
| 参数 | 说明 | 类型 | 默认值 |
| --- | --- | --- | --- |
| dateCellRender | 自定义渲染日期单元格,返回内容会被追加到单元格 | function(date: moment): ReactNode | 无 |
| dateFullCellRender | 自定义渲染日期单元格,返回内容覆盖单元格 | function(date: moment): ReactNode | 无 |
| defaultValue | 默认展示的日期 | [moment](http://momentjs.com/) | 默认日期 |
| disabledDate | 不可选择的日期 | (currentDate: moment) => boolean | 无 |
| fullscreen | 是否全屏显示 | boolean | true |
| locale | 国际化配置 | object | [默认配置](https://github.com/ant-design/ant-design/blob/master/components/date-picker/locale/example.json) |
| mode | 初始模式,`month/year` | string | month |
| monthCellRender | 自定义渲染月单元格,返回内容会被追加到单元格 | function(date: moment): ReactNode | 无 |
| monthFullCellRender | 自定义渲染月单元格,返回内容覆盖单元格 | function(date: moment): ReactNode | 无 |
| value | 展示日期 | [moment](http://momentjs.com/) | 当前日期 |
| onPanelChange | 日期面板变化回调 | function(date: moment, mode: string) | 无 |
| onSelect | 点击选择日期回调 | function(date: moment | 无 |

View File

@ -0,0 +1,2 @@
import ar_EG from '../../date-picker/locale/ar_EG';
export default ar_EG;

View File

@ -0,0 +1,2 @@
import bg_BG from '../../date-picker/locale/bg_BG';
export default bg_BG;

View File

@ -0,0 +1,2 @@
import ca_ES from '../../date-picker/locale/ca_ES';
export default ca_ES;

View File

@ -0,0 +1,2 @@
import cs_CZ from '../../date-picker/locale/cs_CZ';
export default cs_CZ;

View File

@ -0,0 +1,2 @@
import de_DE from '../../date-picker/locale/de_DE';
export default de_DE;

View File

@ -0,0 +1,2 @@
import el_GR from '../../date-picker/locale/el_GR';
export default el_GR;

View File

@ -0,0 +1,2 @@
import en_GB from '../../date-picker/locale/en_GB';
export default en_GB;

View File

@ -0,0 +1,2 @@
import en_US from '../../date-picker/locale/en_US';
export default en_US;

View File

@ -0,0 +1,2 @@
import es_ES from '../../date-picker/locale/es_ES';
export default es_ES;

View File

@ -0,0 +1,2 @@
import et_EE from '../../date-picker/locale/et_EE';
export default et_EE;

View File

@ -0,0 +1,2 @@
import fa_IR from '../../date-picker/locale/fa_IR';
export default fa_IR;

View File

@ -0,0 +1,2 @@
import fi_FI from '../../date-picker/locale/fi_FI';
export default fi_FI;

View File

@ -0,0 +1,2 @@
import fr_BE from '../../date-picker/locale/fr_BE';
export default fr_BE;

View File

@ -0,0 +1,2 @@
import fr_FR from '../../date-picker/locale/fr_FR';
export default fr_FR;

View File

@ -0,0 +1,2 @@
import is_IS from '../../date-picker/locale/is_IS';
export default is_IS;

View File

@ -0,0 +1,2 @@
import it_IT from '../../date-picker/locale/it_IT';
export default it_IT;

View File

@ -0,0 +1,2 @@
import ja_JP from '../../date-picker/locale/ja_JP';
export default ja_JP;

View File

@ -0,0 +1,2 @@
import ko_KR from '../../date-picker/locale/ko_KR';
export default ko_KR;

View File

@ -0,0 +1,2 @@
import ku_IQ from '../../date-picker/locale/ku_IQ';
export default ku_IQ;

View File

@ -0,0 +1,2 @@
import nb_NO from '../../date-picker/locale/nb_NO';
export default nb_NO;

View File

@ -0,0 +1,2 @@
import nl_BE from '../../date-picker/locale/nl_BE';
export default nl_BE;

View File

@ -0,0 +1,2 @@
import nl_NL from '../../date-picker/locale/nl_NL';
export default nl_NL;

View File

@ -0,0 +1,2 @@
import pl_PL from '../../date-picker/locale/pl_PL';
export default pl_PL;

View File

@ -0,0 +1,2 @@
import pt_BR from '../../date-picker/locale/pt_BR';
export default pt_BR;

View File

@ -0,0 +1,2 @@
import pt_PT from '../../date-picker/locale/pt_PT';
export default pt_PT;

View File

@ -0,0 +1,2 @@
import ru_RU from '../../date-picker/locale/ru_RU';
export default ru_RU;

View File

@ -0,0 +1,2 @@
import sk_SK from '../../date-picker/locale/sk_SK';
export default sk_SK;

View File

@ -0,0 +1,2 @@
import sr_RS from '../../date-picker/locale/sr_RS';
export default sr_RS;

View File

@ -0,0 +1,2 @@
import sv_SE from '../../date-picker/locale/sv_SE';
export default sv_SE;

View File

@ -0,0 +1,2 @@
import th_TH from '../../date-picker/locale/th_TH';
export default th_TH;

View File

@ -0,0 +1,2 @@
import tr_TR from '../../date-picker/locale/tr_TR';
export default tr_TR;

View File

@ -0,0 +1,2 @@
import uk_UA from '../../date-picker/locale/uk_UA';
export default uk_UA;

View File

@ -0,0 +1,2 @@
import vi_VN from '../../date-picker/locale/vi_VN';
export default vi_VN;

View File

@ -0,0 +1,2 @@
import zh_CN from '../../date-picker/locale/zh_CN';
export default zh_CN;

View File

@ -0,0 +1,2 @@
import zh_TW from '../../date-picker/locale/zh_TW';
export default zh_TW;

View File

@ -0,0 +1,6 @@
import '../../style/index.less'
import './index.less'
// style dependencies
import '../../select/style'
import '../../radio/style'

View File

@ -0,0 +1,266 @@
@import "../../style/themes/default";
@import "../../style/mixins/index";
@full-calendar-prefix-cls: ~"@{ant-prefix}-fullcalendar";
.@{full-calendar-prefix-cls} {
.reset-component;
outline: none;
border-top: @border-width-base @border-style-base @border-color-base;
&-month-select {
margin-left: 5px;
}
&-header {
padding: 11px 16px 11px 0;
text-align: right;
.@{ant-prefix}-select-dropdown {
text-align: left;
}
.@{ant-prefix}-radio-group {
margin-left: 8px;
text-align: left;
}
label.@{ant-prefix}-radio-button {
height: 22px;
line-height: 20px;
padding: 0 10px;
}
}
&-date-panel {
position: relative;
outline: none;
}
&-calendar-body {
padding: 8px 12px;
}
table {
border-collapse: collapse;
max-width: 100%;
background-color: transparent;
width: 100%;
height: 256px;
}
table,
th,
td {
border: 0;
}
td {
position: relative;
}
&-calendar-table {
border-spacing: 0;
margin-bottom: 0;
}
&-column-header {
line-height: 18px;
padding: 0;
width: 33px;
text-align: center;
.@{full-calendar-prefix-cls}-column-header-inner {
display: block;
font-weight: normal;
}
}
&-week-number-header {
.@{full-calendar-prefix-cls}-column-header-inner {
display: none;
}
}
&-month,
&-date {
text-align: center;
transition: all .3s;
}
&-value {
display: block;
margin: 0 auto;
color: @text-color;
border-radius: @border-radius-sm;
width: 24px;
height: 24px;
padding: 0;
background: transparent;
line-height: 24px;
transition: all .3s;
&:hover {
background: @item-hover-bg;
cursor: pointer;
}
&:active {
background: @primary-color;
color: #fff;
}
}
&-month-panel-cell &-value {
width: 48px;
}
&-today &-value,
&-month-panel-current-cell &-value {
box-shadow: 0 0 0 1px @primary-color inset;
}
&-selected-day &-value,
&-month-panel-selected-cell &-value {
background: @primary-color;
color: #fff;
}
&-disabled-cell-first-of-row &-value {
border-top-left-radius: @border-radius-base;
border-bottom-left-radius: @border-radius-base;
}
&-disabled-cell-last-of-row &-value {
border-top-right-radius: @border-radius-base;
border-bottom-right-radius: @border-radius-base;
}
&-last-month-cell &-value,
&-next-month-btn-day &-value {
color: @disabled-color;
}
&-month-panel-table {
table-layout: fixed;
width: 100%;
border-collapse: separate;
}
&-content {
position: absolute;
width: 100%;
left: 0;
bottom: -9px;
}
&-fullscreen {
border-top: 0;
}
&-fullscreen &-table {
table-layout: fixed;
}
&-fullscreen &-header {
.@{ant-prefix}-radio-group {
margin-left: 16px;
}
label.@{ant-prefix}-radio-button {
height: @input-height-base;
line-height: @input-height-base - 2px;
}
}
&-fullscreen &-month,
&-fullscreen &-date {
text-align: left;
margin: 0 4px;
display: block;
color: @text-color;
height: 116px;
padding: 4px 8px;
border-top: 2px solid @border-color-split;
transition: background .3s;
&:hover {
background: @item-hover-bg;
cursor: pointer;
}
&:active {
background: @primary-2;
}
}
&-fullscreen &-column-header {
text-align: right;
padding-right: 12px;
padding-bottom: 5px;
}
&-fullscreen &-value {
text-align: right;
background: transparent;
width: auto;
}
&-fullscreen &-today &-value {
color: @text-color;
}
&-fullscreen &-month-panel-current-cell &-month,
&-fullscreen &-today &-date {
border-top-color: @primary-color;
background: transparent;
}
&-fullscreen &-month-panel-current-cell &-value,
&-fullscreen &-today &-value {
box-shadow: none;
}
&-fullscreen &-month-panel-selected-cell &-month,
&-fullscreen &-selected-day &-date {
background: @primary-1;
}
&-fullscreen &-month-panel-selected-cell &-value,
&-fullscreen &-selected-day &-value {
color: @primary-color;
}
&-fullscreen &-last-month-cell &-date,
&-fullscreen &-next-month-btn-day &-date {
color: @disabled-color;
}
&-fullscreen &-content {
height: 90px;
overflow-y: auto;
position: static;
width: auto;
left: auto;
bottom: auto;
}
&-disabled-cell &-date {
&,
&:hover {
cursor: not-allowed;
}
}
&-disabled-cell:not(&-today) &-date {
&,
&:hover {
background: transparent;
}
}
&-disabled-cell &-value {
color: @disabled-color;
border-radius: 0;
width: auto;
cursor: not-allowed;
}
}