Plug the viewer's concrete UI helpers into the cross-layer notifier.
Lower layers (data, scene, input) call notifier.toast / .error /
.showHelp without importing the ui/ helper modules directly — that is
what keeps the dependency-cruiser layer order clean. LuxarApp.init()
installs this backend for every lifetime (standalone and library embeds
alike); the dispose pipeline clears it.
Plug the viewer's concrete UI helpers into the cross-layer notifier.
Lower layers (data, scene, input) call
notifier.toast/.error/.showHelpwithout importing theui/helper modules directly — that is what keeps the dependency-cruiser layer order clean.LuxarApp.init()installs this backend for every lifetime (standalone and library embeds alike); the dispose pipeline clears it.