diff --git a/packages/web/src/components/suggested-tracks/SuggestedTracks.module.css b/packages/web/src/components/suggested-tracks/SuggestedTracks.module.css index e9dc06eb941..f1f2ec52f36 100644 --- a/packages/web/src/components/suggested-tracks/SuggestedTracks.module.css +++ b/packages/web/src/components/suggested-tracks/SuggestedTracks.module.css @@ -40,6 +40,22 @@ justify-content: space-between; padding: var(--harmony-unit-4); gap: var(--harmony-unit-3); + cursor: pointer; + transition: background-color var(--harmony-quick); +} + +.suggestedTrack:hover, +.suggestedTrack:focus-visible { + background-color: var(--harmony-n-50); +} + +.suggestedTrack:focus { + outline: none; +} + +.suggestedTrack:focus-visible { + outline: 2px solid var(--harmony-focus, var(--harmony-secondary)); + outline-offset: -2px; } .trackDetails { @@ -55,10 +71,8 @@ border: 0.5px solid var(--harmony-n-100); } -.artworkButton { - all: unset; +.artworkWrapper { position: relative; - cursor: pointer; height: var(--harmony-unit-10); width: var(--harmony-unit-10); flex-shrink: 0; @@ -74,14 +88,19 @@ background: rgba(0, 0, 0, 0.4); opacity: 0; transition: opacity var(--harmony-quick); + pointer-events: none; } -.artworkButton:hover .playOverlay, -.artworkButton:focus-visible .playOverlay, +.suggestedTrack:hover .playOverlay, +.suggestedTrack:focus-visible .playOverlay, .playOverlay.isPlaying { opacity: 1; } +.userLinkWrapper { + display: inline-flex; +} + .trackInfo { display: flex; flex-direction: column; @@ -139,4 +158,9 @@ .suggestedTrackSkeleton { composes: suggestedTrack; height: 72px; + cursor: default; +} + +.suggestedTrackSkeleton:hover { + background-color: transparent; } diff --git a/packages/web/src/components/suggested-tracks/SuggestedTracks.tsx b/packages/web/src/components/suggested-tracks/SuggestedTracks.tsx index ee7d02a1ba9..154a77c1cc0 100644 --- a/packages/web/src/components/suggested-tracks/SuggestedTracks.tsx +++ b/packages/web/src/components/suggested-tracks/SuggestedTracks.tsx @@ -1,4 +1,4 @@ -import { useCallback, useMemo } from 'react' +import { KeyboardEvent, MouseEvent, useCallback, useMemo } from 'react' import { SUGGESTED_TRACK_COUNT, @@ -79,21 +79,41 @@ const SuggestedTrackRow = (props: SuggestedTrackProps) => { onAddTrack(track_id) }, [onAddTrack, track_id]) + const handleRowKeyDown = useCallback( + (e: KeyboardEvent) => { + if (e.key === 'Enter' || e.key === ' ') { + e.preventDefault() + togglePlay() + } + }, + [togglePlay] + ) + + const handleAddClick = useCallback( + (e: MouseEvent) => { + e.stopPropagation() + handleAddTrack() + }, + [handleAddTrack] + ) + return ( -
+
- +

{title}

- {user ? : null} + {user ? ( + e.stopPropagation()} + > + + + ) : null}