Skip to content

feat: take every console label at run time, one card-header action and the editor's mode in its header - #126

Merged
rubentalstra merged 2 commits into
mainfrom
feat/console-words-card-action-editor-header
Oct 19, 2026
Merged

rubentalstra merged 2 commits into
mainfrom
feat/console-words-card-action-editor-header

Conversation

@rubentalstra

@rubentalstra rubentalstra commented Oct 19, 2026 •

Copy link
Copy Markdown
Contributor

What changed and why

The three changes of milestone v0.2.0 that the four consoles need before they can move their own strings onto their catalogs and close the 0.1.7 review findings.

  • Every console label at run time (Take every console-supplied label as a string made at run time #114). Every text a console hands a component (parameter or field) accepts a string made at run time. Struct fields a reader sees are Cow<'static, str>; label parameters are impl Into<String> (beside form::Field, impl Into<Oco<'static, str>>). table::model::Noun is now a message of the console's catalog, Noun::new(Message::new(catalog, "value-sets")), whose form is chosen by $count and which carries .empty and .opening as whole sentences, so the library holds no English plural rule. The new i18n::Message names such a message. The gallery draws its own page strings from app/ferrohealth-ui-gallery/locales/en/ferrohealth-ui-gallery.ftl (475 messages), its pseudo-locale stretches them with the library's, and the CI stray-literal job covers app/ferrohealth-ui-gallery/src (its synthetic data and server are skipped with their reasons).
  • One card-header action (One card-header action for every console #122). view::surface::card_action(href, label): a link in the accent, its words then an arrow a tight space (--space-tight) apart, at the small step, with the sunken ground under the pointer and the focus ring of every control. The winner is FerroFED's text link with an arrow: it is lighter than FerroTERM's outlined button beside a card's title, so the title stays the first thing read, and it now takes the library's hover treatment and spacing, which FerroFED's link lacked (its arrow touched its word). The gallery shows it on the overview ("Recent files", "All files"), and tests/it/states.rs captures its hover and focus in every brand, light and dark.
  • The editor's mode in its header (An editor's page header says New when it creates and Edit when it edits #123). view::surface::{Mode, editor_title, editor_heading}: one console message that selects by $mode (new, edit) titles the heading, the trail's last crumb and the document; the title is a sentence, drawn in the body face around the edited thing's name. The gallery shows both on the forms page; tests/it/console.rs pins both.

What a console changes is listed in the CHANGELOG.md entry: the nouns become catalog messages, Column::text is no longer const (keep columns in a function), Listing, Confirmation, Footer, Tab, Upload, Picker and Tree are Clone rather than Copy, navigation groups hold a Vec<Entry> and sidebar takes a Vec<Group>, and the functions that returned impl IntoView + use<> around a label return AnyView. This breaks the public API, so the release is 0.2.0.

No specification governs the catalog layout, the noun's attributes, the card action or the editor's title: our own design. The arrow is decoration beside its words (aria-hidden), and the action keeps the 2 px focus ring (WCAG 2.2 SC 2.4.7).

Closes #114
Closes #122
Closes #123

Licensing of contributions

  • I accept the terms in CONTRIBUTING.md § Licensing of contributions: I have the right to submit this work, I license it under the project licence of the version it lands in, and I grant the Licensor the relicensing right stated there.

Checklist

  • Accessibility decisions cite WCAG 2.2, WAI-ARIA 1.2 or the Authoring Practices, not memory and not another library.
  • Rust gates pass: cargo fmt --all --check, cargo clippy --workspace --all-targets -- -D warnings, the wasm32 clippy runs, cargo nextest run --workspace --locked, cargo doc with RUSTDOCFLAGS=-D warnings, and cargo deny check.
  • A visible change refreshed the gallery screenshots, and I looked at every image it changed.
  • A new or changed component was compared with the four consoles' versions (docs/qa/), and the best one on its merits was restyled to the library's tokens; the winner and the reason are stated below.
  • Its interactive states (pointer, focus, open, each tone) are captured by tests/it/states.rs in every brand, light and dark.
  • A release pull request says, per screen and per state, what was checked and what was fixed.
  • Shell and workflow files are clean: shellcheck --severity=style, actionlint, zizmor --min-severity=low .github/.
  • CHANGELOG.md has an [Unreleased] entry, if a console sees the change.
  • No patient data in a fixture, test, gallery row or example.
  • Every commit is signed.
  • No AI or assistant attribution anywhere in the commits or this PR.

…d the editor's mode in its header

Every text a console hands a component accepts a string made at run
time, so a console draws every label from its catalog; a listing's noun
is a console message chosen by count, with no English plural rule in the
library; the gallery draws its own page strings from its catalog and the
stray-literal check covers it (#114). card_action is the one action at
the far end of a card's header (#122). editor_heading says "New <thing>"
while an editor creates and "Edit <name>" while it edits (#123).
@rubentalstra rubentalstra added this to the v0.2.0 milestone Oct 19, 2026
@sonarqubecloud

Copy link
Copy Markdown

@rubentalstra
rubentalstra added this pull request to the merge queue Oct 19, 2026
Merged via the queue into main with commit 9763cd7 Oct 19, 2026
26 checks passed
@rubentalstra
rubentalstra deleted the feat/console-words-card-action-editor-header branch October 19, 2026 19:49
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

1 participant