/* eslint-disable import/prefer-default-export */
import type { CSSObject } from '@ant-design/cssinjs' ;
export const roundedArrow = (
width : number ,
innerRadius : number ,
outerRadius : number ,
bgColor : string ,
boxShadow : string ,
) : CSSObject = > {
const unitWidth = width / 2 ;
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 ;
return {
borderRadius : { _skip_check_ : true , value : ` 0 0 ${ innerRadius } px ` } ,
pointerEvents : 'none' ,
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' ,
} ,
'&::before' : {
position : 'absolute' ,
bottom : 0 ,
insetInlineStart : 0 ,
width : width * 2 ,
height : width / 2 ,
background : bgColor ,
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') ` ,
content : '""' ,
} ,
} ;
} ;