wavesurfer.js 7.5.0 → 7.5.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -2,13 +2,7 @@
2
2
 
3
3
  [![npm](https://img.shields.io/npm/v/wavesurfer.js)](https://www.npmjs.com/package/wavesurfer.js)
4
4
 
5
- ## New TypeScript version
6
-
7
- wavesurfer.js v7 is a TypeScript rewrite of wavesurfer.js that brings several improvements:
8
-
9
- * Typed API for better development experience
10
- * Enhanced decoding and rendering performance
11
- * New and improved plugins
5
+ **Wavesurfer.js** is an interactive waveform rendering and audio playback library, perfect for web applications. It leverages modern web technologies to provide a robust and visually engaging audio experience.
12
6
 
13
7
  <img width="626" alt="waveform screenshot" src="https://github.com/katspaugh/wavesurfer.js/assets/381895/05f03bed-800e-4fa1-b09a-82a39a1c62ce">
14
8
 
@@ -62,7 +56,7 @@ See the wavesurfer.js documentation on our website:
62
56
 
63
57
  ## Plugins
64
58
 
65
- The "official" plugins have been completely rewritten and enhanced:
59
+ We maintain a number of official plugins that add various extra features:
66
60
 
67
61
  * [Regions](https://wavesurfer.xyz/examples/?regions.js) – visual overlays and markers for regions of audio
68
62
  * [Timeline](https://wavesurfer.xyz/examples/?timeline.js) – displays notches and time labels below the waveform
@@ -90,7 +84,17 @@ For example:
90
84
  You can see which elements you can style in the DOM inspector – they will have a `part` attribute.
91
85
  See [this example](https://wavesurfer.xyz/examples/?styling.js) to play around with styling.
92
86
 
93
- ## Upgrading from v6
87
+ ## v7 a new TypeScript version
88
+
89
+ Wavesurfer.js v7 is a TypeScript rewrite of wavesurfer.js that brings several improvements:
90
+
91
+ * Typed API for better development experience
92
+ * Enhanced decoding and rendering performance
93
+ * New and improved plugins
94
+
95
+ <img width="749" alt="Screenshot 2023-12-06 at 09 06 30" src="https://github.com/katspaugh/wavesurfer.js/assets/381895/21eca2d9-47c7-461f-82bb-f23993818458">
96
+
97
+ ### Upgrading from v6
94
98
 
95
99
  Most options, events, and methods are similar to those in previous versions.
96
100
 
@@ -6,7 +6,7 @@ import { type WaveSurferOptions } from '../wavesurfer.js';
6
6
  export type MinimapPluginOptions = {
7
7
  overlayColor?: string;
8
8
  insertPosition?: InsertPosition;
9
- } & WaveSurferOptions;
9
+ } & Partial<WaveSurferOptions>;
10
10
  declare const defaultOptions: {
11
11
  height: number;
12
12
  overlayColor: string;
@@ -6,7 +6,7 @@ import { type WaveSurferOptions } from '../wavesurfer.js';
6
6
  export type MinimapPluginOptions = {
7
7
  overlayColor?: string;
8
8
  insertPosition?: InsertPosition;
9
- } & WaveSurferOptions;
9
+ } & Partial<WaveSurferOptions>;
10
10
  declare const defaultOptions: {
11
11
  height: number;
12
12
  overlayColor: string;
@@ -19,6 +19,7 @@
19
19
  import { BasePlugin, BasePluginEvents } from '../base-plugin.js';
20
20
  export type ZoomPluginOptions = {
21
21
  scale?: number;
22
+ maxZoom?: number;
22
23
  };
23
24
  declare const defaultOptions: {
24
25
  scale: number;
@@ -32,6 +33,7 @@ declare class ZoomPlugin extends BasePlugin<ZoomPluginEvents, ZoomPluginOptions>
32
33
  static create(options?: ZoomPluginOptions): ZoomPlugin;
33
34
  onInit(): void;
34
35
  private onWheel;
36
+ private calculateNewZoom;
35
37
  destroy(): void;
36
38
  }
37
39
  export default ZoomPlugin;
@@ -1 +1 @@
1
- "use strict";class e{constructor(){this.listeners={},this.on=this.addEventListener,this.un=this.removeEventListener}addEventListener(e,t,s){if(this.listeners[e]||(this.listeners[e]=new Set),this.listeners[e].add(t),null==s?void 0:s.once){const s=()=>{this.removeEventListener(e,s),this.removeEventListener(e,t)};return this.addEventListener(e,s),s}return()=>this.removeEventListener(e,t)}removeEventListener(e,t){var s;null===(s=this.listeners[e])||void 0===s||s.delete(t)}once(e,t){return this.on(e,t,{once:!0})}unAll(){this.listeners={}}emit(e,...t){this.listeners[e]&&this.listeners[e].forEach((e=>e(...t)))}}class t extends e{constructor(e){super(),this.subscriptions=[],this.options=e}onInit(){}init(e){this.wavesurfer=e,this.onInit()}destroy(){this.emit("destroy"),this.subscriptions.forEach((e=>e()))}}const s={scale:.2};class i extends t{constructor(e){super(e||{}),this.wrapper=void 0,this.container=null,this.onWheel=e=>{var t;if(!(null===(t=this.wavesurfer)||void 0===t?void 0:t.options.minPxPerSec)||!this.container)return;e.preventDefault();const s=this.wavesurfer.getDuration(),i=this.wavesurfer.options.minPxPerSec,r=e.clientX,n=this.container.clientWidth,o=(this.wavesurfer.getScroll()+r)/i,h=i*(e.deltaY>0?1-this.options.scale:1+this.options.scale),a=n/h*(r/n);h*s<n?(this.wavesurfer.zoom(n/s),this.container.scrollLeft=0):(this.wavesurfer.zoom(h),this.container.scrollLeft=(o-a)*h)},this.options=Object.assign({},s,e)}static create(e){return new i(e)}onInit(){var e;this.wrapper=null===(e=this.wavesurfer)||void 0===e?void 0:e.getWrapper(),this.wrapper&&(this.container=this.wrapper.parentElement,this.wrapper.addEventListener("wheel",this.onWheel))}destroy(){this.wrapper&&this.wrapper.removeEventListener("wheel",this.onWheel),super.destroy()}}module.exports=i;
1
+ "use strict";class e{constructor(){this.listeners={},this.on=this.addEventListener,this.un=this.removeEventListener}addEventListener(e,t,s){if(this.listeners[e]||(this.listeners[e]=new Set),this.listeners[e].add(t),null==s?void 0:s.once){const s=()=>{this.removeEventListener(e,s),this.removeEventListener(e,t)};return this.addEventListener(e,s),s}return()=>this.removeEventListener(e,t)}removeEventListener(e,t){var s;null===(s=this.listeners[e])||void 0===s||s.delete(t)}once(e,t){return this.on(e,t,{once:!0})}unAll(){this.listeners={}}emit(e,...t){this.listeners[e]&&this.listeners[e].forEach((e=>e(...t)))}}class t extends e{constructor(e){super(),this.subscriptions=[],this.options=e}onInit(){}init(e){this.wavesurfer=e,this.onInit()}destroy(){this.emit("destroy"),this.subscriptions.forEach((e=>e()))}}const s={scale:.5};class i extends t{constructor(e){super(e||{}),this.wrapper=void 0,this.container=null,this.onWheel=e=>{if(!this.wavesurfer||!this.container||Math.abs(e.deltaX)>=Math.abs(e.deltaY))return;e.preventDefault();const t=this.wavesurfer.getDuration(),s=this.wavesurfer.options.minPxPerSec,i=e.clientX,r=this.container.clientWidth,n=(this.wavesurfer.getScroll()+i)/s,o=this.calculateNewZoom(s,-e.deltaY),h=r/o*(i/r);o*t<r?(this.wavesurfer.zoom(r/t),this.container.scrollLeft=0):(this.wavesurfer.zoom(o),this.container.scrollLeft=(n-h)*o)},this.calculateNewZoom=(e,t)=>{const s=Math.max(0,e+t*this.options.scale);return void 0===this.options.maxZoom?s:Math.min(s,this.options.maxZoom)},this.options=Object.assign({},s,e)}static create(e){return new i(e)}onInit(){var e;this.wrapper=null===(e=this.wavesurfer)||void 0===e?void 0:e.getWrapper(),this.wrapper&&(this.container=this.wrapper.parentElement,this.wrapper.addEventListener("wheel",this.onWheel))}destroy(){this.wrapper&&this.wrapper.removeEventListener("wheel",this.onWheel),super.destroy()}}module.exports=i;
@@ -19,6 +19,7 @@
19
19
  import { BasePlugin, BasePluginEvents } from '../base-plugin.js';
20
20
  export type ZoomPluginOptions = {
21
21
  scale?: number;
22
+ maxZoom?: number;
22
23
  };
23
24
  declare const defaultOptions: {
24
25
  scale: number;
@@ -32,6 +33,7 @@ declare class ZoomPlugin extends BasePlugin<ZoomPluginEvents, ZoomPluginOptions>
32
33
  static create(options?: ZoomPluginOptions): ZoomPlugin;
33
34
  onInit(): void;
34
35
  private onWheel;
36
+ private calculateNewZoom;
35
37
  destroy(): void;
36
38
  }
37
39
  export default ZoomPlugin;
@@ -1 +1 @@
1
- class e{constructor(){this.listeners={},this.on=this.addEventListener,this.un=this.removeEventListener}addEventListener(e,t,s){if(this.listeners[e]||(this.listeners[e]=new Set),this.listeners[e].add(t),null==s?void 0:s.once){const s=()=>{this.removeEventListener(e,s),this.removeEventListener(e,t)};return this.addEventListener(e,s),s}return()=>this.removeEventListener(e,t)}removeEventListener(e,t){var s;null===(s=this.listeners[e])||void 0===s||s.delete(t)}once(e,t){return this.on(e,t,{once:!0})}unAll(){this.listeners={}}emit(e,...t){this.listeners[e]&&this.listeners[e].forEach((e=>e(...t)))}}class t extends e{constructor(e){super(),this.subscriptions=[],this.options=e}onInit(){}init(e){this.wavesurfer=e,this.onInit()}destroy(){this.emit("destroy"),this.subscriptions.forEach((e=>e()))}}const s={scale:.2};class i extends t{constructor(e){super(e||{}),this.wrapper=void 0,this.container=null,this.onWheel=e=>{var t;if(!(null===(t=this.wavesurfer)||void 0===t?void 0:t.options.minPxPerSec)||!this.container)return;e.preventDefault();const s=this.wavesurfer.getDuration(),i=this.wavesurfer.options.minPxPerSec,r=e.clientX,n=this.container.clientWidth,o=(this.wavesurfer.getScroll()+r)/i,h=i*(e.deltaY>0?1-this.options.scale:1+this.options.scale),a=n/h*(r/n);h*s<n?(this.wavesurfer.zoom(n/s),this.container.scrollLeft=0):(this.wavesurfer.zoom(h),this.container.scrollLeft=(o-a)*h)},this.options=Object.assign({},s,e)}static create(e){return new i(e)}onInit(){var e;this.wrapper=null===(e=this.wavesurfer)||void 0===e?void 0:e.getWrapper(),this.wrapper&&(this.container=this.wrapper.parentElement,this.wrapper.addEventListener("wheel",this.onWheel))}destroy(){this.wrapper&&this.wrapper.removeEventListener("wheel",this.onWheel),super.destroy()}}export{i as default};
1
+ class e{constructor(){this.listeners={},this.on=this.addEventListener,this.un=this.removeEventListener}addEventListener(e,t,s){if(this.listeners[e]||(this.listeners[e]=new Set),this.listeners[e].add(t),null==s?void 0:s.once){const s=()=>{this.removeEventListener(e,s),this.removeEventListener(e,t)};return this.addEventListener(e,s),s}return()=>this.removeEventListener(e,t)}removeEventListener(e,t){var s;null===(s=this.listeners[e])||void 0===s||s.delete(t)}once(e,t){return this.on(e,t,{once:!0})}unAll(){this.listeners={}}emit(e,...t){this.listeners[e]&&this.listeners[e].forEach((e=>e(...t)))}}class t extends e{constructor(e){super(),this.subscriptions=[],this.options=e}onInit(){}init(e){this.wavesurfer=e,this.onInit()}destroy(){this.emit("destroy"),this.subscriptions.forEach((e=>e()))}}const s={scale:.5};class i extends t{constructor(e){super(e||{}),this.wrapper=void 0,this.container=null,this.onWheel=e=>{if(!this.wavesurfer||!this.container||Math.abs(e.deltaX)>=Math.abs(e.deltaY))return;e.preventDefault();const t=this.wavesurfer.getDuration(),s=this.wavesurfer.options.minPxPerSec,i=e.clientX,r=this.container.clientWidth,n=(this.wavesurfer.getScroll()+i)/s,o=this.calculateNewZoom(s,-e.deltaY),h=r/o*(i/r);o*t<r?(this.wavesurfer.zoom(r/t),this.container.scrollLeft=0):(this.wavesurfer.zoom(o),this.container.scrollLeft=(n-h)*o)},this.calculateNewZoom=(e,t)=>{const s=Math.max(0,e+t*this.options.scale);return void 0===this.options.maxZoom?s:Math.min(s,this.options.maxZoom)},this.options=Object.assign({},s,e)}static create(e){return new i(e)}onInit(){var e;this.wrapper=null===(e=this.wavesurfer)||void 0===e?void 0:e.getWrapper(),this.wrapper&&(this.container=this.wrapper.parentElement,this.wrapper.addEventListener("wheel",this.onWheel))}destroy(){this.wrapper&&this.wrapper.removeEventListener("wheel",this.onWheel),super.destroy()}}export{i as default};
@@ -1 +1 @@
1
- class e{constructor(){this.listeners={},this.on=this.addEventListener,this.un=this.removeEventListener}addEventListener(e,t,s){if(this.listeners[e]||(this.listeners[e]=new Set),this.listeners[e].add(t),null==s?void 0:s.once){const s=()=>{this.removeEventListener(e,s),this.removeEventListener(e,t)};return this.addEventListener(e,s),s}return()=>this.removeEventListener(e,t)}removeEventListener(e,t){var s;null===(s=this.listeners[e])||void 0===s||s.delete(t)}once(e,t){return this.on(e,t,{once:!0})}unAll(){this.listeners={}}emit(e,...t){this.listeners[e]&&this.listeners[e].forEach((e=>e(...t)))}}class t extends e{constructor(e){super(),this.subscriptions=[],this.options=e}onInit(){}init(e){this.wavesurfer=e,this.onInit()}destroy(){this.emit("destroy"),this.subscriptions.forEach((e=>e()))}}const s={scale:.2};class i extends t{constructor(e){super(e||{}),this.wrapper=void 0,this.container=null,this.onWheel=e=>{var t;if(!(null===(t=this.wavesurfer)||void 0===t?void 0:t.options.minPxPerSec)||!this.container)return;e.preventDefault();const s=this.wavesurfer.getDuration(),i=this.wavesurfer.options.minPxPerSec,r=e.clientX,n=this.container.clientWidth,o=(this.wavesurfer.getScroll()+r)/i,h=i*(e.deltaY>0?1-this.options.scale:1+this.options.scale),a=n/h*(r/n);h*s<n?(this.wavesurfer.zoom(n/s),this.container.scrollLeft=0):(this.wavesurfer.zoom(h),this.container.scrollLeft=(o-a)*h)},this.options=Object.assign({},s,e)}static create(e){return new i(e)}onInit(){var e;this.wrapper=null===(e=this.wavesurfer)||void 0===e?void 0:e.getWrapper(),this.wrapper&&(this.container=this.wrapper.parentElement,this.wrapper.addEventListener("wheel",this.onWheel))}destroy(){this.wrapper&&this.wrapper.removeEventListener("wheel",this.onWheel),super.destroy()}}export{i as default};
1
+ class e{constructor(){this.listeners={},this.on=this.addEventListener,this.un=this.removeEventListener}addEventListener(e,t,s){if(this.listeners[e]||(this.listeners[e]=new Set),this.listeners[e].add(t),null==s?void 0:s.once){const s=()=>{this.removeEventListener(e,s),this.removeEventListener(e,t)};return this.addEventListener(e,s),s}return()=>this.removeEventListener(e,t)}removeEventListener(e,t){var s;null===(s=this.listeners[e])||void 0===s||s.delete(t)}once(e,t){return this.on(e,t,{once:!0})}unAll(){this.listeners={}}emit(e,...t){this.listeners[e]&&this.listeners[e].forEach((e=>e(...t)))}}class t extends e{constructor(e){super(),this.subscriptions=[],this.options=e}onInit(){}init(e){this.wavesurfer=e,this.onInit()}destroy(){this.emit("destroy"),this.subscriptions.forEach((e=>e()))}}const s={scale:.5};class i extends t{constructor(e){super(e||{}),this.wrapper=void 0,this.container=null,this.onWheel=e=>{if(!this.wavesurfer||!this.container||Math.abs(e.deltaX)>=Math.abs(e.deltaY))return;e.preventDefault();const t=this.wavesurfer.getDuration(),s=this.wavesurfer.options.minPxPerSec,i=e.clientX,r=this.container.clientWidth,n=(this.wavesurfer.getScroll()+i)/s,o=this.calculateNewZoom(s,-e.deltaY),h=r/o*(i/r);o*t<r?(this.wavesurfer.zoom(r/t),this.container.scrollLeft=0):(this.wavesurfer.zoom(o),this.container.scrollLeft=(n-h)*o)},this.calculateNewZoom=(e,t)=>{const s=Math.max(0,e+t*this.options.scale);return void 0===this.options.maxZoom?s:Math.min(s,this.options.maxZoom)},this.options=Object.assign({},s,e)}static create(e){return new i(e)}onInit(){var e;this.wrapper=null===(e=this.wavesurfer)||void 0===e?void 0:e.getWrapper(),this.wrapper&&(this.container=this.wrapper.parentElement,this.wrapper.addEventListener("wheel",this.onWheel))}destroy(){this.wrapper&&this.wrapper.removeEventListener("wheel",this.onWheel),super.destroy()}}export{i as default};
@@ -1 +1 @@
1
- !function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define(t):((e="undefined"!=typeof globalThis?globalThis:e||self).WaveSurfer=e.WaveSurfer||{},e.WaveSurfer.Zoom=t())}(this,(function(){"use strict";class e{constructor(){this.listeners={},this.on=this.addEventListener,this.un=this.removeEventListener}addEventListener(e,t,s){if(this.listeners[e]||(this.listeners[e]=new Set),this.listeners[e].add(t),null==s?void 0:s.once){const s=()=>{this.removeEventListener(e,s),this.removeEventListener(e,t)};return this.addEventListener(e,s),s}return()=>this.removeEventListener(e,t)}removeEventListener(e,t){var s;null===(s=this.listeners[e])||void 0===s||s.delete(t)}once(e,t){return this.on(e,t,{once:!0})}unAll(){this.listeners={}}emit(e,...t){this.listeners[e]&&this.listeners[e].forEach((e=>e(...t)))}}class t extends e{constructor(e){super(),this.subscriptions=[],this.options=e}onInit(){}init(e){this.wavesurfer=e,this.onInit()}destroy(){this.emit("destroy"),this.subscriptions.forEach((e=>e()))}}const s={scale:.2};class i extends t{constructor(e){super(e||{}),this.wrapper=void 0,this.container=null,this.onWheel=e=>{var t;if(!(null===(t=this.wavesurfer)||void 0===t?void 0:t.options.minPxPerSec)||!this.container)return;e.preventDefault();const s=this.wavesurfer.getDuration(),i=this.wavesurfer.options.minPxPerSec,r=e.clientX,n=this.container.clientWidth,o=(this.wavesurfer.getScroll()+r)/i,h=i*(e.deltaY>0?1-this.options.scale:1+this.options.scale),a=n/h*(r/n);h*s<n?(this.wavesurfer.zoom(n/s),this.container.scrollLeft=0):(this.wavesurfer.zoom(h),this.container.scrollLeft=(o-a)*h)},this.options=Object.assign({},s,e)}static create(e){return new i(e)}onInit(){var e;this.wrapper=null===(e=this.wavesurfer)||void 0===e?void 0:e.getWrapper(),this.wrapper&&(this.container=this.wrapper.parentElement,this.wrapper.addEventListener("wheel",this.onWheel))}destroy(){this.wrapper&&this.wrapper.removeEventListener("wheel",this.onWheel),super.destroy()}}return i}));
1
+ !function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define(t):((e="undefined"!=typeof globalThis?globalThis:e||self).WaveSurfer=e.WaveSurfer||{},e.WaveSurfer.Zoom=t())}(this,(function(){"use strict";class e{constructor(){this.listeners={},this.on=this.addEventListener,this.un=this.removeEventListener}addEventListener(e,t,s){if(this.listeners[e]||(this.listeners[e]=new Set),this.listeners[e].add(t),null==s?void 0:s.once){const s=()=>{this.removeEventListener(e,s),this.removeEventListener(e,t)};return this.addEventListener(e,s),s}return()=>this.removeEventListener(e,t)}removeEventListener(e,t){var s;null===(s=this.listeners[e])||void 0===s||s.delete(t)}once(e,t){return this.on(e,t,{once:!0})}unAll(){this.listeners={}}emit(e,...t){this.listeners[e]&&this.listeners[e].forEach((e=>e(...t)))}}class t extends e{constructor(e){super(),this.subscriptions=[],this.options=e}onInit(){}init(e){this.wavesurfer=e,this.onInit()}destroy(){this.emit("destroy"),this.subscriptions.forEach((e=>e()))}}const s={scale:.5};class i extends t{constructor(e){super(e||{}),this.wrapper=void 0,this.container=null,this.onWheel=e=>{if(!this.wavesurfer||!this.container||Math.abs(e.deltaX)>=Math.abs(e.deltaY))return;e.preventDefault();const t=this.wavesurfer.getDuration(),s=this.wavesurfer.options.minPxPerSec,i=e.clientX,r=this.container.clientWidth,n=(this.wavesurfer.getScroll()+i)/s,o=this.calculateNewZoom(s,-e.deltaY),h=r/o*(i/r);o*t<r?(this.wavesurfer.zoom(r/t),this.container.scrollLeft=0):(this.wavesurfer.zoom(o),this.container.scrollLeft=(n-h)*o)},this.calculateNewZoom=(e,t)=>{const s=Math.max(0,e+t*this.options.scale);return void 0===this.options.maxZoom?s:Math.min(s,this.options.maxZoom)},this.options=Object.assign({},s,e)}static create(e){return new i(e)}onInit(){var e;this.wrapper=null===(e=this.wavesurfer)||void 0===e?void 0:e.getWrapper(),this.wrapper&&(this.container=this.wrapper.parentElement,this.wrapper.addEventListener("wheel",this.onWheel))}destroy(){this.wrapper&&this.wrapper.removeEventListener("wheel",this.onWheel),super.destroy()}}return i}));
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "wavesurfer.js",
3
- "version": "7.5.0",
3
+ "version": "7.5.1",
4
4
  "license": "BSD-3-Clause",
5
5
  "author": "katspaugh",
6
6
  "description": "Navigable audio waveform player",