function getCaretPosition(element: HTMLInputElement | HTMLTextAreaElement, x: number, y: number) {
const text = element.childNodes[0]
const range = element.ownerDocument.createRange();
const start = 0;
const end = element.value.length;
let caretPosition = start;
range.setStart(text, 0);
range.setEnd(text, end);
range.setStart(text, 0);
for (let i = start; i <= end; i++) {
range.setEnd(text, i);
console.log(range.getBoundingClientRect())
if (range.getBoundingClientRect().left >= x && range.getBoundingClientRect().top >= y) {
caretPosition = i;
break;
}
}
return caretPosition;
}
function setCaretPosition(element: any, position: number) {
element.focus();
if (element.setSelectionRange) {
element.setSelectionRange(position, position);
} else if (element.createTextRange) {
const range = element.createTextRange();
range.collapse(true);
range.moveEnd('character', position);
range.moveStart('character', position);
range.select();
}
}
export const focusToMouse = (element: HTMLInputElement | HTMLTextAreaElement, event: MouseEvent) => {
const caretPosition = getCaretPosition(element, event.clientX, event.clientY);
setCaretPosition(element, caretPosition);
}