bslib v0.5.0
This significant release focuses on making dashboards with filling/responsive layouts easier. See the new Getting Started with Dashboards article to learn more. It also includes new components (accordion()
) as well as many improvements and bug fixes for existing features and components.
{bslib}
's dashboarding features are still experimental at this point, but this release represents a significant step towards being our recommended way to create Shiny dashboards.
Breaking changes / improvements
card_body()
now provides the same behavior ascard_body_fill()
(i.e., it is both a fillable container and fill item) by default. And, now, sincecard_body()
can do everythingcard_body_fill()
can do,card_body_fill()
has been deprecated. The main benefit of this change is thatcard(full_screen = TRUE, ...)
with output(s) passed to...
"just works" in an intuitive way. To revert to the previous behavior, setfillable = FALSE
andfill = FALSE
in calls tocard_body()
and setwrapper = function(x) card_body(x, fillable = FALSE, fill = FALSE)
in calls tocard()
. (#498)- Closed #375:
margin-top
is no longer included on header tags that aren't created via pandoc. If this negatively impacts spacing above headers, consider adding a suitable utility class (for example, changeshiny::titlePanel("My title")
totagAppendAttributes(titlePanel("My title"), class = "mt-3", .selector = "h2")
). (#396) page_fill()
(now calledpage_fillable()
) had several breaking changes (listed below) to better accommodate filling layouts. If this breaks existing behavior, consider usingshiny::fillPage(theme = bslib::bs_theme(), ...)
instead ofpage_fill()
.page_fill()
now produces a<body>
tag withdisplay:flex
(instead ofdisplay:block
).page_fill()
no longer fills the windows height on mobile (i.e., narrow screens) by default (setfillable_mobile = TRUE
to restore the old behavior).page_fill()
now addspadding
andgap
by default, setpadding = 0
andgap = 0
to restore the old behavior.
page_navbar()
(and alsoshiny::navbarPage()
withtheme = bs_theme()
) had a couple breaking changes:- The container of each page is now
display:flex
(instead ofdisplay:block
). If this breaks existing behavior, setpage_navbar()
'sfillable
argument toFALSE
. header
andfooter
is no longer wrapped in an additionalshiny::fluidRow()
container. If this breaks existing behavior, consider wrapping theheader
andfooter
value(s) withshiny::fluidRow()
). (#479)
- The container of each page is now
layout_column_wrap()
'sfill
argument now controls whether or not the layout container is allowed to grow/shrink to fit a fillable container (e.g.,page_fillable()
). It also gains a newfillable
argument for controlling whether UI elements are allowed to fill their row height. This is more consistent with the meaning offill
in other functions, likecard()
,card_body()
,layout_sidebar()
, etc. (#498)- Defaults for the following Bootstrap 5 Sass variables were changed to
null
:$accordion-button-active-bg
,$accordion-button-active-color
, and$accordion-icon-active-color
. To restore the old behavior, dobs_add_variables(theme, "accordion-button-active-bg" = "tint-color($component-active-bg, 90%)", "accordion-button-active-color" = "shade-color($primary, 10%)", "accordion-icon-active-color" = "$accordion-button-active-color", .where = "declarations")
. (#475)
New features
- Added
page_sidebar()
, for easy dashboard creation. (#588) - Added a
sidebar()
API for creating sidebar layouts in various contexts. See the article to learn more. (#479) - Added
layout_columns()
, for responsive column-based grid layouts. (#587) - Adds a new
accordion()
API. Seehelp(accordion)
for examples and details. Note alsoaccordion()
is designed to work well inside asidebar()
. (#475) page_navbar()
,navset_card_tab()
, andnavset_card_pill()
gain asidebar
argument for putting asidebar()
on every page/tab/pill. (#479)page_navbar()
gains afillable
argument to make the content of particular page(s) fit the window/card. (#479)page_fillable()
(aka,page_fill()
) is now considered afillable
container, meaning thatfill
items likecard()
,layout_column_wrap()
, andlayout_sidebar()
now grow/shrink to fit the window's height when they appear as a direct child ofpage_fillable()
. (#479)page_navbar()
andpage_fillable()
gainfillable_mobile
arguments to control whether the page should grow/shrink to fit the viewport on mobile. (#479)card()
,value_box()
, andcard_image()
gainmax_height
/min_height
andfill
arguments. (#498)card_body()
gains apadding
argument. (#587)- Added new
as_fill()
,as_fillable()
,as_fill_carrier()
,is_fill()
, andis_fillable()
for testing and coercing potential to fill. (#498)
Bug fixes
- Closed #558: nested cards with
fullscreen = TRUE
now correctly and individually expand to fill the window. Tab focus behavior while in full screen mode has also been improved. (#557) - Closed #573: Improved styling when a dynamic result is supplied to
value_box()
'stitle
/value
(e.g.,value_box("Dynamic value", uiOutput("value"))
). (#605)
Deprecations
card_body_fill()
has been deprecated in favor ofcard_body()
. (#498)page_fill()
has been deprecated in favor ofpage_fillable()
. (#498)nav()
has been deprecated in favor ofnav_panel()
andnav_content()
in favor ofnav_panel_hidden()
. (#476)- The
navs_*()
family of functions have been deprecated in favor ofnavset_*()
(#476):navs_tab()
is nownavset_tab()
navs_pill()
is nownavset_pill()
navs_pill_list()
is nownavset_pill_list()
navs_bar()
is nownavset_bar()
navs_tab_card()
andnavs_pill_card()
are nownavset_card_tab()
andnavset_card_pill()
, respectively.