2022-03-25 13:20:42 +08:00
/* eslint-disable import/prefer-default-export */
2022-05-09 22:20:07 +08:00
import type { CSSObject } from '@ant-design/cssinjs' ;
2022-03-25 13:20:42 +08:00
2022-08-19 10:10:51 +08:00
export const roundedArrow = (
width : number ,
innerRadius : number ,
outerRadius : number ,
bgColor : string ,
2022-08-25 19:39:26 +08:00
boxShadow : string ,
2022-08-19 10:10:51 +08:00
) : CSSObject = > {
2022-08-25 19:39:26 +08:00
const unitWidth = width / 2 ;
2022-03-25 13:20:42 +08:00
2022-08-25 19:39:26 +08:00
const ax = unitWidth - outerRadius * ( Math . sqrt ( 2 ) - 1 ) ;
const ay = unitWidth ;
const bx = unitWidth + outerRadius * ( 1 - 1 / Math . sqrt ( 2 ) ) ;
const by = unitWidth - outerRadius * ( 1 - 1 / Math . sqrt ( 2 ) ) ;
const cx = 2 * unitWidth - innerRadius * ( 1 / Math . sqrt ( 2 ) ) ;
const cy = innerRadius * ( 1 / Math . sqrt ( 2 ) ) ;
const dx = 4 * unitWidth - cx ;
const dy = cy ;
const ex = 4 * unitWidth - bx ;
const ey = by ;
const fx = 4 * unitWidth - ax ;
const fy = ay ;
2022-03-25 13:20:42 +08:00
return {
2022-08-25 19:39:26 +08:00
borderRadius : { _skip_check_ : true , value : ` 0 0 ${ innerRadius } px ` } ,
2022-03-25 13:20:42 +08:00
pointerEvents : 'none' ,
2022-08-25 19:39:26 +08:00
width : width * 2 ,
height : width * 2 ,
overflow : 'hidden' ,
'&::after' : {
content : '""' ,
position : 'absolute' ,
width : width / Math . sqrt ( 2 ) ,
height : width / Math . sqrt ( 2 ) ,
bottom : 0 ,
insetInline : 0 ,
margin : 'auto' ,
borderRadius : {
_skip_check_ : true ,
value : ` 0 0 ${ innerRadius } px 0 ` ,
} ,
transform : 'translateY(50%) rotate(-135deg)' ,
boxShadow ,
zIndex : 0 ,
background : 'transparent' ,
} ,
2022-03-25 13:20:42 +08:00
'&::before' : {
position : 'absolute' ,
2022-08-25 19:39:26 +08:00
bottom : 0 ,
insetInlineStart : 0 ,
width : width * 2 ,
height : width / 2 ,
2022-05-07 15:19:54 +08:00
background : bgColor ,
2022-08-25 19:39:26 +08:00
clipPath : ` path('M ${ ax } ${ ay } A ${ outerRadius } ${ outerRadius } 0 0 0 ${ bx } ${ by } L ${ cx } ${ cy } A ${ innerRadius } ${ innerRadius } 0 0 1 ${ dx } ${ dy } L ${ ex } ${ ey } A ${ outerRadius } ${ outerRadius } 0 0 0 ${ fx } ${ fy } Z') ` ,
2022-03-25 13:20:42 +08:00
content : '""' ,
} ,
} ;
2022-03-25 17:54:57 +08:00
} ;