{"version":3,"file":"normalizeValue.mjs","names":[],"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, FILL, STROKE } from '../constants';\nimport { TEXT_DECORATION_THICKNESS } from '../shapes/Text/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' || attr === TEXT_DECORATION_THICKNESS) {\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 (\n    attr === 'href' ||\n    attr === 'xlink:href' ||\n    attr === 'font' ||\n    attr === 'id'\n  ) {\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"],"mappings":";;;;;;AAMA,SAAgB,eACd,MACA,OACA,kBACA,UAC6C;CAC7C,MAAM,UAAU,MAAM,QAAQ,MAAM;CACpC,IAAI;CACJ,IAAI,aAA0D;AAC9D,MAAK,SAAA,UAAiB,SAAA,aAAoB,UAAA,OACxC,cAAa;UACJ,SAAS,gBAClB,QAAO,UAAU;UACR,SAAS,kBAClB,KAAI,UAAA,OACF,cAAa;KAEb,cAAa,MAAM,QAAQ,MAAM,IAAI,CAAC,MAAM,MAAM,CAAC,IAAI,WAAW;UAE3D,SAAS,kBAClB,KAAI,oBAAoB,iBAAiB,gBACvC,cAAa,0BACX,iBAAiB,iBACjB,wBAAwB,MAAM,CAC/B;KAED,cAAa,wBAAwB,MAAM;UAEpC,SAAS,WAAW;AAC7B,eAAa,UAAA,UAAkB,UAAU;AAEzC,MAAI,oBAAoB,iBAAiB,YAAY,MACnD,cAAa;YAEN,SAAS,WAAW;AAC7B,eAAa,WAAW,MAAM;AAC9B,MAAI,oBAAoB,OAAO,iBAAiB,YAAY,YAC1D,eAAc,iBAAiB;YAExB,SAAS,aAClB,cAAa,UAAU,UAAU,OAAO,UAAU,QAAQ,QAAQ;UACzD,SAAS,iBAAiB,SAAA,0BAEnC,UAAU,UAAU,OAAO,SAAS,GAAG,WAAY;UAC1C,SAAS,cAAc;EAChC,MAAM,YAAY,MAAM,QAAQ,KAAK;EACrC,MAAM,cAAc,MAAM,QAAQ,OAAO;AACzC,eAAa;AACb,MAAI,YAAY,MAAM,cAAc,MAAM,cAAc,UACtD,cAAa;WACJ,cAAc,MAAM,cAAc,GAC3C,cAAa;YAGf,SAAS,UACT,SAAS,gBACT,SAAS,UACT,SAAS,KAET,QAAO;UACE,SAAS,iBAClB,QAAO,UAAU;KAEjB,UAAS,UACJ,MAAmB,IAAI,UAAU,GAClC,UAAU,OAAO,SAAS;AAGhC,QAAO,CAAC,WAAW,MAAM,OAAkB,GAAG,aAAa"}