{
  "version": 3,
  "sources": ["../../src/util/transformBoundingBoxAndElement.ts"],
  "sourcesContent": ["import { Box2 } from 'vecks'\nimport type { Transform, TransformResult } from '../types'\n\n/**\n * Transform the bounding box and the SVG element by the given\n * transforms. The <g> element are created in reverse transform\n * order and the bounding box in the given order.\n */\nexport default function transformBoundingBoxAndElement(\n  bbox: Box2,\n  element: string,\n  transforms: Transform[]\n): TransformResult {\n  let transformedElement = ''\n  const matrices = transforms.map((transform) => {\n    // Create the transformation matrix\n    const tx = transform.x || 0\n    const ty = transform.y || 0\n    const sx = transform.scaleX || 1\n    const sy = transform.scaleY || 1\n    const angle = ((transform.rotation || 0) / 180) * Math.PI\n    const { cos, sin } = Math\n    let a, b, c, d, e, f\n    // In DXF an extrusionZ value of -1 denote a tranform around the Y axis.\n    if (transform.extrusionZ === -1) {\n      a = -sx * cos(angle)\n      b = sx * sin(angle)\n      c = sy * sin(angle)\n      d = sy * cos(angle)\n      e = -tx\n      f = ty\n    } else {\n      a = sx * cos(angle)\n      b = sx * sin(angle)\n      c = -sy * sin(angle)\n      d = sy * cos(angle)\n      e = tx\n      f = ty\n    }\n    return [a, b, c, d, e, f]\n  })\n\n  // Only transform the bounding box is it is valid (i.e. not Infinity)\n  let transformedBBox = new Box2()\n  if (bbox.valid) {\n    let bboxPoints = [\n      { x: bbox.min.x, y: bbox.min.y },\n      { x: bbox.max.x, y: bbox.min.y },\n      { x: bbox.max.x, y: bbox.max.y },\n      { x: bbox.min.x, y: bbox.max.y },\n    ]\n    for (const [a, b, c, d, e, f] of matrices) {\n      bboxPoints = bboxPoints.map((point) => ({\n        x: point.x * a + point.y * c + e,\n        y: point.x * b + point.y * d + f,\n      }))\n    }\n    transformedBBox = bboxPoints.reduce((acc, point) => {\n      return acc.expandByPoint(point)\n    }, new Box2())\n  }\n\n  matrices.reverse()\n  for (const [a, b, c, d, e, f] of matrices) {\n    transformedElement += `<g transform=\"matrix(${a} ${b} ${c} ${d} ${e} ${f})\">`\n  }\n  transformedElement += element\n  // eslint-disable-next-line @typescript-eslint/no-unused-vars\n  for (const _ of matrices) {\n    transformedElement += '</g>'\n  }\n\n  return { bbox: transformedBBox, element: transformedElement }\n}\n"],
  "mappings": ";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,mBAAqB;AAQN,SAAR,+BACL,MACA,SACA,YACiB;AACjB,MAAI,qBAAqB;AACzB,QAAM,WAAW,WAAW,IAAI,CAAC,cAAc;AAE7C,UAAM,KAAK,UAAU,KAAK;AAC1B,UAAM,KAAK,UAAU,KAAK;AAC1B,UAAM,KAAK,UAAU,UAAU;AAC/B,UAAM,KAAK,UAAU,UAAU;AAC/B,UAAM,SAAU,UAAU,YAAY,KAAK,MAAO,KAAK;AACvD,UAAM,EAAE,KAAK,IAAI,IAAI;AACrB,QAAI,GAAG,GAAG,GAAG,GAAG,GAAG;AAEnB,QAAI,UAAU,eAAe,IAAI;AAC/B,UAAI,CAAC,KAAK,IAAI,KAAK;AACnB,UAAI,KAAK,IAAI,KAAK;AAClB,UAAI,KAAK,IAAI,KAAK;AAClB,UAAI,KAAK,IAAI,KAAK;AAClB,UAAI,CAAC;AACL,UAAI;AAAA,IACN,OAAO;AACL,UAAI,KAAK,IAAI,KAAK;AAClB,UAAI,KAAK,IAAI,KAAK;AAClB,UAAI,CAAC,KAAK,IAAI,KAAK;AACnB,UAAI,KAAK,IAAI,KAAK;AAClB,UAAI;AACJ,UAAI;AAAA,IACN;AACA,WAAO,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;AAAA,EAC1B,CAAC;AAGD,MAAI,kBAAkB,IAAI,kBAAK;AAC/B,MAAI,KAAK,OAAO;AACd,QAAI,aAAa;AAAA,MACf,EAAE,GAAG,KAAK,IAAI,GAAG,GAAG,KAAK,IAAI,EAAE;AAAA,MAC/B,EAAE,GAAG,KAAK,IAAI,GAAG,GAAG,KAAK,IAAI,EAAE;AAAA,MAC/B,EAAE,GAAG,KAAK,IAAI,GAAG,GAAG,KAAK,IAAI,EAAE;AAAA,MAC/B,EAAE,GAAG,KAAK,IAAI,GAAG,GAAG,KAAK,IAAI,EAAE;AAAA,IACjC;AACA,eAAW,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC,KAAK,UAAU;AACzC,mBAAa,WAAW,IAAI,CAAC,WAAW;AAAA,QACtC,GAAG,MAAM,IAAI,IAAI,MAAM,IAAI,IAAI;AAAA,QAC/B,GAAG,MAAM,IAAI,IAAI,MAAM,IAAI,IAAI;AAAA,MACjC,EAAE;AAAA,IACJ;AACA,sBAAkB,WAAW,OAAO,CAAC,KAAK,UAAU;AAClD,aAAO,IAAI,cAAc,KAAK;AAAA,IAChC,GAAG,IAAI,kBAAK,CAAC;AAAA,EACf;AAEA,WAAS,QAAQ;AACjB,aAAW,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC,KAAK,UAAU;AACzC,0BAAsB,wBAAwB,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;AAAA,EAC1E;AACA,wBAAsB;AAEtB,aAAW,KAAK,UAAU;AACxB,0BAAsB;AAAA,EACxB;AAEA,SAAO,EAAE,MAAM,iBAAiB,SAAS,mBAAmB;AAC9D;",
  "names": []
}
