You could use reactable and reactable.extra see reactable.extra documentation for custom input
Created an example code snippet using your example here;
library(shiny)
library(reactable)
library(reactable.extras)
shinyApp(
ui = fluidPage(
reactable.extras::reactable_extras_dependency(),
reactableOutput("react"),
hr(),
textOutput("button_text"),
textOutput("text")
),
server = function(input, output) {
output$react <- renderReactable({
# preparing the test data
df <- data.frame(
Name = c('Dilbert', 'Alice', 'Wally', 'Ashok', 'Dogbert'),
Motivation = c(62, 73, 3, 99, 52),
Actions = c('Fire'),
stringsAsFactors = FALSE,
Text = c(""),
row.names = 1:5
)
reactable(
df,
columns = list(
Actions = colDef(
cell = button_extra("button", class = "button-extra")
),
Text = colDef(
cell = text_extra(
"text"
)
)
)
)
})
output$button_text <- renderText({
req(input$button)
values <- input$button
paste0(
"Button: ",
string_list(values)
)
})
output$text <- renderText({
req(input$text)
values <- input$text
paste0(
"Dropdown: ",
string_list(values)
)
})
}
)