| 123456789101112131415161718192021222324252627282930313233343536373839404142 | import useHandleEvents from 'hooks/useBoundsHandleEvents'
import styled from 'styles'
import { Edge, Bounds } from 'types'
export default function EdgeHandle({
  size,
  bounds,
  edge,
}: {
  size: number
  bounds: Bounds
  edge: Edge
}) {
  const events = useHandleEvents(edge)
  const isHorizontal = edge === Edge.Top || edge === Edge.Bottom
  const isFarEdge = edge === Edge.Right || edge === Edge.Bottom
  return (
    <StyledEdge
      edge={edge}
      x={isHorizontal ? size / 2 : (isFarEdge ? bounds.width : 0) - size / 2}
      y={isHorizontal ? (isFarEdge ? bounds.height : 0) - size / 2 : size / 2}
      width={isHorizontal ? Math.max(0, bounds.width - size) : size}
      height={isHorizontal ? size : Math.max(0, bounds.height - size)}
      {...events}
    />
  )
}
const StyledEdge = styled('rect', {
  stroke: 'none',
  fill: 'none',
  variants: {
    edge: {
      [Edge.Top]: { cursor: 'ns-resize' },
      [Edge.Right]: { cursor: 'ew-resize' },
      [Edge.Bottom]: { cursor: 'ns-resize' },
      [Edge.Left]: { cursor: 'ew-resize' },
    },
  },
})
 |