Slate на самом деле не знает о линиях и тому подобном, поэтому решение состоит в том, чтобы получить собственный диапазон и проверить координаты его ограничительной рамки.
Я создал функцию, которая возвращает индекс последней возможной позициив строке или последней позиции в текущем текстовом блоке, что произойдет, если каретка находится в последней строке.
getIndexLastCharOfLine () {
const selection = window.getSelection()
const range = selection.getRangeAt(0);
const caretIndex = range.startOffset;
const rect = range.getBoundingClientRect();
const container = range.startContainer;
const lastIndex = container.length;
for (let i = caretIndex; i < lastIndex; i++) {
const rangeTest = document.createRange();
rangeTest.setStart(container, i);
const rectTest = rangeTest.getBoundingClientRect();
// if the y is different it means the test range is in a different line
if (rectTest.y !== rect.y) return i - 1;
}
return lastIndex;
}