in src/lib/shared/helpers/labelsUtil.js [12:59]
export function preventOverlap(
labelPositions,
iteration = 0,
labelSize = 12,
coordinate = "y",
moveBothLabels = true,
) {
const maxIterations = 10
let totalOverlap = 0
if (!isArrayWithCoordinates(labelPositions, coordinate)) return labelPositions
for (let index = 1; index < labelPositions.length; index++) {
const previousElement = labelPositions[index - 1]
const element = labelPositions[index]
const overlap =
previousElement[coordinate] - (element[coordinate] - labelSize)
if (overlap < 0) {
// no overlap, continue
continue
}
if (moveBothLabels) {
// @ts-ignore
previousElement[coordinate] -= overlap / 2
// @ts-ignore
element[coordinate] += overlap / 2
} else {
// @ts-ignore
previousElement[coordinate] -= overlap
}
totalOverlap += overlap
}
if (totalOverlap > 0 && iteration < maxIterations) {
return preventOverlap(
labelPositions,
iteration + 1,
labelSize,
coordinate,
moveBothLabels,
)
}
return labelPositions
}