situs-kit 0.2.2 → 0.2.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +86 -0
- package/dist/chunk-kxrk4nvg.js +2 -0
- package/dist/chunk-s9ce6x50.js +2 -0
- package/dist/index.d.ts +1 -1
- package/dist/index.js +1 -1
- package/dist/smooth-scroll/index.d.ts +6 -1
- package/dist/smooth-scroll/index.js +1 -1
- package/dist/smooth-scroll/observer.d.ts +62 -0
- package/dist/split-text/index.d.ts +1 -0
- package/dist/split-text/index.js +1 -1
- package/package.json +41 -41
- package/dist/chunk-se6yyp59.js +0 -2
- package/dist/chunk-xcfcqftx.js +0 -2
package/README.md
CHANGED
|
@@ -47,6 +47,7 @@ The `element` parameter accepts:
|
|
|
47
47
|
new SplitText(element, {
|
|
48
48
|
type: ["chars", "words", "lines"], // which levels to split
|
|
49
49
|
tag: "span", // wrapper element tag
|
|
50
|
+
children: true, // split children of the target
|
|
50
51
|
mask: ["chars", "lines"], // which levels to mask
|
|
51
52
|
resize: true, // auto-reflow lines on resize
|
|
52
53
|
style: {
|
|
@@ -68,6 +69,7 @@ new SplitText(element, {
|
|
|
68
69
|
|--------|------|---------|-------------|
|
|
69
70
|
| `type` | `SplitType \| SplitType[]` | `["chars", "words", "lines"]` | Split granularity |
|
|
70
71
|
| `tag` | `string` | `"span"` | Wrapper element tag |
|
|
72
|
+
| `children` | `boolean` | `false` | Split the target's child elements instead of the target itself |
|
|
71
73
|
| `mask` | `boolean \| SplitType[]` | `false` | Create overflow-hidden wrappers. `true` masks all requested types; array masks only specified types |
|
|
72
74
|
| `resize` | `boolean` | `true` | Auto-reflow lines on window resize (only applies when lines are split) |
|
|
73
75
|
| `style` | `object` | — | Inline styles per split type (`chars`, `words`, `lines`, `mask`) |
|
|
@@ -174,6 +176,25 @@ const split2 = new SplitText("#text", {
|
|
|
174
176
|
});
|
|
175
177
|
```
|
|
176
178
|
|
|
179
|
+
## Children Mode
|
|
180
|
+
|
|
181
|
+
When `children: true`, SplitText splits each direct child element of the target instead of the target itself. Useful when a container holds multiple blocks (headings, paragraphs) that should all be split with one call.
|
|
182
|
+
|
|
183
|
+
```ts
|
|
184
|
+
// <div id="hero">
|
|
185
|
+
// <h1>Title</h1>
|
|
186
|
+
// <p>Subtitle text here</p>
|
|
187
|
+
// </div>
|
|
188
|
+
|
|
189
|
+
const split = new SplitText("#hero", {
|
|
190
|
+
type: "words",
|
|
191
|
+
children: true,
|
|
192
|
+
});
|
|
193
|
+
|
|
194
|
+
// splits both <h1> and <p> individually
|
|
195
|
+
split.words; // HTMLElement[] from all children
|
|
196
|
+
```
|
|
197
|
+
|
|
177
198
|
## Multi-Element Support
|
|
178
199
|
|
|
179
200
|
When passing multiple elements (via selector, array, or array-like), SplitText creates sub-instances and aggregates all results into the top-level `chars`, `words`, `lines`, and `masks` arrays.
|
|
@@ -267,6 +288,71 @@ scroll.on("scroll", ({ current, target, velocity, direction, max }) => {});
|
|
|
267
288
|
scroll.off("scroll", callback);
|
|
268
289
|
```
|
|
269
290
|
|
|
291
|
+
## ScrollObserver
|
|
292
|
+
|
|
293
|
+
Observe when elements enter and leave the viewport based on scroll position.
|
|
294
|
+
|
|
295
|
+
```ts
|
|
296
|
+
scroll.observe({
|
|
297
|
+
trigger: "#my-element",
|
|
298
|
+
start: { dom: "top", viewport: "80%" },
|
|
299
|
+
end: { dom: "bottom", viewport: "20%" },
|
|
300
|
+
onEnter(info) { console.log("entered", info.progress); },
|
|
301
|
+
onLeave(info) { console.log("left"); },
|
|
302
|
+
});
|
|
303
|
+
```
|
|
304
|
+
|
|
305
|
+
### `observe(config)` / `obs(config)`
|
|
306
|
+
|
|
307
|
+
Returns a `ScrollObserverInstance` with `kill()` and `info`.
|
|
308
|
+
|
|
309
|
+
```ts
|
|
310
|
+
const observer = scroll.observe({ trigger: "#el" });
|
|
311
|
+
observer.info.progress; // 0–1
|
|
312
|
+
observer.info.isActive; // boolean
|
|
313
|
+
observer.kill(); // remove this observer
|
|
314
|
+
```
|
|
315
|
+
|
|
316
|
+
### Config
|
|
317
|
+
|
|
318
|
+
| Option | Type | Default | Description |
|
|
319
|
+
|--------|------|---------|-------------|
|
|
320
|
+
| `trigger` | `HTMLElement \| string` | — | Element to observe (required) |
|
|
321
|
+
| `start` | `ScrollPosition` | `"top bottom"` | When the observer activates |
|
|
322
|
+
| `end` | `ScrollPosition` | `"bottom top"` | When the observer deactivates |
|
|
323
|
+
| `onEnter` | `(info) => void` | — | Scrolling forward past start |
|
|
324
|
+
| `onLeave` | `(info) => void` | — | Scrolling forward past end |
|
|
325
|
+
| `onEnterBack` | `(info) => void` | — | Scrolling backward past end |
|
|
326
|
+
| `onLeaveBack` | `(info) => void` | — | Scrolling backward past start |
|
|
327
|
+
| `onUpdate` | `(info) => void` | — | Every frame while active |
|
|
328
|
+
| `once` | `boolean` | `false` | Auto-kill after first activation |
|
|
329
|
+
| `markers` | `boolean` | `false` | Show debug lines for start/end |
|
|
330
|
+
| `toggleClass` | `string` | — | Class added while active, removed otherwise |
|
|
331
|
+
|
|
332
|
+
### ScrollPosition
|
|
333
|
+
|
|
334
|
+
`start` and `end` accept a string or an object:
|
|
335
|
+
|
|
336
|
+
```ts
|
|
337
|
+
// String form — "dom viewport"
|
|
338
|
+
start: "top 80%"
|
|
339
|
+
|
|
340
|
+
// Object form — self-documenting
|
|
341
|
+
start: { dom: "top", viewport: "80%" }
|
|
342
|
+
```
|
|
343
|
+
|
|
344
|
+
Both `dom` and `viewport` tokens support named positions (`top`, `center`, `bottom`, `left`, `right`), percentages (`80%`), and offsets (`top+=100`, `bottom-=50`).
|
|
345
|
+
|
|
346
|
+
### Observer Info
|
|
347
|
+
|
|
348
|
+
| Property | Type | Description |
|
|
349
|
+
|----------|------|-------------|
|
|
350
|
+
| `progress` | `number` | 0–1 between start and end |
|
|
351
|
+
| `isActive` | `boolean` | Whether currently between start and end |
|
|
352
|
+
| `state` | `"before" \| "active" \| "after"` | Current state |
|
|
353
|
+
| `direction` | `1 \| -1` | Scroll direction |
|
|
354
|
+
| `trigger` | `HTMLElement` | The observed element |
|
|
355
|
+
|
|
270
356
|
## Window vs Element Mode
|
|
271
357
|
|
|
272
358
|
Both modes use the same scroll-jacking approach: wheel is intercepted for smooth damping, touch and programmatic scrolls sync via native `scroll` events.
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{c as C,e as c,f as w}from"./chunk-0t3a7kj5.js";var I=1,x=2,K=4,_="inline-block",h="nowrap",f="baseline",u="0px",E="block",g="maskChar",m="maskWord",n="maskLine",o=/^\s+$/,l=/(\s+)/,t=",div,span,svg,img,br,hr,canvas,video,audio,iframe,input,textarea,select,button,picture,figure,",p={u:"underline",ins:"underline",s:"line-through",strike:"line-through",del:"line-through"};class a{dom;chars;words;lines;masks;_n;_k;_g;_j;_f=[];_o=new Map;_i=null;_h=0;_l=!1;_c="";_d;_e;_b;_a=null;constructor(z,J={}){let F;if(typeof z==="string"){let Q=w(z);if(Q.length>1)F=Q;else{let $=Q[0]??c(z);if(!$)throw Error("SplitText: element not found");F=$}}else F=z;if(J.children){if(Array.isArray(F)||typeof F==="object"&&F!==null&&"length"in F&&typeof F.item==="function")F=Array.from(F).flatMap((H)=>Array.from(H.children));else F=Array.from(F.children);let{children:Q,...$}=J;J=$}if(Array.isArray(F)||typeof F==="object"&&F!==null&&"length"in F&&typeof F.item==="function"){let Q=Array.from(F);if(Q.length===0)throw Error("SplitText: empty element array");this._a=Q.map(($)=>new a($,J)),this.dom=Q,this.chars=this._a.flatMap(($)=>$.chars),this.words=this._a.flatMap(($)=>$.words),this.lines=this._a.flatMap(($)=>$.lines),this.masks={chars:this._a.flatMap(($)=>$.masks.chars),words:this._a.flatMap(($)=>$.masks.words),lines:this._a.flatMap(($)=>$.masks.lines)},this._n="",this._k=0,this._g=0,this._j="";return}let U=F;this._b=U,this.dom=U,this._n=U.innerHTML,this.chars=[],this.words=[],this.lines=[],this.masks={chars:[],words:[],lines:[]};let G=J.type?Array.isArray(J.type)?J.type:[J.type]:["chars","words","lines"],D=0;for(let Q of G)if(Q==="chars")D|=I;else if(Q==="words")D|=x;else if(Q==="lines")D|=K;this._k=D,this._j=J.tag??"span";let Z=0;if(J.mask===!0)Z=D;else if(Array.isArray(J.mask)){for(let Q of J.mask)if(Q==="chars")Z|=I;else if(Q==="words")Z|=x;else if(Q==="lines")Z|=K}if(this._g=Z,this._d=J.style,this._e=J.class,this._w(),(J.resize??!0)&&D&K)this._x()}_p(z,J){let F=document.createElement(this._j);if(z)F.dataset[z]="";if(F.style.display=_,J!==void 0)F.textContent=J;return F}_s(z,J){let F=document.createElement(this._j);if(F.dataset[J]="",F.style.overflow="hidden",F.style.display=z,this._d?.mask)Object.assign(F.style,this._d.mask);if(this._e?.mask)F.classList.add(this._e.mask);return F}_r(z,J,F,q,U){if(this._g&J){let G=this._s(F,q);return G.appendChild(z),U.push(G),G}return z}_m(z,J,F,q){if(F){let{outer:U,inner:G}=F();if(G.appendChild(J),q)this._o.set(q,U);z.appendChild(U)}else z.appendChild(J)}_q(z,J,F){if(z.style.textDecoration=J,F)z.style.textDecorationColor=F}_w(){this._l=!0;let z=this._b,J=C(z),F=J?parseFloat(J.letterSpacing)||0:0;if(this._c=J?J.textIndent:"",this._c&&this._c!==u)z.style.textIndent="0";let q=this._k,U=!!(q&I),G=!!(q&x),D=!!(q&K),Z=G||D,Q=!!(this._g&I),$=new Map,H=(M)=>{for(let N of Array.from(M.childNodes))if(N.nodeType===1){let O=N.tagName.toLowerCase();if(p[O]){let v=C(N)?.textDecorationColor;if(v)$.set(N,v)}H(N)}};H(z);let Y=Array.from(z.childNodes),T=document.createDocumentFragment();z.replaceChildren();let k=(M,N,O,v)=>{if(M.nodeType===3){let X=(M.textContent??"").split(l);for(let j of X){if(!j)continue;if(o.test(j)){T.appendChild(document.createTextNode(j));continue}let V=Z?this._p(G?"word":""):null;if(V){if(V.style.whiteSpace=h,O&&!U)this._q(V,O,v)}if(U){let b=[...j],s=this.chars.length;for(let P=0;P<b.length;P++){let R=this._p("char",b[P]);if(F&&P<b.length-1)R.style.marginRight=`${F}px`;if(O)this._q(R,O,v);if(this.chars.push(R),this._d?.chars)Object.assign(R.style,this._d.chars);if(this._e?.chars)R.classList.add(this._e.chars);let y=Q?this._r(R,I,_,g,this.masks.chars):R;if(V)V.appendChild(y)}if(!V){let P=N?N():null,R=P?P.inner:T;for(let y=s;y<this.chars.length;y++){let S=this.chars[y];R.appendChild(Q&&S.parentElement?.dataset?.[g]!==void 0?S.parentElement:S)}if(P)T.appendChild(P.outer)}}else if(V){if(V.textContent=j,F)V.style.letterSpacing=`${F}px`}if(V){if(G){if(this.words.push(V),this._d?.words)Object.assign(V.style,this._d.words);if(this._e?.words)V.classList.add(this._e.words)}this._f.push(V);let b=this._g&x?this._r(V,x,_,m,this.masks.words):V;this._m(T,b,N,V)}else if(!U)this._m(T,document.createTextNode(j),N)}return}if(M.nodeType!==1)return;let B=M,A=B.tagName.toLowerCase();if(t.includes(","+A+",")){let X=B.cloneNode(!0);if(O)this._q(X,O,v);let j=C(B)?.verticalAlign;if(j&&j!==f)X.style.verticalAlign=j;if(Z){let V=this._p(G?"word":"");if(V.style.whiteSpace=h,j&&j!==f)V.style.verticalAlign=j;if(V.appendChild(X),G){if(this.words.push(V),this._d?.words)Object.assign(V.style,this._d.words);if(this._e?.words)V.classList.add(this._e.words)}this._f.push(V);let b=this._g&x?this._r(V,x,_,m,this.masks.words):V;this._m(T,b,N,V)}else this._m(T,X,N);return}let r=()=>{let X=B.cloneNode(!1);if(N){let{outer:j,inner:V}=N();return V.appendChild(X),{outer:j,inner:X}}return{outer:X,inner:X}},L=p[A],i=L?O?`${O} ${L}`:L:O,d=L?$.get(B)||v:v;for(let X of Array.from(B.childNodes))k(X,r,i,d)};for(let M of Y)k(M,null,"","");z.appendChild(T);let W=!!(this._c&&this._c!==u);if(D)this._y(W);else if(W){let M=G?this.words[0]:U?this.chars[0]:null;if(M)M.style.marginLeft=this._c,z.style.textIndent="0"}this._l=!1}_y(z){if(z&&this._f[0])this._f[0].style.marginLeft=this._c;this._t();let J=[];if(typeof document.fonts?.status==="string"&&document.fonts.status!=="loaded")J.push(document.fonts.ready);let F=this._b.querySelectorAll("img");for(let q=0;q<F.length;q++){let U=F[q];if(!U.complete)J.push(new Promise((G)=>{U.addEventListener("load",G,{once:!0}),U.addEventListener("error",G,{once:!0})}))}if(J.length){let q=this._b.offsetHeight;Promise.all(J).then(()=>{if(this._b.offsetHeight!==q)this.reflow()})}}_u(z){return this._o.get(z)??z}_t(){let z=this._f;if(!z.length)return;let J=z[0].offsetTop,F=J+z[0].offsetHeight,q=[],U=[];for(let Q of z){let $=Q.offsetTop,H=$+Q.offsetHeight;if($<F&&H>J)J=Math.min(J,$),F=Math.max(F,H);else U.push(q),q=[],J=$,F=H;q.push(Q)}if(q.length)U.push(q);let G=!!(this._c&&this._c!==u);if(G&&z[0])z[0].style.marginLeft="";let D=!!(this._g&K),Z=document.createDocumentFragment();for(let Q=0;Q<U.length;Q++){let $=U[Q],H=document.createElement(this._j);if(H.dataset.line="",H.style.display=E,Q===0&&G)H.style.paddingLeft=this._c;for(let Y=0;Y<$.length;Y++){if(Y>0)H.appendChild(document.createTextNode(" "));H.appendChild(this._u($[Y]))}if(this.lines.push(H),this._d?.lines)Object.assign(H.style,this._d.lines);if(this._e?.lines)H.classList.add(this._e.lines);if(D){let Y=this._s(E,n);Y.appendChild(H),this.masks.lines.push(Y),Z.appendChild(Y)}else Z.appendChild(H)}this._b.replaceChildren(Z)}_x(){let z=this._b.offsetParent?this._b.offsetParent.offsetWidth:window.innerWidth,J=()=>{if(this._l)return;let q=this._b.offsetParent,U=q?q.offsetWidth:window.innerWidth;if(U===z)return;if(z=U,this._h)cancelAnimationFrame(this._h);this._h=requestAnimationFrame(()=>this.reflow())};this._i=new ResizeObserver(J);let F=this._b.offsetParent??this._b.parentElement;if(F)this._i.observe(F);else this._i.observe(this._b)}reflow(){if(this._a){this._a.forEach((J)=>J.reflow()),this._v();return}if(!(this._k&K)||this._l)return;let z=document.createDocumentFragment();for(let J=0;J<this._f.length;J++){if(J>0)z.appendChild(document.createTextNode(" "));z.appendChild(this._u(this._f[J]))}if(this._b.replaceChildren(z),this.lines.length=0,this.masks.lines.length=0,this._c&&this._c!==u&&this._f[0])this._f[0].style.marginLeft=this._c;this._t()}revert(){if(this._a){this._a.forEach((z)=>z.revert()),this._v();return}this.destroy(),this._b.innerHTML=this._n,this.chars.length=0,this.words.length=0,this._f.length=0,this._o.clear(),this.lines.length=0,this.masks.chars.length=0,this.masks.words.length=0,this.masks.lines.length=0}destroy(){if(this._a){this._a.forEach((z)=>z.destroy());return}if(this._h)cancelAnimationFrame(this._h),this._h=0;if(this._i)this._i.disconnect(),this._i=null}_v(){if(!this._a)return;this.chars.length=0,this.words.length=0,this.lines.length=0,this.masks.chars.length=0,this.masks.words.length=0,this.masks.lines.length=0;for(let z of this._a)this.chars.push(...z.chars),this.words.push(...z.words),this.lines.push(...z.lines),this.masks.chars.push(...z.masks.chars),this.masks.words.push(...z.masks.words),this.masks.lines.push(...z.masks.lines)}}
|
|
2
|
+
export{a};
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{d as M,e as q}from"./chunk-0t3a7kj5.js";import{g as L,h as U}from"./chunk-qjsknche.js";function C(j,B,G){return Math.min(Math.max(j,B),G)}function O(j,B,G){return j+(B-j)*G}function z(j,B,G){let H=B-j;return H===0?0:C((G-j)/H,0,1)}function D(j,B,G,H){let Q=1-Math.exp(-G*H);return O(j,B,Q)}var P={top:0,left:0,center:0.5,bottom:1,right:1};function R(j){if(j in P)return P[j];if(j.endsWith("%"))return parseFloat(j)/100;let B=parseFloat(j);return isNaN(B)?0:B}function W(j){let B=j.indexOf("+=");if(B!==-1){let H=R(j.slice(0,B)),Q=parseFloat(j.slice(B+2));return[H,isNaN(Q)?0:Q]}let G=j.indexOf("-=");if(G!==-1){let H=R(j.slice(0,G)),Q=parseFloat(j.slice(G+2));return[H,isNaN(Q)?0:-Q]}return[R(j),0]}function x(j){if(typeof j==="object"){let[K,Z]=W(j.dom),[J,Y]=W(j.viewport);return[K,J,Z,Y]}let B=j.trim().split(/\s+/),[G,H]=W(B[0]),[Q,V]=B.length>1?W(B[1]):[G,0];return[G,Q,H,V]}class I{_l=new Set;_m=null;_j;constructor(j){this._j=j}_C(j,B){let[G,H,Q,V]=B,K=this._j,Z,J,Y;if(K._b)if(J=j.height,Y=K._d?window.innerHeight:K._c.clientHeight,K._d)Z=j.top+K._a;else{let X=K._c.getBoundingClientRect();Z=j.top-X.top+K._a}else if(J=j.width,Y=K._d?window.innerWidth:K._c.clientWidth,K._d)Z=j.left+K._a;else{let X=K._c.getBoundingClientRect();Z=j.left-X.left+K._a}return Z+G*J-H*Y+Q+V}_D(j){let B=this._j,G=j.el.getBoundingClientRect(),H=this._C(G,j.startParsed),Q=this._C(G,j.endParsed),V=Q-H,K=B._a,Z=V===0?K>=H?1:0:C((K-H)/V,0,1),J;if(K<H)J="before";else if(K>=Q)J="after";else J="active";let{state:Y,info:X,cfg:N}=j;if(X.progress=Z,X.direction=B._k,X.isActive=J==="active",X.state=J,Y!==J){if(j.state=J,N.toggleClass)if(J==="active")j.el.classList.add(N.toggleClass);else j.el.classList.remove(N.toggleClass);if(Y==="before"&&J==="active")N.onEnter?.(X);else if(Y==="active"&&J==="after")N.onLeave?.(X);else if(Y==="after"&&J==="active")N.onEnterBack?.(X);else if(Y==="active"&&J==="before")N.onLeaveBack?.(X);else if(Y==="before"&&J==="after")N.onEnter?.(X),N.onLeave?.(X);else if(Y==="after"&&J==="before")N.onEnterBack?.(X),N.onLeaveBack?.(X);if(N.once&&(J==="active"||Y==="before"&&J==="after")){this._x(j);return}}if(J==="active")N.onUpdate?.(X)}_P(){for(let j of this._l)this._D(j)}_x(j){if(this._l.delete(j),j.cfg.toggleClass&&j.state==="active")j.el.classList.remove(j.cfg.toggleClass);if(j.markerEls){for(let B of j.markerEls)B.parentElement?.removeChild(B);j.markerEls=null}if(this._l.size===0&&this._m)this._j.off("scroll",this._m),this._m=null}killAll(){for(let j of this._l)this._x(j);this._l.clear()}_O(j,B){let G=this._j,H=[],Q=G._b?"top":"left",V=G._b?"height":"width",K=G._b?"width":"height",Z=G._d?G._b?window.innerHeight:window.innerWidth:G._b?G._c.clientHeight:G._c.clientWidth,J=(Y,X)=>{let N=document.createElement("div");if(N.style.position="fixed",N.style[Q]=Y*Z+"px",N.style[K]="100%",N.style[V]="2px",N.style.background=X,N.style.pointerEvents="none",N.style.zIndex="99999",G._b)N.style.left="0";else N.style.top="0";return document.body.appendChild(N),N};return H.push(J(j,"#00ff00")),H.push(J(B,"#ff0000")),H}observe(j){let B=typeof j.trigger==="string"?q(j.trigger):j.trigger;if(!B)throw Error(`ScrollObserver: trigger element not found: ${j.trigger}`);let G=x(j.start??"top bottom"),H=x(j.end??"bottom top"),Q={progress:0,isActive:!1,state:"before",direction:this._j._k,trigger:B},V={el:B,cfg:j,info:Q,state:"before",startParsed:G,endParsed:H,markerEls:null};if(j.markers)V.markerEls=this._O(G[1],H[1]);if(this._l.add(V),!this._m)this._m=()=>this._P(),this._j.on("scroll",this._m);return this._D(V),{kill:()=>this._x(V),get info(){return V.info}}}}var $=0.09;class T{_c;_d;_b;_E;_f;_F;_r=!1;_u=!1;_p=new Map;_a=0;_e=0;_o=0;_k=1;_t=!1;_U={current:0,target:0,velocity:0,direction:1,max:0,scrolling:!1};_g=!1;_B=0;_v=0;_L=0;_h=0;_w=null;_i=$;_n=null;_G;_H;_I;_y;_s;constructor(j={}){let B=j.wrapper??window;this._c=typeof B==="string"?q(B)??window:B,this._d=this._c===window,this._b=(j.direction??"vertical")==="vertical",this._E=j.duration??0,this._f=j.ease??$,this._F=j.prevent??!this._d,this._G=this._Q.bind(this),this._H=this._R.bind(this),this._I=this._S.bind(this),this._y=()=>this._T(),this._s=new I(this);let G=this._d?this._b?window.scrollY:window.scrollX:this._b?this._c.scrollTop:this._c.scrollLeft;this._a=G,this._e=G,this.start()}get scroll(){let j=this._U;return j.current=this._a,j.target=this._e,j.velocity=this._o,j.direction=this._k,j.max=this._z(),j.scrolling=this._t,j}_z(){if(this._d)return this._b?document.documentElement.scrollHeight-window.innerHeight:document.documentElement.scrollWidth-window.innerWidth;let j=this._c;return this._b?j.scrollHeight-j.clientHeight:j.scrollWidth-j.clientWidth}_A(j){return C(j,0,this._z())}on(j,B){let G=this._p.get(j);if(!G)G=new Set,this._p.set(j,G);G.add(B)}off(j,B){this._p.get(j)?.delete(B)}_K(j){let B=this._p.get(j);if(!B)return;let G=this.scroll;for(let H of B)H(G)}_q(){if(this._u)return;this._u=!0,U.add(this._y)}_N(){if(!this._u)return;this._u=!1,U.remove(this._y)}to(j,B={}){let G;if(typeof j==="number")G=j;else{let V=typeof j==="string"?q(j):j;if(!V)return;let K=V.getBoundingClientRect();if(this._d)G=(this._b?K.top:K.left)+this._a;else{let J=this._c.getBoundingClientRect();G=(this._b?K.top-J.top:K.left-J.left)+this._a}}if(G+=B.offset??0,G=this._A(G),B.immediate){this._a=G,this._e=G,this._g=!0,this._J(),this._K("scroll"),this._g=!1,B.onComplete?.();return}this._g=!0,this._q();let H=B.ease??this._f,Q=B.duration??this._E;if(typeof H==="number")this._h=0,this._e=G,this._i=H,this._n=B.onComplete??null;else if(Q>0)this._B=this._a,this._v=G,this._L=performance.now(),this._h=Q,this._i=H,this._w=B.onComplete??null,this._n=null;else this._h=0,this._e=G,this._i=typeof this._f==="number"?this._f:$,this._n=B.onComplete??null}_M(j){let B=this._d?window:this._c;M(B,j,"wheel",this._G),M(B,j,"scroll",this._H,{passive:!0}),M(window,j,"keydown",this._I)}start(){if(this._r)return;this._r=!0,this._M("a")}stop(){if(!this._r)return;this._r=!1,this._M("r"),this._N()}destroy(){this._s.killAll(),this.stop(),this._p.clear()}_Q(j){if(j.preventDefault(),this._F)j.stopPropagation();let B=this._b?j.deltaY:j.deltaX;if(j.deltaMode===1)B*=0.833333;else if(j.deltaMode===2)B*=0.555556;this._e=this._A(this._e+B),this._h=0,this._i=typeof this._f==="number"?this._f:$,this._g=!0,this._q(),this._k=B>0?1:-1}_R(){if(this._g)return;let j=this._d?this._b?window.scrollY:window.scrollX:this._b?this._c.scrollTop:this._c.scrollLeft;this._a=j,this._e=j}_S(j){if(!this._d){let H=document.activeElement;if(H!==this._c&&!this._c.contains(H))return}let B=0,G=this._b?this._d?window.innerHeight:this._c.clientHeight:this._d?window.innerWidth:this._c.clientWidth;switch(j.key){case"ArrowDown":B=100;break;case"ArrowUp":B=-100;break;case"ArrowRight":if(!this._b)B=100;break;case"ArrowLeft":if(!this._b)B=-100;break;case" ":B=j.shiftKey?-G:G;break;case"PageDown":B=G;break;case"PageUp":B=-G;break;case"Home":this._e=0,this._h=0,this._i=typeof this._f==="number"?this._f:$,this._g=!0,this._q();return;case"End":this._e=this._z(),this._h=0,this._i=typeof this._f==="number"?this._f:$,this._g=!0,this._q();return;default:return}if(B)j.preventDefault(),this._e=this._A(this._e+B),this._h=0,this._i=typeof this._f==="number"?this._f:$,this._g=!0,this._q(),this._k=B>0?1:-1}_J(){if(this._d)if(this._b)window.scrollTo(0,this._a);else window.scrollTo(this._a,0);else{let j=this._c;if(this._b)j.scrollTop=this._a;else j.scrollLeft=this._a}}_T(){if(!this._r)return;let j=this._a,B=!1;if(this._g){if(this._h>0){let H=performance.now()-this._L,Q=z(0,this._h,H),V=this._i(Q);if(this._a=this._B+(this._v-this._B)*V,this._e=this._v,Q>=1)this._a=this._v,this._h=0,B=!0}else{let H=this._i;if(this._a=D(this._a,this._e,H,L()),Math.abs(this._e-this._a)<0.5)this._a=this._e,B=!0}this._J()}this._o=this._a-j;let G=this._t;if(this._t=Math.abs(this._o)>0.01,this._o>0)this._k=1;else if(this._o<0)this._k=-1;if(this._t||G)this._K("scroll");if(B){if(this._g=!1,this._N(),this._w){let H=this._w;this._w=null,H()}if(this._n){let H=this._n;this._n=null,H()}}}observe(j){return this._s.observe(j)}obs(j){return this._s.observe(j)}}
|
|
2
|
+
export{T as b};
|
package/dist/index.d.ts
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
export { SplitText, type SplitTextOptions, type SplitType, } from "./split-text/index.ts";
|
|
2
|
-
export { SmoothScroll, type SmoothScrollOptions, type ScrollToOptions, type ScrollState, } from "./smooth-scroll/index.ts";
|
|
2
|
+
export { SmoothScroll, type SmoothScrollOptions, type ScrollToOptions, type ScrollState, type ScrollObserverConfig, type ScrollObserverInfo, type ScrollObserverInstance, type ScrollPosition, } from "./smooth-scroll/index.ts";
|
|
3
3
|
export { Ticker, getDeltaFrame, type TickerCallback } from "./ticker/index.ts";
|
package/dist/index.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{a as
|
|
1
|
+
import{a as e}from"./chunk-kxrk4nvg.js";import{b as r}from"./chunk-s9ce6x50.js";import"./chunk-0t3a7kj5.js";import{g as t,h as o}from"./chunk-qjsknche.js";export{t as getDeltaFrame,o as Ticker,e as SplitText,r as SmoothScroll};
|
|
@@ -1,3 +1,6 @@
|
|
|
1
|
+
import { _ObserverManager } from "./observer.ts";
|
|
2
|
+
export type { ScrollObserverConfig, ScrollObserverInfo, ScrollObserverInstance, ScrollPosition, } from "./observer.ts";
|
|
3
|
+
import type { ScrollObserverConfig, ScrollObserverInstance } from "./observer.ts";
|
|
1
4
|
export interface SmoothScrollOptions {
|
|
2
5
|
wrapper?: Window | HTMLElement | string;
|
|
3
6
|
direction?: "vertical" | "horizontal";
|
|
@@ -49,6 +52,7 @@ export declare class SmoothScroll {
|
|
|
49
52
|
/** @internal */ _onScrollBound: () => void;
|
|
50
53
|
/** @internal */ _onKeyDownBound: (e: KeyboardEvent) => void;
|
|
51
54
|
/** @internal */ _tickBound: () => void;
|
|
55
|
+
/** @internal */ _obs: _ObserverManager;
|
|
52
56
|
constructor(options?: SmoothScrollOptions);
|
|
53
57
|
get scroll(): ScrollState;
|
|
54
58
|
/** @internal */
|
|
@@ -79,5 +83,6 @@ export declare class SmoothScroll {
|
|
|
79
83
|
_applyScroll(): void;
|
|
80
84
|
/** @internal */
|
|
81
85
|
_tick(): void;
|
|
86
|
+
observe(config: ScrollObserverConfig): ScrollObserverInstance;
|
|
87
|
+
obs(config: ScrollObserverConfig): ScrollObserverInstance;
|
|
82
88
|
}
|
|
83
|
-
export {};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{b as a}from"../chunk-
|
|
1
|
+
import{b as a}from"../chunk-s9ce6x50.js";import"../chunk-0t3a7kj5.js";import"../chunk-qjsknche.js";export{a as SmoothScroll};
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
type ObserverState = "before" | "active" | "after";
|
|
2
|
+
export type ScrollPosition = string | {
|
|
3
|
+
dom: string;
|
|
4
|
+
viewport: string;
|
|
5
|
+
};
|
|
6
|
+
export interface ScrollObserverConfig {
|
|
7
|
+
trigger: HTMLElement | string;
|
|
8
|
+
start?: ScrollPosition;
|
|
9
|
+
end?: ScrollPosition;
|
|
10
|
+
onEnter?: (self: ScrollObserverInfo) => void;
|
|
11
|
+
onLeave?: (self: ScrollObserverInfo) => void;
|
|
12
|
+
onEnterBack?: (self: ScrollObserverInfo) => void;
|
|
13
|
+
onLeaveBack?: (self: ScrollObserverInfo) => void;
|
|
14
|
+
onUpdate?: (self: ScrollObserverInfo) => void;
|
|
15
|
+
once?: boolean;
|
|
16
|
+
markers?: boolean;
|
|
17
|
+
toggleClass?: string;
|
|
18
|
+
}
|
|
19
|
+
export interface ScrollObserverInfo {
|
|
20
|
+
progress: number;
|
|
21
|
+
isActive: boolean;
|
|
22
|
+
state: ObserverState;
|
|
23
|
+
direction: 1 | -1;
|
|
24
|
+
trigger: HTMLElement;
|
|
25
|
+
}
|
|
26
|
+
export interface ScrollObserverInstance {
|
|
27
|
+
kill(): void;
|
|
28
|
+
readonly info: ScrollObserverInfo;
|
|
29
|
+
}
|
|
30
|
+
/** Minimal contract the observer needs from the scroll host. */
|
|
31
|
+
export interface ScrollHost {
|
|
32
|
+
_current: number;
|
|
33
|
+
_isW: boolean;
|
|
34
|
+
_vertical: boolean;
|
|
35
|
+
_wrapper: Window | HTMLElement;
|
|
36
|
+
_dir: 1 | -1;
|
|
37
|
+
on(event: string, callback: (...args: any[]) => void): void;
|
|
38
|
+
off(event: string, callback: (...args: any[]) => void): void;
|
|
39
|
+
}
|
|
40
|
+
interface _ObserverEntry {
|
|
41
|
+
el: HTMLElement;
|
|
42
|
+
cfg: ScrollObserverConfig;
|
|
43
|
+
info: ScrollObserverInfo;
|
|
44
|
+
state: ObserverState;
|
|
45
|
+
startParsed: [number, number, number, number];
|
|
46
|
+
endParsed: [number, number, number, number];
|
|
47
|
+
markerEls: HTMLElement[] | null;
|
|
48
|
+
}
|
|
49
|
+
export declare class _ObserverManager {
|
|
50
|
+
_entries: Set<_ObserverEntry>;
|
|
51
|
+
_scrollBound: ((...args: any[]) => void) | null;
|
|
52
|
+
_host: ScrollHost;
|
|
53
|
+
constructor(host: ScrollHost);
|
|
54
|
+
_computeScrollPos(rect: DOMRect, parsed: [number, number, number, number]): number;
|
|
55
|
+
_check(entry: _ObserverEntry): void;
|
|
56
|
+
_update(): void;
|
|
57
|
+
_kill(entry: _ObserverEntry): void;
|
|
58
|
+
killAll(): void;
|
|
59
|
+
_createMarkers(scrollerStartFrac: number, scrollerEndFrac: number): HTMLElement[];
|
|
60
|
+
observe(config: ScrollObserverConfig): ScrollObserverInstance;
|
|
61
|
+
}
|
|
62
|
+
export {};
|
package/dist/split-text/index.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{a}from"../chunk-
|
|
1
|
+
import{a}from"../chunk-kxrk4nvg.js";import"../chunk-0t3a7kj5.js";export{a as SplitText};
|
package/package.json
CHANGED
|
@@ -1,43 +1,43 @@
|
|
|
1
1
|
{
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
2
|
+
"name": "situs-kit",
|
|
3
|
+
"version": "0.2.4",
|
|
4
|
+
"description": "A creative developer helper library",
|
|
5
|
+
"license": "MIT",
|
|
6
|
+
"module": "./dist/index.js",
|
|
7
|
+
"main": "./dist/index.js",
|
|
8
|
+
"types": "./dist/index.d.ts",
|
|
9
|
+
"type": "module",
|
|
10
|
+
"exports": {
|
|
11
|
+
".": {
|
|
12
|
+
"types": "./dist/index.d.ts",
|
|
13
|
+
"import": "./dist/index.js"
|
|
14
|
+
},
|
|
15
|
+
"./split-text": {
|
|
16
|
+
"types": "./dist/split-text/index.d.ts",
|
|
17
|
+
"import": "./dist/split-text/index.js"
|
|
18
|
+
},
|
|
19
|
+
"./smooth-scroll": {
|
|
20
|
+
"types": "./dist/smooth-scroll/index.d.ts",
|
|
21
|
+
"import": "./dist/smooth-scroll/index.js"
|
|
22
|
+
},
|
|
23
|
+
"./ticker": {
|
|
24
|
+
"types": "./dist/ticker/index.d.ts",
|
|
25
|
+
"import": "./dist/ticker/index.js"
|
|
26
|
+
}
|
|
27
|
+
},
|
|
28
|
+
"files": [
|
|
29
|
+
"dist"
|
|
30
|
+
],
|
|
31
|
+
"scripts": {
|
|
32
|
+
"build": "bun build.ts && bunx tsc -p tsconfig.build.json",
|
|
33
|
+
"prepublishOnly": "bun run build",
|
|
34
|
+
"test": "bun test",
|
|
35
|
+
"dev": "bun run examples/serve.ts"
|
|
36
|
+
},
|
|
37
|
+
"devDependencies": {
|
|
38
|
+
"@types/bun": "latest"
|
|
39
|
+
},
|
|
40
|
+
"peerDependencies": {
|
|
41
|
+
"typescript": "^5"
|
|
42
|
+
}
|
|
43
43
|
}
|
package/dist/chunk-se6yyp59.js
DELETED
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import{c as C,e as c,f as w}from"./chunk-0t3a7kj5.js";var I=1,x=2,K=4,_="inline-block",h="nowrap",f="baseline",u="0px",E="block",m="maskChar",g="maskWord",n="maskLine",o=/^\s+$/,l=/(\s+)/,t=",div,span,svg,img,br,hr,canvas,video,audio,iframe,input,textarea,select,button,picture,figure,",p={u:"underline",ins:"underline",s:"line-through",strike:"line-through",del:"line-through"};class a{dom;chars;words;lines;masks;_n;_k;_g;_j;_f=[];_o=new Map;_i=null;_h=0;_l=!1;_c="";_d;_e;_b;_a=null;constructor(z,F={}){let J;if(typeof z==="string"){let $=w(z);if($.length>1)J=$;else{let Q=$[0]??c(z);if(!Q)throw Error("SplitText: element not found");J=Q}}else J=z;if(Array.isArray(J)||typeof J==="object"&&J!==null&&"length"in J&&typeof J.item==="function"){let $=Array.from(J);if($.length===0)throw Error("SplitText: empty element array");this._a=$.map((Q)=>new a(Q,F)),this.dom=$,this.chars=this._a.flatMap((Q)=>Q.chars),this.words=this._a.flatMap((Q)=>Q.words),this.lines=this._a.flatMap((Q)=>Q.lines),this.masks={chars:this._a.flatMap((Q)=>Q.masks.chars),words:this._a.flatMap((Q)=>Q.masks.words),lines:this._a.flatMap((Q)=>Q.masks.lines)},this._n="",this._k=0,this._g=0,this._j="";return}let U=J;this._b=U,this.dom=U,this._n=U.innerHTML,this.chars=[],this.words=[],this.lines=[],this.masks={chars:[],words:[],lines:[]};let G=F.type?Array.isArray(F.type)?F.type:[F.type]:["chars","words","lines"],D=0;for(let $ of G)if($==="chars")D|=I;else if($==="words")D|=x;else if($==="lines")D|=K;this._k=D,this._j=F.tag??"span";let Z=0;if(F.mask===!0)Z=D;else if(Array.isArray(F.mask)){for(let $ of F.mask)if($==="chars")Z|=I;else if($==="words")Z|=x;else if($==="lines")Z|=K}if(this._g=Z,this._d=F.style,this._e=F.class,this._w(),(F.resize??!0)&&D&K)this._x()}_p(z,F){let J=document.createElement(this._j);if(z)J.dataset[z]="";if(J.style.display=_,F!==void 0)J.textContent=F;return J}_s(z,F){let J=document.createElement(this._j);if(J.dataset[F]="",J.style.overflow="hidden",J.style.display=z,this._d?.mask)Object.assign(J.style,this._d.mask);if(this._e?.mask)J.classList.add(this._e.mask);return J}_r(z,F,J,q,U){if(this._g&F){let G=this._s(J,q);return G.appendChild(z),U.push(G),G}return z}_m(z,F,J,q){if(J){let{outer:U,inner:G}=J();if(G.appendChild(F),q)this._o.set(q,U);z.appendChild(U)}else z.appendChild(F)}_q(z,F,J){if(z.style.textDecoration=F,J)z.style.textDecorationColor=J}_w(){this._l=!0;let z=this._b,F=C(z),J=F?parseFloat(F.letterSpacing)||0:0;if(this._c=F?F.textIndent:"",this._c&&this._c!==u)z.style.textIndent="0";let q=this._k,U=!!(q&I),G=!!(q&x),D=!!(q&K),Z=G||D,$=!!(this._g&I),Q=new Map,H=(M)=>{for(let N of Array.from(M.childNodes))if(N.nodeType===1){let O=N.tagName.toLowerCase();if(p[O]){let v=C(N)?.textDecorationColor;if(v)Q.set(N,v)}H(N)}};H(z);let Y=Array.from(z.childNodes),T=document.createDocumentFragment();z.replaceChildren();let k=(M,N,O,v)=>{if(M.nodeType===3){let X=(M.textContent??"").split(l);for(let j of X){if(!j)continue;if(o.test(j)){T.appendChild(document.createTextNode(j));continue}let V=Z?this._p(G?"word":""):null;if(V){if(V.style.whiteSpace=h,O&&!U)this._q(V,O,v)}if(U){let b=[...j],d=this.chars.length;for(let P=0;P<b.length;P++){let R=this._p("char",b[P]);if(J&&P<b.length-1)R.style.marginRight=`${J}px`;if(O)this._q(R,O,v);if(this.chars.push(R),this._d?.chars)Object.assign(R.style,this._d.chars);if(this._e?.chars)R.classList.add(this._e.chars);let y=$?this._r(R,I,_,m,this.masks.chars):R;if(V)V.appendChild(y)}if(!V){let P=N?N():null,R=P?P.inner:T;for(let y=d;y<this.chars.length;y++){let S=this.chars[y];R.appendChild($&&S.parentElement?.dataset?.[m]!==void 0?S.parentElement:S)}if(P)T.appendChild(P.outer)}}else if(V){if(V.textContent=j,J)V.style.letterSpacing=`${J}px`}if(V){if(G){if(this.words.push(V),this._d?.words)Object.assign(V.style,this._d.words);if(this._e?.words)V.classList.add(this._e.words)}this._f.push(V);let b=this._g&x?this._r(V,x,_,g,this.masks.words):V;this._m(T,b,N,V)}else if(!U)this._m(T,document.createTextNode(j),N)}return}if(M.nodeType!==1)return;let B=M,A=B.tagName.toLowerCase();if(t.includes(","+A+",")){let X=B.cloneNode(!0);if(O)this._q(X,O,v);let j=C(B)?.verticalAlign;if(j&&j!==f)X.style.verticalAlign=j;if(Z){let V=this._p(G?"word":"");if(V.style.whiteSpace=h,j&&j!==f)V.style.verticalAlign=j;if(V.appendChild(X),G){if(this.words.push(V),this._d?.words)Object.assign(V.style,this._d.words);if(this._e?.words)V.classList.add(this._e.words)}this._f.push(V);let b=this._g&x?this._r(V,x,_,g,this.masks.words):V;this._m(T,b,N,V)}else this._m(T,X,N);return}let r=()=>{let X=B.cloneNode(!1);if(N){let{outer:j,inner:V}=N();return V.appendChild(X),{outer:j,inner:X}}return{outer:X,inner:X}},L=p[A],i=L?O?`${O} ${L}`:L:O,s=L?Q.get(B)||v:v;for(let X of Array.from(B.childNodes))k(X,r,i,s)};for(let M of Y)k(M,null,"","");z.appendChild(T);let W=!!(this._c&&this._c!==u);if(D)this._y(W);else if(W){let M=G?this.words[0]:U?this.chars[0]:null;if(M)M.style.marginLeft=this._c,z.style.textIndent="0"}this._l=!1}_y(z){if(z&&this._f[0])this._f[0].style.marginLeft=this._c;this._t();let F=[];if(typeof document.fonts?.status==="string"&&document.fonts.status!=="loaded")F.push(document.fonts.ready);let J=this._b.querySelectorAll("img");for(let q=0;q<J.length;q++){let U=J[q];if(!U.complete)F.push(new Promise((G)=>{U.addEventListener("load",G,{once:!0}),U.addEventListener("error",G,{once:!0})}))}if(F.length){let q=this._b.offsetHeight;Promise.all(F).then(()=>{if(this._b.offsetHeight!==q)this.reflow()})}}_u(z){return this._o.get(z)??z}_t(){let z=this._f;if(!z.length)return;let F=z[0].offsetTop,J=F+z[0].offsetHeight,q=[],U=[];for(let $ of z){let Q=$.offsetTop,H=Q+$.offsetHeight;if(Q<J&&H>F)F=Math.min(F,Q),J=Math.max(J,H);else U.push(q),q=[],F=Q,J=H;q.push($)}if(q.length)U.push(q);let G=!!(this._c&&this._c!==u);if(G&&z[0])z[0].style.marginLeft="";let D=!!(this._g&K),Z=document.createDocumentFragment();for(let $=0;$<U.length;$++){let Q=U[$],H=document.createElement(this._j);if(H.dataset.line="",H.style.display=E,$===0&&G)H.style.paddingLeft=this._c;for(let Y=0;Y<Q.length;Y++){if(Y>0)H.appendChild(document.createTextNode(" "));H.appendChild(this._u(Q[Y]))}if(this.lines.push(H),this._d?.lines)Object.assign(H.style,this._d.lines);if(this._e?.lines)H.classList.add(this._e.lines);if(D){let Y=this._s(E,n);Y.appendChild(H),this.masks.lines.push(Y),Z.appendChild(Y)}else Z.appendChild(H)}this._b.replaceChildren(Z)}_x(){let z=this._b.offsetParent?this._b.offsetParent.offsetWidth:window.innerWidth,F=()=>{if(this._l)return;let q=this._b.offsetParent,U=q?q.offsetWidth:window.innerWidth;if(U===z)return;if(z=U,this._h)cancelAnimationFrame(this._h);this._h=requestAnimationFrame(()=>this.reflow())};this._i=new ResizeObserver(F);let J=this._b.offsetParent??this._b.parentElement;if(J)this._i.observe(J);else this._i.observe(this._b)}reflow(){if(this._a){this._a.forEach((F)=>F.reflow()),this._v();return}if(!(this._k&K)||this._l)return;let z=document.createDocumentFragment();for(let F=0;F<this._f.length;F++){if(F>0)z.appendChild(document.createTextNode(" "));z.appendChild(this._u(this._f[F]))}if(this._b.replaceChildren(z),this.lines.length=0,this.masks.lines.length=0,this._c&&this._c!==u&&this._f[0])this._f[0].style.marginLeft=this._c;this._t()}revert(){if(this._a){this._a.forEach((z)=>z.revert()),this._v();return}this.destroy(),this._b.innerHTML=this._n,this.chars.length=0,this.words.length=0,this._f.length=0,this._o.clear(),this.lines.length=0,this.masks.chars.length=0,this.masks.words.length=0,this.masks.lines.length=0}destroy(){if(this._a){this._a.forEach((z)=>z.destroy());return}if(this._h)cancelAnimationFrame(this._h),this._h=0;if(this._i)this._i.disconnect(),this._i=null}_v(){if(!this._a)return;this.chars.length=0,this.words.length=0,this.lines.length=0,this.masks.chars.length=0,this.masks.words.length=0,this.masks.lines.length=0;for(let z of this._a)this.chars.push(...z.chars),this.words.push(...z.words),this.lines.push(...z.lines),this.masks.chars.push(...z.masks.chars),this.masks.words.push(...z.masks.words),this.masks.lines.push(...z.masks.lines)}}
|
|
2
|
-
export{a};
|
package/dist/chunk-xcfcqftx.js
DELETED
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import{d as N,e as P}from"./chunk-0t3a7kj5.js";import{g as Z,h as Q}from"./chunk-qjsknche.js";function O(j,z,B){return Math.min(Math.max(j,z),B)}function $(j,z,B){return j+(z-j)*B}function X(j,z,B){let G=z-j;return G===0?0:O((B-j)/G,0,1)}function Y(j,z,B,G){let H=1-Math.exp(-B*G);return $(j,z,H)}var J=0.09;class y{_d;_f;_c;_x;_e;_y;_o=!1;_q=!1;_m=new Map;_a=0;_b=0;_k=0;_l=1;_p=!1;_L={current:0,target:0,velocity:0,direction:1,max:0,scrolling:!1};_g=!1;_w=0;_r=0;_E=0;_h=0;_s=null;_i=J;_j=null;_z;_A;_B;_t;constructor(j={}){let z=j.wrapper??window;this._d=typeof z==="string"?P(z)??window:z,this._f=this._d===window,this._c=(j.direction??"vertical")==="vertical",this._x=j.duration??0,this._e=j.ease??J,this._y=j.prevent??!this._f,this._z=this._H.bind(this),this._A=this._I.bind(this),this._B=this._J.bind(this),this._t=()=>this._K();let B=this._f?this._c?window.scrollY:window.scrollX:this._c?this._d.scrollTop:this._d.scrollLeft;this._a=B,this._b=B,this.start()}get scroll(){let j=this._L;return j.current=this._a,j.target=this._b,j.velocity=this._k,j.direction=this._l,j.max=this._u(),j.scrolling=this._p,j}_u(){if(this._f)return this._c?document.documentElement.scrollHeight-window.innerHeight:document.documentElement.scrollWidth-window.innerWidth;let j=this._d;return this._c?j.scrollHeight-j.clientHeight:j.scrollWidth-j.clientWidth}_v(j){return O(j,0,this._u())}on(j,z){let B=this._m.get(j);if(!B)B=new Set,this._m.set(j,B);B.add(z)}off(j,z){this._m.get(j)?.delete(z)}_D(j){let z=this._m.get(j);if(!z)return;let B=this.scroll;for(let G of z)G(B)}_n(){if(this._q)return;this._q=!0,Q.add(this._t)}_G(){if(!this._q)return;this._q=!1,Q.remove(this._t)}to(j,z={}){let B;if(typeof j==="number")B=j;else{let K=typeof j==="string"?P(j):j;if(!K)return;let M=K.getBoundingClientRect();if(this._f)B=(this._c?M.top:M.left)+this._a;else{let V=this._d.getBoundingClientRect();B=(this._c?M.top-V.top:M.left-V.left)+this._a}}if(B+=z.offset??0,B=this._v(B),z.immediate){this._a=B,this._b=B,this._g=!0,this._C(),this._D("scroll"),this._g=!1,z.onComplete?.();return}this._g=!0,this._n();let G=z.ease??this._e,H=z.duration??this._x;if(typeof G==="number")this._h=0,this._b=B,this._i=G,this._j=z.onComplete??null;else if(H>0)this._w=this._a,this._r=B,this._E=performance.now(),this._h=H,this._i=G,this._s=z.onComplete??null,this._j=null;else this._h=0,this._b=B,this._i=typeof this._e==="number"?this._e:J,this._j=z.onComplete??null}_F(j){let z=this._f?window:this._d;N(z,j,"wheel",this._z),N(z,j,"scroll",this._A,{passive:!0}),N(window,j,"keydown",this._B)}start(){if(this._o)return;this._o=!0,this._F("a")}stop(){if(!this._o)return;this._o=!1,this._F("r"),this._G()}destroy(){this.stop(),this._m.clear()}_H(j){if(j.preventDefault(),this._y)j.stopPropagation();let z=this._c?j.deltaY:j.deltaX;if(j.deltaMode===1)z*=0.833333;else if(j.deltaMode===2)z*=0.555556;this._b=this._v(this._b+z),this._h=0,this._i=typeof this._e==="number"?this._e:J,this._g=!0,this._n(),this._l=z>0?1:-1}_I(){if(this._g)return;let j=this._f?this._c?window.scrollY:window.scrollX:this._c?this._d.scrollTop:this._d.scrollLeft;this._a=j,this._b=j}_J(j){if(!this._f){let G=document.activeElement;if(G!==this._d&&!this._d.contains(G))return}let z=0,B=this._c?this._f?window.innerHeight:this._d.clientHeight:this._f?window.innerWidth:this._d.clientWidth;switch(j.key){case"ArrowDown":z=100;break;case"ArrowUp":z=-100;break;case"ArrowRight":if(!this._c)z=100;break;case"ArrowLeft":if(!this._c)z=-100;break;case" ":z=j.shiftKey?-B:B;break;case"PageDown":z=B;break;case"PageUp":z=-B;break;case"Home":this._b=0,this._h=0,this._i=typeof this._e==="number"?this._e:J,this._g=!0,this._n();return;case"End":this._b=this._u(),this._h=0,this._i=typeof this._e==="number"?this._e:J,this._g=!0,this._n();return;default:return}if(z)j.preventDefault(),this._b=this._v(this._b+z),this._h=0,this._i=typeof this._e==="number"?this._e:J,this._g=!0,this._n(),this._l=z>0?1:-1}_C(){if(this._f)if(this._c)window.scrollTo(0,this._a);else window.scrollTo(this._a,0);else{let j=this._d;if(this._c)j.scrollTop=this._a;else j.scrollLeft=this._a}}_K(){if(!this._o)return;let j=this._a,z=!1;if(this._g){if(this._h>0){let G=performance.now()-this._E,H=X(0,this._h,G),K=this._i(H);if(this._a=this._w+(this._r-this._w)*K,this._b=this._r,H>=1)this._a=this._r,this._h=0,z=!0}else{let G=this._i;if(this._a=Y(this._a,this._b,G,Z()),Math.abs(this._b-this._a)<0.5)this._a=this._b,z=!0}this._C()}this._k=this._a-j;let B=this._p;if(this._p=Math.abs(this._k)>0.01,this._k>0)this._l=1;else if(this._k<0)this._l=-1;if(this._p||B)this._D("scroll");if(z){if(this._g=!1,this._G(),this._s){let G=this._s;this._s=null,G()}if(this._j){let G=this._j;this._j=null,G()}}}}
|
|
2
|
-
export{y as b};
|