All six modules share one shiny::reactiveValues() holding the scenario,
the game run, the fitted models and the leaderboard. Nothing is passed
between modules by any other route, so there is one place to look when the
app and the console disagree.
Examples
# Driven headlessly in the package's own tests:
# shiny::testServer(sdt_app_server, { session$setInputs() })
sdt_app_ui
#> function ()
#> {
#> .require_pkgs(c("shiny", "bslib", "htmltools"))
#> .sdt_mount_assets()
#> bslib::page_navbar(window_title = "sandtablR", title = .sdt_brand(),
#> theme = .sdt_app_theme(), header = htmltools::tags$head(htmltools::tags$style(htmltools::HTML(.sdt_app_css()))),
#> bslib::nav_panel("Overview", mod_overview_ui("overview")),
#> bslib::nav_panel("Scenario", mod_scenario_ui("scenario")),
#> bslib::nav_panel("Simulate", mod_simulate_ui("simulate")),
#> bslib::nav_panel("Annotate", mod_annotate_ui("annotate")),
#> bslib::nav_panel("Model lab", mod_model_ui("model")),
#> bslib::nav_panel("Explain", mod_explain_ui("explain")),
#> bslib::nav_panel("Sequences", mod_sequence_ui("sequence")),
#> bslib::nav_panel("Generate", mod_generate_ui("generate")),
#> bslib::nav_spacer(), bslib::nav_item(shiny::downloadButton("report",
#> "Report", class = "btn-sm btn-outline-secondary")),
#> bslib::nav_item(bslib::input_dark_mode(id = "colour_mode")))
#> }
#> <bytecode: 0x588ce1396b18>
#> <environment: namespace:sandtablR>