const lineHeight = 24; const userListWidth = 200; const smallScreen = 600; export function findBreakpoints(text) { const breakpoints = []; for (let i = 0; i < text.length; i++) { const char = text.charAt(i); if (char === ' ') { breakpoints.push({ end: i, next: i + 1 }); } else if (char === '-' && i !== text.length - 1) { breakpoints.push({ end: i + 1, next: i + 1 }); } } return breakpoints; } export function messageHeight( message, wrapWidth, charWidth, indent = 0, windowWidth ) { let pad = (6 + (message.from ? message.from.length + 1 : 0)) * charWidth; let height = lineHeight + 8; if (message.channel && windowWidth > smallScreen) { wrapWidth -= userListWidth; } if (pad + message.length * charWidth < wrapWidth) { return height; } const breaks = message.breakpoints; let prevBreak = 0; let prevPos = 0; for (let i = 0; i < breaks.length; i++) { if (pad + (breaks[i].end - prevBreak) * charWidth >= wrapWidth) { prevBreak = prevPos; pad = indent; height += lineHeight; } prevPos = breaks[i].next; } if (pad + (message.length - prevBreak) * charWidth >= wrapWidth) { height += lineHeight; } return height; }