UNPKG

@omjs/matrix2d

Version:

CSS tranform-2D matrix

1 lines 10.8 kB
!function(t,e){"object"==typeof exports&&"undefined"!=typeof module?e(exports):"function"==typeof define&&define.amd?define(["exports"],e):e(t.matrix2d={})}(this,function(t){"use strict";var k=function(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")},i=function(){function r(t,e){for(var n=0;n<e.length;n++){var r=e[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(t,r.key,r)}}return function(t,e,n){return e&&r(t.prototype,e),n&&r(t,n),t}}(),a=function(t,e,n){return e in t?Object.defineProperty(t,e,{value:n,enumerable:!0,configurable:!0,writable:!0}):t[e]=n,t},w=function(t,e){if(!t)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!e||"object"!=typeof e&&"function"!=typeof e?t:e},T=function(t,e){if(Array.isArray(t))return t;if(Symbol.iterator in Object(t))return function n(t,e){var n=[],r=!0,o=!1,i=void 0;try{for(var a,u=t[Symbol.iterator]();!(r=(a=u.next()).done)&&(n.push(a.value),!e||n.length!==e);r=!0);}catch(t){o=!0,i=t}finally{try{!r&&u.return&&u.return()}finally{if(o)throw i}}return n}(t,e);throw new TypeError("Invalid attempt to destructure non-iterable instance")},I=function(t){if(Array.isArray(t)){for(var e=0,n=Array(t.length);e<t.length;e++)n[e]=t[e];return n}return Array.from(t)},e=Object.assign||function(t){for(var e=1;e<arguments.length;e++){var n=arguments[e];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(t[r]=n[r])}return t},Iterable=function(){var Iterable=function(){function Iterable(){var n=this;k(this,Iterable);for(var t=arguments.length,e=Array(t),r=0;r<t;r++)e[r]=arguments[r];e.forEach(function(t,e){return Object.defineProperty(n,e,{value:t,enumerable:!0})}),Object.defineProperty(this,"length",{value:e.length})}return i(Iterable,[{key:Symbol.iterator,value:function t(){return Array.prototype[Symbol.iterator].call(this)}},{key:"valueOf",value:function t(){return e({},this)}},{key:"toString",value:function t(){return[].concat(I(this)).join(",")}},{key:"clone",value:function t(){return new(Function.prototype.bind.apply(Iterable,[null].concat(I(this))))}},{key:"set",value:function t(e,n){var r=[].concat(I(this));return r[e]=n,new(Function.prototype.bind.apply(Iterable,[null].concat(I(r))))}},{key:"get",value:function t(e){return this[e]}},{key:Symbol.toStringTag,get:function t(){return"Iterable"}}],[{key:"isIterable",value:function t(e){return null!==e&&e instanceof Iterable}}]),Iterable}();return Iterable.version="1.2.2",Iterable}(),n=Array.prototype.map,Angle=function(){var Angle=function(){function Angle(){var t=0<arguments.length&&void 0!==arguments[0]?arguments[0]:0,e=1<arguments.length&&void 0!==arguments[1]?arguments[1]:Angle.UNIT.RAD;k(this,Angle),Object.defineProperties(this,{angle:{value:t,enumerable:!0},unit:{value:e,enumerable:!0}})}return i(Angle,[{key:"toString",value:function t(){return this.angle+" "+/\(([^)]*)\)/.exec(this.unit.toString())[1]}},{key:"toJSON",value:function t(){return this.toString()}},{key:"valueOf",value:function t(){return this.rad}},{key:"clone",value:function t(){return new Angle(this.angle,this.unit)}},{key:Symbol.toStringTag,get:function t(){return"Angle"}},{key:"rad",get:function t(){return e(this.angle,this.unit)}},{key:"deg",get:function t(){return n(this.angle,this.unit)}},{key:"grad",get:function t(){return r(this.angle,this.unit)}},{key:"turn",get:function t(){return o(this.angle,this.unit)}}],[{key:"isAngle",value:function t(e){return null!==e&&e instanceof Angle}},{key:"fromRad",value:function t(){return new Angle(0<arguments.length&&void 0!==arguments[0]?arguments[0]:0,Angle.UNIT.RAD)}},{key:"fromDeg",value:function t(){return new Angle(0<arguments.length&&void 0!==arguments[0]?arguments[0]:0,Angle.UNIT.DEG)}},{key:"fromGrad",value:function t(){return new Angle(0<arguments.length&&void 0!==arguments[0]?arguments[0]:0,Angle.UNIT.GRAD)}},{key:"fromTurn",value:function t(){return new Angle(0<arguments.length&&void 0!==arguments[0]?arguments[0]:0,Angle.UNIT.TURN)}},{key:"fromString",value:function t(){var e=0<arguments.length&&void 0!==arguments[0]?arguments[0]:"",n=/(.*?)(grad|deg|rad|turn)$/.exec(e)||[];return new Angle(parseFloat(n[1])||0,Angle.UNIT[(n[2]||"rad").toUpperCase()])}},{key:"from",value:function t(){var e=0<arguments.length&&void 0!==arguments[0]?arguments[0]:"";return Angle.isAngle(e)?e.clone():Angle.fromString(e)}}]),Angle}();return Angle.UNIT=Object.freeze({RAD:Symbol("rad"),DEG:Symbol("deg"),GRAD:Symbol("grad"),TURN:Symbol("turn")}),Angle.version="1.3.1",Angle;function e(t,e){var n;return t&&t*(n={},a(n,Angle.UNIT.RAD,1),a(n,Angle.UNIT.DEG,Math.PI/180),a(n,Angle.UNIT.GRAD,Math.PI/200),a(n,Angle.UNIT.TURN,2*Math.PI),n)[e]||t}function n(t,e){var n;return t&&t*(n={},a(n,Angle.UNIT.RAD,180/Math.PI),a(n,Angle.UNIT.DEG,1),a(n,Angle.UNIT.GRAD,.9),a(n,Angle.UNIT.TURN,360),n)[e]||t}function r(t,e){var n;return t&&t*(n={},a(n,Angle.UNIT.RAD,200/Math.PI),a(n,Angle.UNIT.DEG,10/9),a(n,Angle.UNIT.GRAD,1),a(n,Angle.UNIT.TURN,400),n)[e]||t}function o(t,e){var n;return t&&t*(n={},a(n,Angle.UNIT.RAD,.5/Math.PI),a(n,Angle.UNIT.DEG,1/360),a(n,Angle.UNIT.GRAD,.0025),a(n,Angle.UNIT.TURN,1),n)[e]||t}}();function l(t){return Matrix2D.isMatrix2D(t)||"012345"===Object.keys(t||{}).join("")}function r(){var e=0<arguments.length&&void 0!==arguments[0]?arguments[0]:3,t=l(this)?this:new Matrix2D(this);return new Matrix2D(n.call(t,function(t){return function t(n){return function(t,e){return e=Math.pow(10,n),Math.round(t*e)/e}}(e)(t)}))}function u(t){var e=l(this)?this:new Matrix2D(this),n=l(t)?t:new Matrix2D(t);return new Matrix2D(e[0]*n[0]+e[1]*n[2],e[0]*n[1]+e[1]*n[3],e[2]*n[0]+e[3]*n[2],e[2]*n[1]+e[3]*n[3],e[4]*n[0]+e[5]*n[2]+n[4],e[4]*n[1]+e[5]*n[3]+n[5])}function o(t){return u.call(t,this)}function c(){var t=0<arguments.length&&void 0!==arguments[0]?arguments[0]:0,e=1<arguments.length&&void 0!==arguments[1]?arguments[1]:0;return u.call(this,[1,0,0,1,t,e])}function M(){var t=0<arguments.length&&void 0!==arguments[0]?arguments[0]:[],e=T(t,2),n=e[0],r=void 0===n?0:n,o=e[1],i=void 0===o?0:o,a=l(this)?this:new Matrix2D(this);return[a[0]*r+a[2]*i+a[4],a[1]*r+a[3]*i+a[5]]}function R(){var t=l(this)?this:new Matrix2D(this),e=t[0]*t[3]-t[1]*t[2];if(0===e)throw new Error("Only an invertible matrix can be decomposed.");var n=Math.pow(t[0],2)+Math.pow(t[2],2),r=Angle.fromRad(2*Math.atan2(t[0]-Math.sqrt(n),t[2])),o=Math.sqrt(n),i=e/o,a=Angle.fromRad(Math.atan2(t[0]*t[1]+t[2]*t[3],n)),u=Angle.fromRad(0);return{rotate:r,scaleX:o,scaleY:i,scale:[o,i],skewX:a,skewY:u,skew:[a,u],translateX:t[4],translateY:t[5],translate:[t[4],t[5]]}}var Matrix2D=function(){var Matrix2D=function(t){function Matrix2D(){k(this,Matrix2D);for(var t=arguments.length,e=Array(t),n=0;n<t;n++)e[n]=arguments[n];if(Matrix2D.isMatrix2D(e[0]))var r,o=w(this,(r=Matrix2D.__proto__||Object.getPrototypeOf(Matrix2D)).call.apply(r,[this].concat(I(e[0]))));else{var i=e.toString().split(/[^\d.\-+e]/).map(function(t){return parseFloat(t)}).filter(function(t){return!isNaN(t)}),a=T(i,6),u=a[0],l=void 0===u?1:u,c=a[1],f=void 0===c?0:c,s=a[2],h=void 0===s?0:s,v=a[3],y=void 0===v?1:v,d=a[4],p=void 0===d?0:d,g=a[5],m=void 0===g?0:g;o=w(this,(Matrix2D.__proto__||Object.getPrototypeOf(Matrix2D)).call(this,l,f,h,y,p,m))}var b=void 0;return Object.defineProperty(o,"decompose",{get:function t(){return b||(b=R.call(o)),b}}),w(o)}return function(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function, not "+typeof e);t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,enumerable:!1,writable:!0,configurable:!0}}),e&&(Object.setPrototypeOf?Object.setPrototypeOf(t,e):t.__proto__=e)}(Matrix2D,Iterable),i(Matrix2D,[{key:"toString",value:function t(){return"matrix("+Array.prototype.join.call(this,",")+")"}},{key:"toJSON",value:function t(){return this.toString()}},{key:"toBrief",value:function t(e){return r.call(this,e)}},{key:"valueOf",value:function t(){return[].concat(I(this))}},{key:"clone",value:function t(){return new Matrix2D(this)}},{key:"rotate",get:function t(){return this.decompose.rotate}},{key:"scale",get:function t(){return this.decompose.scale}},{key:"scaleX",get:function t(){return this.decompose.scaleX}},{key:"scaleY",get:function t(){return this.decompose.scaleY}},{key:"skew",get:function t(){return this.decompose.skew}},{key:"skewX",get:function t(){return this.decompose.skewX}},{key:"skewY",get:function t(){return this.decompose.skewY}},{key:"translate",get:function t(){return this.decompose.translate}},{key:"translateX",get:function t(){return this.decompose.translateX}},{key:"translateY",get:function t(){return this.decompose.translateY}}],[{key:"isMatrix2D",value:function t(e){return null!=e&&e instanceof Matrix2D}}]),Matrix2D}();return Matrix2D.version="1.0.1",Matrix2D.MUL_DIR=Object.freeze({L:Symbol("left"),R:Symbol("right")}),Matrix2D.ROTATE_DIR=Object.freeze({CW:Symbol("cw"),ACW:Symbol("acw")}),Matrix2D}();t.Matrix2D=Matrix2D,t.isMatrix2DLike=l,t.simplify=r,t.lmul=u,t.rmul=o,t.mul=function f(t){return(1<arguments.length&&void 0!==arguments[1]?arguments[1]:Matrix2D.MUL_DIR.L)===Matrix2D.MUL_DIR.L?u.call(this,t):o.call(this,t)},t.rotate=function s(){var t=0<arguments.length&&void 0!==arguments[0]?arguments[0]:new Angle,e=1<arguments.length&&void 0!==arguments[1]?arguments[1]:Matrix2D.ROTATE_DIR.CW,n=Angle.from(t).rad,r=Math.cos(n),o=Math.sin(n),i=[r,o,-o,r,0,0];return e===Matrix2D.ROTATE_DIR.ACW&&(i=[r,-o,o,r,0,0]),u.call(this,i)},t.scale=function h(){var t=0<arguments.length&&void 0!==arguments[0]?arguments[0]:1,e=1<arguments.length&&void 0!==arguments[1]?arguments[1]:1;return u.call(this,[t,0,0,e,0,0])},t.skew=function v(){var t=0<arguments.length&&void 0!==arguments[0]?arguments[0]:new Angle,e=1<arguments.length&&void 0!==arguments[1]?arguments[1]:new Angle,n=Angle.from(t).rad,r=Angle.from(e).rad;return u.call(this,[1,Math.tan(r),Math.tan(n),1,0,0])},t.translate=c,t.move=function y(){var t=0<arguments.length&&void 0!==arguments[0]?arguments[0]:0,e=1<arguments.length&&void 0!==arguments[1]?arguments[1]:0;return c.call(this,t,e)},t.exec=M,t.execRect=function d(){var e=this,t=0<arguments.length&&void 0!==arguments[0]?arguments[0]:{},n=t.x,r=void 0===n?0:n,o=t.y,i=void 0===o?0:o,a=t.w,u=void 0===a?0:a,l=t.h,c=void 0===l?0:l,f=1<arguments.length&&void 0!==arguments[1]?arguments[1]:[],s=T(f,2),h=s[0],v=void 0===h?0:h,y=s[1],d=void 0===y?0:y,p=[[r-v,i-d],[r+u-v,i-d],[r+u-v,i+c-d],[r-v,i+c-d]].map(function(t){return M.call(e,t)}),g=p.map(function(t){return t[0]}),m=p.map(function(t){return t[1]}),b=Math.min.apply(Math,I(g)),k=Math.max.apply(Math,I(g)),w=Math.min.apply(Math,I(m));return{x:b+v,y:w+d,w:k-b,h:Math.max.apply(Math,I(m))-w}},t.decompose=R,Object.defineProperty(t,"__esModule",{value:!0})});