--- 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") ) ```