Skip to content

refactor(web): mirror shadcn render plumbing across zen components - #34

Merged
codingcodax merged 5 commits into
mainfrom
codingcodax/zen-render-audit
Oct 20, 2026
Merged

codingcodax merged 5 commits into
mainfrom
codingcodax/zen-render-audit

Conversation

@codingcodax

Copy link
Copy Markdown
Member

Closes #32

Mirrors shadcn/ui's render plumbing across all 47 zen components while keeping every coss class string. Structure follows shadcn; the visual layer stays coss.

What changed

Twelve components needed a change; the other 35 already matched shadcn.

Component Before After
button useRender + mergeProps Base UI Button, inherits Primitive.Props
card useRender on all 13 exports plain div wrappers
label useRender (Base UI label) plain <label>
input typed against InputPrimitive.Props React.ComponentProps<'input'>; render dropped
input-otp internal render={<Separator/>} direct Separator
dialog header/footer/panel via useRender plain div props
sheet header/footer/panel via useRender plain div props
drawer header/footer/panel/bar/menu parts via useRender; nine hand-written render slots plain elements; item roots inherit render
pagination PaginationLink via useRender wraps Button with render={<a/>}; public render dropped
table useRender + hand-written render? plain div + table
sidebar annotation only unchanged behaviour
— 35 components already matched shadcn unchanged

Examples keep using render where shadcn's demos do.

Recorded decisions

  • docs/adr/0007-render-plumbing.md: zen mirrors shadcn's render structure; styling stays coss.
  • ADR-0005's token-only divergence annotated as superseded in part.
  • VERSION.md: pins hash upstream styling bytes, not a diffable local copy.

Verification

  • Every coss class literal in the changed files is byte-identical to main (scripted comparison).
  • Public exports unchanged in every file.
  • No render?: declaration remains under registry/zen/ui.
  • Render type fixtures (test/fixtures/render/batch-{a,b,c}.tsx) assert accepted and rejected cases at compile time.
  • 8 tests / 714 assertions, check, check-types, registry build and a production next build all pass.

Drop table's hand-written render and compose pagination links with
Button, matching shadcn's Base UI structure. Add the render type fixture
covering pagination, progress, radio-group, separator, skeleton, slider,
spinner, switch, table, textarea and toast.
@vercel

vercel Bot commented Oct 20, 2026 •

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated
ui-web Ready Ready Preview Oct 20, 2026 3:51am UTC

@codingcodax
codingcodax merged commit 27feac9 into main Oct 20, 2026
3 checks passed
@codingcodax
codingcodax deleted the codingcodax/zen-render-audit branch October 20, 2026 03:53
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Mirror shadcn's render plumbing across zen components

1 participant