From 173816b5c097f778afcb8db8d496319215f21f13 Mon Sep 17 00:00:00 2001 From: Ilia Mashkov Date: Thu, 12 Feb 2026 10:29:08 +0300 Subject: [PATCH] feat(lenis): add smooth scroll solution --- .../createScrollContext.svelte.ts | 32 ++++++++ src/shared/lib/helpers/index.ts | 6 ++ .../ui/SmoothScroll/SmoothScroll.svelte | 78 +++++++++++++++++++ 3 files changed, 116 insertions(+) create mode 100644 src/shared/lib/helpers/createScrollContext/createScrollContext.svelte.ts create mode 100644 src/shared/ui/SmoothScroll/SmoothScroll.svelte diff --git a/src/shared/lib/helpers/createScrollContext/createScrollContext.svelte.ts b/src/shared/lib/helpers/createScrollContext/createScrollContext.svelte.ts new file mode 100644 index 0000000..87703d2 --- /dev/null +++ b/src/shared/lib/helpers/createScrollContext/createScrollContext.svelte.ts @@ -0,0 +1,32 @@ +import Lenis from 'lenis'; +import { + getContext, + setContext, +} from 'svelte'; + +const LENIS_KEY = Symbol('lenis'); + +export function createLenisContext() { + let lenis = $state(null); + + return { + get lenis() { + return lenis; + }, + setLenis(instance: Lenis) { + lenis = instance; + }, + destroyLenis() { + lenis?.destroy(); + lenis = null; + }, + }; +} + +export function setLenisContext(context: ReturnType) { + setContext(LENIS_KEY, context); +} + +export function getLenisContext() { + return getContext>(LENIS_KEY); +} diff --git a/src/shared/lib/helpers/index.ts b/src/shared/lib/helpers/index.ts index 41139b0..63890d1 100644 --- a/src/shared/lib/helpers/index.ts +++ b/src/shared/lib/helpers/index.ts @@ -42,3 +42,9 @@ export { type ResponsiveManager, responsiveManager, } from './createResponsiveManager/createResponsiveManager.svelte'; + +export { + createLenisContext, + getLenisContext, + setLenisContext, +} from './createScrollContext/createScrollContext.svelte'; diff --git a/src/shared/ui/SmoothScroll/SmoothScroll.svelte b/src/shared/ui/SmoothScroll/SmoothScroll.svelte new file mode 100644 index 0000000..6fe199e --- /dev/null +++ b/src/shared/ui/SmoothScroll/SmoothScroll.svelte @@ -0,0 +1,78 @@ + + +{@render children?.()}