diff --git a/src/lib/components/Image.svelte b/src/lib/components/Image.svelte
new file mode 100644
index 0000000..ef093b1
--- /dev/null
+++ b/src/lib/components/Image.svelte
@@ -0,0 +1,27 @@
+
+
+{#if !fallback && !metadata}
+ No metadata supplied
+{:else}
+
+{/if}
+
+
diff --git a/src/lib/components/blurupplaceholder.svelte b/src/lib/components/blurupplaceholder.svelte
new file mode 100644
index 0000000..1087581
--- /dev/null
+++ b/src/lib/components/blurupplaceholder.svelte
@@ -0,0 +1,22 @@
+
+
+
diff --git a/src/lib/utils/types.ts b/src/lib/utils/types.ts
index bc39e5c..f2ff897 100644
--- a/src/lib/utils/types.ts
+++ b/src/lib/utils/types.ts
@@ -15,3 +15,15 @@ export interface Skill {
years: number;
started: number;
}
+
+export interface ImageMetadata {
+ href: string;
+ mime: string;
+ width: number;
+}
+
+export interface Thumbnail {
+ value: string;
+ width: number;
+ height: number;
+}
diff --git a/src/lib/utils/utils.ts b/src/lib/utils/utils.ts
new file mode 100644
index 0000000..8c30169
--- /dev/null
+++ b/src/lib/utils/utils.ts
@@ -0,0 +1,17 @@
+export const createLoadObserver = (handler: () => void) => {
+ let waiting = 0;
+
+ const onload = (el) => {
+ waiting++;
+ console.log(waiting);
+ el.addEventListener('load', () => {
+ waiting--;
+ console.log('waiting ' + waiting);
+ if (waiting === 0) {
+ handler();
+ }
+ });
+ };
+
+ return onload;
+};
diff --git a/src/routes/__layout.svelte b/src/routes/__layout.svelte
index b0210ff..f497606 100644
--- a/src/routes/__layout.svelte
+++ b/src/routes/__layout.svelte
@@ -69,6 +69,7 @@
Copyright