fix(ui): the pinned seam runs through the header, not just the body - #575
Merged
Conversation
The frozen edge is one boundary running the height of the grid, and only the body drew it. `[data-pretable-cell][data-pretable-pinned="left"|"right"]` carried the --pretable-seam-color shadow; the pinned HEADER cells took the opaque --pretable-bg-header fill and nothing else. So the seam started 51px down — a header-tall gap at the top of it, on any grid with a pinned column and somewhere to scroll sideways. Measured on the deployed hero grid before the fix: the pinned body cell computed `rgba(16,17,26,0.2) 8px 0 8px -8px` while the pinned header cell beside it computed `none`. Split the header's one two-selector rule in two, each side carrying the mirrored offset its body counterpart already has — the same reason --pretable-seam-color holds a colour rather than a whole shadow. Nothing else changes: pinned siblings share z-index 1, so each paints over the shadow the one before it cast and only the OUTERMOST seam is ever seen, exactly as in the body. The guard is the same story as last time: "the pinned seam is wired, mirrored, and outlives the group-row band" named [data-pretable-cell] alone, so the half that was missing was the half it could not see. It now checks both header rules for the mirrored offsets and for the fill the seam must not have cost. Mutation-tested: dropping the left header's seam, giving the right header the unmirrored offset, and trading the fill for the seam each make it fail. Splitting the rule also tripped the existing opaque-background guard, which is now written per side. Verified in Chrome on a production build, at the pixel: with the hero grid scrolled 280px sideways the seam is continuous from the top of the header band down through the rows, and the showcase's right-pinned column mirrors it at -8px. `pnpm format`, `lint`, `typecheck` and `test` pass, as do 38 Playwright smoke specs including the right-pin and column-reorder cases. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
blove
enabled auto-merge (squash)
September 4, 2026 03:28
|
The latest updates on your projects. Learn more about Vercel for GitHub. |
Contributor
Vercel preview readyPreview: https://pretable-1i80y035s-cacheplane.vercel.app Updated automatically by the |
Merged
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.
The gap in the pinned column's shadow on the hero grid. Reported against the deployed site and confirmed there before touching anything.
What it is
The frozen edge is one boundary meant to run the height of the grid, and only the body drew it.
[data-pretable-cell][data-pretable-pinned="left"|"right"]carried the--pretable-seam-colorshadow; the pinned header cells took the opaque--pretable-bg-headerfill and nothing else. So the seam started 51px down — a header-tall gap at the top of it, on any grid with a pinned column and somewhere to scroll sideways.Measured on production (pretable.ai) before the fix, with the hero grid scrolled 280px sideways:
box-shadow[data-pretable-cell][data-pretable-pinned="left"]rgba(16,17,26,0.2) 8px 0 8px -8px[data-pretable-header-cell][data-pretable-pinned="left"](right beside it)noneThe fix
The header's single two-selector rule is split per side, each carrying the mirrored offset its body counterpart already has — the same reason
--pretable-seam-colorholds a colour rather than a whole shadow: one shadow value cannot be reversed.Nothing else changes. Pinned siblings share
z-index: 1, so each paints over the shadow the one before it cast and only the outermost seam is ever seen — verified in the body, where the checkbox column's seam is invisible under the Symbol column beside it, and now true of the header for the same reason.Why the guard didn't catch it
Same shape as the last round.
"the pinned seam is wired, mirrored, and outlives the group-row band"named[data-pretable-cell]alone, so the half that was missing was the half it could not see. It now checks both header rules for the mirrored offsets, and that the seam did not cost the opaque fill.Mutation-tested — each of these makes the guard fail, then restored:
Splitting the rule also tripped the existing
"pinned header cells get an opaque background, both sides"guard, which is now written per side rather than against the combined selector.Verification
pnpm format,pnpm lint,pnpm typecheckandpnpm testpass; 38 Playwright smoke specs pass against a local production build, including the right-pin and column-reorder cases.Checked at the pixel in Chrome on that build, not just in the stylesheet:
rgba(16,17,26,0.2) 8px 0 8px -8pxand keeprgb(239,240,244).-8px.🤖 Generated with Claude Code