{"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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"}