--- title: "Accessibility" output: rmarkdown::html_vignette vignette: > %\VignetteIndexEntry{Accessibility} %\VignetteEngine{knitr::rmarkdown} %\VignetteEncoding{UTF-8} --- ```{r, include = FALSE, purl = FALSE} knitr::opts_chunk$set( collapse = TRUE, comment = "#>", eval = FALSE, purl = FALSE ) ``` dashboardr includes built-in accessibility enhancements targeting WCAG 2.1 AA compliance. These features are activated with `enable_accessibility()`. ```{r setup, purl = FALSE} library(dashboardr) ``` ## Enabling Accessibility Add `enable_accessibility()` to include the accessibility CSS and JavaScript: ```{r, purl = FALSE} page <- create_page("Analysis") %>% add_viz( type = "bar", x_var = "category", title = "Results", alt_text = "Bar chart showing category counts" ) ``` `enable_accessibility()` is called automatically during page generation. ## Features ### Skip-to-Content Link A "Skip to main content" link appears at the top of the page when a keyboard user presses Tab. This allows users to bypass navigation and jump directly to the dashboard content. ### Focus Indicators All interactive elements (tabs, inputs, buttons, links) receive visible focus outlines when navigated via keyboard. The default focus style uses a 3px blue outline that meets WCAG contrast requirements. ### Modal Focus Trapping When a modal dialog is open, Tab and Shift+Tab cycle focus only within the modal's focusable elements. When the modal closes, focus returns to the element that triggered it. ### Tab Keyboard Navigation Dashboard tabs support full keyboard navigation: - **Arrow Left/Right**: Move between tabs - **Home**: Jump to the first tab - **End**: Jump to the last tab - **Enter/Space**: Activate the focused tab ### ARIA Live Region Filter changes are announced to screen readers via an ARIA live region. When a user changes a filter input, the announcement includes the filter name and selected values. ### Reduced Motion When the user's operating system has "reduce motion" enabled (`prefers-reduced-motion: reduce`), all CSS transitions and animations are disabled. ## Alt Text for Visualizations Add descriptive alt text to charts using the `alt_text` parameter on any `add_viz()` call: ```{r, purl = FALSE} page <- create_page("Demographics") %>% add_viz( type = "bar", x_var = "age_group", title = "Age Distribution", alt_text = "Bar chart showing the distribution of respondents across age groups, with 25-34 being the largest group" ) %>% add_viz( type = "stackedbar", x_var = "region", stack_var = "gender", title = "Gender by Region", alt_text = "Stacked bar chart comparing gender proportions across four regions" ) ``` ### ARIA Labels on Value Boxes and Metrics Value boxes and metrics support `aria_label` for screen reader descriptions: ```{r, purl = FALSE} page <- create_page("Summary") %>% add_value_box( title = "Total Responses", value = "1,234", icon = "mdi:account-group", aria_label = "Total survey responses: 1,234" ) %>% add_metric( title = "Response Rate", value = "78%", aria_label = "Survey response rate: 78 percent" ) ``` ## Example Dashboard ```{r, purl = FALSE} data <- data.frame( category = rep(c("A", "B", "C", "D"), each = 25), region = rep(c("North", "South"), 50), value = round(rnorm(100, 50, 10)) ) dashboard <- create_dashboard( title = "Accessible Dashboard", data = data ) %>% add_page( create_page("Overview") %>% add_value_box( title = "Records", value = "100", aria_label = "Total records: 100" ) %>% add_viz( type = "bar", x_var = "category", title = "Categories", alt_text = "Bar chart showing counts for categories A through D" ) %>% add_viz( type = "stackedbar", x_var = "category", stack_var = "region", title = "By Region", alt_text = "Stacked bar chart showing regional breakdown per category" ) ) ``` ## WCAG 2.1 AA Notes The accessibility features target WCAG 2.1 Level AA. Key areas covered: - **1.3.1 Info and Relationships**: ARIA roles and labels on interactive elements - **2.1.1 Keyboard**: All functionality available via keyboard - **2.4.1 Bypass Blocks**: Skip-to-content link - **2.4.3 Focus Order**: Logical tab order with focus trapping in modals - **2.4.7 Focus Visible**: Visible focus indicators on all interactive elements - **2.3.3 Animation from Interactions**: Reduced motion support - **4.1.3 Status Messages**: ARIA live region for filter announcements Chart accessibility depends on the rendering backend. Highcharts includes built-in screen reader support and keyboard navigation for chart data points.