@@ -30,21 +30,35 @@ export default function useCellClassName<DateType>({
3030 function getClassName ( currentDate : DateType ) {
3131 const prevDate = offsetCell ( currentDate , - 1 ) ;
3232 const nextDate = offsetCell ( currentDate , 1 ) ;
33+
34+ const rangeStart = getValue ( rangedValue , 0 ) ;
35+ const rangeEnd = getValue ( rangedValue , 1 ) ;
36+
37+ const hoverStart = getValue ( hoverRangedValue , 0 ) ;
38+ const hoverEnd = getValue ( hoverRangedValue , 1 ) ;
39+
3340 const isRangeHovered = isInRange (
3441 generateConfig ,
35- getValue ( hoverRangedValue , 0 ) ,
36- getValue ( hoverRangedValue , 1 ) ,
42+ hoverStart ,
43+ hoverEnd ,
3744 currentDate ,
3845 ) ;
3946
4047 function isRangeStart ( date : DateType ) {
41- return isSameCell ( getValue ( rangedValue , 0 ) , date ) ;
48+ return isSameCell ( rangeStart , date ) ;
4249 }
4350 function isRangeEnd ( date : DateType ) {
44- return isSameCell ( getValue ( rangedValue , 1 ) , date ) ;
51+ return isSameCell ( rangeEnd , date ) ;
4552 }
46- const isHoverStart = isSameCell ( getValue ( hoverRangedValue , 0 ) , currentDate ) ;
47- const isHoverEnd = isSameCell ( getValue ( hoverRangedValue , 1 ) , currentDate ) ;
53+ const isHoverStart = isSameCell ( hoverStart , currentDate ) ;
54+ const isHoverEnd = isSameCell ( hoverEnd , currentDate ) ;
55+
56+ const isHoverEdgeStart =
57+ ( isRangeHovered || isHoverEnd ) &&
58+ ( ! isInView ( prevDate ) || isRangeEnd ( prevDate ) ) ;
59+ const isHoverEdgeEnd =
60+ ( isRangeHovered || isHoverStart ) &&
61+ ( ! isInView ( nextDate ) || isRangeStart ( nextDate ) ) ;
4862
4963 return {
5064 // In view
@@ -53,25 +67,37 @@ export default function useCellClassName<DateType>({
5367 // Range
5468 [ `${ cellPrefixCls } -in-range` ] : isInRange < DateType > (
5569 generateConfig ,
56- getValue ( rangedValue , 0 ) ,
57- getValue ( rangedValue , 1 ) ,
70+ rangeStart ,
71+ rangeEnd ,
5872 currentDate ,
5973 ) ,
6074 [ `${ cellPrefixCls } -range-start` ] : isRangeStart ( currentDate ) ,
6175 [ `${ cellPrefixCls } -range-end` ] : isRangeEnd ( currentDate ) ,
76+ [ `${ cellPrefixCls } -range-start-single` ] :
77+ isRangeStart ( currentDate ) && ! rangeEnd ,
78+ [ `${ cellPrefixCls } -range-end-single` ] :
79+ isRangeEnd ( currentDate ) && ! rangeStart ,
80+ [ `${ cellPrefixCls } -range-start-near-hover` ] :
81+ isRangeStart ( currentDate ) &&
82+ ( isSameCell ( prevDate , hoverStart ) ||
83+ isInRange ( generateConfig , hoverStart , hoverEnd , prevDate ) ) ,
84+ [ `${ cellPrefixCls } -range-end-near-hover` ] :
85+ isRangeEnd ( currentDate ) &&
86+ ( isSameCell ( nextDate , hoverEnd ) ||
87+ isInRange ( generateConfig , hoverStart , hoverEnd , nextDate ) ) ,
6288
6389 // Range Hover
6490 [ `${ cellPrefixCls } -range-hover` ] : isRangeHovered ,
6591 [ `${ cellPrefixCls } -range-hover-start` ] : isHoverStart ,
6692 [ `${ cellPrefixCls } -range-hover-end` ] : isHoverEnd ,
6793
6894 // Range Edge
69- [ `${ cellPrefixCls } -range-hover-edge-start` ] :
70- ( isRangeHovered || isHoverEnd ) &&
71- ( ! isInView ( prevDate ) || isRangeEnd ( prevDate ) ) ,
72- [ ` ${ cellPrefixCls } -range-hover-edge-end` ] :
73- ( isRangeHovered || isHoverStart ) &&
74- ( ! isInView ( nextDate ) || isRangeStart ( nextDate ) ) ,
95+ [ `${ cellPrefixCls } -range-hover-edge-start` ] : isHoverEdgeStart ,
96+ [ ` ${ cellPrefixCls } -range-hover-edge-end` ] : isHoverEdgeEnd ,
97+ [ ` ${ cellPrefixCls } -range-hover-edge-start-near-range` ] :
98+ isHoverEdgeStart && isSameCell ( prevDate , rangeEnd ) ,
99+ [ ` ${ cellPrefixCls } -range-hover-edge-end-near-range` ] :
100+ isHoverEdgeEnd && isSameCell ( nextDate , rangeStart ) ,
75101
76102 // Others
77103 [ `${ cellPrefixCls } -today` ] : isSameCell ( today , currentDate ) ,
0 commit comments