{"version":3,"file":"dommatrix.cjs","sources":["../src/index.ts"],"sourcesContent":["import type {\n  CSSMatrixInput,\n  JSONMatrix,\n  Matrix,\n  Matrix3d,\n  PointTuple,\n} from \"./types\";\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(m)\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  let 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        ) => (n.includes(\"rad\")\n          ? parseFloat(n) * (180 / Math.PI)\n          : 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 (\n        prop === \"perspective\" && x && [y, z].every((n) => n === undefined)\n      ) {\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 = m.multiply(fromArray(values as Matrix | Matrix3d));\n        // 3 values expected\n      } else if (\n        prop === \"translate3d\" && xyz.every((n) => !Number.isNaN(+n))\n      ) {\n        m = m.translate(x, y, z);\n        // single/double number value(s) expected\n      } else if (prop === \"translate\" && x && z === undefined) {\n        m = m.translate(x, y || 0, 0);\n        // all 4 values expected\n      } else if (\n        prop === \"rotate3d\" && xyza.every((n) => !Number.isNaN(+n)) && a\n      ) {\n        m = m.rotateAxisAngle(x, y, z, a);\n        // single value expected\n      } else if (\n        prop === \"rotate\" && x && [y, z].every((n) => n === undefined)\n      ) {\n        m = m.rotate(0, 0, x);\n        // 3 values expected\n      } else if (\n        prop === \"scale3d\" && xyz.every((n) => !Number.isNaN(+n)) &&\n        xyz.some((n) => n !== 1)\n      ) {\n        m = m.scale(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\" && !Number.isNaN(x) && (x !== 1 || y !== 1) &&\n        z === undefined\n      ) {\n        const nosy = Number.isNaN(+y);\n        const sy = nosy ? x : y;\n        m = m.scale(x, sy, 1);\n        // single/double value expected\n      } else if (\n        prop === \"skew\" && (x || (!Number.isNaN(x) && y)) && z === undefined\n      ) {\n        m = m.skew(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          m = m[prop](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 axeValues: [number, number, number] = [\n            idx === 0 ? x : def,\n            idx === 1 ? x : def,\n            idx === 2 ? x : def,\n          ];\n          m = m[fn](...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,\n  y: number,\n  z: number,\n  alpha: number,\n): CSSMatrix => {\n  const m = new CSSMatrix();\n  const length = Math.sqrt(x * x + y * y + z * z);\n\n  if (length === 0) {\n    // bad vector length, return identity\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.\n *\n * @class CSSMatrix\n *\n * @author thednp <https://github.com/thednp/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 this.m31 === 0 && this.m32 === 0 && this.m33 === 1 &&\n      this.m34 === 0 && this.m43 === 0 && this.m44 === 1;\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) || 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    const X = x;\n    let Y = y;\n    let Z = z;\n    if (typeof Y === \"undefined\") Y = 0;\n    if (typeof Z === \"undefined\") Z = 0;\n    return Multiply(this, Translate(X, Y, Z));\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    const X = x;\n    let Y = y;\n    let Z = z;\n    if (typeof Y === \"undefined\") Y = x;\n    if (typeof Z === \"undefined\") Z = 1; // Z must be 1 if undefined\n\n    return Multiply(this, Scale(X, Y, Z));\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\" && typeof ry === \"undefined\" &&\n      typeof rz === \"undefined\"\n    ) {\n      RZ = RX;\n      RX = 0;\n      RY = 0;\n    }\n\n    return Multiply(this, 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(x: number, y: number, z: number, angle: number): CSSMatrix {\n    if ([x, y, z, angle].some((n) => Number.isNaN(+n))) {\n      throw new TypeError(\"CSSMatrix: expecting 4 values\");\n    }\n    return Multiply(this, 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 Multiply(this, 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 Multiply(this, 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 Multiply(this, 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"],"names":["JSON_MATRIX","isCompatibleArray","array","x","isCompatibleObject","object","CSSMatrix","k","fromArray","m","a","m11","m12","m13","m14","m21","m22","m23","m24","m31","m32","m33","m34","m41","m42","m43","m44","M11","M12","M21","M22","M41","M42","fromMatrix","fromString","source","str","invalidStringError","f","tf","prop","value","components","n","y","z","xyz","xyza","values","sy","p","fn","axis","idx","def","axeValues","toArray","is2D","Translate","Rotate","rx","ry","rz","degToRad","radX","radY","radZ","cosx","sinx","cosy","siny","cosz","sinz","RotateAxisAngle","alpha","length","X","Y","Z","angle","sinA","cosA","sinA2","x2","y2","z2","Scale","Skew","angleX","angleY","tX","tY","SkewX","SkewY","Multiply","m1","m2","init","isIdentity","RX","RY","RZ","w","__publicField"],"mappings":"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"}