malevic
Version:
Malevič.js - minimalistic reactive UI library
2 lines (1 loc) • 7.04 kB
JavaScript
!function(t,n){"object"==typeof exports&&"undefined"!=typeof module?n(exports,require("malevic/dom"),require("malevic/string")):"function"==typeof define&&define.amd?define(["exports","malevic/dom","malevic/string"],n):n(((t="undefined"!=typeof globalThis?globalThis:t||self).Malevic=t.Malevic||{},t.Malevic.Animation={}),t.Malevic.DOM,t.Malevic.String)}(this,(function(t,n,e){"use strict";function i(t){var n=Object.create(null);return t&&Object.keys(t).forEach((function(e){if("default"!==e){var i=Object.getOwnPropertyDescriptor(t,e);Object.defineProperty(n,e,i.get?i:{enumerable:!0,get:function(){return t[e]}})}})),n.default=t,Object.freeze(n)}var r=i(n),o=i(e),u=function(){return u=Object.assign||function(t){for(var n,e=1,i=arguments.length;e<i;e++)for(var r in n=arguments[e])Object.prototype.hasOwnProperty.call(n,r)&&(t[r]=n[r]);return t},u.apply(this,arguments)};function a(t){return function(t){return null!=t&&"object"==typeof t}(t)&&Object.getPrototypeOf(t)===Object.prototype}function l(t,n){return void 0===n&&(n=0),t[t.length-1-n]}function c(t,n,e){return n*(1-t)+e*t}"function"==typeof SuppressedError&&SuppressedError;var s=function(t,n){return function(e){return c(e,t,n)}};function f(t){for(var n,e=[],i=/[-+]?(?:\d+\.?\d*|\.?\d+)(?:[e][-+]?\d+)?/gim;n=i.exec(t);)e.push({index:n.index,length:n[0].length});return e}var p=function(t,n){var e=f(t),i=f(n);return function(r){for(var o="",u=0,a=0;a<i.length;a++)o+=n.substring(u,i[a].index),o+=c(r,parseFloat(t.substr(e[a].index,e[a].length)),parseFloat(n.substr(i[a].index,i[a].length))).toString(),u=i[a].index+i[a].length;return o+=n.substring(u)}};function h(t){return t}var m={delay:0,duration:250,easing:"ease"},v=function(){function t(){this.$spec={initial:null,timeline:[],interpolate:null,output:h,done:null}}return t.prototype.initial=function(t){return this.$spec.initial=t,this},t.prototype.from=function(t){if(this.$spec.timeline.length>0)throw new Error("Starting keyframe was already declared");return this.$spec.timeline.push({from:t,to:null,timing:u({},m)}),this},t.prototype.to=function(t,n){this.$spec.interpolate||("number"==typeof t?this.$spec.interpolate=s:"string"==typeof t&&(this.$spec.interpolate=p));var e=l(this.$spec.timeline);return e&&null==e.to?(e.to=t,n&&(e.timing=u(u({},e.timing),n))):this.$spec.timeline.push({from:e?e.to:null,to:t,timing:u(u({},m),n||{})}),this},t.prototype.interpolate=function(t){return this.$spec.interpolate=t,this},t.prototype.output=function(t){return this.$spec.output=t,this},t.prototype.done=function(t){return this.$spec.done=t,this},t.prototype.spec=function(){return this.$spec},t}();function d(t,n,e){if(null!=e&&""!==e){var i=String(e),r="";i.endsWith("!important")&&(i=i.substring(0,i.length-10),r="important"),t.style.setProperty(n,i,r)}else t.style.removeProperty(n)}var g={linear:function(t){return t},ease:function(t){var n=(1-Math.cos(t*Math.PI))/2,e=Math.sqrt(1-Math.pow(t-1,2)),i=Math.sin(t*Math.PI/2);return n*(1-i)+e*i},"ease-in":function(t){var n=1-Math.cos(t*Math.PI/2);return n>1-1e-15?1:n},"ease-out":function(t){return Math.sin(t*Math.PI/2)},"ease-in-out":function(t){return(1-Math.cos(t*Math.PI))/2}},y=function(){function t(t,n){if(!t.interpolate)throw new Error("No interpolator provided");this.interpolate=t.interpolate,this.output=t.output,this.callback=n,this.doneCallback=t.done;var e=0;this.timeline=t.timeline.map((function(t){var n=e,i=n+t.timing.delay,r=i+t.timing.duration;return e=r,{standby:n,start:i,end:r,spec:t,interpolate:null}})),this.isComplete=!1}return t.prototype.tick=function(t){null==this.startTime&&(this.startTime=t);for(var n,e=t-this.startTime,i=this.timeline,r=i.length-1;r>=0;r--){var o=i[r],u=o.standby,a=o.end;if(e>=a||e>=u&&e<=a){n=i[r];break}}var c=n.start,s=n.end,f=n.spec;n===l(i)&&e>=s&&(this.isComplete=!0),n.interpolate||(n.interpolate=this.interpolate(f.from,f.to));var p,h,m,v=("string"==typeof f.timing.easing?g[f.timing.easing]:f.timing.easing)(e<c?0:c===s?1:(p=(e-c)/(s-c),h=0,m=1,Math.min(m,Math.max(h,p)))),d=n.interpolate.call(null,v);this.lastValue=d;var y=this.output.call(null,d);this.callback.call(null,y)},t.prototype.value=function(){return this.lastValue},t.prototype.complete=function(){return this.isComplete},t.prototype.finalize=function(){this.doneCallback&&this.doneCallback.call(null)},t}();var b=function(){var t=null,n=null,e=!1,i=[];function r(){t=performance.now(),i.forEach((function(n){return n(t)})),e&&(n=requestAnimationFrame(r))}return{run:function(){e=!0,t=performance.now(),n=requestAnimationFrame(r)},stop:function(){cancelAnimationFrame(n),n=null,t=null,e=!1},tick:function(t){i.push(t)},time:function(){return t},running:function(){return e}}}();function M(t,n){t.tick(n),t.complete()&&(k(t),t.finalize())}b.tick((function(t){return Array.from(j.values()).forEach((function(n){return M(n,t)}))}));var O=new WeakMap,j=new Set;function k(t){j.delete(t),0===j.size&&b.stop()}function w(t){var n=O.get(t);return n&&j.has(n)?n:null}function $(t){return a(t)&&Object.values(t).some((function(t){return t instanceof v}))}function A(t,n,e){var i,r,o,u,a,c=t.spec(),s=c.timeline[0].from,f=l(c.timeline).to;if(n instanceof v){var p=w(n);if(p)k(p),i=p.value();else i=l(n.spec().timeline).to}else typeof n==typeof f&&null!=n&&null!=f&&n.constructor===f.constructor&&(i=n);(null!=s?r=s:null!=i?r=i:null!=c.initial&&(r=c.initial),null==r)?e(c.output(f)):(c.timeline[0].from=r,u=e,a=new y((o=t).spec(),u),j.add(a),O.set(o,a),!b.running()&&b.run(),M(a,b.time()))}function E(t){if(t instanceof v){var n=w(t);n&&k(n)}}var P=function(t){var n=t.element,e=t.attr,i=t.value,r=t.prev;return i instanceof v?(A(i,r,(function(t){return n.setAttribute(e,t)})),!0):($(r)?Object.values(r).forEach((function(t){return E(t)})):E(r),null)},x=function(t){var n=t.element,e=t.attr,i=t.value,r=t.prev;if("style"===e){if($(i)){var o,u=i;return a(r)?(o=r,Object.keys(o).filter((function(t){return!u.hasOwnProperty(t)})).forEach((function(t){E(o[t]),d(n,t,null)}))):(o={},n.removeAttribute("style"),E(r)),Object.entries(u).forEach((function(t){var e=t[0],i=t[1],r=o[e];i instanceof v?A(i,r,(function(t){d(n,e,t)})):(E(r),d(n,e,i))})),!0}$(r)&&Object.values(r).forEach((function(t){return E(t)}))}return null};function S(t){return t.output(null!=t.timeline[0].from?t.timeline[0].from:null!=t.initial?t.initial:l(t.timeline).to)}var T=function(t){var n=t.value;if(n instanceof v){var i=n.spec();return e.escapeHTML(String(S(i)))}return null},C=function(t){var n,i=t.attr,r=t.value;if("style"===i&&$(r)){var o={};return Object.keys(r).forEach((function(t){var n=r[t];if(n instanceof v){var e=n.spec();o[t]=S(e)}else o[t]=n})),e.escapeHTML((n=o,Object.keys(n).filter((function(t){return null!=n[t]})).map((function(t){return"".concat(t,": ").concat(n[t],";")})).join(" ")))}return null};t.animate=function(t,n){var e=new v;return null!=t&&e.to(t,n),e},t.withAnimation=function(t){if(r){var n=r.plugins;n.setAttribute.add(t,P),n.setAttribute.add(t,x)}if(o){var e=o.plugins;e.stringifyAttribute.add(t,T),e.stringifyAttribute.add(t,C)}return t}}));