Scroll Trigger Utils
sora-ui/lib-scroll-trigger-utilsFreeUtility
Shared GSAP ScrollTrigger helpers (window/scroller detection, ready/resize waiting) used by scroll-driven primitives.
Install it
npx shadcn@latest add https://ui.soralabs.io.vn/r/lib-scroll-trigger-utils.jsonSource
1function isWindowScroller(scroller: Element | Window): boolean {2 return (3 scroller === window ||4 scroller === document.documentElement ||5 scroller === document.body6 );7}89function waitForNextFrame(): Promise<void> {10 return new Promise((resolve) => {11 requestAnimationFrame(() => {12 requestAnimationFrame(() => {13 resolve();14 });15 });16 });17}1819async function waitForScrollerReady(20 scroller: Element | Window,21 scrollReadyEvent?: string22): Promise<void> {23 await waitForNextFrame();2425 if (!scrollReadyEvent || isWindowScroller(scroller)) {26 if (!isWindowScroller(scroller)) {27 await waitForNextFrame();28 }29 return;30 }3132 await Promise.race([33 new Promise<void>((resolve) => {34 window.addEventListener(scrollReadyEvent, () => resolve(), {35 once: true,36 });37 }),38 new Promise<void>((resolve) => {39 window.setTimeout(resolve, 300);40 }),41 ]);4243 await waitForNextFrame();44}4546function observeWindowResize(onResize: () => void): () => void {47 let frameId = 0;4849 const handleResize = () => {50 cancelAnimationFrame(frameId);51 frameId = requestAnimationFrame(onResize);52 };5354 window.addEventListener("resize", handleResize);5556 return () => {57 cancelAnimationFrame(frameId);58 window.removeEventListener("resize", handleResize);59 };60}6162export {63 isWindowScroller,64 observeWindowResize,65 waitForNextFrame,66 waitForScrollerReady,67};
Files it writes
More from Sora UI
All 97 items| Component | Registry | Kind | Access | Installs | Command |
|---|---|---|---|---|---|
| Ease & Spring Tokenslib-ease | Sora UI | Utilities | Free | no deps | |
| getStrictContextlib-get-strict-context | Sora UI | Utilities | Free | no deps |
