TabContext.static() now follows the React <input> 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.
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 <input> 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.
@examplesIf interactive()
blocks added to the headline components (Button.shinyInput,
TextField.shinyInput, Slider.shinyInput, Autocomplete.shinyInput,
Dialog.triggerId, Drawer.triggerId, ThemeProvider, muiMaterialPage).Authors@R as copyright holders of
the bundled JavaScript.LICENSE.note documenting third-party MIT-licensed code
shipped in inst/www/muiMaterial/.muiMaterial is an independent community wrapper,
not affiliated with or endorsed by MUI Inc.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/).license-webpack-plugin).muiMaterial S3 class with a print() method now applied to all components
for browsable preview in the R console.R/components.R, R/inputs.R and the
Material UI Lab components.muiMaterialPage():
materialSymbols argument.Icon().addFontRoboto to useFontRoboto.triggerId functions for managing React internal states: Drawer.triggerId(), Menu.triggerId(), SwipeableDrawer.triggerId().muiMaterial S3 class to all components with a print() method for browsable preview.@mui/lab.TabContext, TabList, TabPanel) sourced from @mui/lab.@mui/lab component code from lab.R into components.R and inputs.R.mui-template-dashboard example to use new R functions.inherits() instead of class() for shiny.tag checks.muiMaterialPage() gives access to Google icons (symbols) and Roboto font.muiMaterialDependency()