UNPKG

3.6 kBJavaScriptView Raw
1/**!
2* matrix-pointer 0.0.1
3* MIT License
4* Copyright (c) 2023 Yuta Arai
5**/
6function B(r){return null!==r}function T(n,u,e){if(Array.isArray(n)){var f=n.length-1;let r=n[u=Math.min(Math.max(0,u),f)],t=0,i=u;for(;!B(r)&&(0<u-t||f>u+t);)B(r=n[i=u-++t])||(r=n[i=u+t]);if(B(r))return{id:r,x:i,y:e}}return null}function n(t,i,n){if(Array.isArray(t)){var u=t.length-1;i=Math.max(0,i);let r=0;var e=t[n=Math.min(Math.max(0,n),u)];if(e=e&&T(e,i,n))return e;for(;0<n-r||u>n+r;){var f=n-++r,l=t[f];if(l=l&&T(l,i,f))return l;if(l=(l=t[f=n+r])&&T(l,i,f))return l}}return null}function u(r,i,n){let u=null;var e=B(i);for(let t=0;r.length>t;t++){var f=r[t];if(Array.isArray(f))for(let r=0;f.length>r;r++){var l=f[r];if(B(l)){if(!u&&(u={id:l,x:r,y:t},!e)&&n)return u;if(l===i)return{id:l,x:r,y:t}}}}return n?u:null}function k(i,n,u,e){if(Array.isArray(i))for(let r=i.length-1,t=null===u?e?0:r:u;e?r>=t:0<=t;e?t++:t--){var f=i[t];if(Array.isArray(f)&&B(f=f[n]))return{id:f,x:n,y:t}}return null}function q(i,n,u,e){if(Array.isArray(i))for(let r=i.length-1,t=null===n?e?0:r:n;e?r>=t:0<=t;e?t++:t--){var f=i[t];if(B(f))return{id:f,x:t,y:u}}return null}function e(u,e,f,l,a,s,o){if(e){var h=!0===a||a&&a.x,v=!0===a||a&&a.y,a=!0===s||s&&s.x,s=!0===s||s&&s.y,y=!0===o||o&&o.x,c=!0===o||o&&o.y;let r=e.x,t=e.y,i=r,n=t;var d=u.length-1;if("x"===f)if(s)for(;;){r+=l?1:-1;var x=u[t].length-1,x=r>x,A=r<0;if((r=A||x?h?(c&&(A=(t+=l?1:-1)>d,(t<0||A)&&(t=v?A?0:d:n),n=t),x?0:u[t].length-1):i:r)===i)return e;if(A=function(n,u,e){if(Array.isArray(n)){var f=n.length-1;let r;var l=n[e=Math.min(Math.max(0,e),f)];l&&(r=l[u]);let t=0,i=e;for(;!B(r)&&(0<e-t||f>e+t);){var a=n[i=e-++t];B(r=a?a[u]:r)||(a=n[i=e+t])&&(r=a[u])}if(B(r))return{id:r,x:u,y:i}}return null}(u,i=r,t))return A}else{if(o=q(u[t],e.x+(l?1:-1),t,l))return o;if(!h)return e;if(!c)return q(u[t],null,t,l)||e;for(;;){var p=(t+=l?1:-1)>d,M=t<0;if((t=M||p?v?p?0:d:n:t)===n)return e;if(M=q(u[n=t],null,t,l))return M}}else if(a)for(;;){var m=(t+=l?1:-1)>d;if((t<0||m)&&(v?(t=m?0:d,y&&(r+=l?1:-1,m=u[t].length-1,b=r>m,(r<0||b)&&(r=h?b?0:m:i),i=r)):t=n),t===n)return e;var b=T(u[n=t],r,t);if(b)return b}else{if(f=k(u,r,e.y+(l?1:-1),l))return f;if(!v)return e;if(!y)return k(u,r,null,l)||e;for(;;){r+=l?1:-1;var j=u[t].length-1,O=r>j,g=r<0;if((r=g||O?h?O?0:j:i:r)===i)return e;if(g=k(u,i=r,null,l))return g}}}return null}class r extends class{constructor(){this.Emitter$items=[]}on(r,t,i){this.off(r,t),this.Emitter$items.push([r,t,{once:!(null==i||!i.once)}])}off(i,n){for(let r=this.Emitter$items,t=0;r.length>t;t++)("*"===i||r[t][0]===i&&r[t][1]===n)&&r.splice(t--,1)}emit(i,n){this.Emitter$items.forEach(r=>{var t;i===r[0]&&(r[1](Object.assign(Object.assign({},n),{target:this,type:i})),null!=(t=r[2]))&&t.once&&this.off(i,r[1])})}}{constructor(r){super(),this.position=null,this.caches={matrix:[]},this.jump=void 0===r.jump||r.jump,this.loop=void 0===r.loop||r.loop,this.loose=void 0===r.loose||r.loose,this.matrix=r.matrix}update(){var r="function"==typeof this.matrix?this.matrix():this.matrix;return this.caches.matrix=Array.isArray(r)?r.filter(r=>Array.isArray(r)).map(r=>r.map(r=>B(r)?r:null)):[]}focus(r){var t=this.position;return this.position=r,(t||r)&&(null==t?void 0:t.id)!==(null==r?void 0:r.id)&&(t&&this.emit("blur",t),r)&&this.emit("focus",r),r}moveTo(r,t){var i=this.update();return this.focus("number"==typeof r&&"number"==typeof t?n(i,r,t):u(i,r,!1))}moveBy(r,t){var i=this.update();return this.focus(e(i,u(i,null==(i=this.position)?void 0:i.id,!0),r,t,this.loop,this.loose,this.jump))}destroy(){this.caches.matrix=[],this.off("*")}}export{r as default};