From b02fc7a5c6828a54213221a37bda7adaf2b80f32 Mon Sep 17 00:00:00 2001 From: Jordan Eldredge Date: Sat, 12 Jul 2025 23:44:21 -0700 Subject: [PATCH] Update docs --- .../docs/05_features/02_mikdrop.md | 2 +- .../docs/06_API/02_webamp-constructor.md | 12 +- .../docs/06_API/03_instance-methods.md | 44 +-- packages/webamp-docs/docs/12_changelog.md | 284 ++++++++++++++++++ packages/webamp/CHANGELOG.md | 277 +---------------- 5 files changed, 316 insertions(+), 303 deletions(-) create mode 100644 packages/webamp-docs/docs/12_changelog.md diff --git a/packages/webamp-docs/docs/05_features/02_mikdrop.md b/packages/webamp-docs/docs/05_features/02_mikdrop.md index 0e8a644a..cded1ad8 100644 --- a/packages/webamp-docs/docs/05_features/02_mikdrop.md +++ b/packages/webamp-docs/docs/05_features/02_mikdrop.md @@ -2,7 +2,7 @@ Webamp uses [Butterchurn](https://butterchurnviz.com/) to provide a Milkdrop visualizer. Butterchurn is a JavaScript port of the original Milkdrop visualizer, and it can run in any modern web browser. -To use Butterchurn in Webamp, you need to provide the [`__butterchurnOptions`](../06_API/02_webamp-constructor.md#__butterchurnoptions) configuration option when creating a new `Webamp` instance. +The [next release](../12_changelog.md#unreleased) of Webamp will includes a `webamp/butterchurn` entrypoint that includes Butterchurn, so you can use it to create a Webamp instance with Milkdrop visualizer enabled. ## Hotkeys diff --git a/packages/webamp-docs/docs/06_API/02_webamp-constructor.md b/packages/webamp-docs/docs/06_API/02_webamp-constructor.md index db21561d..a2db439e 100644 --- a/packages/webamp-docs/docs/06_API/02_webamp-constructor.md +++ b/packages/webamp-docs/docs/06_API/02_webamp-constructor.md @@ -71,7 +71,7 @@ const webamp = new Webamp({ ### `windowLayout` -**Since** 2.0.0 +**Since** [v2.0.0](../12_changelog.md#200) An object representing the initial layout of the windows. Valid keys are `main`, `equalizer`, `playlist`, and `milkdrop`. Omitted windows will start hidden. @@ -109,7 +109,7 @@ const webamp = new Webamp({ ### `enableDoubleSizeMode` -_Since 2.0.0_ +**Since** [v2.0.0](../12_changelog.md#200) A boolean indicating if double size mode should be enabled. **Default:** `false`. @@ -191,7 +191,7 @@ const webamp = new Webamp({ ### `handleAddUrlEvent` -**Since** 1.4.1 +**Since** [v1.4.1](../12_changelog.md#141) An optional function to extend the behavior of the button "ADD URL". The function should return an optional array of [`Track`](01_track.md) objects or `null`. @@ -208,7 +208,7 @@ const webamp = new Webamp({ ### `handleLoadListEvent` -**Since** 1.4.1 +**Since** [v1.4.1](../12_changelog.md#141) An optional function to extend the behavior of the playlist button "LOAD LIST". The function should return an optional array of [`Track`](01_track.md) objects or `null`. @@ -225,7 +225,7 @@ const webamp = new Webamp({ ### `handleSaveListEvent` -**Since** 1.4.1 +**Since** [v1.4.1](../12_changelog.md#141) Provide a way to extend the behavior of the playlist button SAVE LIST. ```ts @@ -239,7 +239,7 @@ const webamp = new Webamp({ ### `enableMediaSession` -**Since** 2.1.3 +**Since** [Unreleased](../12_changelog.md#unreleased) Have Webamp connect to the browser's [Media Session API](https://developer.mozilla.org/en-US/docs/Web/API/Media_Session_API), if the browser supports it. diff --git a/packages/webamp-docs/docs/06_API/03_instance-methods.md b/packages/webamp-docs/docs/06_API/03_instance-methods.md index cc18fcd2..d9d3734d 100644 --- a/packages/webamp-docs/docs/06_API/03_instance-methods.md +++ b/packages/webamp-docs/docs/06_API/03_instance-methods.md @@ -48,7 +48,7 @@ webamp.setTracksToPlay([ Play the previous track. -**Since** 1.3.0 +**Since** [v1.3.0](../12_changelog.md#130) ```ts webamp.previousTrack(); @@ -58,7 +58,7 @@ webamp.previousTrack(); Play the next track. -**Since** 1.3.0 +**Since** [v1.3.0](../12_changelog.md#130) ```ts webamp.nextTrack(); @@ -68,7 +68,7 @@ webamp.nextTrack(); Seek forward n seconds in the current track. -**Since** 1.3.0 +**Since** [v1.3.0](../12_changelog.md#130) ```ts webamp.seekForward(10); @@ -78,7 +78,7 @@ webamp.seekForward(10); Seek backward n seconds in the current track. -**Since** 1.3.0 +**Since** [v1.3.0](../12_changelog.md#130) ```ts webamp.seekBackward(10); @@ -88,7 +88,7 @@ webamp.seekBackward(10); Seek to a given time within the current track. -**Since** 1.4.0 +**Since** [v1.4.0](../12_changelog.md#140) ```ts webamp.seekToTime(15.5); @@ -98,7 +98,7 @@ webamp.seekToTime(15.5); Get the current "playing" status. The return value is one of: `"PLAYING"`, `"STOPPED"`, or `"PAUSED"`. -**Since** 1.4.0 +**Since** [v1.4.0](../12_changelog.md#140) ```ts const isPlaying = webamp.getMediaStatus() === "PLAYING"; @@ -110,7 +110,7 @@ Get the current "playing" status of the player. Similar to `getMediaStatus()`, b The return value is one of: `"PLAYING"`, `"STOPPED"`, `"PAUSED"`, `"ENDED"`, or `"CLOSED"`. -**Since** 2.1.3 +**Since** [Unreleased](../12_changelog.md#unreleased) ```ts const playerStatus = webamp.getPlayerMediaStatus(); @@ -125,7 +125,7 @@ if (playerStatus === "ENDED") { Pause the current track. -**Since** 1.3.0 +**Since** [v1.3.0](../12_changelog.md#130) ```ts webamp.pause(); @@ -135,7 +135,7 @@ webamp.pause(); Play the current track. -**Since** 1.3.0 +**Since** [v1.3.0](../12_changelog.md#130) ```ts webamp.play(); @@ -145,7 +145,7 @@ webamp.play(); Stop the currently playing audio. Equivalent to pressing the "stop" button. -**Since** 1.4.0 +**Since** [v1.4.0](../12_changelog.md#140) ```ts webamp.stop(); @@ -155,7 +155,7 @@ webamp.stop(); Set volume from 0 - 100. -**Since** 1.3.0 +**Since** [v1.3.0](../12_changelog.md#130) ```ts webamp.setVolume(75); @@ -167,7 +167,7 @@ Set the current track to a specific track in the playlist by zero-based index. Note: If Webamp is currently playing, the track will begin playing. If Webamp is not playing, the track will not start playing. You can use `webamp.pause()` before calling this method or `webamp.play()` after calling this method to control whether the track starts playing. -**Since** 2.1.0 +**Since** [v2.1.0](../12_changelog.md#210) ```ts // Play the third track in the playlist @@ -178,7 +178,7 @@ webamp.setCurrentTrack(2); Get the current playlist in order. -**Since** 2.1.0 +**Since** [v2.1.0](../12_changelog.md#210) ```ts const tracks = webamp.getPlaylistTracks(); @@ -189,7 +189,7 @@ console.log(`Playlist has ${tracks.length} tracks`); Check if shuffle is enabled. -**Since** 2.1.0 +**Since** [v2.1.0](../12_changelog.md#210) ```ts if (webamp.isShuffleEnabled()) { @@ -201,7 +201,7 @@ if (webamp.isShuffleEnabled()) { Toggle shuffle mode between enabled and disabled. -**Since** 2.1.3 +**Since** [Unreleased](../12_changelog.md#unreleased) ```ts webamp.toggleShuffle(); @@ -211,7 +211,7 @@ webamp.toggleShuffle(); Check if repeat is enabled. -**Since** 2.1.0 +**Since** [v2.1.0](../12_changelog.md#210) ```ts if (webamp.isRepeatEnabled()) { @@ -223,7 +223,7 @@ if (webamp.isRepeatEnabled()) { Toggle repeat mode between enabled and disabled. -**Since** 2.1.3 +**Since** [Unreleased](../12_changelog.md#unreleased) ```ts webamp.toggleRepeat(); @@ -297,13 +297,13 @@ unsubscribe(); Equivalent to selecting "Close" from Webamp's options menu. Once closed, you can open it again with `.reopen()`. -**Since** 1.4.1 +**Since** [v1.4.1](../12_changelog.md#141) ### `reopen(): void` After `.close()`ing this instance, you can reopen it by calling this method. -**Since** 1.3.0 +**Since** [v1.3.0](../12_changelog.md#130) ```ts const icon = document.getElementById("webamp-icon"); @@ -332,7 +332,9 @@ unsubscribe(); Updates the skin used by the Webamp instance. Note that this does not happen immediately. If you want to be notified when the skin load is complete, use `.skinIsLoaded()`, which returns a promise which you can await. -**Since** 1.4.1 +**Since** [v1.4.1](../12_changelog.md#141) + +````ts ### `skinIsLoaded(): Promise` @@ -342,7 +344,7 @@ Returns a promise that resolves when the skin is done loading. const start = Date.now(); await webamp.skinIsLoaded(); console.log(`The skin loaded in ${Date.now() - start}`); -``` +```` ### `dispose(): void` diff --git a/packages/webamp-docs/docs/12_changelog.md b/packages/webamp-docs/docs/12_changelog.md new file mode 100644 index 00000000..e81b456d --- /dev/null +++ b/packages/webamp-docs/docs/12_changelog.md @@ -0,0 +1,284 @@ +# Changelog + +## Unreleased + +_These changes are not yet published to NPM with an official version number._ + +:::tip +If you want access to the changes in this section before they are officially released you can do `npm install webamp@main`. +::: + +### Improvements + +- Added new `webamp/butterchurn` entrypoint which includes Milkdrop window by default. +- Added new `Webamp` instance methods: + - [`webamp.toggleShuffle`](./06_API/03_instance-methods.md#toggleshuffle-void) + - [`webamp.toggleRepeat`](./06_API/03_instance-methods.md#togglerepeat-void) + - [`webamp.getPlayerMediaStatus`](./06_API/03_instance-methods.md#getmediastatus-mediastatus--null) +- Add new config option [`enableMediaSession`](./06_API/02_webamp-constructor.md#enablemediasession) to allow Webamp to connect to the browser's Media Session API. This enables OS/hardware level media controls like play/pause/next/previous. +- Ensure the promise returned from [`renderWhenReady`](./06_API/03_instance-methods.md#renderwhenreadydomnode-htmlelement-promisevoid) only resolves after the Webamp instance has been fully mounted and inserted into the DOM. Previously it resolved after the DOM node was created but before it was inserted into the DOM. +- Made Redux state fully serializable. + +### Bug Fixes + +- Fix bug where scrolling the main window or playlist window would change the volume but also (incorrectly) scroll the page. +- Fix bug where scrolling the playlist window would change the volume instead of scrolling the playlist. +- Fix bug where resizing the window such that the current layout cannot fit on the page, while also scrolled down the page, would cause the layout to be recentered out of view. +- Avoid a console log from Redux Dev Tools. + +## 2.1.2 + +:::info +This is the current version of Webamp. +::: + +### Bug Fixes + +- Avoid opening Milkdrop window when no window layout is provided. +- Work around issue where setImmediate was not accessible to JSZip when parsing skins. + +## 2.1.0 + +### Bug Fixes + +- Fixed "Generate HTML Playlist" feature, which was accidentally broken in 2.0.0. + +### Improvements + +- Improve skin parsing performance and avoid Chrome console warning by adding `willReadFrequently` to canvas contexts. +- Define an explicit `IMedia` interface for custom media implementations, which allows for better type checking and documentation. +- Added new `Webamp` instance methods: + - [`webamp.isShuffleEnabled`](./06_API/03_instance-methods.md#isshuffleenabled-boolean) + - [`webamp.isRepeatEnabled`](./06_API/03_instance-methods.md#isrepeatenabled-boolean) + - [`webamp.setCurrentTrack`](./06_API/03_instance-methods.md#setcurrenttrackindex-number-void) + - [`webamp.getPlaylistTracks`](./06_API/03_instance-methods.md#getplaylisttracks-playlisttrack) + +## 2.0.1 + +### Bug Fixes + +Fixed incorrectly built artifacts. + +## 2.0.0 + +_Broken release. Use 2.0.1 instead._ + +### Features + +- Allow a single mouse drag across the EQ to set all values [#1180](https://github.com/captbaritone/webamp/pull/1180) +- Configure the initial layout of windows -- size, position, openness, shade mode -- when constructing a Webamp instance. See `windowLayout` in the docs for more information. +- Configure if "double size mode" should be enabled when constructing a Webamp instance. See `enableDoubleSizeMode` in the docs for more information. +- Optically allow users to lazily load heavy dependencies like JSZip and music-metadata-browser with the `webamp/lazy` entry point. +- Include source maps for non-minified bundles. + +### Bug Fixes + +- Fix bug where track position slider could get stuck on mobile. [PR](https://github.com/captbaritone/webamp/pull/1253) + +### Internal Improvements: + +- Upgrade to React 18, React Redux, 8 and Redux 4.1 +- Bundle with Rollup instead of Webpack +- Build public Typescript directly from source annotations. +- We no longer transform object spreads since they have broad support in browsers. + +## 1.5.0 + +### Features + +- Support `.ani` cursors in skins [#1035](https://github.com/captbaritone/webamp/pull/1035), [blog post](https://jordaneldredge.com/blog/rendering-animated-ani-cursors-in-the-browser/). +- Improved support for mobile/touch screen interaction: volume, balance and position sliders, marquee, playlist and window dragging/resizing/focusing. [#1098](https://github.com/captbaritone/webamp/pull/1098)/[#1099](https://github.com/captbaritone/webamp/pull/1099) + +### Bug Fixes + +- Fix a number of edge cases where the close and minimize buttons in the equalizer window could render the wrong sprite [#1046](https://github.com/captbaritone/webamp/pull/1046) +- Fix a bug where unminified bundle was accidentally minified. +- Treat skin files with forward slashes in their filename as directories [#1052](https://github.com/captbaritone/webamp/pull/1052) +- Fix a bug where the Milkdrop window could not be moved in some cases [#1068](https://github.com/captbaritone/webamp/pull/1068) +- Fix a bug where the visualizer in the Playlist window was not hidden when audio was stopped. [#1072](https://github.com/captbaritone/webamp/pull/1072) +- Fix a bug where the marquee was one pixel too narrow [#1087](https://github.com/captbaritone/webamp/pull/1087) +- Fix a bug that was preventing the "Misc options" playlist submenu from opening. [c9fe24](https://github.com/captbaritone/webamp/commit/c9fe24daec32d23ac675f57e3c37854e5ecffbde) +- Rename the `.status` class to `.webamp-status` to avoid potential conflicts with host site. [#1116](https://github.com/captbaritone/webamp/pull/1116) + +## 1.4.2 + +### Bug Fixes + +- Add `webamp.close()` method to public TypeScript types. + +## 1.4.1 + +### Features + +- New Webamp instance method: `.setSkinFromUrl(url)`. See docs for more details. +- New Webamp instance method: `.close()`. See docs for more details. + +### Bug Fixes + +- Fix a bug where skins missing some images would fail to load [2e8392](https://github.com/captbaritone/webamp/commit/2e83920ca1597ad9704f01cc950d59a52c25635c) +- Clicking on the lightning icon in the main window now correctly opens our about page in a new tab [#794](https://github.com/captbaritone/webamp/pull/794) +- Skin `.ini` files can use `=` as a comment separator [577b5e3](https://github.com/captbaritone/webamp/commit/577b5e3c177f2f3ee06f9fbc6aac212adfbbc8c8) +- We nolonger cycle Milkdrop presets when media is not playing [#799](https://github.com/captbaritone/webamp/pull/799) +- Guard against some kinds of malformed `region.txt` files [0bd8b0](https://github.com/captbaritone/webamp/commit/0bd8b09ecff9f00873fc13dcd2a5662bf3efff61) + +## 1.4.0 + +### Features + +- Added optional configuration option `handleTrackDropEvent` which lets you decide how drop events get converted into tracks. +- New Webamp instance methods: `.stop()`, `.getMediaStatus()`, and `.seekToTime(seconds)`. See docs for more details. +- Windows are now layered in the order in which they were focused ([5ee1a4](https://github.com/captbaritone/webamp/commit/5ee1a4f7b024d9e667c41d24c961404e463009c4)) +- When focusing something other than Webamp, it's now possible for no windows to be selected ([6132ac](https://github.com/captbaritone/webamp/commit/6132acdf2cd42b56bf757fa101fc08203e84fd67)) + +### Bug Fixes: + +- Fix a bug where context menus could appear in the wrong location ([95db2d](https://github.com/captbaritone/webamp/commit/95db2d08b6b189f5b9da577d23aca44b04c462a8)) +- Fix a bug where pressing next/previous when stopped would play the track ([#740](https://github.com/captbaritone/webamp/issues/730)) +- Fix a bug where `webamp.dispose` would error if the `#webamp` node had been reparented to anything other than `document.body`. +- Fix a bug where tracks dropped in the main window were not autoplayed ([f8167d](https://github.com/captbaritone/webamp/commit/f8167dd32209e1a71958190abc037df79642a2cb)) + +### Internal Improvements: + +- Upgraded [React Redux](https://github.com/reduxjs/react-redux) ([c3c3ad](https://github.com/captbaritone/webamp/commit/c3c3ad69abacdc34b58f3385b39b2634e9271590)) +- Several improvements to the performance of rendering Redux updates ([c75214](https://github.com/captbaritone/webamp/commit/c75214dcd7475b27f24c159cda26117a143ff740), [73f87b](https://github.com/captbaritone/webamp/commit/73f87be7c34acf5d0d5227a2a1b0e9718da11875), [4322aa](https://github.com/captbaritone/webamp/commit/4322aade4b5a60926c280e1807c4592cf915b497), [e89aa2](https://github.com/captbaritone/webamp/commit/e89aa266121ba7f890b96351d2da46314b7589e7),) + +## 1.3.1 + +### Bug Fixes: + +- Fix issue where `music-metadata-browser` was not imported correctly, and id3 tags could not be read. ([324fc2](https://github.com/captbaritone/webamp/commit/324fc29ca6c94fa54091608323842ba0604e0b4c)) + +## 1.3.0 + +This release is far overdue. In the last six months we've made a huge number of improvements to Webamp. + +We've fixed multiple longstanding bugs and continued to inch closer to pixel-perfect parity with Winamp. We've added several methods which make it easier to use Webamp in your project. In addition, we've continued to invest in the code by refactoring code to make it more maintainable, and converting the entire project from vanilla JavaScript to TypeScript which should help reduce the number of "dumb" bugs. + +See a full list below: + +### Features: + +- Added methods to the webamp instance to control playback: + - `webamp.play()` + - `webamp.pause()` + - `webamp.previousTrack()` + - `webamp.nextTrack()` + - `webamp.seekForward(seconds)` + - `webamp.seekBackward(seconds)` +- Our ID3 parsing library [jsmediatags](https://github.com/aadsm/jsmediatags) has been replaced by [music-metadata-browser](https://www.npmjs.com/package/music-metadata-browser). This means we now support a broader range of media types, and also that the bitrate and sample rate displayed are now functional +- The default skin is now included in the Skins section of the options menu by default +- Implemented the "Options" sub context menu. Click the "O" in the "clutter bar" or select "Options" from the main context menu to see it +- The equalizer graph is nolonger antialiased. It is now pixelated like real Winamp +- Added a `.reopen()` method to reopen Webamp after you've closed it ([47ba520](https://github.com/captbaritone/webamp/commit/47ba520c2422d8e4842468a32ca13492845183cd)) +- Stip diacritic marks from song description so it displays better in the marquee ([2b2598](https://github.com/captbaritone/webamp/commit/2b2598329d3891ee8a976b8169066586110a767a)) + +### Bug Fixes: + +- Fixed a longstanding bug where mono audio files would only play in the right channel ([4fd802](https://github.com/captbaritone/webamp/commit/4fd802f96efabb98c3c1573819eed37fec630f90)) +- Fixed a bug ([#687](https://github.com/captbaritone/webamp/issues/687)) where `webamp.appendTracks()` would cause currently playing media to pause. +- Avoid sticking a file `` into the global DOM ([343686](https://github.com/captbaritone/webamp/commit/343686f7454c4ece95b520fa3ddbf3ecc0198100)) +- Fix a bug where tracks dragged into the playlist were added at the wrong location ([b074e0](https://github.com/captbaritone/webamp/commit/b074e0eff35ac8b1b34efa902681aa19ba2b8629)) +- Fix a bug where skin cursors were not being shown for the equalizer sliders ([65bb59d](https://github.com/captbaritone/webamp/commit/65bb59353dc2da858440a3d753aec02fb771f0cc)) +- The Marquee text is nolonger blury when in "Double Size" mode ([4b5320](https://github.com/captbaritone/webamp/commit/4b53209e0cc0a9e0cd84821d012c1770a940063c)) +- Scrolling in the Equalizer window nolonger changes the volume ([48a937](https://github.com/captbaritone/webamp/commit/48a937da8722ccfd3c2e9df378a847c453c36864)) +- Clicking anywhere in a equalizer slider now makes the button depress ([20e681](https://github.com/captbaritone/webamp/commit/20e6811e6f59e82a5765c38b0b33fbed2eb575ee) +- Parsing of the `viscolor.txt` file in skins is now more permissive, allowing us to support more skins ([0d29ff](https://github.com/captbaritone/webamp/commit/0d29ffe3f4b20505005346cbc97d0cdf85664619)) +- The hotkeys to seek forward/backwards 10 tracks now works properly ([7d9ef4](https://github.com/captbaritone/webamp/commit/7d9ef4287f7294f6bdc1db89b717592cf4e48f17)) +- Fix a bug where the preamp level was not applied until you changed it ([f03c88](https://github.com/captbaritone/webamp/commit/f03c88c6d89fd51cbc0538841bb3227accfa0431)) +- Fix a bug where `.eqf` values were encoded incorrectly ([c634cd](https://github.com/captbaritone/webamp/commit/c634cd8b947e5d2d8b94b38023bc20097737a995)) +- Preamp and EQ now boost/attenuate the same way original winamp 2 did ([#748](https://github.com/captbaritone/webamp/pull/748)) + +### Internal Improvements: + +- Webamp is now written in [TypeScript](https://www.typescriptlang.org/). +- Upgraded to React and began using a few [hooks](https://reactjs.org/docs/hooks-overview.html). +- We nolonger depend upon [cardinal-spline-js](https://www.npmjs.com/package/cardinal-spline-js), we use our own implementation. + +## 1.2.0 + +### Features + +- Users can register an `onWillClose` callback, which is passed a `cancel` function. The `cancel` function can be called to prevent Webamp from closing. [#655](https://github.com/captbaritone/webamp/pull/655) + +### Internal changes + +- Webamp is now mostly built with [TypeScript](https://www.typescriptlang.org/). + +## 1.1.2 + +### Changes + +Webamp is no-longer rendered into the DOM node you pass into `webamp.renderWhenReady()`. Instead, Webamp is rendered as a direct child of the `` tag. The passed DOM node is still used for positioning. Webamp will attempt to center itself within that DOM node when it renders. + +### Features + +- Allow consumers to specify a z-index when constructing Webamp. + +### Fixes + +- Fixes positioning of context menus in context menu targets when they are spawned while scrolled. +- Improve performance of CharacterString, which gets rendered on every marquee step. + +## 1.1.1 + +### Fixes + +- Fixes the marquee text when the host page globally sets `box-sizing`. +- Fixes the initial layout when the container is not at the top of the page. +- Fixes the positioning of context menus created when scrolled down the page. + +## 1.1.0 + +### Breaking + +- Webamp will attempt to center itself within the node it is rendered into, rather than within the entire page. +- Webamp now includes the default skin directly in the JS bundle, so you don't need host it separately, or pass a URL as part of the initialization. + +### Features + +- Equalizer sliders now "stick" slightly at zero. +- Context menus on all windows. +- Toggle window visibility via context menus. +- Users can now hard code the duration of initial tracks. This saves Webamp from having to make an HTTP request to check the duration. + +### Fixed + +- Marquee now displays one additional character: https://github.com/captbaritone/webamp/issues/543 +- Track numbers in playlist are now padded to the length of the longest track number. +- Fix close buttons in Playlist and Equalizer in shade mode. +- Skins that omit assets will now fallback to using the default version of that asset. +- Fix seeking forward via hotkeys. + +## 1.0.0 + +**Important:** The NPM module as **moved** from `winamp2-js` to `webamp`. You will need to update your `package.json` to point to the new module. + +### Breaking + +- Project renamed from "Winamp2-js" to "Webamp". +- UMD module exports as `window.Webamp` instead of `window.winamp2js`. When used via `