diff --git a/package.json b/package.json
index 973ca42f..b6cbdd37 100644
--- a/package.json
+++ b/package.json
@@ -98,6 +98,7 @@
"dependencies": {
"@fortawesome/free-regular-svg-icons": "^6.7.2",
"@fortawesome/free-solid-svg-icons": "^6.7.2",
+ "@lottiefiles/dotlottie-web": "^0.52.2",
"@reuters-graphics/svelte-markdown": "^0.0.3",
"@sveltejs/kit": "^2.0.0",
"dayjs": "^1.11.13",
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index 3b6786bc..f872bd4a 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -14,6 +14,9 @@ importers:
'@fortawesome/free-solid-svg-icons':
specifier: ^6.7.2
version: 6.7.2
+ '@lottiefiles/dotlottie-web':
+ specifier: ^0.52.2
+ version: 0.52.2
'@reuters-graphics/svelte-markdown':
specifier: ^0.0.3
version: 0.0.3(svelte@5.28.1)
@@ -569,6 +572,9 @@ packages:
'@jridgewell/trace-mapping@0.3.25':
resolution: {integrity: sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==}
+ '@lottiefiles/dotlottie-web@0.52.2':
+ resolution: {integrity: sha512-aeXCMUB5RdusHrvZ3Py2KaMgQ0w7SdA8NFbPK+SpwqC1UW1CDFZl5vPLueZHju7vLhB1rpPvpQ5fQ0L/KEZt7w==}
+
'@manypkg/find-root@1.1.0':
resolution: {integrity: sha512-mki5uBvhHzO8kYYix/WRy2WX8S3B5wdVSc9D6KcU5lQNglP2yt58/VfLuAK49glRXChosY8ap2oJ1qgma3GUVA==}
@@ -4641,6 +4647,8 @@ snapshots:
'@jridgewell/resolve-uri': 3.1.2
'@jridgewell/sourcemap-codec': 1.5.0
+ '@lottiefiles/dotlottie-web@0.52.2': {}
+
'@manypkg/find-root@1.1.0':
dependencies:
'@babel/runtime': 7.27.0
diff --git a/src/components/@types/global.ts b/src/components/@types/global.ts
index c5bb00e2..eb3ba45f 100644
--- a/src/components/@types/global.ts
+++ b/src/components/@types/global.ts
@@ -69,6 +69,17 @@ export type ScrollerVideoForegroundPosition =
| 'center left'
| 'center right';
+export type ScrollerLottieForegroundPosition =
+ | 'top center'
+ | 'top left'
+ | 'top right'
+ | 'bottom center'
+ | 'bottom left'
+ | 'bottom right'
+ | 'center center'
+ | 'center left'
+ | 'center right';
+
// Complete ScrollerVideo instance interface
export interface ScrollerVideoInstance {
// Properties
diff --git a/src/components/ScrollerLottie/Debug.svelte b/src/components/ScrollerLottie/Debug.svelte
new file mode 100644
index 00000000..80939dd2
--- /dev/null
+++ b/src/components/ScrollerLottie/Debug.svelte
@@ -0,0 +1,271 @@
+
+
+
Progress:
+{componentState.progress}
+Duration:
++ {componentState.duration}s +
+ + {#if componentState.segment} +Segment:
++ {componentState.segment[0]} -- {componentState.segment[1]} +
+ {/if} + +Current frame:
++ {componentState.currentFrame}/{componentState.totalFrames} +
+ +Speed:
++ {componentState.speed} +
+ +Autoplay:
++ {componentState.autoplay} +
+ +Loop:
++ {componentState.loop} + {componentState.loop ? `(Loop count: ${componentState.loopCount})` : ''} +
+ +Mode:
++ {componentState.mode} +
+ +Layout:
++ {JSON.stringify(componentState.layout)} +
+ + {#if Object.keys(componentState.allMarkers).length} +All markers:
++ {componentState.allMarkers} +
+ {/if} + + {#if componentState.marker} +Active marker:
++ {componentState.marker} +
+ {/if} + + {#if componentState.allThemes.length} +All themes:
++ {componentState.allThemes.join(', ')} +
+ {/if} + {#if componentState.activeThemeId} +Active theme ID:
++ {componentState.activeThemeId} +
+ {/if} + +isPaused:
++ {componentState.isPaused} +
+ +isPlaying:
++ {componentState.isPlaying} +
+ +isStopped:
++ {componentState.isStopped} +
+ +isLoaded:
++ {componentState.isLoaded} +
+ +isFrozen:
++ {componentState.isFrozen} +
+Step 1
Step 2
Step 3
Step 4
Step 5