Open a result by clicking anywhere on its card

Drop the Open button: the title's hit area now covers the whole card,
with Retry kept on top so it doesn't open the preview.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
Iqbal
2026-10-23 12:38:52 +07:00
parent a4189f0d2a
commit c294e91253
3 changed files with 6 additions and 6 deletions

View File

@@ -228,7 +228,6 @@ const en = {
'res.sourceCount': '{n} sources', 'res.sourceCount': '{n} sources',
'res.sourceOne': '1 source', 'res.sourceOne': '1 source',
'res.working': 'Being created…', 'res.working': 'Being created…',
'res.open': 'Open',
'res.close': 'Close', 'res.close': 'Close',
'res.reviewNotice': 'AI-generated draft. Check it, then approve it or reject it.', 'res.reviewNotice': 'AI-generated draft. Check it, then approve it or reject it.',
'res.noContent': 'No content to show', 'res.noContent': 'No content to show',
@@ -602,7 +601,6 @@ const id: Record<Key, string> = {
'res.sourceCount': '{n} sumber', 'res.sourceCount': '{n} sumber',
'res.sourceOne': '1 sumber', 'res.sourceOne': '1 sumber',
'res.working': 'Sedang dibuat…', 'res.working': 'Sedang dibuat…',
'res.open': 'Buka',
'res.close': 'Tutup', 'res.close': 'Tutup',
'res.reviewNotice': 'Draft buatan AI. Periksa dulu, lalu setujui atau tolak.', 'res.reviewNotice': 'Draft buatan AI. Periksa dulu, lalu setujui atau tolak.',
'res.noContent': 'Tidak ada konten untuk ditampilkan', 'res.noContent': 'Tidak ada konten untuk ditampilkan',

View File

@@ -132,10 +132,7 @@ function ContentCard({ material: m, onOpen }: { material: Material; onOpen: () =
<span title={describeRule(m.rule)}>{describeRule(m.rule)}</span> <span title={describeRule(m.rule)}>{describeRule(m.rule)}</span>
{working {working
? <span>{m.video ? t('res.videoProgress', { n: m.video.progress }) : t('res.working')}</span> ? <span>{m.video ? t('res.videoProgress', { n: m.video.progress }) : t('res.working')}</span>
: <div className="content-card-actions"> : m.retry && <div className="content-card-actions"><RetryButton material={m} className="text-btn" /></div>}
{m.retry && <RetryButton material={m} className="text-btn" />}
<button className="text-btn" onClick={onOpen}>{t('res.open')} <Icon name="arrow-right" /></button>
</div>}
</div> </div>
</div> </div>
</article> </article>

View File

@@ -62,6 +62,11 @@ textarea{resize:vertical;line-height:1.6}
.content-title:disabled{cursor:default;color:#8b97a9} .content-title:disabled{cursor:default;color:#8b97a9}
.content-card-foot>span{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap} .content-card-foot>span{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.content-card-actions{display:flex;gap:12px;flex-shrink:0} .content-card-actions{display:flex;gap:12px;flex-shrink:0}
/* The whole card opens the result: the title button's hit area stretches over it, Retry stays on top */
.content-card{position:relative}
.content-title:not(:disabled)::after{content:"";position:absolute;inset:0;border-radius:inherit}
.content-card:has(.content-title:not(:disabled)):hover .content-title{color:var(--blue)}
.content-card-actions{position:relative;z-index:1}
.research-row .status{margin-left:0} .research-row .status{margin-left:0}
.research-row h3 a{color:var(--ink)} .research-row h3 a{color:var(--ink)}
.research-row h3 a:hover{color:var(--blue)} .research-row h3 a:hover{color:var(--blue)}