---
title: "Use kable in Shiny"
output: html_document
vignette: >
  %\VignetteIndexEntry{Use kable in Shiny}
  %\VignetteEngine{knitr::rmarkdown}
  %\VignetteEncoding{UTF-8}
---

```{r setup, include=FALSE}
knitr::opts_chunk$set(echo = TRUE)
```

Since the output is just HTML, it's very easy to use `kable` and `kableExtra` in the Shiny environment. For example:
```{r, eval = FALSE}
library(shiny)

ui <- fluidPage(

   # Application title
   titlePanel("mtcars"),

   sidebarLayout(
      sidebarPanel(
         sliderInput("mpg", "mpg Limit",
                     min = 11, max = 33, value = 20)
      ),

      mainPanel(
         tableOutput("mtcars_kable")
      )
   )
)

server <- function(input, output) {
  library(dplyr)
  library(kableExtra)
   output$mtcars_kable <- function() {
     req(input$mpg)
     mtcars %>%
       mutate(car = rownames(.)) %>%
       tibble::remove_rownames() %>% 
       select(car, everything()) %>%
       filter(mpg <= input$mpg) %>%
       knitr::kable("html") %>%
       kable_styling("striped", full_width = F) %>%
       add_header_above(c(" ", "Group 1" = 5, "Group 2" = 6))
   }
}

# Run the application
shinyApp(ui = ui, server = server)


```

You can copy/paste the code above or simply run:

```{r, eval=FALSE}
shiny::runGist("https://gist.github.com/haozhu233/9e675e1a8a1bb4744f9ebc9246a2366b")
```
