v2
This commit is contained in:
@@ -0,0 +1,31 @@
|
||||
import { ArrowUpRight, BookOpen, Globe2, Shield, Sparkles, Swords } from 'lucide-react';
|
||||
import { rarity, stats, type Article, type Block } from '../shared/protocol.ts';
|
||||
import { STARTER_ARTICLES } from '../shared/catalog.ts';
|
||||
|
||||
export type CardData = { article: Article; hash: string; block?: Block };
|
||||
export const samples: CardData[] = STARTER_ARTICLES.map((article, i) => ({ article,
|
||||
hash: ['000eca7498a26d1908613726da6e869d7c9c936f4a461cb439ef24672b9a0008',
|
||||
'000b1a387a067a7d698677965ca1ca7b0eb5e590811431bdb9aad62268180001',
|
||||
'0008a4fa5893e9ddbd679cbcc7f0938706aa70aab8c8af42a4bc67a42520001',
|
||||
'0009a4fa5893e9ddbd679cbcc7f0938706aa70aab8c8af42a4bc67a42520020'][i] }));
|
||||
export function imageCredit(article: Article): string {
|
||||
if (!article.image) return article.url;
|
||||
const parts = new URL(article.image).pathname.split('/');
|
||||
return `https://commons.wikimedia.org/wiki/File:${parts.includes('thumb') ? parts.at(-2)! : parts.at(-1)!}`;
|
||||
}
|
||||
export function Card({ card, onClick }: { card: CardData; onClick?: () => void }) {
|
||||
const { article, hash } = card;
|
||||
const tier = rarity(hash);
|
||||
const s = stats(hash);
|
||||
return <button className={`wiki-card ${tier.toLowerCase()}`} onClick={onClick} tabIndex={onClick ? 0 : -1} aria-label={`View ${article.title} ${tier} card`}>
|
||||
<div className="card-top"><span><Sparkles size={11} /> {tier}</span><span>W / {String(article.pageId).slice(-4)}</span></div>
|
||||
<div className={`card-art art-${article.category.toLowerCase()}`}>
|
||||
{article.image ? <img src={article.image} alt={article.title} loading="lazy" referrerPolicy="no-referrer" onError={e => { e.currentTarget.style.display = 'none'; }} /> : <Globe2 size={64} />}
|
||||
<span className="card-category">{article.category}</span>
|
||||
</div>
|
||||
<div className="card-content"><div className="card-title"><h3>{article.title}</h3><ArrowUpRight size={16} /></div><p>{article.extract}</p>
|
||||
<div className="card-stats"><span><Swords size={12} />{s.power}</span><span><Shield size={12} />{s.defense}</span><span><BookOpen size={12} />{s.knowledge}</span></div>
|
||||
</div>
|
||||
<div className="card-bottom"><span>WIKIPEDIA · #{article.pageId}</span><span>{card.block ? `BLOCK ${card.block.height}` : 'PREVIEW'}</span></div>
|
||||
</button>;
|
||||
}
|
||||
Reference in New Issue
Block a user