Skip to content

Polish UI: copy, layout, accessibility, and theming#89

Merged
Hronom merged 1 commit into
mainfrom
ui-polish-pass
May 2, 2026
Merged

Polish UI: copy, layout, accessibility, and theming#89
Hronom merged 1 commit into
mainfrom
ui-polish-pass

Conversation

@Hronom
Copy link
Copy Markdown
Contributor

@Hronom Hronom commented May 2, 2026

Summary

A focused polish pass across copy, layout, accessibility, and theming — no behavioral changes to any transformation logic.

Copy & docs

  • Update-notification copy reworded for grammar/consistency ("Update check complete", "You're already on the latest version", consistent "Update" heading)
  • About license corrected to MIT (was incorrectly listed as Apache 2.0)
  • About feature list now generated from the transformation registry — no more stale list
  • README and AGENTS updated to reflect the Vue 3 + Pinia stack (was still describing React + Zustand)
  • "Clear Input" → "Clear" since it clears both fields
  • Title bar shows just "Textonom" on Home; "Textonom — " elsewhere

Layout

  • Settings rows use a 220px / 1fr grid so inputs line up across all sections (previously each row's input edge sat at a different x)
  • Removed the sticky-with-overflow:hidden conflict on the section title that prevented sticking
  • Reset uses an in-app, theme-correct confirm dialog instead of window.confirm (which broke the cyberpunk theme)
  • Reset reuses the store's exported defaultSettings (no more duplicated default values to drift)
  • Home cards: single .transformation-card-content padding rule, with reserved right-padding for the "✓ Open" badge so long titles ("Markdown to HTML", "JavaScript Formatter") no longer collide with the badge
  • Title bar centers the app title (mirroring the 138px window-controls width)
  • Status bar shows In/Out char counts + theme + version instead of duplicating the title-bar tab name

Accessibility

  • All Settings inputs now have associated <label for> / id pairs (clicking labels toggles checkboxes)
  • Window-control, tab-close, and overlay close buttons get aria-labels
  • Tab close converted from a <div> to a real <button>
  • Home cards are keyboard-activatable (Enter/Space) with aria-pressed and a focus-visible ring
  • Global :focus-visible outline and a focus ring on inputs

Theming

  • New --textSecondary token in all themes (was referenced in CSS but never defined)
  • Cyberpunk body text softened to #d8f3ff; cyan stays as accent — long copy is now readable
  • Settings footer uses explicit .btn-primary / .btn-secondary instead of :first-child rules that color-shifted per theme

UX

  • Ctrl/Cmd+K focuses the home search box
  • Ctrl/Cmd+Enter triggers the transform from the input textarea
  • BaseTransformationPage shows the spinner only after 150ms — instant transforms no longer flash a loader (also removes the artificial 100ms post-transform delay)

Tabs

  • Tab density (compact/medium/wide) is a data-density attribute; CSS drives max-width per density. Removes per-render imperative DOM mutation that caused visible reflow
  • Tab close is a real <button> with an aria-label

Test plan

  • npm run type-check — passes
  • npm run lint — only pre-existing v-html warnings remain
  • npm run build — passes
  • Manually exercise: open multiple tabs, search on Home with Ctrl+K, transform with Ctrl+Enter, open Settings → reset, switch themes (light/dark/cyberpunk), check the about modal, trigger an update check
  • Verify Home card "✓ Open" badge no longer overlaps long titles
  • Verify Settings inputs align across Theme/Font/Updates/Transformations sections

🤖 Generated with Claude Code

Copy & docs
- Fix update-notification copy ("Update check complete", "You're already on
  the latest version", consistent "Update" heading)
- Correct About license (MIT, not Apache 2.0); generate feature list from
  the transformation registry instead of a stale hand list
- Refresh README/AGENTS to reflect the Vue 3 + Pinia stack
- Rename "Clear Input" to "Clear" since it clears both fields
- App title is just "Textonom" on Home; "Textonom — <tab>" elsewhere

Layout
- Settings rows use a 220px / 1fr grid so inputs line up across sections
- Drop the sticky-with-overflow-hidden conflict on the section title
- Reset uses an in-app confirm dialog (theme-correct) instead of window.confirm
- Reset reuses the store's defaultSettings (no duplicated defaults)
- Home cards get a single .transformation-card-content padding rule and
  reserve room for the "✓ Open" badge so long titles no longer collide
- Title bar centers the app title (matching the window controls' width)
- Status bar shows In/Out char counts + theme + version instead of duplicating
  the title-bar tab name

Accessibility
- All Settings inputs have associated labels (for/id pairs)
- Title-bar / close / tab-close get aria-labels and use real <button>s
- Home cards are keyboard-activatable (Enter/Space) with focus-visible ring
- Global :focus-visible outline + input focus ring

Theming
- New --textSecondary token in all themes; cyberpunk body text softened to
  #d8f3ff so it's readable while cyan stays as accent
- Settings footer uses explicit .btn-primary / .btn-secondary instead of
  :first-child color shifting per theme

UX
- Ctrl/Cmd+K focuses the home search box
- Ctrl/Cmd+Enter triggers the transform from the input textarea
- BaseTransformationPage shows the spinner only after 150ms (instant
  transforms no longer flash a loader)

Tabs
- Density (compact/medium/wide) is a data-attribute on the container; CSS
  drives max-width per density instead of imperative DOM mutation per render
- Tab close is a real <button>

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
@Hronom Hronom merged commit e48f618 into main May 2, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant