docs(components): document the remaining nine Shadcn divergences — every tracked component now says why it diverges - #3059
Merged
Conversation
…ery tracked component now says why it diverges
Completes the triage. All 17 locally-modified components now carry a
`localEdits` note; `--check` reports 0 UNDOCUMENTED.
None of the nine are droppable either. Like the first eight, every one is
a deliberate fix or API extension:
command ADR-0054 C4 `contentProps` + the `sr-only` DialogTitle Radix
requires. Upstream drops each addition with its usages, so a
sync deletes ~38 lines and still type-checks — verified.
select Wraps Root to swallow `onValueChange("")`. Radix's hidden
native mirror registers options a commit after the trigger,
so a value arriving mid-hydration echoes back empty and wipes
the field, latching forms whose `visibleWhen` reads it (#2968).
table `containerClassName`, to stop the wrapper becoming a second
height-unbounded scroll container inside DataTable.
chart `block … w-full` instead of `flex justify-center`, or
ResponsiveContainer measures no width and charts draw axes
with no marks (#1634, 9b16317); plus hand-written Recharts
prop types that actually type-check (2e11aa7).
sidebar Tailwind v4 syntax, a `data-collapsible`-always-present
refactor, and an `eslint-disable react-hooks/purity` the
random skeleton width needs.
badge `whitespace-nowrap`, or CJK labels break per-character in a
cramped table cell (objectui#2762 P0-1).
slider Forwards `aria-label` to the Thumb.
sheet `hideOverlay` prop.
calendar Tailwind v4 syntax on `--cell-size`.
Two claims I checked rather than asserted, because both could have
shipped as confident wrong statements:
- Removing sidebar's `eslint-disable` really does fail Lint — it is an
error from `react-hooks/purity`, not a warning, and Lint gates CI.
- `theme(spacing.4)` → `1rem` is **cosmetic**, not a fix. Tailwind 4.3.3
still resolves the v3 dot-notation, and both spellings compile to the
identical `calc(var(--sidebar-width-icon) + 1rem)`. The note says so;
only the `[--var]` → `(--var)` half of that migration is load-bearing.
Also corrects a misleading `--check` label. The counts are set
differences, so a locally-edited line appears on BOTH sides — once as
ours, once as the upstream original it replaced. Calling that "N upstream
line(s) pending" reads as updates waiting to be collected, which is how I
misread sidebar's 21 as reclaimable work; it is mostly the mirror image
of sidebar's own edits. Now "N not matching upstream verbatim". The
`outdated` bucket keeps its wording — there `localOnly` is 0, so the
count genuinely is new upstream work.
Manifest and script only; no component source changes.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
|
The latest updates on your projects. Learn more about Vercel for GitHub. |
Contributor
✅ Console Performance Budget
📦 Bundle Size Report
Size Limits
|
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Completes the triage started in #3054. All 17 locally-modified components now carry a
localEditsnote, and--checkreports 0 UNDOCUMENTED.None of the nine are droppable either
Same result as the first eight — every one is a deliberate fix or API extension:
command(35)contentProps+ thesr-onlyDialogTitle Radix requires. Upstream drops each addition with its usages, so a sync deletes ~38 lines and still type-checks — verified.select(32)onValueChange(""). Radix's hidden native mirror registers options a commit after the trigger, so a value arriving mid-hydration echoes back empty and wipes the field, latching forms whosevisibleWhenreads it (#2968).sidebar(24)data-collapsible-always-present refactor, and aneslint-disable react-hooks/purity.table(17)containerClassName, to stop the wrapper becoming a second height-unbounded scroll container inside DataTable.chart(11)block … w-fullinstead offlex justify-center, or ResponsiveContainer measures no width and charts draw axes with no marks (#1634,9b163173b); plus hand-written Recharts prop types that actually type-check (2e11aa72f).calendar(7)--cell-size.badge(4)whitespace-nowrap, or CJK labels (待审批) break per-character in a cramped table cell (objectui#2762 P0-1).sheet(4)hideOverlayprop.slider(4)aria-labelto the Thumb.Two claims I checked instead of asserting
Both could have shipped as confident wrong statements:
Sidebar's
eslint-disableis load-bearing. Removed it and re-ran ESLint:react-hooks/purityfires as an error, not a warning, and Lint gates CI. Claim stands.theme(spacing.4)→1remis cosmetic, not a fix. I initially wrote that upstream'stheme()is "a v3 idiom", implying it's broken. Compiling both against tailwindcss 4.3.3:Identical. v4 still resolves the dot-notation. The note now says so explicitly — only the
[--var]→(--var)half of that migration is load-bearing.Fixes a misleading
--checklabelBoth counts are set differences, so a locally-edited line appears on both sides — once as ours, once as the upstream original it replaced. Labelling that "N upstream line(s) pending" reads as updates waiting to be collected.
That's exactly how I misread
sidebar's 21 and recommended it as the highest-value target with "21 lines to reclaim". There is essentially nothing to reclaim — the 21 are mostly the mirror image of sidebar's own 24 edits. Now reads "N not matching upstream verbatim".The
outdatedbucket keeps its original wording: therelocalOnlyis 0, so the count genuinely is new upstream work.Where this leaves the sync
Every tracked component is now either byte-identical to upstream or carries a written reason for diverging.
--updateprints that reason at the moment someone is about to--forcepast it.Verification
git log -Sprovenance where a commit exists (925051db6,9b163173b,2e11aa72f)JSON.stringify(…, null, 2))--check/--diff/--updateand the fix(scripts): shadcn-sync rewrites the registry paths Shadcn actually serves, and refuses to write a file when it cannot #3033 / fix(scripts): shadcn-sync refuses to silently delete local edits, and compiles the package after it writes #3035 guards regression-checkedeslintclean; no component source changes — manifest and script onlyNo changeset.
🤖 Generated with Claude Code