@startuml
[*] --> notScheduled: initialize
notScheduled --> scheduling: setInterval

scheduling: zoneSpec.onScheduleTask
scheduling: zoneSpec.onHasTask

scheduling --> scheduled
scheduled --> running: interval\n callback
running: zoneSpec:onInvokeTask

scheduled --> canceling: clearInterval
canceling: zoneSpec.onCancelTask
canceling --> notScheduled
canceling: zoneSpec.onHasTask
running --> scheduled: callback\n finished
running --> canceling: clearInterval
@enduml