@@ -21,13 +21,6 @@ const DICTS: { key: string; name: string; sub: string }[] = [
2121const CLI_HREF = '/releases/latest/gins-rime'
2222const INSTALL_CMD = `curl -fsSL ${ CLI_HREF } -o gins-rime && chmod +x gins-rime`
2323
24- const CARD_BASE = [
25- 'border-radius:var(--sl-border-radius-sm,8px)' ,
26- 'border:1px solid var(--sl-color-hairline)' ,
27- 'background:color-mix(in srgb,var(--sl-color-accent) 4%,transparent)' ,
28- 'contain:layout style' ,
29- ] . join ( ';' )
30-
3124export default function HomeStatusPanel ( { dictVersions } : Props ) {
3225 const [ status , setStatus ] = useState < ApiStatus | null > ( null )
3326
@@ -41,24 +34,25 @@ export default function HomeStatusPanel({ dictVersions }: Props) {
4134 const loading = status === null
4235
4336 return (
44- < div class = "flex flex-col gap-[0.6rem]" >
45-
46- { /* ── Dict cards — Grid for perfectly equal height ── */ }
47- < div class = "grid grid-cols-1 md:grid-cols-3 gap-[0.6rem]" >
37+ < div class = "space-y-4" >
38+ < div class = "grid grid-cols-1 gap-3 md:grid-cols-2 xl:grid-cols-3" >
4839 { DICTS . map ( ( { key, name, sub } ) => {
4940 const info = status ?. [ key as keyof ApiStatus ] as DictInfo | undefined
5041 const ver = dictVersions [ key ] !== '—' ? dictVersions [ key ] : ( info ?. date ?? '—' )
5142 const hasLines = ! loading && info ?. lines != null
5243 return (
53- < div key = { key } class = "flex flex-col p-[0.85rem_1rem] min-h-[5.5rem] rounded-[var(--sl-border-radius-sm,8px)] border border-[var(--sl-color-hairline)] bg-[color-mix(in_srgb,var(--sl-color-accent)_4%,transparent)]" >
54- < span class = "font-semibold text-[0.875rem] text-[var(--sl-color-text)] truncate" > { name } </ span >
55- < span class = "text-[0.68rem] text-[color-mix(in_srgb,var(--sl-color-text)_42%,transparent)] truncate leading-relaxed" > { sub } </ span >
44+ < div
45+ key = { key }
46+ class = "surface-card"
47+ >
48+ < span class = "surface-title" > { name } </ span >
49+ < span class = "surface-sub" > { sub } </ span >
5650
57- < div class = "mt-auto flex flex-col gap-[0.15rem] " >
58- < span class = "pt-[0.45rem] text-[0.78rem] font-mono tabular-nums text-[var(--sl-color-text-accent)] truncate " >
51+ < div class = "mt-4 flex flex-col gap-1 " >
52+ < span class = "surface-meta " >
5953 { loading ? '…' : ver }
6054 </ span >
61- < span class = { `text-[0.62rem] tabular-nums text-[color-mix(in_srgb,var(--sl-color-text)_34%,transparent)] ${ hasLines ? '' : ' invisible' } ` } >
55+ < span class = { `surface-meta-muted ${ hasLines ? '' : ' invisible' } ` } >
6256 { info ?. lines != null ? `${ info . lines . toLocaleString ( ) } entries` : '0 entries' }
6357 </ span >
6458 </ div >
@@ -67,45 +61,27 @@ export default function HomeStatusPanel({ dictVersions }: Props) {
6761 } ) }
6862 </ div >
6963
70- { /* ── CLI — full-width bar, horizontal layout ── */ }
71- < div style = { `display:grid;grid-template-columns:1fr auto;align-items:center;gap:0.75rem 1.25rem;padding:0.85rem 1rem;${ CARD_BASE } ` } >
72- { /* Left: name + version */ }
73- < div style = "display:flex;align-items:baseline;gap:0.5rem;flex-wrap:wrap;min-width:0" >
74- < span style = "font-weight:600;font-size:0.875rem;color:var(--sl-color-text);white-space:nowrap" > Gin's-Rime CLI</ span >
75- { status ?. cli ?. date && (
76- < span style = "font-size:0.7rem;font-family:var(--sl-font-mono);color:color-mix(in srgb,var(--sl-color-text) 42%,transparent);font-variant-numeric:tabular-nums;white-space:nowrap" >
77- { status . cli . date } { status . cli . sha ? ` · ${ status . cli . sha } ` : '' }
78- </ span >
79- ) }
64+ < div class = "surface-card md:p-5" >
65+ < div class = "flex flex-col gap-3 md:flex-row md:items-center md:justify-between" >
66+ < div class = "min-w-0" >
67+ < span class = "block text-lg font-semibold text-[var(--sl-color-white)]" > Gin's-Rime CLI</ span >
68+ { status ?. cli ?. date && (
69+ < span class = "mt-1 block surface-meta-muted" >
70+ { status . cli . date } { status . cli . sha ? ` · ${ status . cli . sha } ` : '' }
71+ </ span >
72+ ) }
73+ </ div >
74+ < a
75+ class = "primary-btn"
76+ href = { CLI_HREF }
77+ download = "gins-rime"
78+ >
79+ 下载
80+ </ a >
8081 </ div >
8182
82- { /* Right: download button */ }
83- < a
84- class = "download-btn"
85- href = { CLI_HREF }
86- download = "gins-rime"
87- style = "font-size:0.78rem;padding:0.35rem 0.9rem;white-space:nowrap"
88- >
89- 下载
90- </ a >
91-
92- { /* Bottom: install command, spans both columns */ }
93- < pre style = { [
94- 'grid-column:1/-1' ,
95- 'margin:0' ,
96- 'font-size:0.7rem' ,
97- 'font-family:var(--sl-font-mono)' ,
98- 'overflow-x:auto' ,
99- 'padding:0.45rem 0.7rem' ,
100- 'border-radius:var(--sl-border-radius-sm,8px)' ,
101- 'background:var(--sl-color-bg-sidebar)' ,
102- 'border:1px solid var(--sl-color-hairline)' ,
103- 'white-space:pre' ,
104- 'line-height:1.5' ,
105- 'color:color-mix(in srgb,var(--sl-color-text) 65%,transparent)' ,
106- ] . join ( ';' ) } > { INSTALL_CMD } </ pre >
83+ < pre class = "mt-4 overflow-x-auto rounded-xl border border-[var(--sl-color-hairline)] bg-black/20 px-4 py-3 text-xs text-[var(--sl-color-gray-2)]" > { INSTALL_CMD } </ pre >
10784 </ div >
108-
10985 </ div >
11086 )
11187}
0 commit comments