{"version":3,"file":"dommatrix.cjs","names":[],"sources":["../src/index.ts"],"sourcesContent":["import type {\n  CSSMatrixInput,\n  JSONMatrix,\n  Matrix,\n  Matrix3d,\n  PointTuple,\n} from \"./types.ts\";\n\n/** A model for JSONMatrix */\nconst JSON_MATRIX: JSONMatrix = {\n  a: 1,\n  b: 0,\n  c: 0,\n  d: 1,\n  e: 0,\n  f: 0,\n  m11: 1,\n  m12: 0,\n  m13: 0,\n  m14: 0,\n  m21: 0,\n  m22: 1,\n  m23: 0,\n  m24: 0,\n  m31: 0,\n  m32: 0,\n  m33: 1,\n  m34: 0,\n  m41: 0,\n  m42: 0,\n  m43: 0,\n  m44: 1,\n  is2D: true,\n  isIdentity: true,\n};\n\n// CSSMatrix Static methods\n// * `fromArray` is a more simple implementation, should also accept Float[32/64]Array;\n// * `fromMatrix` load values from another CSSMatrix/DOMMatrix instance or JSON object;\n// * `fromString` parses and loads values from any valid CSS transform string (TransformList).\n// * `isCompatibleArray` Checks if an array is compatible with CSSMatrix.\n// * `isCompatibleObject` Checks if an object is compatible with CSSMatrix.\n\n/** Checks if an array is compatible with CSSMatrix */\nconst isCompatibleArray = (\n  array?: unknown,\n): array is Matrix | Matrix3d | Float32Array | Float64Array => {\n  return (\n    (array instanceof Float64Array ||\n      array instanceof Float32Array ||\n      (Array.isArray(array) && array.every((x) => typeof x === \"number\"))) &&\n    [6, 16].some((x) => array.length === x)\n  );\n};\n\n/** Checks if an object is compatible with CSSMatrix */\nconst isCompatibleObject = (\n  object?: unknown,\n): object is CSSMatrix | DOMMatrix | JSONMatrix => {\n  return (\n    object instanceof DOMMatrix ||\n    object instanceof CSSMatrix ||\n    (typeof object === \"object\" &&\n      Object.keys(JSON_MATRIX).every((k) => object && k in object))\n  );\n};\n\n/**\n * Creates a new mutable `CSSMatrix` instance given an array of 16/6 floating point values.\n * This static method invalidates arrays that contain non-number elements.\n *\n * If the array has six values, the result is a 2D matrix; if the array has 16 values,\n * the result is a 3D matrix. Otherwise, a TypeError exception is thrown.\n *\n * @param array an `Array` to feed values from.\n * @return the resulted matrix.\n */\nconst fromArray = (\n  array: number[] | Float32Array | Float64Array,\n): CSSMatrix => {\n  const m = new CSSMatrix();\n  const a = Array.from(array);\n\n  if (!isCompatibleArray(a)) {\n    throw TypeError(\n      `CSSMatrix: \"${a.join(\",\")}\" must be an array with 6/16 numbers.`,\n    );\n  }\n  // istanbul ignore else @preserve\n  if (a.length === 16) {\n    const [\n      m11,\n      m12,\n      m13,\n      m14,\n      m21,\n      m22,\n      m23,\n      m24,\n      m31,\n      m32,\n      m33,\n      m34,\n      m41,\n      m42,\n      m43,\n      m44,\n    ] = a;\n\n    m.m11 = m11;\n    m.a = m11;\n\n    m.m21 = m21;\n    m.c = m21;\n\n    m.m31 = m31;\n\n    m.m41 = m41;\n    m.e = m41;\n\n    m.m12 = m12;\n    m.b = m12;\n\n    m.m22 = m22;\n    m.d = m22;\n\n    m.m32 = m32;\n\n    m.m42 = m42;\n    m.f = m42;\n\n    m.m13 = m13;\n    m.m23 = m23;\n    m.m33 = m33;\n    m.m43 = m43;\n    m.m14 = m14;\n    m.m24 = m24;\n    m.m34 = m34;\n    m.m44 = m44;\n  } else if (a.length === 6) {\n    const [M11, M12, M21, M22, M41, M42] = a;\n\n    m.m11 = M11;\n    m.a = M11;\n\n    m.m12 = M12;\n    m.b = M12;\n\n    m.m21 = M21;\n    m.c = M21;\n\n    m.m22 = M22;\n    m.d = M22;\n\n    m.m41 = M41;\n    m.e = M41;\n\n    m.m42 = M42;\n    m.f = M42;\n  }\n  return m;\n};\n\n/**\n * Creates a new mutable `CSSMatrix` instance given an existing matrix or a\n * `DOMMatrix` instance which provides the values for its properties.\n *\n * @param m the source matrix to feed values from.\n * @return the resulted matrix.\n */\nconst fromMatrix = (m: CSSMatrix | DOMMatrix | JSONMatrix): CSSMatrix => {\n  if (isCompatibleObject(m)) {\n    return fromArray([\n      m.m11,\n      m.m12,\n      m.m13,\n      m.m14,\n      m.m21,\n      m.m22,\n      m.m23,\n      m.m24,\n      m.m31,\n      m.m32,\n      m.m33,\n      m.m34,\n      m.m41,\n      m.m42,\n      m.m43,\n      m.m44,\n    ]);\n  }\n  throw TypeError(\n    `CSSMatrix: \"${\n      JSON.stringify(\n        m,\n      )\n    }\" is not a DOMMatrix / CSSMatrix / JSON compatible object.`,\n  );\n};\n\n/**\n * Creates a new mutable `CSSMatrix` given any valid CSS transform string,\n * or what we call `TransformList`:\n *\n * * `matrix(a, b, c, d, e, f)` - valid matrix() transform function\n * * `matrix3d(m11, m12, m13, ...m44)` - valid matrix3d() transform function\n * * `translate(tx, ty) rotateX(alpha)` - any valid transform function(s)\n *\n * @copyright thednp © 2021\n *\n * @param source valid CSS transform string syntax.\n * @return the resulted matrix.\n */\nconst fromString = (source: string): CSSMatrix => {\n  if (typeof source !== \"string\") {\n    throw TypeError(`CSSMatrix: \"${JSON.stringify(source)}\" is not a string.`);\n  }\n  const str = String(source).replace(/\\s/g, \"\");\n  const m = new CSSMatrix();\n  const invalidStringError = `CSSMatrix: invalid transform string \"${source}\"`;\n\n  // const px = ['perspective'];\n  // const length = ['translate', 'translate3d', 'translateX', 'translateY', 'translateZ'];\n  // const deg = ['rotate', 'rotate3d', 'rotateX', 'rotateY', 'rotateZ', 'skew', 'skewX', 'skewY'];\n  // const abs = ['scale', 'scale3d', 'matrix', 'matrix3d'];\n  // const transformFunctions = px.concat(length, deg, abs);\n\n  str\n    .split(\")\")\n    .filter((f) => f)\n    .forEach((tf) => {\n      const [prop, value] = tf.split(\"(\");\n\n      // invalidate empty string\n      if (!value) throw TypeError(invalidStringError);\n\n      const components = value\n        .split(\",\")\n        .map((n) =>\n          n.includes(\"rad\") ? parseFloat(n) * (180 / Math.PI) : parseFloat(n)\n        );\n\n      const [x, y, z, a] = components;\n      const xyz = [x, y, z];\n      const xyza = [x, y, z, a];\n\n      // single number value expected\n      if (prop === \"perspective\" && x && [y, z].every((n) => n === undefined)) {\n        m.m34 = -1 / x;\n        // 6/16 number values expected\n      } else if (\n        prop.includes(\"matrix\") &&\n        [6, 16].includes(components.length) &&\n        components.every((n) => !Number.isNaN(+n))\n      ) {\n        const values = components.map((n) => (Math.abs(n) < 1e-6 ? 0 : n));\n        m.multiplySelf(fromArray(values as Matrix | Matrix3d));\n        // 3 values expected\n      } else if (\n        prop === \"translate3d\" &&\n        xyz.every((n) => !Number.isNaN(+n))\n      ) {\n        m.translateSelf(x, y, z);\n        // single/double number value(s) expected\n      } else if (prop === \"translate\" && x && z === undefined) {\n        m.translateSelf(x, y || 0, 0);\n        // all 4 values expected\n      } else if (\n        prop === \"rotate3d\" &&\n        xyza.every((n) => !Number.isNaN(+n)) &&\n        a\n      ) {\n        m.rotateAxisAngleSelf(x, y, z, a);\n        // single value expected\n      } else if (\n        prop === \"rotate\" &&\n        x &&\n        [y, z].every((n) => n === undefined)\n      ) {\n        m.rotateSelf(0, 0, x);\n        // 3 values expected\n      } else if (\n        prop === \"scale3d\" &&\n        xyz.every((n) => !Number.isNaN(+n)) &&\n        xyz.some((n) => n !== 1)\n      ) {\n        m.scaleSelf(x, y, z);\n        // single value expected\n      } else if (\n        // prop === \"scale\" && !Number.isNaN(x) && x !== 1 && z === undefined\n        // prop === \"scale\" && !Number.isNaN(x) && [x, y].some((n) => n !== 1) &&\n        prop === \"scale\" &&\n        !Number.isNaN(x) &&\n        (x !== 1 || y !== 1) &&\n        z === undefined\n      ) {\n        const nosy = Number.isNaN(+y);\n        const sy = nosy ? x : y;\n        m.scaleSelf(x, sy, 1);\n        // single/double value expected\n      } else if (\n        prop === \"skew\" &&\n        (x || (!Number.isNaN(x) && y)) &&\n        z === undefined\n      ) {\n        m.skewSelf(x, y || 0);\n      } else if (\n        [\"translate\", \"rotate\", \"scale\", \"skew\"].some((p) =>\n          prop.includes(p)\n        ) &&\n        /[XYZ]/.test(prop) &&\n        x &&\n        [y, z].every((n) => n === undefined) // a single value expected\n      ) {\n        if (\"skewX\" === prop || \"skewY\" === prop) {\n          const method = \"skewX\" === prop ? \"skewXSelf\" : \"skewYSelf\";\n          m[method](x);\n        } else {\n          const fn = prop.replace(/[XYZ]/, \"\") as\n            | \"scale\"\n            | \"translate\"\n            | \"rotate\";\n          const axis = prop.replace(fn, \"\");\n          const idx = [\"X\", \"Y\", \"Z\"].indexOf(axis);\n          const def = fn === \"scale\" ? 1 : 0;\n          const method = (fn + \"Self\") as\n            | \"scaleSelf\"\n            | \"translateSelf\"\n            | \"rotateSelf\";\n          const axeValues: [number, number, number] = [\n            idx === 0 ? x : def,\n            idx === 1 ? x : def,\n            idx === 2 ? x : def,\n          ];\n          m[method](...axeValues);\n        }\n      } else {\n        throw TypeError(invalidStringError);\n      }\n    });\n\n  return m;\n};\n\n/**\n * Returns an *Array* containing elements which comprise the matrix.\n * The method can return either the 16 elements or the 6 elements\n * depending on the value of the `is2D` parameter.\n *\n * @param m the source matrix to feed values from.\n * @param is2D *Array* representation of the matrix\n * @return an *Array* representation of the matrix\n */\nconst toArray = (\n  m: CSSMatrix | DOMMatrix | JSONMatrix,\n  is2D?: boolean,\n): Matrix | Matrix3d => {\n  if (is2D) {\n    return [m.a, m.b, m.c, m.d, m.e, m.f];\n  }\n  return [\n    m.m11,\n    m.m12,\n    m.m13,\n    m.m14,\n    m.m21,\n    m.m22,\n    m.m23,\n    m.m24,\n    m.m31,\n    m.m32,\n    m.m33,\n    m.m34,\n    m.m41,\n    m.m42,\n    m.m43,\n    m.m44,\n  ];\n};\n\n// Transform Functions\n// https://www.w3.org/TR/css-transforms-1/#transform-functions\n\n/**\n * Creates a new `CSSMatrix` for the translation matrix and returns it.\n * This method is equivalent to the CSS `translate3d()` function.\n *\n * https://developer.mozilla.org/en-US/docs/Web/CSS/transform-function/translate3d\n *\n * @param x the `x-axis` position.\n * @param y the `y-axis` position.\n * @param z the `z-axis` position.\n * @return the resulted matrix.\n */\nconst Translate = (x: number, y: number, z: number): CSSMatrix => {\n  const m = new CSSMatrix();\n  m.m41 = x;\n  m.e = x;\n  m.m42 = y;\n  m.f = y;\n  m.m43 = z;\n  return m;\n};\n\n/**\n * Creates a new `CSSMatrix` for the rotation matrix and returns it.\n *\n * http://en.wikipedia.org/wiki/Rotation_matrix\n *\n * @param rx the `x-axis` rotation.\n * @param ry the `y-axis` rotation.\n * @param rz the `z-axis` rotation.\n * @return the resulted matrix.\n */\nconst Rotate = (rx: number, ry: number, rz: number): CSSMatrix => {\n  const m = new CSSMatrix();\n  const degToRad = Math.PI / 180;\n  const radX = rx * degToRad;\n  const radY = ry * degToRad;\n  const radZ = rz * degToRad;\n\n  // minus sin() because of right-handed system\n  const cosx = Math.cos(radX);\n  const sinx = -Math.sin(radX);\n  const cosy = Math.cos(radY);\n  const siny = -Math.sin(radY);\n  const cosz = Math.cos(radZ);\n  const sinz = -Math.sin(radZ);\n\n  const m11 = cosy * cosz;\n  const m12 = -cosy * sinz;\n\n  m.m11 = m11;\n  m.a = m11;\n\n  m.m12 = m12;\n  m.b = m12;\n\n  m.m13 = siny;\n\n  const m21 = sinx * siny * cosz + cosx * sinz;\n  m.m21 = m21;\n  m.c = m21;\n\n  const m22 = cosx * cosz - sinx * siny * sinz;\n  m.m22 = m22;\n  m.d = m22;\n\n  m.m23 = -sinx * cosy;\n\n  m.m31 = sinx * sinz - cosx * siny * cosz;\n  m.m32 = sinx * cosz + cosx * siny * sinz;\n  m.m33 = cosx * cosy;\n\n  return m;\n};\n\n/**\n * Creates a new `CSSMatrix` for the rotation matrix and returns it.\n * This method is equivalent to the CSS `rotate3d()` function.\n *\n * https://developer.mozilla.org/en-US/docs/Web/CSS/transform-function/rotate3d\n *\n * @param x the `x-axis` vector length.\n * @param y the `y-axis` vector length.\n * @param z the `z-axis` vector length.\n * @param alpha the value in degrees of the rotation.\n * @return the resulted matrix.\n */\nconst RotateAxisAngle = (\n  x: number = 0,\n  y: number = 0,\n  z: number = 0,\n  alpha: number = 0,\n): CSSMatrix => {\n  const m = new CSSMatrix();\n  const length = Math.sqrt(x * x + y * y + z * z);\n\n  // if somehow we get to here, make sure we don't fail\n  if (length === 0) {\n    return m;\n  }\n\n  const X = x / length;\n  const Y = y / length;\n  const Z = z / length;\n\n  const angle = alpha * (Math.PI / 360);\n  const sinA = Math.sin(angle);\n  const cosA = Math.cos(angle);\n  const sinA2 = sinA * sinA;\n  const x2 = X * X;\n  const y2 = Y * Y;\n  const z2 = Z * Z;\n\n  const m11 = 1 - 2 * (y2 + z2) * sinA2;\n  m.m11 = m11;\n  m.a = m11;\n\n  const m12 = 2 * (X * Y * sinA2 + Z * sinA * cosA);\n  m.m12 = m12;\n  m.b = m12;\n\n  m.m13 = 2 * (X * Z * sinA2 - Y * sinA * cosA);\n\n  const m21 = 2 * (Y * X * sinA2 - Z * sinA * cosA);\n  m.m21 = m21;\n  m.c = m21;\n\n  const m22 = 1 - 2 * (z2 + x2) * sinA2;\n  m.m22 = m22;\n  m.d = m22;\n\n  m.m23 = 2 * (Y * Z * sinA2 + X * sinA * cosA);\n  m.m31 = 2 * (Z * X * sinA2 + Y * sinA * cosA);\n  m.m32 = 2 * (Z * Y * sinA2 - X * sinA * cosA);\n  m.m33 = 1 - 2 * (x2 + y2) * sinA2;\n\n  return m;\n};\n\n/**\n * Creates a new `CSSMatrix` for the scale matrix and returns it.\n * This method is equivalent to the CSS `scale3d()` function, except it doesn't\n * accept {x, y, z} transform origin parameters.\n *\n * https://developer.mozilla.org/en-US/docs/Web/CSS/transform-function/scale3d\n *\n * @param x the `x-axis` scale.\n * @param y the `y-axis` scale.\n * @param z the `z-axis` scale.\n * @return the resulted matrix.\n */\nconst Scale = (x: number, y: number, z: number): CSSMatrix => {\n  const m = new CSSMatrix();\n  m.m11 = x;\n  m.a = x;\n\n  m.m22 = y;\n  m.d = y;\n\n  m.m33 = z;\n  return m;\n};\n\n/**\n * Creates a new `CSSMatrix` for the shear of both the `x-axis` and`y-axis`\n * matrix and returns it. This method is equivalent to the CSS `skew()` function.\n *\n * https://developer.mozilla.org/en-US/docs/Web/CSS/transform-function/skew\n *\n * @param angleX the X-angle in degrees.\n * @param angleY the Y-angle in degrees.\n * @return the resulted matrix.\n */\nconst Skew = (angleX: number, angleY: number): CSSMatrix => {\n  const m = new CSSMatrix();\n  if (angleX) {\n    const radX = (angleX * Math.PI) / 180;\n    const tX = Math.tan(radX);\n    m.m21 = tX;\n    m.c = tX;\n  }\n  if (angleY) {\n    const radY = (angleY * Math.PI) / 180;\n    const tY = Math.tan(radY);\n    m.m12 = tY;\n    m.b = tY;\n  }\n  return m;\n};\n\n/**\n * Creates a new `CSSMatrix` for the shear of the `x-axis` rotation matrix and\n * returns it. This method is equivalent to the CSS `skewX()` function.\n *\n * https://developer.mozilla.org/en-US/docs/Web/CSS/transform-function/skewX\n *\n * @param angle the angle in degrees.\n * @return the resulted matrix.\n */\nconst SkewX = (angle: number): CSSMatrix => {\n  return Skew(angle, 0);\n};\n\n/**\n * Creates a new `CSSMatrix` for the shear of the `y-axis` rotation matrix and\n * returns it. This method is equivalent to the CSS `skewY()` function.\n *\n * https://developer.mozilla.org/en-US/docs/Web/CSS/transform-function/skewY\n *\n * @param angle the angle in degrees.\n * @return the resulted matrix.\n */\nconst SkewY = (angle: number): CSSMatrix => {\n  return Skew(0, angle);\n};\n\n/**\n * Creates a new `CSSMatrix` resulted from the multiplication of two matrixes\n * and returns it. Both matrixes are not changed.\n *\n * @param m1 the first matrix.\n * @param m2 the second matrix.\n * @return the resulted matrix.\n */\nconst Multiply = (\n  m1: CSSMatrix | DOMMatrix | JSONMatrix,\n  m2: CSSMatrix | DOMMatrix | JSONMatrix,\n): CSSMatrix => {\n  const m11 = m2.m11 * m1.m11 + m2.m12 * m1.m21 + m2.m13 * m1.m31 +\n    m2.m14 * m1.m41;\n  const m12 = m2.m11 * m1.m12 + m2.m12 * m1.m22 + m2.m13 * m1.m32 +\n    m2.m14 * m1.m42;\n  const m13 = m2.m11 * m1.m13 + m2.m12 * m1.m23 + m2.m13 * m1.m33 +\n    m2.m14 * m1.m43;\n  const m14 = m2.m11 * m1.m14 + m2.m12 * m1.m24 + m2.m13 * m1.m34 +\n    m2.m14 * m1.m44;\n\n  const m21 = m2.m21 * m1.m11 + m2.m22 * m1.m21 + m2.m23 * m1.m31 +\n    m2.m24 * m1.m41;\n  const m22 = m2.m21 * m1.m12 + m2.m22 * m1.m22 + m2.m23 * m1.m32 +\n    m2.m24 * m1.m42;\n  const m23 = m2.m21 * m1.m13 + m2.m22 * m1.m23 + m2.m23 * m1.m33 +\n    m2.m24 * m1.m43;\n  const m24 = m2.m21 * m1.m14 + m2.m22 * m1.m24 + m2.m23 * m1.m34 +\n    m2.m24 * m1.m44;\n\n  const m31 = m2.m31 * m1.m11 + m2.m32 * m1.m21 + m2.m33 * m1.m31 +\n    m2.m34 * m1.m41;\n  const m32 = m2.m31 * m1.m12 + m2.m32 * m1.m22 + m2.m33 * m1.m32 +\n    m2.m34 * m1.m42;\n  const m33 = m2.m31 * m1.m13 + m2.m32 * m1.m23 + m2.m33 * m1.m33 +\n    m2.m34 * m1.m43;\n  const m34 = m2.m31 * m1.m14 + m2.m32 * m1.m24 + m2.m33 * m1.m34 +\n    m2.m34 * m1.m44;\n\n  const m41 = m2.m41 * m1.m11 + m2.m42 * m1.m21 + m2.m43 * m1.m31 +\n    m2.m44 * m1.m41;\n  const m42 = m2.m41 * m1.m12 + m2.m42 * m1.m22 + m2.m43 * m1.m32 +\n    m2.m44 * m1.m42;\n  const m43 = m2.m41 * m1.m13 + m2.m42 * m1.m23 + m2.m43 * m1.m33 +\n    m2.m44 * m1.m43;\n  const m44 = m2.m41 * m1.m14 + m2.m42 * m1.m24 + m2.m43 * m1.m34 +\n    m2.m44 * m1.m44;\n\n  return fromArray([\n    m11,\n    m12,\n    m13,\n    m14,\n    m21,\n    m22,\n    m23,\n    m24,\n    m31,\n    m32,\n    m33,\n    m34,\n    m41,\n    m42,\n    m43,\n    m44,\n  ]);\n};\n\n/**\n * Creates and returns a new `DOMMatrix` compatible instance\n * with equivalent instance methods.\n *\n * @class CSSMatrix\n *\n * @author thednp <https://github.com/thednp>\n * @link homepage <https://thednp.github.io/dommatrix/>\n * @see https://developer.mozilla.org/en-US/docs/Web/API/DOMMatrix\n */\nexport default class CSSMatrix {\n  declare m11: number;\n  declare m12: number;\n  declare m13: number;\n  declare m14: number;\n  declare m21: number;\n  declare m22: number;\n  declare m23: number;\n  declare m24: number;\n  declare m31: number;\n  declare m32: number;\n  declare m33: number;\n  declare m34: number;\n  declare m41: number;\n  declare m42: number;\n  declare m43: number;\n  declare m44: number;\n  declare a: number;\n  declare b: number;\n  declare c: number;\n  declare d: number;\n  declare e: number;\n  declare f: number;\n  static Translate = Translate;\n  static Rotate = Rotate;\n  static RotateAxisAngle = RotateAxisAngle;\n  static Scale = Scale;\n  static SkewX = SkewX;\n  static SkewY = SkewY;\n  static Skew = Skew;\n  static Multiply = Multiply;\n  static fromArray = fromArray;\n  static fromMatrix = fromMatrix;\n  static fromString = fromString;\n  static toArray = toArray;\n  static isCompatibleArray = isCompatibleArray;\n  static isCompatibleObject = isCompatibleObject;\n\n  /**\n   * @constructor\n   * @param init accepts all parameter configurations:\n   * * valid CSS transform string,\n   * * CSSMatrix/DOMMatrix instance,\n   * * a 6/16 elements *Array*.\n   */\n  constructor(init?: CSSMatrixInput) {\n    // array 6\n    this.a = 1;\n    this.b = 0;\n    this.c = 0;\n    this.d = 1;\n    this.e = 0;\n    this.f = 0;\n    // array 16\n    this.m11 = 1;\n    this.m12 = 0;\n    this.m13 = 0;\n    this.m14 = 0;\n    this.m21 = 0;\n    this.m22 = 1;\n    this.m23 = 0;\n    this.m24 = 0;\n    this.m31 = 0;\n    this.m32 = 0;\n    this.m33 = 1;\n    this.m34 = 0;\n    this.m41 = 0;\n    this.m42 = 0;\n    this.m43 = 0;\n    this.m44 = 1;\n\n    if (init) {\n      return this.setMatrixValue(init);\n    }\n    return this;\n  }\n\n  /**\n   * A `Boolean` whose value is `true` if the matrix is the identity matrix. The identity\n   * matrix is one in which every value is 0 except those on the main diagonal from top-left\n   * to bottom-right corner (in other words, where the offsets in each direction are equal).\n   *\n   * @return the current property value\n   */\n  get isIdentity(): boolean {\n    return (\n      this.m11 === 1 &&\n      this.m12 === 0 &&\n      this.m13 === 0 &&\n      this.m14 === 0 &&\n      this.m21 === 0 &&\n      this.m22 === 1 &&\n      this.m23 === 0 &&\n      this.m24 === 0 &&\n      this.m31 === 0 &&\n      this.m32 === 0 &&\n      this.m33 === 1 &&\n      this.m34 === 0 &&\n      this.m41 === 0 &&\n      this.m42 === 0 &&\n      this.m43 === 0 &&\n      this.m44 === 1\n    );\n  }\n\n  /**\n   * A `Boolean` flag whose value is `true` if the matrix was initialized as a 2D matrix\n   * and `false` if the matrix is 3D.\n   *\n   * @return the current property value\n   */\n  get is2D(): boolean {\n    return (\n      this.m31 === 0 &&\n      this.m32 === 0 &&\n      this.m33 === 1 &&\n      this.m34 === 0 &&\n      this.m43 === 0 &&\n      this.m44 === 1\n    );\n  }\n\n  /**\n   * The `setMatrixValue` method replaces the existing matrix with one computed\n   * in the browser. EG: `matrix(1,0.25,-0.25,1,0,0)`\n   *\n   * The method accepts any *Array* values, the result of\n   * `DOMMatrix` instance method `toFloat64Array()` / `toFloat32Array()` calls\n   * or `CSSMatrix` instance method `toArray()`.\n   *\n   * This method expects valid *matrix()* / *matrix3d()* string values, as well\n   * as other transform functions like *translateX(10px)*.\n   *\n   * @param source\n   * @return the matrix instance\n   */\n  setMatrixValue(source?: CSSMatrixInput): CSSMatrix {\n    // CSS transform string source - TransformList first\n    if (typeof source === \"string\" && source.length && source !== \"none\") {\n      return fromString(source);\n    }\n\n    // [Array | Float[32/64]Array] come next\n    if (\n      Array.isArray(source) ||\n      source instanceof Float64Array ||\n      source instanceof Float32Array\n    ) {\n      return fromArray(source);\n    }\n\n    // new CSSMatrix(CSSMatrix | DOMMatrix | JSONMatrix) last\n    if (typeof source === \"object\") {\n      return fromMatrix(source);\n    }\n\n    return this;\n  }\n\n  /**\n   * Returns a *Float32Array* containing elements which comprise the matrix.\n   * The method can return either the 16 elements or the 6 elements\n   * depending on the value of the `is2D` parameter.\n   *\n   * @param is2D *Array* representation of the matrix\n   * @return an *Array* representation of the matrix\n   */\n  toFloat32Array(is2D?: boolean): Float32Array {\n    return Float32Array.from(toArray(this, is2D));\n  }\n\n  /**\n   * Returns a *Float64Array* containing elements which comprise the matrix.\n   * The method can return either the 16 elements or the 6 elements\n   * depending on the value of the `is2D` parameter.\n   *\n   * @param is2D *Array* representation of the matrix\n   * @return an *Array* representation of the matrix\n   */\n  toFloat64Array(is2D?: boolean): Float64Array {\n    return Float64Array.from(toArray(this, is2D));\n  }\n\n  /**\n   * Creates and returns a string representation of the matrix in `CSS` matrix syntax,\n   * using the appropriate `CSS` matrix notation.\n   *\n   * matrix3d *matrix3d(m11, m12, m13, m14, m21, ...)*\n   * matrix *matrix(a, b, c, d, e, f)*\n   *\n   * @return a string representation of the matrix\n   */\n  toString(): string {\n    const { is2D } = this;\n    const values = this.toFloat64Array(is2D).join(\", \");\n    const type = is2D ? \"matrix\" : \"matrix3d\";\n    return `${type}(${values})`;\n  }\n\n  /**\n   * Returns a JSON representation of the `CSSMatrix` instance, a standard *Object*\n   * that includes `{a,b,c,d,e,f}` and `{m11,m12,m13,..m44}` properties as well\n   * as the `is2D` & `isIdentity` properties.\n   *\n   * The result can also be used as a second parameter for the `fromMatrix` static method\n   * to load values into another matrix instance.\n   *\n   * @return an *Object* with all matrix values.\n   */\n  toJSON(): JSONMatrix {\n    const { is2D, isIdentity } = this;\n    return { ...this, is2D, isIdentity };\n  }\n\n  /**\n   * The Multiply method returns a new CSSMatrix which is the result of this\n   * matrix multiplied by the passed matrix, with the passed matrix to the right.\n   * This matrix is not modified.\n   *\n   * @param m2 CSSMatrix\n   * @return The resulted matrix.\n   */\n  multiply(m2: CSSMatrix | DOMMatrix | JSONMatrix): CSSMatrix {\n    return Multiply(this, m2);\n  }\n\n  /**\n   * The translate method returns a new matrix which is this matrix post\n   * multiplied by a translation matrix containing the passed values. If the z\n   * component is undefined, a 0 value is used in its place. This matrix is not\n   * modified.\n   *\n   * @param x X component of the translation value.\n   * @param y Y component of the translation value.\n   * @param z Z component of the translation value.\n   * @return The resulted matrix\n   */\n  translate(x: number, y?: number, z?: number): CSSMatrix {\n    return this.multiply(Translate(x, y ?? 0, z ?? 0));\n  }\n\n  /**\n   * The scale method returns a new matrix which is this matrix post multiplied by\n   * a scale matrix containing the passed values. If the z component is undefined,\n   * a 1 value is used in its place. If the y component is undefined, the x\n   * component value is used in its place. This matrix is not modified.\n   *\n   * @param x The X component of the scale value.\n   * @param y The Y component of the scale value.\n   * @param z The Z component of the scale value.\n   * @return The resulted matrix\n   */\n  scale(x: number, y?: number, z?: number): CSSMatrix {\n    return this.multiply(Scale(x, y ?? x, z ?? 1));\n  }\n\n  /**\n   * The rotate method returns a new matrix which is this matrix post multiplied\n   * by each of 3 rotation matrices about the major axes, first X, then Y, then Z.\n   * If the y and z components are undefined, the x value is used to rotate the\n   * object about the z axis, as though the vector (0,0,x) were passed. All\n   * rotation values are in degrees. This matrix is not modified.\n   *\n   * @param rx The X component of the rotation, or Z if Y and Z are null.\n   * @param ry The (optional) Y component of the rotation value.\n   * @param rz The (optional) Z component of the rotation value.\n   * @return The resulted matrix\n   */\n  rotate(rx: number, ry?: number, rz?: number): CSSMatrix {\n    let RX = rx;\n    let RY = ry || 0;\n    let RZ = rz || 0;\n\n    if (\n      typeof rx === \"number\" &&\n      typeof ry === \"undefined\" &&\n      typeof rz === \"undefined\"\n    ) {\n      RZ = RX;\n      RX = 0;\n      RY = 0;\n    }\n\n    return this.multiply(Rotate(RX, RY, RZ));\n  }\n\n  /**\n   * The rotateAxisAngle method returns a new matrix which is this matrix post\n   * multiplied by a rotation matrix with the given axis and `angle`. The right-hand\n   * rule is used to determine the direction of rotation. All rotation values are\n   * in degrees. This matrix is not modified.\n   *\n   * @param x The X component of the axis vector.\n   * @param y The Y component of the axis vector.\n   * @param z The Z component of the axis vector.\n   * @param angle The angle of rotation about the axis vector, in degrees.\n   * @return The resulted matrix\n   */\n  rotateAxisAngle(\n    x: number = 0,\n    y: number = 0,\n    z: number = 0,\n    angle: number = 0,\n  ): CSSMatrix {\n    if ([x, y, z, angle].some((n) => !Number.isFinite(n))) {\n      throw new TypeError(\"CSSMatrix: expecting 4 values\");\n    }\n\n    // Early return if zero-length vector\n    const length = Math.sqrt(x * x + y * y + z * z);\n    if (length === 0) {\n      return fromMatrix(this); // Return copy of this\n    }\n\n    return this.multiply(RotateAxisAngle(x, y, z, angle));\n  }\n\n  /**\n   * Specifies a skew transformation along the `x-axis` by the given angle.\n   * This matrix is not modified.\n   *\n   * @param angle The angle amount in degrees to skew.\n   * @return The resulted matrix\n   */\n  skewX(angle: number): CSSMatrix {\n    return this.multiply(SkewX(angle));\n  }\n\n  /**\n   * Specifies a skew transformation along the `y-axis` by the given angle.\n   * This matrix is not modified.\n   *\n   * @param angle The angle amount in degrees to skew.\n   * @return The resulted matrix\n   */\n  skewY(angle: number): CSSMatrix {\n    return this.multiply(SkewY(angle));\n  }\n\n  /**\n   * Specifies a skew transformation along both the `x-axis` and `y-axis`.\n   * This matrix is not modified.\n   *\n   * @param angleX The X-angle amount in degrees to skew.\n   * @param angleY The angle amount in degrees to skew.\n   * @return The resulted matrix\n   */\n  skew(angleX: number, angleY: number): CSSMatrix {\n    return this.multiply(Skew(angleX, angleY));\n  }\n\n  /**\n   * Modifies the current matrix by post-multiplying it with another matrix.\n   * This is the mutable version of multiply().\n   *\n   * @param m2 The matrix to multiply with\n   * @return this matrix (modified)\n   */\n  multiplySelf(m2: CSSMatrix | DOMMatrix | JSONMatrix): this {\n    const result = Multiply(this, m2);\n    Object.assign(this, result);\n    return this;\n  }\n\n  /**\n   * Modifies the current matrix by post-multiplying it with a translation matrix.\n   * This is the mutable version of translate().\n   *\n   * @param x X component of the translation value.\n   * @param y Y component of the translation value.\n   * @param z Z component of the translation value.\n   * @return this matrix (modified)\n   */\n  translateSelf(x: number, y?: number, z?: number): this {\n    return this.multiplySelf(Translate(x, y ?? 0, z ?? 0));\n  }\n\n  /**\n   * Modifies the current matrix by post-multiplying it with a scale matrix.\n   * This is the mutable version of scale().\n   *\n   * @param x The X component of the scale value.\n   * @param y The Y component of the scale value.\n   * @param z The Z component of the scale value.\n   * @return this matrix (modified)\n   */\n  scaleSelf(x: number, y?: number, z?: number): this {\n    return this.multiplySelf(Scale(x, y ?? x, z ?? 1));\n  }\n\n  /**\n   * Modifies the current matrix by post-multiplying it with a rotation matrix.\n   * This is the mutable version of rotate().\n   *\n   * @param rx The X component of the rotation, or Z if Y and Z are null.\n   * @param ry The (optional) Y component of the rotation value.\n   * @param rz The (optional) Z component of the rotation value.\n   * @return this matrix (modified)\n   */\n  rotateSelf(rx: number, ry?: number, rz?: number): this {\n    let RX = rx;\n    let RY = ry || 0;\n    let RZ = rz || 0;\n\n    if (\n      typeof rx === \"number\" &&\n      typeof ry === \"undefined\" &&\n      typeof rz === \"undefined\"\n    ) {\n      RZ = RX;\n      RX = 0;\n      RY = 0;\n    }\n\n    return this.multiplySelf(Rotate(RX, RY, RZ));\n  }\n\n  /**\n   * Modifies the current matrix by post-multiplying it with a rotation matrix\n   * with the given axis and angle.\n   * This is the mutable version of rotateAxisAngle().\n   *\n   * @param x The X component of the axis vector.\n   * @param y The Y component of the axis vector.\n   * @param z The Z component of the axis vector.\n   * @param angle The angle of rotation about the axis vector, in degrees.\n   * @return this matrix (modified)\n   */\n  rotateAxisAngleSelf(\n    x: number = 0,\n    y: number = 0,\n    z: number = 0,\n    angle: number = 0,\n  ): this {\n    if ([x, y, z, angle].some((n) => !Number.isFinite(n))) {\n      throw new TypeError(\"CSSMatrix: expecting 4 values\");\n    }\n\n    // Early return if zero-length vector\n    const length = Math.sqrt(x * x + y * y + z * z);\n    if (length === 0) {\n      return this;\n    }\n    return this.multiplySelf(RotateAxisAngle(x, y, z, angle));\n  }\n\n  /**\n   * Modifies the current matrix by post-multiplying it with a skewX matrix.\n   * This is the mutable version of skewX().\n   *\n   * @param angle The angle amount in degrees to skew.\n   * @return this matrix (modified)\n   */\n  skewXSelf(angle: number): this {\n    return this.multiplySelf(SkewX(angle));\n  }\n\n  /**\n   * Modifies the current matrix by post-multiplying it with a skewY matrix.\n   * This is the mutable version of skewY().\n   *\n   * @param angle The angle amount in degrees to skew.\n   * @return this matrix (modified)\n   */\n  skewYSelf(angle: number): this {\n    return this.multiplySelf(SkewY(angle));\n  }\n\n  /**\n   * Modifies the current matrix by post-multiplying it with a skew matrix.\n   * This is the mutable version of skew().\n   *\n   * @param angleX The X-angle amount in degrees to skew.\n   * @param angleY The Y-angle amount in degrees to skew.\n   * @return this matrix (modified)\n   */\n  skewSelf(angleX: number, angleY: number): this {\n    return this.multiplySelf(Skew(angleX, angleY));\n  }\n\n  /**\n   * Transforms a specified vector using the matrix, returning a new\n   * {x,y,z,w} Tuple *Object* comprising the transformed vector.\n   * Neither the matrix nor the original vector are altered.\n   *\n   * The method is equivalent with `transformPoint()` method\n   * of the `DOMMatrix` constructor.\n   *\n   * @param t Tuple with `{x,y,z,w}` components\n   * @return the resulting Tuple\n   */\n  transformPoint(t: PointTuple | DOMPoint): PointTuple | DOMPoint {\n    const x = this.m11 * t.x + this.m21 * t.y + this.m31 * t.z + this.m41 * t.w;\n    const y = this.m12 * t.x + this.m22 * t.y + this.m32 * t.z + this.m42 * t.w;\n    const z = this.m13 * t.x + this.m23 * t.y + this.m33 * t.z + this.m43 * t.w;\n    const w = this.m14 * t.x + this.m24 * t.y + this.m34 * t.z + this.m44 * t.w;\n\n    return t instanceof DOMPoint ? new DOMPoint(x, y, z, w) : {\n      x,\n      y,\n      z,\n      w,\n    };\n  }\n}\n"],"mappings":"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"}