I figured it was easier to decouple them, because we can provided pre-baked `getMode` functions.

For the previous tags, since we had to do everything in a detector function, it was difficult for people to edit and understand. If we make it more declarative, common changes should be straight forward.