UNPKG

@slidy/core

Version:

Simple, configurable, nested & reusable sliding action script

2 lines (1 loc) 6.12 kB
"use strict";var G=Object.defineProperty;var he=Object.getOwnPropertyDescriptor;var xe=Object.getOwnPropertyNames;var we=Object.prototype.hasOwnProperty;var Oe=(t,s)=>{for(var e in s)G(t,e,{get:s[e],enumerable:!0})},Te=(t,s,e,i)=>{if(s&&typeof s=="object"||typeof s=="function")for(let a of xe(s))!we.call(t,a)&&a!==e&&G(t,a,{get:()=>s[a],enumerable:!(i=he(s,a))||i.enumerable});return t};var Le=t=>Te(G({},"__esModule",{value:!0}),t);var De={};Oe(De,{slidy:()=>pe});module.exports=Le(De);var{assign:J,entries:ce}=Object,{abs:S,exp:ue,floor:me,min:Me,max:B,round:$,sign:q}=Math;function L(t,s,e){return Me(e,B(t,s))}function Q(t,s=50,e=!0){let i=0;return e?a=>{let y=performance.now();y-i>=s&&(t(a),i=y)}:a=>t(a)}function M(t,s){for(let e=0;e<t.length;e++)s(t[e],e,t);return t}var Z=(t,s)=>S(t.deltaX)>=S(t.deltaY)&&s.axis!=="y";function le(t,s=0){return new Promise((e,i)=>{let a=setInterval(()=>{s++,s>=69?(clearInterval(a),i("few slides")):t.childElementCount&&(clearInterval(a),e(Pe(t)))},16)})}function Pe(t){return M(t.children,(s,e)=>s.index=e)}function j(t,s,e){let i=t.children.length;return s.loop?(e+i)%i:L(0,e,i-1)}function X(t,s){if(t.type==="wheel")return Z(t,s)?t.deltaX:t.shiftKey||s.axis==="y"?t.deltaY:0;{let e=t.touches&&t.touches[0]||t;return s.axis==="y"?e.pageY:e.pageX}}function P(t,s,e){t.dispatchEvent(new CustomEvent(s,{detail:e}))}function C(t,s,e=!0){let i=e?"addEventListener":"removeEventListener";M(s,a=>t[i](...a))}function de(t,s){let e=[...t.children],i=e.length,a=i-1,y=me(i/2),D=i>1?e[1].offsetTop-e[0].offsetTop>=e[0].offsetHeight:!1,k=D?"offsetTop":"offsetLeft",v=D?"offsetHeight":"offsetWidth",d=q(e[a][k]),w=i>1?e[a][k]*d-e[a-1][k]*d-e[a-B(d,0)][v]:0,b=e.reduce((o,c)=>o+=c[v]+w,0)>t.offsetWidth,F=s.snap==="deck";J(s,{reverse:d,scrollable:b,vertical:D,edged:I()});function I(o){let c=f(d<0?a:0,"start"),m=f(d<0?0:a,"end"),g=f(o),O=s.direction,N=$(s.position),A=T=>O<=0&&T<=c||O>=0&&T>=m;return s.loop?!1:A(o>=0?g:N)}function f(o,c=s.snap){let m=h=>e.find(E=>E.index===h)||e[0],g=h=>t[v]-m(h)[v],O=T(d<0?a:0,"start"),N=T(d<0?0:a,"end"),A=T(o,c);return s.loop||c==="deck"?A:L(O,A,N);function T(h,E){E=F?"deck":E;let U=m(h)[v]+w*2<t[v]?s.indent??1:g(h)/2/w,Y=E==="start"?0:E==="end"?1:.5,x=E==="start"?-U:E==="end"?U:0;return m(h)[k]-g(h)*Y+w*x}}return{edges:I,distance:f,index(o){let c=({index:m})=>S(f(m)-o);return e.reduce((m,g)=>c(g)<c(m)?g:m).index},position(o){let c=s.index;if(o){let m=e.slice(c-y).concat(e.slice(0,c-y));t.replaceChildren(...m)}return f(c)},swap(o){let c=i%o?q(-o):o,m=c>0?0:a;return b&&(m?t.prepend(e[m]):t.append(e[m])),(e[m][v]+w)*(c*d)},sense(o,c,m){return o.shiftKey||s.axis==="y"&&o.type!=="touchmove"||S(c)>=m},animate(){M(e,(o,c)=>{o.i=c,o.active=s.loop?y:s.index,o.size=o[v]+w,o.dist=f(o.index),o.track=s.position-o.dist,o.turn=L(-1,o.track/o.size,1),o.exp=L(0,(o.size-S(o.track))/o.size,1);let m=F?o.dist:s.position,g=D?`translateY(${-m}px)`:`translateX(${-m}px)`,O={node:t,child:o,options:s,translate:g},N=s.animation?.(O)||{transform:g};J(o.style,b?N:{transform:""})})}}}function pe(t,s){let e={...s},i,a=0,y=0,D=0,k=0,v=0,d,w,l=a=e.index??=0,b=e.position??=0,F=e.direction??=0,I=(e.duration??=450)/2,f=e.sensity??=2.5,o=e.gravity??=1.2,c=e.clamp??=0,m=[["touchmove",te,{passive:!1}],["mousemove",te],["touchend",ne],["mouseup",ne],["scroll",()=>{x(l),o=2}]],g=[["wheel",fe,{passive:!1,capture:!0}]],O=[["touchstart",ee,{passive:!1}],["mousedown",ee],["keydown",ve],["contextmenu",()=>x(l)],["dragstart",n=>n.preventDefault()]],N=new ResizeObserver(n=>{b=e.position=i().position(),x(l),P(t,"resize",{ROE:n,options:e})}),A=new MutationObserver(n=>{M(n,r=>{[...r.addedNodes,...r.removedNodes].every(p=>"index"in p)||oe().then(K)}),P(t,"mutate",{ML:n,options:e})}),T=requestAnimationFrame,h="outline:0;overflow:hidden;user-select:none;-webkit-user-select:none;",E={init:K,update:be,destroy:oe,to:x};K(),M(e.plugins||[],(n,r,u)=>{u[r]=n({node:t,options:e,instance:E})});function K(){le(t).then(()=>{i=()=>de(t,e),t.style.cssText+=h,t.onwheel=Q(se,I,c),b=e.position=i().position(e.loop),N.observe(t),A.observe(t,{childList:!0}),C(t,O),C(window,g),P(t,"mount",{options:e})})}function U(n,r){F=e.direction=q(n),b=e.position+=u(n),l=e.index=i().index(b),o=i().edges()?1.8:e.gravity,f=0,i().animate(),P(t,"move",{index:l,position:b});function u(p){return l-a&&(p-=e.loop?i().swap(l-a):0,a=l,P(t,"index",{index:r})),p}}function Y(n,r){let p=e.snap||i().edges(n)?i().distance(n):b+r,W=I*L(1,n-a,2),V=p-b;D=T(ie);let _=0,R=0,z=0;function ie(re){_||=re,R=z;let ge=_-re,ae=ue(ge/W),Ee=e.easing?.(ae)||ae;z=V*Ee;let ye=R%z?(R-z)%V:0;U(ye,n),$(z)?D=T(ie):(f=e.sensity,H())}}function x(n=0,r=0){n=j(t,e,n),H(),Y(n,r||i().distance(n)-b)}function ee(n){H(),f=e.sensity,y=X(n,e),k=n.timeStamp,v=0,C(window,m),!i().edges()&&n.stopPropagation()}function te(n){let r=(y-X(n,e))*(2-o),u=n.timeStamp-k,p=1e3*r/(o+u);k=n.timeStamp,y=X(n,e),v=(2-o)*p+(o-1)*v,i().sense(n,r,f)&&(U(r,l),n.preventDefault())}function ne(){H();let n=v*(2-o),r=i().index(b+n);Y(u(r,e),n);function u(p,W){return p=c&&p-a?l+c*F:p,j(t,W,p)}}function se(n){H();let r=X(n,e)*(2-o),u=l+q(r)*(c||1),p=e.snap||d||i().edges(),W=i().sense(n,r,f),V=i().edges()?r/5:r,_=d?u:l,R=d?0:I/2;!d&&W&&U(V,l),w=p&&W?setTimeout(x,R,_):void 0,!i().edges()&&n.stopPropagation()}function fe(n){if(n.composedPath().includes(t)){let r=e.axis==="y"&&!i().edges();(Z(n,e)||r||n.shiftKey)&&n.preventDefault();let u=c||e.axis==="y"&&!e.vertical||n.shiftKey;d!==u&&(t.onwheel=Q(se,I,u),d=u)}}function ve(n){let r=["ArrowLeft","ArrowRight","ArrowUp","ArrowDown"],u=(r.indexOf(n.key)%2-1||1)*(c||1);r.indexOf(n.key)>=0&&(x(l+u),n.preventDefault()),P(t,"keys",n.key)}function H(){clearTimeout(w),cancelAnimationFrame(D),C(window,m,!1)}function be(n){M(ce(n),([r,u])=>{if(u!==e[r]){switch(r){case"index":x(l=e[r]=j(t,e,u));break;case"position":x(l,u);break;case"gravity":o=e[r]=L(0,u,2);break;case"duration":e[r]=u,I=u/2;break;case"sensity":f=e[r]=u;break;case"clamp":c=e[r]=u;break;default:e[r]=u;break}P(t,"update",n)}})}async function oe(){H(),N.disconnect(),A.disconnect(),C(t,O,!1),C(window,g,!1),P(t,"destroy",t)}return E}