import * as React from "react"; type Options = { fontSize?: string; lineHeight?: string; }; /** * Measures the width of an emoji character */ export default function useEmojiWidth( emoji: string | undefined, { fontSize = "2.25em", lineHeight = "1.25" }: Options ) { return React.useMemo(() => { const element = window.document.createElement("span"); if (!emoji) { return 0; } element.innerText = `${emoji}\u00A0`; element.style.visibility = "hidden"; element.style.position = "absolute"; element.style.left = "-9999px"; element.style.lineHeight = lineHeight; element.style.fontSize = fontSize; element.style.width = "max-content"; window.document.body?.appendChild(element); const width = window.getComputedStyle(element).width; window.document.body?.removeChild(element); return parseInt(width, 10); }, [emoji, fontSize, lineHeight]); }