- 8.1.0
- refactor(Record): port the plugin to definePlugin (#4449)
- refactor(Regions): drop an isRemoved check that cannot be true (#4424) by @edwbaker
- fix(Record): restore only overridden options and render the mic preview without a load() per tick (#4448)
- fix(WebAudio): mute through the gain value so custom routing survives (#4441)
- refactor(Spectrogram): extract resampling, label drawing and the worker client from spectrogramSetup (#4447)
- test(Zoom, Minimap): cover wheel/pinch zoom and minimap option branches (#4446)
- ci: enforce the lockfile, skip the build on install, gate releases on tests (#4445)
- test: tighten the coverage ratchet, silence jsdom media noise, fix doc drift (#4444)
- fix(WebAudio): only close an AudioContext the player created (#4442)
- fix(WaveSurfer): keep setOptions({ duration }) from throwing or downsampling (#4443)
- fix(Spectrogram): draw windowed segments where their audio is (#4426) by @edwbaker
- refactor(Record): skip allocating a window that is copied straight into another (#4425) by @edwbaker
- refactor(Hover): drop a disposer that scope.listen already provides (#4423) by @edwbaker
- refactor(Player): drop a repeated playbackRate check (#4422) by @edwbaker
- refactor(WebAudio): stop setting the rate on a just-replaced buffer node (#4421) by @edwbaker
- refactor(Timeline): collapse label-interval branches that return the same value (#4420) by @edwbaker
- refactor(Minimap): drop the isInitializing guard (#4419) by @edwbaker
- feat(Spectrogram ): add getOptions (#4418) by @Copilot