---
title: "Customization"
output: rmarkdown::html_vignette
vignette: >
%\VignetteIndexEntry{Customization}
%\VignetteEngine{knitr::rmarkdown}
%\VignetteEncoding{UTF-8}
---
```{r, include = FALSE}
knitr::opts_chunk$set(
collapse = TRUE,
comment = "#>"
)
```
```{r setup}
library(shinydataviewer)
library(shiny)
library(bslib)
library(reactable)
```
The module exposes a small set of customization hooks intended to balance
drop-in defaults with downstream flexibility.
## Table behavior
`data_viewer_server()` exposes first-class arguments for common table
controls:
- `searchable`
- `filterable`
- `sortable`
- `default_page_size`
- `page_size_options`
For lower-level `reactable()` overrides, use `reactable_args`.
`default_page_size` must be one of the values supplied in
`page_size_options`, and `page_size_options` must contain positive integers.
```{r eval = FALSE}
data_viewer_server(
"viewer",
data = reactive(mtcars),
searchable = TRUE,
filterable = FALSE,
sortable = TRUE,
default_page_size = 25,
page_size_options = c(25, 50, 100),
reactable_args = list(
showPageInfo = FALSE
)
)
```
## Table controls position
The UI helpers support top or bottom table controls:
```{r eval = FALSE}
data_viewer_card_ui(
"viewer",
table_controls_position = "bottom"
)
```
## Custom summary cards
Use `summary_card_fn` to replace the default variable card renderer while
keeping the module's summary computation and table logic.
The custom function must accept at least `summary_row` and `index`, where
`summary_row` is a one-row data frame produced by `summarize_columns()`.
```{r eval = FALSE}
custom_summary_card <- function(summary_row, index) {
htmltools::tags$div(
class = "custom-summary-card",
htmltools::tags$strong(summary_row$var_name[[1]]),
htmltools::tags$span(sprintf(" (%s)", summary_row$type[[1]]))
)
}
data_viewer_server(
"viewer",
data = reactive(iris),
summary_card_fn = custom_summary_card
)
```
A typical use case is treating identifier-like columns differently from ordinary
categorical fields, for example by suppressing the mini chart and showing a
"High cardinality" badge instead.
The module validates unsupported column classes early, so custom summary-card
logic can assume the incoming `summary_row` corresponds to one of the supported
viewer types.
## Theme integration
The module styles use Bootstrap variables, so they follow the active `bslib`
theme and `brand.yml` values automatically.
```{r eval = FALSE}
ui <- page_fillable(
theme = bs_theme(version = 5, brand = "brand.yml"),
data_viewer_card_ui("viewer")
)
```