Found while implementing objectui#8481. Filed unassigned, not claimed. This is the same defect class as objectui#8475 (RelatedList's hand-rolled em-dash), one package over — and a repo-wide grep says these two files are the only carriers, so the class can be closed completely.
DOM shapes are spelled out in words rather than written literally — tag-shaped fragments are eaten from GitHub bodies even inside backticks (AGENTS.md, "六种已实测的改写" ①).
What
packages/plugin-grid/src/ObjectGrid.tsx renders its empty-cell placeholder two different ways.
The no-renderer default path (line ~2539) uses the shared component:
value != null && value !== ''
? <span>{String(value)}</span>
: <EmptyValue />
Three other sites spell it by hand instead — a span classed text-muted-foreground/50 text-xs italic containing a bare em-dash, at lines 2479, 2497 and 2697:
value != null && value !== '' ? String(value) : /* a hand-rolled muted em-dash span */
EmptyValue (packages/components/src/custom/empty.tsx) carries three things the hand-rolled span does not:
- a
data-slot of empty-value, which is how tests and tooling find placeholders;
- an
aria-label of No value, resolved through the i18n label hook — so a screen reader hears a name instead of a naked punctuation mark;
select-none / no-underline / pointer-events-none, so a missing value inside a link or button column never looks clickable or gets copied into a selection.
The hand-rolled spans also differ visually from the real one: they add text-xs italic, which the shared component does not. So the same grid can show two typographically different placeholders in two adjacent columns depending on which branch built the cell.
Blast radius, measured
Repo-wide grep for the hand-rolled class string on 7cf6f38fb:
| file |
sites |
packages/plugin-grid/src/ObjectGrid.tsx |
3 |
packages/plugin-detail/src/RelatedList.tsx |
1 — already filed as objectui#8475 |
Nothing else in the workspace. Two files, four sites, and objectui#8475 already owns one of them; a fix here plus that one retires the pattern entirely.
Related, not the same
objectui#8481 taught three @object-ui/fields renderers that an empty array is not a cell value, so those cells now reach EmptyValue. That does not touch these three sites: they are ObjectGrid's own fallbacks for columns that resolve no cell renderer at all, and their guard (value != null && value !== '') carries the same empty-array hole one branch over — measured and noted in objectui#8481's own body.
⇒ Whoever takes this should decide whether to close both halves at once: swap the three spans for EmptyValue, and give their guard the array clause, so the fallback path agrees with the renderers it stands in for.
Dedup
REST is 403 from this dev container (GitHub access is not enabled for this session), so one targeted MCP search_issues was used instead — declared channel switch. It returned objectui#8481, objectui#8474 and objectui#8475 as control hits, so the channel is live in this session. objectui#8475 covers RelatedList in @object-ui/plugin-detail; nothing returned covers ObjectGrid.
Filed by an ObjectUI dev agent working objectui#8481, session session_01YBWFb5YgMU5dw8p2VKj16S, from branch claude/issue-8481-selectcellrenderer-empty-array. (Attribution written as prose deliberately: a footer block is stripped from issue bodies on create.)
Found while implementing objectui#8481. Filed unassigned, not claimed. This is the same defect class as objectui#8475 (
RelatedList's hand-rolled em-dash), one package over — and a repo-wide grep says these two files are the only carriers, so the class can be closed completely.DOM shapes are spelled out in words rather than written literally — tag-shaped fragments are eaten from GitHub bodies even inside backticks (AGENTS.md, "六种已实测的改写" ①).
What
packages/plugin-grid/src/ObjectGrid.tsxrenders its empty-cell placeholder two different ways.The no-renderer default path (line ~2539) uses the shared component:
Three other sites spell it by hand instead — a span classed
text-muted-foreground/50 text-xs italiccontaining a bare em-dash, at lines 2479, 2497 and 2697:EmptyValue(packages/components/src/custom/empty.tsx) carries three things the hand-rolled span does not:data-slotofempty-value, which is how tests and tooling find placeholders;aria-labelofNo value, resolved through the i18n label hook — so a screen reader hears a name instead of a naked punctuation mark;select-none/no-underline/pointer-events-none, so a missing value inside a link or button column never looks clickable or gets copied into a selection.The hand-rolled spans also differ visually from the real one: they add
text-xs italic, which the shared component does not. So the same grid can show two typographically different placeholders in two adjacent columns depending on which branch built the cell.Blast radius, measured
Repo-wide grep for the hand-rolled class string on
7cf6f38fb:packages/plugin-grid/src/ObjectGrid.tsxpackages/plugin-detail/src/RelatedList.tsxNothing else in the workspace. Two files, four sites, and objectui#8475 already owns one of them; a fix here plus that one retires the pattern entirely.
Related, not the same
objectui#8481 taught three
@object-ui/fieldsrenderers that an empty array is not a cell value, so those cells now reachEmptyValue. That does not touch these three sites: they are ObjectGrid's own fallbacks for columns that resolve no cell renderer at all, and their guard (value != null && value !== '') carries the same empty-array hole one branch over — measured and noted in objectui#8481's own body.⇒ Whoever takes this should decide whether to close both halves at once: swap the three spans for
EmptyValue, and give their guard the array clause, so the fallback path agrees with the renderers it stands in for.Dedup
REST is 403 from this dev container (
GitHub access is not enabled for this session), so one targeted MCPsearch_issueswas used instead — declared channel switch. It returned objectui#8481, objectui#8474 and objectui#8475 as control hits, so the channel is live in this session. objectui#8475 coversRelatedListin@object-ui/plugin-detail; nothing returned coversObjectGrid.Filed by an ObjectUI dev agent working objectui#8481, session
session_01YBWFb5YgMU5dw8p2VKj16S, from branchclaude/issue-8481-selectcellrenderer-empty-array. (Attribution written as prose deliberately: a footer block is stripped from issue bodies on create.)