Implement framework for element activation (fixes #3999)

Still need to impl `Activatable` on all activatable elements. I'll probably push those changes to this PR, however they can be made separately as well.