{"version":3,"file":"parseCoords.mjs","sources":["../../../../src/gradient/parser/parseCoords.ts"],"sourcesContent":["import { isPercent } from '../../parser/percent';\nimport type { TSize } from '../../typedefs';\nimport type { GradientCoords, GradientType, GradientUnits } from '../typedefs';\nimport { parseGradientUnits, parseType } from './misc';\n\nfunction convertPercentUnitsToValues<\n  T extends GradientType,\n  K extends keyof GradientCoords<T>\n>(\n  valuesToConvert: Record<K, string | number>,\n  { width, height, gradientUnits }: TSize & { gradientUnits: GradientUnits }\n) {\n  let finalValue;\n  return (Object.keys(valuesToConvert) as K[]).reduce((acc, prop) => {\n    const propValue = valuesToConvert[prop];\n    if (propValue === 'Infinity') {\n      finalValue = 1;\n    } else if (propValue === '-Infinity') {\n      finalValue = 0;\n    } else {\n      finalValue =\n        typeof propValue === 'string' ? parseFloat(propValue) : propValue;\n      if (typeof propValue === 'string' && isPercent(propValue)) {\n        finalValue *= 0.01;\n        if (gradientUnits === 'pixels') {\n          // then we need to fix those percentages here in svg parsing\n          if (prop === 'x1' || prop === 'x2' || prop === 'r2') {\n            finalValue *= width;\n          }\n          if (prop === 'y1' || prop === 'y2') {\n            finalValue *= height;\n          }\n        }\n      }\n    }\n    acc[prop] = finalValue;\n    return acc;\n  }, {} as Record<K, number>);\n}\n\nfunction getValue(el: SVGGradientElement, key: string) {\n  return el.getAttribute(key);\n}\n\nexport function parseLinearCoords(el: SVGGradientElement) {\n  return {\n    x1: getValue(el, 'x1') || 0,\n    y1: getValue(el, 'y1') || 0,\n    x2: getValue(el, 'x2') || '100%',\n    y2: getValue(el, 'y2') || 0,\n  };\n}\n\nexport function parseRadialCoords(el: SVGGradientElement) {\n  return {\n    x1: getValue(el, 'fx') || getValue(el, 'cx') || '50%',\n    y1: getValue(el, 'fy') || getValue(el, 'cy') || '50%',\n    r1: 0,\n    x2: getValue(el, 'cx') || '50%',\n    y2: getValue(el, 'cy') || '50%',\n    r2: getValue(el, 'r') || '50%',\n  };\n}\n\nexport function parseCoords(el: SVGGradientElement, size: TSize) {\n  return convertPercentUnitsToValues(\n    parseType(el) === 'linear' ? parseLinearCoords(el) : parseRadialCoords(el),\n    {\n      ...size,\n      gradientUnits: parseGradientUnits(el),\n    }\n  );\n}\n"],"names":["convertPercentUnitsToValues","valuesToConvert","_ref","width","height","gradientUnits","finalValue","Object","keys","reduce","acc","prop","propValue","parseFloat","isPercent","getValue","el","key","getAttribute","parseLinearCoords","x1","y1","x2","y2","parseRadialCoords","r1","r2","parseCoords","size","parseType","_objectSpread","parseGradientUnits"],"mappings":"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"}