{"version":3,"file":"normalizeValue.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":"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"}