Builds a CngxTabsCommitAction that gates a tab switch through
@angular/router. The action navigates to the target tab's route and
resolves on the router's own outcome:
NavigationEnd → true (commit the switch)
NavigationCancel (a CanDeactivate guard blocked) → false
NavigationError (guard/resolver threw) → false
Routed tabs reuse the presenter's commit lifecycle verbatim - the
router navigation is simply the async op. In pessimistic mode the active tab follows the resolved route, so a cancelled guard keeps
the old tab with zero extra gate machinery. The events subscription
is opened beforenavigate(...) so a synchronously-resolving
navigation cannot emit before the action is listening; the commit
controller's cancel() unsubscribes on supersede.