10LOC

#internationalization

Web Platformadvanced

Intl.Segmenter for emoji-safe text truncation

const segmenter = new Intl.Segmenter(undefined, { granularity: "grapheme" });

export const truncateGraphemes = (text: string, maxLength: number) => {
  const graphemes = Array.from(segmenter.segment(text), (s) => s.segment);
  if (graphemes.length <= maxLength) return text;

Truncate user text to N visible characters without splitting a multi-codepoint emoji or accented letter in half.