Found while landing objectui#8520, whose ruling asked explicitly for this census: "Check what the other empty-collection states in packages/app-shell/src/views/metadata-admin/previews/ do before you pick. If its siblings already use the Empty family, match them; if they all hand-roll something different, that is a finding worth reporting." They all hand-roll. Not claimed, no assignee.
The census
Probe, run at the repo root:
git grep -n -E "\bEmpty(Header|Title|Description|Content|Media)\b" -- 'packages/app-shell/src/views/metadata-admin/previews/*'
Zero hits from @object-ui/components. Lit control in the same pathspec: git grep -c PreviewShell on the same glob fires on every preview file, so the zero is an absence, not a dead pathspec. (The trailing /* matters — 'packages/*/src' without it is a whole-path glob that matches nothing.)
Meanwhile the same probe run repo-wide returns roughly 28 call sites, including 14 files in packages/app-shell/src/views/ outside this directory. So the family is reachable and in heavy use one directory up; this subtree is the hole.
What the 15 sibling empty-collection states render instead, all of them a short sentence in a muted div:
| file:line |
rendered |
ActionPreview.tsx:580 |
div.text-muted-foreground.italic — "Renders full JSON response." |
AgentPreview.tsx:255 |
div.text-xs.text-muted-foreground.italic — the emptyHint prop |
AppNavCanvas.tsx:329 |
div with border-dashed, text-[11px] |
BookPreview.tsx:190 |
PreviewEmptyState (the directory's own full-canvas one) |
DatasourcePreview.tsx:158 |
div.text-xs...italic — "No config keys set." |
EmailTemplatePreview.tsx:97 |
div.text-muted-foreground.italic |
FieldStub.tsx:204 |
span.text-xs.text-muted-foreground |
FieldsListEditor.tsx:169 |
p with border-dashed, text-[11px] |
FlowPreview.tsx:345 |
div.text-muted-foreground.italic |
FlowRunsPanel.tsx:348 |
div.text-[10px].italic |
FlowSimulatorPanel.tsx:323 |
div.italic.text-muted-foreground |
JobPreview.tsx:356 |
div.text-xs.text-amber-700 |
PageBlockCanvas.tsx:827 |
div with border-dashed, text-[11px] |
SkillPreview.tsx:106 |
div.text-xs...italic — "No tools whitelisted." |
ValidationPreview.tsx:281 |
div.text-xs.text-amber-700 |
Six distinct type scales (text-xs, text-[10px], text-[11px], text-sm, unset), three colour treatments, and two different dashed-border conventions — for one visual state.
The part that will bite someone
AgentPreview.tsx:221 and ToolPreview.tsx:296 each declare a local component literally named Empty:
function Empty({ children }: { children: React.ReactNode }) {
return <div className="text-xs text-muted-foreground italic">{children}</div>;
}
In those two files the shared Empty cannot be imported under its own name at all — the import collides with the local declaration, and there is no compiler error waiting for whoever tries, only a shadowing surprise. objectui#8520 hit exactly this and imported EmptyDescription alone to route around it.
That local Empty is also, at 16px in a 215px column, the correct weight for these panes — measured against the shared container's 118.8px in the same frame (see objectui#8525). So this is not "the previews are wrong and the family is right": the family's container is genuinely too heavy for a preview rail, and the previews grew their own lighter one because nothing lighter was exported.
What is actually being asked for
Not a mechanical sweep. The question is whether the shared family should grow a light block-level member the previews can use — at which point these 15 sites plus the two local Empty declarations converge on it — or whether PreviewShell.tsx's existing PreviewEmptyState should grow a compact variant and be the directory's single answer. Both are design calls above a dev seat.
Filed as an observation, not a defect: every one of the 15 renders readable text today, so none of them has the objectui#8491 / objectui#8504 accessibility defect. What they have is drift.
Dedup
Ran. A natural-language search_issues describing the census against this repo returns one hit, #4659, which is a closed card about unread *.component.yml metadata and unrelated. Control term InspectorSelectField returned 3 in the same session (#8450, #8488, #3306), the count objectui#8520 and objectui#8504 both recorded, so the near-zero is a reading.
Related
objectui#8520 (the card whose ruling asked for this) · objectui#8525 (the shared Empty container's override problems, measured in the same run) · objectui#8504 / objectui#8491 (the em-dash class)
Found while landing objectui#8520, whose ruling asked explicitly for this census: "Check what the other empty-collection states in
packages/app-shell/src/views/metadata-admin/previews/do before you pick. If its siblings already use theEmptyfamily, match them; if they all hand-roll something different, that is a finding worth reporting." They all hand-roll. Not claimed, no assignee.The census
Probe, run at the repo root:
Zero hits from
@object-ui/components. Lit control in the same pathspec:git grep -c PreviewShellon the same glob fires on every preview file, so the zero is an absence, not a dead pathspec. (The trailing/*matters —'packages/*/src'without it is a whole-path glob that matches nothing.)Meanwhile the same probe run repo-wide returns roughly 28 call sites, including 14 files in
packages/app-shell/src/views/outside this directory. So the family is reachable and in heavy use one directory up; this subtree is the hole.What the 15 sibling empty-collection states render instead, all of them a short sentence in a muted div:
ActionPreview.tsx:580div.text-muted-foreground.italic— "Renders full JSON response."AgentPreview.tsx:255div.text-xs.text-muted-foreground.italic— theemptyHintpropAppNavCanvas.tsx:329divwithborder-dashed,text-[11px]BookPreview.tsx:190PreviewEmptyState(the directory's own full-canvas one)DatasourcePreview.tsx:158div.text-xs...italic— "No config keys set."EmailTemplatePreview.tsx:97div.text-muted-foreground.italicFieldStub.tsx:204span.text-xs.text-muted-foregroundFieldsListEditor.tsx:169pwithborder-dashed,text-[11px]FlowPreview.tsx:345div.text-muted-foreground.italicFlowRunsPanel.tsx:348div.text-[10px].italicFlowSimulatorPanel.tsx:323div.italic.text-muted-foregroundJobPreview.tsx:356div.text-xs.text-amber-700PageBlockCanvas.tsx:827divwithborder-dashed,text-[11px]SkillPreview.tsx:106div.text-xs...italic— "No tools whitelisted."ValidationPreview.tsx:281div.text-xs.text-amber-700Six distinct type scales (
text-xs,text-[10px],text-[11px],text-sm, unset), three colour treatments, and two different dashed-border conventions — for one visual state.The part that will bite someone
AgentPreview.tsx:221andToolPreview.tsx:296each declare a local component literally namedEmpty:In those two files the shared
Emptycannot be imported under its own name at all — the import collides with the local declaration, and there is no compiler error waiting for whoever tries, only a shadowing surprise. objectui#8520 hit exactly this and importedEmptyDescriptionalone to route around it.That local
Emptyis also, at 16px in a 215px column, the correct weight for these panes — measured against the shared container's 118.8px in the same frame (see objectui#8525). So this is not "the previews are wrong and the family is right": the family's container is genuinely too heavy for a preview rail, and the previews grew their own lighter one because nothing lighter was exported.What is actually being asked for
Not a mechanical sweep. The question is whether the shared family should grow a light block-level member the previews can use — at which point these 15 sites plus the two local
Emptydeclarations converge on it — or whetherPreviewShell.tsx's existingPreviewEmptyStateshould grow a compact variant and be the directory's single answer. Both are design calls above a dev seat.Filed as an observation, not a defect: every one of the 15 renders readable text today, so none of them has the objectui#8491 / objectui#8504 accessibility defect. What they have is drift.
Dedup
Ran. A natural-language
search_issuesdescribing the census against this repo returns one hit, #4659, which is a closed card about unread*.component.ymlmetadata and unrelated. Control termInspectorSelectFieldreturned 3 in the same session (#8450, #8488, #3306), the count objectui#8520 and objectui#8504 both recorded, so the near-zero is a reading.Related
objectui#8520 (the card whose ruling asked for this) · objectui#8525 (the shared
Emptycontainer's override problems, measured in the same run) · objectui#8504 / objectui#8491 (the em-dash class)