function getCenterLabelCenterY(
entryY: number,
targetY: number,
stopY: number,
boxHeight: number,
labelOffset: number,
viewportHeight: number,
): number {
const targetSpace = Math.abs(targetY - entryY);
const stopSpace = Math.abs(stopY - entryY);
const requiredSpace = boxHeight + labelOffset * 2;
let referenceY = stopY;
if (stopSpace < requiredSpace && targetSpace >= requiredSpace) {
referenceY = targetY;
} else if (stopSpace < requiredSpace && targetSpace < requiredSpace) {
referenceY = targetSpace > stopSpace ? targetY : stopY;
}
const direction = referenceY < entryY ? -1 : 1;
return clampTextBoxCenter(
entryY + direction * (labelOffset + boxHeight / 2),
boxHeight,
viewportHeight,
);
}