Path to this page:
Subject: CVS commit: pkgsrc/www/R-bslib
From: Makoto Fujiwara
Date: 2024-12-16 05:39:36
Message id: 20241216043936.2D72CFC1C@cvs.NetBSD.org
Log Message:
(www/R-bslib) Updated 0.4.2 to 0.8.0
# bslib 0.8.0
## Breaking changes
* To help reduce the potential for squashed content, the main content
area of `page_sidebar()` and `page_navbar()` with a `sidebar` now
have a (customizable) minimum height and width on a "medium-sized"
window. To revert to previous behavior, set `theme =
bs_theme("bslib-page-main-min-height" = "unset",
"bslib-page-main-min-width" = "unset")`. (#1057, #1059, #1084)
* `card_image()` had a couple breaking changes (#1076):
* `fill` now defaults to `FALSE` to avoid stretching/shrinking the
image vertically (and thus, changing it's aspect ratio). To
restore the previous behavior, set `fill = TRUE`.
* `container` now defaults to `NULL` instead of `card_body`. As a
result, `card_image()` no longer has padding around it, making it
easier to create "full-bleed" card images ([for
example](https://getbootstrap.com/docs/5.3/components/card/#images)). To
restore the previous behavior, wrap `card_image()` in a
`card_body()`.
## New features
* `card_image()` gains several new features (#1076):
* `alt` is now a formal argument and is set to `""` by
default. This default value marks images as decorative; please
describe the image in the `alt` attribute if it is not
decorative.
* `border_radius` now defaults to `"auto"` by default, in which
case the image's position in the card will automatically
determine whether it should receive the `.card-img-top` (first
child), `.card-img-bottom` (last child) or `.card-img` (only
child).
* `file` is designed to accept a path to a local (server-side)
file, but now recognizes remote files that start with a protocol
prefix, e.g. `https://`, or two slashes, e.g. `//`. Local files
are base64-encoded and embedded in the HTML output, while remote
files are linked directly. To use a relative path for a file
that will be served by the Shiny app, use `src` instead of file,
e.g. `card_image(src = "cat.jpg")` where `cat.jpg` is stored in
`www/`.
* The `open` argument of `sidebar()` now includes the option to place
a sidebar that's always open on mobile screens _above the main
content_ with `open = list(mobile = "always-above")`. (#1088)
## Improvements
* Adjusted the border color of checkbox and radio buttons to match the
border color of the input group in
`bs_theme(preset="shiny")`. (#1038)
* On mobile, the main and sidebar content areas of a
`layout_sidebar()` no longer overlap with the sidebar toggle
button. (#1084)
* bslib now re-exports `htmltools::css()` to make it easier to specify style
declarations. (#1086)
* Example apps provided with bslib have now moved from `examples` to
`examples-shiny` to take advantage of the new `package` argument in
`shiny::runExample()` with shiny >= 1.8.1. For example, try
`shiny::runExample("build-a-box", package = "bslib")`. (#1049)
## Bug fixes
* `toggle_sidebar()` once again correctly closes a
sidebar. (@fredericva, #1043)
* bslib now avoids re-defining its components when used in a context
where they are already available, e.g. in a Quarto
dashboard. (#1045)
* Improved the appearance of cards with sidebars and headers in the
Shiny preset, especially when custom card color themes are used,
e.g. with `text-bg-primary` or other Bootstrap utility
classes. (#1056)
* When `card_body(fillable = FALSE)`, bslib now preserves flow-layout
margin bottom settings. (#1073)
* Fixed a bug in `layout_sidebar()` that caused a spurious and
confusing error message. (#1081)
# bslib 0.7.0
This large release includes many improvements and bug fixes for newer
UI components like `layout_columns()`, `card()`, and `sidebar()`. In
addition, the new `input_task_button()` offers a drop-in replacement
for `shiny::actionButton()` (to prevent multiple submissions of the
same operation) as well as pairing nicely with the new
`shiny::ExtendedTask` for implementing truly non-blocking operations
in Shiny.
## New features
* Added `input_task_button()`, a replacement for
`shiny::actionButton()` that automatically prevents an operation
from being submitted multiple times. It does this by, upon click,
immediately transitioning to a "Processing..." visual state that
does not let the button be clicked again. The button resets to its
clickable state automatically after the reactive flush it causes is
complete; or, for advanced scenarios, `update_task_button()` can be
used to manually control when the button resets.
* Both `card()` and `value_box()` now take an `id` argument that, when
provided, is used to report the full screen state of the card or
value box to the server. For example, when using `card(id =
"my_card", full_screen = TRUE)` you can determine if the card is
currently in full screen mode by reading the boolean value of
`input$my_card_full_screen`. (#1006, #1032)
## Changes & improvements
* For `sidebar()`:
* The page-level `sidebar` for `page_sidebar()`/`page_navbar()` is
now always open (and not collapsible) by default on mobile
screens. To revert to the old behavior, set `open = "desktop"` in
the `sidebar`. (#943)
* `open` now accepts a list with `mobile` and `desktop` values to
control the sidebar's initial state on each screen size, choosing
from `"open"`, `"closed"`, or `"always"` (for \
an always-open
sidebar that cannot be collapsed). (#943)
* The collapse toggle now has a high `z-index` value to ensure it
always appears above elements in the main content area. The
sidebar overlay also now receives the same high `z-index` on
mobile layouts. (#958)
* Improved `card(full_screen = TRUE, ...)` accessibility:
* Full-screen cards are now supported on mobile devices: the _Expand
card_ button is revealed when a user taps on the card (thanks
@Damonsoul, #961).
* The _Expand card_ button is now accessible via keyboard navigation
and appropriate ARIA attributes connect the card with the expand
and close buttons.
* For JavaScript-oriented users, the expansion/collapse is now
accompanied by a custom `bslib.card` event with the full screen
state reported in the `event.detail.fullScreen` property. (#959)
* Improvements to the default theme (i.e., Shiny preset):
* In the default theme, cards now use a slightly smaller shadow and
the same shadow style is also now used by popovers. (#998)
* Increased spacing between elements. This change is most noticeable
in the `layout_columns()` or `layout_column_wrap()` component. In
these and other components, you can use `gap` and `padding`
arguments to choose your own values, or you can set the
`$bslib-spacer` (Sass) or `--bslib-spacer` (CSS) variable. (#998)
* For `layout_columns()`:
* `col_widths` now sets the `sm` breakpoint by default, rather than
the `md` breakpoint. For example, `col_widths = c(12, 6, 6)` is
now equivalent to `breakpoints(sm = c(12, 6, 6))` rather than
`breakpoints(md = c(12, 6, 6))`. (#1014)
* When `col_widths` has a `breakpoints()` at `lg` or wider, it now
uses a better default column width for the smaller breakpoints not
listed in the `col_widths` value. That said, you can always
include `sm` or `md` in your `breakpoints()` definition to have
complete control over column widths at those sizes. (#931)
* When `row_heights` is a non-`breakpoints()` object, that value is
used for the row heights at all breakpoints. Previously, it was
used for the row heights from `"sm"` up. (#931)
* When an integer value for any breakpoint is provided to
`col_widths`, a 12-unit grid is always used. For example,
`breakpoints(md = 3, lg = NA)` will pick a best-fitting layout for
large screen sizes using the 12-column grid. Previously, the best
fit algorithm might adjust the number of columns as a shortcut to
an easy solution. That shortcut is only taken when an auto-fit
layout is requested for every breakpoint, e.g. `col_widths =
breakpoints(md = NA, lg = NA)` or `col_widths = NA`. (#928)
* Underlying logic moved from R to Typescript to improve the
portability of the component. (#931)
* `value_box()`, `layout_columns()` and `layout_column_wrap()` now all
have `min_height` and `max_height` arguments. These are useful in
filling layouts, like `page_fillable()`, `page_sidebar(fillable =
TRUE)` or `page_navbar(fillable = TRUE)`. For example, you can use
`layout_columns(min_height = 300, max_height = 500)` to ensure that
a set of items (likely arranged in a row of columns) are always
between 300 and 500 pixels tall. (#1016)
* `page_sidebar()` now places the `title` element in a `.navbar`
container that matches the structure of `page_navbar()`. This
ensures that the title elements of `page_sidebar()` and
`page_navbar()` have consistent appearance. (#998)
* `as_fillable_container()`, `as_fill_item()` and `as_fill_carrier()`
now always include the htmltools fill CSS dependency. This means
that they are no longer usable with the `$addAttr()`
`htmltools::tagQuery` method; authors should instead pass elements
to the `as_fillable_container()` and `as_fill_*()` functions and use
the `css_selector` argument to apply fill options to specific
elements. (#946)
## Bug fixes
* Fixed an issue where the page might be given a window title of `NA`
if the primary `title` argument of a page function, such as
`page_sidebar()`, is `NULL` or a suitable window title could not be
inferred. (#933)
* `card()`s (and `value_box()`s) now correctly exit full screen mode
when they are removed from the UI. If you want to update a card
without potentially exiting the full-screen mode, update specific
parts of the card using `uiOutput()` or `textOutput()`. (#1005)
* Fixed a handful of `update_popover()` bugs. (#747, #1017)
* `tooltip()` and `popover()` now work as expected when inserted into
a navbar/navset via `nav_insert()`. (#1020)
* `uiOutput()` and `conditionalPanel()` no longer result in unwanted
double padding when their parent container uses `gap` for spacing
multiple elements (e.g., `layout_columns()`, `page_fillable()`,
etc). (#992, #1031)
* `page_navbar()` and `navset_bar()` now validate and transform
`padding` and `gap` arguments into appropriate CSS values. (#991)
* Fixed an issue where the `xs` breakpoint in a `breakpoints()` object
used for `row_heights` in `layout_columns()` would override all
other breakpoints. (#1014)
# bslib 0.6.2
Increased the version requirement on the `{sass}` package to 0.4.9. As
a result, `font_google(local=TRUE)` should no longer fail to download
font files.
# bslib 0.6.1
## Bug fixes
* Fixed the CSS for the `bslib-page-dashboard` class in the Shiny
preset to correctly support `page_sidebar(class =
"bslib-page-dashboard")` and `page_navbar(nav_panel(class =
"bslib-page-dashboard"))`. (#917)
* Fixed a minor bug to allow the themer demo to be run directly,
outside of `bs_theme_preview()`. (#918)
# bslib 0.6.0
## Breaking changes
* `bs_theme()` now defaults to `preset="shiny"`. This provides an
additional set of theming defaults and rules that make it easier to
create Shiny apps (in particular, dashboards) that look good out of
the box. To revert to the previous behavior, set
`bs_theme(preset="bootstrap")`. (#711)
* `value_box()` no longer defaults to `theme_color = "primary"`. To
restore the previous behavior, please use `theme = "primary"`. In
addition to the default style change, the `theme_color` is now
deprecated in favor of `theme`. (#758)
* `page_navbar()` now defaults to `underline = TRUE`, meaning that
navigation links in the navbar now have underline styling by default
(set `underline = FALSE` to revert to previous behavior). (#784)
* `page()` now returns a `<body>` tag instead of `tagList()`. This
change allows `page()` to treat named arguments as HTML attributes
for the `<body>` tag, making it possible to add page-level classes
or other attributes. (#809)
* The JS/CSS assets behind `{bslib}` components (e.g., `card()`,
`value_box()`, etc) are all now bundled into one `htmlDependency()`
and included with the return value of `bs_theme_dependencies()`
(previously they were attached at the component-level). (#810)
* `layout_column_wrap()` no longer requires `width` and `width` is no
longer the first argument, meaning that `width` must be named if
used. The new default is `width = "200px"`, which combines with
`fixed_width = FALSE` to produce a responsive layout where each
column is at least 200px wide. This means that, in most cases,
`layout_column_wrap()` can automatically layout an unknown number of
items without you having to set `width`. (#853)
## New features
* The default version of Bootstrap is now v5.3.1, upgraded from
v5.2.2. The most notable thing that comes with the update is the
ability to toggle between light/dark [color
modes](https://getbootstrap.com/docs/5.3/customize/color-modes/)
purely client-side (i.e., no calls to Sass required). (#749, #764)
* Added `input_dark_mode()`, a new input control that provides a
toggle button that can be used to switch between the dark and light
modes when using Bootstrap 5.3. By default, dark mode is applied
automatically if the user's operating system is also in dark
mode. App authors can toggle dark mode programmatically from the
server using `toggle_dark_mode()`, and if you provide
`input_dark_mode()` with an `id`, you can read the current color
mode via the corresponding input value. (#787)
* Shiny's Bootstrap theme preset is now used by default in
`bs_theme()` and all related `page_*()` functions in bslib. This
theme brings a fresh new design to all Shiny apps and dashboards
created with bslib. This dashboard design anticipates heavy use of
cards for organizing content, and works best with a gray background
for contrast with minimalistic white cards. This treatment can be
enabled in `page_sidebar()`, `page_fillable()` and other `page_*()`
functions by adding the `bslib-page-dashboard` class to the page
container or body tag.
The preset can also be customized using the
`$bslib-dashboard-design` and `$bslib-enable-shadows` Sass
variables. Set these to `false` to disable the dashboard treatment
and card shadows, respectively. These variables can be set via
`bs_theme()`, e.g. `bs_theme("bslib-dashboard-design" =
"false")`. (#897, #906)
* `value_box()` has been updated with a number of new features and improvements:
* `value_box()` now supports many new themes and styles, or fully
customizable themes using the new `value_box_theme()` function. To
reflect the new capabilities, we've replaced `theme_color` with a
new `theme` 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 a `bg-` or `text-` prefix
to the theme or color name. Finally, we've also added new gradient
themes allowing you to pair any two color names as
`bg-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 new `value_box()` layout that places
the showcase below the value box title and value, perfect for a
full-bleed plot. (#758)
* `showcase_left_center()` and `showcase_top_right()` no longer take
two values for the `width` 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 gained
`width_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 of `value_box()` now accepts one of
three character values: `"left center"`, `"top right"`,
`"bottom"`. (#758)
* A new [Build a Box app](https://bslib.shinyapps.io/build-a-box/)
is now available online or via bslib. See `?value_box()` for
details. The app helps preview a set of value boxes while you
configure and customize their appearance and provides you with
code to copy and paste into your app. (#790)
* Added new `navset_underline()` & `navset_card_underline()` functions
as well as a `underline` argument to `page_navbar()` to leverage the
new
[nav-underline](https://getbootstrap.com/docs/5.3/components/navs-tabs/#underline)
styling on navigation links. (#784)
## Improvements
* 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 and `value_box()`es to better adapt to Bootstrap's dark
mode. (#780)
* `htmltools::save_html()` now works as expected when applied directly
to components (e.g., `card()`, etc) and pages with a non-default
theme. (#823, #815)
* `layout_sidebar()` received a new design. The button to collapse and
expand the sidebar now appears at the top (instead of the bottom) of
the sidebar. On mobile devices, the sidebar now fills the
`layout_sidebar()` area as an overlay, rather than expanding from
above the main content area. **Note** the `max_mobile_height`
argument of `sidebar()` determines the maximum height of the sidebar
area on mobile, but it now only applies when `open =
"always"`. (#798)
* `layout_sidebar()` now uses an `<aside>` element for the sidebar's
container and a `<header>` element for the sidebar title. The
classes of each element remain the same, but the semantic meaning of
the elements is now better reflected in the HTML markup. (#580)
* In `layout_column_wrap()`, when `width` is a CSS unit -- e.g. `width
= "400px"` or `width = "25%"` -- and `fixed_width = FALSE`,
`layout_column_wrap()` will ensure that the columns are at least
`width` wide, unless the parent container is narrower than
`width`. (#851)
* `bs_global_theme()` gains a `preset` argument to match the function
signature of `bs_theme()`. (#896)
## Bug fixes
* `toggle_switch()` now works correctly when called from within a
Shiny module. `update_switch()` worked as expected, but
`toggle_switch()` didn't apply the module's namespace to the `id` of
the switch to be updated. (#769)
* Filter controls in the popovers of `DT::datatable()` tables now
better match the current Bootstrap theme and are responsive to the
dark mode setting in Bootstrap 5.3. (#267, #775).
* A double border no longer appears when an accordion is used inside a
`sidebar(open="always")` context. (#795)
* `layout_sidebar()` no longer gives the sidebar main content area the
`role="main"` attribute. (#580)
# bslib 0.5.1
## New features
* Added `tooltip()`, `update_tooltip()`, and `toggle_tooltip()` for
easy creation (and server-side updating) of [Bootstrap
tooltips](https://getbootstrap.com/docs/5.2/components/tooltips/) (a
way to display additional information when focusing (or hovering
over) a UI element). (#662)
* Added `popover()`, `update_popover()`, and `toggle_popover()` for
easy creation (and server-side updating) of [Bootstrap
popovers](https://getbootstrap.com/docs/5.2/components/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()` and `update_switch()` for easy creation (and
server-side updating) of a [Bootstrap's switch
input](https://getbootstrap.com/docs/5.2/forms/checks-radios/#switches)
(an on-off toggle for binary input values). (#483)
* Added two new toggle functions: `toggle_switch()` for toggling the
state of an `input_switch()` element and `toggle_sidebar()` for
toggling the state of a `sidebar()` element (`sidebar_toggle()`
remains as an alias of `toggle_sidebar()`). (#709)
## Improvements
* 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()` gains `gap` and `padding` arguments to
control the vertical gap between items in the sidebar and the
padding around the sidebar's content. (#725)
## Bug fixes
* Closed #636: Outputs in sidebars now work as expected when an
initially-closed sidebar is opened. (#624)
* Closed #640: `accordion()` no longer errors when an `id` isn't supplied
inside a Shiny `session` context. (#646)
* Closed #639: `nav_panel()`'s `icon` argument now supports generic `HTML()`,
meaning that things like `bsicons::bs_icon()` and `fontawesome::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)
# bslib 0.5.0
This significant release focuses on making dashboards with filling/responsive
layouts easier. See the new [Getting Started with Dashboards
article](https://rstudio.github.io/bslib/articles/dashboards.html) 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 as `card_body_fill()` (i.e., it
is both a fillable container and fill item) by default. And, now, since
`card_body()` can do everything `card_body_fill()` can do, `card_body_fill()`
has been deprecated. The main benefit of this change is that
`card(full_screen = TRUE, ...)` with output(s) passed to `...` "just \
works"
in an intuitive way. To revert to the previous behavior, set `fillable =
FALSE` and `fill = FALSE` in calls to `card_body()` and set `wrapper =
function(x) card_body(x, fillable = FALSE, fill = FALSE)` in calls to
`card()`. (#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](https://rstudio.github.io/bslib/articles/utility-classes.html) (for
example, change `shiny::titlePanel("My title")` to
`tagAppendAttributes(titlePanel("My title"), class = \
"mt-3", .selector =
"h2")`). (#396)
* `page_fill()` (now called `page_fillable()`) had several breaking changes
(listed below) to better accommodate filling layouts. If this breaks existing
behavior, consider using `shiny::fillPage(theme = bslib::bs_theme(), ...)`
instead of `page_fill()`.
* `page_fill()` now produces a `<body>` tag with `display:flex` (instead of
`display:block`).
* `page_fill()` no longer fills the windows height on mobile (i.e., narrow
screens) by default (set `fillable_mobile = TRUE` to restore the old
behavior).
* `page_fill()` now adds `padding` and `gap` by default, set `padding = 0`
and `gap = 0` to restore the old behavior.
* `page_navbar()` (and also `shiny::navbarPage()` with `theme = bs_theme()`)
had a couple breaking changes:
* The container of each page is now `display:flex` (instead of
`display:block`). If this breaks existing behavior, set `page_navbar()`'s
`fillable` argument to `FALSE`.
* `header` and `footer` is no longer wrapped in an additional
`shiny::fluidRow()` container. If this breaks existing behavior, consider
wrapping the `header` and `footer` value(s) with
`shiny::fluidRow()`). (#479)
* `layout_column_wrap()`'s `fill` 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 new `fillable` argument for
controlling whether _UI elements_ are allowed to fill their row height. This
is more consistent with the meaning of `fill` in other functions, like
`card()`, `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, do
`bs_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](https://rstudio.github.io/bslib/articles/sidebars/index.html)
to learn more. (#479)
* Added `layout_columns()`, for responsive column-based grid layouts. (#587)
* Adds a new `accordion()` API. See `help(accordion)` for examples and
details. Note also `accordion()` is designed to [work well inside a
\
`sidebar()`](https://rstudio.github.io/bslib/articles/sidebars/index.html#sidebar-accordions). \
(#475)
* `page_navbar()`, `navset_card_tab()`, and ` navset_card_pill()` gain a
`sidebar` argument for putting a `sidebar()` on every page/tab/pill. (#479)
* `page_navbar()` gains a `fillable` argument to make the content of particular
page(s) fit the window/card. (#479)
* `page_fillable()` (aka, `page_fill()`) is now considered a `fillable`
container, meaning that `fill` items like `card()`, `layout_column_wrap()`,
and `layout_sidebar()` now grow/shrink to fit the window's height when they
appear as a direct child of `page_fillable()`. (#479)
* `page_navbar()` and `page_fillable()` gain `fillable_mobile` arguments to
control whether the page should grow/shrink to fit the viewport on
mobile. (#479)
* `card()`, `value_box()`, and `card_image()` gain `max_height`/`min_height`
and `fill` arguments. (#498)
* `card_body()` gains a `padding` argument. (#587)
* Added new `as_fill()`, `as_fillable()`, `as_fill_carrier()`, `is_fill()`, and
`is_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()`'s `title`/`value` (e.g., `value_box("Dynamic value",
uiOutput("value"))`). (#605)
## Deprecations
* `card_body_fill()` has been deprecated in favor of `card_body()`. (#498)
* `page_fill()` has been deprecated in favor of `page_fillable()`. (#498)
* `nav()` has been deprecated in favor of `nav_panel()` and `nav_content()` in
favor of `nav_panel_hidden()`. (#476)
* The `navs_*()` family of functions have been deprecated in favor of
`navset_*()` (#476):
* `navs_tab()` is now `navset_tab()`
* `navs_pill()` is now `navset_pill()`
* `navs_pill_list()` is now `navset_pill_list()`
* `navs_bar()` is now `navset_bar()`
* `navs_tab_card()` and `navs_pill_card()` are now `navset_card_tab()` and
`navset_card_pill()`, respectively.
Files: