{"version":3,"file":"stack.mjs","sources":["../../../../src/projection/shared/stack.ts"],"sourcesContent":["import { addUniqueItem, removeItem } from \"motion-utils\"\nimport type { IProjectionNode } from \"../node/types\"\n\nexport class NodeStack {\n    lead?: IProjectionNode\n    prevLead?: IProjectionNode\n    members: IProjectionNode[] = []\n\n    add(node: IProjectionNode) {\n        addUniqueItem(this.members, node)\n\n        for (let i = this.members.length - 1; i >= 0; i--) {\n            const member = this.members[i]\n            if (member === node || member === this.lead || member === this.prevLead) continue\n            const inst = member.instance as HTMLElement | undefined\n            if ((!inst || inst.isConnected === false) && !member.snapshot) {\n                removeItem(this.members, member)\n                member.unmount()\n            }\n        }\n\n        node.scheduleRender()\n    }\n\n    remove(node: IProjectionNode) {\n        removeItem(this.members, node)\n        if (node === this.prevLead) this.prevLead = undefined\n        if (node === this.lead) {\n            const prevLead = this.members[this.members.length - 1]\n            if (prevLead) this.promote(prevLead)\n        }\n    }\n\n    relegate(node: IProjectionNode) {\n        for (let i = this.members.indexOf(node) - 1; i >= 0; i--) {\n            const member = this.members[i]\n            if (member.isPresent !== false && (member.instance as HTMLElement)?.isConnected !== false) {\n                this.promote(member)\n                return true\n            }\n        }\n        return false\n    }\n\n    promote(node: IProjectionNode, preserveFollowOpacity?: boolean) {\n        const prevLead = this.lead\n        if (node === prevLead) return\n\n        this.prevLead = prevLead\n        this.lead = node\n        node.show()\n\n        if (prevLead) {\n            prevLead.updateSnapshot()\n            node.scheduleRender()\n\n            const { layoutDependency: prevDep } = prevLead.options\n            const { layoutDependency: nextDep } = node.options\n\n            if (prevDep === undefined || prevDep !== nextDep) {\n                node.resumeFrom = prevLead\n                if (preserveFollowOpacity) prevLead.preserveOpacity = true\n\n                if (prevLead.snapshot) {\n                    node.snapshot = prevLead.snapshot\n                    node.snapshot.latestValues =\n                        prevLead.animationValues || prevLead.latestValues\n                }\n\n                if (node.root?.isUpdating) node.isLayoutDirty = true\n            }\n            if (node.options.crossfade === false) prevLead.hide()\n        }\n    }\n\n    exitAnimationComplete() {\n        this.members.forEach((member) => {\n            member.options.onExitComplete?.()\n            member.resumingFrom?.options.onExitComplete?.()\n        })\n    }\n\n    scheduleRender() {\n        this.members.forEach(\n            (member) => member.instance && member.scheduleRender(false)\n        )\n    }\n\n    removeLeadSnapshot() {\n        if (this.lead?.snapshot) this.lead.snapshot = undefined\n    }\n}\n"],"names":[],"mappings":"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"}