Skip to content

The shared Empty panel's base classes are not override-friendly: its dashed border never renders, and a tighter className silently loses to md:p-12 #8525

Description

@os-justin

Found while landing objectui#8520 (the AgentPreview empty-collection card). Out of that card's scope — it fences to one call site in packages/app-shell — so it is filed rather than swept in. Not claimed, no assignee.

The two defects, both in one class string

packages/components/src/custom/empty.tsx, the Empty container:

"flex min-w-0 flex-1 flex-col items-center justify-center gap-6 rounded-lg border-dashed p-6 text-center text-balance md:p-12"

1. border-dashed with no border width — the dashed frame is invisible at every call site

Tailwind's preflight sets border-width: 0 on every element, so border-dashed sets only border-style and the border stays 0px wide. Measured in a real browser (Chromium, the console preview gallery, viewport 1440x900) on a rendered Empty:

borderStyle: "dashed"
borderWidth: "0px"

Every one of the roughly 28 Empty call sites in this repo draws an invisible dashed frame. Either the class is dead and should go, or the component is missing a border width utility and no empty state in the product has ever had the outline it was written to have.

2. md:p-12 survives an unprefixed padding override, so "tighten this panel" does nothing at desktop widths

cn() is tailwind-merge, which resolves conflicts within a variant. An unprefixed px-3 py-8 passed by a caller replaces the base p-6 but does not touch md:p-12, which is a different variant — so at any viewport at or above 768px the panel is back to 48px of padding.

Measured side by side, in one page load, inside a 215px-wide content column:

rendered height
Empty with a description, defaults 118.8px
the same with className="px-3 py-8" 118.8px — identical

Two call sites intend a tighter panel and do not get one above 768px:

  • packages/app-shell/src/console/ai/ConversationsSidebar.tsx:284className="px-3 py-8", in a sidebar
  • packages/app-shell/src/views/metadata-admin/AuditPanel.tsx:189 and :199className="py-10"

Both read as deliberate tightening by their authors. Neither has any effect on a desktop viewport.

Why they are one card

Same root cause: the base class string mixes a responsive variant and a style-without-width into a surface callers are expected to override through className. Whoever fixes one is looking at the other. The likely shapes are dropping md:p-12 in favour of a variant callers can reach, and either adding border or dropping border-dashed; both are visual decisions across roughly 28 call sites, which is why this is filed rather than fixed inline.

Reachability

packages/components/src/custom/empty.tsx is published source in a released package, so a fix here needs a changeset and a look at every consumer. Empty is a Shadcn-derived component living in src/custom/, not src/ui/, so the no-touch zone of coding standard #7 does not apply — it is ours to edit.

Dedup

Ran. A natural-language search_issues describing both halves against this repo returns total_count: 0. The zero is a reading and not a dead instrument: the control term InspectorSelectField returned 3 in the same session (#8450, #8488, #3306), the same count objectui#8520 and objectui#8504 recorded.

Related

objectui#8520 (the card that measured this, and that declined to use the Empty container on the strength of the 118.8px reading) · objectui#8504 / objectui#8491 (the em-dash placeholder class that led here)

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:p2

Type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions