Changes in version 0.1.0 Bootstrap upgrade The package now targets Bootstrap 5.3 (5.3.8, the runtime bslib actually ships) instead of 5.2, resolving the former 5.2-markup / 5.3-runtime split. - Colour modes: bs_page() / bs_page_fluid() / bs_page_fillable() gain color_mode (initial data-bs-theme on the page body) and the new set_bs_color_mode() switches it from the server. The dark variants of navbar (theme = "dark"), dropdown and carousel (dark = TRUE) and the close button (white = TRUE) now emit data-bs-theme="dark" — their 5.2-era classes (.navbar-dark, .dropdown-menu-dark, .carousel-dark, .btn-close-white) are deprecated in 5.3. - Progress uses the 5.3 markup: role="progressbar" and the aria-value* attributes live on the .progress track (which now carries the id), the inner .progress-bar is purely visual, and passing several bars to bs_progress() renders a .progress-stacked group. bs_progress_bar() gains aria_label. - New 5.3 surface: bs_nav() / bs_tabset() accept type = "underline", bs_img() gains object_fit (.object-fit-*), bs_icon_link() renders the icon-link helper, and bs_navbar(bg =) accepts "body", "body-secondary", "body-tertiary", "white", "black", "transparent". - 5.3 reference markup details: bs_card_subtitle() uses text-body-secondary (.text-muted is deprecated), bs_modal_title() is an

again, tab panes carry tabindex="0", tooltips/popovers use data-bs-title (no more native-tooltip flash), and help = text is wired to its control via aria-describedby. Breaking changes - bs_page_fillable() loses its fillable argument: bslib::page_fillable() has no such parameter, so the value leaked into the page markup as an invalid fillable HTML attribute and controlled nothing. - bs_modal(backdrop = FALSE) now renders a modal with no backdrop (data-bs-backdrop="false"), matching Bootstrap and bs_offcanvas(). Use backdrop = "static" for a backdrop that does not dismiss on outside click (the previous behaviour of FALSE). - bs_input_group() and bs_floating_label() now raise an error when given an input whose Shiny binding lives on its container (bs_date_input(), bs_date_range_input(), bs_file_input(), bs_radio_input(), bs_checkbox_group_input()). Previously they silently emitted a dead control with no id, binding, or dependencies. - Layout constructors now validate their scales instead of emitting non-existent classes: bs_col() spans (1-12, "auto", TRUE), bs_row(cols=) (1-6, "auto"), gutters and stack gap (0-5), offset (0-11), order (0-5, "first", "last"), heading levels (1-6), bs_pagination_numbered(current=) (1..n), bs_color_input(value=) (#rrggbb), and bs_tabset(selected=) must match a panel value. - bs_notify_toast() requires plain-text body/title (they are rendered via textContent; tags now raise an error instead of displaying raw markup or [object Object]), and its ... must be empty. Bug fixes - Named arguments in ... are now applied to the documented element: the bs_dropdown() wrapper (they were rendered as visible page text), the bs_modal() root (they landed on .modal-body), and the bs_navbar()