Skip to content

fix(layout): column splits ignore minPresenceAhead windows - #3581

Draft
exoego wants to merge 1 commit into
diegomura:masterfrom
exoego:fix/column-split-min-presence-window
Draft

exoego wants to merge 1 commit into
diegomura:masterfrom
exoego:fix/column-split-min-presence-window

Conversation

@exoego

@exoego exoego commented Oct 6, 2026 •

Copy link
Copy Markdown
Contributor

Problem

On the new engine, a node with minPresenceAhead can stay at the page bottom with only a line or two after it. This happens when the next sibling is a column, such as a table made of View rows. The engine breaks inside the column. The legacy engine moves the node to the next page, and #3504 intends the same.

<Page size="A6" style={{ padding: 20 }} experimentalPagination>
  <View style={{ height: 330 }} />
  <Text minPresenceAhead={60}>Heading</Text>
  <View>
    {Array.from({ length: 20 }, (_, i) => <Text key={i}>{`row ${i + 1}`}</Text>)}
  </View>
</Page>

Cause

#3504 checks the window at break candidates, leaf splits, and row slices. A split inside a column is not checked. The column's children are filled by an inner fill that does not know about the outer window. So the outer fill accepts the split.

Fix

Add the check from fit/row.ts to fit/column.ts. The column now declines a split inside a window, so the node and the column move to the next page together.

Tests

Added a unit test with a snapshot, and a parity test against the legacy engine. Both fail without the fix.

A column could split inside the window after a minPresenceAhead node,
leaving the node at the page bottom with a line or two after it. Decline
the split like a row slice, so the node moves to the next page together
with the column.
@vercel

vercel Bot commented Oct 6, 2026

Copy link
Copy Markdown

@exoego is attempting to deploy a commit to the diegomura Team on Vercel.

A member of the Team first needs to authorize it.

@changeset-bot

changeset-bot Bot commented Oct 6, 2026

Copy link
Copy Markdown

🦋 Changeset detected

Latest commit: 02446e4

The changes in this PR will be included in the next version bump.

This PR includes changesets to release 7 packages
Name Type
@react-pdf/paginate Patch
@react-pdf/layout Patch
@react-pdf/renderer Patch
@react-pdf/examples Patch
@react-pdf/math Patch
@react-pdf/mermaid Patch
@react-pdf/ui Patch

Not sure what this means? Click here to learn what changesets are.

Click here if you're a maintainer who wants to add another changeset to this PR

@exoego
exoego marked this pull request as draft October 8, 2026 23:36

This branch has not been deployed

No deployments
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