---
title: "Ecosystem compatibility"
output: rmarkdown::html_vignette
vignette: >
  %\VignetteIndexEntry{Ecosystem compatibility}
  %\VignetteEngine{knitr::rmarkdown}
  %\VignetteEncoding{UTF-8}
---

```{r, include = FALSE}
knitr::opts_chunk$set(collapse = TRUE, comment = "#>", eval = FALSE)
```

shinyglass is a **theme layer**, not a universal skin. It targets Bootstrap 5 /
bslib surfaces first, then overlays denser dashboard stacks where practical.

# Support matrix (as of 0.2)

| Stack | Status | Notes |
|-------|--------|-------|
| `fluidPage` / `navbarPage` | Supported | Drop-in `theme = glass_theme()` |
| bslib `page_navbar` / `nav_menu` | Supported | See `chrome-kitchen-sink.R` |
| bslib `page_sidebar` / `layout_sidebar` | Supported | Floating glass sidebar; nested layouts stay in-flow (0.1.1+) |
| bslib cards, value boxes, navsets, accordion | Supported | Tooltip / popover / toast use the glass menu surface |
| DT | Supported | Visible `.page-link` chips (not li-only) |
| reactable | Supported | Avoids double-framing the html-output |
| **gt** | Supported | Table / heading / stripe / summary chrome |
| leaflet | Supported | Map container transparency |
| **plotly** | Good | Glass frame + modebar; set `paper_bgcolor` transparent in R for best dark |
| shinyWidgets (common inputs) | Good | Slider tooltips / noUiSlider chips |
| shinydashboard / **bs4Dash** / **shinydashboardPlus** | Overlay | Glass header/sidebar/boxes/controlbar/dropdowns; layout stays AdminLTE |
| teal | Good | Use `options(teal.bs_theme = glass_theme())` |
| **waiter** / shinybusy / loaders | Good | Blurred overlays, not solid white scrims |
| **shinyalert** / SweetAlert2 | Good | Popup uses glass menu surface |
| rhandsontable | Partial | Frame + cell ink; core grid still third-party |
| echarts4r / highcharter / apex | Partial | Host wrapper glass; chart internals set in R |
| Bootstrap 3-only apps | Limited | Theme is BS5 via bslib |

# Layout contract

- Open bslib sidebars **reserve** space in main so content is not buried under
  the floating chrome.
- Nested `layout_sidebar()` does **not** double-float.
- AdminLTE left sidebars keep fixed AdminLTE geometry; glass is visual overlay
  only.

# Examples

```r
# overlays: datepicker, notifications, showModal, accordion, navbar menu
shiny::runApp(system.file("examples", "chrome-kitchen-sink.R", package = "shinyglass"))

# plotly + gt (+ waiter if installed)
shiny::runApp(system.file("examples", "plotly-gt-demo.R", package = "shinyglass"))

# denser AdminLTE (requires shinydashboardPlus)
shiny::runApp(system.file("examples", "shinydashboardPlus-glass-demo.R", package = "shinyglass"))
```

Dual-theme contrast audit (optional ecosystem apps skip if packages missing):

```r
Rscript inst/scripts/audit-glass-contrast.R --apps=demo,dashboard,inputs,plotly_gt,chrome
```

# Tips

- Prefer bslib page functions when you can — glass was designed around them.
- For plotly dark mode, pass transparent `paper_bgcolor` / `plot_bgcolor` in
  `layout()` (see `plotly-gt-demo.R`); CSS handles the modebar.
- For dark mode in dense AdminLTE apps, re-check value/info box contrast after
  switching preset at runtime.
- `preset = "auto"` is ideal for demos; pin `"light"` or `"dark"` for
  screenshots and tests.
