Added complete navbar item helpers for safer
bs4DashNavbar(rightUi = ...) usage:
dash_nav_help_item()
dash_nav_refresh_item()
dash_nav_status_item()
Added dash_nav_status_badge() for compact navbar
status indicators.
Added validate_bs4dash_navbar() to catch common
custom navbar structure mistakes, including <li>
children missing the required "dropdown" class.
Kept dash_nav_help_button() and
dash_nav_refresh_button() as lower-level button builders
for custom wrappers.
Added dash_brand_options() and
dash_titles_from() so shared brand configuration can be
reused across app families without growing each
dash_titles() call.
Added prototype top-navigation support with
use_dash_topnav() and
use_bs4Dashkit_core(layout = "topnav"). The sidebar menu
remains the source of truth and is mirrored into the navbar so
bs4TabItems(), input$sidebar,
updateTabItems(), and bookmarking can keep using native
{bs4Dash} wiring.
Top-navigation tabs can now be aligned left, center, or right
with align / topnav_align, and spaced with
gap / topnav_gap.
Added dash_topnav_options() so production apps can
pass one compact topnav = ... object to
use_bs4Dashkit_core(layout = "topnav") instead of a long
run of topnav_* arguments.
Top-navigation mode now includes an animated active underline,
mobile hamburger behavior, optional pill and compact tab styles,
optional More overflow, centered title auto-compact/hide
behavior, keyboard navigation, optional active page-title sync, a Shiny
click event at input$bs4dashkit_topnav, and a debug outline
mode.
use_bs4Dashkit_core() and
use_dash_sidebar_behavior() now accept explicit CSS lengths
for topbar_h, collapsed_w, and
expanded_w, such as "56px",
"4.25rem", and "270px". Existing numeric
values remain supported with their historical default units.
Removed the digest import; scoped brand CSS now uses
a tiny internal ID counter.
Updated README, vignettes, packaged examples, and pkgdown reference navigation to show the complete navbar item helpers and top-navigation prototype as the preferred API.
Updated examples to avoid wrapping helpers that already return
navbar <li> elements.
Hardened generated JavaScript by encoding dynamic sidebar brand strings as JSON literals.
Added validation for CSS values used in theme, brand, and sidebar helpers before they are emitted into HTML/style blocks.
Reused sidebar dimension validation for direct
use_dash_sidebar_behavior() calls.
Removed unused package metadata and cleaned unnecessary source comments.
Added regression tests for JavaScript escaping, CSS validation, and direct sidebar dimension validation.
Added a packaged hardening regression example app that exercises JavaScript label escaping, CSS validation, sidebar dimensions, runtime DOM tracing, and visual theme fixtures.
dash_titles() now accepts simple
shiny::icon() inputs in addition to character icon names,
and emits a more targeted error when icon= receives an
unsupported object.
Added sidebar brand text controls for collapsed and expanded
states: collapsed_text_size,
expanded_text_size, collapsed_text_weight, and
expanded_text_weight.
Added bs4dashkit_theme_presets() to list shipped
theme presets and improved unknown-preset errors to enumerate valid
choices.
Polished the built-in theme presets so they style navbar,
sidebar, footer, link, and status colors more coherently, and extended
bs4dashkit_theme_presets(values = TRUE) to expose the
shipped preset tokens for inspection and customization.
Added bs4dashkit_example_app() as a minimal runnable
example of the recommended dash_titles() +
use_bs4Dashkit_core() workflow.
Added bs4dashkit_demo_app() plus a packaged
inst/examples/real-shiny-app/app.R example for
interactively testing sidebar brand states, hover-expand behavior,
presets, navbar controls, and footer styling together. The packaged
example now contains the full standalone app code directly.
Added inst/examples/sidebar-smoke-test/app.R as a
minimal sidebar verification app and
inst/examples/test-all/app.R as a heavier end-to-end stress
test for branding, sidebar, navbar, theme, and footer features.
Refined sidebar brand state handling so hover-expanded sidebars
use the expanded text rules consistently, brand_text is
treated as the default expanded label, and icon-requested states fall
back more gracefully when no icon is supplied.
Fixed reactive sidebar mode updates by clearing stale collapsed/expanded body classes before applying the current mode and cleaning up old observers and hover listeners before installing new ones.
Fixed collapsed and expanded sidebar text sizing and weight
controls so live updates consistently win over AdminLTE defaults, and
centered the collapsed "text-only" label layout.
Allowed brand_text = NULL for fully icon-only brands
when both sidebar states are "icon-only" and an icon or
image brand is supplied, with a browser-title fallback warning when
app_name is omitted.
Improved dash_nav_title() centering so the title
stays visually centered as the viewport and surrounding navbar content
change, and added left/center/right alignment controls to the
interactive demo.
Updated README and vignettes to match the shipped API:
removed references to the non-existent
dash_nav_logout_button()
aligned documentation with the current preset names
"professional", "modern", and
"dark-lite"
clarified preset discoverability and the recommended body-level
placement of use_bs4Dashkit_core()
clarified how brand_text,
collapsed_text, and expanded_text interact
across collapsed, hover-expanded, and expanded sidebar states
documented the textless icon-only brand path, the automatic
sidebar mirroring of bs4DashNavbar(title = ttl$brand), and
the shipped example apps for smoke testing and full feature
testing
Expanded test coverage for:
icon normalization in dash_titles()
targeted validation errors for invalid icon objects
collapsed and expanded sidebar brand text styling controls
sidebar mode class resets and cleanup of reactive hover/state listeners
theme preset discovery and preset validation errors
the exported minimal example app helper
Added dash_titles() as a unified constructor for
brand and sidebar configuration. Returns $app_name,
$brand, and $deps for placement in
bs4DashPage(), bs4DashNavbar(), and
bs4DashBody().
Added use_bs4Dashkit_core() as the recommended entry
point for injecting dependencies, applying a theme preset, and
configuring sidebar behavior.
Added theme support via CSS custom properties:
Presets: "professional", "modern", and
"dark-lite"
use_dash_theme() for direct CSS variable
overrides
use_dash_theme_preset() for applying named
presets
bs4dashkit_theme_presets() for inspecting available
presets
Added configurable sidebar brand modes:
“icon-only”, "icon-text", and
"text-only"
Independent configuration for collapsed and expanded states
Added use_dash_sidebar_behavior() for configurable collapsed width, expanded width, and topbar height.
Added use_dash_sidebar_brand_divider() for optional
brand/menu separation.
Added brand visual effects ("glow",
"shimmer", "emboss") and two-color gradients
via dash_titles().
Added support for image-based brand icons via
icon_img and icon_shape.
Added navbar utilities:
dash_nav_title()
dash_nav_item()
dash_nav_refresh_button()
dash_nav_help_button()
dash_user_menu()
Added dash_footer()with independently positional
logo and text elements.
Added global options:
bs4Dashkit.sidebar.collapsed
bs4Dashkit.sidebar.expanded
bs4Dashkit.brand_divider
bs4Dashkit.theme_preset
bs4Dashkit.accent