/** Отступ в символах от края видимой области, чтобы каретка не прилипала к границе */
var PADDING = 1;
var SHIFT = 3;
/**
 * Прокручивает input по горизонтали так, чтобы каретка (или голова выделения) оставалась в видимой области.
 * Использует приближение средней ширины символа (scrollWidth / length).
 *
 * @param input — элемент input
 * @param selection — опционально: выделение { start, end, direction }. Если не передано, читается из input.
 */
export function scrollInputCaretIntoView(input, selection) {
    var _a, _b, _c, _d, _e, _f;
    if (input.scrollWidth <= input.clientWidth) {
        return;
    }
    var maxScroll = input.scrollWidth - input.clientWidth;
    var start = (_b = (_a = selection === null || selection === void 0 ? void 0 : selection.start) !== null && _a !== void 0 ? _a : input.selectionStart) !== null && _b !== void 0 ? _b : 0;
    var end = (_d = (_c = selection === null || selection === void 0 ? void 0 : selection.end) !== null && _c !== void 0 ? _c : input.selectionEnd) !== null && _d !== void 0 ? _d : 0;
    var direction = ((_f = (_e = selection === null || selection === void 0 ? void 0 : selection.direction) !== null && _e !== void 0 ? _e : input.selectionDirection) !== null && _f !== void 0 ? _f : 'none');
    var selected = start !== end;
    var position = selected && direction === 'forward' ? end : start;
    var value = input.value;
    var charsCount = value.length;
    if (charsCount === 0) {
        return;
    }
    var charWidth = input.scrollWidth / charsCount;
    var frame = Math.ceil(input.clientWidth / charWidth);
    var frameStart = Math.ceil(input.scrollLeft / charWidth);
    var frameEnd = frameStart + frame;
    if (position < frameStart + PADDING) {
        input.scrollLeft = Math.max(0, (position - SHIFT) * charWidth);
    }
    if (position > frameEnd - PADDING) {
        input.scrollLeft = Math.min(maxScroll, (position - frame + SHIFT) * charWidth);
    }
}
//# sourceMappingURL=scrollInputCaretIntoView.js.map