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:
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:
requestAnimationFrame(() => {
flushSync(() => {
flushAfterSize();
isHandling = false;
});
});Tested locally — completely eliminates the error while calendar works correctly.
Source: fullcalendar/fullcalendar