{
  "version": 3,
  "sources": ["../../src/document/components/utils/getClosestToRegularFont.ts"],
  "sourcesContent": ["import { REGULAR_FONT_WEIGHT } from \"@framerjs/app-shared\"\nimport { assert } from \"@framerjs/shared\"\nimport type { ReadonlyFont, ReadonlyFontFamily } from \"library/index.ts\"\nimport { isUndefined } from \"utils/typeChecks.ts\"\n\n/**\n * Returns the font variant from a font family that is closest to a regular style.\n * Prioritizes variants in this order:\n * 1. Normal style over italic\n * 2. Weight closer to 400 (REGULAR_FONT_WEIGHT)\n * 3. Variant name containing \"regular\" or \"normal\"\n */\nexport function getClosestToRegularFont(fontFamily: ReadonlyFontFamily): ReadonlyFont {\n\tlet closestToRegularFont: ReadonlyFont | undefined\n\tfor (const font of fontFamily.fonts) {\n\t\tif (isUndefined(closestToRegularFont)) {\n\t\t\tclosestToRegularFont = font\n\t\t}\n\t\tif (isCloserToRegularFont(font, closestToRegularFont)) {\n\t\t\tclosestToRegularFont = font\n\t\t}\n\t\tif (\n\t\t\tgetWeightDifference(closestToRegularFont) === 0 &&\n\t\t\tclosestToRegularFont.style === \"normal\" &&\n\t\t\thasNormalVariant(closestToRegularFont)\n\t\t) {\n\t\t\tbreak\n\t\t}\n\t}\n\tassert(closestToRegularFont, \"Expected at least one font in family\")\n\treturn closestToRegularFont\n}\n\nfunction getWeightDifference(font: ReadonlyFont): number {\n\treturn isUndefined(font.weight) ? Number.MAX_SAFE_INTEGER : Math.abs(font.weight - REGULAR_FONT_WEIGHT)\n}\n\nfunction hasNormalVariant(font: ReadonlyFont): boolean {\n\tconst variant = font.variant?.toLowerCase() ?? \"\"\n\treturn variant.includes(\"regular\") || variant.includes(\"normal\")\n}\n\nfunction isCloserToRegularFont(current: ReadonlyFont, closest: ReadonlyFont): boolean {\n\tif (current.style === \"normal\" && closest.style === \"italic\") {\n\t\treturn true\n\t} else if (current.style === \"italic\" && closest.style === \"normal\") {\n\t\treturn false\n\t}\n\tif (getWeightDifference(current) < getWeightDifference(closest)) {\n\t\treturn true\n\t}\n\tif (hasNormalVariant(current) && !hasNormalVariant(closest)) {\n\t\treturn true\n\t}\n\treturn false\n}\n"],
  "mappings": ";;;;;;;;;;;AAYO,SAAS,wBAAwB,YAA8C;AACrF,MAAI;AACJ,aAAW,QAAQ,WAAW,OAAO;AACpC,QAAI,YAAY,oBAAoB,GAAG;AACtC,6BAAuB;AAAA,IACxB;AACA,QAAI,sBAAsB,MAAM,oBAAoB,GAAG;AACtD,6BAAuB;AAAA,IACxB;AACA,QACC,oBAAoB,oBAAoB,MAAM,KAC9C,qBAAqB,UAAU,YAC/B,iBAAiB,oBAAoB,GACpC;AACD;AAAA,IACD;AAAA,EACD;AACA,SAAO,sBAAsB,sCAAsC;AACnE,SAAO;AACR;AAEA,SAAS,oBAAoB,MAA4B;AACxD,SAAO,YAAY,KAAK,MAAM,IAAI,OAAO,mBAAmB,KAAK,IAAI,KAAK,SAAS,mBAAmB;AACvG;AAEA,SAAS,iBAAiB,MAA6B;AACtD,QAAM,UAAU,KAAK,SAAS,YAAY,KAAK;AAC/C,SAAO,QAAQ,SAAS,SAAS,KAAK,QAAQ,SAAS,QAAQ;AAChE;AAEA,SAAS,sBAAsB,SAAuB,SAAgC;AACrF,MAAI,QAAQ,UAAU,YAAY,QAAQ,UAAU,UAAU;AAC7D,WAAO;AAAA,EACR,WAAW,QAAQ,UAAU,YAAY,QAAQ,UAAU,UAAU;AACpE,WAAO;AAAA,EACR;AACA,MAAI,oBAAoB,OAAO,IAAI,oBAAoB,OAAO,GAAG;AAChE,WAAO;AAAA,EACR;AACA,MAAI,iBAAiB,OAAO,KAAK,CAAC,iBAAiB,OAAO,GAAG;AAC5D,WAAO;AAAA,EACR;AACA,SAAO;AACR;",
  "names": []
}
