color-mix() usage from the shipped
stylesheet. Select widget alpha colors are now precomputed as CSS custom
properties at render time for better compatibility with older embedded
browsers.glassSelect() and glassMultiSelect(), with
JavaScript keeping aria-expanded and
aria-selected in sync during interaction.glasstabs.csp_nonce option.forced-colors) CSS support
and RTL layout support for tabs and select widgets.glassTabsUI() inserted by
renderUI() or dashboard layouts after the initial page
boot.glassTabCondition(id, value) — generates the
correct JavaScript condition string for [shiny::conditionalPanel()]
without needing to remember the input[["id-active_tab"]]
key pattern.glasstabs_news() — prints the package changelog
to the R console.ROADMAP.md tracking planned features and known
limitations (not shipped in the package).glass_tab_theme() and glass_select_theme()
now have full @examples with interactive app snippets..gt-container no longer forces
max-width:960px or margin:48px auto — the
widget now behaves like a normal block element inside Shiny
layouts.--gt-halo-shadow CSS variable, replacing the harsh
dark drop shadow.runGlassExample() to launch any of the built-in
example apps directly from the R console
(runGlassExample("smoke-test"), etc.).icon argument to glassTabPanel() —
accepts any htmltools-compatible tag
(e.g. shiny::icon("table")). Renders with
gt-tab-icon / gt-tab-label spans so icon and
text can be styled independently.disableGlassTab() and
enableGlassTab() — gray out a tab without hiding it.
Completes the visibility/disabled/removal trio alongside
showGlassTab() / hideGlassTab().updateGlassTabBadge() — set a numeric count badge
on any tab button. Pass count = 0 or
count = NA to hide the badge. Values above 99 display as
"99+".glassTabsServer() now integrates with Shiny’s URL
bookmarking: the active tab is automatically saved and restored when
enableBookmarking = "url" is set on the app. Opt out per
widget with bookmark = FALSE.glassTabsOutput() /
renderGlassTabs() for server-driven tab rendering. The
JavaScript engine re-initialises automatically after each render via a
scoped shiny:value listener, so no manual
glasstabs_reinit calls are needed.glassTabsUI() now errors early on duplicate
glassTabPanel() values, reporting the offending value(s) by
name.glassTabsUI() gains a compact = FALSE
argument. Setting compact = TRUE applies the
.gt-compact CSS modifier which reduces margins, tab-link
padding, font size, and content area padding — ideal for embedding
inside bs4Dash cards or any tight dashboard layout.glassTabsServer() emits a warning() when
the id argument contains "-", which is the
most common sign that ns("tabs") was passed instead of the
bare "tabs" id. The warning includes corrective
guidance..gt-tab-disabled, .gt-tab-icon,
.gt-tab-label, and .gt-tab-badge rules. Badges
adapt their background to the active halo colour via the existing CSS
custom property.var(--gt-xxx, fallback) instead of being hardcoded — this
was the root cause of light theme appearing invisible. Light theme
defaults were also strengthened for better contrast.shiny:value listener limits bootAll re-initialisation
to outputs that actually contain glasstabs elements, so ordinary Shiny
outputs are unaffected.inst/cheatsheet/glasstabs-cheatsheet.tex — a
printable four-column LaTeX reference card covering the full API, module
pattern, bs4Dash integration, theming, and common gotchas.vignettes/cheatsheet.Rmd) extended
with new sections: “Tabs inside a Shiny module”, “Dynamic tab values and
selected”, “Tabs inside bs4Dash”, and updated common gotchas.@examples,
and cross-links.updateGlassTabsUI() for programmatic tab
switching from the server.showGlassTab() and hideGlassTab()
for dynamically showing and hiding tabs at runtime.appendGlassTab() and
removeGlassTab() for adding and removing tabs at
runtime.glassTabsUI() now validates selected
against the available glassTabPanel() values and errors
early on invalid tab ids.glassTabsServer() is
populated on first render.Opening a dropdown now closes any other open glasstabs dropdown, fixing a visual stacking issue where multiple dropdowns appeared simultaneously.
Improved widget lifecycle in dynamic UI (renderUI(),
conditionalPanel()). Widgets initialize more reliably and
clean up properly when removed.
Widgets now emit their initial value to Shiny immediately after
rendering, fixing timing issues with conditionalPanel() and
dynamic UI.
JavaScript engine refactored to use internal state instead of DOM scanning. No changes to the R API — all existing code works without modification.
Added scroll containers for long option lists, debounced search,
and .gt-loading / .gt-disabled CSS utility
classes.
glassSelect(), an animated single-select dropdown
for Shiny.updateGlassSelect() for server-side updates to
choices and selection.glassSelectValue() as a convenience reactive
helper for reading the selected value.updateGlassMultiSelect() for server-side updates
to choices, selection, and checkbox style.glassMultiSelectValue() as a convenience reactive
helper for reading selected values and active style.label support to
glassMultiSelect().all_label support to control the
trigger text shown when all choices are selected.glassSelect() and
glassMultiSelect() more closely with standard Shiny input
behavior.session$sendInputMessage() update patterns.glassMultiSelect() default behavior
where selected = NULL initializes all choices as
selected."filled"
multi-select style.glassSelect().glassSelect().updateGlassMultiSelect() and
glassMultiSelectValue().glassSelect(),
updateGlassSelect(), and
glassSelectValue().glassMultiSelect() server-side
updates and helper utilities.Initial release.
glassTabsUI() — animated glassmorphism-style tab
navigation with a sliding glass halo and transfer trace between
tabs.glassTabPanel() — defines a single tab button and its
content pane.glassTabsServer() — reactive helper that tracks the
active tab value.glass_tab_theme() — custom color theme for
glassTabsUI() with eight independent handles:
tab_text, tab_active_text,
halo_bg, halo_border, content_bg,
content_border, card_bg,
card_text."dark" (default) and "light"
presets for glassTabsUI().bs4Dash compatibility via
wrap = FALSE.glassMultiSelect() — dropdown filter with live search,
select-all with indeterminate state, and three checkbox indicator
styles: "checkbox", "check-only", and
"filled".glassFilterTags() — tag-pill display area that stays in
sync with a glassMultiSelect() automatically via
JavaScript; clicking × on a pill deselects that option.glass_select_theme() — custom color theme with four
handles: bg_color, border_color,
text_color, accent_color."dark" and "light" presets for
glassMultiSelect().show_style_switcher, show_select_all,
show_clear_all flags to hide UI chrome (all default
TRUE)."filled" style via
the hues argument (auto-assigned if omitted).useGlassTabs() — injects CSS and JavaScript via
htmltools::htmlDependency, which is deduplicated
automatically by Shiny.color-mix()), ensuring compatibility with Shiny’s embedded
browser.id.