export function debounce(callback, delay = 250) { let timeoutId return (...args) => { clearTimeout(timeoutId) timeoutId = setTimeout(() => { timeoutId = null callback(...args) }, delay) } } export function clampText(text, maxChars = 30) { if(!text || text.length <= 30) return text return text.substr(0, maxChars) + '...' } export function getCurrentWordBounds(input) { const text = input.value; const end = input.selectionStart; let start = end; let currentChar = text.charAt(start - 1); while (currentChar && currentChar !== ' ' && start > 0) { start--; currentChar = text.charAt(start - 1); } return {start, end}; } export function getCurrentWord(input) { const bounds = getCurrentWordBounds(input); return input.value.substring(bounds.start, bounds.end); }