{"version":3,"file":"transform_matrix_removal.min.mjs","sources":["../../../src/util/transform_matrix_removal.ts"],"sourcesContent":["import { CENTER, SCALE_X, SCALE_Y } from '../constants';\nimport type { FabricImage } 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?: any,\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"],"names":["removeTransformMatrixForSvgParsing","object","preserveAspectRatioOptions","center","_findCenterFromElement","transformMatrix","scaleX","scaleY","angle","skewX","qrDecompose","flipX","flipY","set","SCALE_X","SCALE_Y","skewY","_assignTransformMatrixProps","transform","cropX","cropY","x","offsetLeft","y","offsetTop","width","height","setPositionByOrigin","CENTER"],"mappings":"4HAgBA,MAuBaA,EAAqCA,CAChDC,EACAC,KAEA,IAAIC,EAASF,EAAOG,yBAChBH,EAAOI,kBA3BXJ,KAEA,GAAIA,EAAOI,gBAAiB,CAC1B,MAAMC,OAAEA,EAAMC,OAAEA,EAAMC,MAAEA,EAAKC,MAAEA,GAAUC,EACvCT,EAAOI,iBAETJ,EAAOU,OAAQ,EACfV,EAAOW,OAAQ,EACfX,EAAOY,IAAIC,EAASR,GACpBL,EAAOY,IAAIE,EAASR,GACpBN,EAAOO,MAAQA,EACfP,EAAOQ,MAAQA,EACfR,EAAOe,MAAQ,CACjB,GAeEC,CAA4BhB,GAC5BE,EAASA,EAAOe,UAAUjB,EAAOI,yBAE5BJ,EAAOI,gBACVH,IACFD,EAAOK,QAAUJ,EAA2BI,OAC5CL,EAAOM,QAAUL,EAA2BK,OAC3CN,EAAuBkB,MAAQjB,EAA2BiB,MAC1DlB,EAAuBmB,MAAQlB,EAA2BkB,MAC3DjB,EAAOkB,GAAKnB,EAA2BoB,WACvCnB,EAAOoB,GAAKrB,EAA2BsB,UACvCvB,EAAOwB,MAAQvB,EAA2BuB,MAC1CxB,EAAOyB,OAASxB,EAA2BwB,QAE7CzB,EAAO0B,oBAAoBxB,EAAQyB,EAAQA,EAAO"}