Separate from viewer-config/apply-state.ts on purpose. That dispatcher
applies what the STORE says; kiosk mode is resolved from the store and the
URL, and the URL has to win. Folding it in would have meant handing the
dispatcher a second, differently-sourced input and hoping every future
reader noticed which fields came from where.
Ports-injected and returning its own teardown, so the whole thing is
testable without a browser and a switchDataset cannot leave a previous
scene's watchdog running.
Apply a resolved KioskMode to a running viewer.
Separate from
viewer-config/apply-state.tson purpose. That dispatcher applies what the STORE says; kiosk mode is resolved from the store and the URL, and the URL has to win. Folding it in would have meant handing the dispatcher a second, differently-sourced input and hoping every future reader noticed which fields came from where.Ports-injected and returning its own teardown, so the whole thing is testable without a browser and a
switchDatasetcannot leave a previous scene's watchdog running.