value_box()
no longer defaults totheme_color = "primary"
. To restore the previous behavior, please usetheme = "primary"
. In addition to the default style change, thetheme_color
is now deprecated in favor oftheme
. (#758)
-
Upgraded the default version of Bootstrap from v5.2.2 to v5.3.1. The most notable thing that comes with the update is the ability to toggle between light/dark color modes purely client-side (i.e., no calls to Sass required). (#749, #764)
-
value_box()
now supports many new themes and styles, or fully customizable themes using the newvalue_box_theme()
function. To reflect the new capabilities, we've replacedtheme_color
with a newtheme
argument. The previous argument will continue work as expected, but with a deprecation warning. (#758)In addition to the Bootstrap theme names (
primary
,secondary
, etc.), you can now use the main Boostrap colors (purple
,blue
,red
, etc.). You can also choose to apply the color to the background or foreground by prepending abg-
ortext-
prefix to the theme or color name. Finally, we've also added new gradient themes allowing you to pair any two color names asbg-gradient-{from}-{to}
(e.g.,bg-gradient-purple-blue
).These named color themes aren't limited to value boxes: because they're powered by small utility classes, you can use them anywhere within your bslib-powered UI.
-
Added
showcase_bottom()
, a newvalue_box()
layout that places the showcase below the value box title and value, perfect for a full-bleed plot. (#758) -
showcase_left_center()
andshowcase_top_right()
no longer take two values for thewidth
argument. Instead, they now take a single value (e.g.,width = "30%"
) representing the width of the showcase are in the value box. Furthermore, they've both gainedwidth_full_screen
arguments that determine the width of the showcase area when the value box is expanded to fill the screen. (#758) -
The
showcase_layout
argument ofvalue_box()
now accepts one of three character values:"left center"
,"top right"
,"bottom"
. (#758)
-
The
bs_themer()
app now supports previewing the dark mode variant of Bootstrap 5 themes. (#767) -
Improved the style and appearance of the button to enter full screen in
card()
s andvalue_box()
es to better adapt to Bootstrap's dark mode. (#780)
toggle_switch()
now works correctly when called from within a Shiny module.update_switch()
worked as expected, buttoggle_switch()
didn't apply the module's namespace to theid
of the switch to be updated. (#769)
- Added
tooltip()
,update_tooltip()
, andtoggle_tooltip()
for easy creation (and server-side updating) of Bootstrap tooltips (a way to display additional information when focusing (or hovering over) a UI element). (#662) - Added
popover()
,update_popover()
, andtoggle_popover()
for easy creation (and server-side updating) of Bootstrap popovers. Popovers are similar to tooltips, but are more persistent, and should primarily be used with button-like UI elements (e.g.,actionButton()
,bsicons::bs_icon()
, etc). (#702) - Added
input_switch()
andupdate_switch()
for easy creation (and server-side updating) of a Bootstrap's switch input (an on-off toggle for binary input values). (#483) - Added two new toggle functions:
toggle_switch()
for toggling the state of aninput_switch()
element andtoggle_sidebar()
for toggling the state of asidebar()
element (sidebar_toggle()
remains as an alias oftoggle_sidebar()
). (#709)
- Closed quarto-dev/quarto-cli#6081:
{bslib}
's components (e.g.,card()
,sidebar()
, etc.) now work more sensibly in Quarto docs. (#664) - Closed #672:
sidebar()
gainsgap
andpadding
arguments to control the vertical gap between items in the sidebar and the padding around the sidebar's content. (#725)
- Closed #636: Outputs in sidebars now work as expected when an initially-closed sidebar is opened. (#624)
- Closed #640:
accordion()
no longer errors when anid
isn't supplied inside a Shinysession
context. (#646) - Closed #639:
nav_panel()
'sicon
argument now supports genericHTML()
, meaning that things likebsicons::bs_icon()
andfontawesome::fa()
can be used as values. (#645) - Light-styled buttons in bslib-provided Bootswatch themes are now consistent with their design in Bootswatch. Previously, they were inadvertently styled similarly to secondary buttons. (#687)
- Closed #727:
layout_column_wrap()
now enforces equal column widths by avoiding layout issues caused by grid container overflow. (#729)
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.
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)
- 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)
- 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)
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.
- Upgraded Bootstrap 5 (i.e.,
bs_theme(version = 5)
) from 5.1.3 to 5.2.2. (#438, #455)
-
Adds a new
card()
API as well asvalue_box()
andlayout_column_wrap()
. To learn more about this new functionality, refer to these new pkgdown articles:
- Closed #458. This release
{bslib}
now requires{memoise}
2.0.1 or above.
bs_theme()
now defaults toversion = 5
(i.e., Bootstrap 5). If this change happens to break an existing app, consider specifyingbs_theme(version = 4)
to revert the change in the Bootstrap version. (#374)- The default coloring on some Bootswatch 4+ theme's
.navbar-default
/.navbar-inverse
class has changed slightly to better match their Bootswatch 3 coloring. Also, since this coloring is now based solely on$navbar-*
variables, Bootswatch themes now work better in combination with custom$navbar-*
values (e.g.,bs_theme("navbar-bg" = ...)
can be used to provide the background color, and foreground colors will automatically contrast appropriately). (#392)
- Upgraded Bootstrap 5 (i.e.,
bs_theme(version = 5)
) from 5.1.0 to 5.1.3 (#378) - Closed #369:
bs_dependency_defer()
now memoisesfunc
(by default), reducing the time required to render multiple instances of the same dynamically themable widget. (#405)
- Closed #393: Bootstrap 5's
$form-check-label-*
variables now work as expected withshiny::radioButtons()
,shiny::checkboxInput()
, andshiny::checkboxGroupInput()
. (#395) - Closed #382: Various fixes for using
shiny::checkboxInput()
,shiny::checkboxGroupInput()
, andshiny::radioButton()
withbs_theme(version = 5, bootswatch = "sketchy")
. (#385) - Closed #377: make sure
shiny::tabsetPanel(type = "hidden")
(i.e.,bslib::navs_hidden()
) stays hidden when used withbs_theme()
. (#379) - Closed #424: fixed an issue with
nav_menu()
appearing first in anavs_*()
container with Bootstrap 4+. - Closed #431: Bootstrap 5 navbars no longer have an unwanted "Toggle Navigation" label when collapsed. (#432)
- Closed #400:
nav_menu(align="right")
now works with Bootstrap 5. (#401) - Closed #390: using
bs_theme(bootswatch = "paper", version = 5)
orbs_theme(bootswatch = "readable", version = 5)
no longer errors. (#391)
- Upgraded Bootstrap 5 (i.e.,
bs_theme(version = 5)
) from 5.0.2 to 5.1.0 (#365)
- Closed rstudio/shiny#3519:
nav_menu()
(i.e.,shiny::navbarMenu()
) wasn't producing an.active
class on it's.dropdown
container properly. (#372)
- Closed rstudio/rmarkdown#2154:
{magrittr}
's pipe operator (%>%
) is no longer re-exported by{bslib}
. Eitherlibrary(magrittr)
to make%>%
available and/or use use R 4.1's pipe operator (|>
).
- Closed #82: Added support for Bootstrap 5 (via
bs_theme(version = 5)
). Bootstrap 4 remains the default in this release, but the next release, the default will likely change to Bootstrap 5.
- Closed #6: rmarkdown's .tabset-fade class now works with Bootstrap 4+ since legacy use of .nav .fade is now officially supported in Bootstrap 4+. (#325)
Small patch release to fix failing test on Solaris.
- Closed #251: New
bs_theme()
options (navbar-bg
,navbar-light-bg
, andnavbar-dark-bg
) for more easily customizing the navbar's background (and foreground) color (#253, #271). - Closed #281: New
bs_theme()
argument (font_scale
) for easier scaling of the base font size (#288). - Closed #256 and #282: Font file importers (
font_google()
,font_link()
, andfont_face()
) are now re-exported from the{sass}
package. As a result, they may now be used with any Sass variable (e.g.,bs_theme("input-font-family" = font_google("Pacifico"))
) as well as inside Rmd yaml without!expr
(e.g.,input-font-family: google: Pacifico
-- see #256 for more details). A newfont_collection()
function was also added for a more convenient way to specify font fallbacks (#291). - Closed #255:
bs_themer()
now emits sensibleyaml
front matter when used within an Rmd document (#288). - Closed #227:
bs_themer()
now overlays a spinner during Sass compilation (#243). - Closed #278:
{bslib}
now includesrmarkdown::html_document
templates demonstrating example usage with{bslib}
and{thematic}
(#288). - Closed #231: Upgraded from Bootstrap 4.5.3 to 4.6.0 (#254).
- Closed #237:
<blockquote>
tags now have border-left/padding styles withversion = 4
(to mirror theversion = 3
behavior) (#239). - Closed #279: Warnings about low color contrasts are now suppressed by default, unless
shiny::devmode()
is enabled. To enable/disable these warnings, set the newoptions(bslib.color_contrast_warnings = )
toTRUE
/FALSE
(#287). bs_theme_dependencies()
now includes Sass source maps whenshiny::devmode()
is enabled (#312).- Added new
bs_add_functions()
/bs_add_mixins()
and deprecatedbs_add_declarations()
to reflectsass::sass_layer()
's new ability to placefunctions
before variabledefaults
. As a result, variable definitions may now use functions defined withbs_add_functions()
. (#311)
- Closed #236, #230, #242, #187, #215, #250: Addressed various cosmetic issues with CSS (#249).
- Closed #289: collapsed navbar toggle now correctly floats to the right (#290).
- Closed rstudio/flexdashboard#316: fixed an issue with navbar nav spacing/alignment (#286).
- Initial release of the package, see https://rstudio.github.io/bslib/