{"version":3,"file":"dommatrix.mjs","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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"}