{"version":3,"file":"transform_matrix_removal.mjs","sources":["../../../src/util/transform_matrix_removal.ts"],"sourcesContent":["import { CENTER } 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('scaleX', scaleX);\n    object.set('scaleY', 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":["_assignTransformMatrixProps","object","transformMatrix","scaleX","scaleY","angle","skewX","qrDecompose","flipX","flipY","set","skewY","removeTransformMatrixForSvgParsing","preserveAspectRatioOptions","center","_findCenterFromElement","transform","cropX","cropY","x","offsetLeft","y","offsetTop","width","height","setPositionByOrigin","CENTER"],"mappings":";;;AAUA;AACA;AACA;AACA;AACA;AACA;AACA,MAAMA,2BAA2B,GAC/BC,MAAuC,IACpC;EACH,IAAIA,MAAM,CAACC,eAAe,EAAE;IAC1B,MAAM;MAAEC,MAAM;MAAEC,MAAM;MAAEC,KAAK;AAAEC,MAAAA,KAAAA;AAAM,KAAC,GAAGC,WAAW,CAClDN,MAAM,CAACC,eACT,CAAC,CAAA;IACDD,MAAM,CAACO,KAAK,GAAG,KAAK,CAAA;IACpBP,MAAM,CAACQ,KAAK,GAAG,KAAK,CAAA;AACpBR,IAAAA,MAAM,CAACS,GAAG,CAAC,QAAQ,EAAEP,MAAM,CAAC,CAAA;AAC5BF,IAAAA,MAAM,CAACS,GAAG,CAAC,QAAQ,EAAEN,MAAM,CAAC,CAAA;IAC5BH,MAAM,CAACI,KAAK,GAAGA,KAAK,CAAA;IACpBJ,MAAM,CAACK,KAAK,GAAGA,KAAK,CAAA;IACpBL,MAAM,CAACU,KAAK,GAAG,CAAC,CAAA;AAClB,GAAA;AACF,CAAC,CAAA;;AAED;AACA;AACA;AACA;AACA;AACA;MACaC,kCAAkC,GAAGA,CAChDX,MAAuC,EACvCY,0BAAgC,KAC7B;AACH,EAAA,IAAIC,MAAM,GAAGb,MAAM,CAACc,sBAAsB,EAAE,CAAA;EAC5C,IAAId,MAAM,CAACC,eAAe,EAAE;IAC1BF,2BAA2B,CAACC,MAAM,CAAC,CAAA;IACnCa,MAAM,GAAGA,MAAM,CAACE,SAAS,CAACf,MAAM,CAACC,eAAe,CAAC,CAAA;AACnD,GAAA;EACA,OAAOD,MAAM,CAACC,eAAe,CAAA;AAC7B,EAAA,IAAIW,0BAA0B,EAAE;AAC9BZ,IAAAA,MAAM,CAACE,MAAM,IAAIU,0BAA0B,CAACV,MAAM,CAAA;AAClDF,IAAAA,MAAM,CAACG,MAAM,IAAIS,0BAA0B,CAACT,MAAM,CAAA;AACjDH,IAAAA,MAAM,CAAiBgB,KAAK,GAAGJ,0BAA0B,CAACI,KAAK,CAAA;AAC/DhB,IAAAA,MAAM,CAAiBiB,KAAK,GAAGL,0BAA0B,CAACK,KAAK,CAAA;AAChEJ,IAAAA,MAAM,CAACK,CAAC,IAAIN,0BAA0B,CAACO,UAAU,CAAA;AACjDN,IAAAA,MAAM,CAACO,CAAC,IAAIR,0BAA0B,CAACS,SAAS,CAAA;AAChDrB,IAAAA,MAAM,CAACsB,KAAK,GAAGV,0BAA0B,CAACU,KAAK,CAAA;AAC/CtB,IAAAA,MAAM,CAACuB,MAAM,GAAGX,0BAA0B,CAACW,MAAM,CAAA;AACnD,GAAA;EACAvB,MAAM,CAACwB,mBAAmB,CAACX,MAAM,EAAEY,MAAM,EAAEA,MAAM,CAAC,CAAA;AACpD;;;;"}