## 0.13.1

 - fix: pause action not working during initial `waiting` state (08f42c6)
 - fix: player left in unrecoverable state if playback paused due to system events (4ace7c6)
 - change: updated ui icon for `waiting` state (a25f73a)
 - change: added `duration` to `adskip` tracking events (2172d82)
 - fix: `progress` events sometimes not firing after the first (0d90fb4)
 - fix: exceptions triggering `progress` events through postMessage (bff9ce8)

## 0.13.0

 - feat: forward player events to parent window via `postMessage` (c739dc6)

## 0.12.0

 - feat: added support for the Thai language (035b08f)
 - change: updated language files (e8c83bb)
 - fix: incorrect language string keys used in subscribe UI (29b9212)

## 0.11.8

 - fix: tracking events not sending to new Google Analytics v4 (0a38b8a)

## 0.11.7

 - fix: now playing poller stopping on CORS errors (ee3e11c)

## 0.11.6

 - fix: playlist search input not visible after clicking the search button (a8baf15)
 - fix: post-roll position for demo 10 on demo page (07a4286)

## 0.11.5

 - fix: playback stalled if there is a preroll ad break, but no ads are available (e5fcce3)
 - fix: mid and post rolls not working if there are no pre rolls (8436aeb)
 - fix: not transitioning back to paused state after a server-side postroll (76458ae)

## 0.11.4

 - fix: Player not progressing to the next item in the playlist when the response from an ad server request for post roll ads is empty (b8b1f6e)

## 0.11.3

 - fix: volume button hidden on legacy stream layout with certain viewports (f88c000)

## 0.11.2

 - fix: syndicator icons may not render in line with syndicator name on square layouts in some scenarios (505c272)
 - fix: volume control not being rendered on legacy stream layouts (6d0f926)

## 0.11.1

 - fix: legacy ui fails to render properly when the `ui.contentType` option is set to `stream` (8ff391b)

## 0.11.0

 - fix: regression causing subscribe button to no longer render when it should (1ac4d3c)
 - fix: subscribe pop-up being cut-off at the top when shown after the viewport has been scrolled (d4e75d9)
 - change: simplified some syndication service ids (80ab2cd)
 - change: moved syndication services from links to syndicators on playlist objects (a8331b5)
 - feat: added support for playlist subscribe links (df84477)

## 0.10.2

 - change: improved player control show/hide breakpoints (7e46cf1)
 - change: switched download and volume control positions (25a46f9)

## 0.10.1

 - fix: timeline and waveform sometimes not rendering on playlist item change (aeb7f90)
 - fix: improperly detecting live source on playlist item change (6cd29b5)

## 0.10.0

 - change: increase load timeout from 5s to 30s to better service slower networks or requests (36a26d8)
 - change: where possible use the url from playlist metadata when performing load more requests (9bf0ada)
 - change: updated RSS feed parser to parse playlist metadata from feed channel (a1f662c)
 - feat: render playlist ui title from playlist metadata if present, otherwise use localized string (ccf8bfb)
 - feat: added support for playlist metadata (4cc2d90)
 - change: updated ui element breakpoints such that skip forward and backward buttons are always visible (9a50747)

## 0.9.2

 - fix: prevent loading more playlist items while already performing a load more operation (05a9f1e)

## 0.9.1

 - removed: removed Honeybadger support (067ff07)

## 0.9.0

 - change: added support for per-companion ad clickthrough links (73246bb)

## 0.8.22

 - change: prioritise universal Google Analytics script over Google Site Tags script (a969096)

## 0.8.21

 - fix: player transitions to the waiting state when changing quality before playback starts (0c4ff39)

## 0.8.20

 - fix: sometimes the player transitions to an ad state for a brief period when loading preroll ads, only to exit the ad state without playing an ad when no prerolls are returned from an ad server (6619b9f)
 - feat: added `adToken` computed field which returns the last `ad.token` field in ad playlist items (6cdb54a)

## 0.8.19

 - change: increased safety checks around computed fields (fa8b38b)
 - change: when setting volume, round the value to two decimals (d954d56)
 - fix: volume changes not being forwarded to client-side ad player (95c7414)
 - fix: not scheduling VAST ads with the IMA SDK properly (cf16af5)
 - fix: fix: IMA ad sources cannot determine a source format, causing errors that prevent the player from transitioning between ad and content states (bc3fc90)
 - feat: allow placeholders for computed fields on source urls (b897735)

## 0.8.18

 - fix: prevent scheduling ads from playlist items when the playlist item is an AdsWizz source (fad2e44)
 - fix: AdsWizz prerolls not triggering ad states (407f75c)

## 0.8.17

 - fix: midrolls on live streams not being scheduled unless they require an ad request (50a1ff6)
 - fix: now playing metadata not updating when it's entry end time cannot be determined (291daf4)

## 0.8.16

 - fix: progress trackers not updating context, causing analytics providers to have to recompute values and sometimes not getting the correct percent (cf5a144)
 - fix: prevent duration change if the playlist item has a duration but the audio element reports a duration <= 0 (a9ea08b)
 - fix: prevent progress tracking events from firing when the calculated percent is invalid (1ae3eec)

## 0.8.15

 - fix: post-roll ads requested twice (ba4ba80)
 - fix: ad slot name not being added to ad request urls (2df6b58)
 - feat: added `slot` parameter to ad objects and a corresponding `adslot` computed field (319ac54)
 - fix: ad-client post rolls not running when loaded while the player does not have a content duration (8849dab)

## 0.8.14

 - fix: links not showing in description block when no description is present on the playlist item (0a95e81)
 - feat: better link styling in description blocks (0508e97)

## 0.8.13

 - fix: ad slot not being sent with tracking urls (76998ef)

## 0.8.12

 - fix: content looping when a post roll error occurs or an advertisement is not returned for a post roll ad request (4a8b29b)
 - fix: player skip forward and backward button titles switched when Afrikaans is chosen as the player language (a2f6463)

## 0.8.11

 - change: Added a development build target to CircleCI config (7d44b92)

## 0.8.10

 - fix: metadata from AdsWizz not triggering nowplaying updates (5a6a877)

## 0.8.9

 - fix: legacy layout not rendering the error state when a playlist fails to load (b7ca572)
 - fix: live streams occasionally not starting after pre-rolls in Safari (0c817c9)
 - fix: `ad-client` advertisements not being triggered reliably when the player reaches the ad position after a successful ad request (7ac2fae)
 - fix: prevent the scheduling of an ad break if the ad request returns an error status (8d5d273)
 - fix: validate ad request responses to ensure an ad is available before parsing the response content (14f39fe)
 - feat: schedule ad requests for client-side ads to run slightly before the actual ad break (21f4667)
 - fix: chapter markers not rendered in the same font as the rest of the player (56c2082)
 - fix: square layout not showing the timeline once a source is loaded (187c6b3)
 - fix: legacy layout not showing play button once a source is loaded (f7b4b53)

## 0.8.8

 - change: updated `adswizz-aod` content type to `adswizz-podcast` and added the `adswizz-ad` content type for AdsWizz advertisements (902f571)

## 0.8.7

 - fix: missing title from download button on legacy layout (3a16a71)

## 0.8.6

 - fix: choppy waveform hover progress updates, waveform renders are now throttled to 60fps (af4e62c)
 - fix: added `title` attributes to buttons on layouts (9504067)

## 0.8.5

 - fix: duration not being restored on legacy layout when playing a non-live source (01e6b17)
 - fix: long positions and/or durations on square layout overflowing their "label" background (eb2e7ef)
 - fix: when no playback sources provide a mime type the player should let the media element decide (8627970)
 - fix: format not being parsed from audio source urls correctly (bb0f48d)
 - fix: duration not being hidden on legacy layout when a live stream is played (788eb5d)

## 0.8.4

 - fix: JS errors when scrolling player ui and the sticky player becomes visible (8b1d25d)

## 0.8.3

 - feat: improved ui accessibility using better aria attributes (3975105)
 - fix: missing ad container on square layout causing vast ads to not be loaded (d053e5a)
 - change: improved aria attributes on slider components (a496ad4)
 - change: updated playlist to user proper aria attributes for better screen reader support (584c12f)

## 0.8.2

 - fix: VAST postroll ad breaks not starting (7995e76)
 - fix: preroll ad break is starting even when there are no preroll ads (ef71822)
 - fix: IMA ads being loaded twice when changing playlist items (529f54d)
 - change: send the VAST ad id instead of the adTagUrl when tracking starts of VAST ads (237460e)
 - fix: player failing to initialize when IMA SDK init fails (1191d1e)
 - feat: emit a start tracking event when an IMA ad is started (c1b9f5f)
 - fix: ad skip button shown while ads are still loading (ec0e4d9)
 - fix: incorrect position reported by ad controller when loading an ad response from IMA (1aff13a)
 - fix: playlist item repeating when a postroll ends on the IMA SDK (12ea238)
 - feat: emit adskippable event when an IMA ad becomes skippable (00d277c)
 - feat: introduced adbreakstart and adbreakend events (9450432)
 - feat: initial refactor to using Google's IMA SDK for VAST ad playback (f93951f)

## 0.8.1

 - fix: player fails to load on newer versions of Mac OSX (Big Sur) (980dd0f)

## 0.8.0

 - feat: added `aw_0_1st.ri=iono` parameter to AdsWizz playback urls (13c41f3)

## 0.7.5

 - fix: prevent decorating adswizz urls with companionAds=true when a zoneAlias hasn't been configured (1d00bf1)

## 0.7.4

 - feat: playback urls for AdsWizz sources are decorated to include their AdsWizz listenerId (7ac2706)

## 0.7.3

 - fix: player making AdsWizz AFR calls without a zone id (d5c8f0d)

## 0.7.2

 - fix: js log errors when attempting to build advertisement clickthrough link text (9adc288)

## 0.7.1

 - fix: AdsWizz metadata without an adswizzContext can cause AFR requests with an invalid of missing context (5fb43f1)

## 0.7.0

 - fix: typo in dateTimeFormat option causing the "Unrecognized option ui.dateTimeFormat" warning in the console (13994d8)
 - feat: added zoneAlias to Adswizz companion ad events (34a093d)
 - feat: support for multiple AdsWizz zone aliases (f05684c)

## 0.6.9

 - fix: square layout not using the `ui.dateTimeFormat` option when formatting date-times (be1e312)

## 0.6.8

 - feat: added the `ui.dateTimeFormat` option used to format the display of date-times on layouts (d9cae60)

## 0.6.7

 - fix: certain colors causing an infinite loop when trying to generate dynamic theme colors (5353fcd)

## 0.6.6

 - fix: third-party event handlers interfere with layout event handles if an error is thrown (0dd444e)
 - fix: prevent artwork api requests when creator and title are empty (13ba305)
 - fix: nowplaying data not updating unless only the publish date differs (a06a748)

## 0.6.5

 - fix: player getting stuck in the `adplaying` state when changing playlist items while in an ad break and a preroll is meant to start on the new playlist item (e3b2753)
 - fix: unable to skip ads when `skipOffset` is set to `0` (dde2174)
 - fix: errors when destroying a player instance (d63cafa)
 - fix: skip button not showing for static ads (2519b24)
 - fix: timeline cleared after selecting a new playlist item resulting in ads been ignored (2ed8bfd)

## 0.6.4

 - fix: artwork api query using "undefined" as artist when neither an `artist` or `creator` is present in metadata (6757ec6)
 - fix: js error reading length of now playing icons list when one is not present (58dc1e0)
 - change: reduced artwork load failures to warnings (2216e40)

## 0.6.3

 - change: reduce AdsWizz polling errors to warnings (a7f3d9a)
 - fix: better handling of duration to try prevent `getDuration()` from returning `NaN` on some browsers (5679549)
 - fix: added a polyfill for `requestAnimationFrame` for browsers that don't support it (cff9399)

## 0.6.2

 - fix: floating `/` in ui subtitles when grouping is missing from metadata (8059d43)
 - change: prepend artist to title when building artwork request query (653687f)

## 0.6.1

 - fix: togglePlay not playing when called after changing playlists (3c4081a)

## 0.6.0

 - feat: added player config option to disable automated artwork fetching service (c21b26f)
 - fix: JS error cannot read property _logger of undefined (c36208c)
 - feat: fetch and display album artwork whenever possible when now playing data changes during stream playback (8d7a04d)

## 0.5.8

 - fix: metadata polling sometimes not working in safari (29f6d11)

## 0.5.7

 - fix: AdsWizz pre-rolls not playing when stream resumed (bd93196)

## 0.5.6

 - fix: JS error undefined is not an object (evaluating 't.tags') (b9cb426)

## 0.5.5

 - fix: AD_START timeline actions causing JS errors looking for a non-existant `adId` field (7eea48e)

## 0.5.4

 - fix: JS error this.player.isLive is not a function (3ebdede)
 - fix: JS error TypeError: undefined is not an object (evaluating 'document.createElement("audio").canPlayType (03b5062)
 - fix: JS error undefined is not an object (evaluating 't.metadata') (2d11f96)

## 0.5.3

 - fix: JS Error when skipping ad-client advertisement (2cdf7f6)

## 0.5.2

 - fix: fatal errors in Hls.js not causing the player to transition to an error state (9e22719)
 - fix: stop polling for AdsWizz metadata on player error (2610a14)
 - fix: multiple logs for the start of AdsWizz metadata poling (5eeea86)
 - fix: AdsWizz metadata polling causing `CLEAR` actions to be inserted in to the timeline when the request failed with an error status code (a6bc45f)
 - fix: logger causing uncaught promise exceptions when re-throwing exceptions from the logException handler (96dc06f)
 - fix: recognize `AD_START` actions from AdsWizz metadata (4d4a38d)
 - fix: streams getting stuck in the waiting state when attempting to reconnect after a stall (0bd180e)
 - fix: clear the timeline on stream stop/pause and reschedule ads (d80994c)
 - fix: client-side mid-rolls in streams causing a `start` tracking event on the content when content resumes playback (a165774)
 - fix: use the current source url as the tracking uid when a metadata uid is not present (ba08eed)
 - fix: allow content position events to fire while playing an ad-server ad (adf7008)
 - fix: analytics events fired on an invalid context during ad playback (dbf7962)

## 0.5.1

 - change: update Xhosa, Zulu and Swahili language files (a33c616)

## 0.5.0

 - fix: pause tracking event fired on content when a client-side post-roll starts even though the content is already complete and paused (72d3134)
 - fix: play event not fired on initial playback when a server-side pre-roll is present (e0da260)
 - fix: pause event not being fired from the api during the playing state (ac5b41d)
 - fix: prevent tracking seek events when the player is stopping (f47e06b)
 - fix: current position on ui timeline not updating to the end of playback duration when the post-roll ad ends (fdbd640)
 - fix: updated tracking event structure to match docs (990c146)
 - fix: `progress` tracking events not tracked for percentiles when playing a static-ad (657a436)
 - fix: server-side postrolls tracking against the next item in the playlist instead of the current (0c8dc9d)
 - feat: added `googleAnalytics.enabled` option to enable or disable tracking events to Google Analytics (19a05e6)

## 0.4.4

 - fix: added polyfill for `Array.from` (2972220)

## 0.4.3

 - fix: trying to read 'inAdBreak' of when advertising is disabled causes javascript errors (f07b618)
 - fix: polyfilled `Array.include` on browsers that don't support it (ab4e9b6)

## 0.4.2

 - fix: reroll timeout check not comparing time since last played to reroll timeout correctly (17bbed0)

## 0.4.1

 - fix: skip button showing for static ads (0e7043f)
 - fix: client-side iono ads repeating indefinitely (3ce7373)
 - change: enforce a minimum value of 120 seconds on the ad reroll timeout setting (f3001fe)

## 0.4.0

 - feat: update AdsWizz metadata parser to recognize empty lines as an action to clear the current active entry (9ed46b6)
 - fix: timeline calculating the entry end time incorrectly when checking if the active entry has changed (7dcb44c)
 - fix: timeline entry updates updating the entry start time to the larger of the two instead of the smaller (2031aec)
 - feat: enable mod-roll ads on live streams by listener position (89dc509)
 - feat: prevent all client-side ads for the duration of `rerollTimeout` after a client-side ad is played (f7cc2fd)
 - feat: added `setGDPR` method to player so that GDPR configuration may be updated (31554a9)
 - change: pass `gdpr` and `userConsent` values to AdsWizz AFR urls (ed3bb22)
 - feat: Added `gdpr` and `userConsent` computed fields (1df7a79)
 - fix: AdsWizz live streams not being recognized as live sources immediately, causing the player to attempt to schedule tracking markers (cd321c3)
 - feat: added `gdpr` option to player for enabling gdpr protection and user consent strings (be66697)
 - fix: `isPaused` returning `false` when a stream stalls (a9d816f)

## 0.3.6

 - change: fallback to audio sources as they appear in the playlist item if levels cannot find any supported sources (352a366)
 - fix: player not attempting other sources when the chosen one fails to play and other sources are available (eb63f97)
 - fix: JS error around `skipOffset` when ad position updates (c6a7af2)
 - fix: source support checking the `type` field on the audio source instead of the `mime` field (ec2229c)

## 0.3.5

 - fix: decode html entities when building metadata model (59e28d1)

## 0.3.4

 - fix: source and quality computed fields missing while playing an ad (3ed0fca)
 - fix: publish date missing from legacy layout (5b98651)
 - change: update playback sources on all AdsWizz demos (b2ac183)
 - change: updated all AdsWizz examples to use a decorated url (2cd5a4f)
 - fix: computed fields in companion ad urls not being replaced (2508e0c)

## 0.3.3

 - fix: position showing as negative when pausing live streams (834ef9d)
 - fix: AdsWizz metadata parser parsing artist to the ",artist" property instead of "artist" (45c53b3)
 - feat: added for retrieving metadata from AdsWizz via EventSource (3e5d7ed)
 - fix: JS error trying to show/hide elements on legacy layout when rendering live stream player (0057cde)
 - fix: legacy layout showing/hiding ui elements in some states (21b8612)

## 0.3.2

 - fix: regression causing changes in quality level to hide the timeline on the ui and indicate that the new source is a live source (68f794d)
 - change: `adswizz.interval` option updated to ensure a value between 1 and 60 (674e66d)
 - change: UI layouts use the same code to format title and subtitle areas for more consistency between layouts (601b905)
 - change: hide ui controls that don't make sense on a live playback source (d53e5d8)
 - fix: prevent skipping of in-stream ads on live streams (ee3d352)

## 0.3.1

 - fix: browser lockup when loading a new playlist while one is already loaded, but only when using a playlist array, not a playlist url (91940b4)

## 0.3.0

 - feat: added support for playing AdsWizz streams and ads through their AIS platform (0c83d2a)
 - fix: invocation error when attempting to cancel a pending ajax request (a7738f2)

## 0.2.4

 - fix: legacy layout choosing the wrong companion ad images to render (65e81d6)

## 0.2.3

 - fix: unintended vertical scrollbar appearing on legacy ui (0dcf12a)

## 0.2.2

 - change: updated localised error messages (d779a6b)
 - fix: error messages not being localised properly (11a4f50)

## 0.2.1

 - removed: player no longer emits the adwaiting event (df28593)
 - fix: the `ad` field of the adstart event is empty (d6c2504)
 - change: updated advertising events to match their documentation (ffef587)

## 0.2.0

 - change: replace adcompanions event with adcompanionstart and adcompanionend (52435f1)
 - change: rename skip method to skipad (5e57731)
 - change: allow ads to be stopped (e0effd1)
 - change: the `adplay` and `adpause` events are no longer fired by the player api (58bda45)
 - change: updated square layout to use adcompanions event to render companion ads (b500ddc)
 - change: updated legacy layout to use adcompanions event to render companion ads (911373f)
 - feat: player emits the adcompanions event when companion ads exist on an advertisement (a593c62)
 - fix: ui chapter markers mis-aligned (b868e33)

## 0.1.20

 - fix: chapter markers mis-aligned when media duration differs from playlist item metadata duration (9eea218)

## 0.1.19

 - fix: chapter markers misaligned (1cb664f)
 - change: disable text selection throughout the ui (62ae915)
 - fix: setTheme not updating the waveform theme (8a4b0ae)

## 0.1.18

 - fix: TypeError when trying to resolve computed fields for ads when an ad is not active (1e8bcf5)
 - fix: TypeError when detaching slider components that haven't got a dom element (bf74b43)
 - fix: InvalidStateError when attempting to change the current position before the audio data is ready (0a81da1)

## 0.1.17

 - fix: waveforms not being rendered on shorter length files (a3ac670)

## 0.1.16

 - fix: double bottom border on legacy layouts when hiding playlist from the ui (c47cf07)

## 0.1.15

 - change: improved `localStorage` feature detection (ab6ecf0)
 - change: updated the `supported()` to use better detection method fo audio support (c932b3e)
 - fix: language files not being transpiled when building from source (d96f88c)

## 0.1.14

 - fix: waveform component trying to render before it has any samples, causing a JS error (8a25154)
 - fix: chapter markers not showing on square layout (2899643)

## 0.1.13

 - change: prevent sliding when the slider is missing a container element (660992e)
 - change: create audio element using `document.createElement` instead of `new Audio` (0832a8a)
 - change: improved rendering of waveforms on short duration files (616c68b)

## 0.1.12

 - fix: `index size` errors when trying to calculate buffered percentage and nothing is in the buffer yet (4732708)

## 0.1.11

 - fix: theme not being applied to timeline progress correctly (2bdfed3)
 - fix: JS error when attempting the modify the message for exceptions thrown in the player, particularly DOMExceptions (6cccbb9)
 - fix: player left in the waiting state when first playback fails (340b7e4)
 - fix: JS error when trying to merge options with defaults and no options have been passed (04f6354)

## 0.1.10

 - fix: failure to parse ui template on browsers that do not support DOMParser (f5f76ea)
 - fix: js errors when attempting to modify the `message` of errors (c455db7)
 - fix: js errors when localStorage is unavailable (a2f2e0f)
 - fix: js error when the player emits an error that does not have a matching language string (85672ee)

## 0.1.9

 - fix: selected quality option not being themed correctly (362a55f)
 - fix: square layout not rendering correctly due to a JS error when waveforms are disabled in options (9e6bedc)

## 0.1.8

 - fix: sticky player on square layout being shown when viewport is resized during an ad break (55e9c21)
 - fix: the height of the legacy layout when playing live sources is incorrect (299b5a0)
 - fix: don't render waveform bars that are only partially visible (faf29bd)
 - fix: branding element missing on legacy player (4f6f0a1)

## 0.1.7

 - fix: live stream position not center aligned correctly on square layout (ed276b7)
 - fix: legacy layout trying to attach download component when playing a live stream causing a JS error (2b70a93)
 - fix: progress tracking events not using the correct event label when sending to GA (ea60508)

## 0.1.6

 - feat: localise error messages when rendering them inside a ui (f57ace4)
 - feat: added download method to player api and updated download buttons on ui to use it (8279280)
 - fix: sticky player progress bar not updating while in an ad playing state (194b129)
 - change: added retry button to error state on all layouts which allows users to retry playback after a non-fatal error (53cb4c2)

## 0.1.5

 - fix: getBufferedPercentage returning an invalid value (d058495)
 - fix: buffer progress not showing on scrubbar (1dc1107)
 - fix: metadata section on legacy ui exceeding the container width when metadata grouping value is long (91cb14c)
 - fix: the position at which the sticky player is shown/hidden does not update when the viewport is resized (46c6e8e)

## 0.1.4

 - fix: logo being positioned at the bottom of the playlist when a playlist is rendered (7d68968)
 - fix: isPaused not returning true in the error state (4924a95)
 - fix: infinite loop when calling load more when the playlist was loaded as an array instead of through a playlist url (03be549)
 - change: improved error state on square ui (7af203a)
 - change: improved error state on legacy ui (b04a2f3)
 - feat: added sticky player to square layout (32135a0)
 - change: updated infinite scroller on square layout to work of viewport scrolling instead of playlist scrolling (90076c7)
 - change: square layout now scrolls the entire player area, instead of just the playlist (9e2f8e9)
 - change: updated waveform theme colors (330fb3b)
 - fix: regression causing borders around the player to be cut-off when the player is larger than its container (1fc3b8f)
 - change: updated chapter marker color to use one of the standardised colors (2f26495)
 - change: removed onhover background from volume slider on legacy layout (73f2fbb)
 - change: use the same playlist component on legacy and square layouts (a53426f)
 - change: improved automated theme generation (a9a873c)
 - fix: theme classes not affecting the player container (d171731)
 - change: removed borders from playlist items and playlist header on legacy layout (692f1fe)
 - change: added border between player and playlist on square layout (4d608ec)
 - fix: linear gradient over coverart on square layout hardly noticable (ac4c996)

## 0.1.3

 - fix: legacy player body not flexing to fill the player container width when the container is sufficiently large (6614f90)

## 0.1.2

 - fix: legacy timeline using the incorrect theme colors (cdac4b2)
 - fix: error when rendering a live stream legacy layout (72d1791)
 - fix: timeline not responding to user input on square layout (522c5c9)

## 0.1.1

 - change: layouts use a mirrored waveform by default, switching to a flat waveform when chapter markers are shown (9aec2e6)

## 0.1.0

 - feat: added `waveform` to ui options for showing or hiding waveforms (76b9f1a)
 - fix: waveforms incorrectly sized when sticky player is visible (b1c3041)
 - fix: selecting a search result not changing playlist items on some devices (fad8fe4)
 - fix: selecting an invalid playlist item moves the playlist to the last playlist item (38e2408)
 - change: moved chapter timeline to it's own component (137ddd8)
 - fix: prevent passing invalid callbacks to event emitters (adf015d)
 - change: improved waveform rendered and added waveform to legacy layout (5af442f)
 - fix: items in options menu not visible on lighter themes (b75cbc9)

## 0.0.99

 - fix: download links not updating when the user changes quality levels (eb787df)
 - change: default playlist limit up from 10 to 20 (6fd8f96)

## 0.0.98

 - fix: computed fields causing invalid values for tracking tags when a value cannot be computed (af27779)

## 0.0.97

 - fix: coverart on square layout not filling 100% width when the image dimensions are less than the player width (3cde70f)
 - fix: search not filtering in a case-insensitive manner (321ad7e)
 - fix: loadMore incrementing skip event when no new playlist items are actually loaded (d152e5a)
 - fix: complete tracking event not firing for ad-server ads (ffbdaf0)
 - fix: regression causing many fields in tracking events to be undefined (26a73c5)

## 0.0.96

 - feat: added search to the playlist ui on legacy and square layouts that searches the current playlist (501f22a)
 - feat: added infinite scrolling to both legacy and square layouts when a supported playlist url is used (12defa6)
 - feat: added "Load more" button to square layout (87b73cb)
 - fix: `playlistload` event not firing except in the empty state (072954d)
 - feat: update legacy layout to provide a "Load more" button at the bottom of the playlist (0c6816e)
 - feat: added `canLoadMore()` method to check if the player is able to load more playlist items (8788fa0)
 - fix: legacy layout clears the current selected playlist when loading more playlist items (a95b293)
 - feat: added ability to load more playlist items to player (26b660c)

## 0.0.95

 - change: increase maximum width of square layout (55e8367)

## 0.0.94

 - change: download links have moved to individual `audio` items in the playlist to support quality aware download links (1d3c2f9)
 - fix: coverart that isn't exactly square not scaling to fit the coverart area on all layouts (ee17280)
 - fix: download link not showing on legacy layout when a "download" kind link is missing from the playlist item, it should use the current playing source as the url (a95c6f4)
 - fix: legacy layout buttons being squashed together in smaller containers (efaa941)

## 0.0.93

 - fix: ad titles exceeding their container width (d751265)
 - fix: omitting `license` from options causes a fatal error (8bb2ed7)
 - fix: legacy playlist hidden on ios (0297148)

## 0.0.92

 - fix: static ads not playing when license allows it but ads are disabled in player options (fc36e09)

## 0.0.91

 - feat: enable advertising when license allows it (58fe7b8)
 - fix: adend event causing player to lock up on ad state when ending (6c57176)
 - feat: disable custom themes when license does grant the required entitlement (e5683fe)
 - feat: allow custom branding logo when the license allows it (7bd7d17)
 - fix: timeline buffer progress not showing (10ab7ca)

## 0.0.90

 - fix: issues getting the current playing ad when starting a client-side pre-roll advertisement (bd6b271)
 - change: added better debug logging of tracking events (66461b4)

## 0.0.89

 - fix: playlist not being repeated when repeat mode is set to 'playlist' (f8f271f)

## 0.0.88

 - fix: tooltips unable to extend past 100px of width, causing long chapters to be cut off by the top of the player on legacy layouts (e77c5d9)
 - fix: text tracks controller not using the same logger as the rest of the player (debf39e)
 - fix: JS error when trying to retrieve the language option when loading text tracks (3d2af79)
 - fix: relative source paths in options not validating (75dd79c)
 - fix: remove download option from square layout when playing a live stream (9794efa)

## 0.0.87

 - fix: JS error when attempting to load an HLS live stream on browsers that don't natively support HLS (660abed)

## 0.0.86

 - feat: added Honeybadger logging support (fd99c05)
 - fix: JS error when hiding error messages on legacy layout (680ffef)
 - change: update tracking to only track percentiles for durations longer than 29 seconds, and to track ad percentiles no matter what (af3eef5)
 - change: player no longer tracks progress tracking events when the playback duration is less than 11 seconds (5d46b85)

## 0.0.85

 - fix: volume slider showing to the right of the volume button instead of directly above (44b0945)
 - fix: playback controls overflowing their container on square layout (6572169)
 - fix: missing polyfill for Object.entries (b552d4a)

## 0.0.84

 - fix: client-side ads being requested twice when the ad response metadata has it's duration set to zero (257dc87)
 - removed: mid-roll advertisements no longer supported on live streams (7f0c4e1)
 - fix: ui progress bars sometimes filling beyond 100% (9d49a25)
 - fix: cover art being rendered on legacy layout when no coverart available (84f3698)
 - fix: player emits an error instead of clearing the player when an empty playlist is loaded (5681666)
 - fix: player errors cause ui controls to shift location on legacy layout (febd345)
 - fix: playback toggle button not updating to the error state when the player encounters an error on legacy layout (20f35db)
 - fix: subtitle in playlist items showing a floating '/' when publish date or grouping metadata is missing (badb1e1)

## 0.0.83

 - fix: UI failing to render when rendering a live stream UI (e5e9f72)

## 0.0.82

 - feat: added companion ad image support to legacy and square layouts (389aee8)
 - fix: pre-roll ads not playing after the player automatically moves to the next playlist item (8312660)
 - fix: pre-roll ads not playing on subsequent playlist items (69ef250)
 - fix: JS error when an ad break ends due to tracking adding an invalid tracking marker for non-static ads (df5eb1a)
 - fix: waveform chapter markers being rendered when a waveform is not (7981ed0)
 - feat: options will be validated upon player instantiation, invalid options will result in a failure and a player won't be created (e6de165)
 - fix: ui.language option not changing the display language of the player layouts (e777c64)
 - fix: rounded corners not being applied to legacy layout (417ca77)
 - fix: square layout being cut-off without a scrollbar on viewports with too little height (b4dfcf7)

## 0.0.81

 - fix: playback of live streams not resuming after pause (a1f2585)

## 0.0.80

 - feat: added playlist view to square layout (463146a)
 - fix: invalid colours being generated when parsing a 3 character hex colour (7ec5bd8)
 - fix: duplicate chapter markers appearing on square layout (36fc59c)

## 0.0.79

 - fix: tracking events triggered with negative positions will now be ignored (54778a1)

## 0.0.78

 - change: added additional quality information to square layout quality menu (7717cb1)
 - change: update the menu header section on square layout to navigate back to the main menu when clicked (86e8454)
 - removed: email to a friend sharing links have been removed from all layouts (1787832)

## 0.0.77

 - feat: added volume, quality, sharing and download options to a menu on square layout (b783e82)

## 0.0.76

 - fix: TypeError when one or more ads fails to load (15e0d15)
 - fix: TypeError when advertising handles a complete event while not playing an ad (8418a54)
 - fix: rounding issues for percent values in tracking events (459b55a)
 - fix: uuid appearing as 'undefined' on tracking events when localStorage is unavailable, instead an empty string should be used when a uuid cannot be found in localStorage (208eeeb)
 - fix: player triggering 'complete' tracking events on live streams (f463a25)

## 0.0.75

 - fix: tracking events during ad breaks incorrectly reporting the ad uid as the uid of the tracking event when it's meant to be the content uid (e3453a4)

## 0.0.74

 - fix: error while resolving computed field values and no context object is available (e75ac9e)

## 0.0.73

 - fix: invalid theme colours generated when an invalid colour code is used, instead invalid colours will use the default colour (686bd4d)

## 0.0.72

 - fix: .json waveform urls not resulting in a rendered waveform (037bcaf)
 - fix: JSON waveforms not rendering when the BBC waveform data library is not loaded (3066aae)
 - feat: added support for .json waveform urls (16b3cb1)

## 0.0.71

 - change: update tracking controller to maintain a tracker per playlist item (e3ce50e)
 - fix: aduid computed field causes errors when computing fields for events and there is no current ad (d21136f)

## 0.0.70

 - fix: update chapter markers on square layout when the texttrackschange event is fired from the player (6f470e4)
 - removed: textTracksEnabled has been removed from the player config options (d135a0a)
 - fix: extra '/' in subtitle on legacy layout when no publish date present on the playlist item (42cac9b)
 - fix: skip forward button not working on square layout (80493cc)

## 0.0.69

 - fix: player controls dissappearing on legacy layout when downloads are enabled (fb0bdde)
 - fix: progress and buffer fills not filling as intended (f6c98ba)
 - feat: added chapter markers to square layout (3fec355)
 - fix: increase the size of waveform bars when there aren't enough waveform points to fill the canvas (36a4b69)

## 0.0.68

 - fix: player ui not passing the debug option to the player (8d5b122)

## 0.0.67

 - feat: added 'debug' option to enable logging of debug messages to the console (a4a9038)
 - fix: live streams sometimes emitting multiple durationchange events (3ec261d)

## 0.0.66

 - fix: content playback not resuming when an ad break has no ads after requesting them from the ad server (377ce67)
 - fix: live sources with a contentType not set to stream play back as if they are static audio sources (400c497)

## 0.0.65

 - fix: player not transitioning states correctly when switching quality profiles (18d8688)

## 0.0.64

 - fix: wrap localStorage calls to prevent QuotaExceededError error from triggering (d7a58b8)
 - fix: wait for all ad break ads to be loaded and ready for playback before transitioning to the ad playing state (a24f9b9)

## 0.0.63

 - fix: regression causing some ui controls, such as backward and forward, to no longer work (10c0620)

## 0.0.62

 - fix: skip button not updating to reflect how long the user must wait before they can skip the current ad (21764cb)

## 0.0.61

 - fix: sourcemaps not being pushed to Sentry correctly (48c910d)
 - feat: attempt to reconnect to live streams when the stalled event is fired (2cb7077)

## 0.0.60

 - change: Sentry configuration and logging (77c0e6b)

## 0.0.59

 - feat: added square ui layout (3907540)

## 0.0.58

 - fix: player emitting incomplete advertisement tracking events when advertising is disabled and a server-side ad is configured in the playlist item (5f7f004)
 - feat: added chapter markers to podcast timeline UI (8d2d17c)

## 0.0.57

 - feat: added a sticky player area when the player controls are scrolled away (5bf7d94)
 - feat: added VAST 2.0 advertisement tracking support (a3eceac)

## 0.0.56

 - fix: buffered percent reported incorrectly after changing playlist items (9fe8739)
 - fix: changing playlist items causes player to get stuck in a paused state (e070683)
 - fix: live stream playback sometimes starting from a position other than 0 (401af6d)
 - feat: added support for VAST 2.0 advertisements (20790e1)
 - fix: player stalling in the playing state when changing playlist item (df8af5f)

## 0.0.55

 - change: update hashes to use MD5 instead of SHA256 for smaller hashes (8e08371)
 - feat: made the UI more responsive by dropping elements of the UI when reaching predefined breakpoints (86a51aa)
 - fix: fix regression that causes the player to stall playback when playing a pre-roll ad (5e46ee2)
 - fix: content playing behind live stream (regression) (d076a87)

## 0.0.54

 - change: updated theme colors generation to produce flat colors instead of semi-transparent colors (ff852e7)
 - change: update volume slider to a vertical slider (32480ad)
 - change: move logo down to controls area (5ab0a81)
 - fix: description links not opening in new window (5c61d16)
 - feat: allow podcast descriptions to be rendered on legacy layout with the `description` ui option (435bb0e)
 - change: rename `ui.theme.foreground` option to `ui.theme.text` (f95bcd0)
 - feat: added `border` to the list of `ui.theme` options for changing the colour of borders on the ui (d94ccf2)
 - fix: player with playlist not scrolling just the playlist section (9117787)
 - change: update playlist next and previous icons (2c63fd9)
 - change: update rendering of playlist header, moving next and previous buttons to the far right and title to the far left (e818144)
 - change: updated icons to material icons that weren't already (d293743)
 - change: reduced the font size of playlist items, removed cover art from playlist items and moved play icon to the left side (05fad17)
 - fix: playlist next/previous buttons on legacy ui not working (037694f)
 - fix: stopping leaves player in a loading state (d7cbd7f)
 - fix: content playback not starting on ios when a pre-roll ad is played (095128e)

## 0.0.53

 - fix: Uncaught TypeError when playing a pre-roll ad and the ui is configured not to show artwork (2c5016e)
 - change: override chosen formats on ios to prefer mp3 over mp4. This is an interim solution for mp4 sources that take too long to load on ios, until we can determine the issue. (f2edb97)
 - change: re-enabled the resume tracking event by default (69d2a43)

## 0.0.52

 - fix: live streams loading while their pre-roll is playing (12020c6)
 - fix: loading and playing a new playlist while one is already playing does not play pre-rolls on the new playlist item (1152ad5)
 - fix: ads not being properly cleared when changing playlist items (7f702b9)
 - fix: playback no longer working after a playback error, even after trying to change playlist items (dbdb3fb)
 - fix: adplaylistselect not firing for server-side advertisements (6996b97)
 - fix: advertising manager not transitioning to the correct state when no pre-rolls are present (a321149)
 - fix: playback not started when calling play while loading a playlist (6a79a77)
 - fix: playback not starting on ios when play is called while loading a playlist item (22ecbe2)
 - change: disallow seeking while not in the playing, paused or waiting states (46ef414)

## 0.0.51

 - fix: text tracks not loaded correctly after the first playlist item (dfa3b13)
 - fix: text track and cue structures returned by text track methods and events don't match documentation (dba10e0)

## 0.0.50

 - fix: ui shifts when transitioning from loading to idle states (64379da)
 - fix: playback not resumed after changing playlist items while playing (2984d9f)
 - fix: durationchange event fires twice for newly loaded playlist items (8a75897)
 - fix: client-side ads not being requested because the ad request url is not passed to advertising correctly (b914fd9)
 - fix: duration sometimes reporting -1 after changing playlist item (d64c3c5)
 - fix: preload option not preloading audio content (fd1517c)
 - fix: circleci config indentation error (9e41b8b)
 - change: update CircleCI config to run an environment setup step before the build step (a8b2b92)
 - fix: mark `setup.env.bash` as ecexutable (c7bf0a6)
 - change: update `setup.env.bash` to take env values from arguments (ade029f)

## 0.0.49

 - fix: 'Uncaught TypeError: n is not a function' when initialising the player (d273411)
 - change: moved compile time constants to the constants file (a354361)
 - removed: ad request url option has been removed from player options (803a58c)

## 0.0.48

 - feat: allow enabling and disabling of analytics events through setup options (7eb7e10)
 - change: tracking no longer adds all computed fields to tracking urls (bc5aca5)
 - change: moved support functions to the correct namespaces (8c61cd2)

## 0.0.47

 - change: update legacy layout styling (19d3f35)
 - change: update ui to always render the large button (4d2a1e2)
 - change: move position indicator on stream ui to it's own line (d20d1a9)
 - feat: added marquee effect to player title (b38a5ed)
 - change: disable sharing control by default (adf3bb0)
 - change: disable volume slider in environments where volume changes are not supported (f770fff)
 - change: update dropdown selected option styling (167dbad)
 - change: volume slider adjust volume in increments of 5 (from 0 to 100) (c48d107)
 - change: reduce volume slider width by 20% (16686b0)
 - change: reduced slider track height to 4px (1f0a6bb)
 - change: increased the duration of the spin animation on play controls (20f70b4)

## 0.0.46

 - fix: player ui stuck in loading state when audio source url missing from playlist response (c005068)
 - change: reduce button background opacity (9ad7bdc)
 - fix: incorrect font styling under IE (77de813)
 - fix: logo in IE causing player to take up too much vertical space (f19219d)
 - fix: resume tracking action being emitted when switching quality profiles (b8f3948)
 - fix: start action reporting incorrect position for streams (78b2f45)
 - fix: ui not updating to indicate something is loading when requesting an ad from an ad server (dcc89e5)

## 0.0.45

 - fix: errors not being shown on legacy layout (4796135)
 - fix: position reported incorrectly for live streams on some browsers (671015d)

## 0.0.44

 - change: reset live stream tracker on pause (61acea6)

## 0.0.43

 - fix: player using `type` instead of `kind` to determine link type (af36d3a)
 - fix: download button not rendering event when downloads enabled (03a6b6d)

## 0.0.42

 - fix: stream player not rendering at the correct height (b379379)
 - fix: error when loading ui options (1c8a3c2)
 - fix: server-side ads not playing when `ads.enabled` option is false (b7a5b61)
 - fix: play/pause button not obeying the theme accent color when artwork is disabled on a stream player (66a640b)
 - fix: updating theme options does not re-render the ui (eac77a7)
 - feature: ui theme options now accept the `rounded` option for rounding the edges of the player (22f6cb5)
 - change: don't request client-side ads if the ads.enabled option is false (104dcf5)
 - change: rename ui option for language from displayLanguage to language (0fba6d1)
 - change: moved advertising options to the "ads" field on options (c94203d)
 - change: moved analytics options to the "analytics" field in options (93ff113)
 - change: move now playing options to the "nowPlaying" field on options (c0e4402)
 - change: move ui options to the "ui" field in options (11237d5)

## 0.0.41

 - change: chosen quality rendered as a "text icon" of the current quality bitrate (if available), otherwise uses HD, SD and LD for high, medium and low quality levels (b177b14)
 - change: updated volume icons (225247b)
 - change: disable volume slider on mobile (21bf43c)
 - change: download buttons disabled by default (cad799b)
 - change: download button will only show when the playlist item contains a link of type `download` and the ui was created with the download option set to true (67d1118)
 - change: update sharing dropdown to drop upwards and to the left (32884b2)
 - fix: repeat button text color not matching the theme when active (0ed2514)
 - fix: volume control changing volume to zero when muting or unmuting (fcf80b7)
 - added: titles to all buttons on the player ui (0276e5f)
 - change: switched logo and sharing locations and linked logo to the playlist item metadata url (edfee0f)
 - change: remove label from sharing button on legacy layout (2424a97)
 - feat: themes auto-generate colors off of the given theme colors to improve contrast in areas of the layout (91bef77)
 - change: remove download button label and added a tooltip that shows the download size (b263969)
 - added: show bitrate and estimated mb per hour in quality dropdown (3362d7f)
 - feat: Added skip backward/forward buttons to legacy player ui (f169616)

## 0.0.40

 - fix: ad state button on legacy layouts getting stuck in the "loading" state on ad-server type ads in mid-roll positions (5989896)
 - fix: ads of type "server-ad" not being tracked correctly (0a03ae4)
 - change: disable tracking of loaded events (6690e37)
 - fix: prevent tracking of seek events when playing live streams (5f4da6a)
 - fix: skip button too big on legacy layouts in Firefox (f7a227e)
 - fix: position slider not changing current position on legacy layout (c04fa06)

## 0.0.39

 - fix: 'start' and 'loaded' tracking events firing event when the playback source is invalid (b94db45)

## 0.0.38

 - fix: play events in the idle state being fired as pause events (93bca20)
 - change: improved tracking tags management (c6f0222)

## 0.0.37

 - fix: volume slider on legacy layout ui not changing playback volume (734cc2b)

## 0.0.36

 - change: round GA event values to the nearest integer value (f25d3de)

## 0.0.35

 - fix: tracking events missing data from tags with hard-coded values (60563c9)
 - fix: complete tracking event missing required data (7dd4f99)
 - change: set the value of seek and skip events to the percent at which the event took place (e890278)
 - added: seek action tracking (34809a1)
 - fix: advert skip action being tracked against content metadata instead of advertisement metadata (5c936e3)
 - change: analytics sends position events with the action set to the minutes played for live sources and the percent played for on demand sources (e0b91f2)
 - change: rename previous start tracking event to load (9bc40bc)
 - change: renamed play tracking event to start (28698ee)
 - added: methods for retrieving position, duration and source of the current playing ad (9c73c1b)
 - change: increase live tracking interval from 30 to 60 seconds (791ed2d)

## 0.0.34

 - feat: added referrer and playback session id to tracking and analytics (6b34060)
 - fix: invalid playlist sources not triggering the invalid playlist source error (5abd6d0)
 - change: playlist loader replaces computed fields before request (4a23df4)
 - fix: player switching states after a pre-roll before analytics has had a chance to track the ended event properly (7af2c78)
 - added: methods for retrieving position, duration and source of the current playing ad (c366acb)

## 0.0.33

 - fix: stream title and grouping rendered incorrectly on legacy layouts (2f16b16)

## 0.0.32

 - fix: player ui defaults to en for displayLanguage when the locale file for the chosen language has not been loaded (7f6b37c)

## 0.0.31

 - fix: error logging too verbose when loading playlists (20945e6)

## 0.0.30

 - fix: theme generating invalid color codes (af3800a)
 - fix: download button not showing on legacy layout (19a68dd)
 - fix: advertisement skipping not working on server-side ads (2825d58)
 - fix: clicking the timeline does not trigger a seek (c2f1880)
 - fix: playlists not rendering on player ui (3f15703)
 - feat: separate layout bundles to customise the player ui (b5c053d)
 - feat: allow changing of theme, layout or content type to re-render the player ui (5959b23)

## 0.0.29

 - changed: default skip offset to 10 seconds (58fe6a4)
 - fix: replaced fetch calls with XMLHttpRequest for better cross platform support (982f431)
 - fix: `.replace` is not a function errors when generating a uuid (fd7c968)
 - change: simplified id generation for themes (e390814)
 - removed: warning logging from production builds (052208f)

## 0.0.28

 - feat: allow replay of ads on live streams after a configurable timeout (ff87de0)
 - fix: source loader always assuming a playlist url even with an audio file extension (5db61bd)
 - change: updated icons when loading and playing advertisements (fbe7993)
 - fix: skip offset remainder decrementing quicker than intended (cbeaa17)
 - fix: utils not being exported to the correct namespace (f54cc1f)
 - feat: adSkipOffset option added to allow ads to be skipped after a duration (6562509)

## 0.0.27

 - removed: custom loader for iono urls (a066489)

## 0.0.26

 - fix: playback not starting on Safari and iOS when client-side pre-roll advertisements are present (2e9e235)

## 0.0.25

 - fix: temporary fix for ads breaking playback on iOS and Safari (ec83d5b)
 - fix: state button on player ui not updating correctly in an ad state (a14bf8f)
 - fix: ad requests failing due to invalid import (3a5ddec)
 - added: touch support to sliders on the player ui (903a863)
 - fix: ad ui not the same height as the player ui (14e91d8)
 - fix: quality dropdown cut off inside of iframes (302f6d5)

## 0.0.24

 - fix: player sometimes not playing if play is called while loading a playlist item (752e758)
 - change: updated localisation features to use locales loaded on the page instead of attempting to auto-load (082ba15)

## v0.0.23

 - fix: ad ui flashing when no ads to be played (6c65aa9)

## 0.0.22

 - fix: displayLanguage setting effecting the display language of all players on the page (9ac923a)
 - feat: language localisation support (dbc5589)
 - fix: player paused state not updating when calling play or pause while in the loading state (57fb031)
 - fix: now playing being polled for playlist items that aren't live streams (326d7dc)
 - fix: delay between playback being paused and the transitioning of state from playing to paused (10bd1fc)
 - fix: `getQualityLevels` returning a default quality level when none can be determined (ae7c08c)
 - fix: position and duration not resetting to zero upon unload of the current playlist (94e7f8e)
 - fix: invalid values returned by getPlaylist, getPlaylistItem and getPlaylistIndex during the loading state (4cd35ae)
 - fix: non-fatal <audio> errors causing the player to transition to the error state (7c703b7)
 - fix: player unable to transition from the loading to the waiting state (5a758df)
 - fix: Unable to retry playback when in an error state (e4a2992)
 - fix: `PIPELINE_ERROR_DECODE` errors when switching quality level on HLS sources when hls.js is in use (7b59c22)
 - fix: use cover art from playlist item if none found in now playing data (60c1578)
 - fix: update stream title on ui to a combination of the creator and title from now playing data (4ab25b5)
 - fix: now playing data not filling in defaults for missing fields (b9e95f3)

## 0.0.21

 - removed: loading of theme colors from url params (449a0ec)
 - fix: default links attribute not being added to playlist items (e46fba3)
 - added: dynamic theme colors for advertising ui (d8fdb39)
 - added: dynamic border and muted text color generation for player ui (89a444a)
 - feat: support for player UI themes (6338a89)
 - added: support array and object responses from ad request urls (d501293)

## 0.0.20

 - feat: player switches to an advertisement UI while playing advertisements (f92f422)
 - fix: the `duration` property is missing from `durationchange` events fired when a playlist item with a metadata duration is loaded (f3da2b0)
 - added: compute values for `uid` and `uuid` inside of ad server urls (287c18c)
 - added: additional `adRequestURL` and `adRequestTimeout` options to configure client-side ad requests (fd91e3a)

## 0.0.19

 - added: timeout of 3 seconds to ad server requests (3e60c9d)
 - added: uid and uuid fields passed to ad server via query params (fbaeee5)
 - feat: allow skipping of the current ad break (0dc8ca4)
 - fix: pause events not marking content/advertisements tracking as interrupted (b5927aa)
 - fix: server-side mid-roll ads emit resume instead of play tracking actions when playback begins (e273def)
 - fix: tracking not setting the current item to interrupted when volume is set to zero (31aa1ae)
 - fix: tracking markers not being marked as tracked (f3c79e4)
 - fix: server-side advertisements not being tracked correctly (d7e94d0)
 - fix: mid-rolls not transitioning the player to the adplaying state (b81e09b)
 - fix: player not triggering ended events (424ba01)
 - added: play action tracking events (4d581ce)
 - fix: final position tracking event on ads triggers analytics event on the content instead of the advertisement (c8ed275)
 - added: analyticsCategory player config option (49be19e)

## 0.0.18

 - added: client-side pre-roll advertisement support (1f6dc6a)
 - fix: unable to replay item once it's reached the end (0f73a2a)

## 0.0.17

 - fix: changing playlist item does not clear the buffer progress on the player ui (2b7c3ec)
 - fix: player sometimes not emitting the progress event for the first chunk (a569502)
 - fix: player ui not being completely destroyed (3218a32)
 - added: support for pushing analytics events to a custom endpoint (e772d7b)
 - added: analyticsLabel option to player api options (64cedc3)

## 0.0.16

 - fix: player not transitioning to the paused state when the current playback item completes (e1985fd)
 - fix: error when loading a source that doesn't result in a valid quality level being selected (f7fd9d4)
 - fix: player api not emitting progress events (ffd5cdf)
 - fix: timeupdate events not firing while paused (c5e1de3)
 - fix: changing muted state in one player ui changes muted state in all other player uis on the page (a9df040)
 - fix: durationchange event not firing on the api during empty and idle states (86e3617)

## 0.0.15

 - fix: quality levels not being cleared when the player is emptied (8f69801)
 - fix: empty event not firing when entering the empty state (0e25ee0)
 - added: add() method allowing additional playlist items to be added to the current playlist (802602c)
 - fix: player not transitioning to the waiting state when changing quality level (1098b69)
 - added: stream player example (048777a)
 - fix: stop event not firing when a live stream is paused (f8abc89)

## 0.0.14

 - fix: events that were no longer supported by the player (40fd04a)

## v0.0.13

 - fix: stop() not updating the paused status (fc29342)
 - fix: playback events such as volumechange not firing while in the empty state (a8a8de7)
 - fix: playbackRate property missing from the ratechange event (1459e9d)
 - fix: levelschange event not firing during loading state (a36f0d9)
 - fix: getMute not returning the updated value after calling setMute (c1dadf7)
 - fix: getLanguage not returning the updated language after changing the active language (63f15a1)
 - fix: SENTRY_DSN error on builds that don't include a dsn for Sentry (82c5427)

## v0.0.12

 - fix: server-side ads with a combined duration greater than the actual playback duration causing out of memory errors (be6a78c)
 - fix: hls.js being used by environments that support hls playback natively (6b868eb)
 - fix: sources loaded with a metadata content type or input type option of of stream not being marked as live sources (f4b2ced)
 - fix: last content tracking marker not being populated on FIrefox (5327315)
 - fix: source not being marked as live when duration is infinity (0440a7c)
 - fix: final content tracking marker not ending at the start of server-side post-roll ads (208558e)

## v0.0.11

 - added: sentry client sdk to iono test player (18a370d)
 - fix: logging and integration with sentry.io (dee1fd1)

## v0.0.10

 - fix: unable to load remote urls on Internet Explorer (536f96a)
 - fix: position tracking events not being triggered when textTracksEnabled setting is false (9bd19a7)
 - fix: multiple pause events when stopping playback (e9b7afb)
 - fix: reduced the number of text track events being fired when loading a playlist item (84bf7b4)
 - fix: player not starting playback on load of a new playlist item when play is called immediately after load (1e27e84)
 - fix: playlist item change event not being fired when loading a new playlist (9501d03)

## v0.0.9

 - fix: contentType warning when calling play immediately after load for the first time (480daa6)
 - fix: text tracks failing to load on Safari (93f2adb)
 - fix: error when attempting to destroy hls.js instance when the player is destroyed (3f392ca)

## v0.0.8

 - fix: switching playlist item tracks some events to the previous playlist item (1ba4c80)
 - fix: errors when loading a source that does not have icons or banners in metadata (509efc9)
 - feat: added network info to getEvironment (fc40ecd)
 - fix: typeerror when creating uuid (fce1572)

## v0.0.7

 - feat: added uuid utility (7baca90)

## v0.0.6

 - fix: regression causing quality changes to not resume from the previous playback position (6a40c25)
 - fix: duplicate waiting, playing and loading events being triggered (2a9f3db)
 - fix: multiple pause events fired when the media element fires a pause event and the player isn't in the playing state (634db01)
 - fix: the first position tracking event fires before playback is started (7091b1b)
 - fix: multiple position tracking events fired when their duration changes shortly before or after a position tracking event fires (5d7a5d7)
 - fix: next and previous methods not returning the index of the playlist item it moves to (2104fd6)
 - fix: text tracks not being shown when loading a new playlist item and text tracks are enabled (e7e316f)

## v0.0.5

 - fix: url loader building invalid Iono urls when one or more query parameters are already present on the url (ed409c8)
 - fix: seeking not working until audio data is loaded (2380c08)
 - fix: live streams not being stopped when paused (8e26042)
 - fix: sort option when loading a playlist not working (2657ad2)
 - fix: playback not resumed after changing the current playlist item (f4995cf)
 - fix: current playlist item is not stopped when moving to the next playlist item (3333945)
 - fix: changing quality level does not resume from position before the change (8dc267e)
 - fix: unable to pause while loading another playlist item (1289eaa)
 - fix: url loader not skipping playlist items when loading a url source and providing a skip option (57a3b9b)
 - fix: playback tracking events not firing (459c9cf)
 - fix: levels not falling back to the closest available level on load (980224b)
 - fix: errors during initial audio load not trying other formats before failing (c1be9b6)
 - fix: missing one method on player (1e77b5c)
