Skip to content

fix: measure uncached positioned ancestors when removing table rows - #249

Merged
justin-schroeder merged 3 commits into
formkit:masterfrom
thavguard:fix/webkit-table-removal
Nov 3, 2026
Merged

justin-schroeder merged 3 commits into
formkit:masterfrom
thavguard:fix/webkit-table-removal

Conversation

@thavguard

@thavguard thavguard commented Oct 21, 2026 •

Copy link
Copy Markdown
Contributor

Removing a <tr> during its entry animation throws when its positioned ancestor has no cached coordinates. WebKit explicitly resets position: relative to static on table row groups (engine source), so AutoAnimate can walk past the observed tbody to an unobserved wrapper.

Fall back to measuring that ancestor when its cache entry is missing. The production change is one line.

Fixes #248.

The regression test uses a plain HTML table, default options and unchanged styles. It verifies that a row removed during entry is cleaned up without an exception and its sibling survives. Run it in Chromium and WebKit:

export PATH="$PWD/node_modules/.bin:$PATH"
pnpm exec playwright test tests/e2e/removal-position.spec.ts --workers=1 --project=chromium --project=webkit --retries=0

Focused CI: unpatched core — Chromium passes, WebKit fails with parentCoords.top; patched core — both pass. The same minimal test is used in both runs.

@vercel

vercel Bot commented Oct 21, 2026

Copy link
Copy Markdown

@thavguard is attempting to deploy a commit to the Formkit Team on Vercel.

A member of the Team first needs to authorize it.

@justin-schroeder
justin-schroeder merged commit 6e95020 into formkit:master Nov 3, 2026
1 check failed
@justin-schroeder

Copy link
Copy Markdown
Member

Merged 🎉 Thanks! Ships in @formkit/auto-animate@0.10.1 — I'll ping here when it's on npm.

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.

WebKit: removing an animating table row throws in deletePosition()

2 participants