Skip to content

A seventh em-dash placeholder with no accessible name, in a <div> — invisible to every span-shaped census objectui#8491/#8504 ran #8520

Description

@os-justin

Found while landing objectui#8504 (PR #8518). Out of that card's scope — it fences to six enumerated carriers — so it is filed rather than swept in. ⛔ Not claimed, no assignee.

The carrier

packages/app-shell/src/views/metadata-admin/previews/AgentPreview.tsx:302, in KeyVals:

if (rows.length === 0) return <div className="text-muted-foreground italic"></div>;

Same defect as the class objectui#8491 / #8504 closed: an em dash rendered with no role, no label and no text alternative. A screen-reader user reaching this block hears a naked punctuation mark.

Why every previous census missed it — this is the useful half

Both instruments used across objectui#8491, PR #8503 and objectui#8504 were span-shaped:

  • the narrow one, <span className="…">—</span> on one line;
  • the wider class-agnostic one, still anchored on <span …>—</span>.

This carrier is a <div>. It is invisible to both, in every run, and it stays invisible no matter how carefully the pathspec or the truncation traps are handled. It surfaced only because #8504's post-fix verification used an element-agnostic probe:

git grep -n '>—<' -- 'packages/*/src/*' 'apps/*'

which returns the nine known carriers plus this one. Recommendation for whoever triages the fenced 41-member population: run the element-agnostic form first, then narrow. A span-shaped instrument cannot report what it cannot match, and its zero looks exactly like absence.

Why it is not a mechanical repeat of #8504

EmptyValue's docblock scopes it to "anywhere a renderer would otherwise show - or for a null, undefined or empty value" — an inline placeholder for a missing cell/field value, rendering a <span>. This site is different in kind: it is a block-level empty-collection state (rows.length === 0, i.e. this record has no key/values at all), which is what Empty / EmptyTitle / EmptyDescription exist for — and both are already imported elsewhere in packages/app-shell.

So the fix needs a decision, not a swap:

  • A — <EmptyValue />. One line, consistent with the nine siblings, keeps the compact inline look inside the preview card. Costs the italic treatment and shifts the colour to text-muted-foreground/50. Slightly stretches the component's declared scope: this is not a field value.
  • B — Empty + EmptyDescription with a real string ("No values"). Semantically right for an empty collection and gives a readable announcement rather than a labelled dash, but it is visually much heavier than a one-line dash inside a small preview block, and it needs an i18n key.
  • C — <EmptyValue /> with className keeping italic, mirroring what PR fix(plugin-grid,plugin-detail): draw the shared EmptyValue for missing cell values #8503 did for the grid's record-detail drawer (it kept its text and typography through glyph / className and took a purely additive delta).

No recommendation offered — the empty-collection vs empty-value distinction is a design call, and it likely applies to more than this one site once someone looks.

Reachability

@object-ui/app-shell already declares @object-ui/components at workspace:*, and AgentPreview.tsx sits in the same tree as two files this class already converted, so no manifest edge is involved either way.

Dedup

Ran. Single-token search_issues for AgentPreview against this repo returns total_count: 0. Per objectui#8504's instrument note, a zero on this repo's issue search is only a reading once a lit control fires in the same session: InspectorSelectField returned 3 (#8450, #8488, #3306) — the same count that card recorded — so the zero is an absence, not a dead instrument.

Related

objectui#8504 / PR #8518 (the six carriers, this one excluded by scope) · objectui#8491 / PR #8503 (the original five) · the DetailSection / HeaderHighlight card (the aria-labelled half) · the pending triage card for the 41 bare em-dash ternary fallbacks — this finding is not one of those 41 either; it is a tenth site that no instrument in the thread has counted.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Labels

bugSomething isn't workingdomain:uiobjectui ui stream: fix lands on the published library or apps — objectui execution seatpm:dispatchedpriority:p3

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions