Skip to content

Commit fe5c9d0

Browse files
authored
Merge pull request #22 from andriawan/21-lazy-load-image-assets
Implement lazy load image assets
2 parents fc78be3 + 3b6af80 commit fe5c9d0

6 files changed

Lines changed: 53 additions & 15 deletions

File tree

bun.lock

Lines changed: 11 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -59,5 +59,8 @@
5959
"vite": "7.2.4",
6060
"vitest": "4.0.13",
6161
"vitest-browser-svelte": "2.0.1"
62+
},
63+
"dependencies": {
64+
"@unpic/svelte": "1.0.0"
6265
}
6366
}

src/lib/components/common/Benefit.svelte

Lines changed: 14 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,6 @@
1-
<script lang="ts"></script>
1+
<script lang="ts">
2+
import { Image } from '@unpic/svelte';
3+
</script>
24

35
<!-- Why Join Section -->
46
<section class="bg-gray-900 px-4 py-16 sm:px-6 sm:py-20 lg:px-8">
@@ -29,7 +31,7 @@
2931
<div class="mb-8 space-y-4">
3032
<div class="flex items-start gap-3 delay-100 fade-in">
3133
<svg
32-
class="mt-1 h-6 w-6 flex-shrink-0 text-green-500"
34+
class="mt-1 h-6 w-6 shrink-0 text-green-500"
3335
viewBox="0 0 24 24"
3436
fill="none"
3537
stroke="currentColor"
@@ -47,7 +49,7 @@
4749

4850
<div class="flex items-start gap-3 delay-200 fade-in">
4951
<svg
50-
class="mt-1 h-6 w-6 flex-shrink-0 text-green-500"
52+
class="mt-1 h-6 w-6 shrink-0 text-green-500"
5153
viewBox="0 0 24 24"
5254
fill="none"
5355
stroke="currentColor"
@@ -67,7 +69,7 @@
6769

6870
<div class="flex items-start gap-3 delay-300 fade-in">
6971
<svg
70-
class="mt-1 h-6 w-6 flex-shrink-0 text-green-500"
72+
class="mt-1 h-6 w-6 shrink-0 text-green-500"
7173
viewBox="0 0 24 24"
7274
fill="none"
7375
stroke="currentColor"
@@ -83,7 +85,7 @@
8385

8486
<div class="flex items-start gap-3 delay-400 fade-in">
8587
<svg
86-
class="mt-1 h-6 w-6 flex-shrink-0 text-green-500"
88+
class="mt-1 h-6 w-6 shrink-0 text-green-500"
8789
viewBox="0 0 24 24"
8890
fill="none"
8991
stroke="currentColor"
@@ -101,7 +103,7 @@
101103

102104
<div class="flex items-start gap-3 delay-500 fade-in">
103105
<svg
104-
class="mt-1 h-6 w-6 flex-shrink-0 text-green-500"
106+
class="mt-1 h-6 w-6 shrink-0 text-green-500"
105107
viewBox="0 0 24 24"
106108
fill="none"
107109
stroke="currentColor"
@@ -145,12 +147,16 @@
145147
<!-- Right Image -->
146148
<div class="fade-in-right relative">
147149
<div class="relative overflow-hidden rounded-3xl shadow-2xl">
148-
<img
150+
<Image
149151
src="https://images.unsplash.com/photo-1522071820081-009f0129c71c?w=800&h=600&fit=crop"
150152
alt="Community collaboration"
153+
layout="constrained"
154+
width={600}
155+
height={450}
156+
loading="lazy"
151157
class="h-full w-full object-cover"
152158
/>
153-
<div class="absolute inset-0 bg-gradient-to-t from-gray-900/50 to-transparent"></div>
159+
<div class="absolute inset-0 bg-linear-to-t from-gray-900/50 to-transparent"></div>
154160
</div>
155161
<!-- Decorative elements -->
156162
<div

src/lib/components/common/FoundingMembers.svelte

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
<script lang="ts">
22
import type { Member } from '$lib/contract/Member';
3+
import { Image } from '@unpic/svelte';
34
45
interface Props {
56
members: Member[];
@@ -21,9 +22,12 @@
2122
Since {member.since}
2223
</span>
2324
<div class="relative h-80 overflow-hidden sm:h-[350px]">
24-
<img
25+
<Image
2526
src={member.image}
2627
alt={member.name}
28+
layout="constrained"
29+
width={300}
30+
height={350}
2731
class="h-full w-full object-cover transition-transform duration-500 group-hover:scale-110"
2832
/>
2933
<div

src/lib/components/common/HeroSlider.svelte

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
<script lang="ts">
22
import { onMount } from 'svelte';
3-
import type { HeroSliderList } from '../../../contract/HeroSliderList';
3+
import type { HeroSliderList } from '../../contract/HeroSliderList';
44
55
let { isStatic = false, intervalTime = 5000 } = $props();
66

src/lib/components/common/Programs.svelte

Lines changed: 19 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,6 @@
1-
<script lang="ts"></script>
1+
<script lang="ts">
2+
import { Image } from '@unpic/svelte';
3+
</script>
24

35
<!-- Community Programs -->
46
<section class="bg-gray-50 px-4 py-16 sm:px-6 sm:py-20 lg:px-8">
@@ -8,8 +10,11 @@
810
<div
911
class="group fade-in-scale relative h-96 cursor-pointer overflow-hidden rounded-lg sm:h-[400px]"
1012
>
11-
<img
13+
<Image
1214
src="https://images.unsplash.com/photo-1427504494785-3a9ca7044f45?w=400&h=500&fit=crop"
15+
layout="constrained"
16+
width={300}
17+
height={400}
1318
alt="Youth Development"
1419
class="h-full w-full object-cover transition-transform duration-500 group-hover:scale-110"
1520
/>
@@ -31,9 +36,12 @@
3136
<div
3237
class="group fade-in-scale relative h-96 cursor-pointer overflow-hidden rounded-lg delay-100 sm:h-[400px]"
3338
>
34-
<img
39+
<Image
3540
src="https://images.unsplash.com/photo-1492684223066-81342ee5ff30?w=400&h=500&fit=crop"
3641
alt="Cultural Events"
42+
layout="constrained"
43+
width={300}
44+
height={400}
3745
class="h-full w-full object-cover transition-transform duration-500 group-hover:scale-110"
3846
/>
3947
<div
@@ -54,9 +62,12 @@
5462
<div
5563
class="group fade-in-scale relative h-96 cursor-pointer overflow-hidden rounded-lg delay-200 sm:h-[400px]"
5664
>
57-
<img
65+
<Image
5866
src="https://images.unsplash.com/photo-1559027615-cd4628902d4a?w=400&h=500&fit=crop"
5967
alt="Community Service"
68+
layout="constrained"
69+
width={300}
70+
height={400}
6071
class="h-full w-full object-cover transition-transform duration-500 group-hover:scale-110"
6172
/>
6273
<div
@@ -77,9 +88,12 @@
7788
<div
7889
class="group fade-in-scale relative h-96 cursor-pointer overflow-hidden rounded-lg delay-300 sm:h-[400px]"
7990
>
80-
<img
91+
<Image
8192
src="https://images.unsplash.com/photo-1503676260728-1c00da094a0b?w=400&h=500&fit=crop"
8293
alt="Education Programs"
94+
layout="constrained"
95+
width={300}
96+
height={400}
8397
class="h-full w-full object-cover transition-transform duration-500 group-hover:scale-110"
8498
/>
8599
<div

0 commit comments

Comments
 (0)