{"version":3,"file":"transform_matrix_removal.min.mjs","names":[],"sources":["../../../src/util/transform_matrix_removal.ts"],"sourcesContent":["import { CENTER, SCALE_X, SCALE_Y } from '../constants';\nimport type { FabricImage, ParsedPAROffsets } from '../shapes/Image';\nimport type { FabricObject } from '../shapes/Object/FabricObject';\nimport type { TMat2D } from '../typedefs';\nimport { qrDecompose } from './misc/matrix';\n\ntype FabricObjectWithTransformMatrix = FabricObject & {\n  transformMatrix?: TMat2D;\n};\n\n/**\n * This function is an helper for svg import. it decompose the transformMatrix\n * and assign properties to object.\n * untransformed coordinates\n * @private\n */\nconst _assignTransformMatrixProps = (\n  object: FabricObjectWithTransformMatrix,\n) => {\n  if (object.transformMatrix) {\n    const { scaleX, scaleY, angle, skewX } = qrDecompose(\n      object.transformMatrix,\n    );\n    object.flipX = false;\n    object.flipY = false;\n    object.set(SCALE_X, scaleX);\n    object.set(SCALE_Y, scaleY);\n    object.angle = angle;\n    object.skewX = skewX;\n    object.skewY = 0;\n  }\n};\n\n/**\n * This function is an helper for svg import. it removes the transform matrix\n * and set to object properties that fabricjs can handle\n * @private\n * @param {Object} preserveAspectRatioOptions\n */\nexport const removeTransformMatrixForSvgParsing = (\n  object: FabricObjectWithTransformMatrix,\n  preserveAspectRatioOptions?: ParsedPAROffsets,\n) => {\n  let center = object._findCenterFromElement();\n  if (object.transformMatrix) {\n    _assignTransformMatrixProps(object);\n    center = center.transform(object.transformMatrix);\n  }\n  delete object.transformMatrix;\n  if (preserveAspectRatioOptions) {\n    object.scaleX *= preserveAspectRatioOptions.scaleX;\n    object.scaleY *= preserveAspectRatioOptions.scaleY;\n    (object as FabricImage).cropX = preserveAspectRatioOptions.cropX;\n    (object as FabricImage).cropY = preserveAspectRatioOptions.cropY;\n    center.x += preserveAspectRatioOptions.offsetLeft;\n    center.y += preserveAspectRatioOptions.offsetTop;\n    object.width = preserveAspectRatioOptions.width;\n    object.height = preserveAspectRatioOptions.height;\n  }\n  object.setPositionByOrigin(center, CENTER, CENTER);\n};\n"],"mappings":"4HAgBA,MAuBa,GACX,EACA,IAAA,CAEA,IAAI,EAAS,EAAO,wBAAA,CAChB,EAAO,mBA3BX,GAAA,CAEA,GAAI,EAAO,gBAAiB,CAC1B,GAAA,CAAM,OAAE,EAAA,OAAQ,EAAA,MAAQ,EAAA,MAAO,GAAU,EACvC,EAAO,gBAAA,CAET,EAAO,MAAA,CAAQ,EACf,EAAO,MAAA,CAAQ,EACf,EAAO,IAAI,EAAS,EAAA,CACpB,EAAO,IAAI,EAAS,EAAA,CACpB,EAAO,MAAQ,EACf,EAAO,MAAQ,EACf,EAAO,MAAQ,KAgBa,EAAA,CAC5B,EAAS,EAAO,UAAU,EAAO,gBAAA,EAAA,OAE5B,EAAO,gBACV,IACF,EAAO,QAAU,EAA2B,OAC5C,EAAO,QAAU,EAA2B,OAC3C,EAAuB,MAAQ,EAA2B,MAC1D,EAAuB,MAAQ,EAA2B,MAC3D,EAAO,GAAK,EAA2B,WACvC,EAAO,GAAK,EAA2B,UACvC,EAAO,MAAQ,EAA2B,MAC1C,EAAO,OAAS,EAA2B,QAE7C,EAAO,oBAAoB,EAAQ,EAAQ,EAAA,EAAA,OAAA,KAAA"}