{"version":3,"file":"queue.mjs","sources":["../../../src/view/queue.ts"],"sourcesContent":["import { removeItem } from \"motion-utils\"\nimport type { ViewTransitionBuilder } from \".\"\nimport { microtask } from \"../frameloop/microtask\"\nimport { startViewAnimation } from \"./start\"\n\nlet builders: ViewTransitionBuilder[] = []\n\nlet current: ViewTransitionBuilder | null = null\n\nfunction next() {\n    current = null\n    const [nextBuilder] = builders\n    if (nextBuilder) start(nextBuilder)\n}\n\nfunction start(builder: ViewTransitionBuilder) {\n    removeItem(builders, builder)\n    current = builder\n    startViewAnimation(builder).then((animation) => {\n        builder.notifyReady(animation)\n        animation.finished.finally(next)\n    })\n}\n\nfunction processQueue() {\n    /**\n     * Iterate backwards over the builders array. We can ignore the\n     * \"wait\" animations. If we have an interrupting animation in the\n     * queue then we need to batch all preceeding animations into it.\n     * Currently this only batches the update functions but will also\n     * need to batch the targets.\n     */\n    for (let i = builders.length - 1; i >= 0; i--) {\n        const builder = builders[i]\n        const { interrupt } = builder.options\n\n        if (interrupt === \"immediate\") {\n            const batchedUpdates = builders.slice(0, i + 1).map((b) => b.update)\n            const remaining = builders.slice(i + 1)\n\n            builder.update = () => {\n                batchedUpdates.forEach((update) => update())\n            }\n\n            // Put the current builder at the front, followed by any \"wait\" builders\n            builders = [builder, ...remaining]\n\n            break\n        }\n    }\n\n    if (!current || builders[0]?.options.interrupt === \"immediate\") {\n        next()\n    }\n}\n\nexport function addToQueue(builder: ViewTransitionBuilder) {\n    builders.push(builder)\n    microtask.render(processQueue)\n}\n"],"names":[],"mappings":";;;;AAKA,IAAI,QAAQ,GAA4B,EAAE,CAAA;AAE1C,IAAI,OAAO,GAAiC,IAAI,CAAA;AAEhD,SAAS,IAAI,GAAA;IACT,OAAO,GAAG,IAAI,CAAA;AACd,IAAA,MAAM,CAAC,WAAW,CAAC,GAAG,QAAQ,CAAA;AAC9B,IAAA,IAAI,WAAW;QAAE,KAAK,CAAC,WAAW,CAAC,CAAA;AACvC,CAAC;AAED,SAAS,KAAK,CAAC,OAA8B,EAAA;AACzC,IAAA,UAAU,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAA;IAC7B,OAAO,GAAG,OAAO,CAAA;IACjB,kBAAkB,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,SAAS,KAAI;AAC3C,QAAA,OAAO,CAAC,WAAW,CAAC,SAAS,CAAC,CAAA;AAC9B,QAAA,SAAS,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,CAAA;AACpC,KAAC,CAAC,CAAA;AACN,CAAC;AAED,SAAS,YAAY,GAAA;AACjB;;;;;;AAMG;AACH,IAAA,KAAK,IAAI,CAAC,GAAG,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE;AAC3C,QAAA,MAAM,OAAO,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAA;AAC3B,QAAA,MAAM,EAAE,SAAS,EAAE,GAAG,OAAO,CAAC,OAAO,CAAA;AAErC,QAAA,IAAI,SAAS,KAAK,WAAW,EAAE;YAC3B,MAAM,cAAc,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,CAAA;YACpE,MAAM,SAAS,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAA;AAEvC,YAAA,OAAO,CAAC,MAAM,GAAG,MAAK;gBAClB,cAAc,CAAC,OAAO,CAAC,CAAC,MAAM,KAAK,MAAM,EAAE,CAAC,CAAA;AAChD,aAAC,CAAA;;AAGD,YAAA,QAAQ,GAAG,CAAC,OAAO,EAAE,GAAG,SAAS,CAAC,CAAA;YAElC,MAAK;SACR;KACJ;AAED,IAAA,IAAI,CAAC,OAAO,IAAI,QAAQ,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,SAAS,KAAK,WAAW,EAAE;AAC5D,QAAA,IAAI,EAAE,CAAA;KACT;AACL,CAAC;AAEK,SAAU,UAAU,CAAC,OAA8B,EAAA;AACrD,IAAA,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;AACtB,IAAA,SAAS,CAAC,MAAM,CAAC,YAAY,CAAC,CAAA;AAClC;;;;"}