'use strict'; Object.defineProperty(exports, '__esModule', { value: true }); var utils = require('@motionone/utils'); let scheduled = undefined; function processScheduledAnimations() { if (!scheduled) return; const generators = scheduled.sort(compareByDepth).map(fireAnimateUpdates); generators.forEach(fireNext); generators.forEach(fireNext); scheduled = undefined; } function scheduleAnimation(state) { if (!scheduled) { scheduled = [state]; requestAnimationFrame(processScheduledAnimations); } else { utils.addUniqueItem(scheduled, state); } } function unscheduleAnimation(state) { scheduled && utils.removeItem(scheduled, state); } const compareByDepth = (a, b) => a.getDepth() - b.getDepth(); const fireAnimateUpdates = (state) => state.animateUpdates(); const fireNext = (iterator) => iterator.next(); exports.scheduleAnimation = scheduleAnimation; exports.unscheduleAnimation = unscheduleAnimation;