navbar
navbar.Rd
A responsive navigation header positioned on top side of your page that includes support for branding, links, navigation, collapse menu and more.
Details
children*. Type:
ReactNode[]
. Default:NA
.height. Type:
string OR number
. Default:"4rem (64px)"
.position. Type:
static OR sticky
. Default:"sticky"
.maxWidth. Type:
sm OR md OR lg OR xl OR 2xl OR full
. Default:"lg"
.parentRef. Type:
React.RefObject<HTMLElement>
. Default:"window"
.isBordered. Type:
boolean
. Default:false
.isBlurred. Type:
boolean
. Default:true
.isMenuOpen. Type:
boolean
. Default:false
.isMenuDefaultOpen. Type:
boolean
. Default:false
.shouldHideOnScroll. Type:
boolean
. Default:false
.motionProps. Type:
MotionProps
. Default:NA
.disableScrollHandler. Type:
boolean
. Default:false
.disableAnimation. Type:
boolean
. Default:false
.classNames. Type:
Partial<Record<'base' OR 'wrapper' OR 'brand' OR 'content' OR 'item' OR 'toggle' OR 'toggleIcon' OR 'menu' OR 'menuItem', string>>
. Default:NA
.
onMenuOpenChange. Type:
(isOpen: boolean) => void
. Default:NA
.onScrollPositionChange. Type:
(position: number) => void
. Default:NA
.
children*. Type:
ReactNode[]
. Default:NA
.justify. Type:
start OR center OR end
. Default:"start"
.
children. Type:
ReactNode
. Default:NA
.isActive. Type:
boolean
. Default:false
.
icon. Type:
ReactNode OR ((isOpen: boolean OR undefined) => ReactNode)
. Default:NA
.isSelected. Type:
boolean
. Default:false
.defaultSelected. Type:
boolean
. Default:false
.srOnlyText. Type:
string
. Default:"open/close navigation menu"
.
onChange. Type:
(isOpen: boolean) => void
. Default:NA
.
children*. Type:
ReactNode[]
. Default:NA
.portalContainer. Type:
HTMLElement
. Default:"document.body"
.motionProps. Type:
MotionProps
. Default:NA
.
children. Type:
ReactNode
. Default:NA
.isActive. Type:
boolean
. Default:false
.
Examples
library(shiny)
library(shinyNextUI)
library(shiny.react)
library(shiny.router)
#> shiny.router from version > 0.2.3 introduced major
#> changes to the API. Old API is still working but has been marked as deprecated.
#> Please check the docs, or examples to learn more: https://github.com/Appsilon/shiny.router
sections <- c("main", "other")
layout <- function(..., content) {
tags$div(
css = JS("
{
maxW: '100%',
boxSizing: 'border-box',
}"
),
..., # Navbar
# Content
tags$div(
css = JS(
"{
boxSizing: 'border-box',
px: '$12',
mt: '$8',
'@xsMax': {px: '$10'}
}"
),
content
)
)
}
# TO DO: create wrapper for end-user to simplify all this mess.
create_navbar <- function(id) {
input <- get("input", envir = parent.frame())
nav_links <- lapply(seq_along(sections), function(i) {
# Li elements
link(
inputId = sprintf("link_%s", i),
href = route_link(sections[[i]]),
key = i,
value = i,
parent = sprintf("navbar_%s", sections[[i]]),
isActive = if (is.null(input[[sprintf("navbar_%s", id)]])) {
if (i == 1) TRUE else FALSE
} else {
if (input[[sprintf("navbar_%s", id)]] == i) TRUE else FALSE
},
sprintf("Link to %s", sections[[i]])
)
})
nav <- navbar(
id = sprintf("navbar_%s", id),
maxWidth = "lg",
variant = "floating",
isBordered = TRUE,
navbar_brand(p(b = TRUE, "Brand", color = "inherit", hideIn = "xs")),
# Ul element
navbar_content(
variant = "highlight",
activeColor = "success",
nav_links,
navbar_item(
action_button(
inputId = sprintf("navbar_button-%s", id),
"Click me",
auto = TRUE,
flat = TRUE
)
)
)
)
if (is.null(input[[sprintf("navbar_%s", id)]])) {
tagList(
tags$script(
sprintf("Shiny.setInputValue('navbar_%s', 0)", id)
),
nav
)
} else {
nav
}
}
page <- function(id, content) {
layout(
reactOutput(sprintf("nav_%s", id)),
content = content
)
}
home <- page(
id = "main",
card(
numeric_input(
inputId = "obs",
label = "Number of observations:",
value = 500
),
plotOutput("distPlot")
)
)
other <- page(
id = "other",
tableOutput('table')
)
ui <- nextui_page(
router_ui(
route("main", home),
route("other", other)
)
)
server <- function(input, output, session) {
observe(print(input$navbar))
output$nav_main <- renderReact({
create_navbar("main")
})
output$nav_other <- renderReact({
create_navbar("other")
})
output$distPlot <- renderPlot({
hist(rnorm(input$obs))
})
output$table <- renderTable(iris)
router_server("main")
}
if (interactive() || is_testing()) shinyApp(ui, server)