Загрузка данных


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,
  );
}