Changelog
Source:NEWS.md
rewind (development version)
- The redo button now says “Redo (Ctrl+Shift+Z or Ctrl+Y)” when the pointer rests on it. It said only “Redo (Ctrl+Shift+Z)” before.
Ctrl+Yhas always done a redo, but the button did not say so. - The description of the
shortcutsargument ofrewind_enable()now lists the three shortcuts, and says which one belongs to which system. - The demo application now names the redo shortcut in its hint.
rewind 0.2.0
CRAN release: 2026-08-21
-
rewind_disable()stops undo and redo for a session completely. It destroys each observer thatrewind_enable()made. It also clears the buttons and the rail in the browser. Userewind_pause()andrewind_resume()to stop capture for a short time. Userewind_disable()to stop it for the rest of the session. -
rewindno longer capturesfileInput(). Its value points to a temporary file on the server. Shiny deletes that file at the next upload. An old snapshot would thus point to a file that does not exist. - Fixed: a call to
rewind_pause()before the first reactive flush stopped capture for the rest of the session. A laterrewind_resume()did not start it again. This occurred, for example, with a call torewind_pause()immediately afterrewind_enable(), before any input changed. -
rewind_buttons(undo_label = NULL, redo_label = NULL)now setsaria-labelon the buttons. A button with an icon and no text thus has a correct accessible name. -
rewind_enable()inside amoduleServer()now has tests. The documents said “untested” before.
rewind 0.1.0
First release.
-
rewind_enable()captures the session inputs into an undo and redo history. It groups the changes by time. One movement of a slider is thus one step, and not forty steps. -
rewind_track()adds thereactiveValueson the server to the history. -
rewind_step()puts several changes into one entry with a label. -
rewind_buttons()andrewind_ui()give ready-made undo and redo controls, and a scrubbable history rail. - Keyboard shortcuts:
Ctrl/Cmd+Z,Ctrl/Cmd+Shift+Z, andCtrl+Y. They do nothing while the user types in a text field. - A restore uses the Shiny binding of each input. It does not use a fixed
update*Input()table. Inputs from other packages thus operate with no extra code.