Fix L119/L151/L153: empty-state copy, range dashes, dismiss aria-labels
L119: Standardized empty-state copy on the "No X yet." pattern. Terminal
"Output will appear here." -> "No output yet."; Diagnostics
"No errors logged." -> "No errors yet."
L151: Range-dash convention is ASCII hyphen everywhere. Changed the lone
en-dash prose range ("2-3 is a good balance") to a hyphen, matching the
time-range placeholders (1:30-2:00).
L153: The three "Dismiss" close buttons now name what they dismiss --
"Dismiss suggested link" (DownloadBar + Library suggestion banners) and
"Dismiss duplicate warning" (DownloadBar dup row).
L95 left open: the Cookies-card "sign in"/"sign-in" usage is already correct
English (verb vs modifier); no change warranted.
typecheck + 242 tests + eslint green.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
+3
-3
@@ -607,7 +607,7 @@ token system + shared primitives (UI/SIMP — high value, larger effort) · i18n
|
|||||||
- [ ] **L117 — Terminal/error-log "empty" aren't centered blocks** like the other empty states (inline text instead).
|
- [ ] **L117 — Terminal/error-log "empty" aren't centered blocks** like the other empty states (inline text instead).
|
||||||
- [ ] **L118 — Cross-component focus via hardcoded id.** App focuses the URL field with
|
- [ ] **L118 — Cross-component focus via hardcoded id.** App focuses the URL field with
|
||||||
`document.getElementById('aerofetch-url')` — brittle coupling into DownloadBar's markup.
|
`document.getElementById('aerofetch-url')` — brittle coupling into DownloadBar's markup.
|
||||||
- [ ] **L119 — "No items" copy varies** — "No … yet" (most) vs "Output will appear here." (Terminal) vs "No errors logged." (Diagnostics).
|
- [x] **L119 — "No items" copy varies** — "No … yet" (most) vs "Output will appear here." (Terminal) vs "No errors logged." (Diagnostics).
|
||||||
- [ ] **L120 — Fluent `Card` vs hand-styled `div` cards.** Only Settings/Onboarding use `<Card>`; every
|
- [ ] **L120 — Fluent `Card` vs hand-styled `div` cards.** Only Settings/Onboarding use `<Card>`; every
|
||||||
other card surface is a bespoke styled `<div>`.
|
other card surface is a bespoke styled `<div>`.
|
||||||
- [ ] **L121 — Raw scrim literal.** CommandPalette backdrop is `rgba(0,0,0,0.32)` (the only raw rgba in
|
- [ ] **L121 — Raw scrim literal.** CommandPalette backdrop is `rgba(0,0,0,0.32)` (the only raw rgba in
|
||||||
@@ -677,11 +677,11 @@ token system + shared primitives (UI/SIMP — high value, larger effort) · i18n
|
|||||||
in the tray" is a three-sentence paragraph with a parenthetical. Normalize hint length/voice.
|
in the tray" is a three-sentence paragraph with a parenthetical. Normalize hint length/voice.
|
||||||
- [x] **L150 — "PO token" capitalization varies** — `PO Token` (ipc.ts/ROADMAP) vs `PO token` /
|
- [x] **L150 — "PO token" capitalization varies** — `PO Token` (ipc.ts/ROADMAP) vs `PO token` /
|
||||||
`Proof-of-Origin token` (SettingsView). Pick one.
|
`Proof-of-Origin token` (SettingsView). Pick one.
|
||||||
- [ ] **L151 — Mixed range dashes.** En-dash in prose ("2–3 is a good balance") vs hyphen in time-range
|
- [x] **L151 — Mixed range dashes.** En-dash in prose ("2–3 is a good balance") vs hyphen in time-range
|
||||||
placeholders ("1:30-2:00"). Choose one convention.
|
placeholders ("1:30-2:00"). Choose one convention.
|
||||||
- [ ] **L152 — Search-field sizing differs per screen.** History `minWidth 180 / maxWidth 320`, Settings
|
- [ ] **L152 — Search-field sizing differs per screen.** History `minWidth 180 / maxWidth 320`, Settings
|
||||||
inline `width: 100%`, DownloadBar `flexGrow`. No shared search-input width.
|
inline `width: 100%`, DownloadBar `flexGrow`. No shared search-input width.
|
||||||
- [ ] **L153 — Generic "Dismiss" aria-labels.** Three close buttons (DownloadBar suggestion + dup,
|
- [x] **L153 — Generic "Dismiss" aria-labels.** Three close buttons (DownloadBar suggestion + dup,
|
||||||
Library suggestion) all read just "Dismiss" — ambiguous to a screen reader. Name what's dismissed.
|
Library suggestion) all read just "Dismiss" — ambiguous to a screen reader. Name what's dismissed.
|
||||||
- [x] **L154 — Instructional text in an aria-label.** Sidebar theme-cycle button is
|
- [x] **L154 — Instructional text in an aria-label.** Sidebar theme-cycle button is
|
||||||
`aria-label="Theme: Dark. Click to change."` — "Click to change" is UI instruction, not a name.
|
`aria-label="Theme: Dark. Click to change."` — "Click to change" is UI instruction, not a name.
|
||||||
|
|||||||
@@ -588,7 +588,7 @@ export function DownloadBar(): React.JSX.Element {
|
|||||||
appearance="subtle"
|
appearance="subtle"
|
||||||
icon={<DismissRegular />}
|
icon={<DismissRegular />}
|
||||||
onClick={dismissSuggestion}
|
onClick={dismissSuggestion}
|
||||||
aria-label="Dismiss"
|
aria-label="Dismiss suggested link"
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
)}
|
)}
|
||||||
@@ -605,7 +605,7 @@ export function DownloadBar(): React.JSX.Element {
|
|||||||
appearance="subtle"
|
appearance="subtle"
|
||||||
icon={<DismissRegular />}
|
icon={<DismissRegular />}
|
||||||
onClick={() => setDup(null)}
|
onClick={() => setDup(null)}
|
||||||
aria-label="Dismiss"
|
aria-label="Dismiss duplicate warning"
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
)}
|
)}
|
||||||
|
|||||||
@@ -541,7 +541,7 @@ export function LibraryView(): React.JSX.Element {
|
|||||||
appearance="subtle"
|
appearance="subtle"
|
||||||
icon={<DismissRegular />}
|
icon={<DismissRegular />}
|
||||||
onClick={clip.dismiss}
|
onClick={clip.dismiss}
|
||||||
aria-label="Dismiss"
|
aria-label="Dismiss suggested link"
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
)}
|
)}
|
||||||
|
|||||||
@@ -536,7 +536,7 @@ export function SettingsView(): React.JSX.Element {
|
|||||||
|
|
||||||
<Field
|
<Field
|
||||||
label="Maximum simultaneous downloads"
|
label="Maximum simultaneous downloads"
|
||||||
hint="How many downloads run at once. 2–3 is a good balance."
|
hint="How many downloads run at once. 2-3 is a good balance."
|
||||||
>
|
>
|
||||||
<SpinButton
|
<SpinButton
|
||||||
value={maxConcurrent}
|
value={maxConcurrent}
|
||||||
@@ -1002,7 +1002,7 @@ export function SettingsView(): React.JSX.Element {
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
{errorEntries.length === 0 ? (
|
{errorEntries.length === 0 ? (
|
||||||
<Caption1 className={styles.hint}>No errors logged.</Caption1>
|
<Caption1 className={styles.hint}>No errors yet.</Caption1>
|
||||||
) : (
|
) : (
|
||||||
<div className={styles.errorList}>
|
<div className={styles.errorList}>
|
||||||
{errorEntries.slice(0, 20).map((e) => (
|
{errorEntries.slice(0, 20).map((e) => (
|
||||||
|
|||||||
@@ -205,7 +205,7 @@ export function TerminalView(): React.JSX.Element {
|
|||||||
|
|
||||||
<pre className={styles.log} ref={logRef}>
|
<pre className={styles.log} ref={logRef}>
|
||||||
{lines.length === 0 ? (
|
{lines.length === 0 ? (
|
||||||
<span className={styles.empty}>Output will appear here.</span>
|
<span className={styles.empty}>No output yet.</span>
|
||||||
) : (
|
) : (
|
||||||
lines.map((l) => (
|
lines.map((l) => (
|
||||||
<div key={l.id} className={lineClass(l.kind)}>
|
<div key={l.id} className={lineClass(l.kind)}>
|
||||||
|
|||||||
Reference in New Issue
Block a user