{"version":3,"file":"measureText.mjs","sources":["../../../src/utils/measureText.ts"],"sourcesContent":["let _context: CanvasRenderingContext2D;\nconst cache = new Map<string, TextMetrics>();\nconst cacheLimit = 500;\nlet ctxFontStyle = '';\n\n/**\n * @internal\n */\nexport function getCanvasContext() {\n  if (!_context) {\n    _context = document.createElement('canvas').getContext('2d')!;\n  }\n  return _context;\n}\n\n/**\n * @beta\n */\nexport function measureText(text: string, fontSize: number, fontWeight = 400): TextMetrics {\n  const fontStyle = `${fontWeight} ${fontSize}px 'Inter'`;\n  const cacheKey = text + fontStyle;\n  const fromCache = cache.get(cacheKey);\n\n  if (fromCache) {\n    return fromCache;\n  }\n\n  const context = getCanvasContext();\n\n  if (ctxFontStyle !== fontStyle) {\n    context.font = ctxFontStyle = fontStyle;\n  }\n\n  const metrics = context.measureText(text);\n\n  if (cache.size === cacheLimit) {\n    cache.clear();\n  }\n\n  cache.set(cacheKey, metrics);\n\n  return metrics;\n}\n\n/**\n * @beta\n */\nexport function calculateFontSize(\n  text: string,\n  width: number,\n  height: number,\n  lineHeight: number,\n  maxSize?: number,\n  fontWeight?: number\n) {\n  // calculate width in 14px\n  const textSize = measureText(text, 14, fontWeight);\n  // how much bigger than 14px can we make it while staying within our width constraints\n  const fontSizeBasedOnWidth = (width / (textSize.width + 2)) * 14;\n  const fontSizeBasedOnHeight = height / lineHeight;\n\n  // final fontSize\n  const optimalSize = Math.min(fontSizeBasedOnHeight, fontSizeBasedOnWidth);\n  return Math.min(optimalSize, maxSize ?? optimalSize);\n}\n"],"names":[],"mappings":"AAAA,IAAI,QAAA;AACJ,MAAM,KAAA,uBAAY,GAAyB,EAAA;AAC3C,MAAM,UAAa,GAAA,GAAA;AACnB,IAAI,YAAe,GAAA,EAAA;AAKZ,SAAS,gBAAmB,GAAA;AACjC,EAAA,IAAI,CAAC,QAAU,EAAA;AACb,IAAA,QAAA,GAAW,QAAS,CAAA,aAAA,CAAc,QAAQ,CAAA,CAAE,WAAW,IAAI,CAAA;AAAA;AAE7D,EAAO,OAAA,QAAA;AACT;AAKO,SAAS,WAAY,CAAA,IAAA,EAAc,QAAkB,EAAA,UAAA,GAAa,GAAkB,EAAA;AACzF,EAAA,MAAM,SAAY,GAAA,CAAA,EAAG,UAAU,CAAA,CAAA,EAAI,QAAQ,CAAA,UAAA,CAAA;AAC3C,EAAA,MAAM,WAAW,IAAO,GAAA,SAAA;AACxB,EAAM,MAAA,SAAA,GAAY,KAAM,CAAA,GAAA,CAAI,QAAQ,CAAA;AAEpC,EAAA,IAAI,SAAW,EAAA;AACb,IAAO,OAAA,SAAA;AAAA;AAGT,EAAA,MAAM,UAAU,gBAAiB,EAAA;AAEjC,EAAA,IAAI,iBAAiB,SAAW,EAAA;AAC9B,IAAA,OAAA,CAAQ,OAAO,YAAe,GAAA,SAAA;AAAA;AAGhC,EAAM,MAAA,OAAA,GAAU,OAAQ,CAAA,WAAA,CAAY,IAAI,CAAA;AAExC,EAAI,IAAA,KAAA,CAAM,SAAS,UAAY,EAAA;AAC7B,IAAA,KAAA,CAAM,KAAM,EAAA;AAAA;AAGd,EAAM,KAAA,CAAA,GAAA,CAAI,UAAU,OAAO,CAAA;AAE3B,EAAO,OAAA,OAAA;AACT;AAKO,SAAS,kBACd,IACA,EAAA,KAAA,EACA,MACA,EAAA,UAAA,EACA,SACA,UACA,EAAA;AAEA,EAAA,MAAM,QAAW,GAAA,WAAA,CAAY,IAAM,EAAA,EAAA,EAAI,UAAU,CAAA;AAEjD,EAAA,MAAM,oBAAwB,GAAA,KAAA,IAAS,QAAS,CAAA,KAAA,GAAQ,CAAM,CAAA,GAAA,EAAA;AAC9D,EAAA,MAAM,wBAAwB,MAAS,GAAA,UAAA;AAGvC,EAAA,MAAM,WAAc,GAAA,IAAA,CAAK,GAAI,CAAA,qBAAA,EAAuB,oBAAoB,CAAA;AACxE,EAAA,OAAO,IAAK,CAAA,GAAA,CAAI,WAAa,EAAA,OAAA,IAAA,IAAA,GAAA,OAAA,GAAW,WAAW,CAAA;AACrD;;;;"}