diff --git a/web-player/scripts/check-tokens.mjs b/web-player/scripts/check-tokens.mjs index 4f2e14e..928ab06 100644 --- a/web-player/scripts/check-tokens.mjs +++ b/web-player/scripts/check-tokens.mjs @@ -15,6 +15,7 @@ const ARBITRARY_WHITELIST = [ /^my-\[\d+d?vh\]$/, // +error.svelte: centrado vertical de página de error /^py-\[\d+d?vh\]$/, // Explorar: centrado vertical de "sin resultados" /^transition-\[filter\]$/, // Explorar: genre-tile hover + /^transition-\[transform,width\]$/, // Tabs: indicador deslizante /^bg-\[image:var\(--mf-[\w-]+\)\]$/ ]; diff --git a/web-player/src/lib/components/music/TrackStatusBadge.svelte b/web-player/src/lib/components/music/TrackStatusBadge.svelte index 1aa83b7..d22ba28 100644 --- a/web-player/src/lib/components/music/TrackStatusBadge.svelte +++ b/web-player/src/lib/components/music/TrackStatusBadge.svelte @@ -13,4 +13,9 @@ const info = $derived(TRACK_STATUS[status]); - + diff --git a/web-player/src/lib/components/music/library/AlbumTrackPicker.svelte b/web-player/src/lib/components/music/library/AlbumTrackPicker.svelte index f322e65..9b84fea 100644 --- a/web-player/src/lib/components/music/library/AlbumTrackPicker.svelte +++ b/web-player/src/lib/components/music/library/AlbumTrackPicker.svelte @@ -4,6 +4,7 @@ import X from '@lucide/svelte/icons/x'; import type { LibraryTrack } from '$lib/types'; import { plural } from '$lib/utils/format'; + import { transferBetweenLists } from '$lib/utils/transitions'; import EmptyState from '$lib/components/ui/primitives/EmptyState.svelte'; import TrackPickList from './TrackPickList.svelte'; @@ -14,6 +15,8 @@ let { tracks, memberIds }: Props = $props(); + const [send, receive] = transferBetweenLists(); + let currentIds = $state(untrack(() => [...memberIds])); const initialIds = untrack(() => new Set(memberIds)); @@ -43,13 +46,13 @@ {#if available.length > 0}

Añadir desde tu biblioteca

- + {/if}
{#if inAlbum.length > 0}

En este álbum

- + {:else} + const FADE = { duration: 200 }; + + {label}{label} diff --git a/web-player/src/lib/components/ui/primitives/Tabs.svelte b/web-player/src/lib/components/ui/primitives/Tabs.svelte index 4e86149..681006a 100644 --- a/web-player/src/lib/components/ui/primitives/Tabs.svelte +++ b/web-player/src/lib/components/ui/primitives/Tabs.svelte @@ -12,16 +12,43 @@ } let { label, tabs, class: klass = '' }: Props = $props(); + + let links = $state>({}); + let indicator = $state({ x: 0, width: 0 }); + let measured = $state(false); + let animated = $state(false); + + const activeHref = $derived(tabs.find((tab) => tab.active)?.href); + + $effect(() => { + const link = activeHref ? links[activeHref] : undefined; + if (!link) return; + indicator = { x: link.offsetLeft, width: link.offsetWidth }; + measured = true; + if (!animated) requestAnimationFrame(() => (animated = true)); + }); -