{"version":3,"file":"normalizeValue.min.mjs","sources":["../../../src/parser/normalizeValue.ts"],"sourcesContent":["import { multiplyTransformMatrices } from '../util/misc/matrix';\nimport { parseUnit } from '../util/misc/svgParsing';\nimport { parseTransformAttribute } from './parseTransformAttribute';\nimport { CENTER, LEFT, RIGHT, NONE } from '../constants';\n\nexport function normalizeValue(\n  attr: string,\n  value: any,\n  parentAttributes: Record<string, any>,\n  fontSize: number\n): string | null | boolean | number[] | number {\n  const isArray = Array.isArray(value);\n  let parsed: number | number[];\n  let ouputValue: string | null | boolean | number[] | number = value;\n  if ((attr === 'fill' || attr === 'stroke') && value === NONE) {\n    ouputValue = '';\n  } else if (attr === 'strokeUniform') {\n    return value === 'non-scaling-stroke';\n  } else if (attr === 'strokeDashArray') {\n    if (value === NONE) {\n      ouputValue = null;\n    } else {\n      ouputValue = value.replace(/,/g, ' ').split(/\\s+/).map(parseFloat);\n    }\n  } else if (attr === 'transformMatrix') {\n    if (parentAttributes && parentAttributes.transformMatrix) {\n      ouputValue = multiplyTransformMatrices(\n        parentAttributes.transformMatrix,\n        parseTransformAttribute(value)\n      );\n    } else {\n      ouputValue = parseTransformAttribute(value);\n    }\n  } else if (attr === 'visible') {\n    ouputValue = value !== NONE && value !== 'hidden';\n    // display=none on parent element always takes precedence over child element\n    if (parentAttributes && parentAttributes.visible === false) {\n      ouputValue = false;\n    }\n  } else if (attr === 'opacity') {\n    ouputValue = parseFloat(value);\n    if (parentAttributes && typeof parentAttributes.opacity !== 'undefined') {\n      ouputValue *= parentAttributes.opacity as number;\n    }\n  } else if (attr === 'textAnchor' /* text-anchor */) {\n    ouputValue = value === 'start' ? LEFT : value === 'end' ? RIGHT : CENTER;\n  } else if (attr === 'charSpacing') {\n    // parseUnit returns px and we convert it to em\n    parsed = (parseUnit(value, fontSize) / fontSize) * 1000;\n  } else if (attr === 'paintFirst') {\n    const fillIndex = value.indexOf('fill');\n    const strokeIndex = value.indexOf('stroke');\n    ouputValue = 'fill';\n    if (fillIndex > -1 && strokeIndex > -1 && strokeIndex < fillIndex) {\n      ouputValue = 'stroke';\n    } else if (fillIndex === -1 && strokeIndex > -1) {\n      ouputValue = 'stroke';\n    }\n  } else if (attr === 'href' || attr === 'xlink:href' || attr === 'font') {\n    return value;\n  } else if (attr === 'imageSmoothing') {\n    return value === 'optimizeQuality';\n  } else {\n    parsed = isArray\n      ? (value as string[]).map(parseUnit)\n      : parseUnit(value, fontSize);\n  }\n\n  return !isArray && isNaN(parsed! as number) ? ouputValue : parsed!;\n}\n"],"names":["normalizeValue","attr","value","parentAttributes","fontSize","isArray","Array","parsed","ouputValue","NONE","replace","split","map","parseFloat","transformMatrix","multiplyTransformMatrices","parseTransformAttribute","visible","opacity","LEFT","RIGHT","CENTER","parseUnit","fillIndex","indexOf","strokeIndex","isNaN"],"mappings":"6RAKO,SAASA,EACdC,EACAC,EACAC,EACAC,GAEA,MAAMC,EAAUC,MAAMD,QAAQH,GAC9B,IAAIK,EACAC,EAA0DN,EAC9D,GAAc,SAATD,GAA4B,WAATA,GAAsBC,IAAUO,EAEjD,IAAa,kBAATR,EACT,MAAiB,uBAAVC,EACF,GAAa,oBAATD,EAEPO,EADEN,IAAUO,EACC,KAEAP,EAAMQ,QAAQ,KAAM,KAAKC,MAAM,OAAOC,IAAIC,iBAEpD,GAAa,oBAATZ,EAEPO,EADEL,GAAoBA,EAAiBW,gBAC1BC,EACXZ,EAAiBW,gBACjBE,EAAwBd,IAGbc,EAAwBd,QAElC,GAAa,YAATD,EACTO,EAAaN,IAAUO,GAAkB,WAAVP,EAE3BC,IAAiD,IAA7BA,EAAiBc,UACvCT,GAAa,QAEV,GAAa,YAATP,EACTO,EAAaK,WAAWX,GACpBC,QAAwD,IAA7BA,EAAiBe,UAC9CV,GAAcL,EAAiBe,cAE5B,GAAa,eAATjB,EACTO,EAAuB,UAAVN,EAAoBiB,EAAiB,QAAVjB,EAAkBkB,EAAQC,OAC7D,GAAa,gBAATpB,EAETM,EAAUe,EAAUpB,EAAOE,GAAYA,EAAY,SAC9C,GAAa,eAATH,EAAuB,CAChC,MAAMsB,EAAYrB,EAAMsB,QAAQ,QAC1BC,EAAcvB,EAAMsB,QAAQ,UAClChB,EAAa,QACTe,GAAa,GAAKE,GAAe,GAAKA,EAAcF,IAE9B,IAAfA,GAAoBE,GAAe,KAD5CjB,EAAa,SAIjB,KAAO,IAAa,SAATP,GAA4B,eAATA,GAAkC,SAATA,EACrD,OAAOC,EACF,GAAa,mBAATD,EACT,MAAiB,oBAAVC,EAEPK,EAASF,EACJH,EAAmBU,IAAIU,GACxBA,EAAUpB,EAAOE,EACvB,OAnDEI,EAAa,GAqDf,OAAQH,GAAWqB,MAAMnB,GAAqBC,EAAaD,CAC7D"}