Skip to content

fix: address audit findings ahead of next -> main merge - #83

Merged
junwen-k merged 9 commits into
nextfrom
chore/final-audit-fixes
Jul 19, 2026
Merged

junwen-k merged 9 commits into
nextfrom
chore/final-audit-fixes

Conversation

@junwen-k

Copy link
Copy Markdown
Owner

Summary

Addresses the consolidated findings from the full component/docs audit run against draft PR #82 (next -> main, not yet merged) before that merge is finalized.

  • Fixed broken installation links on date-time-field, dropzone, password-input, phone-input, and confirmer docs
  • Stripped leftover Tailwind styling from the phone-input-primitive-preferred-country demo (primitives stay unstyled)
  • Renamed virtualizer-* demo files, exported function names, and the /docs/utilities/virtualizer page to virtualized to match the shipped <Virtualized /> component naming
  • Removed a stale, pre-Base UI ## Changelog section from timeline.mdx
  • Fixed nova styling drift (rounded-lg / ring-3) in dropzone.tsx and stale SelectItem classNames in phone-input.tsx
  • Added ## Accessibility sections to confirmer.mdx and wheel-picker.mdx (left description-list.mdx without one — it's a plain semantic <dl> wrapper with no interactive/ARIA behavior to document)
  • Removed a dead null-check in virtualized.tsx's useVirtualized() — the context always has a valid default, so the guard could never fire
  • Added a registry:validate script to apps/v4/package.json so apps/v4/registry.json can be validated locally, matching the CI registry-validate workflow

Test plan

  • npx tsc --noEmit passes with no errors
  • pnpm lint passes with 0 errors (7 pre-existing warnings in unrelated files)
  • pnpm registry:validate reports the registry as valid
  • Verified no stray virtualizer references remain outside of virtua's own VirtualizerHandle naming

🤖 Generated with Claude Code

junwen-k and others added 2 commits July 19, 2026 02:26
Fixes surfaced by a full component/docs audit ahead of the next -> main
merge: broken installation links, leftover Tailwind styling in an
unstyled primitive demo, the virtualizer/virtualized naming mismatch
across demos and docs, a stale changelog section on the timeline page,
nova styling drift in dropzone and phone-input, a dead null-check in
useVirtualized(), missing Accessibility sections on confirmer and
wheel-picker docs, and a registry:validate script for local registry
checks.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
The previous commit picked up only the virtualizer->virtualized file
renames; the accompanying content edits (naming, docs, styling, and
the registry:validate script) were left unstaged by a lint-staged
stash/restore hiccup. This commit lands that content.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
@vercel

vercel Bot commented Jul 18, 2026

Copy link
Copy Markdown
Contributor

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

Project Deployment Actions Updated (UTC)
ui-x Error Error Jul 19, 2026 12:47pm

The guard is unreachable in isolation (VirtualizedContext's default is
a real object, never null), but sortable.tsx's useSortable() has the
identical shape and every other "must be used within" hook in the
registry follows the same throw-guard pattern. Removing it only here
broke consistency rather than fixing a real bug.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Drop DropzoneGroup, DropzoneTitle, DropzoneDescription and
DropzoneUploadIcon in favor of shadcn/ui's Empty component. Dropzone now
covers only the interactive parts; the zone's icon, title and description
are composed with Empty/EmptyHeader/EmptyMedia/EmptyTitle/EmptyDescription.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Restore DropzoneUploadIcon as a thin, behavior-only wrapper. The icon
swap reads the primitive's drag context (DragAccepted/DragRejected/
DragDefault), so it's genuine Dropzone behavior rather than styling
Empty owns — the same principle DatePicker follows when it wraps
Calendar/DateField to bind primitive context. Title and description
stay composed with Empty directly.

Demos, docs and the changelog now render the icon via
<EmptyMedia variant="icon"><DropzoneUploadIcon /></EmptyMedia> instead
of inlining the primitive drag-state blocks.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
…orting

Drop the thin re-export wrappers that only renamed a data-slot without
adding behavior, styling, or a composed default — these are better
composed from the outside, matching how Date Picker already composes
InputGroup and Calendar directly.

- password-input: remove PasswordInputAdornment and the unused
  PasswordInputAdornmentButton; demos compose InputGroupAddon directly
- phone-input: remove PhoneInputCountrySelectTrigger; demos compose the
  styled SelectTrigger directly
- docs: update Usage, Accessibility and API Reference accordingly

Behavioral wrappers (PhoneInputCountrySelect/Value/Content, the toggle,
etc.) are unchanged — they wire context, styling or defaults and stay.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Capture the project philosophy and API-design rules as the default prompt
for agents and contributors: ui-x as a natural extension of shadcn (not a
fork), Base UI + base-nova only, the primitive/styled two-layer
architecture, and — front and center — the wrapping principle (wrap +
re-export only for behavior/styling/composed defaults; compose cosmetic
parts from the outside) that the component audit produced.

Also add .mcp.json so agents get live shadcn registry access.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
- Not every component is primitive + styled: document the three real
  shapes (styled composition, primitive+styled, library-adapter primitive).
- Lead with the library-first philosophy — lean on popular headless
  libraries (react-dropzone, react-phone-number-input, timescape, …) and
  only author behavior on Base UI when none fits.
- Reframe "Base UI only" as "Base UI, not Radix" (we do use domain libs).
- Trim verbosity and soften the rulebook tone into principles + a short
  hard-rules list.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
@junwen-k
junwen-k merged commit 2c4102d into next Jul 19, 2026
2 of 3 checks passed
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.

1 participant