Hacktoberfest 2026: le issue che i maintainer hanno segnato per ottobre, aperte e adatte ai principianti. Sfoglia le issue Hacktoberfest

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

Aperta
#248 0 commenti 0 reazioni 0 assegnatari Vedi su GitHub

@thavguard ci sta già lavorando.

Dal 21/10/2026.

  • #249 di @thavguard — aperta

Valutazione

Difficoltà
4/5
Tempo stimato
3-5 giorni
Idoneità per principianti
36/100
Tipo di issue
Bug
Chiarezza
Specificata chiaramente
Stato di attività
Attiva
Stack tecnologico
javascript, typescript, web-dev
Ambito
frontend, testing

Direzione di ricerca

The report identifies animate() and deletePosition() as the relevant entry points and links minimal regression CI runs where Chromium passes and WebKit fails. Start by tracing how ancestor coordinates are cached and used when the exit animation is created. Done means the regression passes in both Chromium and WebKit without leaving a ghost row or blocking later mutations.

Scritto dal modello di indicizzazione a partire dal testo della issue.

Descrizione

Removing a <tr> during its entry animation throws in deletePosition() in WebKit. Reproduced with 0.10.0, native DOM operations and default options; no framework or positioning changes are needed.

Reproduction
<div style="position: relative">
  <table><tbody id="rows"><tr><td>Keep this row</td></tr></tbody></table>
</div>
import autoAnimate from '@formkit/auto-animate'
const rows = document.querySelector('#rows')
autoAnimate(rows)
const row = rows.insertRow()
row.insertCell().textContent = 'Remove this row'
while (!row.getAnimations().some(a => a.playState === 'running')) {
  await new Promise(requestAnimationFrame)
}
row.remove()

Expected: the removed row is cleaned up and its sibling survives.

Actual in WebKit: undefined is not an object (evaluating 'parentCoords.top'). The row is reinserted with __aa_del before the exception, leaving a ghost row and preventing subsequent mutation handling.

Root cause

WebKit explicitly resets relative positioning to static on table row groups, including tbody. AutoAnimate therefore finds the relative outer wrapper, which it does not observe and has not cached.

animate() cancels the entry animation but keeps its registry entry in the idle state. deletePosition() then selects coords.get(offsetParent)! and reads .top from undefined. Measuring the ancestor when its cache entry is missing resolves this invalid cache assumption.

Related reports checked: #7 (table layout), #231 (ghost rows), #242 and #247 (cleanup). This report isolates the missing ancestor-coordinate entry before the exit animation is created. Fix in #249.

Minimal regression CI, unpatched core: Chromium passes, WebKit fails with the exception above. Same test with the patch: both pass.

Lingua principale
TypeScript
Stelle
13.9k
Fork
266
Metriche di merge delle PR
Nessuna PR unita negli ultimi 30g

Preparare l'ambiente

Questo progetto non fornisce container di sviluppo, Dockerfile né guida per i contributori, quindi l'ambiente è a tuo carico: parti dal suo README e consulta la nostra guida al primo contributo per i passaggi generali.

Come iniziare

  1. Leggi tutta la issue e poi la guida ai contributi del progetto.
  2. Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
  3. Fai un fork del repository e lavora su un branch.
  4. Apri una pull request che faccia riferimento al numero della issue.

Altre issue di formkit/auto-animate

Tutte le issue di formkit/auto-animate

Issue simili

Altre issue su TypeScript

Ricevi le nuove issue nella tua casella

Un breve riepilogo di issue GitHub adatte ai principianti.