@cosmictraveler002/anim-kit 1.1.0 → 1.3.0

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.
Files changed (63) hide show
  1. package/README.md +293 -36
  2. package/dist/anim-kit.standalone.js +18 -8
  3. package/dist/anim-kit.standalone.js.map +1 -1
  4. package/dist/core/gsap.d.ts +3 -2
  5. package/dist/core/gsap.d.ts.map +1 -1
  6. package/dist/core/gsap.js +4 -3
  7. package/dist/core/gsap.js.map +1 -1
  8. package/dist/core/smooth-scroll.d.ts +1 -1
  9. package/dist/core/smooth-scroll.js +1 -1
  10. package/dist/effects/clip-wipe.d.ts +10 -2
  11. package/dist/effects/clip-wipe.d.ts.map +1 -1
  12. package/dist/effects/clip-wipe.js +30 -9
  13. package/dist/effects/clip-wipe.js.map +1 -1
  14. package/dist/effects/cursor-follower.d.ts.map +1 -1
  15. package/dist/effects/cursor-follower.js +22 -4
  16. package/dist/effects/cursor-follower.js.map +1 -1
  17. package/dist/effects/drag-rail.d.ts +23 -0
  18. package/dist/effects/drag-rail.d.ts.map +1 -0
  19. package/dist/effects/drag-rail.js +196 -0
  20. package/dist/effects/drag-rail.js.map +1 -0
  21. package/dist/effects/flip-words.d.ts +31 -0
  22. package/dist/effects/flip-words.d.ts.map +1 -0
  23. package/dist/effects/flip-words.js +104 -0
  24. package/dist/effects/flip-words.js.map +1 -0
  25. package/dist/effects/magnetic.d.ts +15 -0
  26. package/dist/effects/magnetic.d.ts.map +1 -0
  27. package/dist/effects/magnetic.js +59 -0
  28. package/dist/effects/magnetic.js.map +1 -0
  29. package/dist/effects/media-settle.d.ts +2 -0
  30. package/dist/effects/media-settle.d.ts.map +1 -1
  31. package/dist/effects/media-settle.js +5 -2
  32. package/dist/effects/media-settle.js.map +1 -1
  33. package/dist/effects/preloader.js +1 -1
  34. package/dist/effects/reel-text.d.ts +19 -0
  35. package/dist/effects/reel-text.d.ts.map +1 -0
  36. package/dist/effects/reel-text.js +163 -0
  37. package/dist/effects/reel-text.js.map +1 -0
  38. package/dist/index.d.ts +14 -2
  39. package/dist/index.d.ts.map +1 -1
  40. package/dist/index.js +9 -1
  41. package/dist/index.js.map +1 -1
  42. package/dist/three/index.d.ts +13 -0
  43. package/dist/three/index.d.ts.map +1 -0
  44. package/dist/three/index.js +12 -0
  45. package/dist/three/index.js.map +1 -0
  46. package/dist/three/webgl-media.d.ts +21 -0
  47. package/dist/three/webgl-media.d.ts.map +1 -0
  48. package/dist/three/webgl-media.js +268 -0
  49. package/dist/three/webgl-media.js.map +1 -0
  50. package/package.json +17 -1
  51. package/src/core/gsap.ts +4 -3
  52. package/src/core/smooth-scroll.ts +1 -1
  53. package/src/effects/clip-wipe.ts +50 -10
  54. package/src/effects/cursor-follower.ts +21 -4
  55. package/src/effects/drag-rail.ts +236 -0
  56. package/src/effects/flip-words.ts +148 -0
  57. package/src/effects/magnetic.ts +87 -0
  58. package/src/effects/media-settle.ts +7 -1
  59. package/src/effects/preloader.ts +1 -1
  60. package/src/effects/reel-text.ts +212 -0
  61. package/src/index.ts +18 -2
  62. package/src/three/index.ts +12 -0
  63. package/src/three/webgl-media.ts +325 -0
@@ -10,9 +10,10 @@ import { SplitText } from "gsap/SplitText";
10
10
  import { Draggable } from "gsap/Draggable";
11
11
  import { CustomEase } from "gsap/CustomEase";
12
12
  import { ScrollSmoother } from "gsap/ScrollSmoother";
13
+ import { Flip } from "gsap/Flip";
13
14
  import type { TargetLike } from "./types.js";
14
- export { gsap, ScrollTrigger, SplitText, Draggable, CustomEase, ScrollSmoother };
15
- /** Named eases recovered from dzinrstudio.com's bundles. */
15
+ export { gsap, ScrollTrigger, SplitText, Draggable, CustomEase, ScrollSmoother, Flip };
16
+ /** Named eases from kalakritico.in's bundles. */
16
17
  export declare const EASES: {
17
18
  /** `.76,0,.2,1` — the studio's signature menu / nav curtain ease. */
18
19
  readonly curtain: "ak-curtain";
@@ -1 +1 @@
1
- {"version":3,"file":"gsap.d.ts","sourceRoot":"","sources":["../../src/core/gsap.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAC5B,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAC3C,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAC3C,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAErD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAE7C,OAAO,EAAE,IAAI,EAAE,aAAa,EAAE,SAAS,EAAE,SAAS,EAAE,UAAU,EAAE,cAAc,EAAE,CAAC;AAEjF,4DAA4D;AAC5D,eAAO,MAAM,KAAK;IAChB,qEAAqE;;IAErE,0DAA0D;;IAE1D,qDAAqD;;IAErD,sDAAsD;;CAE9C,CAAC;AAIX,wDAAwD;AACxD,wBAAgB,QAAQ,IAAI,IAAI,CAuB/B;AAID;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,UAAU,CAAC,MAAM,EAAE,UAAU,GAAG,KAAK,CAAC,OAAO,GAAG,IAAI,GAAG,SAAS,CAAC,GAAG,IAAI,CAIvF"}
1
+ {"version":3,"file":"gsap.d.ts","sourceRoot":"","sources":["../../src/core/gsap.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAC5B,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAC3C,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAC3C,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEjC,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAE7C,OAAO,EAAE,IAAI,EAAE,aAAa,EAAE,SAAS,EAAE,SAAS,EAAE,UAAU,EAAE,cAAc,EAAE,IAAI,EAAE,CAAC;AAEvF,iDAAiD;AACjD,eAAO,MAAM,KAAK;IAChB,qEAAqE;;IAErE,0DAA0D;;IAE1D,qDAAqD;;IAErD,sDAAsD;;CAE9C,CAAC;AAIX,wDAAwD;AACxD,wBAAgB,QAAQ,IAAI,IAAI,CAuB/B;AAID;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,UAAU,CAAC,MAAM,EAAE,UAAU,GAAG,KAAK,CAAC,OAAO,GAAG,IAAI,GAAG,SAAS,CAAC,GAAG,IAAI,CAIvF"}
package/dist/core/gsap.js CHANGED
@@ -10,9 +10,10 @@ import { SplitText } from "gsap/SplitText";
10
10
  import { Draggable } from "gsap/Draggable";
11
11
  import { CustomEase } from "gsap/CustomEase";
12
12
  import { ScrollSmoother } from "gsap/ScrollSmoother";
13
+ import { Flip } from "gsap/Flip";
13
14
  import { toArray } from "./util.js";
14
- export { gsap, ScrollTrigger, SplitText, Draggable, CustomEase, ScrollSmoother };
15
- /** Named eases recovered from dzinrstudio.com's bundles. */
15
+ export { gsap, ScrollTrigger, SplitText, Draggable, CustomEase, ScrollSmoother, Flip };
16
+ /** Named eases from kalakritico.in's bundles. */
16
17
  export const EASES = {
17
18
  /** `.76,0,.2,1` — the studio's signature menu / nav curtain ease. */
18
19
  curtain: "ak-curtain",
@@ -29,7 +30,7 @@ export function initGSAP() {
29
30
  if (initted || typeof window === "undefined")
30
31
  return;
31
32
  initted = true;
32
- gsap.registerPlugin(ScrollTrigger, SplitText, Draggable, CustomEase);
33
+ gsap.registerPlugin(ScrollTrigger, SplitText, Draggable, CustomEase, Flip);
33
34
  // ScrollSmoother is a bonus for people who prefer it over Lenis; it is only
34
35
  // registered so `ScrollSmoother.create()` works if you call it yourself.
35
36
  try {
@@ -1 +1 @@
1
- {"version":3,"file":"gsap.js","sourceRoot":"","sources":["../../src/core/gsap.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAC5B,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAC3C,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAC3C,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAGpC,OAAO,EAAE,IAAI,EAAE,aAAa,EAAE,SAAS,EAAE,SAAS,EAAE,UAAU,EAAE,cAAc,EAAE,CAAC;AAEjF,4DAA4D;AAC5D,MAAM,CAAC,MAAM,KAAK,GAAG;IACnB,qEAAqE;IACrE,OAAO,EAAE,YAAY;IACrB,0DAA0D;IAC1D,SAAS,EAAE,eAAe;IAC1B,qDAAqD;IACrD,MAAM,EAAE,WAAW;IACnB,sDAAsD;IACtD,UAAU,EAAE,gBAAgB;CACpB,CAAC;AAEX,IAAI,OAAO,GAAG,KAAK,CAAC;AAEpB,wDAAwD;AACxD,MAAM,UAAU,QAAQ;IACtB,IAAI,OAAO,IAAI,OAAO,MAAM,KAAK,WAAW;QAAE,OAAO;IACrD,OAAO,GAAG,IAAI,CAAC;IAEf,IAAI,CAAC,cAAc,CAAC,aAAa,EAAE,SAAS,EAAE,SAAS,EAAE,UAAU,CAAC,CAAC;IAErE,4EAA4E;IAC5E,yEAAyE;IACzE,IAAI,CAAC;QACH,IAAI,CAAC,cAAc,CAAC,cAAc,CAAC,CAAC;IACtC,CAAC;IAAC,MAAM,CAAC;QACP,sCAAsC;IACxC,CAAC;IAED,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC;QACnC,UAAU,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC;QAC/C,UAAU,CAAC,MAAM,CAAC,KAAK,CAAC,SAAS,EAAE,mDAAmD,CAAC,CAAC;QACxF,UAAU,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAAC;QAClD,UAAU,CAAC,MAAM,CAAC,KAAK,CAAC,UAAU,EAAE,mBAAmB,CAAC,CAAC;IAC3D,CAAC;IAED,yDAAyD;IACzD,aAAa,CAAC,MAAM,CAAC,EAAE,kBAAkB,EAAE,IAAI,EAAE,CAAC,CAAC;AACrD,CAAC;AAED,QAAQ,EAAE,CAAC;AAEX;;;;;;;;;;;;;;GAcG;AACH,MAAM,UAAU,UAAU,CAAC,MAAsD;IAC/E,MAAM,GAAG,GAAsC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;IAChG,MAAM,IAAI,GAAG,GAAG,CAAC,MAAM,CAAC,CAAC,EAAE,EAAiB,EAAE,CAAC,EAAE,YAAY,OAAO,CAAC,CAAC;IACtE,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;AAClD,CAAC"}
1
+ {"version":3,"file":"gsap.js","sourceRoot":"","sources":["../../src/core/gsap.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAC5B,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAC3C,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAC3C,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAGpC,OAAO,EAAE,IAAI,EAAE,aAAa,EAAE,SAAS,EAAE,SAAS,EAAE,UAAU,EAAE,cAAc,EAAE,IAAI,EAAE,CAAC;AAEvF,iDAAiD;AACjD,MAAM,CAAC,MAAM,KAAK,GAAG;IACnB,qEAAqE;IACrE,OAAO,EAAE,YAAY;IACrB,0DAA0D;IAC1D,SAAS,EAAE,eAAe;IAC1B,qDAAqD;IACrD,MAAM,EAAE,WAAW;IACnB,sDAAsD;IACtD,UAAU,EAAE,gBAAgB;CACpB,CAAC;AAEX,IAAI,OAAO,GAAG,KAAK,CAAC;AAEpB,wDAAwD;AACxD,MAAM,UAAU,QAAQ;IACtB,IAAI,OAAO,IAAI,OAAO,MAAM,KAAK,WAAW;QAAE,OAAO;IACrD,OAAO,GAAG,IAAI,CAAC;IAEf,IAAI,CAAC,cAAc,CAAC,aAAa,EAAE,SAAS,EAAE,SAAS,EAAE,UAAU,EAAE,IAAI,CAAC,CAAC;IAE3E,4EAA4E;IAC5E,yEAAyE;IACzE,IAAI,CAAC;QACH,IAAI,CAAC,cAAc,CAAC,cAAc,CAAC,CAAC;IACtC,CAAC;IAAC,MAAM,CAAC;QACP,sCAAsC;IACxC,CAAC;IAED,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC;QACnC,UAAU,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC;QAC/C,UAAU,CAAC,MAAM,CAAC,KAAK,CAAC,SAAS,EAAE,mDAAmD,CAAC,CAAC;QACxF,UAAU,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAAC;QAClD,UAAU,CAAC,MAAM,CAAC,KAAK,CAAC,UAAU,EAAE,mBAAmB,CAAC,CAAC;IAC3D,CAAC;IAED,yDAAyD;IACzD,aAAa,CAAC,MAAM,CAAC,EAAE,kBAAkB,EAAE,IAAI,EAAE,CAAC,CAAC;AACrD,CAAC;AAED,QAAQ,EAAE,CAAC;AAEX;;;;;;;;;;;;;;GAcG;AACH,MAAM,UAAU,UAAU,CAAC,MAAsD;IAC/E,MAAM,GAAG,GAAsC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;IAChG,MAAM,IAAI,GAAG,GAAG,CAAC,MAAM,CAAC,CAAC,EAAE,EAAiB,EAAE,CAAC,EAAE,YAAY,OAAO,CAAC,CAAC;IACtE,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;AAClD,CAAC"}
@@ -10,7 +10,7 @@
10
10
  * clocks on the same frame, which is what stops ScrollTrigger from stuttering.
11
11
  *
12
12
  * `useScrollerProxy: true` additionally proxies `document.documentElement`,
13
- * matching dzinrstudio.com's setup — only needed if you scroll a nested
13
+ * matching kalakritico.in's setup — only needed if you scroll a nested
14
14
  * element instead of the window.
15
15
  */
16
16
  import Lenis from "lenis";
@@ -10,7 +10,7 @@
10
10
  * clocks on the same frame, which is what stops ScrollTrigger from stuttering.
11
11
  *
12
12
  * `useScrollerProxy: true` additionally proxies `document.documentElement`,
13
- * matching dzinrstudio.com's setup — only needed if you scroll a nested
13
+ * matching kalakritico.in's setup — only needed if you scroll a nested
14
14
  * element instead of the window.
15
15
  */
16
16
  import Lenis from "lenis";
@@ -1,7 +1,8 @@
1
1
  import type { CommonOptions, Destroy, TargetLike } from "../core/types.js";
2
+ export type ClipWipeFrom = "left" | "right" | "top" | "bottom" | "top-left" | "top-right" | "bottom-left" | "bottom-right" | "frame";
2
3
  export interface ClipWipeOptions extends CommonOptions {
3
- /** Which edge the wipe starts from. @default "left" */
4
- from?: "left" | "right" | "top" | "bottom" | "frame";
4
+ /** Which edge or corner the wipe starts from. @default "left" */
5
+ from?: ClipWipeFrom;
5
6
  /** Frame margin in % (only used when `from: "frame"`). @default 15 */
6
7
  inset?: number;
7
8
  /** Animation duration, seconds. @default 1 */
@@ -16,8 +17,15 @@ export interface ClipWipeOptions extends CommonOptions {
16
17
  mode?: "scroll" | "immediate";
17
18
  /** ScrollTrigger start position. @default "top 85%" */
18
19
  start?: string;
20
+ /** ScrollTrigger end position (scrub mode). @default "top 20%" */
21
+ end?: string;
19
22
  /** Re-wipe when leaving / re-entering the viewport. @default false */
20
23
  replay?: boolean;
24
+ /**
25
+ * Bind the wipe to scroll progress instead of playing it on enter —
26
+ * number = scrub smoothing seconds, `true` = immediate. unset = one-shot.
27
+ */
28
+ scrub?: number | boolean;
21
29
  }
22
30
  export declare function clipWipe(target: TargetLike, options?: ClipWipeOptions): Destroy;
23
31
  //# sourceMappingURL=clip-wipe.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"clip-wipe.d.ts","sourceRoot":"","sources":["../../src/effects/clip-wipe.ts"],"names":[],"mappings":"AAkBA,OAAO,KAAK,EAAE,aAAa,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAE3E,MAAM,WAAW,eAAgB,SAAQ,aAAa;IACpD,uDAAuD;IACvD,IAAI,CAAC,EAAE,MAAM,GAAG,OAAO,GAAG,KAAK,GAAG,QAAQ,GAAG,OAAO,CAAC;IACrD,sEAAsE;IACtE,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,8CAA8C;IAC9C,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,uCAAuC;IACvC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,sDAAsD;IACtD,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,gDAAgD;IAChD,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,4EAA4E;IAC5E,IAAI,CAAC,EAAE,QAAQ,GAAG,WAAW,CAAC;IAC9B,uDAAuD;IACvD,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,sEAAsE;IACtE,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAUD,wBAAgB,QAAQ,CAAC,MAAM,EAAE,UAAU,EAAE,OAAO,GAAE,eAAoB,GAAG,OAAO,CAmDnF"}
1
+ {"version":3,"file":"clip-wipe.d.ts","sourceRoot":"","sources":["../../src/effects/clip-wipe.ts"],"names":[],"mappings":"AA0BA,OAAO,KAAK,EAAE,aAAa,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAE3E,MAAM,MAAM,YAAY,GACpB,MAAM,GACN,OAAO,GACP,KAAK,GACL,QAAQ,GACR,UAAU,GACV,WAAW,GACX,aAAa,GACb,cAAc,GACd,OAAO,CAAC;AAEZ,MAAM,WAAW,eAAgB,SAAQ,aAAa;IACpD,iEAAiE;IACjE,IAAI,CAAC,EAAE,YAAY,CAAC;IACpB,sEAAsE;IACtE,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,8CAA8C;IAC9C,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,uCAAuC;IACvC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,sDAAsD;IACtD,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,gDAAgD;IAChD,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,4EAA4E;IAC5E,IAAI,CAAC,EAAE,QAAQ,GAAG,WAAW,CAAC;IAC9B,uDAAuD;IACvD,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,kEAAkE;IAClE,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,sEAAsE;IACtE,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB;;;OAGG;IACH,KAAK,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;CAC1B;AAcD,wBAAgB,QAAQ,CAAC,MAAM,EAAE,UAAU,EAAE,OAAO,GAAE,eAAoB,GAAG,OAAO,CA6DnF"}
@@ -1,14 +1,22 @@
1
1
  /**
2
2
  * Clip wipe — a `clip-path: inset()` reveal.
3
3
  *
4
- * The element is collapsed behind one edge (or inside a frame margin) and
5
- * the inset animates to zero, wiping it into view:
4
+ * The element is collapsed behind one edge, corner (or inside a frame margin)
5
+ * and the inset animates to zero, wiping it into view:
6
6
  *
7
- * from: "left" inset(0 100% 0 0) → grows rightward from the left edge
8
- * from: "right" inset(0 0 0 100%) → grows leftward from the right edge
9
- * from: "top" inset(0 0 100% 0) → grows downward from the top edge
10
- * from: "bottom" inset(100% 0 0 0) → grows upward from the bottom edge
11
- * from: "frame" inset(15% 15% 15% 15%) → opens out of a centered frame
7
+ * from: "left" inset(0 100% 0 0) → grows rightward from the left edge
8
+ * from: "right" inset(0 0 0 100%) → grows leftward from the right edge
9
+ * from: "top" inset(0 0 100% 0) → grows downward from the top edge
10
+ * from: "bottom" inset(100% 0 0 0) → grows upward from the bottom edge
11
+ * from: "top-left" inset(0 100% 100% 0) → opens toward the bottom-right corner
12
+ * from: "top-right" inset(0 0 100% 100%) → opens toward the bottom-left corner
13
+ * from: "bottom-left" inset(100% 100% 0 0) → opens toward the top-right corner
14
+ * from: "bottom-right" inset(100% 0 0 100%) → opens toward the top-left corner
15
+ * from: "frame" inset(15% 15% 15% 15%) → opens out of a centered frame
16
+ *
17
+ * The wipe can also be bound to scroll progress (`scrub`), so the inset
18
+ * opens as the element travels through the viewport — the reveal then
19
+ * reverses with the scroll instead of playing once.
12
20
  *
13
21
  * Works on images, videos, blocks and text. destroy() kills the tween and
14
22
  * removes the inline clip-path.
@@ -21,11 +29,15 @@ const FROM = {
21
29
  right: "inset(0% 0% 0% 100%)",
22
30
  top: "inset(0% 0% 100% 0%)",
23
31
  bottom: "inset(100% 0% 0% 0%)",
32
+ "top-left": "inset(0% 100% 100% 0%)",
33
+ "top-right": "inset(0% 0% 100% 100%)",
34
+ "bottom-left": "inset(100% 100% 0% 0%)",
35
+ "bottom-right": "inset(100% 0% 0% 100%)",
24
36
  };
25
37
  const TO = "inset(0% 0% 0% 0%)";
26
38
  export function clipWipe(target, options = {}) {
27
39
  initGSAP();
28
- const { from = "left", inset = 15, duration = 1, ease = "power3.out", stagger = 0.08, delay = 0, mode = "scroll", start = "top 85%", replay = false, } = options;
40
+ const { from = "left", inset = 15, duration = 1, ease = "power3.out", stagger = 0.08, delay = 0, mode = "scroll", start = "top 85%", end = "top 20%", replay = false, scrub, } = options;
29
41
  const els = toArray(target);
30
42
  if (!els.length)
31
43
  return () => { };
@@ -41,7 +53,16 @@ export function clipWipe(target, options = {}) {
41
53
  delay,
42
54
  overwrite: "auto",
43
55
  };
44
- if (mode === "scroll") {
56
+ if (scrub !== undefined) {
57
+ vars.ease = "none";
58
+ vars.scrollTrigger = {
59
+ trigger: els[0],
60
+ start,
61
+ end,
62
+ scrub: scrub === true ? true : scrub,
63
+ };
64
+ }
65
+ else if (mode === "scroll") {
45
66
  vars.scrollTrigger = {
46
67
  trigger: els[0],
47
68
  start,
@@ -1 +1 @@
1
- {"version":3,"file":"clip-wipe.js","sourceRoot":"","sources":["../../src/effects/clip-wipe.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AACH,OAAO,EAAE,IAAI,EAAE,aAAa,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAChE,OAAO,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AACzC,OAAO,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAC;AAwB1C,MAAM,IAAI,GAA2B;IACnC,IAAI,EAAE,sBAAsB;IAC5B,KAAK,EAAE,sBAAsB;IAC7B,GAAG,EAAE,sBAAsB;IAC3B,MAAM,EAAE,sBAAsB;CAC/B,CAAC;AACF,MAAM,EAAE,GAAG,oBAAoB,CAAC;AAEhC,MAAM,UAAU,QAAQ,CAAC,MAAkB,EAAE,UAA2B,EAAE;IACxE,QAAQ,EAAE,CAAC;IAEX,MAAM,EACJ,IAAI,GAAG,MAAM,EACb,KAAK,GAAG,EAAE,EACV,QAAQ,GAAG,CAAC,EACZ,IAAI,GAAG,YAAY,EACnB,OAAO,GAAG,IAAI,EACd,KAAK,GAAG,CAAC,EACT,IAAI,GAAG,QAAQ,EACf,KAAK,GAAG,SAAS,EACjB,MAAM,GAAG,KAAK,GACf,GAAG,OAAO,CAAC;IAEZ,MAAM,GAAG,GAAG,OAAO,CAAc,MAAM,CAAC,CAAC;IACzC,IAAI,CAAC,GAAG,CAAC,MAAM;QAAE,OAAO,GAAG,EAAE,GAAE,CAAC,CAAC;IAEjC,OAAO,KAAK,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;IAE3B,SAAS,GAAG;QACV,MAAM,SAAS,GAAG,IAAI,KAAK,OAAO,CAAC,CAAC,CAAC,SAAS,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAEnG,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,EAAE,QAAQ,EAAE,SAAS,EAAE,CAAC,CAAC;QAEvC,MAAM,IAAI,GAAmB;YAC3B,QAAQ,EAAE,EAAE;YACZ,QAAQ;YACR,IAAI;YACJ,OAAO;YACP,KAAK;YACL,SAAS,EAAE,MAAM;SAClB,CAAC;QACF,IAAI,IAAI,KAAK,QAAQ,EAAE,CAAC;YACtB,IAAI,CAAC,aAAa,GAAG;gBACnB,OAAO,EAAE,GAAG,CAAC,CAAC,CAAC;gBACf,KAAK;gBACL,aAAa,EAAE,MAAM,CAAC,CAAC,CAAC,2BAA2B,CAAC,CAAC,CAAC,qBAAqB;aAC5E,CAAC;QACJ,CAAC;QAED,MAAM,KAAK,GAAG,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;QACjC,aAAa,CAAC,OAAO,EAAE,CAAC;QAExB,OAAO,GAAG,EAAE;YACV,KAAK,CAAC,aAAa,EAAE,IAAI,EAAE,CAAC;YAC5B,KAAK,CAAC,IAAI,EAAE,CAAC;YACb,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,EAAE,UAAU,EAAE,UAAU,EAAE,CAAC,CAAC;YAC1C,aAAa,CAAC,OAAO,EAAE,CAAC;QAC1B,CAAC,CAAC;IACJ,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"clip-wipe.js","sourceRoot":"","sources":["../../src/effects/clip-wipe.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"cursor-follower.d.ts","sourceRoot":"","sources":["../../src/effects/cursor-follower.ts"],"names":[],"mappings":"AAYA,OAAO,KAAK,EAAE,aAAa,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAE3E,MAAM,WAAW,qBAAsB,SAAQ,aAAa;IAC1D,mFAAmF;IACnF,QAAQ,CAAC,EAAE,UAAU,CAAC;IACtB,4DAA4D;IAC5D,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,6EAA6E;IAC7E,MAAM,CAAC,EAAE;QAAE,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,SAAS,CAAC,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IACjE,+DAA+D;IAC/D,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,+DAA+D;IAC/D,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB;AAED,wBAAgB,cAAc,CAC5B,IAAI,EAAE,UAAU,EAChB,OAAO,GAAE,qBAA0B,GAClC,OAAO,CAyET"}
1
+ {"version":3,"file":"cursor-follower.d.ts","sourceRoot":"","sources":["../../src/effects/cursor-follower.ts"],"names":[],"mappings":"AAgBA,OAAO,KAAK,EAAE,aAAa,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAE3E,MAAM,WAAW,qBAAsB,SAAQ,aAAa;IAC1D,mFAAmF;IACnF,QAAQ,CAAC,EAAE,UAAU,CAAC;IACtB,4DAA4D;IAC5D,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,6EAA6E;IAC7E,MAAM,CAAC,EAAE;QAAE,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,SAAS,CAAC,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IACjE,+DAA+D;IAC/D,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,+DAA+D;IAC/D,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB;AAED,wBAAgB,cAAc,CAC5B,IAAI,EAAE,UAAU,EAChB,OAAO,GAAE,qBAA0B,GAClC,OAAO,CAsFT"}
@@ -5,6 +5,10 @@
5
5
  * whole thing fades/blurs in when the pointer enters the hot zone. The label
6
6
  * uses `mix-blend-mode: exclusion` so it inverts over any background.
7
7
  *
8
+ * The tag is pinned `position: fixed` and driven in VIEWPORT space
9
+ * (clientX/clientY + offset), so it can live anywhere in the DOM — it only
10
+ * reacts while the pointer is over the zone.
11
+ *
8
12
  * cursorFollower(zone, { follower: ".ak-cursor" })
9
13
  */
10
14
  import { gsap, initGSAP, killTweens } from "../core/gsap.js";
@@ -27,17 +31,31 @@ export function cursorFollower(zone, options = {}) {
27
31
  pointerEvents: el.style.pointerEvents,
28
32
  };
29
33
  el.style.mixBlendMode = blendMode;
30
- el.style.position = "absolute";
34
+ // Viewport space: position:fixed + clientX/clientY keeps the tag at the
35
+ // pointer wherever it sits in the DOM. (The old position:absolute +
36
+ // zone-relative math only lined up when the tag was a child of the zone —
37
+ // a body-level tag landed near the document origin instead, off-screen.)
38
+ el.style.position = "fixed";
31
39
  el.style.left = "0";
32
40
  el.style.top = "0";
33
41
  el.style.pointerEvents = "none";
34
42
  gsap.set(el, { opacity: fade ? 0 : 1, x: 0, y: 0 });
35
43
  const xTo = gsap.quickTo(el, "x", { ...spring, duration: 0.4, ease: "power3" });
36
44
  const yTo = gsap.quickTo(el, "y", { ...spring, duration: 0.4, ease: "power3" });
45
+ // First move lands on the pointer; later moves spring after it — starting
46
+ // from (0,0), the spring would otherwise carry the tag in from the corner.
47
+ let snapped = false;
37
48
  const onMove = (e) => {
38
- const r = area.getBoundingClientRect();
39
- xTo(e.clientX - r.left + offset);
40
- yTo(e.clientY - r.top + offset);
49
+ const x = e.clientX + offset;
50
+ const y = e.clientY + offset;
51
+ if (snapped) {
52
+ xTo(x);
53
+ yTo(y);
54
+ }
55
+ else {
56
+ gsap.set(el, { x, y });
57
+ snapped = true;
58
+ }
41
59
  if (fade)
42
60
  gsap.to(el, { opacity: 1, duration: 0.25, overwrite: "auto" });
43
61
  };
@@ -1 +1 @@
1
- {"version":3,"file":"cursor-follower.js","sourceRoot":"","sources":["../../src/effects/cursor-follower.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"cursor-follower.js","sourceRoot":"","sources":["../../src/effects/cursor-follower.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,23 @@
1
+ import type { CommonOptions, Destroy, TargetLike } from "../core/types.js";
2
+ export interface DragRailOptions extends CommonOptions {
3
+ /** Scroll viewport around the track — defaults to `track.parentElement`. */
4
+ viewport?: TargetLike;
5
+ /** Children that tilt with velocity. @default `":scope > *"` */
6
+ item?: string;
7
+ /** Follow speed toward the intent, per 60fps frame (0..1). @default 0.1 */
8
+ lerp?: number;
9
+ /** Rubber-band resistance distance past the ends, px. @default 140 */
10
+ edge?: number;
11
+ /** Momentum multiplier on release (px of coast per px/frame of flick). @default 14 */
12
+ throwScale?: number;
13
+ /** Wheel / trackpad drives the rail (consumed while it can still move). @default true */
14
+ wheel?: boolean;
15
+ /** Degrees of tilt per px/frame of velocity — `0` disables. @default 0 */
16
+ tilt?: number;
17
+ /** Tilt clamp, degrees. @default 8 */
18
+ tiltMax?: number;
19
+ /** `(pos, velocity) => {}` called every rendered frame while mounted. */
20
+ onTick?: (pos: number, velocity: number) => void;
21
+ }
22
+ export declare function dragRail(target: TargetLike, options?: DragRailOptions): Destroy;
23
+ //# sourceMappingURL=drag-rail.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"drag-rail.d.ts","sourceRoot":"","sources":["../../src/effects/drag-rail.ts"],"names":[],"mappings":"AA2CA,OAAO,KAAK,EAAE,aAAa,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAE3E,MAAM,WAAW,eAAgB,SAAQ,aAAa;IACpD,4EAA4E;IAC5E,QAAQ,CAAC,EAAE,UAAU,CAAC;IACtB,gEAAgE;IAChE,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,2EAA2E;IAC3E,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,sEAAsE;IACtE,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,sFAAsF;IACtF,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,yFAAyF;IACzF,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,0EAA0E;IAC1E,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,sCAAsC;IACtC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,yEAAyE;IACzE,MAAM,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,KAAK,IAAI,CAAC;CAClD;AAED,wBAAgB,QAAQ,CAAC,MAAM,EAAE,UAAU,EAAE,OAAO,GAAE,eAAoB,GAAG,OAAO,CAyKnF"}
@@ -0,0 +1,196 @@
1
+ /**
2
+ * Drag rail — the bounded, inertia-driven horizontal rail.
3
+ *
4
+ * A grab-and-throw rail with real physics, extracted from the drag-driven
5
+ * portfolio rail pattern: pointer drag, wheel and trackpad all feed one
6
+ * *intent* value, and the track follows it with a per-frame lerp. Why it is
7
+ * shaped this way (audit notes):
8
+ *
9
+ * - **Two values, not one.** `intent` is where the rail wants to be (drag
10
+ * delta, wheel delta, throw momentum); `pos` is what is rendered. The tick
11
+ * lerps intent → pos (`lerp * deltaRatio`), which is what gives the
12
+ * buttery catch-up after a hard throw. Writing the transform directly from
13
+ * pointermove (v1) felt like dragging a brick.
14
+ * - **tanh rubber-band.** Past either end, intent is squashed through
15
+ * `edge * tanh(overshoot / edge)` — the further you pull, the less each
16
+ * pixel buys you, but it never hard-stops. On release a restore force pulls
17
+ * the overscrolled intent back inside the bounds while the lerp chases it,
18
+ * producing the settle. This is the same soft-edge maths as the original
19
+ * rail's `a.t = a.a + tanh(l / t) * t`.
20
+ * - **Release throw.** Velocity is sampled as a smoothed per-frame pointer
21
+ * delta (0.7 smoothing) and multiplied by `throwScale` into intent — a flick
22
+ * coasts, a slow release barely moves. No InertiaPlugin dependency; the
23
+ * ticker *is* the inertia.
24
+ * - **Wheel coexistence.** While the rail can still move in the wheel's
25
+ * direction the event is consumed (`preventDefault` + `stopPropagation` —
26
+ * the stop matters: Lenis listens above us and would scroll the page in
27
+ * parallel). Once overscrolled a full `edge`, the wheel passes through to
28
+ * the page again, so the section never traps the reader.
29
+ * - **Velocity-reactive items.** `tilt` rotates children proportionally to the
30
+ * rendered per-frame velocity (the cards lean into motion and spring flat at
31
+ * rest); `onTick` exposes pos/velocity for WebGL or custom consumers.
32
+ * - **Fidelity.** `destroy()` removes every listener + the ticker, kills the
33
+ * tilt state and restores the inline cursor/user-select/touch-action the
34
+ * effect had overwritten.
35
+ *
36
+ * dragRail(".ak-rail-track", { tilt: 0.05 })
37
+ *
38
+ * CSS: viewport `overflow: hidden`; track `display: flex; width: max-content;
39
+ * gap: 1rem; cursor: grab; user-select: none; touch-action: pan-y`.
40
+ */
41
+ import { gsap, initGSAP } from "../core/gsap.js";
42
+ import { guard } from "../core/guard.js";
43
+ import { one, toArray } from "../core/util.js";
44
+ export function dragRail(target, options = {}) {
45
+ initGSAP();
46
+ const track = one(target);
47
+ if (!track)
48
+ return () => { };
49
+ const { viewport, item = ":scope > *", lerp = 0.1, edge = 140, throwScale = 14, wheel = true, tilt = 0, tiltMax = 8, onTick, } = options;
50
+ return guard(options, () => {
51
+ const vp = one(viewport) ?? track.parentElement ?? track;
52
+ const prevStyle = {
53
+ cursor: track.style.cursor,
54
+ userSelect: track.style.userSelect,
55
+ touchAction: track.style.touchAction,
56
+ };
57
+ /* ---------------- bounds ---------------- */
58
+ let min = 0; // most-negative resting x (content overflows left)
59
+ let max = 0; // start of the rail
60
+ let pos = 0; // rendered x
61
+ let intent = 0; // wanted x (drag/wheel/throw feed this)
62
+ const measure = () => {
63
+ const overflow = Math.max(0, track.scrollWidth - vp.clientWidth);
64
+ min = -overflow;
65
+ max = 0;
66
+ // Fold an out-of-range position back through the soft edge (no jump).
67
+ intent = soft(intent);
68
+ pos = soft(pos);
69
+ };
70
+ /** tanh soft-edge: unbounded input, saturating output around [min, max]. */
71
+ function soft(v) {
72
+ if (v > max)
73
+ return max + edge * Math.tanh((v - max) / edge);
74
+ if (v < min)
75
+ return min + edge * Math.tanh((v - min) / edge);
76
+ return v;
77
+ }
78
+ /* ---------------- pointer drag ---------------- */
79
+ let dragging = false;
80
+ let lastX = 0;
81
+ let velocity = 0; // smoothed pointer delta (px/frame-ish)
82
+ let renderedVel = 0; // rendered per-frame velocity (drives tilt/onTick)
83
+ const onPointerDown = (e) => {
84
+ if (e.pointerType === "mouse" && e.button !== 0)
85
+ return;
86
+ dragging = true;
87
+ lastX = e.clientX;
88
+ velocity = 0;
89
+ try {
90
+ vp.setPointerCapture(e.pointerId);
91
+ }
92
+ catch {
93
+ /* capture is best-effort — moves still land while the pointer is down */
94
+ }
95
+ track.style.cursor = "grabbing";
96
+ };
97
+ const onPointerMove = (e) => {
98
+ if (!dragging)
99
+ return;
100
+ const dx = e.clientX - lastX;
101
+ lastX = e.clientX;
102
+ velocity = velocity * 0.7 + dx * 0.3; // smooth out event-rate jitter
103
+ intent = soft(intent + dx);
104
+ };
105
+ const endDrag = (e) => {
106
+ if (!dragging)
107
+ return;
108
+ dragging = false;
109
+ track.style.cursor = prevStyle.cursor || "grab";
110
+ if (e) {
111
+ try {
112
+ vp.releasePointerCapture(e.pointerId);
113
+ }
114
+ catch {
115
+ /* already released */
116
+ }
117
+ }
118
+ // A flick coasts on its sampled momentum, then the soft edge reclaims it.
119
+ intent = soft(intent + velocity * throwScale);
120
+ };
121
+ const onPointerUp = (e) => endDrag(e);
122
+ const onPointerCancel = (e) => endDrag(e);
123
+ const onDragStart = (e) => e.preventDefault(); // no native img drag
124
+ /* ---------------- wheel / trackpad ---------------- */
125
+ const onWheel = (e) => {
126
+ if (!wheel)
127
+ return;
128
+ const delta = Math.abs(e.deltaX) > Math.abs(e.deltaY) ? e.deltaX : e.deltaY;
129
+ const bound = delta > 0 ? max : min;
130
+ const outward = (intent - bound) * (delta > 0 ? 1 : -1);
131
+ if (outward > edge)
132
+ return; // over-extended — hand the scroll back to the page
133
+ e.preventDefault();
134
+ e.stopPropagation(); // Lenis listens above us; it must not scroll in parallel
135
+ intent = soft(intent + delta);
136
+ };
137
+ /* ---------------- tick ---------------- */
138
+ const items = tilt ? toArray(item, track) : [];
139
+ if (items.length)
140
+ gsap.set(items, { transformOrigin: "50% 50%" });
141
+ const tick = () => {
142
+ const ratio = gsap.ticker.deltaRatio(60); // frames since last tick, clamped
143
+ // Release restore: once input stops, overscrolled intent springs home.
144
+ if (!dragging) {
145
+ const bound = intent < min ? min : intent > max ? max : null;
146
+ if (bound !== null)
147
+ intent += (bound - intent) * Math.min(1, 0.18 * ratio);
148
+ }
149
+ const prev = pos;
150
+ pos += (intent - pos) * Math.min(1, lerp * ratio);
151
+ renderedVel = pos - prev;
152
+ if (renderedVel === 0 && pos === intent)
153
+ return; // idle: skip the write
154
+ gsap.set(track, { x: pos });
155
+ if (items.length) {
156
+ gsap.set(items, {
157
+ rotation: gsap.utils.clamp(-tiltMax, tiltMax, renderedVel * tilt),
158
+ });
159
+ }
160
+ onTick?.(pos, renderedVel);
161
+ };
162
+ /* ---------------- wiring ---------------- */
163
+ measure();
164
+ track.dataset.akRail = "true";
165
+ track.style.cursor = "grab";
166
+ track.style.userSelect = "none";
167
+ track.style.touchAction = "pan-y";
168
+ vp.addEventListener("pointerdown", onPointerDown);
169
+ vp.addEventListener("pointermove", onPointerMove);
170
+ vp.addEventListener("pointerup", onPointerUp);
171
+ vp.addEventListener("pointercancel", onPointerCancel);
172
+ vp.addEventListener("wheel", onWheel, { passive: false });
173
+ track.addEventListener("dragstart", onDragStart);
174
+ const onResize = () => measure();
175
+ window.addEventListener("resize", onResize);
176
+ gsap.ticker.add(tick);
177
+ return () => {
178
+ window.removeEventListener("resize", onResize);
179
+ vp.removeEventListener("pointerdown", onPointerDown);
180
+ vp.removeEventListener("pointermove", onPointerMove);
181
+ vp.removeEventListener("pointerup", onPointerUp);
182
+ vp.removeEventListener("pointercancel", onPointerCancel);
183
+ vp.removeEventListener("wheel", onWheel);
184
+ track.removeEventListener("dragstart", onDragStart);
185
+ gsap.ticker.remove(tick);
186
+ delete track.dataset.akRail;
187
+ track.style.cursor = prevStyle.cursor;
188
+ track.style.userSelect = prevStyle.userSelect;
189
+ track.style.touchAction = prevStyle.touchAction;
190
+ gsap.set(track, { clearProps: "transform" });
191
+ if (items.length)
192
+ gsap.set(items, { clearProps: "rotation,transformOrigin" });
193
+ };
194
+ });
195
+ }
196
+ //# sourceMappingURL=drag-rail.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"drag-rail.js","sourceRoot":"","sources":["../../src/effects/drag-rail.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,31 @@
1
+ import type { CommonOptions, Destroy, TargetLike } from "../core/types.js";
2
+ export interface FlipWordsOptions extends CommonOptions {
3
+ /** Destination block — every word is moved into it. */
4
+ to: TargetLike;
5
+ /**
6
+ * The words inside the source.
7
+ * @default `[data-flip-word]` matches, else the source's element children
8
+ */
9
+ words?: TargetLike;
10
+ /** Seconds for one word's travel. @default 1.4 */
11
+ duration?: number;
12
+ /** GSAP ease. @default "power4.inOut" */
13
+ ease?: string;
14
+ /** Seconds between word starts. @default 0.2 */
15
+ stagger?: number;
16
+ /** Mid-flight scale a word squashes to (0 disables the squash). @default 0.2 */
17
+ scale?: number;
18
+ /** "scroll" plays on enter (reverses on leave-back), "immediate" plays now. @default "scroll" */
19
+ mode?: "scroll" | "immediate";
20
+ /**
21
+ * Bind the transfer to scroll progress instead of playing it on enter —
22
+ * number = scrub smoothing seconds, `true` = immediate. unset = one-shot.
23
+ */
24
+ scrub?: number | boolean;
25
+ /** ScrollTrigger start. @default "top 75%" */
26
+ start?: string;
27
+ /** ScrollTrigger end (scrub mode). @default "bottom 45%" */
28
+ end?: string;
29
+ }
30
+ export declare function flipWords(from: TargetLike, options: FlipWordsOptions): Destroy;
31
+ //# sourceMappingURL=flip-words.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"flip-words.d.ts","sourceRoot":"","sources":["../../src/effects/flip-words.ts"],"names":[],"mappings":"AAyBA,OAAO,KAAK,EAAE,aAAa,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAE3E,MAAM,WAAW,gBAAiB,SAAQ,aAAa;IACrD,uDAAuD;IACvD,EAAE,EAAE,UAAU,CAAC;IACf;;;OAGG;IACH,KAAK,CAAC,EAAE,UAAU,CAAC;IACnB,kDAAkD;IAClD,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,yCAAyC;IACzC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,gDAAgD;IAChD,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,gFAAgF;IAChF,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,iGAAiG;IACjG,IAAI,CAAC,EAAE,QAAQ,GAAG,WAAW,CAAC;IAC9B;;;OAGG;IACH,KAAK,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;IACzB,8CAA8C;IAC9C,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,4DAA4D;IAC5D,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAED,wBAAgB,SAAS,CAAC,IAAI,EAAE,UAAU,EAAE,OAAO,EAAE,gBAAgB,GAAG,OAAO,CA2F9E"}