Spaces:
Running
Running
| import { speak } from '../tts' | |
| const POS_LABELS = { | |
| NOUN: 'Noun', VERB: 'Verb', ADJ: 'Adjective', ADV: 'Adverb', DET: 'Determiner', | |
| PRON: 'Pronoun', ADP: 'Preposition', CCONJ: 'Conjunction', PART: 'Particle', PUNCT: 'Punctuation', | |
| } | |
| const GENDER_LABELS = { Masc: 'Masculine ♂', Fem: 'Feminine ♀' } | |
| const GENDER_COLORS = { Masc: '#4A90D9', Fem: '#D96B8A' } | |
| export default function WordCard({ data, loading }) { | |
| if (!data) { | |
| return <div className="fc-muted">👆 Click any word to see its gender, lemma, and part of speech.</div> | |
| } | |
| const color = GENDER_COLORS[data.gender] || '#888' | |
| const genderLabel = GENDER_LABELS[data.gender] || '—' | |
| const posLabel = POS_LABELS[data.pos] || data.pos | |
| return ( | |
| <div className="fc-word-card"> | |
| <div className="fc-word-card-text" style={{ color }}>{data.text}</div> | |
| <table className="fc-word-card-table"> | |
| <tbody> | |
| <tr><td>Lemma</td><td><strong>{data.lemma}</strong></td></tr> | |
| <tr><td>Gender</td><td style={{ color, fontWeight: 600 }}>{genderLabel}</td></tr> | |
| <tr><td>Part of speech</td><td>{posLabel}</td></tr> | |
| <tr> | |
| <td>Meaning</td> | |
| <td>{loading ? <span className="fc-muted">Loading…</span> : (data.meaning || '—')}</td> | |
| </tr> | |
| {data.grammar && ( | |
| <tr><td>Grammar</td><td className="fc-grammar">{data.grammar}</td></tr> | |
| )} | |
| </tbody> | |
| </table> | |
| <button className="fc-btn fc-btn-secondary" onClick={() => speak(data.text)}>🔊 Hear it</button> | |
| </div> | |
| ) | |
| } | |