/** Popular on its own — the desktop's fast lane (`catalog_artist_popular`).
 *  It waits on nothing but the linked MBID and one Last.fm call, so the
 *  section can paint while the full page is still being built; the page's
 *  own list wins once it lands (the same order, from the same inputs), and
 *  this one stays for an artist whose page came back with no Popular. */
export function loadPopular(id) {
    if (id == null || catalog.popular[id]) return;
    catalog.popular[id] = { status: "loading", tracks: [] };
    api.catalogArtistPopular(id).then(
        (tracks) => { catalog.popular[id] = { status: "ready", tracks: tracks ?? [] }; },
        () => { catalog.popular[id] = { status: "error", tracks: [] }; },
    );
}

/** A portrait for a byline — the same identity rule, search only. */
