/* * Copyright (C) 2026 Mateusz Gruszczynski @linuxiarz.pl * Source-Available Code / Dual-Licensed. * * Free for non-commercial and evaluation use under terms of BSL/GPLv3. * Commercial or production use requires a valid paid license. * See LICENSE file in repository root for details. */ export function createRenderQueue(renderNow, schedule = queueMicrotask) { if (typeof renderNow !== "function") throw new TypeError("renderNow must be a function"); if (typeof schedule !== "function") throw new TypeError("schedule must be a function"); let rendering = false; let pending = false; let scheduled = false; const schedulePendingRender = () => { if (scheduled) return; scheduled = true; schedule(() => { scheduled = false; if (!pending) return; pending = false; render(); }); }; function render() { if (rendering) { pending = true; schedulePendingRender(); return; } pending = false; rendering = true; try { renderNow(); } finally { rendering = false; if (pending) schedulePendingRender(); } } return render; }