Changes in version 0.2.0
Breaking changes
- TabContext.static() now follows the React convention for tab
state ownership. Pass defaultValue for uncontrolled tabs (the
wrapper owns and updates the active tab) and value for controlled
tabs (you own it; the value is honored on every render). The
previous value argument behaved as an uncontrolled seed, so existing
code should rename value to defaultValue:
# before
TabContext.static(value = "one", ...)
# after
TabContext.static(defaultValue = "one", ...)
Code that left value unchanged will become controlled and freeze on
the first tab (clicks fire but the wrapper no longer updates state)
unless an onChange writes the value back.
- removed the deprecated GridLegacy(), PigmentContainer(),
PigmentGrid() and PigmentStack() wrappers. These mapped to MUI APIs
that are no longer part of the supported @mui/material surface; use
Grid() (and Stack() / Container()) instead.
New features
- TabContext.static() gains a controlled mode: pass value together
with a writer that updates it (an onChange on TabList.static() /
TabContext.static(), or Tab(href = ...) links that change the URL)
to make an external source the source of truth. This enables
URL-bound, bookmarkable tabs via reactRouter::useParams(as =
"value", ...), cross-component tab synchronization, and programmatic
tab activation. See the Tabs vignette.
- TabContext.static() now emits a development console warning when it
is used in controlled mode (value supplied) without any onChange to
move the active tab -- the same guidance React gives for a
controlled with no handler -- pointing you to either add an
onChange or switch to defaultValue.
- new *.shinyInput() family of Shiny-wired input wrappers covering the
most commonly bound components (Autocomplete, BottomNavigation,
Button, Checkbox, Dialog, Drawer, IconButton, Input, FilledInput,
Fab, FormControlLabel, LoadingButton, Menu, MenuItem, Modal,
NativeSelect, OutlinedInput, Pagination, Radio, RadioGroup, Rating,
Select, Slider, Snackbar, StepButton, Switch, TabContext, TabList,
TabPanel, Tabs, TextField, ToggleButton, ToggleButtonGroup) and
matching update*.shinyInput() helpers.
- new *.triggerId() family for binding overlay components to an
existing DOM element by id, with no server logic required:
Dialog.triggerId(), Drawer.triggerId(), Menu.triggerId(),
Modal.triggerId(), Popover.triggerId(), SwipeableDrawer.triggerId().
- Autocomplete.shinyInput() now validates its arguments and warns on
conflicting renderInput / inputProps / child element combinations.
- new vignettes and gallery examples; the mui-template-dashboard
example is available as a live deployment on Posit Connect.
Documentation
- per-component reference pages and runnable @examplesIf interactive()
blocks added to the headline components (Button.shinyInput,
TextField.shinyInput, Slider.shinyInput, Autocomplete.shinyInput,
Dialog.triggerId, Drawer.triggerId, ThemeProvider, muiMaterialPage).
- new "AI-Assisted Development" and per-component vignettes.
Packaging
- bundle and metadata updated for an initial CRAN release:
- MUI Inc. and the Emotion team added to Authors@R as copyright
holders of the bundled JavaScript.
- new top-level LICENSE.note documenting third-party MIT-licensed
code shipped in inst/www/muiMaterial/.
- README now states that muiMaterial is an independent community
wrapper, not affiliated with or endorsed by MUI Inc.
- minimum R version bumped to R (>= 4.1) to match shiny.react and
modern Shiny.
- @mui/material updated to 9.0.0; @mui/lab tracks the upstream
9.0.0-beta.2 release (Material UI Lab is published as a beta channel
upstream — see https://mui.com/material-ui/about-the-lab/).
Internal
- improved JS bundling pipeline (webpack 5, exact-version pins,
automatic third-party license extraction via
license-webpack-plugin).
- muiMaterial S3 class with a print() method now applied to all
components for browsable preview in the R console.
- substantial internal refactor of R/components.R, R/inputs.R and the
Material UI Lab components.
Changes in version 0.1.3 (2026-03-15)
- BREAKING CHANGE in muiMaterialPage():
- remove materialSymbols argument.
- add new arguments to access Google Material Icons for use with
Icon().
- rename addFontRoboto to useFontRoboto.
- add triggerId functions for managing React internal states:
Drawer.triggerId(), Menu.triggerId(), SwipeableDrawer.triggerId().
- add muiMaterial S3 class to all components with a print() method for
browsable preview.
- fix Timeline components sourced from @mui/lab.
- fix Tab components (TabContext, TabList, TabPanel) sourced from
@mui/lab.
- move @mui/lab component code from lab.R into components.R and
inputs.R.
- update mui-template-dashboard example to use new R functions.
- add live Shiny app examples deployed on Posit Connect.
- refactor tests to use inherits() instead of class() for shiny.tag
checks.
- Update @mui/material and @mui/lab dependencies to their latest
version
- improve documentation
Changes in version 0.1.2 (2026-01-26)
- improve examples
- muiMaterialPage() gives access to Google icons (symbols) and Roboto
font.
- export muiMaterialDependency()
- improve internal file structure for ThemeProvider and
muiMaterialDependency.
Changes in version 0.1.0
- initial commit