The pushable exercise-creation view — a DrawerView hosting the wizard.
Push it onto an existing DrawerStack; onClose dismisses (e.g. stack.pop)
and onCreated receives the freshly-created exercise so the caller can insert
it into a store / auto-select it. onCreated runs side effects only — it must
not dismiss; onClose fires straight after it on success.
onDuplicate is the same contract for the case where the user already owns
the composition they just built: it receives the EXISTING exercise, and
onClose fires straight after. Hosts resolve it in whatever way fits them
(select it, open it, …); without a handler the wizard stays open and says the
exercise already exists.
The pushable exercise-creation view — a DrawerView hosting the wizard. Push it onto an existing DrawerStack;
onClosedismisses (e.g.stack.pop) andonCreatedreceives the freshly-created exercise so the caller can insert it into a store / auto-select it.onCreatedruns side effects only — it must not dismiss;onClosefires straight after it on success.onDuplicateis the same contract for the case where the user already owns the composition they just built: it receives the EXISTING exercise, andonClosefires straight after. Hosts resolve it in whatever way fits them (select it, open it, …); without a handler the wizard stays open and says the exercise already exists.