Upgrade notes for Shiny 1.8.0
Breaking changes
- Closed #3899: The JS function
Shiny.bindAll()
is now asynchronous. This change is driven by the recent push toward making dynamic UI rendering asynchronous, which is necessary for shinylive (and should’ve happened when it was first introduced in Shiny v1.7.5). The vast majority of existingShiny.bindAll()
uses should continue to work as before, but some cases may break if downstream code relies on it being synchronous (i.e., blocking the main thread). In this case, consider placing any downstream code in a.then()
callback (orawait
the result in aasync
function). (#3929)- Since
renderContent()
callsbindAll()
(after it inserts content), it now returns aPromise<void>
instead ofvoid
, which can be useful if downstream code needs to wait for the binding to complete.
- Since
New features and improvements
Updated
selectizeInput()
’s selectize.js dependency from v0.12.4 to v0.15.2. In addition to many bug fixes and improvements, this update also adds several new plugin options. (#3875)Shiny’s CSS styling (for things like
showNotification()
,withProgress()
,inputPanel()
, etc.), has been updated with bslib’s upcoming CSS-only dark mode feature in mind. (#3882, #3914)Default styles for
showNotification()
were tweaked slightly to improve accessibility, sizing, and padding. (#3913)Shiny inputs and htmlwidgets are no longer treated as draggable inside of
absolutePanel()
/fixedPanel()
withdraggable = TRUE
. As a result, interactions like zooming and panning now work as expected with widgets like plotly and leaflet when they appear in a draggable panel. (#3752, #3933)For
InputBinding
s, the.receiveMessage()
method can now be asynchronous or synchronous (previously it could only be synchronous). (#3930)
Bug fixes
fileInput()
no longer has unwanted round corners applied to thebuttonLabel
. (#3879)Fixed #3898:
wrapFunctionLabel()
no longer throws an error if thename
is longer than 10000 bytes. (#3903)