---
title: "Get started"
output: rmarkdown::html_vignette
vignette: >
%\VignetteIndexEntry{Get started}
%\VignetteEngine{knitr::rmarkdown}
%\VignetteEncoding{UTF-8}
---
```{r, include = FALSE}
knitr::opts_chunk$set(
collapse = TRUE,
comment = "#>"
)
library(shinyGovstyle)
```
## Overview
**shinyGovstyle** integrates [GOV.UK Design System](https://design-system.service.gov.uk/) components into R Shiny. It aims to make it easier for government analysts to develop production-ready dashboards that users find intuitive and can trust.
The [GOV.UK Design System component documentation](https://design-system.service.gov.uk/components/) remains the authoritative reference for all components, including detailed guidance of when, how, and when not(!) to use each of the components.
> **Note:** Using accessible components does not replace the need for comprehensive accessibility testing of the combination you put together in your own specific application.
We welcome feedback and contributions:
- **Suggestions, requests and bugs:** [Raise a GitHub issue](https://github.com/dfe-analytical-services/shinyGovstyle/issues/new) for bugs, requests or suggestions.
- **Search:** Check [existing issues](https://github.com/dfe-analytical-services/shinyGovstyle/issues) before posting.
- **Contribute:** See our [contributing guide](https://github.com/dfe-analytical-services/shinyGovstyle/blob/main/.github/CONTRIBUTING.md) to help improve the package.
---
## See it in action
The quickest way to get a feel for what is available is the example showcase app, which demonstrates the full range of components:
- **Online:** [department-for-education.shinyapps.io/shinygovstyle-example-app](https://department-for-education.shinyapps.io/shinygovstyle-example-app/)
- **Local** (after installing the package): `shinyGovstyle::run_example()`
The source code for the example app lives in [`inst/example_app/`](https://github.com/dfe-analytical-services/shinyGovstyle/tree/main/inst/example_app) and is a useful reference for how components fit together in a real multi-page app using [Shiny modules](https://mastering-shiny.org/scaling-modules.html).
---
## Installation
Install the latest stable release from CRAN:
```{r, eval = FALSE}
install.packages("shinyGovstyle")
```
To use the latest development version directly from GitHub:
```{r, eval = FALSE}
pak::pak("dfe-analytical-services/shinyGovstyle")
```
---
## shinyjs dependency
Some components require [`shinyjs`](https://deanattali.com/shinyjs/) to be loaded in your UI. Add `shinyjs::useShinyjs()` anywhere in your UI when using:
- `error_on()` / `error_off()` — inline field-level error toggling
- `word_count()` — live character and word counting on text inputs
- `cookieBanner()` — GOV.UK cookie consent banner
```{r, eval = FALSE}
ui <- bslib::page_fluid(
shinyjs::useShinyjs(),
# rest of your UI
)
```
---
## A minimal working app
The skeleton below shows the components that appear on every page of a shinyGovstyle app. It uses [`bslib`](https://rstudio.github.io/bslib/), which is generally [recommended for building responsive apps with R Shiny](https://shiny.posit.co/r/getstarted/shiny-basics/lesson1/).
```{r, eval = FALSE}
library(shiny)
library(shinyGovstyle)
ui <- bslib::page_fluid(
skip_to_main(),
header(
org_name = "My department",
service_name = "My dashboard"
),
banner(
inputId = "phase",
type = "Beta",
label = "This is a new service."
),
gov_main_layout(
gov_row(
gov_box(
size = "two-thirds",
heading_text("Welcome", size = "l", level = 1),
gov_text("Select a report from the navigation above.")
)
)
),
footer()
)
server <- function(input, output, session) {}
shiny::shinyApp(ui, server)
```
For a more complete example - including multi-page navigation, footer links, and the server logic to wire it all together - see the [complete example](layout-options.html#complete-example) at the end of the Layout options vignette.
---
## Component overview
### Page structure and layout
All page-level components (`header()`, `footer()`, `banner()`, `skip_to_main()`, `service_navigation()`, `cookieBanner()`) and the content grid system (`gov_main_layout()`, `gov_row()`, `gov_box()`) are covered in the [Layout options](layout-options.html) vignette.
### Headings and text
Styled headings, body text, lists, callouts, external links, notification banners, and typography are covered in the [Headings and text](headings-and-text.html) vignette.
### Form inputs
`text_input()`, `text_area_input()`, `select_input()`, `checkbox_input()`, `radio_button_Input()`, `date_Input()`, `file_Input()`, `button_Input()`, and `download_button()` provide GOV.UK-styled equivalents of standard Shiny form controls; values are read from `input$` in the server in the usual way.
### Interactive components
`accordion()` and `govTabs()` provide collapsible panels and tabbed interfaces with full keyboard navigation and ARIA support built in.
### Error handling
`error_summary()` produces a GOV.UK error summary panel that lists all validation errors at the top of the page; `error_on()` and `error_off()` toggle inline field-level error messages on any input. These require `shinyjs::useShinyjs()` in the UI, see [shinyjs dependency](#shinyjs-dependency) for more details.
### Data display
`govTable()` and `govReactable()` render data tables with GOV.UK styling; `value_box()` displays a headline figure with a label, suited to summary statistics at the top of a dashboard.