Skip to content

Commit c2b443c

Browse files
committed
fix: design audit — touch targets, heading scale, mobile responsiveness, Alert deprecation
- Increase button touch targets by removing size="small" from Settings buttons - Enlarge H1 from 20px to 24px for better heading hierarchy - Increase capability tag (T/S/V) font from 8px to 10px - Make Core Parameters grid responsive (1-col mobile, 3-col desktop) - Make Playground history sidebar full-screen overlay on mobile - Fix "1 models" pluralization on Monitor and History pages - Replace deprecated antd Alert message prop with title (5 instances) - Remove duplicate H2 heading from History page
1 parent 62e36d8 commit c2b443c

11 files changed

Lines changed: 36 additions & 33 deletions

CHANGELOG.md

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,18 @@ All notable changes to this project will be documented in this file.
44

55
The format is based on [Keep a Changelog](https://keepachangelog.com/), and this project adheres to [Semantic Versioning](https://semver.org/).
66

7+
## [2.12.1] - 2026-04-28
8+
9+
### Fixed
10+
- Touch targets undersized: removed `size="small"` from Settings buttons, increased model tag padding
11+
- Heading scale too flat: increased H1 from 20px to 24px
12+
- Capability tags (T/S/V) nearly illegible: increased font from 8px to 10px with larger padding
13+
- Mobile parameter labels overflow: responsive grid for Core Parameters section
14+
- Playground history panel overlaps form on mobile: full-screen overlay on mobile
15+
- Grammar: "1 models" now correctly pluralized across Monitor and History pages
16+
- antd deprecation: replaced Alert `message` prop with `title` (5 instances)
17+
- History page duplicate heading: removed redundant H2 title (topbar already shows page name)
18+
719
## [2.12.0] - 2026-04-28
820

921
### Added

backend/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "llm-benchmark-backend",
3-
"version": "2.12.0",
3+
"version": "2.12.1",
44
"description": "LLM API Bench - Backend",
55
"main": "dist/index.js",
66
"scripts": {

frontend/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
{
22
"name": "frontend",
33
"private": true,
4-
"version": "2.12.0",
4+
"version": "2.12.1",
55
"type": "module",
66
"scripts": {
77
"dev": "vite",

frontend/src/components/HistoryPanel.tsx

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -174,12 +174,11 @@ export function HistoryPanel({
174174

175175
return (
176176
<motion.div initial={{ opacity: 0 }} animate={{ opacity: 1 }} className="space-y-4">
177-
{/* Header */}
177+
{/* Toolbar */}
178178
<div className="flex items-center justify-between flex-wrap gap-3">
179-
<h2 className="text-base font-semibold text-text-primary">
180-
History
181-
<span className="ml-2 text-sm text-text-secondary font-normal font-mono">({sorted.length})</span>
182-
</h2>
179+
<span className="text-sm text-text-secondary font-mono">
180+
{sorted.length} workflow{sorted.length !== 1 ? 's' : ''}
181+
</span>
183182
{onRefresh && (
184183
<button
185184
onClick={onRefresh}

frontend/src/components/LoginPage.tsx

Lines changed: 2 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -81,7 +81,7 @@ export function LoginPage({ onLoginSuccess }: LoginPageProps) {
8181

8282
{changeError && (
8383
<Alert
84-
message={changeError}
84+
title={changeError}
8585
type="error"
8686
showIcon
8787
closable
@@ -130,14 +130,7 @@ export function LoginPage({ onLoginSuccess }: LoginPageProps) {
130130
<h2 className="text-text-primary text-base font-medium mb-4">Sign in</h2>
131131

132132
{error && (
133-
<Alert
134-
message={error}
135-
type="error"
136-
showIcon
137-
closable
138-
onClose={clearError}
139-
style={{ marginBottom: 16 }}
140-
/>
133+
<Alert title={error} type="error" showIcon closable onClose={clearError} style={{ marginBottom: 16 }} />
141134
)}
142135

143136
<form onSubmit={handleSubmit}>

frontend/src/components/MonitorPage.tsx

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -720,7 +720,9 @@ export function MonitorPage() {
720720
<div className="text-[13px] font-medium text-text-primary">{provider.name}</div>
721721
<div className="flex items-center gap-1.5 mt-0.5">
722722
<Tag style={{ fontSize: 10, margin: 0 }}>{provider.format}</Tag>
723-
<span className="text-[10px] text-text-tertiary">{providerTargets.length} models</span>
723+
<span className="text-[10px] text-text-tertiary">
724+
{providerTargets.length} model{providerTargets.length !== 1 ? 's' : ''}
725+
</span>
724726
</div>
725727
</div>
726728
</div>

frontend/src/components/PlaygroundHistorySidebar.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ export function PlaygroundHistorySidebar({
3333
selectedId,
3434
}: Props) {
3535
return (
36-
<div className="w-80 shrink-0 glass-card p-4 space-y-3 self-start sticky top-4">
36+
<div className="w-full md:w-80 shrink-0 glass-card p-4 space-y-3 self-start sticky top-4 fixed md:static inset-0 z-50 md:z-auto overflow-y-auto md:overflow-visible bg-bg-primary md:bg-transparent">
3737
{/* Header */}
3838
<div className="flex items-center justify-between">
3939
<div className="flex items-center gap-2">

frontend/src/components/PlaygroundPage.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -729,7 +729,7 @@ export function PlaygroundPage() {
729729
</div>
730730

731731
{/* Error */}
732-
{error && <Alert type="error" message={error} closable onClose={() => reset()} showIcon />}
732+
{error && <Alert type="error" title={error} closable onClose={() => reset()} showIcon />}
733733

734734
{/* Response */}
735735
{(hasRun || loading) && (

frontend/src/components/SettingsPage.tsx

Lines changed: 8 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -195,12 +195,12 @@ export function SettingsPage() {
195195
endpoints.
196196
</p>
197197
</div>
198-
<Button type="primary" ghost icon={<PlusOutlined />} onClick={openCreateForm} size="small">
198+
<Button type="primary" ghost icon={<PlusOutlined />} onClick={openCreateForm}>
199199
Add Provider
200200
</Button>
201201
</div>
202202

203-
{providerError && <Alert type="error" message={providerError} showIcon closable />}
203+
{providerError && <Alert type="error" title={providerError} showIcon closable />}
204204

205205
{loading && providers.length === 0 && (
206206
<div className="text-center py-8 text-text-tertiary text-[13px]">Loading providers...</div>
@@ -236,9 +236,7 @@ export function SettingsPage() {
236236
<div className="text-[14px] font-semibold text-text-primary truncate">{provider.name}</div>
237237
<Tag>{provider.format}</Tag>
238238
</div>
239-
<Button size="small" onClick={() => openEditForm(provider)}>
240-
Edit
241-
</Button>
239+
<Button onClick={() => openEditForm(provider)}>Edit</Button>
242240
</div>
243241

244242
{/* Info rows */}
@@ -268,7 +266,7 @@ export function SettingsPage() {
268266
<motion.div initial={{ opacity: 0, height: 0 }} animate={{ opacity: 1, height: 'auto' }}>
269267
<Alert
270268
type={testResult.success ? 'success' : 'error'}
271-
message={
269+
title={
272270
testResult.success
273271
? `Connection successful (${testResult.latencyMs}ms)`
274272
: `Connection failed: ${testResult.error}`
@@ -308,17 +306,17 @@ export function SettingsPage() {
308306
: model.contextSize}
309307
</span>
310308
{model.supportsVision && (
311-
<Tag color="blue" style={{ fontSize: 8, padding: '0 4px', lineHeight: '16px' }}>
309+
<Tag color="blue" style={{ fontSize: 10, padding: '0 6px', lineHeight: '20px' }}>
312310
V
313311
</Tag>
314312
)}
315313
{model.supportsTools && (
316-
<Tag color="purple" style={{ fontSize: 8, padding: '0 4px', lineHeight: '16px' }}>
314+
<Tag color="purple" style={{ fontSize: 10, padding: '0 6px', lineHeight: '20px' }}>
317315
T
318316
</Tag>
319317
)}
320318
{model.supportsStreaming && (
321-
<Tag color="green" style={{ fontSize: 8, padding: '0 4px', lineHeight: '16px' }}>
319+
<Tag color="green" style={{ fontSize: 10, padding: '0 6px', lineHeight: '20px' }}>
322320
S
323321
</Tag>
324322
)}
@@ -334,7 +332,6 @@ export function SettingsPage() {
334332
<Button
335333
type="primary"
336334
ghost
337-
size="small"
338335
icon={<ApiOutlined />}
339336
onClick={() => handleTest(provider.id)}
340337
loading={testingId === provider.id}
@@ -349,7 +346,7 @@ export function SettingsPage() {
349346
cancelText="Cancel"
350347
okButtonProps={{ danger: true }}
351348
>
352-
<Button size="small" danger ghost>
349+
<Button danger ghost>
353350
Delete
354351
</Button>
355352
</Popconfirm>

frontend/src/components/WorkflowConfigPanel.tsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -666,7 +666,7 @@ export function WorkflowConfigPanel({
666666
<div className="section-header" data-color="teal">
667667
Core Parameters
668668
</div>
669-
<div className="grid grid-cols-3 gap-4">
669+
<div className="grid grid-cols-1 sm:grid-cols-3 gap-4">
670670
<div className="space-y-2">
671671
<div className="flex items-center gap-1">
672672
<label className="param-chip-label">Max Tokens</label>
@@ -1101,7 +1101,7 @@ export function WorkflowConfigPanel({
11011101
<button
11021102
key={model.id}
11031103
onClick={() => toggleModel(provider, model.name)}
1104-
className={`text-[10px] px-2 py-1 rounded border transition-all font-medium font-mono ${
1104+
className={`text-[10px] px-2.5 py-1.5 rounded border transition-all font-medium font-mono min-h-[28px] ${
11051105
selected ? '' : 'text-text-tertiary hover:border-border-hover'
11061106
}`}
11071107
style={{

0 commit comments

Comments
 (0)