From d58155426f56f2029be8f4b3a53bdafec3abb467 Mon Sep 17 00:00:00 2001 From: wukko Date: Sun, 4 May 2025 15:36:13 +0600 Subject: [PATCH] web/PickerItem: props refactor, fade in images on load feels really good now --- web/src/components/dialog/PickerItem.svelte | 49 +++++++++++++++------ 1 file changed, 36 insertions(+), 13 deletions(-) diff --git a/web/src/components/dialog/PickerItem.svelte b/web/src/components/dialog/PickerItem.svelte index 6fd0ebe0..c636e8c7 100644 --- a/web/src/components/dialog/PickerItem.svelte +++ b/web/src/components/dialog/PickerItem.svelte @@ -10,10 +10,17 @@ import IconPhoto from "@tabler/icons-svelte/IconPhoto.svelte"; import IconGif from "@tabler/icons-svelte/IconGif.svelte"; - export let item: DialogPickerItem; - export let number: number; + type Props = { + item: DialogPickerItem; + number: number; + }; - let imageLoaded = false; + const { item, number }: Props = $props(); + + const itemType = $derived(item.type ?? "photo"); + + let imageLoaded = $state(false); + let hideSkeleton = $state(false); let validUrl = false; try { @@ -23,12 +30,19 @@ const isTunnel = validUrl && new URL(item.url).pathname === "/tunnel"; - $: itemType = item.type ?? "photo"; + const loaded = () => { + imageLoaded = true; + + // remove the skeleton after the image is done fading in + setTimeout(() => { + hideSkeleton = true; + }, 200) + }