ResizeObserver loop completed with undelivered notifications - flushSync called synchronously inside ResizeObserver callback (regression from 6.1.18 to 7.0.0)

Author: cPecicanCreated Jun 24, 2026Updated Aug 22, 2026

Reduced Test Case

Do you understand that if a reduced test case is not provided, we will intentionally delay triaging of your ticket?

  • I understand

Which connector are you using (React/Angular/etc)?

Angular

Bug Description

We upgraded from 6.1.18 to 7.0.0 and immediately get "ResizeObserver loop completed with undelivered notifications" on every calendar render.

Root cause found in packages/core/src/component-util/resize-observer.ts:

javascript
const globalResizeObserver = new ResizeObserver((entries) => {
    isHandling = true;
    // ... process entries ...
    flushSync(() => {   // <-- synchronous DOM mutations inside ResizeObserver
        flushAfterSize();
        isHandling = false;
    });
});

Calling flushSync synchronously inside the ResizeObserver callback causes the browser to flag it as a loop on every render. Fix that works — use requestAnimationFrame instead, consistent with how afterSize() already handles the non-ResizeObserver path in the same file:

javascript
requestAnimationFrame(() => {
    flushSync(() => {
        flushAfterSize();
        isHandling = false;
    });
});

Tested locally — completely eliminates the error while calendar works correctly.

Source: fullcalendar/fullcalendar