diff --git a/README.md b/README.md
index cc0f87e..952841c 100755
--- a/README.md
+++ b/README.md
@@ -5,7 +5,7 @@
[![ci](https://github.com/thednp/dommatrix/actions/workflows/ci.yml/badge.svg)](https://github.com/thednp/dommatrix/actions/workflows/ci.yml)
[![jsDeliver](https://data.jsdelivr.com/v1/package/npm/@thednp/dommatrix/badge)](https://www.jsdelivr.com/package/npm/@thednp/dommatrix)
[![typescript version](https://img.shields.io/badge/typescript-5.7.2-brightgreen)](https://www.typescriptlang.org/)
-[![vitest version](https://img.shields.io/badge/vitest-2.1.5-brightgreen)](https://vitest.dev/)
+[![vitest version](https://img.shields.io/badge/vitest-2.1.8-brightgreen)](https://vitest.dev/)
[![vite version](https://img.shields.io/badge/vite-5.4.11-brightgreen)](https://vitejs.dev/)
A TypeScript sourced [DOMMatrix](https://developer.mozilla.org/en-US/docs/Web/API/DOMMatrix) shim for **Node.js** apps and legacy browsers. Since this source is modernized, legacy browsers might need some additional shims.
diff --git a/dist/dommatrix.cjs b/dist/dommatrix.cjs
index 98df5a6..f7c3bb2 100644
--- a/dist/dommatrix.cjs
+++ b/dist/dommatrix.cjs
@@ -1,3 +1,3 @@
"use strict";var Z=Object.defineProperty;var z=(s,t,e)=>t in s?Z(s,t,{enumerable:!0,configurable:!0,writable:!0,value:e}):s[t]=e;var p=(s,t,e)=>z(s,typeof t!="symbol"?t+"":t,e);const $={a:1,b:0,c:0,d:1,e:0,f:0,m11:1,m12:0,m13:0,m14:0,m21:0,m22:1,m23:0,m24:0,m31:0,m32:0,m33:1,m34:0,m41:0,m42:0,m43:0,m44:1,is2D:!0,isIdentity:!0},E=s=>(s instanceof Float64Array||s instanceof Float32Array||Array.isArray(s)&&s.every(t=>typeof t=="number"))&&[6,16].some(t=>s.length===t),P=s=>s instanceof DOMMatrix||s instanceof y||typeof s=="object"&&Object.keys($).every(t=>s&&t in s),g=s=>{const t=new y,e=Array.from(s);if(!E(e))throw TypeError(`CSSMatrix: "${e.join(",")}" must be an array with 6/16 numbers.`);// istanbul ignore else @preserve
-if(e.length===16){const[n,i,r,a,l,m,h,c,u,f,w,o,d,A,M,b]=e;t.m11=n,t.a=n,t.m21=l,t.c=l,t.m31=u,t.m41=d,t.e=d,t.m12=i,t.b=i,t.m22=m,t.d=m,t.m32=f,t.m42=A,t.f=A,t.m13=r,t.m23=h,t.m33=w,t.m43=M,t.m14=a,t.m24=c,t.m34=o,t.m44=b}else if(e.length===6){const[n,i,r,a,l,m]=e;t.m11=n,t.a=n,t.m12=i,t.b=i,t.m21=r,t.c=r,t.m22=a,t.d=a,t.m41=l,t.e=l,t.m42=m,t.f=m}return t},X=s=>{if(P(s))return g([s.m11,s.m12,s.m13,s.m14,s.m21,s.m22,s.m23,s.m24,s.m31,s.m32,s.m33,s.m34,s.m41,s.m42,s.m43,s.m44]);throw TypeError(`CSSMatrix: "${JSON.stringify(s)}" is not a DOMMatrix / CSSMatrix / JSON compatible object.`)},O=s=>{if(typeof s!="string")throw TypeError(`CSSMatrix: "${JSON.stringify(s)}" is not a string.`);const t=String(s).replace(/\s/g,"");let e=new y;const n=`CSSMatrix: invalid transform string "${s}"`;return t.split(")").filter(i=>i).forEach(i=>{const[r,a]=i.split("(");if(!a)throw TypeError(n);const l=a.split(",").map(o=>o.includes("rad")?parseFloat(o)*(180/Math.PI):parseFloat(o)),[m,h,c,u]=l,f=[m,h,c],w=[m,h,c,u];if(r==="perspective"&&m&&[h,c].every(o=>o===void 0))e.m34=-1/m;else if(r.includes("matrix")&&[6,16].includes(l.length)&&l.every(o=>!Number.isNaN(+o))){const o=l.map(d=>Math.abs(d)<1e-6?0:d);e=e.multiply(g(o))}else if(r==="translate3d"&&f.every(o=>!Number.isNaN(+o)))e=e.translate(m,h,c);else if(r==="translate"&&m&&c===void 0)e=e.translate(m,h||0,0);else if(r==="rotate3d"&&w.every(o=>!Number.isNaN(+o))&&u)e=e.rotateAxisAngle(m,h,c,u);else if(r==="rotate"&&m&&[h,c].every(o=>o===void 0))e=e.rotate(0,0,m);else if(r==="scale3d"&&f.every(o=>!Number.isNaN(+o))&&f.some(o=>o!==1))e=e.scale(m,h,c);else if(r==="scale"&&!Number.isNaN(m)&&m!==1&&c===void 0){const d=Number.isNaN(+h)?m:h;e=e.scale(m,d,1)}else if(r==="skew"&&(m||!Number.isNaN(m)&&h)&&c===void 0)e=e.skew(m,h||0);else if(["translate","rotate","scale","skew"].some(o=>r.includes(o))&&/[XYZ]/.test(r)&&m&&[h,c].every(o=>o===void 0))if(r==="skewX"||r==="skewY")e=e[r](m);else{const o=r.replace(/[XYZ]/,""),d=r.replace(o,""),A=["X","Y","Z"].indexOf(d),M=o==="scale"?1:0,b=[A===0?m:M,A===1?m:M,A===2?m:M];e=e[o](...b)}else throw TypeError(n)}),e},x=(s,t)=>t?[s.a,s.b,s.c,s.d,s.e,s.f]:[s.m11,s.m12,s.m13,s.m14,s.m21,s.m22,s.m23,s.m24,s.m31,s.m32,s.m33,s.m34,s.m41,s.m42,s.m43,s.m44],Y=(s,t,e)=>{const n=new y;return n.m41=s,n.e=s,n.m42=t,n.f=t,n.m43=e,n},F=(s,t,e)=>{const n=new y,i=Math.PI/180,r=s*i,a=t*i,l=e*i,m=Math.cos(r),h=-Math.sin(r),c=Math.cos(a),u=-Math.sin(a),f=Math.cos(l),w=-Math.sin(l),o=c*f,d=-c*w;n.m11=o,n.a=o,n.m12=d,n.b=d,n.m13=u;const A=h*u*f+m*w;n.m21=A,n.c=A;const M=m*f-h*u*w;return n.m22=M,n.d=M,n.m23=-h*c,n.m31=h*w-m*u*f,n.m32=h*f+m*u*w,n.m33=m*c,n},T=(s,t,e,n)=>{const i=new y,r=Math.sqrt(s*s+t*t+e*e);if(r===0)return i;const a=s/r,l=t/r,m=e/r,h=n*(Math.PI/360),c=Math.sin(h),u=Math.cos(h),f=c*c,w=a*a,o=l*l,d=m*m,A=1-2*(o+d)*f;i.m11=A,i.a=A;const M=2*(a*l*f+m*c*u);i.m12=M,i.b=M,i.m13=2*(a*m*f-l*c*u);const b=2*(l*a*f-m*c*u);i.m21=b,i.c=b;const k=1-2*(d+w)*f;return i.m22=k,i.d=k,i.m23=2*(l*m*f+a*c*u),i.m31=2*(m*a*f+l*c*u),i.m32=2*(m*l*f-a*c*u),i.m33=1-2*(w+o)*f,i},I=(s,t,e)=>{const n=new y;return n.m11=s,n.a=s,n.m22=t,n.d=t,n.m33=e,n},v=(s,t)=>{const e=new y;if(s){const n=s*Math.PI/180,i=Math.tan(n);e.m21=i,e.c=i}if(t){const n=t*Math.PI/180,i=Math.tan(n);e.m12=i,e.b=i}return e},R=s=>v(s,0),D=s=>v(0,s),N=(s,t)=>{const e=t.m11*s.m11+t.m12*s.m21+t.m13*s.m31+t.m14*s.m41,n=t.m11*s.m12+t.m12*s.m22+t.m13*s.m32+t.m14*s.m42,i=t.m11*s.m13+t.m12*s.m23+t.m13*s.m33+t.m14*s.m43,r=t.m11*s.m14+t.m12*s.m24+t.m13*s.m34+t.m14*s.m44,a=t.m21*s.m11+t.m22*s.m21+t.m23*s.m31+t.m24*s.m41,l=t.m21*s.m12+t.m22*s.m22+t.m23*s.m32+t.m24*s.m42,m=t.m21*s.m13+t.m22*s.m23+t.m23*s.m33+t.m24*s.m43,h=t.m21*s.m14+t.m22*s.m24+t.m23*s.m34+t.m24*s.m44,c=t.m31*s.m11+t.m32*s.m21+t.m33*s.m31+t.m34*s.m41,u=t.m31*s.m12+t.m32*s.m22+t.m33*s.m32+t.m34*s.m42,f=t.m31*s.m13+t.m32*s.m23+t.m33*s.m33+t.m34*s.m43,w=t.m31*s.m14+t.m32*s.m24+t.m33*s.m34+t.m34*s.m44,o=t.m41*s.m11+t.m42*s.m21+t.m43*s.m31+t.m44*s.m41,d=t.m41*s.m12+t.m42*s.m22+t.m43*s.m32+t.m44*s.m42,A=t.m41*s.m13+t.m42*s.m23+t.m43*s.m33+t.m44*s.m43,M=t.m41*s.m14+t.m42*s.m24+t.m43*s.m34+t.m44*s.m44;return g([e,n,i,r,a,l,m,h,c,u,f,w,o,d,A,M])};class y{constructor(t){return this.a=1,this.b=0,this.c=0,this.d=1,this.e=0,this.f=0,this.m11=1,this.m12=0,this.m13=0,this.m14=0,this.m21=0,this.m22=1,this.m23=0,this.m24=0,this.m31=0,this.m32=0,this.m33=1,this.m34=0,this.m41=0,this.m42=0,this.m43=0,this.m44=1,t?this.setMatrixValue(t):this}get isIdentity(){return this.m11===1&&this.m12===0&&this.m13===0&&this.m14===0&&this.m21===0&&this.m22===1&&this.m23===0&&this.m24===0&&this.m31===0&&this.m32===0&&this.m33===1&&this.m34===0&&this.m41===0&&this.m42===0&&this.m43===0&&this.m44===1}get is2D(){return this.m31===0&&this.m32===0&&this.m33===1&&this.m34===0&&this.m43===0&&this.m44===1}setMatrixValue(t){return typeof t=="string"&&t.length&&t!=="none"?O(t):Array.isArray(t)||t instanceof Float64Array||t instanceof Float32Array?g(t):typeof t=="object"?X(t):this}toFloat32Array(t){return Float32Array.from(x(this,t))}toFloat64Array(t){return Float64Array.from(x(this,t))}toString(){const{is2D:t}=this,e=this.toFloat64Array(t).join(", ");return`${t?"matrix":"matrix3d"}(${e})`}toJSON(){const{is2D:t,isIdentity:e}=this;return{...this,is2D:t,isIdentity:e}}multiply(t){return N(this,t)}translate(t,e,n){const i=t;let r=e,a=n;return typeof r>"u"&&(r=0),typeof a>"u"&&(a=0),N(this,Y(i,r,a))}scale(t,e,n){const i=t;let r=e,a=n;return typeof r>"u"&&(r=t),typeof a>"u"&&(a=1),N(this,I(i,r,a))}rotate(t,e,n){let i=t,r=e||0,a=n||0;return typeof t=="number"&&typeof e>"u"&&typeof n>"u"&&(a=i,i=0,r=0),N(this,F(i,r,a))}rotateAxisAngle(t,e,n,i){if([t,e,n,i].some(r=>Number.isNaN(+r)))throw new TypeError("CSSMatrix: expecting 4 values");return N(this,T(t,e,n,i))}skewX(t){return N(this,R(t))}skewY(t){return N(this,D(t))}skew(t,e){return N(this,v(t,e))}transformPoint(t){const e=this.m11*t.x+this.m21*t.y+this.m31*t.z+this.m41*t.w,n=this.m12*t.x+this.m22*t.y+this.m32*t.z+this.m42*t.w,i=this.m13*t.x+this.m23*t.y+this.m33*t.z+this.m43*t.w,r=this.m14*t.x+this.m24*t.y+this.m34*t.z+this.m44*t.w;return t instanceof DOMPoint?new DOMPoint(e,n,i,r):{x:e,y:n,z:i,w:r}}}p(y,"Translate",Y),p(y,"Rotate",F),p(y,"RotateAxisAngle",T),p(y,"Scale",I),p(y,"SkewX",R),p(y,"SkewY",D),p(y,"Skew",v),p(y,"Multiply",N),p(y,"fromArray",g),p(y,"fromMatrix",X),p(y,"fromString",O),p(y,"toArray",x),p(y,"isCompatibleArray",E),p(y,"isCompatibleObject",P);module.exports=y;
+if(e.length===16){const[n,i,r,a,l,m,h,c,u,f,w,o,d,A,M,b]=e;t.m11=n,t.a=n,t.m21=l,t.c=l,t.m31=u,t.m41=d,t.e=d,t.m12=i,t.b=i,t.m22=m,t.d=m,t.m32=f,t.m42=A,t.f=A,t.m13=r,t.m23=h,t.m33=w,t.m43=M,t.m14=a,t.m24=c,t.m34=o,t.m44=b}else if(e.length===6){const[n,i,r,a,l,m]=e;t.m11=n,t.a=n,t.m12=i,t.b=i,t.m21=r,t.c=r,t.m22=a,t.d=a,t.m41=l,t.e=l,t.m42=m,t.f=m}return t},X=s=>{if(P(s))return g([s.m11,s.m12,s.m13,s.m14,s.m21,s.m22,s.m23,s.m24,s.m31,s.m32,s.m33,s.m34,s.m41,s.m42,s.m43,s.m44]);throw TypeError(`CSSMatrix: "${JSON.stringify(s)}" is not a DOMMatrix / CSSMatrix / JSON compatible object.`)},O=s=>{if(typeof s!="string")throw TypeError(`CSSMatrix: "${JSON.stringify(s)}" is not a string.`);const t=String(s).replace(/\s/g,"");let e=new y;const n=`CSSMatrix: invalid transform string "${s}"`;return t.split(")").filter(i=>i).forEach(i=>{const[r,a]=i.split("(");if(!a)throw TypeError(n);const l=a.split(",").map(o=>o.includes("rad")?parseFloat(o)*(180/Math.PI):parseFloat(o)),[m,h,c,u]=l,f=[m,h,c],w=[m,h,c,u];if(r==="perspective"&&m&&[h,c].every(o=>o===void 0))e.m34=-1/m;else if(r.includes("matrix")&&[6,16].includes(l.length)&&l.every(o=>!Number.isNaN(+o))){const o=l.map(d=>Math.abs(d)<1e-6?0:d);e=e.multiply(g(o))}else if(r==="translate3d"&&f.every(o=>!Number.isNaN(+o)))e=e.translate(m,h,c);else if(r==="translate"&&m&&c===void 0)e=e.translate(m,h||0,0);else if(r==="rotate3d"&&w.every(o=>!Number.isNaN(+o))&&u)e=e.rotateAxisAngle(m,h,c,u);else if(r==="rotate"&&m&&[h,c].every(o=>o===void 0))e=e.rotate(0,0,m);else if(r==="scale3d"&&f.every(o=>!Number.isNaN(+o))&&f.some(o=>o!==1))e=e.scale(m,h,c);else if(r==="scale"&&!Number.isNaN(m)&&[m,h].some(o=>o!==1)&&c===void 0){const d=Number.isNaN(+h)?m:h;e=e.scale(m,d,1)}else if(r==="skew"&&(m||!Number.isNaN(m)&&h)&&c===void 0)e=e.skew(m,h||0);else if(["translate","rotate","scale","skew"].some(o=>r.includes(o))&&/[XYZ]/.test(r)&&m&&[h,c].every(o=>o===void 0))if(r==="skewX"||r==="skewY")e=e[r](m);else{const o=r.replace(/[XYZ]/,""),d=r.replace(o,""),A=["X","Y","Z"].indexOf(d),M=o==="scale"?1:0,b=[A===0?m:M,A===1?m:M,A===2?m:M];e=e[o](...b)}else throw TypeError(n)}),e},x=(s,t)=>t?[s.a,s.b,s.c,s.d,s.e,s.f]:[s.m11,s.m12,s.m13,s.m14,s.m21,s.m22,s.m23,s.m24,s.m31,s.m32,s.m33,s.m34,s.m41,s.m42,s.m43,s.m44],Y=(s,t,e)=>{const n=new y;return n.m41=s,n.e=s,n.m42=t,n.f=t,n.m43=e,n},F=(s,t,e)=>{const n=new y,i=Math.PI/180,r=s*i,a=t*i,l=e*i,m=Math.cos(r),h=-Math.sin(r),c=Math.cos(a),u=-Math.sin(a),f=Math.cos(l),w=-Math.sin(l),o=c*f,d=-c*w;n.m11=o,n.a=o,n.m12=d,n.b=d,n.m13=u;const A=h*u*f+m*w;n.m21=A,n.c=A;const M=m*f-h*u*w;return n.m22=M,n.d=M,n.m23=-h*c,n.m31=h*w-m*u*f,n.m32=h*f+m*u*w,n.m33=m*c,n},T=(s,t,e,n)=>{const i=new y,r=Math.sqrt(s*s+t*t+e*e);if(r===0)return i;const a=s/r,l=t/r,m=e/r,h=n*(Math.PI/360),c=Math.sin(h),u=Math.cos(h),f=c*c,w=a*a,o=l*l,d=m*m,A=1-2*(o+d)*f;i.m11=A,i.a=A;const M=2*(a*l*f+m*c*u);i.m12=M,i.b=M,i.m13=2*(a*m*f-l*c*u);const b=2*(l*a*f-m*c*u);i.m21=b,i.c=b;const k=1-2*(d+w)*f;return i.m22=k,i.d=k,i.m23=2*(l*m*f+a*c*u),i.m31=2*(m*a*f+l*c*u),i.m32=2*(m*l*f-a*c*u),i.m33=1-2*(w+o)*f,i},I=(s,t,e)=>{const n=new y;return n.m11=s,n.a=s,n.m22=t,n.d=t,n.m33=e,n},v=(s,t)=>{const e=new y;if(s){const n=s*Math.PI/180,i=Math.tan(n);e.m21=i,e.c=i}if(t){const n=t*Math.PI/180,i=Math.tan(n);e.m12=i,e.b=i}return e},R=s=>v(s,0),D=s=>v(0,s),N=(s,t)=>{const e=t.m11*s.m11+t.m12*s.m21+t.m13*s.m31+t.m14*s.m41,n=t.m11*s.m12+t.m12*s.m22+t.m13*s.m32+t.m14*s.m42,i=t.m11*s.m13+t.m12*s.m23+t.m13*s.m33+t.m14*s.m43,r=t.m11*s.m14+t.m12*s.m24+t.m13*s.m34+t.m14*s.m44,a=t.m21*s.m11+t.m22*s.m21+t.m23*s.m31+t.m24*s.m41,l=t.m21*s.m12+t.m22*s.m22+t.m23*s.m32+t.m24*s.m42,m=t.m21*s.m13+t.m22*s.m23+t.m23*s.m33+t.m24*s.m43,h=t.m21*s.m14+t.m22*s.m24+t.m23*s.m34+t.m24*s.m44,c=t.m31*s.m11+t.m32*s.m21+t.m33*s.m31+t.m34*s.m41,u=t.m31*s.m12+t.m32*s.m22+t.m33*s.m32+t.m34*s.m42,f=t.m31*s.m13+t.m32*s.m23+t.m33*s.m33+t.m34*s.m43,w=t.m31*s.m14+t.m32*s.m24+t.m33*s.m34+t.m34*s.m44,o=t.m41*s.m11+t.m42*s.m21+t.m43*s.m31+t.m44*s.m41,d=t.m41*s.m12+t.m42*s.m22+t.m43*s.m32+t.m44*s.m42,A=t.m41*s.m13+t.m42*s.m23+t.m43*s.m33+t.m44*s.m43,M=t.m41*s.m14+t.m42*s.m24+t.m43*s.m34+t.m44*s.m44;return g([e,n,i,r,a,l,m,h,c,u,f,w,o,d,A,M])};class y{constructor(t){return this.a=1,this.b=0,this.c=0,this.d=1,this.e=0,this.f=0,this.m11=1,this.m12=0,this.m13=0,this.m14=0,this.m21=0,this.m22=1,this.m23=0,this.m24=0,this.m31=0,this.m32=0,this.m33=1,this.m34=0,this.m41=0,this.m42=0,this.m43=0,this.m44=1,t?this.setMatrixValue(t):this}get isIdentity(){return this.m11===1&&this.m12===0&&this.m13===0&&this.m14===0&&this.m21===0&&this.m22===1&&this.m23===0&&this.m24===0&&this.m31===0&&this.m32===0&&this.m33===1&&this.m34===0&&this.m41===0&&this.m42===0&&this.m43===0&&this.m44===1}get is2D(){return this.m31===0&&this.m32===0&&this.m33===1&&this.m34===0&&this.m43===0&&this.m44===1}setMatrixValue(t){return typeof t=="string"&&t.length&&t!=="none"?O(t):Array.isArray(t)||t instanceof Float64Array||t instanceof Float32Array?g(t):typeof t=="object"?X(t):this}toFloat32Array(t){return Float32Array.from(x(this,t))}toFloat64Array(t){return Float64Array.from(x(this,t))}toString(){const{is2D:t}=this,e=this.toFloat64Array(t).join(", ");return`${t?"matrix":"matrix3d"}(${e})`}toJSON(){const{is2D:t,isIdentity:e}=this;return{...this,is2D:t,isIdentity:e}}multiply(t){return N(this,t)}translate(t,e,n){const i=t;let r=e,a=n;return typeof r>"u"&&(r=0),typeof a>"u"&&(a=0),N(this,Y(i,r,a))}scale(t,e,n){const i=t;let r=e,a=n;return typeof r>"u"&&(r=t),typeof a>"u"&&(a=1),N(this,I(i,r,a))}rotate(t,e,n){let i=t,r=e||0,a=n||0;return typeof t=="number"&&typeof e>"u"&&typeof n>"u"&&(a=i,i=0,r=0),N(this,F(i,r,a))}rotateAxisAngle(t,e,n,i){if([t,e,n,i].some(r=>Number.isNaN(+r)))throw new TypeError("CSSMatrix: expecting 4 values");return N(this,T(t,e,n,i))}skewX(t){return N(this,R(t))}skewY(t){return N(this,D(t))}skew(t,e){return N(this,v(t,e))}transformPoint(t){const e=this.m11*t.x+this.m21*t.y+this.m31*t.z+this.m41*t.w,n=this.m12*t.x+this.m22*t.y+this.m32*t.z+this.m42*t.w,i=this.m13*t.x+this.m23*t.y+this.m33*t.z+this.m43*t.w,r=this.m14*t.x+this.m24*t.y+this.m34*t.z+this.m44*t.w;return t instanceof DOMPoint?new DOMPoint(e,n,i,r):{x:e,y:n,z:i,w:r}}}p(y,"Translate",Y),p(y,"Rotate",F),p(y,"RotateAxisAngle",T),p(y,"Scale",I),p(y,"SkewX",R),p(y,"SkewY",D),p(y,"Skew",v),p(y,"Multiply",N),p(y,"fromArray",g),p(y,"fromMatrix",X),p(y,"fromString",O),p(y,"toArray",x),p(y,"isCompatibleArray",E),p(y,"isCompatibleObject",P);module.exports=y;
//# sourceMappingURL=dommatrix.cjs.map
diff --git a/dist/dommatrix.cjs.map b/dist/dommatrix.cjs.map
index 9cc3b35..0fe6268 100644
--- a/dist/dommatrix.cjs.map
+++ b/dist/dommatrix.cjs.map
@@ -1 +1 @@
-{"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 ) {\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 \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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"}
\ No newline at end of file
+{"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 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 \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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"}
\ No newline at end of file
diff --git a/dist/dommatrix.js b/dist/dommatrix.js
index a5baf4b..7174bb4 100644
--- a/dist/dommatrix.js
+++ b/dist/dommatrix.js
@@ -1,3 +1,3 @@
var CSSMatrix=function(){"use strict";var z=Object.defineProperty;var S=(g,N,v)=>N in g?z(g,N,{enumerable:!0,configurable:!0,writable:!0,value:v}):g[N]=v;var p=(g,N,v)=>S(g,typeof N!="symbol"?N+"":N,v);const g={a:1,b:0,c:0,d:1,e:0,f:0,m11:1,m12:0,m13:0,m14:0,m21:0,m22:1,m23:0,m24:0,m31:0,m32:0,m33:1,m34:0,m41:0,m42:0,m43:0,m44:1,is2D:!0,isIdentity:!0},N=s=>(s instanceof Float64Array||s instanceof Float32Array||Array.isArray(s)&&s.every(t=>typeof t=="number"))&&[6,16].some(t=>s.length===t),v=s=>s instanceof DOMMatrix||s instanceof f||typeof s=="object"&&Object.keys(g).every(t=>s&&t in s),k=s=>{const t=new f,e=Array.from(s);if(!N(e))throw TypeError(`CSSMatrix: "${e.join(",")}" must be an array with 6/16 numbers.`);// istanbul ignore else @preserve
-if(e.length===16){const[n,i,r,a,l,m,h,c,y,u,w,o,d,A,M,x]=e;t.m11=n,t.a=n,t.m21=l,t.c=l,t.m31=y,t.m41=d,t.e=d,t.m12=i,t.b=i,t.m22=m,t.d=m,t.m32=u,t.m42=A,t.f=A,t.m13=r,t.m23=h,t.m33=w,t.m43=M,t.m14=a,t.m24=c,t.m34=o,t.m44=x}else if(e.length===6){const[n,i,r,a,l,m]=e;t.m11=n,t.a=n,t.m12=i,t.b=i,t.m21=r,t.c=r,t.m22=a,t.d=a,t.m41=l,t.e=l,t.m42=m,t.f=m}return t},Y=s=>{if(v(s))return k([s.m11,s.m12,s.m13,s.m14,s.m21,s.m22,s.m23,s.m24,s.m31,s.m32,s.m33,s.m34,s.m41,s.m42,s.m43,s.m44]);throw TypeError(`CSSMatrix: "${JSON.stringify(s)}" is not a DOMMatrix / CSSMatrix / JSON compatible object.`)},F=s=>{if(typeof s!="string")throw TypeError(`CSSMatrix: "${JSON.stringify(s)}" is not a string.`);const t=String(s).replace(/\s/g,"");let e=new f;const n=`CSSMatrix: invalid transform string "${s}"`;return t.split(")").filter(i=>i).forEach(i=>{const[r,a]=i.split("(");if(!a)throw TypeError(n);const l=a.split(",").map(o=>o.includes("rad")?parseFloat(o)*(180/Math.PI):parseFloat(o)),[m,h,c,y]=l,u=[m,h,c],w=[m,h,c,y];if(r==="perspective"&&m&&[h,c].every(o=>o===void 0))e.m34=-1/m;else if(r.includes("matrix")&&[6,16].includes(l.length)&&l.every(o=>!Number.isNaN(+o))){const o=l.map(d=>Math.abs(d)<1e-6?0:d);e=e.multiply(k(o))}else if(r==="translate3d"&&u.every(o=>!Number.isNaN(+o)))e=e.translate(m,h,c);else if(r==="translate"&&m&&c===void 0)e=e.translate(m,h||0,0);else if(r==="rotate3d"&&w.every(o=>!Number.isNaN(+o))&&y)e=e.rotateAxisAngle(m,h,c,y);else if(r==="rotate"&&m&&[h,c].every(o=>o===void 0))e=e.rotate(0,0,m);else if(r==="scale3d"&&u.every(o=>!Number.isNaN(+o))&&u.some(o=>o!==1))e=e.scale(m,h,c);else if(r==="scale"&&!Number.isNaN(m)&&m!==1&&c===void 0){const d=Number.isNaN(+h)?m:h;e=e.scale(m,d,1)}else if(r==="skew"&&(m||!Number.isNaN(m)&&h)&&c===void 0)e=e.skew(m,h||0);else if(["translate","rotate","scale","skew"].some(o=>r.includes(o))&&/[XYZ]/.test(r)&&m&&[h,c].every(o=>o===void 0))if(r==="skewX"||r==="skewY")e=e[r](m);else{const o=r.replace(/[XYZ]/,""),d=r.replace(o,""),A=["X","Y","Z"].indexOf(d),M=o==="scale"?1:0,x=[A===0?m:M,A===1?m:M,A===2?m:M];e=e[o](...x)}else throw TypeError(n)}),e},O=(s,t)=>t?[s.a,s.b,s.c,s.d,s.e,s.f]:[s.m11,s.m12,s.m13,s.m14,s.m21,s.m22,s.m23,s.m24,s.m31,s.m32,s.m33,s.m34,s.m41,s.m42,s.m43,s.m44],T=(s,t,e)=>{const n=new f;return n.m41=s,n.e=s,n.m42=t,n.f=t,n.m43=e,n},I=(s,t,e)=>{const n=new f,i=Math.PI/180,r=s*i,a=t*i,l=e*i,m=Math.cos(r),h=-Math.sin(r),c=Math.cos(a),y=-Math.sin(a),u=Math.cos(l),w=-Math.sin(l),o=c*u,d=-c*w;n.m11=o,n.a=o,n.m12=d,n.b=d,n.m13=y;const A=h*y*u+m*w;n.m21=A,n.c=A;const M=m*u-h*y*w;return n.m22=M,n.d=M,n.m23=-h*c,n.m31=h*w-m*y*u,n.m32=h*u+m*y*w,n.m33=m*c,n},R=(s,t,e,n)=>{const i=new f,r=Math.sqrt(s*s+t*t+e*e);if(r===0)return i;const a=s/r,l=t/r,m=e/r,h=n*(Math.PI/360),c=Math.sin(h),y=Math.cos(h),u=c*c,w=a*a,o=l*l,d=m*m,A=1-2*(o+d)*u;i.m11=A,i.a=A;const M=2*(a*l*u+m*c*y);i.m12=M,i.b=M,i.m13=2*(a*m*u-l*c*y);const x=2*(l*a*u-m*c*y);i.m21=x,i.c=x;const Z=1-2*(d+w)*u;return i.m22=Z,i.d=Z,i.m23=2*(l*m*u+a*c*y),i.m31=2*(m*a*u+l*c*y),i.m32=2*(m*l*u-a*c*y),i.m33=1-2*(w+o)*u,i},D=(s,t,e)=>{const n=new f;return n.m11=s,n.a=s,n.m22=t,n.d=t,n.m33=e,n},X=(s,t)=>{const e=new f;if(s){const n=s*Math.PI/180,i=Math.tan(n);e.m21=i,e.c=i}if(t){const n=t*Math.PI/180,i=Math.tan(n);e.m12=i,e.b=i}return e},E=s=>X(s,0),P=s=>X(0,s),b=(s,t)=>{const e=t.m11*s.m11+t.m12*s.m21+t.m13*s.m31+t.m14*s.m41,n=t.m11*s.m12+t.m12*s.m22+t.m13*s.m32+t.m14*s.m42,i=t.m11*s.m13+t.m12*s.m23+t.m13*s.m33+t.m14*s.m43,r=t.m11*s.m14+t.m12*s.m24+t.m13*s.m34+t.m14*s.m44,a=t.m21*s.m11+t.m22*s.m21+t.m23*s.m31+t.m24*s.m41,l=t.m21*s.m12+t.m22*s.m22+t.m23*s.m32+t.m24*s.m42,m=t.m21*s.m13+t.m22*s.m23+t.m23*s.m33+t.m24*s.m43,h=t.m21*s.m14+t.m22*s.m24+t.m23*s.m34+t.m24*s.m44,c=t.m31*s.m11+t.m32*s.m21+t.m33*s.m31+t.m34*s.m41,y=t.m31*s.m12+t.m32*s.m22+t.m33*s.m32+t.m34*s.m42,u=t.m31*s.m13+t.m32*s.m23+t.m33*s.m33+t.m34*s.m43,w=t.m31*s.m14+t.m32*s.m24+t.m33*s.m34+t.m34*s.m44,o=t.m41*s.m11+t.m42*s.m21+t.m43*s.m31+t.m44*s.m41,d=t.m41*s.m12+t.m42*s.m22+t.m43*s.m32+t.m44*s.m42,A=t.m41*s.m13+t.m42*s.m23+t.m43*s.m33+t.m44*s.m43,M=t.m41*s.m14+t.m42*s.m24+t.m43*s.m34+t.m44*s.m44;return k([e,n,i,r,a,l,m,h,c,y,u,w,o,d,A,M])};class f{constructor(t){return this.a=1,this.b=0,this.c=0,this.d=1,this.e=0,this.f=0,this.m11=1,this.m12=0,this.m13=0,this.m14=0,this.m21=0,this.m22=1,this.m23=0,this.m24=0,this.m31=0,this.m32=0,this.m33=1,this.m34=0,this.m41=0,this.m42=0,this.m43=0,this.m44=1,t?this.setMatrixValue(t):this}get isIdentity(){return this.m11===1&&this.m12===0&&this.m13===0&&this.m14===0&&this.m21===0&&this.m22===1&&this.m23===0&&this.m24===0&&this.m31===0&&this.m32===0&&this.m33===1&&this.m34===0&&this.m41===0&&this.m42===0&&this.m43===0&&this.m44===1}get is2D(){return this.m31===0&&this.m32===0&&this.m33===1&&this.m34===0&&this.m43===0&&this.m44===1}setMatrixValue(t){return typeof t=="string"&&t.length&&t!=="none"?F(t):Array.isArray(t)||t instanceof Float64Array||t instanceof Float32Array?k(t):typeof t=="object"?Y(t):this}toFloat32Array(t){return Float32Array.from(O(this,t))}toFloat64Array(t){return Float64Array.from(O(this,t))}toString(){const{is2D:t}=this,e=this.toFloat64Array(t).join(", ");return`${t?"matrix":"matrix3d"}(${e})`}toJSON(){const{is2D:t,isIdentity:e}=this;return{...this,is2D:t,isIdentity:e}}multiply(t){return b(this,t)}translate(t,e,n){const i=t;let r=e,a=n;return typeof r>"u"&&(r=0),typeof a>"u"&&(a=0),b(this,T(i,r,a))}scale(t,e,n){const i=t;let r=e,a=n;return typeof r>"u"&&(r=t),typeof a>"u"&&(a=1),b(this,D(i,r,a))}rotate(t,e,n){let i=t,r=e||0,a=n||0;return typeof t=="number"&&typeof e>"u"&&typeof n>"u"&&(a=i,i=0,r=0),b(this,I(i,r,a))}rotateAxisAngle(t,e,n,i){if([t,e,n,i].some(r=>Number.isNaN(+r)))throw new TypeError("CSSMatrix: expecting 4 values");return b(this,R(t,e,n,i))}skewX(t){return b(this,E(t))}skewY(t){return b(this,P(t))}skew(t,e){return b(this,X(t,e))}transformPoint(t){const e=this.m11*t.x+this.m21*t.y+this.m31*t.z+this.m41*t.w,n=this.m12*t.x+this.m22*t.y+this.m32*t.z+this.m42*t.w,i=this.m13*t.x+this.m23*t.y+this.m33*t.z+this.m43*t.w,r=this.m14*t.x+this.m24*t.y+this.m34*t.z+this.m44*t.w;return t instanceof DOMPoint?new DOMPoint(e,n,i,r):{x:e,y:n,z:i,w:r}}}return p(f,"Translate",T),p(f,"Rotate",I),p(f,"RotateAxisAngle",R),p(f,"Scale",D),p(f,"SkewX",E),p(f,"SkewY",P),p(f,"Skew",X),p(f,"Multiply",b),p(f,"fromArray",k),p(f,"fromMatrix",Y),p(f,"fromString",F),p(f,"toArray",O),p(f,"isCompatibleArray",N),p(f,"isCompatibleObject",v),f}();
+if(e.length===16){const[n,i,r,a,l,m,h,c,y,u,w,o,d,A,M,x]=e;t.m11=n,t.a=n,t.m21=l,t.c=l,t.m31=y,t.m41=d,t.e=d,t.m12=i,t.b=i,t.m22=m,t.d=m,t.m32=u,t.m42=A,t.f=A,t.m13=r,t.m23=h,t.m33=w,t.m43=M,t.m14=a,t.m24=c,t.m34=o,t.m44=x}else if(e.length===6){const[n,i,r,a,l,m]=e;t.m11=n,t.a=n,t.m12=i,t.b=i,t.m21=r,t.c=r,t.m22=a,t.d=a,t.m41=l,t.e=l,t.m42=m,t.f=m}return t},Y=s=>{if(v(s))return k([s.m11,s.m12,s.m13,s.m14,s.m21,s.m22,s.m23,s.m24,s.m31,s.m32,s.m33,s.m34,s.m41,s.m42,s.m43,s.m44]);throw TypeError(`CSSMatrix: "${JSON.stringify(s)}" is not a DOMMatrix / CSSMatrix / JSON compatible object.`)},F=s=>{if(typeof s!="string")throw TypeError(`CSSMatrix: "${JSON.stringify(s)}" is not a string.`);const t=String(s).replace(/\s/g,"");let e=new f;const n=`CSSMatrix: invalid transform string "${s}"`;return t.split(")").filter(i=>i).forEach(i=>{const[r,a]=i.split("(");if(!a)throw TypeError(n);const l=a.split(",").map(o=>o.includes("rad")?parseFloat(o)*(180/Math.PI):parseFloat(o)),[m,h,c,y]=l,u=[m,h,c],w=[m,h,c,y];if(r==="perspective"&&m&&[h,c].every(o=>o===void 0))e.m34=-1/m;else if(r.includes("matrix")&&[6,16].includes(l.length)&&l.every(o=>!Number.isNaN(+o))){const o=l.map(d=>Math.abs(d)<1e-6?0:d);e=e.multiply(k(o))}else if(r==="translate3d"&&u.every(o=>!Number.isNaN(+o)))e=e.translate(m,h,c);else if(r==="translate"&&m&&c===void 0)e=e.translate(m,h||0,0);else if(r==="rotate3d"&&w.every(o=>!Number.isNaN(+o))&&y)e=e.rotateAxisAngle(m,h,c,y);else if(r==="rotate"&&m&&[h,c].every(o=>o===void 0))e=e.rotate(0,0,m);else if(r==="scale3d"&&u.every(o=>!Number.isNaN(+o))&&u.some(o=>o!==1))e=e.scale(m,h,c);else if(r==="scale"&&!Number.isNaN(m)&&[m,h].some(o=>o!==1)&&c===void 0){const d=Number.isNaN(+h)?m:h;e=e.scale(m,d,1)}else if(r==="skew"&&(m||!Number.isNaN(m)&&h)&&c===void 0)e=e.skew(m,h||0);else if(["translate","rotate","scale","skew"].some(o=>r.includes(o))&&/[XYZ]/.test(r)&&m&&[h,c].every(o=>o===void 0))if(r==="skewX"||r==="skewY")e=e[r](m);else{const o=r.replace(/[XYZ]/,""),d=r.replace(o,""),A=["X","Y","Z"].indexOf(d),M=o==="scale"?1:0,x=[A===0?m:M,A===1?m:M,A===2?m:M];e=e[o](...x)}else throw TypeError(n)}),e},O=(s,t)=>t?[s.a,s.b,s.c,s.d,s.e,s.f]:[s.m11,s.m12,s.m13,s.m14,s.m21,s.m22,s.m23,s.m24,s.m31,s.m32,s.m33,s.m34,s.m41,s.m42,s.m43,s.m44],T=(s,t,e)=>{const n=new f;return n.m41=s,n.e=s,n.m42=t,n.f=t,n.m43=e,n},I=(s,t,e)=>{const n=new f,i=Math.PI/180,r=s*i,a=t*i,l=e*i,m=Math.cos(r),h=-Math.sin(r),c=Math.cos(a),y=-Math.sin(a),u=Math.cos(l),w=-Math.sin(l),o=c*u,d=-c*w;n.m11=o,n.a=o,n.m12=d,n.b=d,n.m13=y;const A=h*y*u+m*w;n.m21=A,n.c=A;const M=m*u-h*y*w;return n.m22=M,n.d=M,n.m23=-h*c,n.m31=h*w-m*y*u,n.m32=h*u+m*y*w,n.m33=m*c,n},R=(s,t,e,n)=>{const i=new f,r=Math.sqrt(s*s+t*t+e*e);if(r===0)return i;const a=s/r,l=t/r,m=e/r,h=n*(Math.PI/360),c=Math.sin(h),y=Math.cos(h),u=c*c,w=a*a,o=l*l,d=m*m,A=1-2*(o+d)*u;i.m11=A,i.a=A;const M=2*(a*l*u+m*c*y);i.m12=M,i.b=M,i.m13=2*(a*m*u-l*c*y);const x=2*(l*a*u-m*c*y);i.m21=x,i.c=x;const Z=1-2*(d+w)*u;return i.m22=Z,i.d=Z,i.m23=2*(l*m*u+a*c*y),i.m31=2*(m*a*u+l*c*y),i.m32=2*(m*l*u-a*c*y),i.m33=1-2*(w+o)*u,i},D=(s,t,e)=>{const n=new f;return n.m11=s,n.a=s,n.m22=t,n.d=t,n.m33=e,n},X=(s,t)=>{const e=new f;if(s){const n=s*Math.PI/180,i=Math.tan(n);e.m21=i,e.c=i}if(t){const n=t*Math.PI/180,i=Math.tan(n);e.m12=i,e.b=i}return e},E=s=>X(s,0),P=s=>X(0,s),b=(s,t)=>{const e=t.m11*s.m11+t.m12*s.m21+t.m13*s.m31+t.m14*s.m41,n=t.m11*s.m12+t.m12*s.m22+t.m13*s.m32+t.m14*s.m42,i=t.m11*s.m13+t.m12*s.m23+t.m13*s.m33+t.m14*s.m43,r=t.m11*s.m14+t.m12*s.m24+t.m13*s.m34+t.m14*s.m44,a=t.m21*s.m11+t.m22*s.m21+t.m23*s.m31+t.m24*s.m41,l=t.m21*s.m12+t.m22*s.m22+t.m23*s.m32+t.m24*s.m42,m=t.m21*s.m13+t.m22*s.m23+t.m23*s.m33+t.m24*s.m43,h=t.m21*s.m14+t.m22*s.m24+t.m23*s.m34+t.m24*s.m44,c=t.m31*s.m11+t.m32*s.m21+t.m33*s.m31+t.m34*s.m41,y=t.m31*s.m12+t.m32*s.m22+t.m33*s.m32+t.m34*s.m42,u=t.m31*s.m13+t.m32*s.m23+t.m33*s.m33+t.m34*s.m43,w=t.m31*s.m14+t.m32*s.m24+t.m33*s.m34+t.m34*s.m44,o=t.m41*s.m11+t.m42*s.m21+t.m43*s.m31+t.m44*s.m41,d=t.m41*s.m12+t.m42*s.m22+t.m43*s.m32+t.m44*s.m42,A=t.m41*s.m13+t.m42*s.m23+t.m43*s.m33+t.m44*s.m43,M=t.m41*s.m14+t.m42*s.m24+t.m43*s.m34+t.m44*s.m44;return k([e,n,i,r,a,l,m,h,c,y,u,w,o,d,A,M])};class f{constructor(t){return this.a=1,this.b=0,this.c=0,this.d=1,this.e=0,this.f=0,this.m11=1,this.m12=0,this.m13=0,this.m14=0,this.m21=0,this.m22=1,this.m23=0,this.m24=0,this.m31=0,this.m32=0,this.m33=1,this.m34=0,this.m41=0,this.m42=0,this.m43=0,this.m44=1,t?this.setMatrixValue(t):this}get isIdentity(){return this.m11===1&&this.m12===0&&this.m13===0&&this.m14===0&&this.m21===0&&this.m22===1&&this.m23===0&&this.m24===0&&this.m31===0&&this.m32===0&&this.m33===1&&this.m34===0&&this.m41===0&&this.m42===0&&this.m43===0&&this.m44===1}get is2D(){return this.m31===0&&this.m32===0&&this.m33===1&&this.m34===0&&this.m43===0&&this.m44===1}setMatrixValue(t){return typeof t=="string"&&t.length&&t!=="none"?F(t):Array.isArray(t)||t instanceof Float64Array||t instanceof Float32Array?k(t):typeof t=="object"?Y(t):this}toFloat32Array(t){return Float32Array.from(O(this,t))}toFloat64Array(t){return Float64Array.from(O(this,t))}toString(){const{is2D:t}=this,e=this.toFloat64Array(t).join(", ");return`${t?"matrix":"matrix3d"}(${e})`}toJSON(){const{is2D:t,isIdentity:e}=this;return{...this,is2D:t,isIdentity:e}}multiply(t){return b(this,t)}translate(t,e,n){const i=t;let r=e,a=n;return typeof r>"u"&&(r=0),typeof a>"u"&&(a=0),b(this,T(i,r,a))}scale(t,e,n){const i=t;let r=e,a=n;return typeof r>"u"&&(r=t),typeof a>"u"&&(a=1),b(this,D(i,r,a))}rotate(t,e,n){let i=t,r=e||0,a=n||0;return typeof t=="number"&&typeof e>"u"&&typeof n>"u"&&(a=i,i=0,r=0),b(this,I(i,r,a))}rotateAxisAngle(t,e,n,i){if([t,e,n,i].some(r=>Number.isNaN(+r)))throw new TypeError("CSSMatrix: expecting 4 values");return b(this,R(t,e,n,i))}skewX(t){return b(this,E(t))}skewY(t){return b(this,P(t))}skew(t,e){return b(this,X(t,e))}transformPoint(t){const e=this.m11*t.x+this.m21*t.y+this.m31*t.z+this.m41*t.w,n=this.m12*t.x+this.m22*t.y+this.m32*t.z+this.m42*t.w,i=this.m13*t.x+this.m23*t.y+this.m33*t.z+this.m43*t.w,r=this.m14*t.x+this.m24*t.y+this.m34*t.z+this.m44*t.w;return t instanceof DOMPoint?new DOMPoint(e,n,i,r):{x:e,y:n,z:i,w:r}}}return p(f,"Translate",T),p(f,"Rotate",I),p(f,"RotateAxisAngle",R),p(f,"Scale",D),p(f,"SkewX",E),p(f,"SkewY",P),p(f,"Skew",X),p(f,"Multiply",b),p(f,"fromArray",k),p(f,"fromMatrix",Y),p(f,"fromString",F),p(f,"toArray",O),p(f,"isCompatibleArray",N),p(f,"isCompatibleObject",v),f}();
//# sourceMappingURL=dommatrix.js.map
diff --git a/dist/dommatrix.js.map b/dist/dommatrix.js.map
index d8d9bed..24e0d0b 100644
--- a/dist/dommatrix.js.map
+++ b/dist/dommatrix.js.map
@@ -1 +1 @@
-{"version":3,"file":"dommatrix.js","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 ) {\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 \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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"}
\ No newline at end of file
+{"version":3,"file":"dommatrix.js","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 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 \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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"}
\ No newline at end of file
diff --git a/dist/dommatrix.mjs b/dist/dommatrix.mjs
index af4c482..374a5b4 100644
--- a/dist/dommatrix.mjs
+++ b/dist/dommatrix.mjs
@@ -37,10 +37,10 @@ const $ = {
const [
n,
i,
- r,
+ m,
a,
l,
- m,
+ r,
h,
c,
u,
@@ -52,10 +52,10 @@ const $ = {
M,
b
] = e;
- t.m11 = n, t.a = n, t.m21 = l, t.c = l, t.m31 = u, t.m41 = d, t.e = d, t.m12 = i, t.b = i, t.m22 = m, t.d = m, t.m32 = f, t.m42 = A, t.f = A, t.m13 = r, t.m23 = h, t.m33 = w, t.m43 = M, t.m14 = a, t.m24 = c, t.m34 = o, t.m44 = b;
+ t.m11 = n, t.a = n, t.m21 = l, t.c = l, t.m31 = u, t.m41 = d, t.e = d, t.m12 = i, t.b = i, t.m22 = r, t.d = r, t.m32 = f, t.m42 = A, t.f = A, t.m13 = m, t.m23 = h, t.m33 = w, t.m43 = M, t.m14 = a, t.m24 = c, t.m34 = o, t.m44 = b;
} else if (e.length === 6) {
- const [n, i, r, a, l, m] = e;
- t.m11 = n, t.a = n, t.m12 = i, t.b = i, t.m21 = r, t.c = r, t.m22 = a, t.d = a, t.m41 = l, t.e = l, t.m42 = m, t.f = m;
+ const [n, i, m, a, l, r] = e;
+ t.m11 = n, t.a = n, t.m12 = i, t.b = i, t.m21 = m, t.c = m, t.m22 = a, t.d = a, t.m41 = l, t.e = l, t.m42 = r, t.f = r;
}
return t;
}, X = (s) => {
@@ -88,41 +88,44 @@ const $ = {
let e = new y();
const n = `CSSMatrix: invalid transform string "${s}"`;
return t.split(")").filter((i) => i).forEach((i) => {
- const [r, a] = i.split("(");
+ const [m, a] = i.split("(");
if (!a) throw TypeError(n);
const l = a.split(",").map(
(o) => o.includes("rad") ? parseFloat(o) * (180 / Math.PI) : parseFloat(o)
- ), [m, h, c, u] = l, f = [m, h, c], w = [m, h, c, u];
- if (r === "perspective" && m && [h, c].every((o) => o === void 0))
- e.m34 = -1 / m;
- else if (r.includes("matrix") && [6, 16].includes(l.length) && l.every((o) => !Number.isNaN(+o))) {
+ ), [r, h, c, u] = l, f = [r, h, c], w = [r, h, c, u];
+ if (m === "perspective" && r && [h, c].every((o) => o === void 0))
+ e.m34 = -1 / r;
+ else if (m.includes("matrix") && [6, 16].includes(l.length) && l.every((o) => !Number.isNaN(+o))) {
const o = l.map((d) => Math.abs(d) < 1e-6 ? 0 : d);
e = e.multiply(g(o));
- } else if (r === "translate3d" && f.every((o) => !Number.isNaN(+o)))
- e = e.translate(m, h, c);
- else if (r === "translate" && m && c === void 0)
- e = e.translate(m, h || 0, 0);
- else if (r === "rotate3d" && w.every((o) => !Number.isNaN(+o)) && u)
- e = e.rotateAxisAngle(m, h, c, u);
- else if (r === "rotate" && m && [h, c].every((o) => o === void 0))
- e = e.rotate(0, 0, m);
- else if (r === "scale3d" && f.every((o) => !Number.isNaN(+o)) && f.some((o) => o !== 1))
- e = e.scale(m, h, c);
- else if (r === "scale" && !Number.isNaN(m) && m !== 1 && c === void 0) {
- const d = Number.isNaN(+h) ? m : h;
- e = e.scale(m, d, 1);
- } else if (r === "skew" && (m || !Number.isNaN(m) && h) && c === void 0)
- e = e.skew(m, h || 0);
+ } else if (m === "translate3d" && f.every((o) => !Number.isNaN(+o)))
+ e = e.translate(r, h, c);
+ else if (m === "translate" && r && c === void 0)
+ e = e.translate(r, h || 0, 0);
+ else if (m === "rotate3d" && w.every((o) => !Number.isNaN(+o)) && u)
+ e = e.rotateAxisAngle(r, h, c, u);
+ else if (m === "rotate" && r && [h, c].every((o) => o === void 0))
+ e = e.rotate(0, 0, r);
+ else if (m === "scale3d" && f.every((o) => !Number.isNaN(+o)) && f.some((o) => o !== 1))
+ e = e.scale(r, h, c);
+ else if (
+ // prop === "scale" && !Number.isNaN(x) && x !== 1 && z === undefined
+ m === "scale" && !Number.isNaN(r) && [r, h].some((o) => o !== 1) && c === void 0
+ ) {
+ const d = Number.isNaN(+h) ? r : h;
+ e = e.scale(r, d, 1);
+ } else if (m === "skew" && (r || !Number.isNaN(r) && h) && c === void 0)
+ e = e.skew(r, h || 0);
else if (["translate", "rotate", "scale", "skew"].some(
- (o) => r.includes(o)
- ) && /[XYZ]/.test(r) && m && [h, c].every((o) => o === void 0))
- if (r === "skewX" || r === "skewY")
- e = e[r](m);
+ (o) => m.includes(o)
+ ) && /[XYZ]/.test(m) && r && [h, c].every((o) => o === void 0))
+ if (m === "skewX" || m === "skewY")
+ e = e[m](r);
else {
- const o = r.replace(/[XYZ]/, ""), d = r.replace(o, ""), A = ["X", "Y", "Z"].indexOf(d), M = o === "scale" ? 1 : 0, b = [
- A === 0 ? m : M,
- A === 1 ? m : M,
- A === 2 ? m : M
+ const o = m.replace(/[XYZ]/, ""), d = m.replace(o, ""), A = ["X", "Y", "Z"].indexOf(d), M = o === "scale" ? 1 : 0, b = [
+ A === 0 ? r : M,
+ A === 1 ? r : M,
+ A === 2 ? r : M
];
e = e[o](...b);
}
@@ -150,24 +153,24 @@ const $ = {
const n = new y();
return n.m41 = s, n.e = s, n.m42 = t, n.f = t, n.m43 = e, n;
}, F = (s, t, e) => {
- const n = new y(), i = Math.PI / 180, r = s * i, a = t * i, l = e * i, m = Math.cos(r), h = -Math.sin(r), c = Math.cos(a), u = -Math.sin(a), f = Math.cos(l), w = -Math.sin(l), o = c * f, d = -c * w;
+ const n = new y(), i = Math.PI / 180, m = s * i, a = t * i, l = e * i, r = Math.cos(m), h = -Math.sin(m), c = Math.cos(a), u = -Math.sin(a), f = Math.cos(l), w = -Math.sin(l), o = c * f, d = -c * w;
n.m11 = o, n.a = o, n.m12 = d, n.b = d, n.m13 = u;
- const A = h * u * f + m * w;
+ const A = h * u * f + r * w;
n.m21 = A, n.c = A;
- const M = m * f - h * u * w;
- return n.m22 = M, n.d = M, n.m23 = -h * c, n.m31 = h * w - m * u * f, n.m32 = h * f + m * u * w, n.m33 = m * c, n;
+ const M = r * f - h * u * w;
+ return n.m22 = M, n.d = M, n.m23 = -h * c, n.m31 = h * w - r * u * f, n.m32 = h * f + r * u * w, n.m33 = r * c, n;
}, T = (s, t, e, n) => {
- const i = new y(), r = Math.sqrt(s * s + t * t + e * e);
- if (r === 0)
+ const i = new y(), m = Math.sqrt(s * s + t * t + e * e);
+ if (m === 0)
return i;
- const a = s / r, l = t / r, m = e / r, h = n * (Math.PI / 360), c = Math.sin(h), u = Math.cos(h), f = c * c, w = a * a, o = l * l, d = m * m, A = 1 - 2 * (o + d) * f;
+ const a = s / m, l = t / m, r = e / m, h = n * (Math.PI / 360), c = Math.sin(h), u = Math.cos(h), f = c * c, w = a * a, o = l * l, d = r * r, A = 1 - 2 * (o + d) * f;
i.m11 = A, i.a = A;
- const M = 2 * (a * l * f + m * c * u);
- i.m12 = M, i.b = M, i.m13 = 2 * (a * m * f - l * c * u);
- const b = 2 * (l * a * f - m * c * u);
+ const M = 2 * (a * l * f + r * c * u);
+ i.m12 = M, i.b = M, i.m13 = 2 * (a * r * f - l * c * u);
+ const b = 2 * (l * a * f - r * c * u);
i.m21 = b, i.c = b;
const k = 1 - 2 * (d + w) * f;
- return i.m22 = k, i.d = k, i.m23 = 2 * (l * m * f + a * c * u), i.m31 = 2 * (m * a * f + l * c * u), i.m32 = 2 * (m * l * f - a * c * u), i.m33 = 1 - 2 * (w + o) * f, i;
+ return i.m22 = k, i.d = k, i.m23 = 2 * (l * r * f + a * c * u), i.m31 = 2 * (r * a * f + l * c * u), i.m32 = 2 * (r * l * f - a * c * u), i.m33 = 1 - 2 * (w + o) * f, i;
}, I = (s, t, e) => {
const n = new y();
return n.m11 = s, n.a = s, n.m22 = t, n.d = t, n.m33 = e, n;
@@ -183,15 +186,15 @@ const $ = {
}
return e;
}, R = (s) => v(s, 0), D = (s) => v(0, s), N = (s, t) => {
- const e = t.m11 * s.m11 + t.m12 * s.m21 + t.m13 * s.m31 + t.m14 * s.m41, n = t.m11 * s.m12 + t.m12 * s.m22 + t.m13 * s.m32 + t.m14 * s.m42, i = t.m11 * s.m13 + t.m12 * s.m23 + t.m13 * s.m33 + t.m14 * s.m43, r = t.m11 * s.m14 + t.m12 * s.m24 + t.m13 * s.m34 + t.m14 * s.m44, a = t.m21 * s.m11 + t.m22 * s.m21 + t.m23 * s.m31 + t.m24 * s.m41, l = t.m21 * s.m12 + t.m22 * s.m22 + t.m23 * s.m32 + t.m24 * s.m42, m = t.m21 * s.m13 + t.m22 * s.m23 + t.m23 * s.m33 + t.m24 * s.m43, h = t.m21 * s.m14 + t.m22 * s.m24 + t.m23 * s.m34 + t.m24 * s.m44, c = t.m31 * s.m11 + t.m32 * s.m21 + t.m33 * s.m31 + t.m34 * s.m41, u = t.m31 * s.m12 + t.m32 * s.m22 + t.m33 * s.m32 + t.m34 * s.m42, f = t.m31 * s.m13 + t.m32 * s.m23 + t.m33 * s.m33 + t.m34 * s.m43, w = t.m31 * s.m14 + t.m32 * s.m24 + t.m33 * s.m34 + t.m34 * s.m44, o = t.m41 * s.m11 + t.m42 * s.m21 + t.m43 * s.m31 + t.m44 * s.m41, d = t.m41 * s.m12 + t.m42 * s.m22 + t.m43 * s.m32 + t.m44 * s.m42, A = t.m41 * s.m13 + t.m42 * s.m23 + t.m43 * s.m33 + t.m44 * s.m43, M = t.m41 * s.m14 + t.m42 * s.m24 + t.m43 * s.m34 + t.m44 * s.m44;
+ const e = t.m11 * s.m11 + t.m12 * s.m21 + t.m13 * s.m31 + t.m14 * s.m41, n = t.m11 * s.m12 + t.m12 * s.m22 + t.m13 * s.m32 + t.m14 * s.m42, i = t.m11 * s.m13 + t.m12 * s.m23 + t.m13 * s.m33 + t.m14 * s.m43, m = t.m11 * s.m14 + t.m12 * s.m24 + t.m13 * s.m34 + t.m14 * s.m44, a = t.m21 * s.m11 + t.m22 * s.m21 + t.m23 * s.m31 + t.m24 * s.m41, l = t.m21 * s.m12 + t.m22 * s.m22 + t.m23 * s.m32 + t.m24 * s.m42, r = t.m21 * s.m13 + t.m22 * s.m23 + t.m23 * s.m33 + t.m24 * s.m43, h = t.m21 * s.m14 + t.m22 * s.m24 + t.m23 * s.m34 + t.m24 * s.m44, c = t.m31 * s.m11 + t.m32 * s.m21 + t.m33 * s.m31 + t.m34 * s.m41, u = t.m31 * s.m12 + t.m32 * s.m22 + t.m33 * s.m32 + t.m34 * s.m42, f = t.m31 * s.m13 + t.m32 * s.m23 + t.m33 * s.m33 + t.m34 * s.m43, w = t.m31 * s.m14 + t.m32 * s.m24 + t.m33 * s.m34 + t.m34 * s.m44, o = t.m41 * s.m11 + t.m42 * s.m21 + t.m43 * s.m31 + t.m44 * s.m41, d = t.m41 * s.m12 + t.m42 * s.m22 + t.m43 * s.m32 + t.m44 * s.m42, A = t.m41 * s.m13 + t.m42 * s.m23 + t.m43 * s.m33 + t.m44 * s.m43, M = t.m41 * s.m14 + t.m42 * s.m24 + t.m43 * s.m34 + t.m44 * s.m44;
return g([
e,
n,
i,
- r,
+ m,
a,
l,
- m,
+ r,
h,
c,
u,
@@ -323,8 +326,8 @@ class y {
*/
translate(t, e, n) {
const i = t;
- let r = e, a = n;
- return typeof r > "u" && (r = 0), typeof a > "u" && (a = 0), N(this, Y(i, r, a));
+ let m = e, a = n;
+ return typeof m > "u" && (m = 0), typeof a > "u" && (a = 0), N(this, Y(i, m, a));
}
/**
* The scale method returns a new matrix which is this matrix post multiplied by
@@ -339,8 +342,8 @@ class y {
*/
scale(t, e, n) {
const i = t;
- let r = e, a = n;
- return typeof r > "u" && (r = t), typeof a > "u" && (a = 1), N(this, I(i, r, a));
+ let m = e, a = n;
+ return typeof m > "u" && (m = t), typeof a > "u" && (a = 1), N(this, I(i, m, a));
}
/**
* The rotate method returns a new matrix which is this matrix post multiplied
@@ -355,8 +358,8 @@ class y {
* @return The resulted matrix
*/
rotate(t, e, n) {
- let i = t, r = e || 0, a = n || 0;
- return typeof t == "number" && typeof e > "u" && typeof n > "u" && (a = i, i = 0, r = 0), N(this, F(i, r, a));
+ let i = t, m = e || 0, a = n || 0;
+ return typeof t == "number" && typeof e > "u" && typeof n > "u" && (a = i, i = 0, m = 0), N(this, F(i, m, a));
}
/**
* The rotateAxisAngle method returns a new matrix which is this matrix post
@@ -371,7 +374,7 @@ class y {
* @return The resulted matrix
*/
rotateAxisAngle(t, e, n, i) {
- if ([t, e, n, i].some((r) => Number.isNaN(+r)))
+ if ([t, e, n, i].some((m) => Number.isNaN(+m)))
throw new TypeError("CSSMatrix: expecting 4 values");
return N(this, T(t, e, n, i));
}
@@ -418,12 +421,12 @@ class y {
* @return the resulting Tuple
*/
transformPoint(t) {
- const e = this.m11 * t.x + this.m21 * t.y + this.m31 * t.z + this.m41 * t.w, n = this.m12 * t.x + this.m22 * t.y + this.m32 * t.z + this.m42 * t.w, i = this.m13 * t.x + this.m23 * t.y + this.m33 * t.z + this.m43 * t.w, r = this.m14 * t.x + this.m24 * t.y + this.m34 * t.z + this.m44 * t.w;
- return t instanceof DOMPoint ? new DOMPoint(e, n, i, r) : {
+ const e = this.m11 * t.x + this.m21 * t.y + this.m31 * t.z + this.m41 * t.w, n = this.m12 * t.x + this.m22 * t.y + this.m32 * t.z + this.m42 * t.w, i = this.m13 * t.x + this.m23 * t.y + this.m33 * t.z + this.m43 * t.w, m = this.m14 * t.x + this.m24 * t.y + this.m34 * t.z + this.m44 * t.w;
+ return t instanceof DOMPoint ? new DOMPoint(e, n, i, m) : {
x: e,
y: n,
z: i,
- w: r
+ w: m
};
}
}
diff --git a/dist/dommatrix.mjs.map b/dist/dommatrix.mjs.map
index d30e4d9..bf51fae 100644
--- a/dist/dommatrix.mjs.map
+++ b/dist/dommatrix.mjs.map
@@ -1 +1 @@
-{"version":3,"file":"dommatrix.mjs","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 ) {\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 \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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"}
\ No newline at end of file
+{"version":3,"file":"dommatrix.mjs","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 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 \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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"}
\ No newline at end of file
diff --git a/docs/dommatrix.js b/docs/dommatrix.js
index a5baf4b..7174bb4 100755
--- a/docs/dommatrix.js
+++ b/docs/dommatrix.js
@@ -1,3 +1,3 @@
var CSSMatrix=function(){"use strict";var z=Object.defineProperty;var S=(g,N,v)=>N in g?z(g,N,{enumerable:!0,configurable:!0,writable:!0,value:v}):g[N]=v;var p=(g,N,v)=>S(g,typeof N!="symbol"?N+"":N,v);const g={a:1,b:0,c:0,d:1,e:0,f:0,m11:1,m12:0,m13:0,m14:0,m21:0,m22:1,m23:0,m24:0,m31:0,m32:0,m33:1,m34:0,m41:0,m42:0,m43:0,m44:1,is2D:!0,isIdentity:!0},N=s=>(s instanceof Float64Array||s instanceof Float32Array||Array.isArray(s)&&s.every(t=>typeof t=="number"))&&[6,16].some(t=>s.length===t),v=s=>s instanceof DOMMatrix||s instanceof f||typeof s=="object"&&Object.keys(g).every(t=>s&&t in s),k=s=>{const t=new f,e=Array.from(s);if(!N(e))throw TypeError(`CSSMatrix: "${e.join(",")}" must be an array with 6/16 numbers.`);// istanbul ignore else @preserve
-if(e.length===16){const[n,i,r,a,l,m,h,c,y,u,w,o,d,A,M,x]=e;t.m11=n,t.a=n,t.m21=l,t.c=l,t.m31=y,t.m41=d,t.e=d,t.m12=i,t.b=i,t.m22=m,t.d=m,t.m32=u,t.m42=A,t.f=A,t.m13=r,t.m23=h,t.m33=w,t.m43=M,t.m14=a,t.m24=c,t.m34=o,t.m44=x}else if(e.length===6){const[n,i,r,a,l,m]=e;t.m11=n,t.a=n,t.m12=i,t.b=i,t.m21=r,t.c=r,t.m22=a,t.d=a,t.m41=l,t.e=l,t.m42=m,t.f=m}return t},Y=s=>{if(v(s))return k([s.m11,s.m12,s.m13,s.m14,s.m21,s.m22,s.m23,s.m24,s.m31,s.m32,s.m33,s.m34,s.m41,s.m42,s.m43,s.m44]);throw TypeError(`CSSMatrix: "${JSON.stringify(s)}" is not a DOMMatrix / CSSMatrix / JSON compatible object.`)},F=s=>{if(typeof s!="string")throw TypeError(`CSSMatrix: "${JSON.stringify(s)}" is not a string.`);const t=String(s).replace(/\s/g,"");let e=new f;const n=`CSSMatrix: invalid transform string "${s}"`;return t.split(")").filter(i=>i).forEach(i=>{const[r,a]=i.split("(");if(!a)throw TypeError(n);const l=a.split(",").map(o=>o.includes("rad")?parseFloat(o)*(180/Math.PI):parseFloat(o)),[m,h,c,y]=l,u=[m,h,c],w=[m,h,c,y];if(r==="perspective"&&m&&[h,c].every(o=>o===void 0))e.m34=-1/m;else if(r.includes("matrix")&&[6,16].includes(l.length)&&l.every(o=>!Number.isNaN(+o))){const o=l.map(d=>Math.abs(d)<1e-6?0:d);e=e.multiply(k(o))}else if(r==="translate3d"&&u.every(o=>!Number.isNaN(+o)))e=e.translate(m,h,c);else if(r==="translate"&&m&&c===void 0)e=e.translate(m,h||0,0);else if(r==="rotate3d"&&w.every(o=>!Number.isNaN(+o))&&y)e=e.rotateAxisAngle(m,h,c,y);else if(r==="rotate"&&m&&[h,c].every(o=>o===void 0))e=e.rotate(0,0,m);else if(r==="scale3d"&&u.every(o=>!Number.isNaN(+o))&&u.some(o=>o!==1))e=e.scale(m,h,c);else if(r==="scale"&&!Number.isNaN(m)&&m!==1&&c===void 0){const d=Number.isNaN(+h)?m:h;e=e.scale(m,d,1)}else if(r==="skew"&&(m||!Number.isNaN(m)&&h)&&c===void 0)e=e.skew(m,h||0);else if(["translate","rotate","scale","skew"].some(o=>r.includes(o))&&/[XYZ]/.test(r)&&m&&[h,c].every(o=>o===void 0))if(r==="skewX"||r==="skewY")e=e[r](m);else{const o=r.replace(/[XYZ]/,""),d=r.replace(o,""),A=["X","Y","Z"].indexOf(d),M=o==="scale"?1:0,x=[A===0?m:M,A===1?m:M,A===2?m:M];e=e[o](...x)}else throw TypeError(n)}),e},O=(s,t)=>t?[s.a,s.b,s.c,s.d,s.e,s.f]:[s.m11,s.m12,s.m13,s.m14,s.m21,s.m22,s.m23,s.m24,s.m31,s.m32,s.m33,s.m34,s.m41,s.m42,s.m43,s.m44],T=(s,t,e)=>{const n=new f;return n.m41=s,n.e=s,n.m42=t,n.f=t,n.m43=e,n},I=(s,t,e)=>{const n=new f,i=Math.PI/180,r=s*i,a=t*i,l=e*i,m=Math.cos(r),h=-Math.sin(r),c=Math.cos(a),y=-Math.sin(a),u=Math.cos(l),w=-Math.sin(l),o=c*u,d=-c*w;n.m11=o,n.a=o,n.m12=d,n.b=d,n.m13=y;const A=h*y*u+m*w;n.m21=A,n.c=A;const M=m*u-h*y*w;return n.m22=M,n.d=M,n.m23=-h*c,n.m31=h*w-m*y*u,n.m32=h*u+m*y*w,n.m33=m*c,n},R=(s,t,e,n)=>{const i=new f,r=Math.sqrt(s*s+t*t+e*e);if(r===0)return i;const a=s/r,l=t/r,m=e/r,h=n*(Math.PI/360),c=Math.sin(h),y=Math.cos(h),u=c*c,w=a*a,o=l*l,d=m*m,A=1-2*(o+d)*u;i.m11=A,i.a=A;const M=2*(a*l*u+m*c*y);i.m12=M,i.b=M,i.m13=2*(a*m*u-l*c*y);const x=2*(l*a*u-m*c*y);i.m21=x,i.c=x;const Z=1-2*(d+w)*u;return i.m22=Z,i.d=Z,i.m23=2*(l*m*u+a*c*y),i.m31=2*(m*a*u+l*c*y),i.m32=2*(m*l*u-a*c*y),i.m33=1-2*(w+o)*u,i},D=(s,t,e)=>{const n=new f;return n.m11=s,n.a=s,n.m22=t,n.d=t,n.m33=e,n},X=(s,t)=>{const e=new f;if(s){const n=s*Math.PI/180,i=Math.tan(n);e.m21=i,e.c=i}if(t){const n=t*Math.PI/180,i=Math.tan(n);e.m12=i,e.b=i}return e},E=s=>X(s,0),P=s=>X(0,s),b=(s,t)=>{const e=t.m11*s.m11+t.m12*s.m21+t.m13*s.m31+t.m14*s.m41,n=t.m11*s.m12+t.m12*s.m22+t.m13*s.m32+t.m14*s.m42,i=t.m11*s.m13+t.m12*s.m23+t.m13*s.m33+t.m14*s.m43,r=t.m11*s.m14+t.m12*s.m24+t.m13*s.m34+t.m14*s.m44,a=t.m21*s.m11+t.m22*s.m21+t.m23*s.m31+t.m24*s.m41,l=t.m21*s.m12+t.m22*s.m22+t.m23*s.m32+t.m24*s.m42,m=t.m21*s.m13+t.m22*s.m23+t.m23*s.m33+t.m24*s.m43,h=t.m21*s.m14+t.m22*s.m24+t.m23*s.m34+t.m24*s.m44,c=t.m31*s.m11+t.m32*s.m21+t.m33*s.m31+t.m34*s.m41,y=t.m31*s.m12+t.m32*s.m22+t.m33*s.m32+t.m34*s.m42,u=t.m31*s.m13+t.m32*s.m23+t.m33*s.m33+t.m34*s.m43,w=t.m31*s.m14+t.m32*s.m24+t.m33*s.m34+t.m34*s.m44,o=t.m41*s.m11+t.m42*s.m21+t.m43*s.m31+t.m44*s.m41,d=t.m41*s.m12+t.m42*s.m22+t.m43*s.m32+t.m44*s.m42,A=t.m41*s.m13+t.m42*s.m23+t.m43*s.m33+t.m44*s.m43,M=t.m41*s.m14+t.m42*s.m24+t.m43*s.m34+t.m44*s.m44;return k([e,n,i,r,a,l,m,h,c,y,u,w,o,d,A,M])};class f{constructor(t){return this.a=1,this.b=0,this.c=0,this.d=1,this.e=0,this.f=0,this.m11=1,this.m12=0,this.m13=0,this.m14=0,this.m21=0,this.m22=1,this.m23=0,this.m24=0,this.m31=0,this.m32=0,this.m33=1,this.m34=0,this.m41=0,this.m42=0,this.m43=0,this.m44=1,t?this.setMatrixValue(t):this}get isIdentity(){return this.m11===1&&this.m12===0&&this.m13===0&&this.m14===0&&this.m21===0&&this.m22===1&&this.m23===0&&this.m24===0&&this.m31===0&&this.m32===0&&this.m33===1&&this.m34===0&&this.m41===0&&this.m42===0&&this.m43===0&&this.m44===1}get is2D(){return this.m31===0&&this.m32===0&&this.m33===1&&this.m34===0&&this.m43===0&&this.m44===1}setMatrixValue(t){return typeof t=="string"&&t.length&&t!=="none"?F(t):Array.isArray(t)||t instanceof Float64Array||t instanceof Float32Array?k(t):typeof t=="object"?Y(t):this}toFloat32Array(t){return Float32Array.from(O(this,t))}toFloat64Array(t){return Float64Array.from(O(this,t))}toString(){const{is2D:t}=this,e=this.toFloat64Array(t).join(", ");return`${t?"matrix":"matrix3d"}(${e})`}toJSON(){const{is2D:t,isIdentity:e}=this;return{...this,is2D:t,isIdentity:e}}multiply(t){return b(this,t)}translate(t,e,n){const i=t;let r=e,a=n;return typeof r>"u"&&(r=0),typeof a>"u"&&(a=0),b(this,T(i,r,a))}scale(t,e,n){const i=t;let r=e,a=n;return typeof r>"u"&&(r=t),typeof a>"u"&&(a=1),b(this,D(i,r,a))}rotate(t,e,n){let i=t,r=e||0,a=n||0;return typeof t=="number"&&typeof e>"u"&&typeof n>"u"&&(a=i,i=0,r=0),b(this,I(i,r,a))}rotateAxisAngle(t,e,n,i){if([t,e,n,i].some(r=>Number.isNaN(+r)))throw new TypeError("CSSMatrix: expecting 4 values");return b(this,R(t,e,n,i))}skewX(t){return b(this,E(t))}skewY(t){return b(this,P(t))}skew(t,e){return b(this,X(t,e))}transformPoint(t){const e=this.m11*t.x+this.m21*t.y+this.m31*t.z+this.m41*t.w,n=this.m12*t.x+this.m22*t.y+this.m32*t.z+this.m42*t.w,i=this.m13*t.x+this.m23*t.y+this.m33*t.z+this.m43*t.w,r=this.m14*t.x+this.m24*t.y+this.m34*t.z+this.m44*t.w;return t instanceof DOMPoint?new DOMPoint(e,n,i,r):{x:e,y:n,z:i,w:r}}}return p(f,"Translate",T),p(f,"Rotate",I),p(f,"RotateAxisAngle",R),p(f,"Scale",D),p(f,"SkewX",E),p(f,"SkewY",P),p(f,"Skew",X),p(f,"Multiply",b),p(f,"fromArray",k),p(f,"fromMatrix",Y),p(f,"fromString",F),p(f,"toArray",O),p(f,"isCompatibleArray",N),p(f,"isCompatibleObject",v),f}();
+if(e.length===16){const[n,i,r,a,l,m,h,c,y,u,w,o,d,A,M,x]=e;t.m11=n,t.a=n,t.m21=l,t.c=l,t.m31=y,t.m41=d,t.e=d,t.m12=i,t.b=i,t.m22=m,t.d=m,t.m32=u,t.m42=A,t.f=A,t.m13=r,t.m23=h,t.m33=w,t.m43=M,t.m14=a,t.m24=c,t.m34=o,t.m44=x}else if(e.length===6){const[n,i,r,a,l,m]=e;t.m11=n,t.a=n,t.m12=i,t.b=i,t.m21=r,t.c=r,t.m22=a,t.d=a,t.m41=l,t.e=l,t.m42=m,t.f=m}return t},Y=s=>{if(v(s))return k([s.m11,s.m12,s.m13,s.m14,s.m21,s.m22,s.m23,s.m24,s.m31,s.m32,s.m33,s.m34,s.m41,s.m42,s.m43,s.m44]);throw TypeError(`CSSMatrix: "${JSON.stringify(s)}" is not a DOMMatrix / CSSMatrix / JSON compatible object.`)},F=s=>{if(typeof s!="string")throw TypeError(`CSSMatrix: "${JSON.stringify(s)}" is not a string.`);const t=String(s).replace(/\s/g,"");let e=new f;const n=`CSSMatrix: invalid transform string "${s}"`;return t.split(")").filter(i=>i).forEach(i=>{const[r,a]=i.split("(");if(!a)throw TypeError(n);const l=a.split(",").map(o=>o.includes("rad")?parseFloat(o)*(180/Math.PI):parseFloat(o)),[m,h,c,y]=l,u=[m,h,c],w=[m,h,c,y];if(r==="perspective"&&m&&[h,c].every(o=>o===void 0))e.m34=-1/m;else if(r.includes("matrix")&&[6,16].includes(l.length)&&l.every(o=>!Number.isNaN(+o))){const o=l.map(d=>Math.abs(d)<1e-6?0:d);e=e.multiply(k(o))}else if(r==="translate3d"&&u.every(o=>!Number.isNaN(+o)))e=e.translate(m,h,c);else if(r==="translate"&&m&&c===void 0)e=e.translate(m,h||0,0);else if(r==="rotate3d"&&w.every(o=>!Number.isNaN(+o))&&y)e=e.rotateAxisAngle(m,h,c,y);else if(r==="rotate"&&m&&[h,c].every(o=>o===void 0))e=e.rotate(0,0,m);else if(r==="scale3d"&&u.every(o=>!Number.isNaN(+o))&&u.some(o=>o!==1))e=e.scale(m,h,c);else if(r==="scale"&&!Number.isNaN(m)&&[m,h].some(o=>o!==1)&&c===void 0){const d=Number.isNaN(+h)?m:h;e=e.scale(m,d,1)}else if(r==="skew"&&(m||!Number.isNaN(m)&&h)&&c===void 0)e=e.skew(m,h||0);else if(["translate","rotate","scale","skew"].some(o=>r.includes(o))&&/[XYZ]/.test(r)&&m&&[h,c].every(o=>o===void 0))if(r==="skewX"||r==="skewY")e=e[r](m);else{const o=r.replace(/[XYZ]/,""),d=r.replace(o,""),A=["X","Y","Z"].indexOf(d),M=o==="scale"?1:0,x=[A===0?m:M,A===1?m:M,A===2?m:M];e=e[o](...x)}else throw TypeError(n)}),e},O=(s,t)=>t?[s.a,s.b,s.c,s.d,s.e,s.f]:[s.m11,s.m12,s.m13,s.m14,s.m21,s.m22,s.m23,s.m24,s.m31,s.m32,s.m33,s.m34,s.m41,s.m42,s.m43,s.m44],T=(s,t,e)=>{const n=new f;return n.m41=s,n.e=s,n.m42=t,n.f=t,n.m43=e,n},I=(s,t,e)=>{const n=new f,i=Math.PI/180,r=s*i,a=t*i,l=e*i,m=Math.cos(r),h=-Math.sin(r),c=Math.cos(a),y=-Math.sin(a),u=Math.cos(l),w=-Math.sin(l),o=c*u,d=-c*w;n.m11=o,n.a=o,n.m12=d,n.b=d,n.m13=y;const A=h*y*u+m*w;n.m21=A,n.c=A;const M=m*u-h*y*w;return n.m22=M,n.d=M,n.m23=-h*c,n.m31=h*w-m*y*u,n.m32=h*u+m*y*w,n.m33=m*c,n},R=(s,t,e,n)=>{const i=new f,r=Math.sqrt(s*s+t*t+e*e);if(r===0)return i;const a=s/r,l=t/r,m=e/r,h=n*(Math.PI/360),c=Math.sin(h),y=Math.cos(h),u=c*c,w=a*a,o=l*l,d=m*m,A=1-2*(o+d)*u;i.m11=A,i.a=A;const M=2*(a*l*u+m*c*y);i.m12=M,i.b=M,i.m13=2*(a*m*u-l*c*y);const x=2*(l*a*u-m*c*y);i.m21=x,i.c=x;const Z=1-2*(d+w)*u;return i.m22=Z,i.d=Z,i.m23=2*(l*m*u+a*c*y),i.m31=2*(m*a*u+l*c*y),i.m32=2*(m*l*u-a*c*y),i.m33=1-2*(w+o)*u,i},D=(s,t,e)=>{const n=new f;return n.m11=s,n.a=s,n.m22=t,n.d=t,n.m33=e,n},X=(s,t)=>{const e=new f;if(s){const n=s*Math.PI/180,i=Math.tan(n);e.m21=i,e.c=i}if(t){const n=t*Math.PI/180,i=Math.tan(n);e.m12=i,e.b=i}return e},E=s=>X(s,0),P=s=>X(0,s),b=(s,t)=>{const e=t.m11*s.m11+t.m12*s.m21+t.m13*s.m31+t.m14*s.m41,n=t.m11*s.m12+t.m12*s.m22+t.m13*s.m32+t.m14*s.m42,i=t.m11*s.m13+t.m12*s.m23+t.m13*s.m33+t.m14*s.m43,r=t.m11*s.m14+t.m12*s.m24+t.m13*s.m34+t.m14*s.m44,a=t.m21*s.m11+t.m22*s.m21+t.m23*s.m31+t.m24*s.m41,l=t.m21*s.m12+t.m22*s.m22+t.m23*s.m32+t.m24*s.m42,m=t.m21*s.m13+t.m22*s.m23+t.m23*s.m33+t.m24*s.m43,h=t.m21*s.m14+t.m22*s.m24+t.m23*s.m34+t.m24*s.m44,c=t.m31*s.m11+t.m32*s.m21+t.m33*s.m31+t.m34*s.m41,y=t.m31*s.m12+t.m32*s.m22+t.m33*s.m32+t.m34*s.m42,u=t.m31*s.m13+t.m32*s.m23+t.m33*s.m33+t.m34*s.m43,w=t.m31*s.m14+t.m32*s.m24+t.m33*s.m34+t.m34*s.m44,o=t.m41*s.m11+t.m42*s.m21+t.m43*s.m31+t.m44*s.m41,d=t.m41*s.m12+t.m42*s.m22+t.m43*s.m32+t.m44*s.m42,A=t.m41*s.m13+t.m42*s.m23+t.m43*s.m33+t.m44*s.m43,M=t.m41*s.m14+t.m42*s.m24+t.m43*s.m34+t.m44*s.m44;return k([e,n,i,r,a,l,m,h,c,y,u,w,o,d,A,M])};class f{constructor(t){return this.a=1,this.b=0,this.c=0,this.d=1,this.e=0,this.f=0,this.m11=1,this.m12=0,this.m13=0,this.m14=0,this.m21=0,this.m22=1,this.m23=0,this.m24=0,this.m31=0,this.m32=0,this.m33=1,this.m34=0,this.m41=0,this.m42=0,this.m43=0,this.m44=1,t?this.setMatrixValue(t):this}get isIdentity(){return this.m11===1&&this.m12===0&&this.m13===0&&this.m14===0&&this.m21===0&&this.m22===1&&this.m23===0&&this.m24===0&&this.m31===0&&this.m32===0&&this.m33===1&&this.m34===0&&this.m41===0&&this.m42===0&&this.m43===0&&this.m44===1}get is2D(){return this.m31===0&&this.m32===0&&this.m33===1&&this.m34===0&&this.m43===0&&this.m44===1}setMatrixValue(t){return typeof t=="string"&&t.length&&t!=="none"?F(t):Array.isArray(t)||t instanceof Float64Array||t instanceof Float32Array?k(t):typeof t=="object"?Y(t):this}toFloat32Array(t){return Float32Array.from(O(this,t))}toFloat64Array(t){return Float64Array.from(O(this,t))}toString(){const{is2D:t}=this,e=this.toFloat64Array(t).join(", ");return`${t?"matrix":"matrix3d"}(${e})`}toJSON(){const{is2D:t,isIdentity:e}=this;return{...this,is2D:t,isIdentity:e}}multiply(t){return b(this,t)}translate(t,e,n){const i=t;let r=e,a=n;return typeof r>"u"&&(r=0),typeof a>"u"&&(a=0),b(this,T(i,r,a))}scale(t,e,n){const i=t;let r=e,a=n;return typeof r>"u"&&(r=t),typeof a>"u"&&(a=1),b(this,D(i,r,a))}rotate(t,e,n){let i=t,r=e||0,a=n||0;return typeof t=="number"&&typeof e>"u"&&typeof n>"u"&&(a=i,i=0,r=0),b(this,I(i,r,a))}rotateAxisAngle(t,e,n,i){if([t,e,n,i].some(r=>Number.isNaN(+r)))throw new TypeError("CSSMatrix: expecting 4 values");return b(this,R(t,e,n,i))}skewX(t){return b(this,E(t))}skewY(t){return b(this,P(t))}skew(t,e){return b(this,X(t,e))}transformPoint(t){const e=this.m11*t.x+this.m21*t.y+this.m31*t.z+this.m41*t.w,n=this.m12*t.x+this.m22*t.y+this.m32*t.z+this.m42*t.w,i=this.m13*t.x+this.m23*t.y+this.m33*t.z+this.m43*t.w,r=this.m14*t.x+this.m24*t.y+this.m34*t.z+this.m44*t.w;return t instanceof DOMPoint?new DOMPoint(e,n,i,r):{x:e,y:n,z:i,w:r}}}return p(f,"Translate",T),p(f,"Rotate",I),p(f,"RotateAxisAngle",R),p(f,"Scale",D),p(f,"SkewX",E),p(f,"SkewY",P),p(f,"Skew",X),p(f,"Multiply",b),p(f,"fromArray",k),p(f,"fromMatrix",Y),p(f,"fromString",F),p(f,"toArray",O),p(f,"isCompatibleArray",N),p(f,"isCompatibleObject",v),f}();
//# sourceMappingURL=dommatrix.js.map
diff --git a/docs/dommatrix.js.map b/docs/dommatrix.js.map
index d8d9bed..24e0d0b 100755
--- a/docs/dommatrix.js.map
+++ b/docs/dommatrix.js.map
@@ -1 +1 @@
-{"version":3,"file":"dommatrix.js","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 ) {\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 \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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"}
\ No newline at end of file
+{"version":3,"file":"dommatrix.js","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 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 \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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"}
\ No newline at end of file
diff --git a/docs/index.html b/docs/index.html
index d5f2e46..ae06987 100755
--- a/docs/index.html
+++ b/docs/index.html
@@ -102,7 +102,7 @@