wavesurfer.js 5.1.0 → 6.0.2

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.
Files changed (66) hide show
  1. package/CHANGES.md +47 -0
  2. package/README.md +10 -0
  3. package/dist/plugin/wavesurfer.cursor.js +53 -51
  4. package/dist/plugin/wavesurfer.cursor.js.map +1 -1
  5. package/dist/plugin/wavesurfer.cursor.min.js +2 -2
  6. package/dist/plugin/wavesurfer.cursor.min.js.map +1 -1
  7. package/dist/plugin/wavesurfer.elan.js +10 -7
  8. package/dist/plugin/wavesurfer.elan.js.map +1 -1
  9. package/dist/plugin/wavesurfer.elan.min.js +2 -2
  10. package/dist/plugin/wavesurfer.elan.min.js.map +1 -1
  11. package/dist/plugin/wavesurfer.markers.js +142 -26
  12. package/dist/plugin/wavesurfer.markers.js.map +1 -1
  13. package/dist/plugin/wavesurfer.markers.min.js +2 -2
  14. package/dist/plugin/wavesurfer.markers.min.js.map +1 -1
  15. package/dist/plugin/wavesurfer.mediasession.js +6 -6
  16. package/dist/plugin/wavesurfer.mediasession.js.map +1 -1
  17. package/dist/plugin/wavesurfer.mediasession.min.js +2 -2
  18. package/dist/plugin/wavesurfer.mediasession.min.js.map +1 -1
  19. package/dist/plugin/wavesurfer.microphone.js +5 -5
  20. package/dist/plugin/wavesurfer.microphone.js.map +1 -1
  21. package/dist/plugin/wavesurfer.microphone.min.js +2 -2
  22. package/dist/plugin/wavesurfer.microphone.min.js.map +1 -1
  23. package/dist/plugin/wavesurfer.minimap.js +26 -23
  24. package/dist/plugin/wavesurfer.minimap.js.map +1 -1
  25. package/dist/plugin/wavesurfer.minimap.min.js +2 -2
  26. package/dist/plugin/wavesurfer.minimap.min.js.map +1 -1
  27. package/dist/plugin/wavesurfer.playhead.js +5 -5
  28. package/dist/plugin/wavesurfer.playhead.js.map +1 -1
  29. package/dist/plugin/wavesurfer.playhead.min.js +2 -2
  30. package/dist/plugin/wavesurfer.playhead.min.js.map +1 -1
  31. package/dist/plugin/wavesurfer.regions.js +88 -21
  32. package/dist/plugin/wavesurfer.regions.js.map +1 -1
  33. package/dist/plugin/wavesurfer.regions.min.js +2 -2
  34. package/dist/plugin/wavesurfer.regions.min.js.map +1 -1
  35. package/dist/plugin/wavesurfer.spectrogram.js +71 -58
  36. package/dist/plugin/wavesurfer.spectrogram.js.map +1 -1
  37. package/dist/plugin/wavesurfer.spectrogram.min.js +2 -2
  38. package/dist/plugin/wavesurfer.spectrogram.min.js.map +1 -1
  39. package/dist/plugin/wavesurfer.timeline.js +52 -54
  40. package/dist/plugin/wavesurfer.timeline.js.map +1 -1
  41. package/dist/plugin/wavesurfer.timeline.min.js +2 -2
  42. package/dist/plugin/wavesurfer.timeline.min.js.map +1 -1
  43. package/dist/wavesurfer-html-init.js +6 -6
  44. package/dist/wavesurfer-html-init.js.map +1 -1
  45. package/dist/wavesurfer-html-init.min.js +2 -2
  46. package/dist/wavesurfer-html-init.min.js.map +1 -1
  47. package/dist/wavesurfer.js +302 -133
  48. package/dist/wavesurfer.js.map +1 -1
  49. package/dist/wavesurfer.min.js +2 -2
  50. package/dist/wavesurfer.min.js.map +1 -1
  51. package/package.json +23 -23
  52. package/src/drawer.canvasentry.js +33 -6
  53. package/src/drawer.js +1 -0
  54. package/src/drawer.multicanvas.js +19 -8
  55. package/src/mediaelement.js +1 -1
  56. package/src/plugin/cursor/index.js +68 -70
  57. package/src/plugin/markers/index.js +112 -23
  58. package/src/plugin/minimap/index.js +24 -21
  59. package/src/plugin/regions/index.js +31 -4
  60. package/src/plugin/regions/region.js +45 -8
  61. package/src/plugin/spectrogram/index.js +65 -50
  62. package/src/plugin/timeline/index.js +11 -9
  63. package/src/util/index.js +1 -0
  64. package/src/util/silence-mode.js +35 -0
  65. package/src/wavesurfer.js +54 -23
  66. package/src/webaudio.js +10 -1
@@ -1 +1 @@
1
- {"version":3,"sources":["webpack://WaveSurfer.[name]/webpack/universalModuleDefinition","webpack://WaveSurfer.[name]/./src/plugin/regions/index.js","webpack://WaveSurfer.[name]/./src/plugin/regions/region.js","webpack://WaveSurfer.[name]/webpack/bootstrap","webpack://WaveSurfer.[name]/webpack/startup"],"names":["RegionsPlugin","params","ws","wavesurfer","util","getRegionSnapToGridValue","value","maxRegions","regionsMinLength","observerPrototypeKeys","Object","getOwnPropertyNames","Observer","prototype","forEach","key","Region","scrollWidthProportion","_onBackendCreated","wrapper","drawer","orientation","regions","region","edgeScrollWidth","clientWidth","add","list","_onReady","vertical","dragSelection","enableDragSelection","keys","id","updateRender","isReady","once","un","disableDragSelection","clear","length","wouldExceedMaxRegions","minLength","on","remove","slop","container","scroll","scrollParent","scrollSpeed","scrollThreshold","drag","duration","getDuration","maxScroll","start","touchId","pxMove","scrollDirection","wrapperRect","edgeScroll","e","scrollLeft","Math","min","max","end","handleEvent","update","window","requestAnimationFrame","eventDown","touches","targetTouches","identifier","scrollWidth","withOrientation","getBoundingClientRect","addEventListener","removeEventListener","eventUp","preventClick","fireEvent","document","body","eventMove","event","startUpdate","endUpdate","orientedEvent","x","clientX","left","right","time","getCurrentTime","cur","snapToGridInterval","offset","snapToGridOffset","round","name","deferInit","staticProps","addRegion","options","initialisedPluginList","initPlugin","clearRegions","instance","regionsUtils","style","regionsUtil","getId","Number","resize","undefined","Boolean","isResizing","isDragging","loop","color","handleStyle","handleLeftEl","handleRightEl","data","attributes","showTooltip","maxLength","_onRedraw","preventContextMenu","channelIdx","parseInt","regionHeight","marginTop","channelCount","backend","buffer","numberOfChannels","floor","getHeight","formatTimeCallback","bindInOut","render","updateHandlesResize","element","removeChild","domElement","s","play","appendChild","createElement","className","title","formatTime","setAttribute","attrname","position","zIndex","height","top","css","cursor","width","backgroundColor","handleLeftCss","assign","handleRightCss","bindEvents","map","slice","join","pixelRatio","dur","getWidth","startLimited","endLimited","regionWidth","firedIn","firedOut","onProcess","realTime","preventDefault","stopPropagation","bindDragEvents","startTime","updated","regionLeftHalfTime","regionRightHalfTime","distanceBetweenCursorAndWrapperEdge","regionHalfTimeWidth","adjustment","minPxPerSec","wrapperScrollLeft","calculatedLeft","calculatedRight","delta","onDrag","onResize","onDown","target","tagName","toLowerCase","classList","contains","onUp","onMove","oldTime","maxEnd","passive","direction","cursorStyle"],"mappings":";;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+CAA+C;AAC/C,CAAC;AACD,O;;;;;;;;;;;;;;;;;ACyBA;;;;;;;;;;;;;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IACqBA,a;AA0CjB,yBAAYC,MAAZ,EAAoBC,EAApB,EAAwB;AAAA;;AAAA;;AACpB,SAAKD,MAAL,GAAcA,MAAd;AACA,SAAKE,UAAL,GAAkBD,EAAlB;AACA,SAAKE,IAAL,mCACOF,EAAE,CAACE,IADV;AAEIC,8BAAwB,EAAE,kCAAAC,KAAK,EAAI;AAC/B,eAAO,KAAI,CAACD,wBAAL,CAA8BC,KAA9B,EAAqCL,MAArC,CAAP;AACH;AAJL;AAMA,SAAKM,UAAL,GAAkBN,MAAM,CAACM,UAAzB;AACA,SAAKC,gBAAL,GAAwBP,MAAM,CAACO,gBAAP,IAA2B,IAAnD,CAVoB,CAYpB;;AACA,QAAMC,qBAAqB,GAAGC,MAAM,CAACC,mBAAP,CAC1B,KAAKP,IAAL,CAAUQ,QAAV,CAAmBC,SADO,CAA9B;AAGAJ,yBAAqB,CAACK,OAAtB,CAA8B,UAAAC,GAAG,EAAI;AACjCC,qBAAOH,SAAP,CAAiBE,GAAjB,IAAwB,KAAI,CAACX,IAAL,CAAUQ,QAAV,CAAmBC,SAAnB,CAA6BE,GAA7B,CAAxB;AACH,KAFD;AAGA,SAAKZ,UAAL,CAAgBa,MAAhB,GAAyBA,cAAzB,CAnBoB,CAqBpB;AACA;;AACA,QAAMC,qBAAqB,GAAG,IAA9B;;AACA,SAAKC,iBAAL,GAAyB,YAAM;AAC3B,WAAI,CAACC,OAAL,GAAe,KAAI,CAAChB,UAAL,CAAgBiB,MAAhB,CAAuBD,OAAtC;AACA,WAAI,CAACE,WAAL,GAAmB,KAAI,CAAClB,UAAL,CAAgBiB,MAAhB,CAAuBC,WAA1C;;AACA,UAAI,KAAI,CAACpB,MAAL,CAAYqB,OAAhB,EAAyB;AACrB,aAAI,CAACrB,MAAL,CAAYqB,OAAZ,CAAoBR,OAApB,CAA4B,UAAAS,MAAM,EAAI;AAClCA,gBAAM,CAACC,eAAP,GAAyB,KAAI,CAACvB,MAAL,CAAYuB,eAAZ,IACrB,KAAI,CAACL,OAAL,CAAaM,WAAb,GAA2BR,qBAD/B;;AAEA,eAAI,CAACS,GAAL,CAASH,MAAT;AACH,SAJD;AAKH;AACJ,KAVD,CAxBoB,CAoCpB;;;AACA,SAAKI,IAAL,GAAY,EAAZ;;AACA,SAAKC,QAAL,GAAgB,YAAM;AAClB,WAAI,CAACT,OAAL,GAAe,KAAI,CAAChB,UAAL,CAAgBiB,MAAhB,CAAuBD,OAAtC;AACA,WAAI,CAACU,QAAL,GAAgB,KAAI,CAAC1B,UAAL,CAAgBiB,MAAhB,CAAuBnB,MAAvB,CAA8B4B,QAA9C;;AACA,UAAI,KAAI,CAAC5B,MAAL,CAAY6B,aAAhB,EAA+B;AAC3B,aAAI,CAACC,mBAAL,CAAyB,KAAI,CAAC9B,MAA9B;AACH;;AACDS,YAAM,CAACsB,IAAP,CAAY,KAAI,CAACL,IAAjB,EAAuBb,OAAvB,CAA+B,UAAAmB,EAAE,EAAI;AACjC,aAAI,CAACN,IAAL,CAAUM,EAAV,EAAcC,YAAd;AACH,OAFD;AAGH,KATD;AAUH;;;;WAED,gBAAO;AACH;AACA,UAAI,KAAK/B,UAAL,CAAgBgC,OAApB,EAA6B;AACzB,aAAKjB,iBAAL;;AACA,aAAKU,QAAL;AACH,OAHD,MAGO;AACH,aAAKzB,UAAL,CAAgBiC,IAAhB,CAAqB,OAArB,EAA8B,KAAKR,QAAnC;AACA,aAAKzB,UAAL,CAAgBiC,IAAhB,CAAqB,iBAArB,EAAwC,KAAKlB,iBAA7C;AACH;AACJ;;;WAED,mBAAU;AACN,WAAKf,UAAL,CAAgBkC,EAAhB,CAAmB,OAAnB,EAA4B,KAAKT,QAAjC;AACA,WAAKzB,UAAL,CAAgBkC,EAAhB,CAAmB,iBAAnB,EAAsC,KAAKnB,iBAA3C;AACA,WAAKoB,oBAAL;AACA,WAAKC,KAAL;AACH;AAED;AACJ;AACA;AACA;AACA;;;;WACI,iCAAwB;AACpB,aACI,KAAKhC,UAAL,IAAmBG,MAAM,CAACsB,IAAP,CAAY,KAAKL,IAAjB,EAAuBa,MAAvB,IAAiC,KAAKjC,UAD7D;AAGH;AAED;AACJ;AACA;AACA;AACA;AACA;;;;WACI,aAAIN,MAAJ,EAAY;AAAA;;AACR,UAAI,KAAKwC,qBAAL,EAAJ,EAAkC;AAC9B,eAAO,IAAP;AACH;;AAED,UAAI,CAACxC,MAAM,CAACyC,SAAR,IAAqB,KAAKlC,gBAA9B,EAAgD;AAC5CP,cAAM,mCAAOA,MAAP;AAAeyC,mBAAS,EAAE,KAAKlC;AAA/B,UAAN;AACH;;AAED,UAAMe,MAAM,GAAG,IAAI,KAAKpB,UAAL,CAAgBa,MAApB,CAA2Bf,MAA3B,EAAmC,KAAKG,IAAxC,EAA8C,KAAKD,UAAnD,CAAf;AAEA,WAAKwB,IAAL,CAAUJ,MAAM,CAACU,EAAjB,IAAuBV,MAAvB;AAEAA,YAAM,CAACoB,EAAP,CAAU,QAAV,EAAoB,YAAM;AACtB,eAAO,MAAI,CAAChB,IAAL,CAAUJ,MAAM,CAACU,EAAjB,CAAP;AACH,OAFD;AAIA,aAAOV,MAAP;AACH;AAED;AACJ;AACA;;;;WACI,iBAAQ;AAAA;;AACJb,YAAM,CAACsB,IAAP,CAAY,KAAKL,IAAjB,EAAuBb,OAAvB,CAA+B,UAAAmB,EAAE,EAAI;AACjC,cAAI,CAACN,IAAL,CAAUM,EAAV,EAAcW,MAAd;AACH,OAFD;AAGH;;;WAED,6BAAoB3C,MAApB,EAA4B;AAAA;;AACxB,WAAKqC,oBAAL;AAEA,UAAMO,IAAI,GAAG5C,MAAM,CAAC4C,IAAP,IAAe,CAA5B;AACA,UAAMC,SAAS,GAAG,KAAK3C,UAAL,CAAgBiB,MAAhB,CAAuB0B,SAAzC;AACA,UAAMC,MAAM,GACR9C,MAAM,CAAC8C,MAAP,KAAkB,KAAlB,IAA2B,KAAK5C,UAAL,CAAgBF,MAAhB,CAAuB+C,YADtD;AAEA,UAAMC,WAAW,GAAGhD,MAAM,CAACgD,WAAP,IAAsB,CAA1C;AACA,UAAMC,eAAe,GAAGjD,MAAM,CAACiD,eAAP,IAA0B,EAAlD;AACA,UAAIC,IAAJ;AACA,UAAIC,QAAQ,GAAG,KAAKjD,UAAL,CAAgBkD,WAAhB,EAAf;AACA,UAAIC,SAAJ;AACA,UAAIC,KAAJ;AACA,UAAIhC,MAAJ;AACA,UAAIiC,OAAJ;AACA,UAAIC,MAAM,GAAG,CAAb;AACA,UAAIC,eAAJ;AACA,UAAIC,WAAJ,CAjBwB,CAmBxB;;AACA,UAAMC,UAAU,GAAG,SAAbA,UAAa,CAAAC,CAAC,EAAI;AACpB,YAAI,CAACtC,MAAD,IAAW,CAACmC,eAAhB,EAAiC;AAC7B;AACH,SAHmB,CAKpB;;;AACA,YAAII,UAAU,GACV,MAAI,CAAC3C,OAAL,CAAa2C,UAAb,GAA0Bb,WAAW,GAAGS,eAD5C;AAEA,cAAI,CAACvC,OAAL,CAAa2C,UAAb,GAA0BA,UAAU,GAAGC,IAAI,CAACC,GAAL,CACnCV,SADmC,EAEnCS,IAAI,CAACE,GAAL,CAAS,CAAT,EAAYH,UAAZ,CAFmC,CAAvC,CARoB,CAapB;;AACA,YAAMI,GAAG,GAAG,MAAI,CAAC/D,UAAL,CAAgBiB,MAAhB,CAAuB+C,WAAvB,CAAmCN,CAAnC,CAAZ;;AACAtC,cAAM,CAAC6C,MAAP,CAAc;AACVb,eAAK,EAAEQ,IAAI,CAACC,GAAL,CAASE,GAAG,GAAGd,QAAf,EAAyBG,KAAK,GAAGH,QAAjC,CADG;AAEVc,aAAG,EAAEH,IAAI,CAACE,GAAL,CAASC,GAAG,GAAGd,QAAf,EAAyBG,KAAK,GAAGH,QAAjC;AAFK,SAAd,EAfoB,CAoBpB;;AACA,YAAIU,UAAU,GAAGR,SAAb,IAA0BQ,UAAU,GAAG,CAA3C,EAA8C;AAC1CO,gBAAM,CAACC,qBAAP,CAA6B,YAAM;AAC/BV,sBAAU,CAACC,CAAD,CAAV;AACH,WAFD;AAGH;AACJ,OA1BD;;AA4BA,UAAMU,SAAS,GAAG,SAAZA,SAAY,CAAAV,CAAC,EAAI;AACnB,YAAIA,CAAC,CAACW,OAAF,IAAaX,CAAC,CAACW,OAAF,CAAUhC,MAAV,GAAmB,CAApC,EAAuC;AACnC;AACH;;AACDY,gBAAQ,GAAG,MAAI,CAACjD,UAAL,CAAgBkD,WAAhB,EAAX;AACAG,eAAO,GAAGK,CAAC,CAACY,aAAF,GAAkBZ,CAAC,CAACY,aAAF,CAAgB,CAAhB,EAAmBC,UAArC,GAAkD,IAA5D,CALmB,CAOnB;;AACApB,iBAAS,GAAG,MAAI,CAACnC,OAAL,CAAawD,WAAb,GACR,MAAI,CAACxD,OAAL,CAAaM,WADjB;AAEAkC,mBAAW,GAAG,MAAI,CAACvD,IAAL,CAAUwE,eAAV,CACV,MAAI,CAACzD,OAAL,CAAa0D,qBAAb,EADU,EAEV,MAAI,CAAChD,QAFK,CAAd;AAKAsB,YAAI,GAAG,IAAP;AACAI,aAAK,GAAG,MAAI,CAACpD,UAAL,CAAgBiB,MAAhB,CAAuB+C,WAAvB,CAAmCN,CAAnC,EAAsC,IAAtC,CAAR;AACAtC,cAAM,GAAG,IAAT;AACAmC,uBAAe,GAAG,IAAlB;AACH,OAnBD;;AAoBA,WAAKvC,OAAL,CAAa2D,gBAAb,CAA8B,WAA9B,EAA2CP,SAA3C;AACA,WAAKpD,OAAL,CAAa2D,gBAAb,CAA8B,YAA9B,EAA4CP,SAA5C;AACA,WAAK5B,EAAL,CAAQ,wBAAR,EAAkC,YAAM;AACpC,cAAI,CAACxB,OAAL,CAAa4D,mBAAb,CAAiC,YAAjC,EAA+CR,SAA/C;;AACA,cAAI,CAACpD,OAAL,CAAa4D,mBAAb,CAAiC,WAAjC,EAA8CR,SAA9C;AACH,OAHD;;AAKA,UAAMS,OAAO,GAAG,SAAVA,OAAU,CAAAnB,CAAC,EAAI;AACjB,YAAIA,CAAC,CAACW,OAAF,IAAaX,CAAC,CAACW,OAAF,CAAUhC,MAAV,GAAmB,CAApC,EAAuC;AACnC;AACH;;AAEDW,YAAI,GAAG,KAAP;AACAM,cAAM,GAAG,CAAT;AACAC,uBAAe,GAAG,IAAlB;;AAEA,YAAInC,MAAJ,EAAY;AACR,gBAAI,CAACnB,IAAL,CAAU6E,YAAV;;AACA1D,gBAAM,CAAC2D,SAAP,CAAiB,YAAjB,EAA+BrB,CAA/B;;AACA,gBAAI,CAAC1D,UAAL,CAAgB+E,SAAhB,CAA0B,mBAA1B,EAA+C3D,MAA/C,EAAuDsC,CAAvD;AACH;;AAEDtC,cAAM,GAAG,IAAT;AACH,OAhBD;;AAiBA,WAAKJ,OAAL,CAAa2D,gBAAb,CAA8B,YAA9B,EAA4CE,OAA5C;AACA,WAAK7D,OAAL,CAAa2D,gBAAb,CAA8B,SAA9B,EAAyCE,OAAzC;AACA,WAAK7D,OAAL,CAAa2D,gBAAb,CAA8B,UAA9B,EAA0CE,OAA1C;AAEAG,cAAQ,CAACC,IAAT,CAAcN,gBAAd,CAA+B,SAA/B,EAA0CE,OAA1C;AACAG,cAAQ,CAACC,IAAT,CAAcN,gBAAd,CAA+B,UAA/B,EAA2CE,OAA3C;AACA,WAAKrC,EAAL,CAAQ,wBAAR,EAAkC,YAAM;AACpCwC,gBAAQ,CAACC,IAAT,CAAcL,mBAAd,CAAkC,SAAlC,EAA6CC,OAA7C;AACAG,gBAAQ,CAACC,IAAT,CAAcL,mBAAd,CAAkC,UAAlC,EAA8CC,OAA9C;;AACA,cAAI,CAAC7D,OAAL,CAAa4D,mBAAb,CAAiC,UAAjC,EAA6CC,OAA7C;;AACA,cAAI,CAAC7D,OAAL,CAAa4D,mBAAb,CAAiC,SAAjC,EAA4CC,OAA5C;;AACA,cAAI,CAAC7D,OAAL,CAAa4D,mBAAb,CAAiC,YAAjC,EAA+CC,OAA/C;AACH,OAND;;AAQA,UAAMK,SAAS,GAAG,SAAZA,SAAY,CAAAC,KAAK,EAAI;AACvB,YAAI,CAACnC,IAAL,EAAW;AACP;AACH;;AACD,YAAI,EAAEM,MAAF,IAAYZ,IAAhB,EAAsB;AAClB;AACH;;AAED,YAAIyC,KAAK,CAACd,OAAN,IAAiBc,KAAK,CAACd,OAAN,CAAchC,MAAd,GAAuB,CAA5C,EAA+C;AAC3C;AACH;;AACD,YAAI8C,KAAK,CAACb,aAAN,IAAuBa,KAAK,CAACb,aAAN,CAAoB,CAApB,EAAuBC,UAAvB,IAAqClB,OAAhE,EAAyE;AACrE;AACH,SAbsB,CAevB;;;AACA,YAAI,CAACjC,MAAL,EAAa;AACTA,gBAAM,GAAG,MAAI,CAACG,GAAL,CAASzB,MAAM,IAAI,EAAnB,CAAT;;AACA,cAAI,CAACsB,MAAL,EAAa;AACT;AACH;AACJ;;AAED,YAAM2C,GAAG,GAAG,MAAI,CAAC/D,UAAL,CAAgBiB,MAAhB,CAAuB+C,WAAvB,CAAmCmB,KAAnC,CAAZ;;AACA,YAAMC,WAAW,GAAG,MAAI,CAACpF,UAAL,CAAgBmB,OAAhB,CAAwBlB,IAAxB,CAA6BC,wBAA7B,CAChBkD,KAAK,GAAGH,QADQ,CAApB;;AAGA,YAAMoC,SAAS,GAAG,MAAI,CAACrF,UAAL,CAAgBmB,OAAhB,CAAwBlB,IAAxB,CAA6BC,wBAA7B,CACd6D,GAAG,GAAGd,QADQ,CAAlB;;AAGA7B,cAAM,CAAC6C,MAAP,CAAc;AACVb,eAAK,EAAEQ,IAAI,CAACC,GAAL,CAASwB,SAAT,EAAoBD,WAApB,CADG;AAEVrB,aAAG,EAAEH,IAAI,CAACE,GAAL,CAASuB,SAAT,EAAoBD,WAApB;AAFK,SAAd;;AAKA,YAAIE,aAAa,GAAG,MAAI,CAACrF,IAAL,CAAUwE,eAAV,CAA0BU,KAA1B,EAAiC,MAAI,CAACzD,QAAtC,CAApB,CAnCuB,CAqCvB;;;AACA,YAAIkB,MAAM,IAAID,SAAS,CAACrB,WAAV,GAAwB,MAAI,CAACN,OAAL,CAAawD,WAAnD,EAAgE;AAC5D;AACA,cAAMe,CAAC,GAAGD,aAAa,CAACE,OAAd,GAAwBhC,WAAW,CAACiC,IAA9C;;AACA,cAAIF,CAAC,IAAIxC,eAAT,EAA0B;AACtBQ,2BAAe,GAAG,CAAC,CAAnB;AACH,WAFD,MAEO,IAAIgC,CAAC,IAAI/B,WAAW,CAACkC,KAAZ,GAAoB3C,eAA7B,EAA8C;AACjDQ,2BAAe,GAAG,CAAlB;AACH,WAFM,MAEA;AACHA,2BAAe,GAAG,IAAlB;AACH;;AACDA,yBAAe,IAAIE,UAAU,CAAC0B,KAAD,CAA7B;AACH;AACJ,OAlDD;;AAmDA,WAAKnE,OAAL,CAAa2D,gBAAb,CAA8B,WAA9B,EAA2CO,SAA3C;AACA,WAAKlE,OAAL,CAAa2D,gBAAb,CAA8B,WAA9B,EAA2CO,SAA3C;AACA,WAAK1C,EAAL,CAAQ,wBAAR,EAAkC,YAAM;AACpC,cAAI,CAACxB,OAAL,CAAa4D,mBAAb,CAAiC,WAAjC,EAA8CM,SAA9C;;AACA,cAAI,CAAClE,OAAL,CAAa4D,mBAAb,CAAiC,WAAjC,EAA8CM,SAA9C;AACH,OAHD;AAKA,WAAKlF,UAAL,CAAgBwC,EAAhB,CAAmB,gBAAnB,EAAqC,UAAApB,MAAM,EAAI;AAC3C,YAAI,MAAI,CAACf,gBAAT,EAA2B;AACvBe,gBAAM,CAACmB,SAAP,GAAmB,MAAI,CAAClC,gBAAxB;AACH;AACJ,OAJD;AAKH;;;WAED,gCAAuB;AACnB,WAAK0E,SAAL,CAAe,wBAAf;AACH;AAED;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;;;;WACI,4BAAmB;AAAA;;AACf,UAAMY,IAAI,GAAG,KAAK3F,UAAL,CAAgB4F,cAAhB,EAAb;AACA,UAAI/B,GAAG,GAAG,IAAV;AACAtD,YAAM,CAACsB,IAAP,CAAY,KAAKL,IAAjB,EAAuBb,OAAvB,CAA+B,UAAAmB,EAAE,EAAI;AACjC,YAAM+D,GAAG,GAAG,MAAI,CAACrE,IAAL,CAAUM,EAAV,CAAZ;;AACA,YAAI+D,GAAG,CAACzC,KAAJ,IAAauC,IAAb,IAAqBE,GAAG,CAAC9B,GAAJ,IAAW4B,IAApC,EAA0C;AACtC,cAAI,CAAC9B,GAAD,IAAQgC,GAAG,CAAC9B,GAAJ,GAAU8B,GAAG,CAACzC,KAAd,GAAsBS,GAAG,CAACE,GAAJ,GAAUF,GAAG,CAACT,KAAhD,EAAuD;AACnDS,eAAG,GAAGgC,GAAN;AACH;AACJ;AACJ,OAPD;AASA,aAAOhC,GAAP;AACH;AAED;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;WACI,kCAAyB1D,KAAzB,EAAgCL,MAAhC,EAAwC;AACpC,UAAIA,MAAM,CAACgG,kBAAX,EAA+B;AAC3B;AACA,YAAMC,MAAM,GAAGjG,MAAM,CAACkG,gBAAP,IAA2B,CAA1C;AACA,eACIpC,IAAI,CAACqC,KAAL,CAAW,CAAC9F,KAAK,GAAG4F,MAAT,IAAmBjG,MAAM,CAACgG,kBAArC,IACIhG,MAAM,CAACgG,kBADX,GAEAC,MAHJ;AAKH,OATmC,CAWpC;;;AACA,aAAO5F,KAAP;AACH;;;;AAzXD;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACI,oBAAcL,MAAd,EAAsB;AAClB,aAAO;AACHoG,YAAI,EAAE,SADH;AAEHC,iBAAS,EAAErG,MAAM,IAAIA,MAAM,CAACqG,SAAjB,GAA6BrG,MAAM,CAACqG,SAApC,GAAgD,KAFxD;AAGHrG,cAAM,EAAEA,MAHL;AAIHsG,mBAAW,EAAE;AACTC,mBADS,qBACCC,OADD,EACU;AACf,gBAAI,CAAC,KAAKC,qBAAL,CAA2BpF,OAAhC,EAAyC;AACrC,mBAAKqF,UAAL,CAAgB,SAAhB;AACH;;AACD,mBAAO,KAAKrF,OAAL,CAAaI,GAAb,CAAiB+E,OAAjB,CAAP;AACH,WANQ;AAQTG,sBARS,0BAQM;AACX,iBAAKtF,OAAL,IAAgB,KAAKA,OAAL,CAAaiB,KAAb,EAAhB;AACH,WAVQ;AAYTR,6BAZS,+BAYW0E,OAZX,EAYoB;AACzB,gBAAI,CAAC,KAAKC,qBAAL,CAA2BpF,OAAhC,EAAyC;AACrC,mBAAKqF,UAAL,CAAgB,SAAhB;AACH;;AACD,iBAAKrF,OAAL,CAAaS,mBAAb,CAAiC0E,OAAjC;AACH,WAjBQ;AAmBTnE,8BAnBS,kCAmBc;AACnB,iBAAKhB,OAAL,CAAagB,oBAAb;AACH;AArBQ,SAJV;AA2BHuE,gBAAQ,EAAE7G;AA3BP,OAAP;AA6BH;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AC3GL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IACagB,M;AACT,kBAAYf,MAAZ,EAAoB6G,YAApB,EAAkC5G,EAAlC,EAAsC;AAAA;AAAA;;AAAA;;AAClC,SAAKC,UAAL,GAAkBD,EAAlB;AACA,SAAKiB,OAAL,GAAejB,EAAE,CAACkB,MAAH,CAAUD,OAAzB;AACA,SAAKf,IAAL,GAAYF,EAAE,CAACE,IAAf;AACA,SAAK2G,KAAL,GAAa,KAAK3G,IAAL,CAAU2G,KAAvB;AACA,SAAKC,WAAL,GAAmBF,YAAnB;AACA,SAAKjF,QAAL,GAAgB3B,EAAE,CAACkB,MAAH,CAAUnB,MAAV,CAAiB4B,QAAjC;AAEA,SAAKI,EAAL,GAAUhC,MAAM,CAACgC,EAAP,IAAa,IAAb,GAAoB/B,EAAE,CAACE,IAAH,CAAQ6G,KAAR,EAApB,GAAsChH,MAAM,CAACgC,EAAvD;AACA,SAAKsB,KAAL,GAAa2D,MAAM,CAACjH,MAAM,CAACsD,KAAR,CAAN,IAAwB,CAArC;AACA,SAAKW,GAAL,GACIjE,MAAM,CAACiE,GAAP,IAAc,IAAd,GACM;AACF,SAAKX,KAAL,GACC,IAAI,KAAKpC,OAAL,CAAawD,WAAlB,GAAiC,KAAKxE,UAAL,CAAgBkD,WAAhB,EAHrC,GAIM6D,MAAM,CAACjH,MAAM,CAACiE,GAAR,CALhB;AAMA,SAAKiD,MAAL,GACIlH,MAAM,CAACkH,MAAP,KAAkBC,SAAlB,GAA8B,IAA9B,GAAqCC,OAAO,CAACpH,MAAM,CAACkH,MAAR,CADhD;AAEA,SAAKhE,IAAL,GAAYlD,MAAM,CAACkD,IAAP,KAAgBiE,SAAhB,GAA4B,IAA5B,GAAmCC,OAAO,CAACpH,MAAM,CAACkD,IAAR,CAAtD,CAlBkC,CAmBlC;;AACA,SAAKmE,UAAL,GAAkB,KAAlB;AACA,SAAKC,UAAL,GAAkB,KAAlB;AACA,SAAKC,IAAL,GAAYH,OAAO,CAACpH,MAAM,CAACuH,IAAR,CAAnB;AACA,SAAKC,KAAL,GAAaxH,MAAM,CAACwH,KAAP,IAAgB,oBAA7B,CAvBkC,CAwBlC;AACA;;AACA,SAAKC,WAAL,GAAmBzH,MAAM,CAACyH,WAAP,IAAsB;AACrC9B,UAAI,EAAE,EAD+B;AAErCC,WAAK,EAAE;AAF8B,KAAzC;AAIA,SAAK8B,YAAL,GAAoB,IAApB;AACA,SAAKC,aAAL,GAAqB,IAArB;AACA,SAAKC,IAAL,GAAY5H,MAAM,CAAC4H,IAAP,IAAe,EAA3B;AACA,SAAKC,UAAL,GAAkB7H,MAAM,CAAC6H,UAAP,IAAqB,EAAvC;AACA,SAAKC,WAAL,0BAAmB9H,MAAM,CAAC8H,WAA1B,qEAAyC,IAAzC;AAEA,SAAKC,SAAL,GAAiB/H,MAAM,CAAC+H,SAAxB,CApCkC,CAqClC;;AACA,SAAKtF,SAAL,GAAiBzC,MAAM,CAACyC,SAAxB;;AACA,SAAKuF,SAAL,GAAiB;AAAA,aAAM,KAAI,CAAC/F,YAAL,EAAN;AAAA,KAAjB;;AAEA,SAAKa,MAAL,GAAc9C,MAAM,CAAC8C,MAAP,KAAkB,KAAlB,IAA2B7C,EAAE,CAACD,MAAH,CAAU+C,YAAnD;AACA,SAAKC,WAAL,GAAmBhD,MAAM,CAACgD,WAAP,IAAsB,CAAzC;AACA,SAAKC,eAAL,GAAuBjD,MAAM,CAACiD,eAAP,IAA0B,EAAjD,CA3CkC,CA4ClC;;AACA,SAAKgF,kBAAL,GACIjI,MAAM,CAACiI,kBAAP,KAA8Bd,SAA9B,GACM,KADN,GAEMC,OAAO,CAACpH,MAAM,CAACiI,kBAAR,CAHjB,CA7CkC,CAkDlC;;AACA,QAAIC,UAAU,GACVlI,MAAM,CAACkI,UAAP,IAAqB,IAArB,GAA4B,CAAC,CAA7B,GAAiCC,QAAQ,CAACnI,MAAM,CAACkI,UAAR,CAD7C;AAEA,SAAKE,YAAL,GAAoB,MAApB;AACA,SAAKC,SAAL,GAAiB,KAAjB;;AAEA,QAAIH,UAAU,KAAK,CAAC,CAApB,EAAuB;AACnB,UAAII,YAAY,GACZ,KAAKpI,UAAL,CAAgBqI,OAAhB,CAAwBC,MAAxB,IAAkC,IAAlC,GACM,KAAKtI,UAAL,CAAgBqI,OAAhB,CAAwBC,MAAxB,CAA+BC,gBADrC,GAEM,CAAC,CAHX;;AAIA,UAAIH,YAAY,IAAI,CAAhB,IAAqBJ,UAAU,GAAGI,YAAtC,EAAoD;AAChD,aAAKF,YAAL,GAAoBtE,IAAI,CAAC4E,KAAL,CAAY,IAAIJ,YAAL,GAAqB,GAAhC,IAAuC,GAA3D;AACA,aAAKD,SAAL,GACI,KAAKnI,UAAL,CAAgByI,SAAhB,KAA8BT,UAA9B,GAA2C,IAD/C;AAEH;AACJ;;AAED,SAAKU,kBAAL,GAA0B5I,MAAM,CAAC4I,kBAAjC;AACA,SAAKrH,eAAL,GAAuBvB,MAAM,CAACuB,eAA9B;AACA,SAAKsH,SAAL;AACA,SAAKC,MAAL;AACA,SAAK5I,UAAL,CAAgBwC,EAAhB,CAAmB,MAAnB,EAA2B,KAAKsF,SAAhC;AACA,SAAK9H,UAAL,CAAgBwC,EAAhB,CAAmB,QAAnB,EAA6B,KAAKsF,SAAlC;AACA,SAAK9H,UAAL,CAAgB+E,SAAhB,CAA0B,gBAA1B,EAA4C,IAA5C;AACH;AAED;;;;;WACA,gBAAOjF,MAAP,EAAe;AACX,UAAIA,MAAM,CAACsD,KAAP,IAAgB,IAApB,EAA0B;AACtB,aAAKA,KAAL,GAAa2D,MAAM,CAACjH,MAAM,CAACsD,KAAR,CAAnB;AACH;;AACD,UAAItD,MAAM,CAACiE,GAAP,IAAc,IAAlB,EAAwB;AACpB,aAAKA,GAAL,GAAWgD,MAAM,CAACjH,MAAM,CAACiE,GAAR,CAAjB;AACH;;AACD,UAAIjE,MAAM,CAACuH,IAAP,IAAe,IAAnB,EAAyB;AACrB,aAAKA,IAAL,GAAYH,OAAO,CAACpH,MAAM,CAACuH,IAAR,CAAnB;AACH;;AACD,UAAIvH,MAAM,CAACwH,KAAP,IAAgB,IAApB,EAA0B;AACtB,aAAKA,KAAL,GAAaxH,MAAM,CAACwH,KAApB;AACH;;AACD,UAAIxH,MAAM,CAACyH,WAAP,IAAsB,IAA1B,EAAgC;AAC5B,aAAKA,WAAL,GAAmBzH,MAAM,CAACyH,WAA1B;AACH;;AACD,UAAIzH,MAAM,CAAC4H,IAAP,IAAe,IAAnB,EAAyB;AACrB,aAAKA,IAAL,GAAY5H,MAAM,CAAC4H,IAAnB;AACH;;AACD,UAAI5H,MAAM,CAACkH,MAAP,IAAiB,IAArB,EAA2B;AACvB,aAAKA,MAAL,GAAcE,OAAO,CAACpH,MAAM,CAACkH,MAAR,CAArB;AACA,aAAK6B,mBAAL,CAAyB,KAAK7B,MAA9B;AACH;;AACD,UAAIlH,MAAM,CAACkD,IAAP,IAAe,IAAnB,EAAyB;AACrB,aAAKA,IAAL,GAAYkE,OAAO,CAACpH,MAAM,CAACkD,IAAR,CAAnB;AACH;;AACD,UAAIlD,MAAM,CAAC+H,SAAP,IAAoB,IAAxB,EAA8B;AAC1B,aAAKA,SAAL,GAAiBd,MAAM,CAACjH,MAAM,CAAC+H,SAAR,CAAvB;AACH;;AACD,UAAI/H,MAAM,CAACyC,SAAP,IAAoB,IAAxB,EAA8B;AAC1B,aAAKA,SAAL,GAAiBwE,MAAM,CAACjH,MAAM,CAACyC,SAAR,CAAvB;AACH;;AACD,UAAIzC,MAAM,CAAC6H,UAAP,IAAqB,IAAzB,EAA+B;AAC3B,aAAKA,UAAL,GAAkB7H,MAAM,CAAC6H,UAAzB;AACH;;AAED,WAAK5F,YAAL;AACA,WAAKgD,SAAL,CAAe,QAAf;AACA,WAAK/E,UAAL,CAAgB+E,SAAhB,CAA0B,gBAA1B,EAA4C,IAA5C;AACH;AAED;;;;WACA,kBAAS;AACL,UAAI,KAAK+D,OAAT,EAAkB;AACd,aAAK9H,OAAL,CAAa+H,WAAb,CAAyB,KAAKD,OAAL,CAAaE,UAAtC;AACA,aAAKF,OAAL,GAAe,IAAf;AACA,aAAK/D,SAAL,CAAe,QAAf;AACA,aAAK/E,UAAL,CAAgBkC,EAAhB,CAAmB,MAAnB,EAA2B,KAAK4F,SAAhC;AACA,aAAK9H,UAAL,CAAgBkC,EAAhB,CAAmB,QAAnB,EAA6B,KAAK4F,SAAlC;AACA,aAAK9H,UAAL,CAAgB+E,SAAhB,CAA0B,gBAA1B,EAA4C,IAA5C;AACH;AACJ;AAED;AACJ;AACA;AACA;;;;WACI,cAAK3B,KAAL,EAAY;AACR,UAAM6F,CAAC,GAAG7F,KAAK,IAAI,KAAKA,KAAxB;AACA,WAAKpD,UAAL,CAAgBkJ,IAAhB,CAAqBD,CAArB,EAAwB,KAAKlF,GAA7B;AACA,WAAKgB,SAAL,CAAe,MAAf;AACA,WAAK/E,UAAL,CAAgB+E,SAAhB,CAA0B,aAA1B,EAAyC,IAAzC;AACH;AAED;AACJ;AACA;AACA;;;;WACI,kBAAS3B,KAAT,EAAgB;AACZ,WAAKiE,IAAL,GAAY,IAAZ;AACA,WAAK6B,IAAL,CAAU9F,KAAV;AACH;AAED;AACJ;AACA;AACA;;;;WACI,iBAAQiE,IAAR,EAAc;AACV,WAAKA,IAAL,GAAYA,IAAZ;AACH;AAED;;;;WACA,kBAAS;AACL,WAAKyB,OAAL,GAAe,KAAK7I,IAAL,CAAUwE,eAAV,CACX,KAAKzD,OAAL,CAAamI,WAAb,CAAyBnE,QAAQ,CAACoE,aAAT,CAAuB,QAAvB,CAAzB,CADW,EAEX,KAAK1H,QAFM,CAAf;AAKA,WAAKoH,OAAL,CAAaO,SAAb,GAAyB,mBAAzB;;AACA,UAAI,KAAKzB,WAAT,EAAsB;AAClB,aAAKkB,OAAL,CAAaQ,KAAb,GAAqB,KAAKC,UAAL,CAAgB,KAAKnG,KAArB,EAA4B,KAAKW,GAAjC,CAArB;AACH;;AACD,WAAK+E,OAAL,CAAaU,YAAb,CAA0B,SAA1B,EAAqC,KAAK1H,EAA1C;;AAEA,WAAK,IAAM2H,QAAX,IAAuB,KAAK9B,UAA5B,EAAwC;AACpC,aAAKmB,OAAL,CAAaU,YAAb,CACI,iBAAiBC,QADrB,EAEI,KAAK9B,UAAL,CAAgB8B,QAAhB,CAFJ;AAIH;;AAED,WAAK7C,KAAL,CAAW,KAAKkC,OAAhB,EAAyB;AACrBY,gBAAQ,EAAE,UADW;AAErBC,cAAM,EAAE,CAFa;AAGrBC,cAAM,EAAE,KAAK1B,YAHQ;AAIrB2B,WAAG,EAAE,KAAK1B;AAJW,OAAzB;AAOA;;AACA,UAAI,KAAKnB,MAAT,EAAiB;AACb,aAAKQ,YAAL,GAAoB,KAAKvH,IAAL,CAAUwE,eAAV,CAChB,KAAKqE,OAAL,CAAaK,WAAb,CAAyBnE,QAAQ,CAACoE,aAAT,CAAuB,QAAvB,CAAzB,CADgB,EAEhB,KAAK1H,QAFW,CAApB;AAIA,aAAK+F,aAAL,GAAqB,KAAKxH,IAAL,CAAUwE,eAAV,CACjB,KAAKqE,OAAL,CAAaK,WAAb,CAAyBnE,QAAQ,CAACoE,aAAT,CAAuB,QAAvB,CAAzB,CADiB,EAEjB,KAAK1H,QAFY,CAArB;AAKA,aAAK8F,YAAL,CAAkB6B,SAAlB,GAA8B,2CAA9B;AACA,aAAK5B,aAAL,CAAmB4B,SAAnB,GAA+B,yCAA/B,CAXa,CAab;;AACA,YAAMS,GAAG,GAAG;AACRC,gBAAM,EAAE,KAAKrI,QAAL,GAAgB,YAAhB,GAA+B,YAD/B;AAERgI,kBAAQ,EAAE,UAFF;AAGRG,aAAG,EAAE,KAHG;AAIRG,eAAK,EAAE,KAJC;AAKRJ,gBAAM,EAAE,MALA;AAMRK,yBAAe,EAAE;AANT,SAAZ,CAda,CAuBb;;AACA,YAAMC,aAAa,GACf,KAAK3C,WAAL,CAAiB9B,IAAjB,KAA0B,MAA1B,GACMlF,MAAM,CAAC4J,MAAP,CACE;AAAE1E,cAAI,EAAE;AAAR,SADF,EAEEqE,GAFF,EAGE,KAAKvC,WAAL,CAAiB9B,IAHnB,CADN,GAMM,IAPV;AAQA,YAAM2E,cAAc,GAChB,KAAK7C,WAAL,CAAiB7B,KAAjB,KAA2B,MAA3B,GACMnF,MAAM,CAAC4J,MAAP,CACE;AAAEzE,eAAK,EAAE;AAAT,SADF,EAEEoE,GAFF,EAGE,KAAKvC,WAAL,CAAiB7B,KAHnB,CADN,GAMM,IAPV;;AASA,YAAIwE,aAAJ,EAAmB;AACf,eAAKtD,KAAL,CAAW,KAAKY,YAAhB,EAA8B0C,aAA9B;AACH;;AAED,YAAIE,cAAJ,EAAoB;AAChB,eAAKxD,KAAL,CAAW,KAAKa,aAAhB,EAA+B2C,cAA/B;AACH;AACJ;;AAED,WAAKrI,YAAL;AACA,WAAKsI,UAAL;AACH;;;WAED,oBAAWjH,KAAX,EAAkBW,GAAlB,EAAuB;AACnB,UAAI,KAAK2E,kBAAT,EAA6B;AACzB,eAAO,KAAKA,kBAAL,CAAwBtF,KAAxB,EAA+BW,GAA/B,CAAP;AACH;;AACD,aAAO,CAACX,KAAK,IAAIW,GAAT,GAAe,CAACX,KAAD,CAAf,GAAyB,CAACA,KAAD,EAAQW,GAAR,CAA1B,EACFuG,GADE,CACE,UAAC3E,IAAD;AAAA,eACD,CACI/B,IAAI,CAAC4E,KAAL,CAAY7C,IAAI,GAAG,IAAR,GAAgB,EAA3B,CADJ,EACoC;AAChC,SAAC,OAAO/B,IAAI,CAAC4E,KAAL,CAAW7C,IAAI,GAAG,EAAlB,CAAR,EAA+B4E,KAA/B,CAAqC,CAAC,CAAtC,CAFJ,CAE6C;AAF7C,UAGEC,IAHF,CAGO,GAHP,CADC;AAAA,OADF,EAOFA,IAPE,CAOG,GAPH,CAAP;AAQH;;;WAED,oBAAW;AACP,aAAO,KAAKxK,UAAL,CAAgBiB,MAAhB,CAAuB+I,KAAvB,GAA+B,KAAKhK,UAAL,CAAgBF,MAAhB,CAAuB2K,UAA7D;AACH;AAED;;;;WACA,wBAAe;AACX;AACA,UAAMC,GAAG,GAAG,KAAK1K,UAAL,CAAgBkD,WAAhB,EAAZ;AACA,UAAM8G,KAAK,GAAG,KAAKW,QAAL,EAAd;AAEA,UAAIC,YAAY,GAAG,KAAKxH,KAAxB;AACA,UAAIyH,UAAU,GAAG,KAAK9G,GAAtB;;AACA,UAAI6G,YAAY,GAAG,CAAnB,EAAsB;AAClBA,oBAAY,GAAG,CAAf;AACAC,kBAAU,GAAGA,UAAU,GAAGD,YAA1B;AACH;;AACD,UAAIC,UAAU,GAAGH,GAAjB,EAAsB;AAClBG,kBAAU,GAAGH,GAAb;AACAE,oBAAY,GAAGF,GAAG,IAAIG,UAAU,GAAGD,YAAjB,CAAlB;AACH;;AAED,UAAI,KAAKrI,SAAL,IAAkB,IAAtB,EAA4B;AACxBsI,kBAAU,GAAGjH,IAAI,CAACE,GAAL,CAAS8G,YAAY,GAAG,KAAKrI,SAA7B,EAAwCsI,UAAxC,CAAb;AACH;;AAED,UAAI,KAAKhD,SAAL,IAAkB,IAAtB,EAA4B;AACxBgD,kBAAU,GAAGjH,IAAI,CAACC,GAAL,CAAS+G,YAAY,GAAG,KAAK/C,SAA7B,EAAwCgD,UAAxC,CAAb;AACH;;AAED,UAAI,KAAK/B,OAAL,IAAgB,IAApB,EAA0B;AACtB;AACA;AACA,YAAMrD,IAAI,GAAG7B,IAAI,CAACqC,KAAL,CAAY2E,YAAY,GAAGF,GAAhB,GAAuBV,KAAlC,CAAb;AACA,YAAMc,WAAW,GAAGlH,IAAI,CAACqC,KAAL,CAAY4E,UAAU,GAAGH,GAAd,GAAqBV,KAAhC,IAAyCvE,IAA7D;AAEA,aAAKmB,KAAL,CAAW,KAAKkC,OAAhB,EAAyB;AACrBrD,cAAI,EAAEA,IAAI,GAAG,IADQ;AAErBuE,eAAK,EAAEc,WAAW,GAAG,IAFA;AAGrBb,yBAAe,EAAE,KAAK3C,KAHD;AAIrByC,gBAAM,EAAE,KAAK/G,IAAL,GAAY,MAAZ,GAAqB;AAJR,SAAzB;;AAOA,aAAK,IAAMyG,QAAX,IAAuB,KAAK9B,UAA5B,EAAwC;AACpC,eAAKmB,OAAL,CAAaU,YAAb,CACI,iBAAiBC,QADrB,EAEI,KAAK9B,UAAL,CAAgB8B,QAAhB,CAFJ;AAIH;;AAED,YAAI,KAAK7B,WAAT,EAAsB;AAClB,eAAKkB,OAAL,CAAaQ,KAAb,GAAqB,KAAKC,UAAL,CAAgB,KAAKnG,KAArB,EAA4B,KAAKW,GAAjC,CAArB;AACH;AACJ;AACJ;AAED;;;;WACA,qBAAY;AAAA;;AACR,WAAKgH,OAAL,GAAe,KAAf;AACA,WAAKC,QAAL,GAAgB,KAAhB;;AAEA,UAAMC,SAAS,GAAG,SAAZA,SAAY,CAACtF,IAAD,EAAU;AACxB,YAAIvC,KAAK,GAAGQ,IAAI,CAACqC,KAAL,CAAW,MAAI,CAAC7C,KAAL,GAAa,EAAxB,IAA8B,EAA1C;AACA,YAAIW,GAAG,GAAGH,IAAI,CAACqC,KAAL,CAAW,MAAI,CAAClC,GAAL,GAAW,EAAtB,IAA4B,EAAtC;AACA4B,YAAI,GAAG/B,IAAI,CAACqC,KAAL,CAAWN,IAAI,GAAG,EAAlB,IAAwB,EAA/B;;AAEA,YACI,CAAC,MAAI,CAACqF,QAAN,IACA,MAAI,CAACD,OADL,KAEC3H,KAAK,GAAGuC,IAAR,IAAgB5B,GAAG,IAAI4B,IAFxB,CADJ,EAIE;AACE,gBAAI,CAACqF,QAAL,GAAgB,IAAhB;AACA,gBAAI,CAACD,OAAL,GAAe,KAAf;;AACA,gBAAI,CAAChG,SAAL,CAAe,KAAf;;AACA,gBAAI,CAAC/E,UAAL,CAAgB+E,SAAhB,CAA0B,YAA1B,EAAwC,MAAxC;AACH;;AACD,YAAI,CAAC,MAAI,CAACgG,OAAN,IAAiB3H,KAAK,IAAIuC,IAA1B,IAAkC5B,GAAG,GAAG4B,IAA5C,EAAkD;AAC9C,gBAAI,CAACoF,OAAL,GAAe,IAAf;AACA,gBAAI,CAACC,QAAL,GAAgB,KAAhB;;AACA,gBAAI,CAACjG,SAAL,CAAe,IAAf;;AACA,gBAAI,CAAC/E,UAAL,CAAgB+E,SAAhB,CAA0B,WAA1B,EAAuC,MAAvC;AACH;AACJ,OArBD;;AAuBA,WAAK/E,UAAL,CAAgBqI,OAAhB,CAAwB7F,EAAxB,CAA2B,cAA3B,EAA2CyI,SAA3C;AAEA,WAAKzI,EAAL,CAAQ,QAAR,EAAkB,YAAM;AACpB,cAAI,CAACxC,UAAL,CAAgBqI,OAAhB,CAAwBnG,EAAxB,CAA2B,cAA3B,EAA2C+I,SAA3C;AACH,OAFD;AAIA;;AACA,WAAKzI,EAAL,CAAQ,KAAR,EAAe,YAAM;AACjB,YAAI,MAAI,CAAC6E,IAAT,EAAe;AACX,cAAM6D,QAAQ,GAAG,MAAI,CAAClL,UAAL,CAAgB4F,cAAhB,EAAjB;;AACA,cAAIsF,QAAQ,IAAI,MAAI,CAAC9H,KAAjB,IAA0B8H,QAAQ,IAAI,MAAI,CAACnH,GAA/C,EAAoD;AAChD,kBAAI,CAAC/D,UAAL,CAAgBkJ,IAAhB,CAAqB,MAAI,CAAC9F,KAA1B;AACH;AACJ;AACJ,OAPD;AAQH;AAED;;;;WACA,sBAAa;AAAA;;AACT,UAAM2E,kBAAkB,GAAG,KAAKA,kBAAhC;AAEA,WAAKe,OAAL,CAAanE,gBAAb,CAA8B,YAA9B,EAA4C,UAACjB,CAAD,EAAO;AAC/C,cAAI,CAACqB,SAAL,CAAe,YAAf,EAA6BrB,CAA7B;;AACA,cAAI,CAAC1D,UAAL,CAAgB+E,SAAhB,CAA0B,mBAA1B,EAA+C,MAA/C,EAAqDrB,CAArD;AACH,OAHD;AAKA,WAAKoF,OAAL,CAAanE,gBAAb,CAA8B,YAA9B,EAA4C,UAACjB,CAAD,EAAO;AAC/C,cAAI,CAACqB,SAAL,CAAe,YAAf,EAA6BrB,CAA7B;;AACA,cAAI,CAAC1D,UAAL,CAAgB+E,SAAhB,CAA0B,mBAA1B,EAA+C,MAA/C,EAAqDrB,CAArD;AACH,OAHD;AAKA,WAAKoF,OAAL,CAAanE,gBAAb,CAA8B,OAA9B,EAAuC,UAACjB,CAAD,EAAO;AAC1CA,SAAC,CAACyH,cAAF;;AACA,cAAI,CAACpG,SAAL,CAAe,OAAf,EAAwBrB,CAAxB;;AACA,cAAI,CAAC1D,UAAL,CAAgB+E,SAAhB,CAA0B,cAA1B,EAA0C,MAA1C,EAAgDrB,CAAhD;AACH,OAJD;AAMA,WAAKoF,OAAL,CAAanE,gBAAb,CAA8B,UAA9B,EAA0C,UAACjB,CAAD,EAAO;AAC7CA,SAAC,CAAC0H,eAAF;AACA1H,SAAC,CAACyH,cAAF;;AACA,cAAI,CAACpG,SAAL,CAAe,UAAf,EAA2BrB,CAA3B;;AACA,cAAI,CAAC1D,UAAL,CAAgB+E,SAAhB,CAA0B,iBAA1B,EAA6C,MAA7C,EAAmDrB,CAAnD;AACH,OALD;AAOA,WAAKoF,OAAL,CAAanE,gBAAb,CAA8B,aAA9B,EAA6C,UAACjB,CAAD,EAAO;AAChD,YAAIqE,kBAAJ,EAAwB;AACpBrE,WAAC,CAACyH,cAAF;AACH;;AACD,cAAI,CAACpG,SAAL,CAAe,aAAf,EAA8BrB,CAA9B;;AACA,cAAI,CAAC1D,UAAL,CAAgB+E,SAAhB,CAA0B,oBAA1B,EAAgD,MAAhD,EAAsDrB,CAAtD;AACH,OAND;AAQA;;AACA,UAAI,KAAKV,IAAL,IAAa,KAAKgE,MAAtB,EAA8B;AAC1B,aAAKqE,cAAL;AACH;AACJ;;;WAED,0BAAiB;AAAA;;AACb,UAAM1I,SAAS,GAAG,KAAK3C,UAAL,CAAgBiB,MAAhB,CAAuB0B,SAAzC;AACA,UAAMG,WAAW,GAAG,KAAKA,WAAzB;AACA,UAAMC,eAAe,GAAG,KAAKA,eAA7B;AACA,UAAIuI,SAAJ;AACA,UAAIjI,OAAJ;AACA,UAAIL,IAAJ;AACA,UAAIG,SAAJ;AACA,UAAI6D,MAAJ;AACA,UAAIuE,OAAO,GAAG,KAAd;AACA,UAAIhI,eAAJ;AACA,UAAIC,WAAJ;AACA,UAAIgI,kBAAJ;AACA,UAAIC,mBAAJ,CAba,CAeb;;AACA,UAAMhI,UAAU,GAAG,SAAbA,UAAa,CAAC0B,KAAD,EAAW;AAC1B,YAAIG,aAAa,GAAG,MAAI,CAACrF,IAAL,CAAUwE,eAAV,CAA0BU,KAA1B,EAAiC,MAAI,CAACzD,QAAtC,CAApB;;AACA,YAAMuB,QAAQ,GAAG,MAAI,CAACjD,UAAL,CAAgBkD,WAAhB,EAAjB;;AACA,YAAI,CAACK,eAAD,IAAqB,CAACP,IAAD,IAAS,CAACgE,MAAnC,EAA4C;AACxC;AACH;;AAED,YAAMzB,CAAC,GAAGD,aAAa,CAACE,OAAxB;AACA,YAAIkG,mCAAmC,GAAG,CAA1C;AACA,YAAIC,mBAAmB,GAAG,CAA1B;AACA,YAAIC,UAAU,GAAG,CAAjB,CAV0B,CAY1B;;AACA,YAAIjG,IAAI,GAAG,MAAI,CAACkB,WAAL,CAAiB3G,wBAAjB,CACP,MAAI,CAACF,UAAL,CAAgBiB,MAAhB,CAAuB+C,WAAvB,CAAmCmB,KAAnC,IAA4ClC,QADrC,CAAX;;AAIA,YAAID,IAAJ,EAAU;AACN;AACA,cAAIO,eAAe,KAAK,CAAC,CAAzB,EAA4B;AACxBoI,+BAAmB,GAAGH,kBAAkB,GAAG,MAAI,CAACxL,UAAL,CAAgBF,MAAhB,CAAuB+L,WAAlE;AACAH,+CAAmC,GAAGnG,CAAC,GAAG/B,WAAW,CAACiC,IAAtD;AACH,WAHD,MAGO;AACHkG,+BAAmB,GAAGF,mBAAmB,GAAG,MAAI,CAACzL,UAAL,CAAgBF,MAAhB,CAAuB+L,WAAnE;AACAH,+CAAmC,GAAGlI,WAAW,CAACkC,KAAZ,GAAoBH,CAA1D;AACH;AACJ,SATD,MASO;AACH;AACA,cAAIhD,SAAS,GAAG,MAAI,CAACA,SAArB;;AACA,cAAI,CAACA,SAAL,EAAgB;AACZA,qBAAS,GAAG,CAAZ;AACH;;AAED,cAAIyE,MAAM,KAAK,OAAf,EAAwB;AACpB,gBAAIrB,IAAI,GAAG,MAAI,CAAC5B,GAAL,GAAWxB,SAAtB,EAAiC;AAC7BoD,kBAAI,GAAG,MAAI,CAAC5B,GAAL,GAAWxB,SAAlB;AACAqJ,wBAAU,GAAG9I,WAAW,GAAGS,eAA3B;AACH;;AAED,gBAAIoC,IAAI,GAAG,CAAX,EAAc;AACVA,kBAAI,GAAG,CAAP;AACH;AACJ,WATD,MASO,IAAIqB,MAAM,KAAK,KAAf,EAAsB;AACzB,gBAAIrB,IAAI,GAAG,MAAI,CAACvC,KAAL,GAAab,SAAxB,EAAmC;AAC/BoD,kBAAI,GAAG,MAAI,CAACvC,KAAL,GAAab,SAApB;AACAqJ,wBAAU,GAAG9I,WAAW,GAAGS,eAA3B;AACH;;AAED,gBAAIoC,IAAI,GAAG1C,QAAX,EAAqB;AACjB0C,kBAAI,GAAG1C,QAAP;AACH;AACJ;AACJ,SApDyB,CAsD1B;;;AACA,YAAM6I,iBAAiB,GAAG,MAAI,CAAC9K,OAAL,CAAa2C,UAAvC;;AAEA,YAAIJ,eAAe,KAAK,CAAC,CAAzB,EAA4B;AACxB,cAAIK,IAAI,CAACqC,KAAL,CAAW6F,iBAAX,MAAkC,CAAtC,EAAyC;AACrC;AACH;;AAED,cAAIlI,IAAI,CAACqC,KAAL,CAAW6F,iBAAiB,GAAGH,mBAApB,GAA0CD,mCAArD,KAA6F,CAAjG,EAAoG;AAChG;AACH;AACJ,SARD,MAQO;AACH,cAAI9H,IAAI,CAACqC,KAAL,CAAW6F,iBAAX,MAAkC3I,SAAtC,EAAiD;AAC7C;AACH;;AAED,cAAIS,IAAI,CAACqC,KAAL,CAAW6F,iBAAiB,GAAGH,mBAApB,GAA0CD,mCAArD,KAA6FvI,SAAjG,EAA4G;AACxG;AACH;AACJ,SAzEyB,CA2E1B;;;AACA,YAAIQ,UAAU,GAAGmI,iBAAiB,GAAGF,UAApB,GAAiC9I,WAAW,GAAGS,eAAhE;;AAEA,YAAIA,eAAe,KAAK,CAAC,CAAzB,EAA4B;AACxB,cAAMwI,cAAc,GAAGnI,IAAI,CAACE,GAAL,CAAS,IAAI6H,mBAAJ,GAA0BD,mCAAnC,EAAwE/H,UAAxE,CAAvB;AACA,gBAAI,CAAC3C,OAAL,CAAa2C,UAAb,GAA0BA,UAAU,GAAGoI,cAAvC;AACH,SAHD,MAGO;AACH,cAAMC,eAAe,GAAGpI,IAAI,CAACC,GAAL,CAASV,SAAS,GAAGwI,mBAAZ,GAAkCD,mCAA3C,EAAgF/H,UAAhF,CAAxB;AACA,gBAAI,CAAC3C,OAAL,CAAa2C,UAAb,GAA0BA,UAAU,GAAGqI,eAAvC;AACH;;AAED,YAAMC,KAAK,GAAGtG,IAAI,GAAG2F,SAArB;AACAA,iBAAS,GAAG3F,IAAZ,CAvF0B,CAyF1B;;AACA3C,YAAI,GAAG,MAAI,CAACkJ,MAAL,CAAYD,KAAZ,CAAH,GAAwB,MAAI,CAACE,QAAL,CAAcF,KAAd,EAAqBjF,MAArB,CAA5B,CA1F0B,CA4F1B;;AACA9C,cAAM,CAACC,qBAAP,CAA6B,YAAM;AAC/BV,oBAAU,CAAC0B,KAAD,CAAV;AACH,SAFD;AAGH,OAhGD;;AAkGA,UAAMiH,MAAM,GAAG,SAATA,MAAS,CAACjH,KAAD,EAAW;AACtB,YAAMlC,QAAQ,GAAG,MAAI,CAACjD,UAAL,CAAgBkD,WAAhB,EAAjB;;AACA,YAAIiC,KAAK,CAACd,OAAN,IAAiBc,KAAK,CAACd,OAAN,CAAchC,MAAd,GAAuB,CAA5C,EAA+C;AAC3C;AACH;;AACDgB,eAAO,GAAG8B,KAAK,CAACb,aAAN,GAAsBa,KAAK,CAACb,aAAN,CAAoB,CAApB,EAAuBC,UAA7C,GAA0D,IAApE,CALsB,CAOtB;AACA;;AACA,YAAI,MAAI,CAACvB,IAAL,IAAa,MAAI,CAACgE,MAAtB,EAA8B;AAC1B7B,eAAK,CAACiG,eAAN;AACH,SAXqB,CAatB;;;AACAE,iBAAS,GAAG,MAAI,CAACzE,WAAL,CAAiB3G,wBAAjB,CACR,MAAI,CAACF,UAAL,CAAgBiB,MAAhB,CAAuB+C,WAAvB,CAAmCmB,KAAnC,EAA0C,IAA1C,IAAkDlC,QAD1C,CAAZ,CAdsB,CAkBtB;;AACAuI,0BAAkB,GAAGF,SAAS,GAAG,MAAI,CAAClI,KAAtC;AACAqI,2BAAmB,GAAG,MAAI,CAAC1H,GAAL,GAAWuH,SAAjC,CApBsB,CAsBtB;;AACAnI,iBAAS,GAAG,MAAI,CAACnC,OAAL,CAAawD,WAAb,GAA2B,MAAI,CAACxD,OAAL,CAAaM,WAApD;AAEAkC,mBAAW,GAAG,MAAI,CAACvD,IAAL,CAAUwE,eAAV,CACV,MAAI,CAACzD,OAAL,CAAa0D,qBAAb,EADU,EAEV,MAAI,CAAChD,QAFK,CAAd;AAKA,cAAI,CAACyF,UAAL,GAAkB,KAAlB;AACA,cAAI,CAACC,UAAL,GAAkB,KAAlB;;AACA,YAAIjC,KAAK,CAACkH,MAAN,CAAaC,OAAb,CAAqBC,WAArB,OAAuC,QAA3C,EAAqD;AACjD,gBAAI,CAACpF,UAAL,GAAkB,IAAlB;AACAH,gBAAM,GAAG7B,KAAK,CAACkH,MAAN,CAAaG,SAAb,CAAuBC,QAAvB,CAAgC,yBAAhC,IACH,OADG,GAEH,KAFN;AAGH,SALD,MAKO;AACH,gBAAI,CAACrF,UAAL,GAAkB,IAAlB;AACApE,cAAI,GAAG,IAAP;AACAgE,gBAAM,GAAG,KAAT;AACH;AACJ,OA1CD;;AA2CA,UAAM0F,IAAI,GAAG,SAAPA,IAAO,CAACvH,KAAD,EAAW;AACpB,YAAIA,KAAK,CAACd,OAAN,IAAiBc,KAAK,CAACd,OAAN,CAAchC,MAAd,GAAuB,CAA5C,EAA+C;AAC3C;AACH;;AAED,YAAIW,IAAI,IAAIgE,MAAZ,EAAoB;AAChB,gBAAI,CAACI,UAAL,GAAkB,KAAlB;AACA,gBAAI,CAACD,UAAL,GAAkB,KAAlB;AACAnE,cAAI,GAAG,KAAP;AACAO,yBAAe,GAAG,IAAlB;AACAyD,gBAAM,GAAG,KAAT;AACH;;AAED,YAAIuE,OAAJ,EAAa;AACTA,iBAAO,GAAG,KAAV;;AACA,gBAAI,CAACtL,IAAL,CAAU6E,YAAV;;AACA,gBAAI,CAACC,SAAL,CAAe,YAAf,EAA6BI,KAA7B;;AACA,gBAAI,CAACnF,UAAL,CAAgB+E,SAAhB,CAA0B,mBAA1B,EAA+C,MAA/C,EAAqDI,KAArD;AACH;AACJ,OAnBD;;AAoBA,UAAMwH,MAAM,GAAG,SAATA,MAAS,CAACxH,KAAD,EAAW;AACtB,YAAMlC,QAAQ,GAAG,MAAI,CAACjD,UAAL,CAAgBkD,WAAhB,EAAjB;;AACA,YAAIoC,aAAa,GAAG,MAAI,CAACrF,IAAL,CAAUwE,eAAV,CAA0BU,KAA1B,EAAiC,MAAI,CAACzD,QAAtC,CAApB;;AAEA,YAAIyD,KAAK,CAACd,OAAN,IAAiBc,KAAK,CAACd,OAAN,CAAchC,MAAd,GAAuB,CAA5C,EAA+C;AAC3C;AACH;;AACD,YAAI8C,KAAK,CAACb,aAAN,IAAuBa,KAAK,CAACb,aAAN,CAAoB,CAApB,EAAuBC,UAAvB,IAAqClB,OAAhE,EAAyE;AACrE;AACH;;AACD,YAAI,CAACL,IAAD,IAAS,CAACgE,MAAd,EAAsB;AAClB;AACH;;AAED,YAAM4F,OAAO,GAAGtB,SAAhB;;AACA,YAAI3F,IAAI,GAAG,MAAI,CAACkB,WAAL,CAAiB3G,wBAAjB,CACP,MAAI,CAACF,UAAL,CAAgBiB,MAAhB,CAAuB+C,WAAvB,CAAmCmB,KAAnC,IAA4ClC,QADrC,CAAX;;AAIA,YAAID,IAAJ,EAAU;AACN;AACA,cAAM6J,MAAM,GAAG,MAAI,CAAC7M,UAAL,CAAgBkD,WAAhB,EAAf;;AACA,cAAIyC,IAAI,GAAGkH,MAAM,GAAGpB,mBAApB,EAAyC;AACrC9F,gBAAI,GAAGkH,MAAM,GAAGpB,mBAAhB;AACH;;AAED,cAAI9F,IAAI,GAAG6F,kBAAP,GAA4B,CAAhC,EAAmC;AAC/B7F,gBAAI,GAAG6F,kBAAP;AACH;AACJ;;AAED,YAAIxE,MAAJ,EAAY;AACR;AACA;AACA,cAAIzE,SAAS,GAAG,MAAI,CAACA,SAArB;;AACA,cAAI,CAACA,SAAL,EAAgB;AACZA,qBAAS,GAAG,CAAZ;AACH;;AAED,cAAIyE,MAAM,KAAK,OAAf,EAAwB;AACpB,gBAAIrB,IAAI,GAAG,MAAI,CAAC5B,GAAL,GAAWxB,SAAtB,EAAiC;AAC7BoD,kBAAI,GAAG,MAAI,CAAC5B,GAAL,GAAWxB,SAAlB;AACH;;AAED,gBAAIoD,IAAI,GAAG,CAAX,EAAc;AACVA,kBAAI,GAAG,CAAP;AACH;AACJ,WARD,MAQO,IAAIqB,MAAM,KAAK,KAAf,EAAsB;AACzB,gBAAIrB,IAAI,GAAG,MAAI,CAACvC,KAAL,GAAab,SAAxB,EAAmC;AAC/BoD,kBAAI,GAAG,MAAI,CAACvC,KAAL,GAAab,SAApB;AACH;;AAED,gBAAIoD,IAAI,GAAG1C,QAAX,EAAqB;AACjB0C,kBAAI,GAAG1C,QAAP;AACH;AACJ;AACJ;;AAED,YAAIgJ,KAAK,GAAGtG,IAAI,GAAG2F,SAAnB;AACAA,iBAAS,GAAG3F,IAAZ,CA3DsB,CA6DtB;;AACA,YAAI,MAAI,CAAC3C,IAAL,IAAaA,IAAjB,EAAuB;AACnBuI,iBAAO,GAAGA,OAAO,IAAI,CAAC,CAACU,KAAvB;;AACA,gBAAI,CAACC,MAAL,CAAYD,KAAZ;AACH,SAjEqB,CAmEtB;;;AACA,YAAI,MAAI,CAACjF,MAAL,IAAeA,MAAnB,EAA2B;AACvBuE,iBAAO,GAAGA,OAAO,IAAI,CAAC,CAACU,KAAvB;;AACA,gBAAI,CAACE,QAAL,CAAcF,KAAd,EAAqBjF,MAArB;AACH;;AAED,YACI,MAAI,CAACpE,MAAL,IAAeD,SAAS,CAACrB,WAAV,GAAwB,MAAI,CAACN,OAAL,CAAawD,WADxD,EAEE;AACE;AACA,cAAIe,CAAC,GAAGD,aAAa,CAACE,OAAtB,CAFF,CAIE;;AACA,cAAID,CAAC,GAAG/B,WAAW,CAACiC,IAAZ,GAAmB,MAAI,CAACpE,eAAhC,EAAiD;AAC7CkC,2BAAe,GAAG,CAAC,CAAnB;AACH,WAFD,MAEO,IAAIgC,CAAC,GAAG/B,WAAW,CAACkC,KAAZ,GAAoB,MAAI,CAACrE,eAAjC,EAAkD;AACrDkC,2BAAe,GAAG,CAAlB;AACH,WAFM,MAEA;AACHA,2BAAe,GAAG,IAAlB;AACH;;AAED,cAAIA,eAAJ,EAAqB;AACjBE,sBAAU,CAAC0B,KAAD,CAAV;AACH;AACJ;AACJ,OA5FD;;AA8FA,WAAK2D,OAAL,CAAanE,gBAAb,CAA8B,WAA9B,EAA2CyH,MAA3C;AACA,WAAKtD,OAAL,CAAanE,gBAAb,CAA8B,YAA9B,EAA4CyH,MAA5C;AAEApH,cAAQ,CAACC,IAAT,CAAcN,gBAAd,CAA+B,WAA/B,EAA4CgI,MAA5C;AACA3H,cAAQ,CAACC,IAAT,CAAcN,gBAAd,CAA+B,WAA/B,EAA4CgI,MAA5C,EAAoD;AAACG,eAAO,EAAE;AAAV,OAApD;AAEA9H,cAAQ,CAACL,gBAAT,CAA0B,SAA1B,EAAqC+H,IAArC;AACA1H,cAAQ,CAACC,IAAT,CAAcN,gBAAd,CAA+B,UAA/B,EAA2C+H,IAA3C;AAEA,WAAKlK,EAAL,CAAQ,QAAR,EAAkB,YAAM;AACpBwC,gBAAQ,CAACJ,mBAAT,CAA6B,SAA7B,EAAwC8H,IAAxC;AACA1H,gBAAQ,CAACC,IAAT,CAAcL,mBAAd,CAAkC,UAAlC,EAA8C8H,IAA9C;AACA1H,gBAAQ,CAACC,IAAT,CAAcL,mBAAd,CAAkC,WAAlC,EAA+C+H,MAA/C;AACA3H,gBAAQ,CAACC,IAAT,CAAcL,mBAAd,CAAkC,WAAlC,EAA+C+H,MAA/C;AACH,OALD;AAOA,WAAK3M,UAAL,CAAgBwC,EAAhB,CAAmB,SAAnB,EAA8B,YAAM;AAChCwC,gBAAQ,CAACJ,mBAAT,CAA6B,SAA7B,EAAwC8H,IAAxC;AACA1H,gBAAQ,CAACC,IAAT,CAAcL,mBAAd,CAAkC,UAAlC,EAA8C8H,IAA9C;AACH,OAHD;AAIH;;;WAED,gBAAOT,KAAP,EAAc;AACV,UAAMY,MAAM,GAAG,KAAK7M,UAAL,CAAgBkD,WAAhB,EAAf;;AACA,UAAI,KAAKa,GAAL,GAAWkI,KAAX,GAAmBY,MAAvB,EAA+B;AAC3BZ,aAAK,GAAGY,MAAM,GAAG,KAAK9I,GAAtB;AACH;;AAED,UAAI,KAAKX,KAAL,GAAa6I,KAAb,GAAqB,CAAzB,EAA4B;AACxBA,aAAK,GAAG,KAAK7I,KAAL,GAAa,CAAC,CAAtB;AACH;;AAED,WAAKa,MAAL,CAAY;AACRb,aAAK,EAAE,KAAKA,KAAL,GAAa6I,KADZ;AAERlI,WAAG,EAAE,KAAKA,GAAL,GAAWkI;AAFR,OAAZ;AAIH;AAED;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;;;;WACI,kBAASA,KAAT,EAAgBc,SAAhB,EAA2B;AACvB,UAAM9J,QAAQ,GAAG,KAAKjD,UAAL,CAAgBkD,WAAhB,EAAjB;;AACA,UAAI6J,SAAS,KAAK,OAAlB,EAA2B;AACvB;AACA;AACA,YAAId,KAAK,GAAG,CAAR,IAAa,KAAKlI,GAAL,IAAY,KAAKX,KAAL,GAAa6I,KAAzB,IAAkC,KAAK1J,SAAxD,EAAmE;AAC/D0J,eAAK,GAAG,KAAKlI,GAAL,GAAW,KAAKxB,SAAhB,GAA4B,KAAKa,KAAzC;AACH;;AAED,YAAI6I,KAAK,GAAG,CAAR,IAAc,KAAK7I,KAAL,GAAa6I,KAAd,GAAuB,CAAxC,EAA2C;AACvCA,eAAK,GAAG,KAAK7I,KAAL,GAAa,CAAC,CAAtB;AACH;;AAED,aAAKa,MAAL,CAAY;AACRb,eAAK,EAAEQ,IAAI,CAACC,GAAL,CAAS,KAAKT,KAAL,GAAa6I,KAAtB,EAA6B,KAAKlI,GAAlC,CADC;AAERA,aAAG,EAAEH,IAAI,CAACE,GAAL,CAAS,KAAKV,KAAL,GAAa6I,KAAtB,EAA6B,KAAKlI,GAAlC;AAFG,SAAZ;AAIH,OAfD,MAeO;AACH;AACA;AACA,YAAIkI,KAAK,GAAG,CAAR,IAAa,KAAKlI,GAAL,GAAWkI,KAAX,GAAmB,KAAK7I,KAAxB,GAAgC,KAAKb,SAAtD,EAAiE;AAC7D0J,eAAK,GAAG,KAAK7I,KAAL,GAAa,KAAKb,SAAlB,GAA8B,KAAKwB,GAA3C;AACH;;AAED,YAAIkI,KAAK,GAAG,CAAR,IAAc,KAAKlI,GAAL,GAAWkI,KAAZ,GAAqBhJ,QAAtC,EAAgD;AAC5CgJ,eAAK,GAAGhJ,QAAQ,GAAG,KAAKc,GAAxB;AACH;;AAED,aAAKE,MAAL,CAAY;AACRb,eAAK,EAAEQ,IAAI,CAACC,GAAL,CAAS,KAAKE,GAAL,GAAWkI,KAApB,EAA2B,KAAK7I,KAAhC,CADC;AAERW,aAAG,EAAEH,IAAI,CAACE,GAAL,CAAS,KAAKC,GAAL,GAAWkI,KAApB,EAA2B,KAAK7I,KAAhC;AAFG,SAAZ;AAIH;AACJ;;;WAED,6BAAoB4D,MAApB,EAA4B;AACxB,UAAIgG,WAAJ;;AACA,UAAIhG,MAAJ,EAAY;AACRgG,mBAAW,GAAG,KAAKtL,QAAL,GAAgB,YAAhB,GAA+B,YAA7C;AACH,OAFD,MAEO;AACHsL,mBAAW,GAAG,MAAd;AACH;;AAED,WAAKxF,YAAL,IAAqB,KAAKZ,KAAL,CAAW,KAAKY,YAAhB,EAA8B;AAAEuC,cAAM,EAAEiD;AAAV,OAA9B,CAArB;AACA,WAAKvF,aAAL,IAAsB,KAAKb,KAAL,CAAW,KAAKa,aAAhB,EAA+B;AAAEsC,cAAM,EAAEiD;AAAV,OAA/B,CAAtB;AACH;;;;;;;;;;;;UCjwBL;UACA;;UAEA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;;UAEA;UACA;;UAEA;UACA;UACA;;;;UCtBA;UACA;UACA;UACA","file":"wavesurfer.regions.js","sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine(\"WaveSurfer\", [], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"WaveSurfer\"] = factory();\n\telse\n\t\troot[\"WaveSurfer\"] = root[\"WaveSurfer\"] || {}, root[\"WaveSurfer\"][\"regions\"] = factory();\n})(this, function() {\nreturn ","/**\n * @since 4.0.0 This class has been split\n *\n * @typedef {Object} RegionsPluginParams\n * @property {?boolean} dragSelection Enable creating regions by dragging with\n * the mouse\n * @property {?RegionParams[]} regions Regions that should be added upon\n * initialisation\n * @property {number} slop=2 The sensitivity of the mouse dragging\n * @property {?number} snapToGridInterval Snap the regions to a grid of the specified multiples in seconds\n * @property {?number} snapToGridOffset Shift the snap-to-grid by the specified seconds. May also be negative.\n * @property {?boolean} deferInit Set to true to manually call\n * @property {number[]} maxRegions Maximum number of regions that may be created by the user at one time.\n * `initPlugin('regions')`\n * @property {function} formatTimeCallback Allows custom formating for region tooltip.\n * @property {?number} edgeScrollWidth='5% from container edges' Optional width for edgeScroll to start\n */\n\n/**\n * @typedef {Object} RegionParams\n * @desc The parameters used to describe a region.\n * @example wavesurfer.addRegion(regionParams);\n * @property {string} id=→random The id of the region\n * @property {number} start=0 The start position of the region (in seconds).\n * @property {number} end=0 The end position of the region (in seconds).\n * @property {?boolean} loop Whether to loop the region when played back.\n * @property {boolean} drag=true Allow/disallow dragging the region.\n * @property {boolean} resize=true Allow/disallow resizing the region.\n * @property {string} [color='rgba(0, 0, 0, 0.1)'] HTML color code.\n * @property {?number} channelIdx Select channel to draw the region on (if there are multiple channel waveforms).\n * @property {?object} handleStyle A set of CSS properties used to style the left and right handle.\n * @property {?boolean} preventContextMenu=false Determines whether the context menu is prevented from being opened.\n * @property {boolean} showTooltip=true Enable/disable tooltip displaying start and end times when hovering over region.\n */\n\nimport {Region} from \"./region.js\";\n\n/**\n * Regions are visual overlays on waveform that can be used to play and loop\n * portions of audio. Regions can be dragged and resized.\n *\n * Visual customization is possible via CSS (using the selectors\n * `.wavesurfer-region` and `.wavesurfer-handle`).\n *\n * @implements {PluginClass}\n * @extends {Observer}\n *\n * @example\n * // es6\n * import RegionsPlugin from 'wavesurfer.regions.js';\n *\n * // commonjs\n * var RegionsPlugin = require('wavesurfer.regions.js');\n *\n * // if you are using <script> tags\n * var RegionsPlugin = window.WaveSurfer.regions;\n *\n * // ... initialising wavesurfer with the plugin\n * var wavesurfer = WaveSurfer.create({\n * // wavesurfer options ...\n * plugins: [\n * RegionsPlugin.create({\n * // plugin options ...\n * })\n * ]\n * });\n */\nexport default class RegionsPlugin {\n /**\n * Regions plugin definition factory\n *\n * This function must be used to create a plugin definition which can be\n * used by wavesurfer to correctly instantiate the plugin.\n *\n * @param {RegionsPluginParams} params parameters use to initialise the plugin\n * @return {PluginDefinition} an object representing the plugin\n */\n static create(params) {\n return {\n name: 'regions',\n deferInit: params && params.deferInit ? params.deferInit : false,\n params: params,\n staticProps: {\n addRegion(options) {\n if (!this.initialisedPluginList.regions) {\n this.initPlugin('regions');\n }\n return this.regions.add(options);\n },\n\n clearRegions() {\n this.regions && this.regions.clear();\n },\n\n enableDragSelection(options) {\n if (!this.initialisedPluginList.regions) {\n this.initPlugin('regions');\n }\n this.regions.enableDragSelection(options);\n },\n\n disableDragSelection() {\n this.regions.disableDragSelection();\n }\n },\n instance: RegionsPlugin\n };\n }\n\n constructor(params, ws) {\n this.params = params;\n this.wavesurfer = ws;\n this.util = {\n ...ws.util,\n getRegionSnapToGridValue: value => {\n return this.getRegionSnapToGridValue(value, params);\n }\n };\n this.maxRegions = params.maxRegions;\n this.regionsMinLength = params.regionsMinLength || null;\n\n // turn the plugin instance into an observer\n const observerPrototypeKeys = Object.getOwnPropertyNames(\n this.util.Observer.prototype\n );\n observerPrototypeKeys.forEach(key => {\n Region.prototype[key] = this.util.Observer.prototype[key];\n });\n this.wavesurfer.Region = Region;\n\n // By default, scroll the container if the user drags a region\n // within 5% of its edge\n const scrollWidthProportion = 0.05;\n this._onBackendCreated = () => {\n this.wrapper = this.wavesurfer.drawer.wrapper;\n this.orientation = this.wavesurfer.drawer.orientation;\n if (this.params.regions) {\n this.params.regions.forEach(region => {\n region.edgeScrollWidth = this.params.edgeScrollWidth ||\n this.wrapper.clientWidth * scrollWidthProportion;\n this.add(region);\n });\n }\n };\n\n // Id-based hash of regions\n this.list = {};\n this._onReady = () => {\n this.wrapper = this.wavesurfer.drawer.wrapper;\n this.vertical = this.wavesurfer.drawer.params.vertical;\n if (this.params.dragSelection) {\n this.enableDragSelection(this.params);\n }\n Object.keys(this.list).forEach(id => {\n this.list[id].updateRender();\n });\n };\n }\n\n init() {\n // Check if ws is ready\n if (this.wavesurfer.isReady) {\n this._onBackendCreated();\n this._onReady();\n } else {\n this.wavesurfer.once('ready', this._onReady);\n this.wavesurfer.once('backend-created', this._onBackendCreated);\n }\n }\n\n destroy() {\n this.wavesurfer.un('ready', this._onReady);\n this.wavesurfer.un('backend-created', this._onBackendCreated);\n this.disableDragSelection();\n this.clear();\n }\n\n /**\n * check to see if adding a new region would exceed maxRegions\n * @return {boolean} whether we should proceed and create a region\n * @private\n */\n wouldExceedMaxRegions() {\n return (\n this.maxRegions && Object.keys(this.list).length >= this.maxRegions\n );\n }\n\n /**\n * Add a region\n *\n * @param {object} params Region parameters\n * @return {Region} The created region\n */\n add(params) {\n if (this.wouldExceedMaxRegions()) {\n return null;\n }\n\n if (!params.minLength && this.regionsMinLength) {\n params = {...params, minLength: this.regionsMinLength};\n }\n\n const region = new this.wavesurfer.Region(params, this.util, this.wavesurfer);\n\n this.list[region.id] = region;\n\n region.on('remove', () => {\n delete this.list[region.id];\n });\n\n return region;\n }\n\n /**\n * Remove all regions\n */\n clear() {\n Object.keys(this.list).forEach(id => {\n this.list[id].remove();\n });\n }\n\n enableDragSelection(params) {\n this.disableDragSelection();\n\n const slop = params.slop || 2;\n const container = this.wavesurfer.drawer.container;\n const scroll =\n params.scroll !== false && this.wavesurfer.params.scrollParent;\n const scrollSpeed = params.scrollSpeed || 1;\n const scrollThreshold = params.scrollThreshold || 10;\n let drag;\n let duration = this.wavesurfer.getDuration();\n let maxScroll;\n let start;\n let region;\n let touchId;\n let pxMove = 0;\n let scrollDirection;\n let wrapperRect;\n\n // Scroll when the user is dragging within the threshold\n const edgeScroll = e => {\n if (!region || !scrollDirection) {\n return;\n }\n\n // Update scroll position\n let scrollLeft =\n this.wrapper.scrollLeft + scrollSpeed * scrollDirection;\n this.wrapper.scrollLeft = scrollLeft = Math.min(\n maxScroll,\n Math.max(0, scrollLeft)\n );\n\n // Update range\n const end = this.wavesurfer.drawer.handleEvent(e);\n region.update({\n start: Math.min(end * duration, start * duration),\n end: Math.max(end * duration, start * duration)\n });\n\n // Check that there is more to scroll and repeat\n if (scrollLeft < maxScroll && scrollLeft > 0) {\n window.requestAnimationFrame(() => {\n edgeScroll(e);\n });\n }\n };\n\n const eventDown = e => {\n if (e.touches && e.touches.length > 1) {\n return;\n }\n duration = this.wavesurfer.getDuration();\n touchId = e.targetTouches ? e.targetTouches[0].identifier : null;\n\n // Store for scroll calculations\n maxScroll = this.wrapper.scrollWidth -\n this.wrapper.clientWidth;\n wrapperRect = this.util.withOrientation(\n this.wrapper.getBoundingClientRect(),\n this.vertical\n );\n\n drag = true;\n start = this.wavesurfer.drawer.handleEvent(e, true);\n region = null;\n scrollDirection = null;\n };\n this.wrapper.addEventListener('mousedown', eventDown);\n this.wrapper.addEventListener('touchstart', eventDown);\n this.on('disable-drag-selection', () => {\n this.wrapper.removeEventListener('touchstart', eventDown);\n this.wrapper.removeEventListener('mousedown', eventDown);\n });\n\n const eventUp = e => {\n if (e.touches && e.touches.length > 1) {\n return;\n }\n\n drag = false;\n pxMove = 0;\n scrollDirection = null;\n\n if (region) {\n this.util.preventClick();\n region.fireEvent('update-end', e);\n this.wavesurfer.fireEvent('region-update-end', region, e);\n }\n\n region = null;\n };\n this.wrapper.addEventListener('mouseleave', eventUp);\n this.wrapper.addEventListener('mouseup', eventUp);\n this.wrapper.addEventListener('touchend', eventUp);\n\n document.body.addEventListener('mouseup', eventUp);\n document.body.addEventListener('touchend', eventUp);\n this.on('disable-drag-selection', () => {\n document.body.removeEventListener('mouseup', eventUp);\n document.body.removeEventListener('touchend', eventUp);\n this.wrapper.removeEventListener('touchend', eventUp);\n this.wrapper.removeEventListener('mouseup', eventUp);\n this.wrapper.removeEventListener('mouseleave', eventUp);\n });\n\n const eventMove = event => {\n if (!drag) {\n return;\n }\n if (++pxMove <= slop) {\n return;\n }\n\n if (event.touches && event.touches.length > 1) {\n return;\n }\n if (event.targetTouches && event.targetTouches[0].identifier != touchId) {\n return;\n }\n\n // auto-create a region during mouse drag, unless region-count would exceed \"maxRegions\"\n if (!region) {\n region = this.add(params || {});\n if (!region) {\n return;\n }\n }\n\n const end = this.wavesurfer.drawer.handleEvent(event);\n const startUpdate = this.wavesurfer.regions.util.getRegionSnapToGridValue(\n start * duration\n );\n const endUpdate = this.wavesurfer.regions.util.getRegionSnapToGridValue(\n end * duration\n );\n region.update({\n start: Math.min(endUpdate, startUpdate),\n end: Math.max(endUpdate, startUpdate)\n });\n\n let orientedEvent = this.util.withOrientation(event, this.vertical);\n\n // If scrolling is enabled\n if (scroll && container.clientWidth < this.wrapper.scrollWidth) {\n // Check threshold based on mouse\n const x = orientedEvent.clientX - wrapperRect.left;\n if (x <= scrollThreshold) {\n scrollDirection = -1;\n } else if (x >= wrapperRect.right - scrollThreshold) {\n scrollDirection = 1;\n } else {\n scrollDirection = null;\n }\n scrollDirection && edgeScroll(event);\n }\n };\n this.wrapper.addEventListener('mousemove', eventMove);\n this.wrapper.addEventListener('touchmove', eventMove);\n this.on('disable-drag-selection', () => {\n this.wrapper.removeEventListener('touchmove', eventMove);\n this.wrapper.removeEventListener('mousemove', eventMove);\n });\n\n this.wavesurfer.on('region-created', region => {\n if (this.regionsMinLength) {\n region.minLength = this.regionsMinLength;\n }\n });\n }\n\n disableDragSelection() {\n this.fireEvent('disable-drag-selection');\n }\n\n /**\n * Get current region\n *\n * The smallest region that contains the current time. If several such\n * regions exist, take the first. Return `null` if none exist.\n *\n * @returns {Region} The current region\n */\n getCurrentRegion() {\n const time = this.wavesurfer.getCurrentTime();\n let min = null;\n Object.keys(this.list).forEach(id => {\n const cur = this.list[id];\n if (cur.start <= time && cur.end >= time) {\n if (!min || cur.end - cur.start < min.end - min.start) {\n min = cur;\n }\n }\n });\n\n return min;\n }\n\n /**\n * Match the value to the grid, if required\n *\n * If the regions plugin params have a snapToGridInterval set, return the\n * value matching the nearest grid interval. If no snapToGridInterval is set,\n * the passed value will be returned without modification.\n *\n * @param {number} value the value to snap to the grid, if needed\n * @param {Object} params the regions plugin params\n * @returns {number} value\n */\n getRegionSnapToGridValue(value, params) {\n if (params.snapToGridInterval) {\n // the regions should snap to a grid\n const offset = params.snapToGridOffset || 0;\n return (\n Math.round((value - offset) / params.snapToGridInterval) *\n params.snapToGridInterval +\n offset\n );\n }\n\n // no snap-to-grid\n return value;\n }\n}\n","/**\n * @since 4.0.0\n *\n * (Single) Region plugin class\n *\n * Must be turned into an observer before instantiating. This is done in\n * `RegionsPlugin` (main plugin class).\n *\n * @extends {Observer}\n */\nexport class Region {\n constructor(params, regionsUtils, ws) {\n this.wavesurfer = ws;\n this.wrapper = ws.drawer.wrapper;\n this.util = ws.util;\n this.style = this.util.style;\n this.regionsUtil = regionsUtils;\n this.vertical = ws.drawer.params.vertical;\n\n this.id = params.id == null ? ws.util.getId() : params.id;\n this.start = Number(params.start) || 0;\n this.end =\n params.end == null\n ? // small marker-like region\n this.start +\n (4 / this.wrapper.scrollWidth) * this.wavesurfer.getDuration()\n : Number(params.end);\n this.resize =\n params.resize === undefined ? true : Boolean(params.resize);\n this.drag = params.drag === undefined ? true : Boolean(params.drag);\n // reflect resize and drag state of region for region-updated listener\n this.isResizing = false;\n this.isDragging = false;\n this.loop = Boolean(params.loop);\n this.color = params.color || 'rgba(0, 0, 0, 0.1)';\n // The left and right handleStyle properties can be set to 'none' for\n // no styling or can be assigned an object containing CSS properties.\n this.handleStyle = params.handleStyle || {\n left: {},\n right: {}\n };\n this.handleLeftEl = null;\n this.handleRightEl = null;\n this.data = params.data || {};\n this.attributes = params.attributes || {};\n this.showTooltip = params.showTooltip ?? true;\n\n this.maxLength = params.maxLength;\n // It assumes the minLength parameter value, or the regionsMinLength parameter value, if the first one not provided\n this.minLength = params.minLength;\n this._onRedraw = () => this.updateRender();\n\n this.scroll = params.scroll !== false && ws.params.scrollParent;\n this.scrollSpeed = params.scrollSpeed || 1;\n this.scrollThreshold = params.scrollThreshold || 10;\n // Determines whether the context menu is prevented from being opened.\n this.preventContextMenu =\n params.preventContextMenu === undefined\n ? false\n : Boolean(params.preventContextMenu);\n\n // select channel ID to set region\n let channelIdx =\n params.channelIdx == null ? -1 : parseInt(params.channelIdx);\n this.regionHeight = '100%';\n this.marginTop = '0px';\n\n if (channelIdx !== -1) {\n let channelCount =\n this.wavesurfer.backend.buffer != null\n ? this.wavesurfer.backend.buffer.numberOfChannels\n : -1;\n if (channelCount >= 0 && channelIdx < channelCount) {\n this.regionHeight = Math.floor((1 / channelCount) * 100) + '%';\n this.marginTop =\n this.wavesurfer.getHeight() * channelIdx + 'px';\n }\n }\n\n this.formatTimeCallback = params.formatTimeCallback;\n this.edgeScrollWidth = params.edgeScrollWidth;\n this.bindInOut();\n this.render();\n this.wavesurfer.on('zoom', this._onRedraw);\n this.wavesurfer.on('redraw', this._onRedraw);\n this.wavesurfer.fireEvent('region-created', this);\n }\n\n /* Update region params. */\n update(params) {\n if (params.start != null) {\n this.start = Number(params.start);\n }\n if (params.end != null) {\n this.end = Number(params.end);\n }\n if (params.loop != null) {\n this.loop = Boolean(params.loop);\n }\n if (params.color != null) {\n this.color = params.color;\n }\n if (params.handleStyle != null) {\n this.handleStyle = params.handleStyle;\n }\n if (params.data != null) {\n this.data = params.data;\n }\n if (params.resize != null) {\n this.resize = Boolean(params.resize);\n this.updateHandlesResize(this.resize);\n }\n if (params.drag != null) {\n this.drag = Boolean(params.drag);\n }\n if (params.maxLength != null) {\n this.maxLength = Number(params.maxLength);\n }\n if (params.minLength != null) {\n this.minLength = Number(params.minLength);\n }\n if (params.attributes != null) {\n this.attributes = params.attributes;\n }\n\n this.updateRender();\n this.fireEvent('update');\n this.wavesurfer.fireEvent('region-updated', this);\n }\n\n /* Remove a single region. */\n remove() {\n if (this.element) {\n this.wrapper.removeChild(this.element.domElement);\n this.element = null;\n this.fireEvent('remove');\n this.wavesurfer.un('zoom', this._onRedraw);\n this.wavesurfer.un('redraw', this._onRedraw);\n this.wavesurfer.fireEvent('region-removed', this);\n }\n }\n\n /**\n * Play the audio region.\n * @param {number} start Optional offset to start playing at\n */\n play(start) {\n const s = start || this.start;\n this.wavesurfer.play(s, this.end);\n this.fireEvent('play');\n this.wavesurfer.fireEvent('region-play', this);\n }\n\n /**\n * Play the audio region in a loop.\n * @param {number} start Optional offset to start playing at\n * */\n playLoop(start) {\n this.loop = true;\n this.play(start);\n }\n\n /**\n * Set looping on/off.\n * @param {boolean} loop True if should play in loop\n */\n setLoop(loop) {\n this.loop = loop;\n }\n\n /* Render a region as a DOM element. */\n render() {\n this.element = this.util.withOrientation(\n this.wrapper.appendChild(document.createElement('region')),\n this.vertical\n );\n\n this.element.className = 'wavesurfer-region';\n if (this.showTooltip) {\n this.element.title = this.formatTime(this.start, this.end);\n }\n this.element.setAttribute('data-id', this.id);\n\n for (const attrname in this.attributes) {\n this.element.setAttribute(\n 'data-region-' + attrname,\n this.attributes[attrname]\n );\n }\n\n this.style(this.element, {\n position: 'absolute',\n zIndex: 2,\n height: this.regionHeight,\n top: this.marginTop\n });\n\n /* Resize handles */\n if (this.resize) {\n this.handleLeftEl = this.util.withOrientation(\n this.element.appendChild(document.createElement('handle')),\n this.vertical\n );\n this.handleRightEl = this.util.withOrientation(\n this.element.appendChild(document.createElement('handle')),\n this.vertical\n );\n\n this.handleLeftEl.className = 'wavesurfer-handle wavesurfer-handle-start';\n this.handleRightEl.className = 'wavesurfer-handle wavesurfer-handle-end';\n\n // Default CSS properties for both handles.\n const css = {\n cursor: this.vertical ? 'row-resize' : 'col-resize',\n position: 'absolute',\n top: '0px',\n width: '2px',\n height: '100%',\n backgroundColor: 'rgba(0, 0, 0, 1)'\n };\n\n // Merge CSS properties per handle.\n const handleLeftCss =\n this.handleStyle.left !== 'none'\n ? Object.assign(\n { left: '0px' },\n css,\n this.handleStyle.left\n )\n : null;\n const handleRightCss =\n this.handleStyle.right !== 'none'\n ? Object.assign(\n { right: '0px' },\n css,\n this.handleStyle.right\n )\n : null;\n\n if (handleLeftCss) {\n this.style(this.handleLeftEl, handleLeftCss);\n }\n\n if (handleRightCss) {\n this.style(this.handleRightEl, handleRightCss);\n }\n }\n\n this.updateRender();\n this.bindEvents();\n }\n\n formatTime(start, end) {\n if (this.formatTimeCallback) {\n return this.formatTimeCallback(start, end);\n }\n return (start == end ? [start] : [start, end])\n .map((time) =>\n [\n Math.floor((time % 3600) / 60), // minutes\n ('00' + Math.floor(time % 60)).slice(-2) // seconds\n ].join(':')\n )\n .join('-');\n }\n\n getWidth() {\n return this.wavesurfer.drawer.width / this.wavesurfer.params.pixelRatio;\n }\n\n /* Update element's position, width, color. */\n updateRender() {\n // duration varies during loading process, so don't overwrite important data\n const dur = this.wavesurfer.getDuration();\n const width = this.getWidth();\n\n let startLimited = this.start;\n let endLimited = this.end;\n if (startLimited < 0) {\n startLimited = 0;\n endLimited = endLimited - startLimited;\n }\n if (endLimited > dur) {\n endLimited = dur;\n startLimited = dur - (endLimited - startLimited);\n }\n\n if (this.minLength != null) {\n endLimited = Math.max(startLimited + this.minLength, endLimited);\n }\n\n if (this.maxLength != null) {\n endLimited = Math.min(startLimited + this.maxLength, endLimited);\n }\n\n if (this.element != null) {\n // Calculate the left and width values of the region such that\n // no gaps appear between regions.\n const left = Math.round((startLimited / dur) * width);\n const regionWidth = Math.round((endLimited / dur) * width) - left;\n\n this.style(this.element, {\n left: left + 'px',\n width: regionWidth + 'px',\n backgroundColor: this.color,\n cursor: this.drag ? 'move' : 'default'\n });\n\n for (const attrname in this.attributes) {\n this.element.setAttribute(\n 'data-region-' + attrname,\n this.attributes[attrname]\n );\n }\n\n if (this.showTooltip) {\n this.element.title = this.formatTime(this.start, this.end);\n }\n }\n }\n\n /* Bind audio events. */\n bindInOut() {\n this.firedIn = false;\n this.firedOut = false;\n\n const onProcess = (time) => {\n let start = Math.round(this.start * 10) / 10;\n let end = Math.round(this.end * 10) / 10;\n time = Math.round(time * 10) / 10;\n\n if (\n !this.firedOut &&\n this.firedIn &&\n (start > time || end <= time)\n ) {\n this.firedOut = true;\n this.firedIn = false;\n this.fireEvent('out');\n this.wavesurfer.fireEvent('region-out', this);\n }\n if (!this.firedIn && start <= time && end > time) {\n this.firedIn = true;\n this.firedOut = false;\n this.fireEvent('in');\n this.wavesurfer.fireEvent('region-in', this);\n }\n };\n\n this.wavesurfer.backend.on('audioprocess', onProcess);\n\n this.on('remove', () => {\n this.wavesurfer.backend.un('audioprocess', onProcess);\n });\n\n /* Loop playback. */\n this.on('out', () => {\n if (this.loop) {\n const realTime = this.wavesurfer.getCurrentTime();\n if (realTime >= this.start && realTime <= this.end) {\n this.wavesurfer.play(this.start);\n }\n }\n });\n }\n\n /* Bind DOM events. */\n bindEvents() {\n const preventContextMenu = this.preventContextMenu;\n\n this.element.addEventListener('mouseenter', (e) => {\n this.fireEvent('mouseenter', e);\n this.wavesurfer.fireEvent('region-mouseenter', this, e);\n });\n\n this.element.addEventListener('mouseleave', (e) => {\n this.fireEvent('mouseleave', e);\n this.wavesurfer.fireEvent('region-mouseleave', this, e);\n });\n\n this.element.addEventListener('click', (e) => {\n e.preventDefault();\n this.fireEvent('click', e);\n this.wavesurfer.fireEvent('region-click', this, e);\n });\n\n this.element.addEventListener('dblclick', (e) => {\n e.stopPropagation();\n e.preventDefault();\n this.fireEvent('dblclick', e);\n this.wavesurfer.fireEvent('region-dblclick', this, e);\n });\n\n this.element.addEventListener('contextmenu', (e) => {\n if (preventContextMenu) {\n e.preventDefault();\n }\n this.fireEvent('contextmenu', e);\n this.wavesurfer.fireEvent('region-contextmenu', this, e);\n });\n\n /* Drag or resize on mousemove. */\n if (this.drag || this.resize) {\n this.bindDragEvents();\n }\n }\n\n bindDragEvents() {\n const container = this.wavesurfer.drawer.container;\n const scrollSpeed = this.scrollSpeed;\n const scrollThreshold = this.scrollThreshold;\n let startTime;\n let touchId;\n let drag;\n let maxScroll;\n let resize;\n let updated = false;\n let scrollDirection;\n let wrapperRect;\n let regionLeftHalfTime;\n let regionRightHalfTime;\n\n // Scroll when the user is dragging within the threshold\n const edgeScroll = (event) => {\n let orientedEvent = this.util.withOrientation(event, this.vertical);\n const duration = this.wavesurfer.getDuration();\n if (!scrollDirection || (!drag && !resize)) {\n return;\n }\n\n const x = orientedEvent.clientX;\n let distanceBetweenCursorAndWrapperEdge = 0;\n let regionHalfTimeWidth = 0;\n let adjustment = 0;\n\n // Get the currently selected time according to the mouse position\n let time = this.regionsUtil.getRegionSnapToGridValue(\n this.wavesurfer.drawer.handleEvent(event) * duration\n );\n\n if (drag) {\n // Considering the point of contact with the region while edgescrolling\n if (scrollDirection === -1) {\n regionHalfTimeWidth = regionLeftHalfTime * this.wavesurfer.params.minPxPerSec;\n distanceBetweenCursorAndWrapperEdge = x - wrapperRect.left;\n } else {\n regionHalfTimeWidth = regionRightHalfTime * this.wavesurfer.params.minPxPerSec;\n distanceBetweenCursorAndWrapperEdge = wrapperRect.right - x;\n }\n } else {\n // Considering minLength while edgescroll\n let minLength = this.minLength;\n if (!minLength) {\n minLength = 0;\n }\n\n if (resize === 'start') {\n if (time > this.end - minLength) {\n time = this.end - minLength;\n adjustment = scrollSpeed * scrollDirection;\n }\n\n if (time < 0) {\n time = 0;\n }\n } else if (resize === 'end') {\n if (time < this.start + minLength) {\n time = this.start + minLength;\n adjustment = scrollSpeed * scrollDirection;\n }\n\n if (time > duration) {\n time = duration;\n }\n }\n }\n\n // Don't edgescroll if region has reached min or max limit\n const wrapperScrollLeft = this.wrapper.scrollLeft;\n\n if (scrollDirection === -1) {\n if (Math.round(wrapperScrollLeft) === 0) {\n return;\n }\n\n if (Math.round(wrapperScrollLeft - regionHalfTimeWidth + distanceBetweenCursorAndWrapperEdge) <= 0) {\n return;\n }\n } else {\n if (Math.round(wrapperScrollLeft) === maxScroll) {\n return;\n }\n\n if (Math.round(wrapperScrollLeft + regionHalfTimeWidth - distanceBetweenCursorAndWrapperEdge) >= maxScroll) {\n return;\n }\n }\n\n // Update scroll position\n let scrollLeft = wrapperScrollLeft - adjustment + scrollSpeed * scrollDirection;\n\n if (scrollDirection === -1) {\n const calculatedLeft = Math.max(0 + regionHalfTimeWidth - distanceBetweenCursorAndWrapperEdge, scrollLeft);\n this.wrapper.scrollLeft = scrollLeft = calculatedLeft;\n } else {\n const calculatedRight = Math.min(maxScroll - regionHalfTimeWidth + distanceBetweenCursorAndWrapperEdge, scrollLeft);\n this.wrapper.scrollLeft = scrollLeft = calculatedRight;\n }\n\n const delta = time - startTime;\n startTime = time;\n\n // Continue dragging or resizing\n drag ? this.onDrag(delta) : this.onResize(delta, resize);\n\n // Repeat\n window.requestAnimationFrame(() => {\n edgeScroll(event);\n });\n };\n\n const onDown = (event) => {\n const duration = this.wavesurfer.getDuration();\n if (event.touches && event.touches.length > 1) {\n return;\n }\n touchId = event.targetTouches ? event.targetTouches[0].identifier : null;\n\n // stop the event propagation, if this region is resizable or draggable\n // and the event is therefore handled here.\n if (this.drag || this.resize) {\n event.stopPropagation();\n }\n\n // Store the selected startTime we begun dragging or resizing\n startTime = this.regionsUtil.getRegionSnapToGridValue(\n this.wavesurfer.drawer.handleEvent(event, true) * duration\n );\n\n // Store the selected point of contact when we begin dragging\n regionLeftHalfTime = startTime - this.start;\n regionRightHalfTime = this.end - startTime;\n\n // Store for scroll calculations\n maxScroll = this.wrapper.scrollWidth - this.wrapper.clientWidth;\n\n wrapperRect = this.util.withOrientation(\n this.wrapper.getBoundingClientRect(),\n this.vertical\n );\n\n this.isResizing = false;\n this.isDragging = false;\n if (event.target.tagName.toLowerCase() === 'handle') {\n this.isResizing = true;\n resize = event.target.classList.contains('wavesurfer-handle-start')\n ? 'start'\n : 'end';\n } else {\n this.isDragging = true;\n drag = true;\n resize = false;\n }\n };\n const onUp = (event) => {\n if (event.touches && event.touches.length > 1) {\n return;\n }\n\n if (drag || resize) {\n this.isDragging = false;\n this.isResizing = false;\n drag = false;\n scrollDirection = null;\n resize = false;\n }\n\n if (updated) {\n updated = false;\n this.util.preventClick();\n this.fireEvent('update-end', event);\n this.wavesurfer.fireEvent('region-update-end', this, event);\n }\n };\n const onMove = (event) => {\n const duration = this.wavesurfer.getDuration();\n let orientedEvent = this.util.withOrientation(event, this.vertical);\n\n if (event.touches && event.touches.length > 1) {\n return;\n }\n if (event.targetTouches && event.targetTouches[0].identifier != touchId) {\n return;\n }\n if (!drag && !resize) {\n return;\n }\n\n const oldTime = startTime;\n let time = this.regionsUtil.getRegionSnapToGridValue(\n this.wavesurfer.drawer.handleEvent(event) * duration\n );\n\n if (drag) {\n // To maintain relative cursor start point while dragging\n const maxEnd = this.wavesurfer.getDuration();\n if (time > maxEnd - regionRightHalfTime) {\n time = maxEnd - regionRightHalfTime;\n }\n\n if (time - regionLeftHalfTime < 0) {\n time = regionLeftHalfTime;\n }\n }\n\n if (resize) {\n // To maintain relative cursor start point while resizing\n // we have to handle for minLength\n let minLength = this.minLength;\n if (!minLength) {\n minLength = 0;\n }\n\n if (resize === 'start') {\n if (time > this.end - minLength) {\n time = this.end - minLength;\n }\n\n if (time < 0) {\n time = 0;\n }\n } else if (resize === 'end') {\n if (time < this.start + minLength) {\n time = this.start + minLength;\n }\n\n if (time > duration) {\n time = duration;\n }\n }\n }\n\n let delta = time - startTime;\n startTime = time;\n\n // Drag\n if (this.drag && drag) {\n updated = updated || !!delta;\n this.onDrag(delta);\n }\n\n // Resize\n if (this.resize && resize) {\n updated = updated || !!delta;\n this.onResize(delta, resize);\n }\n\n if (\n this.scroll && container.clientWidth < this.wrapper.scrollWidth\n ) {\n // Triggering edgescroll from within edgeScrollWidth\n let x = orientedEvent.clientX;\n\n // Check direction\n if (x < wrapperRect.left + this.edgeScrollWidth) {\n scrollDirection = -1;\n } else if (x > wrapperRect.right - this.edgeScrollWidth) {\n scrollDirection = 1;\n } else {\n scrollDirection = null;\n }\n\n if (scrollDirection) {\n edgeScroll(event);\n }\n }\n };\n\n this.element.addEventListener('mousedown', onDown);\n this.element.addEventListener('touchstart', onDown);\n\n document.body.addEventListener('mousemove', onMove);\n document.body.addEventListener('touchmove', onMove, {passive: false});\n\n document.addEventListener('mouseup', onUp);\n document.body.addEventListener('touchend', onUp);\n\n this.on('remove', () => {\n document.removeEventListener('mouseup', onUp);\n document.body.removeEventListener('touchend', onUp);\n document.body.removeEventListener('mousemove', onMove);\n document.body.removeEventListener('touchmove', onMove);\n });\n\n this.wavesurfer.on('destroy', () => {\n document.removeEventListener('mouseup', onUp);\n document.body.removeEventListener('touchend', onUp);\n });\n }\n\n onDrag(delta) {\n const maxEnd = this.wavesurfer.getDuration();\n if (this.end + delta > maxEnd) {\n delta = maxEnd - this.end;\n }\n\n if (this.start + delta < 0) {\n delta = this.start * -1;\n }\n\n this.update({\n start: this.start + delta,\n end: this.end + delta\n });\n }\n\n /**\n * @example\n * onResize(-5, 'start') // Moves the start point 5 seconds back\n * onResize(0.5, 'end') // Moves the end point 0.5 seconds forward\n *\n * @param {number} delta How much to add or subtract, given in seconds\n * @param {string} direction 'start 'or 'end'\n */\n onResize(delta, direction) {\n const duration = this.wavesurfer.getDuration();\n if (direction === 'start') {\n // Check if changing the start by the given delta would result in the region being smaller than minLength\n // Ignore cases where we are making the region wider rather than shrinking it\n if (delta > 0 && this.end - (this.start + delta) < this.minLength) {\n delta = this.end - this.minLength - this.start;\n }\n\n if (delta < 0 && (this.start + delta) < 0) {\n delta = this.start * -1;\n }\n\n this.update({\n start: Math.min(this.start + delta, this.end),\n end: Math.max(this.start + delta, this.end)\n });\n } else {\n // Check if changing the end by the given delta would result in the region being smaller than minLength\n // Ignore cases where we are making the region wider rather than shrinking it\n if (delta < 0 && this.end + delta - this.start < this.minLength) {\n delta = this.start + this.minLength - this.end;\n }\n\n if (delta > 0 && (this.end + delta) > duration) {\n delta = duration - this.end;\n }\n\n this.update({\n start: Math.min(this.end + delta, this.start),\n end: Math.max(this.end + delta, this.start)\n });\n }\n }\n\n updateHandlesResize(resize) {\n let cursorStyle;\n if (resize) {\n cursorStyle = this.vertical ? 'row-resize' : 'col-resize';\n } else {\n cursorStyle = 'auto';\n }\n\n this.handleLeftEl && this.style(this.handleLeftEl, { cursor: cursorStyle });\n this.handleRightEl && this.style(this.handleRightEl, { cursor: cursorStyle });\n }\n}\n","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId](module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","// startup\n// Load entry module and return exports\n// This entry module is referenced by other modules so it can't be inlined\nvar __webpack_exports__ = __webpack_require__(\"./src/plugin/regions/index.js\");\n"],"sourceRoot":""}
1
+ {"version":3,"file":"wavesurfer.regions.js","mappings":"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","sources":["webpack://WaveSurfer.[name]/webpack/universalModuleDefinition","webpack://WaveSurfer.[name]/./src/plugin/regions/index.js","webpack://WaveSurfer.[name]/./src/plugin/regions/region.js","webpack://WaveSurfer.[name]/webpack/bootstrap","webpack://WaveSurfer.[name]/webpack/before-startup","webpack://WaveSurfer.[name]/webpack/startup","webpack://WaveSurfer.[name]/webpack/after-startup"],"sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine(\"WaveSurfer\", [], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"WaveSurfer\"] = factory();\n\telse\n\t\troot[\"WaveSurfer\"] = root[\"WaveSurfer\"] || {}, root[\"WaveSurfer\"][\"regions\"] = factory();\n})(self, function() {\nreturn ","/**\n * @since 4.0.0 This class has been split\n *\n * @typedef {Object} RegionsPluginParams\n * @property {?boolean} dragSelection Enable creating regions by dragging with\n * the mouse\n * @property {?RegionParams[]} regions Regions that should be added upon\n * initialisation\n * @property {number} slop=2 The sensitivity of the mouse dragging\n * @property {?number} snapToGridInterval Snap the regions to a grid of the specified multiples in seconds\n * @property {?number} snapToGridOffset Shift the snap-to-grid by the specified seconds. May also be negative.\n * @property {?boolean} deferInit Set to true to manually call\n * @property {number} maxRegions Maximum number of regions that may be created by the user at one time.\n * `initPlugin('regions')`\n * @property {function} formatTimeCallback Allows custom formating for region tooltip.\n * @property {?number} edgeScrollWidth='5% from container edges' Optional width for edgeScroll to start\n */\n\n/**\n * @typedef {Object} RegionParams\n * @desc The parameters used to describe a region.\n * @example wavesurfer.addRegion(regionParams);\n * @property {string} id=→random The id of the region\n * @property {number} start=0 The start position of the region (in seconds).\n * @property {number} end=0 The end position of the region (in seconds).\n * @property {?boolean} loop Whether to loop the region when played back.\n * @property {boolean} drag=true Allow/disallow dragging the region.\n * @property {boolean} resize=true Allow/disallow resizing the region.\n * @property {string} [color='rgba(0, 0, 0, 0.1)'] HTML color code.\n * @property {?number} channelIdx Select channel to draw the region on (if there are multiple channel waveforms).\n * @property {?object} handleStyle A set of CSS properties used to style the left and right handle.\n * @property {?boolean} preventContextMenu=false Determines whether the context menu is prevented from being opened.\n * @property {boolean} showTooltip=true Enable/disable tooltip displaying start and end times when hovering over region.\n */\n\nimport {Region} from \"./region.js\";\n\n/**\n * Regions are visual overlays on waveform that can be used to play and loop\n * portions of audio. Regions can be dragged and resized.\n *\n * Visual customization is possible via CSS (using the selectors\n * `.wavesurfer-region` and `.wavesurfer-handle`).\n *\n * @implements {PluginClass}\n * @extends {Observer}\n *\n * @example\n * // es6\n * import RegionsPlugin from 'wavesurfer.regions.js';\n *\n * // commonjs\n * var RegionsPlugin = require('wavesurfer.regions.js');\n *\n * // if you are using <script> tags\n * var RegionsPlugin = window.WaveSurfer.regions;\n *\n * // ... initialising wavesurfer with the plugin\n * var wavesurfer = WaveSurfer.create({\n * // wavesurfer options ...\n * plugins: [\n * RegionsPlugin.create({\n * // plugin options ...\n * })\n * ]\n * });\n */\nexport default class RegionsPlugin {\n /**\n * Regions plugin definition factory\n *\n * This function must be used to create a plugin definition which can be\n * used by wavesurfer to correctly instantiate the plugin.\n *\n * @param {RegionsPluginParams} params parameters use to initialise the plugin\n * @return {PluginDefinition} an object representing the plugin\n */\n static create(params) {\n return {\n name: 'regions',\n deferInit: params && params.deferInit ? params.deferInit : false,\n params: params,\n staticProps: {\n addRegion(options) {\n if (!this.initialisedPluginList.regions) {\n this.initPlugin('regions');\n }\n return this.regions.add(options);\n },\n\n clearRegions() {\n this.regions && this.regions.clear();\n },\n\n enableDragSelection(options) {\n if (!this.initialisedPluginList.regions) {\n this.initPlugin('regions');\n }\n this.regions.enableDragSelection(options);\n },\n\n disableDragSelection() {\n this.regions.disableDragSelection();\n }\n },\n instance: RegionsPlugin\n };\n }\n\n constructor(params, ws) {\n this.params = params;\n this.wavesurfer = ws;\n this.util = {\n ...ws.util,\n getRegionSnapToGridValue: value => {\n return this.getRegionSnapToGridValue(value, params);\n }\n };\n this.maxRegions = params.maxRegions;\n this.regionsMinLength = params.regionsMinLength || null;\n\n // turn the plugin instance into an observer\n const observerPrototypeKeys = Object.getOwnPropertyNames(\n this.util.Observer.prototype\n );\n observerPrototypeKeys.forEach(key => {\n Region.prototype[key] = this.util.Observer.prototype[key];\n });\n this.wavesurfer.Region = Region;\n\n // By default, scroll the container if the user drags a region\n // within 5% (based on its initial size) of its edge\n const scrollWidthProportion = 0.05;\n this._onBackendCreated = () => {\n this.wrapper = this.wavesurfer.drawer.wrapper;\n this.orientation = this.wavesurfer.drawer.orientation;\n this.defaultEdgeScrollWidth = this.wrapper.clientWidth * scrollWidthProportion;\n if (this.params.regions) {\n this.params.regions.forEach(region => {\n this.add(region);\n });\n }\n };\n\n // Id-based hash of regions\n this.list = {};\n this._onReady = () => {\n this.wrapper = this.wavesurfer.drawer.wrapper;\n this.vertical = this.wavesurfer.drawer.params.vertical;\n if (this.params.dragSelection) {\n this.enableDragSelection(this.params);\n }\n Object.keys(this.list).forEach(id => {\n this.list[id].updateRender();\n });\n };\n }\n\n init() {\n // Check if ws is ready\n if (this.wavesurfer.isReady) {\n this._onBackendCreated();\n this._onReady();\n } else {\n this.wavesurfer.once('ready', this._onReady);\n this.wavesurfer.once('backend-created', this._onBackendCreated);\n }\n }\n\n destroy() {\n this.wavesurfer.un('ready', this._onReady);\n this.wavesurfer.un('backend-created', this._onBackendCreated);\n // Disabling `region-removed' because destroying the plugin calls\n // the Region.remove() method that is also used to remove regions based\n // on user input. This can cause confusion since teardown is not a\n // user event, but would emit `region-removed` as if it was.\n this.wavesurfer.setDisabledEventEmissions(['region-removed']);\n this.disableDragSelection();\n this.clear();\n }\n\n /**\n * check to see if adding a new region would exceed maxRegions\n * @return {boolean} whether we should proceed and create a region\n * @private\n */\n wouldExceedMaxRegions() {\n return (\n this.maxRegions && Object.keys(this.list).length >= this.maxRegions\n );\n }\n\n /**\n * Add a region\n *\n * @param {object} params Region parameters\n * @return {Region} The created region\n */\n add(params) {\n if (this.wouldExceedMaxRegions()) {\n return null;\n }\n\n params = {\n edgeScrollWidth: this.params.edgeScrollWidth || this.defaultEdgeScrollWidth,\n ...params\n };\n\n // Take formatTimeCallback from plugin params if not already set\n if (!params.formatTimeCallback && this.params.formatTimeCallback) {\n params = {...params, formatTimeCallback: this.params.formatTimeCallback};\n }\n\n if (!params.minLength && this.regionsMinLength) {\n params = {...params, minLength: this.regionsMinLength};\n }\n\n const region = new this.wavesurfer.Region(params, this.util, this.wavesurfer);\n\n this.list[region.id] = region;\n\n region.on('remove', () => {\n delete this.list[region.id];\n });\n\n return region;\n }\n\n /**\n * Remove all regions\n */\n clear() {\n Object.keys(this.list).forEach(id => {\n this.list[id].remove();\n });\n }\n\n enableDragSelection(params) {\n this.disableDragSelection();\n\n const slop = params.slop || 2;\n const container = this.wavesurfer.drawer.container;\n const scroll =\n params.scroll !== false && this.wavesurfer.params.scrollParent;\n const scrollSpeed = params.scrollSpeed || 1;\n const scrollThreshold = params.scrollThreshold || 10;\n let drag;\n let duration = this.wavesurfer.getDuration();\n let maxScroll;\n let start;\n let region;\n let touchId;\n let pxMove = 0;\n let scrollDirection;\n let wrapperRect;\n\n // Scroll when the user is dragging within the threshold\n const edgeScroll = e => {\n if (!region || !scrollDirection) {\n return;\n }\n\n // Update scroll position\n let scrollLeft =\n this.wrapper.scrollLeft + scrollSpeed * scrollDirection;\n this.wrapper.scrollLeft = scrollLeft = Math.min(\n maxScroll,\n Math.max(0, scrollLeft)\n );\n\n // Update range\n const end = this.wavesurfer.drawer.handleEvent(e);\n region.update({\n start: Math.min(end * duration, start * duration),\n end: Math.max(end * duration, start * duration)\n });\n\n // Check that there is more to scroll and repeat\n if (scrollLeft < maxScroll && scrollLeft > 0) {\n window.requestAnimationFrame(() => {\n edgeScroll(e);\n });\n }\n };\n\n const eventDown = e => {\n if (e.touches && e.touches.length > 1) {\n return;\n }\n duration = this.wavesurfer.getDuration();\n touchId = e.targetTouches ? e.targetTouches[0].identifier : null;\n\n // Store for scroll calculations\n maxScroll = this.wrapper.scrollWidth -\n this.wrapper.clientWidth;\n wrapperRect = this.util.withOrientation(\n this.wrapper.getBoundingClientRect(),\n this.vertical\n );\n\n // set the region channel index based on the clicked area\n if (this.wavesurfer.params.splitChannels) {\n const y = (e.touches ? e.touches[0].clientY : e.clientY) - wrapperRect.top;\n const channelCount = this.wavesurfer.backend.buffer != null ? this.wavesurfer.backend.buffer.numberOfChannels : 1;\n const channelHeight = this.wrapper.clientHeight / channelCount;\n const channelIdx = Math.floor(y / channelHeight);\n params.channelIdx = channelIdx;\n const channelColors = this.wavesurfer.params.splitChannelsOptions.channelColors[channelIdx];\n if (channelColors && channelColors.dragColor) {\n params.color = channelColors.dragColor;\n }\n }\n\n drag = true;\n start = this.wavesurfer.drawer.handleEvent(e, true);\n region = null;\n scrollDirection = null;\n };\n this.wrapper.addEventListener('mousedown', eventDown);\n this.wrapper.addEventListener('touchstart', eventDown);\n this.on('disable-drag-selection', () => {\n this.wrapper.removeEventListener('touchstart', eventDown);\n this.wrapper.removeEventListener('mousedown', eventDown);\n });\n\n const eventUp = e => {\n if (e.touches && e.touches.length > 1) {\n return;\n }\n\n drag = false;\n pxMove = 0;\n scrollDirection = null;\n\n if (region) {\n this.util.preventClick();\n region.fireEvent('update-end', e);\n this.wavesurfer.fireEvent('region-update-end', region, e);\n }\n\n region = null;\n };\n this.wrapper.addEventListener('mouseleave', eventUp);\n this.wrapper.addEventListener('mouseup', eventUp);\n this.wrapper.addEventListener('touchend', eventUp);\n\n document.body.addEventListener('mouseup', eventUp);\n document.body.addEventListener('touchend', eventUp);\n this.on('disable-drag-selection', () => {\n document.body.removeEventListener('mouseup', eventUp);\n document.body.removeEventListener('touchend', eventUp);\n this.wrapper.removeEventListener('touchend', eventUp);\n this.wrapper.removeEventListener('mouseup', eventUp);\n this.wrapper.removeEventListener('mouseleave', eventUp);\n });\n\n const eventMove = event => {\n if (!drag) {\n return;\n }\n if (++pxMove <= slop) {\n return;\n }\n\n if (event.touches && event.touches.length > 1) {\n return;\n }\n if (event.targetTouches && event.targetTouches[0].identifier != touchId) {\n return;\n }\n\n // auto-create a region during mouse drag, unless region-count would exceed \"maxRegions\"\n if (!region) {\n region = this.add(params || {});\n if (!region) {\n return;\n }\n }\n\n const end = this.wavesurfer.drawer.handleEvent(event);\n const startUpdate = this.wavesurfer.regions.util.getRegionSnapToGridValue(\n start * duration\n );\n const endUpdate = this.wavesurfer.regions.util.getRegionSnapToGridValue(\n end * duration\n );\n region.update({\n start: Math.min(endUpdate, startUpdate),\n end: Math.max(endUpdate, startUpdate)\n });\n\n let orientedEvent = this.util.withOrientation(event, this.vertical);\n\n // If scrolling is enabled\n if (scroll && container.clientWidth < this.wrapper.scrollWidth) {\n // Check threshold based on mouse\n const x = orientedEvent.clientX - wrapperRect.left;\n if (x <= scrollThreshold) {\n scrollDirection = -1;\n } else if (x >= wrapperRect.right - scrollThreshold) {\n scrollDirection = 1;\n } else {\n scrollDirection = null;\n }\n scrollDirection && edgeScroll(event);\n }\n };\n this.wrapper.addEventListener('mousemove', eventMove);\n this.wrapper.addEventListener('touchmove', eventMove);\n this.on('disable-drag-selection', () => {\n this.wrapper.removeEventListener('touchmove', eventMove);\n this.wrapper.removeEventListener('mousemove', eventMove);\n });\n\n this.wavesurfer.on('region-created', region => {\n if (this.regionsMinLength) {\n region.minLength = this.regionsMinLength;\n }\n });\n }\n\n disableDragSelection() {\n this.fireEvent('disable-drag-selection');\n }\n\n /**\n * Get current region\n *\n * The smallest region that contains the current time. If several such\n * regions exist, take the first. Return `null` if none exist.\n *\n * @returns {Region} The current region\n */\n getCurrentRegion() {\n const time = this.wavesurfer.getCurrentTime();\n let min = null;\n Object.keys(this.list).forEach(id => {\n const cur = this.list[id];\n if (cur.start <= time && cur.end >= time) {\n if (!min || cur.end - cur.start < min.end - min.start) {\n min = cur;\n }\n }\n });\n\n return min;\n }\n\n /**\n * Match the value to the grid, if required\n *\n * If the regions plugin params have a snapToGridInterval set, return the\n * value matching the nearest grid interval. If no snapToGridInterval is set,\n * the passed value will be returned without modification.\n *\n * @param {number} value the value to snap to the grid, if needed\n * @param {Object} params the regions plugin params\n * @returns {number} value\n */\n getRegionSnapToGridValue(value, params) {\n if (params.snapToGridInterval) {\n // the regions should snap to a grid\n const offset = params.snapToGridOffset || 0;\n return (\n Math.round((value - offset) / params.snapToGridInterval) *\n params.snapToGridInterval +\n offset\n );\n }\n\n // no snap-to-grid\n return value;\n }\n}\n","/**\n * @since 4.0.0\n *\n * (Single) Region plugin class\n *\n * Must be turned into an observer before instantiating. This is done in\n * `RegionsPlugin` (main plugin class).\n *\n * @extends {Observer}\n */\nexport class Region {\n constructor(params, regionsUtils, ws) {\n this.wavesurfer = ws;\n this.wrapper = ws.drawer.wrapper;\n this.util = ws.util;\n this.style = this.util.style;\n this.regionsUtil = regionsUtils;\n this.vertical = ws.drawer.params.vertical;\n\n this.id = params.id == null ? ws.util.getId() : params.id;\n this.start = Number(params.start) || 0;\n this.end =\n params.end == null\n ? // small marker-like region\n this.start +\n (4 / this.wrapper.scrollWidth) * this.wavesurfer.getDuration()\n : Number(params.end);\n this.resize =\n params.resize === undefined ? true : Boolean(params.resize);\n this.drag = params.drag === undefined ? true : Boolean(params.drag);\n // reflect resize and drag state of region for region-updated listener\n this.isResizing = false;\n this.isDragging = false;\n this.loop = Boolean(params.loop);\n this.color = params.color || 'rgba(0, 0, 0, 0.1)';\n // The left and right handleStyle properties can be set to 'none' for\n // no styling or can be assigned an object containing CSS properties.\n this.handleStyle = params.handleStyle || {\n left: {},\n right: {}\n };\n this.handleLeftEl = null;\n this.handleRightEl = null;\n this.data = params.data || {};\n this.attributes = params.attributes || {};\n this.showTooltip = params.showTooltip ?? true;\n\n this.maxLength = params.maxLength;\n // It assumes the minLength parameter value, or the regionsMinLength parameter value, if the first one not provided\n this.minLength = params.minLength;\n this._onRedraw = () => this.updateRender();\n\n this.scroll = params.scroll !== false && ws.params.scrollParent;\n this.scrollSpeed = params.scrollSpeed || 1;\n this.scrollThreshold = params.scrollThreshold || 10;\n // Determines whether the context menu is prevented from being opened.\n this.preventContextMenu =\n params.preventContextMenu === undefined\n ? false\n : Boolean(params.preventContextMenu);\n\n // select channel ID to set region\n let channelIdx =\n params.channelIdx == null ? -1 : parseInt(params.channelIdx);\n this.channelIdx = channelIdx;\n this.regionHeight = '100%';\n this.marginTop = '0px';\n\n if (channelIdx !== -1) {\n let channelCount =\n this.wavesurfer.backend.buffer != null\n ? this.wavesurfer.backend.buffer.numberOfChannels\n : -1;\n if (channelCount >= 0 && channelIdx < channelCount) {\n this.regionHeight = Math.floor((1 / channelCount) * 100) + '%';\n this.marginTop =\n this.wavesurfer.getHeight() * channelIdx + 'px';\n }\n }\n\n this.formatTimeCallback = params.formatTimeCallback;\n this.edgeScrollWidth = params.edgeScrollWidth;\n this.bindInOut();\n this.render();\n this.wavesurfer.on('zoom', this._onRedraw);\n this.wavesurfer.on('redraw', this._onRedraw);\n this.wavesurfer.fireEvent('region-created', this);\n }\n\n /* Update region params. */\n update(params, eventParams) {\n if (params.start != null) {\n this.start = Number(params.start);\n }\n if (params.end != null) {\n this.end = Number(params.end);\n }\n if (params.loop != null) {\n this.loop = Boolean(params.loop);\n }\n if (params.color != null) {\n this.color = params.color;\n }\n if (params.handleStyle != null) {\n this.handleStyle = params.handleStyle;\n }\n if (params.data != null) {\n this.data = params.data;\n }\n if (params.resize != null) {\n this.resize = Boolean(params.resize);\n this.updateHandlesResize(this.resize);\n }\n if (params.drag != null) {\n this.drag = Boolean(params.drag);\n }\n if (params.maxLength != null) {\n this.maxLength = Number(params.maxLength);\n }\n if (params.minLength != null) {\n this.minLength = Number(params.minLength);\n }\n if (params.attributes != null) {\n this.attributes = params.attributes;\n }\n\n this.updateRender();\n this.fireEvent('update');\n this.wavesurfer.fireEvent('region-updated', this, eventParams);\n }\n\n /* Remove a single region. */\n remove() {\n if (this.element) {\n this.wrapper.removeChild(this.element.domElement);\n this.element = null;\n this.fireEvent('remove');\n this.wavesurfer.un('zoom', this._onRedraw);\n this.wavesurfer.un('redraw', this._onRedraw);\n this.wavesurfer.fireEvent('region-removed', this);\n }\n }\n\n /**\n * Play the audio region.\n * @param {number} start Optional offset to start playing at\n */\n play(start) {\n const s = start || this.start;\n this.wavesurfer.play(s, this.end);\n this.fireEvent('play');\n this.wavesurfer.fireEvent('region-play', this);\n }\n\n /**\n * Play the audio region in a loop.\n * @param {number} start Optional offset to start playing at\n * */\n playLoop(start) {\n this.loop = true;\n this.play(start);\n }\n\n /**\n * Set looping on/off.\n * @param {boolean} loop True if should play in loop\n */\n setLoop(loop) {\n this.loop = loop;\n }\n\n /* Render a region as a DOM element. */\n render() {\n this.element = this.util.withOrientation(\n this.wrapper.appendChild(document.createElement('region')),\n this.vertical\n );\n\n this.element.className = 'wavesurfer-region';\n if (this.showTooltip) {\n this.element.title = this.formatTime(this.start, this.end);\n }\n this.element.setAttribute('data-id', this.id);\n\n for (const attrname in this.attributes) {\n this.element.setAttribute(\n 'data-region-' + attrname,\n this.attributes[attrname]\n );\n }\n\n this.style(this.element, {\n position: 'absolute',\n zIndex: 3,\n height: this.regionHeight,\n top: this.marginTop\n });\n\n /* Resize handles */\n if (this.resize) {\n this.handleLeftEl = this.util.withOrientation(\n this.element.appendChild(document.createElement('handle')),\n this.vertical\n );\n this.handleRightEl = this.util.withOrientation(\n this.element.appendChild(document.createElement('handle')),\n this.vertical\n );\n\n this.handleLeftEl.className = 'wavesurfer-handle wavesurfer-handle-start';\n this.handleRightEl.className = 'wavesurfer-handle wavesurfer-handle-end';\n\n // Default CSS properties for both handles.\n const css = {\n cursor: this.vertical ? 'row-resize' : 'col-resize',\n position: 'absolute',\n top: '0px',\n width: '2px',\n height: '100%',\n backgroundColor: 'rgba(0, 0, 0, 1)'\n };\n\n // Merge CSS properties per handle.\n const handleLeftCss =\n this.handleStyle.left !== 'none'\n ? Object.assign(\n { left: '0px' },\n css,\n this.handleStyle.left\n )\n : null;\n const handleRightCss =\n this.handleStyle.right !== 'none'\n ? Object.assign(\n { right: '0px' },\n css,\n this.handleStyle.right\n )\n : null;\n\n if (handleLeftCss) {\n this.style(this.handleLeftEl, handleLeftCss);\n }\n\n if (handleRightCss) {\n this.style(this.handleRightEl, handleRightCss);\n }\n }\n\n this.updateRender();\n this.bindEvents();\n }\n\n formatTime(start, end) {\n if (this.formatTimeCallback) {\n return this.formatTimeCallback(start, end);\n }\n return (start == end ? [start] : [start, end])\n .map((time) =>\n [\n Math.floor((time % 3600) / 60), // minutes\n ('00' + Math.floor(time % 60)).slice(-2) // seconds\n ].join(':')\n )\n .join('-');\n }\n\n getWidth() {\n return this.wavesurfer.drawer.width / this.wavesurfer.params.pixelRatio;\n }\n\n /* Update element's position, width, color. */\n updateRender() {\n // duration varies during loading process, so don't overwrite important data\n const dur = this.wavesurfer.getDuration();\n const width = this.getWidth();\n\n let startLimited = this.start;\n let endLimited = this.end;\n if (startLimited < 0) {\n startLimited = 0;\n endLimited = endLimited - startLimited;\n }\n if (endLimited > dur) {\n endLimited = dur;\n startLimited = dur - (endLimited - startLimited);\n }\n\n if (this.minLength != null) {\n endLimited = Math.max(startLimited + this.minLength, endLimited);\n }\n\n if (this.maxLength != null) {\n endLimited = Math.min(startLimited + this.maxLength, endLimited);\n }\n\n if (this.element != null) {\n // Calculate the left and width values of the region such that\n // no gaps appear between regions.\n const left = Math.round((startLimited / dur) * width);\n const regionWidth = Math.round((endLimited / dur) * width) - left;\n\n this.style(this.element, {\n left: left + 'px',\n width: regionWidth + 'px',\n backgroundColor: this.color,\n cursor: this.drag ? 'move' : 'default'\n });\n\n for (const attrname in this.attributes) {\n this.element.setAttribute(\n 'data-region-' + attrname,\n this.attributes[attrname]\n );\n }\n\n if (this.showTooltip) {\n this.element.title = this.formatTime(this.start, this.end);\n }\n }\n }\n\n /* Bind audio events. */\n bindInOut() {\n this.firedIn = false;\n this.firedOut = false;\n\n const onProcess = (time) => {\n let start = Math.round(this.start * 10) / 10;\n let end = Math.round(this.end * 10) / 10;\n time = Math.round(time * 10) / 10;\n\n if (\n !this.firedOut &&\n this.firedIn &&\n (start > time || end <= time)\n ) {\n this.firedOut = true;\n this.firedIn = false;\n this.fireEvent('out');\n this.wavesurfer.fireEvent('region-out', this);\n }\n if (!this.firedIn && start <= time && end > time) {\n this.firedIn = true;\n this.firedOut = false;\n this.fireEvent('in');\n this.wavesurfer.fireEvent('region-in', this);\n }\n };\n\n this.wavesurfer.backend.on('audioprocess', onProcess);\n\n this.on('remove', () => {\n this.wavesurfer.backend.un('audioprocess', onProcess);\n });\n\n /* Loop playback. */\n this.on('out', () => {\n if (this.loop) {\n const realTime = this.wavesurfer.getCurrentTime();\n if (realTime >= this.start && realTime <= this.end) {\n this.wavesurfer.play(this.start);\n }\n }\n });\n }\n\n /* Bind DOM events. */\n bindEvents() {\n const preventContextMenu = this.preventContextMenu;\n\n this.element.addEventListener('mouseenter', (e) => {\n this.fireEvent('mouseenter', e);\n this.wavesurfer.fireEvent('region-mouseenter', this, e);\n });\n\n this.element.addEventListener('mouseleave', (e) => {\n this.fireEvent('mouseleave', e);\n this.wavesurfer.fireEvent('region-mouseleave', this, e);\n });\n\n this.element.addEventListener('click', (e) => {\n e.preventDefault();\n this.fireEvent('click', e);\n this.wavesurfer.fireEvent('region-click', this, e);\n });\n\n this.element.addEventListener('dblclick', (e) => {\n e.stopPropagation();\n e.preventDefault();\n this.fireEvent('dblclick', e);\n this.wavesurfer.fireEvent('region-dblclick', this, e);\n });\n\n this.element.addEventListener('contextmenu', (e) => {\n if (preventContextMenu) {\n e.preventDefault();\n }\n this.fireEvent('contextmenu', e);\n this.wavesurfer.fireEvent('region-contextmenu', this, e);\n });\n\n /* Drag or resize on mousemove. */\n if (this.drag || this.resize) {\n this.bindDragEvents();\n }\n }\n\n bindDragEvents() {\n const container = this.wavesurfer.drawer.container;\n const scrollSpeed = this.scrollSpeed;\n const scrollThreshold = this.scrollThreshold;\n let startTime;\n let touchId;\n let drag;\n let maxScroll;\n let resize;\n let updated = false;\n let scrollDirection;\n let wrapperRect;\n let regionLeftHalfTime;\n let regionRightHalfTime;\n\n // Scroll when the user is dragging within the threshold\n const edgeScroll = (event) => {\n let orientedEvent = this.util.withOrientation(event, this.vertical);\n const duration = this.wavesurfer.getDuration();\n if (!scrollDirection || (!drag && !resize)) {\n return;\n }\n\n const x = orientedEvent.clientX;\n let distanceBetweenCursorAndWrapperEdge = 0;\n let regionHalfTimeWidth = 0;\n let adjustment = 0;\n\n // Get the currently selected time according to the mouse position\n let time = this.regionsUtil.getRegionSnapToGridValue(\n this.wavesurfer.drawer.handleEvent(event) * duration\n );\n\n if (drag) {\n // Considering the point of contact with the region while edgescrolling\n if (scrollDirection === -1) {\n regionHalfTimeWidth = regionLeftHalfTime * this.wavesurfer.params.minPxPerSec;\n distanceBetweenCursorAndWrapperEdge = x - wrapperRect.left;\n } else {\n regionHalfTimeWidth = regionRightHalfTime * this.wavesurfer.params.minPxPerSec;\n distanceBetweenCursorAndWrapperEdge = wrapperRect.right - x;\n }\n } else {\n // Considering minLength while edgescroll\n let minLength = this.minLength;\n if (!minLength) {\n minLength = 0;\n }\n\n if (resize === 'start') {\n if (time > this.end - minLength) {\n time = this.end - minLength;\n adjustment = scrollSpeed * scrollDirection;\n }\n\n if (time < 0) {\n time = 0;\n }\n } else if (resize === 'end') {\n if (time < this.start + minLength) {\n time = this.start + minLength;\n adjustment = scrollSpeed * scrollDirection;\n }\n\n if (time > duration) {\n time = duration;\n }\n }\n }\n\n // Don't edgescroll if region has reached min or max limit\n const wrapperScrollLeft = this.wrapper.scrollLeft;\n\n if (scrollDirection === -1) {\n if (Math.round(wrapperScrollLeft) === 0) {\n return;\n }\n\n if (Math.round(wrapperScrollLeft - regionHalfTimeWidth + distanceBetweenCursorAndWrapperEdge) <= 0) {\n return;\n }\n } else {\n if (Math.round(wrapperScrollLeft) === maxScroll) {\n return;\n }\n\n if (Math.round(wrapperScrollLeft + regionHalfTimeWidth - distanceBetweenCursorAndWrapperEdge) >= maxScroll) {\n return;\n }\n }\n\n // Update scroll position\n let scrollLeft = wrapperScrollLeft - adjustment + scrollSpeed * scrollDirection;\n\n if (scrollDirection === -1) {\n const calculatedLeft = Math.max(0 + regionHalfTimeWidth - distanceBetweenCursorAndWrapperEdge, scrollLeft);\n this.wrapper.scrollLeft = scrollLeft = calculatedLeft;\n } else {\n const calculatedRight = Math.min(maxScroll - regionHalfTimeWidth + distanceBetweenCursorAndWrapperEdge, scrollLeft);\n this.wrapper.scrollLeft = scrollLeft = calculatedRight;\n }\n\n const delta = time - startTime;\n startTime = time;\n\n // Continue dragging or resizing\n drag ? this.onDrag(delta) : this.onResize(delta, resize);\n\n // Repeat\n window.requestAnimationFrame(() => {\n edgeScroll(event);\n });\n };\n\n const onDown = (event) => {\n const duration = this.wavesurfer.getDuration();\n if (event.touches && event.touches.length > 1) {\n return;\n }\n touchId = event.targetTouches ? event.targetTouches[0].identifier : null;\n\n // stop the event propagation, if this region is resizable or draggable\n // and the event is therefore handled here.\n if (this.drag || this.resize) {\n event.stopPropagation();\n }\n\n // Store the selected startTime we begun dragging or resizing\n startTime = this.regionsUtil.getRegionSnapToGridValue(\n this.wavesurfer.drawer.handleEvent(event, true) * duration\n );\n\n // Store the selected point of contact when we begin dragging\n regionLeftHalfTime = startTime - this.start;\n regionRightHalfTime = this.end - startTime;\n\n // Store for scroll calculations\n maxScroll = this.wrapper.scrollWidth - this.wrapper.clientWidth;\n\n wrapperRect = this.util.withOrientation(\n this.wrapper.getBoundingClientRect(),\n this.vertical\n );\n\n this.isResizing = false;\n this.isDragging = false;\n if (event.target.tagName.toLowerCase() === 'handle') {\n this.isResizing = true;\n resize = event.target.classList.contains('wavesurfer-handle-start')\n ? 'start'\n : 'end';\n } else {\n this.isDragging = true;\n drag = true;\n resize = false;\n }\n };\n const onUp = (event) => {\n if (event.touches && event.touches.length > 1) {\n return;\n }\n\n if (drag || resize) {\n this.isDragging = false;\n this.isResizing = false;\n drag = false;\n scrollDirection = null;\n resize = false;\n }\n\n if (updated) {\n updated = false;\n this.util.preventClick();\n this.fireEvent('update-end', event);\n this.wavesurfer.fireEvent('region-update-end', this, event);\n }\n };\n const onMove = (event) => {\n const duration = this.wavesurfer.getDuration();\n let orientedEvent = this.util.withOrientation(event, this.vertical);\n\n if (event.touches && event.touches.length > 1) {\n return;\n }\n if (event.targetTouches && event.targetTouches[0].identifier != touchId) {\n return;\n }\n if (!drag && !resize) {\n return;\n }\n\n const oldTime = startTime;\n let time = this.regionsUtil.getRegionSnapToGridValue(\n this.wavesurfer.drawer.handleEvent(event) * duration\n );\n\n if (drag) {\n // To maintain relative cursor start point while dragging\n const maxEnd = this.wavesurfer.getDuration();\n if (time > maxEnd - regionRightHalfTime) {\n time = maxEnd - regionRightHalfTime;\n }\n\n if (time - regionLeftHalfTime < 0) {\n time = regionLeftHalfTime;\n }\n }\n\n if (resize) {\n // To maintain relative cursor start point while resizing\n // we have to handle for minLength\n let minLength = this.minLength;\n if (!minLength) {\n minLength = 0;\n }\n\n if (resize === 'start') {\n if (time > this.end - minLength) {\n time = this.end - minLength;\n }\n\n if (time < 0) {\n time = 0;\n }\n } else if (resize === 'end') {\n if (time < this.start + minLength) {\n time = this.start + minLength;\n }\n\n if (time > duration) {\n time = duration;\n }\n }\n }\n\n let delta = time - startTime;\n startTime = time;\n\n // Drag\n if (this.drag && drag) {\n updated = updated || !!delta;\n this.onDrag(delta);\n }\n\n // Resize\n if (this.resize && resize) {\n updated = updated || !!delta;\n this.onResize(delta, resize);\n }\n\n if (\n this.scroll && container.clientWidth < this.wrapper.scrollWidth\n ) {\n // Triggering edgescroll from within edgeScrollWidth\n let x = orientedEvent.clientX;\n\n // Check direction\n if (x < wrapperRect.left + this.edgeScrollWidth) {\n scrollDirection = -1;\n } else if (x > wrapperRect.right - this.edgeScrollWidth) {\n scrollDirection = 1;\n } else {\n scrollDirection = null;\n }\n\n if (scrollDirection) {\n edgeScroll(event);\n }\n }\n };\n\n this.element.addEventListener('mousedown', onDown);\n this.element.addEventListener('touchstart', onDown);\n\n document.body.addEventListener('mousemove', onMove);\n document.body.addEventListener('touchmove', onMove, {passive: false});\n\n document.addEventListener('mouseup', onUp);\n document.body.addEventListener('touchend', onUp);\n\n this.on('remove', () => {\n document.removeEventListener('mouseup', onUp);\n document.body.removeEventListener('touchend', onUp);\n document.body.removeEventListener('mousemove', onMove);\n document.body.removeEventListener('touchmove', onMove);\n });\n\n this.wavesurfer.on('destroy', () => {\n document.removeEventListener('mouseup', onUp);\n document.body.removeEventListener('touchend', onUp);\n });\n }\n\n onDrag(delta) {\n const maxEnd = this.wavesurfer.getDuration();\n if (this.end + delta > maxEnd) {\n delta = maxEnd - this.end;\n }\n\n if (this.start + delta < 0) {\n delta = this.start * -1;\n }\n\n const eventParams = {\n direction: this._getDragDirection(delta),\n action: 'drag'\n };\n\n this.update({\n start: this.start + delta,\n end: this.end + delta\n }, eventParams);\n }\n\n /**\n * Returns the direction of dragging region based on delta\n * Negative delta means region is moving to the left\n * Positive - to the right\n * For zero delta the direction is not defined\n * @param {number} delta Drag offset\n * @returns {string|null} Direction 'left', 'right' or null\n */\n _getDragDirection(delta) {\n if (delta < 0) {\n return 'left';\n }\n if (delta > 0) {\n return 'right';\n }\n return null;\n }\n\n /**\n * @example\n * onResize(-5, 'start') // Moves the start point 5 seconds back\n * onResize(0.5, 'end') // Moves the end point 0.5 seconds forward\n *\n * @param {number} delta How much to add or subtract, given in seconds\n * @param {string} direction 'start 'or 'end'\n */\n onResize(delta, direction) {\n const duration = this.wavesurfer.getDuration();\n const eventParams = {\n action: 'resize',\n direction: direction === 'start' ? 'left' : 'right'\n };\n\n if (direction === 'start') {\n // Check if changing the start by the given delta would result in the region being smaller than minLength\n if (delta > 0 && this.end - (this.start + delta) < this.minLength) {\n delta = this.end - this.minLength - this.start;\n }\n\n // Check if changing the start by the given delta would result in the region being larger than maxLength\n if (delta < 0 && this.end - (this.start + delta) > this.maxLength) {\n delta = this.end - this.start - this.maxLength;\n }\n\n if (delta < 0 && (this.start + delta) < 0) {\n delta = this.start * -1;\n }\n\n this.update({\n start: Math.min(this.start + delta, this.end),\n end: Math.max(this.start + delta, this.end)\n }, eventParams);\n } else {\n // Check if changing the end by the given delta would result in the region being smaller than minLength\n if (delta < 0 && this.end + delta - this.start < this.minLength) {\n delta = this.start + this.minLength - this.end;\n }\n\n // Check if changing the end by the given delta would result in the region being larger than maxLength\n if (delta > 0 && this.end + delta - this.start > this.maxLength) {\n delta = this.maxLength - (this.end - this.start);\n }\n\n if (delta > 0 && (this.end + delta) > duration) {\n delta = duration - this.end;\n }\n\n this.update({\n start: Math.min(this.end + delta, this.start),\n end: Math.max(this.end + delta, this.start)\n }, eventParams);\n }\n }\n\n updateHandlesResize(resize) {\n let cursorStyle;\n if (resize) {\n cursorStyle = this.vertical ? 'row-resize' : 'col-resize';\n } else {\n cursorStyle = 'auto';\n }\n\n this.handleLeftEl && this.style(this.handleLeftEl, { cursor: cursorStyle });\n this.handleRightEl && this.style(this.handleRightEl, { cursor: cursorStyle });\n }\n}\n","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId](module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","","// startup\n// Load entry module and return exports\n// This entry module is referenced by other modules so it can't be inlined\nvar __webpack_exports__ = __webpack_require__(\"./src/plugin/regions/index.js\");\n",""],"names":["RegionsPlugin","params","ws","wavesurfer","util","getRegionSnapToGridValue","value","maxRegions","regionsMinLength","observerPrototypeKeys","Object","getOwnPropertyNames","Observer","prototype","forEach","key","Region","scrollWidthProportion","_onBackendCreated","wrapper","drawer","orientation","defaultEdgeScrollWidth","clientWidth","regions","region","add","list","_onReady","vertical","dragSelection","enableDragSelection","keys","id","updateRender","isReady","once","un","setDisabledEventEmissions","disableDragSelection","clear","length","wouldExceedMaxRegions","edgeScrollWidth","formatTimeCallback","minLength","on","remove","slop","container","scroll","scrollParent","scrollSpeed","scrollThreshold","drag","duration","getDuration","maxScroll","start","touchId","pxMove","scrollDirection","wrapperRect","edgeScroll","e","scrollLeft","Math","min","max","end","handleEvent","update","window","requestAnimationFrame","eventDown","touches","targetTouches","identifier","scrollWidth","withOrientation","getBoundingClientRect","splitChannels","y","clientY","top","channelCount","backend","buffer","numberOfChannels","channelHeight","clientHeight","channelIdx","floor","channelColors","splitChannelsOptions","dragColor","color","addEventListener","removeEventListener","eventUp","preventClick","fireEvent","document","body","eventMove","event","startUpdate","endUpdate","orientedEvent","x","clientX","left","right","time","getCurrentTime","cur","snapToGridInterval","offset","snapToGridOffset","round","name","deferInit","staticProps","addRegion","options","initialisedPluginList","initPlugin","clearRegions","instance","regionsUtils","style","regionsUtil","getId","Number","resize","undefined","Boolean","isResizing","isDragging","loop","handleStyle","handleLeftEl","handleRightEl","data","attributes","showTooltip","maxLength","_onRedraw","preventContextMenu","parseInt","regionHeight","marginTop","getHeight","bindInOut","render","eventParams","updateHandlesResize","element","removeChild","domElement","s","play","appendChild","createElement","className","title","formatTime","setAttribute","attrname","position","zIndex","height","css","cursor","width","backgroundColor","handleLeftCss","assign","handleRightCss","bindEvents","map","slice","join","pixelRatio","dur","getWidth","startLimited","endLimited","regionWidth","firedIn","firedOut","onProcess","realTime","preventDefault","stopPropagation","bindDragEvents","startTime","updated","regionLeftHalfTime","regionRightHalfTime","distanceBetweenCursorAndWrapperEdge","regionHalfTimeWidth","adjustment","minPxPerSec","wrapperScrollLeft","calculatedLeft","calculatedRight","delta","onDrag","onResize","onDown","target","tagName","toLowerCase","classList","contains","onUp","onMove","oldTime","maxEnd","passive","direction","_getDragDirection","action","cursorStyle"],"sourceRoot":""}
@@ -1,7 +1,7 @@
1
1
  /*!
2
- * wavesurfer.js regions plugin 5.1.0 (2021-06-20)
2
+ * wavesurfer.js regions plugin 6.0.2 (2022-02-20)
3
3
  * https://wavesurfer-js.org
4
4
  * @license BSD-3-Clause
5
5
  */
6
- !function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t():"function"==typeof define&&define.amd?define("WaveSurfer",[],t):"object"==typeof exports?exports.WaveSurfer=t():(e.WaveSurfer=e.WaveSurfer||{},e.WaveSurfer.regions=t())}(this,(function(){return(()=>{"use strict";var e={23:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var i=r(638);function n(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);t&&(i=i.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,i)}return r}function s(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?n(Object(r),!0).forEach((function(t){a(e,t,r[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):n(Object(r)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))}))}return e}function a(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function o(e,t){for(var r=0;r<t.length;r++){var i=t[r];i.enumerable=i.enumerable||!1,i.configurable=!0,"value"in i&&(i.writable=!0),Object.defineProperty(e,i.key,i)}}var l=function(){function e(t,r){var n=this;!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),this.params=t,this.wavesurfer=r,this.util=s(s({},r.util),{},{getRegionSnapToGridValue:function(e){return n.getRegionSnapToGridValue(e,t)}}),this.maxRegions=t.maxRegions,this.regionsMinLength=t.regionsMinLength||null,Object.getOwnPropertyNames(this.util.Observer.prototype).forEach((function(e){i.Region.prototype[e]=n.util.Observer.prototype[e]})),this.wavesurfer.Region=i.Region;this._onBackendCreated=function(){n.wrapper=n.wavesurfer.drawer.wrapper,n.orientation=n.wavesurfer.drawer.orientation,n.params.regions&&n.params.regions.forEach((function(e){e.edgeScrollWidth=n.params.edgeScrollWidth||.05*n.wrapper.clientWidth,n.add(e)}))},this.list={},this._onReady=function(){n.wrapper=n.wavesurfer.drawer.wrapper,n.vertical=n.wavesurfer.drawer.params.vertical,n.params.dragSelection&&n.enableDragSelection(n.params),Object.keys(n.list).forEach((function(e){n.list[e].updateRender()}))}}var t,r,n;return t=e,n=[{key:"create",value:function(t){return{name:"regions",deferInit:!(!t||!t.deferInit)&&t.deferInit,params:t,staticProps:{addRegion:function(e){return this.initialisedPluginList.regions||this.initPlugin("regions"),this.regions.add(e)},clearRegions:function(){this.regions&&this.regions.clear()},enableDragSelection:function(e){this.initialisedPluginList.regions||this.initPlugin("regions"),this.regions.enableDragSelection(e)},disableDragSelection:function(){this.regions.disableDragSelection()}},instance:e}}}],(r=[{key:"init",value:function(){this.wavesurfer.isReady?(this._onBackendCreated(),this._onReady()):(this.wavesurfer.once("ready",this._onReady),this.wavesurfer.once("backend-created",this._onBackendCreated))}},{key:"destroy",value:function(){this.wavesurfer.un("ready",this._onReady),this.wavesurfer.un("backend-created",this._onBackendCreated),this.disableDragSelection(),this.clear()}},{key:"wouldExceedMaxRegions",value:function(){return this.maxRegions&&Object.keys(this.list).length>=this.maxRegions}},{key:"add",value:function(e){var t=this;if(this.wouldExceedMaxRegions())return null;!e.minLength&&this.regionsMinLength&&(e=s(s({},e),{},{minLength:this.regionsMinLength}));var r=new this.wavesurfer.Region(e,this.util,this.wavesurfer);return this.list[r.id]=r,r.on("remove",(function(){delete t.list[r.id]})),r}},{key:"clear",value:function(){var e=this;Object.keys(this.list).forEach((function(t){e.list[t].remove()}))}},{key:"enableDragSelection",value:function(e){var t=this;this.disableDragSelection();var r,i,n,s,a,o,l,h=e.slop||2,u=this.wavesurfer.drawer.container,d=!1!==e.scroll&&this.wavesurfer.params.scrollParent,c=e.scrollSpeed||1,v=e.scrollThreshold||10,f=this.wavesurfer.getDuration(),g=0,p=function e(r){if(s&&o){var a=t.wrapper.scrollLeft+c*o;t.wrapper.scrollLeft=a=Math.min(i,Math.max(0,a));var l=t.wavesurfer.drawer.handleEvent(r);s.update({start:Math.min(l*f,n*f),end:Math.max(l*f,n*f)}),a<i&&a>0&&window.requestAnimationFrame((function(){e(r)}))}},m=function(e){e.touches&&e.touches.length>1||(f=t.wavesurfer.getDuration(),a=e.targetTouches?e.targetTouches[0].identifier:null,i=t.wrapper.scrollWidth-t.wrapper.clientWidth,l=t.util.withOrientation(t.wrapper.getBoundingClientRect(),t.vertical),r=!0,n=t.wavesurfer.drawer.handleEvent(e,!0),s=null,o=null)};this.wrapper.addEventListener("mousedown",m),this.wrapper.addEventListener("touchstart",m),this.on("disable-drag-selection",(function(){t.wrapper.removeEventListener("touchstart",m),t.wrapper.removeEventListener("mousedown",m)}));var w=function(e){e.touches&&e.touches.length>1||(r=!1,g=0,o=null,s&&(t.util.preventClick(),s.fireEvent("update-end",e),t.wavesurfer.fireEvent("region-update-end",s,e)),s=null)};this.wrapper.addEventListener("mouseleave",w),this.wrapper.addEventListener("mouseup",w),this.wrapper.addEventListener("touchend",w),document.body.addEventListener("mouseup",w),document.body.addEventListener("touchend",w),this.on("disable-drag-selection",(function(){document.body.removeEventListener("mouseup",w),document.body.removeEventListener("touchend",w),t.wrapper.removeEventListener("touchend",w),t.wrapper.removeEventListener("mouseup",w),t.wrapper.removeEventListener("mouseleave",w)}));var b=function(i){if(r&&!(++g<=h)&&!(i.touches&&i.touches.length>1)&&(!i.targetTouches||i.targetTouches[0].identifier==a)&&(s||(s=t.add(e||{})))){var c=t.wavesurfer.drawer.handleEvent(i),m=t.wavesurfer.regions.util.getRegionSnapToGridValue(n*f),w=t.wavesurfer.regions.util.getRegionSnapToGridValue(c*f);s.update({start:Math.min(w,m),end:Math.max(w,m)});var b=t.util.withOrientation(i,t.vertical);if(d&&u.clientWidth<t.wrapper.scrollWidth){var y=b.clientX-l.left;(o=y<=v?-1:y>=l.right-v?1:null)&&p(i)}}};this.wrapper.addEventListener("mousemove",b),this.wrapper.addEventListener("touchmove",b),this.on("disable-drag-selection",(function(){t.wrapper.removeEventListener("touchmove",b),t.wrapper.removeEventListener("mousemove",b)})),this.wavesurfer.on("region-created",(function(e){t.regionsMinLength&&(e.minLength=t.regionsMinLength)}))}},{key:"disableDragSelection",value:function(){this.fireEvent("disable-drag-selection")}},{key:"getCurrentRegion",value:function(){var e=this,t=this.wavesurfer.getCurrentTime(),r=null;return Object.keys(this.list).forEach((function(i){var n=e.list[i];n.start<=t&&n.end>=t&&(!r||n.end-n.start<r.end-r.start)&&(r=n)})),r}},{key:"getRegionSnapToGridValue",value:function(e,t){if(t.snapToGridInterval){var r=t.snapToGridOffset||0;return Math.round((e-r)/t.snapToGridInterval)*t.snapToGridInterval+r}return e}}])&&o(t.prototype,r),n&&o(t,n),e}();t.default=l,e.exports=t.default},638:(e,t)=>{function r(e,t){for(var r=0;r<t.length;r++){var i=t[r];i.enumerable=i.enumerable||!1,i.configurable=!0,"value"in i&&(i.writable=!0),Object.defineProperty(e,i.key,i)}}Object.defineProperty(t,"__esModule",{value:!0}),t.Region=void 0;var i=function(){function e(t,r,i){var n,s=this;!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),this.wavesurfer=i,this.wrapper=i.drawer.wrapper,this.util=i.util,this.style=this.util.style,this.regionsUtil=r,this.vertical=i.drawer.params.vertical,this.id=null==t.id?i.util.getId():t.id,this.start=Number(t.start)||0,this.end=null==t.end?this.start+4/this.wrapper.scrollWidth*this.wavesurfer.getDuration():Number(t.end),this.resize=void 0===t.resize||Boolean(t.resize),this.drag=void 0===t.drag||Boolean(t.drag),this.isResizing=!1,this.isDragging=!1,this.loop=Boolean(t.loop),this.color=t.color||"rgba(0, 0, 0, 0.1)",this.handleStyle=t.handleStyle||{left:{},right:{}},this.handleLeftEl=null,this.handleRightEl=null,this.data=t.data||{},this.attributes=t.attributes||{},this.showTooltip=null===(n=t.showTooltip)||void 0===n||n,this.maxLength=t.maxLength,this.minLength=t.minLength,this._onRedraw=function(){return s.updateRender()},this.scroll=!1!==t.scroll&&i.params.scrollParent,this.scrollSpeed=t.scrollSpeed||1,this.scrollThreshold=t.scrollThreshold||10,this.preventContextMenu=void 0!==t.preventContextMenu&&Boolean(t.preventContextMenu);var a=null==t.channelIdx?-1:parseInt(t.channelIdx);if(this.regionHeight="100%",this.marginTop="0px",-1!==a){var o=null!=this.wavesurfer.backend.buffer?this.wavesurfer.backend.buffer.numberOfChannels:-1;o>=0&&a<o&&(this.regionHeight=Math.floor(1/o*100)+"%",this.marginTop=this.wavesurfer.getHeight()*a+"px")}this.formatTimeCallback=t.formatTimeCallback,this.edgeScrollWidth=t.edgeScrollWidth,this.bindInOut(),this.render(),this.wavesurfer.on("zoom",this._onRedraw),this.wavesurfer.on("redraw",this._onRedraw),this.wavesurfer.fireEvent("region-created",this)}var t,i,n;return t=e,(i=[{key:"update",value:function(e){null!=e.start&&(this.start=Number(e.start)),null!=e.end&&(this.end=Number(e.end)),null!=e.loop&&(this.loop=Boolean(e.loop)),null!=e.color&&(this.color=e.color),null!=e.handleStyle&&(this.handleStyle=e.handleStyle),null!=e.data&&(this.data=e.data),null!=e.resize&&(this.resize=Boolean(e.resize),this.updateHandlesResize(this.resize)),null!=e.drag&&(this.drag=Boolean(e.drag)),null!=e.maxLength&&(this.maxLength=Number(e.maxLength)),null!=e.minLength&&(this.minLength=Number(e.minLength)),null!=e.attributes&&(this.attributes=e.attributes),this.updateRender(),this.fireEvent("update"),this.wavesurfer.fireEvent("region-updated",this)}},{key:"remove",value:function(){this.element&&(this.wrapper.removeChild(this.element.domElement),this.element=null,this.fireEvent("remove"),this.wavesurfer.un("zoom",this._onRedraw),this.wavesurfer.un("redraw",this._onRedraw),this.wavesurfer.fireEvent("region-removed",this))}},{key:"play",value:function(e){var t=e||this.start;this.wavesurfer.play(t,this.end),this.fireEvent("play"),this.wavesurfer.fireEvent("region-play",this)}},{key:"playLoop",value:function(e){this.loop=!0,this.play(e)}},{key:"setLoop",value:function(e){this.loop=e}},{key:"render",value:function(){for(var e in this.element=this.util.withOrientation(this.wrapper.appendChild(document.createElement("region")),this.vertical),this.element.className="wavesurfer-region",this.showTooltip&&(this.element.title=this.formatTime(this.start,this.end)),this.element.setAttribute("data-id",this.id),this.attributes)this.element.setAttribute("data-region-"+e,this.attributes[e]);if(this.style(this.element,{position:"absolute",zIndex:2,height:this.regionHeight,top:this.marginTop}),this.resize){this.handleLeftEl=this.util.withOrientation(this.element.appendChild(document.createElement("handle")),this.vertical),this.handleRightEl=this.util.withOrientation(this.element.appendChild(document.createElement("handle")),this.vertical),this.handleLeftEl.className="wavesurfer-handle wavesurfer-handle-start",this.handleRightEl.className="wavesurfer-handle wavesurfer-handle-end";var t={cursor:this.vertical?"row-resize":"col-resize",position:"absolute",top:"0px",width:"2px",height:"100%",backgroundColor:"rgba(0, 0, 0, 1)"},r="none"!==this.handleStyle.left?Object.assign({left:"0px"},t,this.handleStyle.left):null,i="none"!==this.handleStyle.right?Object.assign({right:"0px"},t,this.handleStyle.right):null;r&&this.style(this.handleLeftEl,r),i&&this.style(this.handleRightEl,i)}this.updateRender(),this.bindEvents()}},{key:"formatTime",value:function(e,t){return this.formatTimeCallback?this.formatTimeCallback(e,t):(e==t?[e]:[e,t]).map((function(e){return[Math.floor(e%3600/60),("00"+Math.floor(e%60)).slice(-2)].join(":")})).join("-")}},{key:"getWidth",value:function(){return this.wavesurfer.drawer.width/this.wavesurfer.params.pixelRatio}},{key:"updateRender",value:function(){var e=this.wavesurfer.getDuration(),t=this.getWidth(),r=this.start,i=this.end;if(r<0&&(i-=r=0),i>e&&(r=e-((i=e)-r)),null!=this.minLength&&(i=Math.max(r+this.minLength,i)),null!=this.maxLength&&(i=Math.min(r+this.maxLength,i)),null!=this.element){var n=Math.round(r/e*t),s=Math.round(i/e*t)-n;for(var a in this.style(this.element,{left:n+"px",width:s+"px",backgroundColor:this.color,cursor:this.drag?"move":"default"}),this.attributes)this.element.setAttribute("data-region-"+a,this.attributes[a]);this.showTooltip&&(this.element.title=this.formatTime(this.start,this.end))}}},{key:"bindInOut",value:function(){var e=this;this.firedIn=!1,this.firedOut=!1;var t=function(t){var r=Math.round(10*e.start)/10,i=Math.round(10*e.end)/10;t=Math.round(10*t)/10,!e.firedOut&&e.firedIn&&(r>t||i<=t)&&(e.firedOut=!0,e.firedIn=!1,e.fireEvent("out"),e.wavesurfer.fireEvent("region-out",e)),!e.firedIn&&r<=t&&i>t&&(e.firedIn=!0,e.firedOut=!1,e.fireEvent("in"),e.wavesurfer.fireEvent("region-in",e))};this.wavesurfer.backend.on("audioprocess",t),this.on("remove",(function(){e.wavesurfer.backend.un("audioprocess",t)})),this.on("out",(function(){if(e.loop){var t=e.wavesurfer.getCurrentTime();t>=e.start&&t<=e.end&&e.wavesurfer.play(e.start)}}))}},{key:"bindEvents",value:function(){var e=this,t=this.preventContextMenu;this.element.addEventListener("mouseenter",(function(t){e.fireEvent("mouseenter",t),e.wavesurfer.fireEvent("region-mouseenter",e,t)})),this.element.addEventListener("mouseleave",(function(t){e.fireEvent("mouseleave",t),e.wavesurfer.fireEvent("region-mouseleave",e,t)})),this.element.addEventListener("click",(function(t){t.preventDefault(),e.fireEvent("click",t),e.wavesurfer.fireEvent("region-click",e,t)})),this.element.addEventListener("dblclick",(function(t){t.stopPropagation(),t.preventDefault(),e.fireEvent("dblclick",t),e.wavesurfer.fireEvent("region-dblclick",e,t)})),this.element.addEventListener("contextmenu",(function(r){t&&r.preventDefault(),e.fireEvent("contextmenu",r),e.wavesurfer.fireEvent("region-contextmenu",e,r)})),(this.drag||this.resize)&&this.bindDragEvents()}},{key:"bindDragEvents",value:function(){var e,t,r,i,n,s,a,o,l,h=this,u=this.wavesurfer.drawer.container,d=this.scrollSpeed,c=(this.scrollThreshold,!1),v=function t(u){var c=h.util.withOrientation(u,h.vertical),v=h.wavesurfer.getDuration();if(s&&(r||n)){var f=c.clientX,g=0,p=0,m=0,w=h.regionsUtil.getRegionSnapToGridValue(h.wavesurfer.drawer.handleEvent(u)*v);if(r)-1===s?(p=o*h.wavesurfer.params.minPxPerSec,g=f-a.left):(p=l*h.wavesurfer.params.minPxPerSec,g=a.right-f);else{var b=h.minLength;b||(b=0),"start"===n?(w>h.end-b&&(w=h.end-b,m=d*s),w<0&&(w=0)):"end"===n&&(w<h.start+b&&(w=h.start+b,m=d*s),w>v&&(w=v))}var y=h.wrapper.scrollLeft;if(-1===s){if(0===Math.round(y))return;if(Math.round(y-p+g)<=0)return}else{if(Math.round(y)===i)return;if(Math.round(y+p-g)>=i)return}var E=y-m+d*s;if(-1===s){var L=Math.max(0+p-g,E);h.wrapper.scrollLeft=E=L}else{var k=Math.min(i-p+g,E);h.wrapper.scrollLeft=E=k}var R=w-e;e=w,r?h.onDrag(R):h.onResize(R,n),window.requestAnimationFrame((function(){t(u)}))}},f=function(s){var u=h.wavesurfer.getDuration();s.touches&&s.touches.length>1||(t=s.targetTouches?s.targetTouches[0].identifier:null,(h.drag||h.resize)&&s.stopPropagation(),e=h.regionsUtil.getRegionSnapToGridValue(h.wavesurfer.drawer.handleEvent(s,!0)*u),o=e-h.start,l=h.end-e,i=h.wrapper.scrollWidth-h.wrapper.clientWidth,a=h.util.withOrientation(h.wrapper.getBoundingClientRect(),h.vertical),h.isResizing=!1,h.isDragging=!1,"handle"===s.target.tagName.toLowerCase()?(h.isResizing=!0,n=s.target.classList.contains("wavesurfer-handle-start")?"start":"end"):(h.isDragging=!0,r=!0,n=!1))},g=function(e){e.touches&&e.touches.length>1||((r||n)&&(h.isDragging=!1,h.isResizing=!1,r=!1,s=null,n=!1),c&&(c=!1,h.util.preventClick(),h.fireEvent("update-end",e),h.wavesurfer.fireEvent("region-update-end",h,e)))},p=function(i){var d=h.wavesurfer.getDuration(),f=h.util.withOrientation(i,h.vertical);if(!(i.touches&&i.touches.length>1)&&(!i.targetTouches||i.targetTouches[0].identifier==t)&&(r||n)){var g=h.regionsUtil.getRegionSnapToGridValue(h.wavesurfer.drawer.handleEvent(i)*d);if(r){var p=h.wavesurfer.getDuration();g>p-l&&(g=p-l),g-o<0&&(g=o)}if(n){var m=h.minLength;m||(m=0),"start"===n?(g>h.end-m&&(g=h.end-m),g<0&&(g=0)):"end"===n&&(g<h.start+m&&(g=h.start+m),g>d&&(g=d))}var w=g-e;if(e=g,h.drag&&r&&(c=c||!!w,h.onDrag(w)),h.resize&&n&&(c=c||!!w,h.onResize(w,n)),h.scroll&&u.clientWidth<h.wrapper.scrollWidth){var b=f.clientX;(s=b<a.left+h.edgeScrollWidth?-1:b>a.right-h.edgeScrollWidth?1:null)&&v(i)}}};this.element.addEventListener("mousedown",f),this.element.addEventListener("touchstart",f),document.body.addEventListener("mousemove",p),document.body.addEventListener("touchmove",p,{passive:!1}),document.addEventListener("mouseup",g),document.body.addEventListener("touchend",g),this.on("remove",(function(){document.removeEventListener("mouseup",g),document.body.removeEventListener("touchend",g),document.body.removeEventListener("mousemove",p),document.body.removeEventListener("touchmove",p)})),this.wavesurfer.on("destroy",(function(){document.removeEventListener("mouseup",g),document.body.removeEventListener("touchend",g)}))}},{key:"onDrag",value:function(e){var t=this.wavesurfer.getDuration();this.end+e>t&&(e=t-this.end),this.start+e<0&&(e=-1*this.start),this.update({start:this.start+e,end:this.end+e})}},{key:"onResize",value:function(e,t){var r=this.wavesurfer.getDuration();"start"===t?(e>0&&this.end-(this.start+e)<this.minLength&&(e=this.end-this.minLength-this.start),e<0&&this.start+e<0&&(e=-1*this.start),this.update({start:Math.min(this.start+e,this.end),end:Math.max(this.start+e,this.end)})):(e<0&&this.end+e-this.start<this.minLength&&(e=this.start+this.minLength-this.end),e>0&&this.end+e>r&&(e=r-this.end),this.update({start:Math.min(this.end+e,this.start),end:Math.max(this.end+e,this.start)}))}},{key:"updateHandlesResize",value:function(e){var t;t=e?this.vertical?"row-resize":"col-resize":"auto",this.handleLeftEl&&this.style(this.handleLeftEl,{cursor:t}),this.handleRightEl&&this.style(this.handleRightEl,{cursor:t})}}])&&r(t.prototype,i),n&&r(t,n),e}();t.Region=i}},t={};return function r(i){var n=t[i];if(void 0!==n)return n.exports;var s=t[i]={exports:{}};return e[i](s,s.exports,r),s.exports}(23)})()}));
6
+ !function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t():"function"==typeof define&&define.amd?define("WaveSurfer",[],t):"object"==typeof exports?exports.WaveSurfer=t():(e.WaveSurfer=e.WaveSurfer||{},e.WaveSurfer.regions=t())}(self,(function(){return(()=>{"use strict";var e={23:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var i=r(638);function n(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);t&&(i=i.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,i)}return r}function a(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?n(Object(r),!0).forEach((function(t){s(e,t,r[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):n(Object(r)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))}))}return e}function s(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function o(e,t){for(var r=0;r<t.length;r++){var i=t[r];i.enumerable=i.enumerable||!1,i.configurable=!0,"value"in i&&(i.writable=!0),Object.defineProperty(e,i.key,i)}}var l=function(){function e(t,r){var n=this;!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),this.params=t,this.wavesurfer=r,this.util=a(a({},r.util),{},{getRegionSnapToGridValue:function(e){return n.getRegionSnapToGridValue(e,t)}}),this.maxRegions=t.maxRegions,this.regionsMinLength=t.regionsMinLength||null,Object.getOwnPropertyNames(this.util.Observer.prototype).forEach((function(e){i.Region.prototype[e]=n.util.Observer.prototype[e]})),this.wavesurfer.Region=i.Region;this._onBackendCreated=function(){n.wrapper=n.wavesurfer.drawer.wrapper,n.orientation=n.wavesurfer.drawer.orientation,n.defaultEdgeScrollWidth=.05*n.wrapper.clientWidth,n.params.regions&&n.params.regions.forEach((function(e){n.add(e)}))},this.list={},this._onReady=function(){n.wrapper=n.wavesurfer.drawer.wrapper,n.vertical=n.wavesurfer.drawer.params.vertical,n.params.dragSelection&&n.enableDragSelection(n.params),Object.keys(n.list).forEach((function(e){n.list[e].updateRender()}))}}var t,r,n;return t=e,n=[{key:"create",value:function(t){return{name:"regions",deferInit:!(!t||!t.deferInit)&&t.deferInit,params:t,staticProps:{addRegion:function(e){return this.initialisedPluginList.regions||this.initPlugin("regions"),this.regions.add(e)},clearRegions:function(){this.regions&&this.regions.clear()},enableDragSelection:function(e){this.initialisedPluginList.regions||this.initPlugin("regions"),this.regions.enableDragSelection(e)},disableDragSelection:function(){this.regions.disableDragSelection()}},instance:e}}}],(r=[{key:"init",value:function(){this.wavesurfer.isReady?(this._onBackendCreated(),this._onReady()):(this.wavesurfer.once("ready",this._onReady),this.wavesurfer.once("backend-created",this._onBackendCreated))}},{key:"destroy",value:function(){this.wavesurfer.un("ready",this._onReady),this.wavesurfer.un("backend-created",this._onBackendCreated),this.wavesurfer.setDisabledEventEmissions(["region-removed"]),this.disableDragSelection(),this.clear()}},{key:"wouldExceedMaxRegions",value:function(){return this.maxRegions&&Object.keys(this.list).length>=this.maxRegions}},{key:"add",value:function(e){var t=this;if(this.wouldExceedMaxRegions())return null;!(e=a({edgeScrollWidth:this.params.edgeScrollWidth||this.defaultEdgeScrollWidth},e)).formatTimeCallback&&this.params.formatTimeCallback&&(e=a(a({},e),{},{formatTimeCallback:this.params.formatTimeCallback})),!e.minLength&&this.regionsMinLength&&(e=a(a({},e),{},{minLength:this.regionsMinLength}));var r=new this.wavesurfer.Region(e,this.util,this.wavesurfer);return this.list[r.id]=r,r.on("remove",(function(){delete t.list[r.id]})),r}},{key:"clear",value:function(){var e=this;Object.keys(this.list).forEach((function(t){e.list[t].remove()}))}},{key:"enableDragSelection",value:function(e){var t=this;this.disableDragSelection();var r,i,n,a,s,o,l,h=e.slop||2,u=this.wavesurfer.drawer.container,d=!1!==e.scroll&&this.wavesurfer.params.scrollParent,c=e.scrollSpeed||1,f=e.scrollThreshold||10,v=this.wavesurfer.getDuration(),g=0,p=function e(r){if(a&&o){var s=t.wrapper.scrollLeft+c*o;t.wrapper.scrollLeft=s=Math.min(i,Math.max(0,s));var l=t.wavesurfer.drawer.handleEvent(r);a.update({start:Math.min(l*v,n*v),end:Math.max(l*v,n*v)}),s<i&&s>0&&window.requestAnimationFrame((function(){e(r)}))}},m=function(h){if(!(h.touches&&h.touches.length>1)){if(v=t.wavesurfer.getDuration(),s=h.targetTouches?h.targetTouches[0].identifier:null,i=t.wrapper.scrollWidth-t.wrapper.clientWidth,l=t.util.withOrientation(t.wrapper.getBoundingClientRect(),t.vertical),t.wavesurfer.params.splitChannels){var u=(h.touches?h.touches[0].clientY:h.clientY)-l.top,d=null!=t.wavesurfer.backend.buffer?t.wavesurfer.backend.buffer.numberOfChannels:1,c=t.wrapper.clientHeight/d,f=Math.floor(u/c);e.channelIdx=f;var g=t.wavesurfer.params.splitChannelsOptions.channelColors[f];g&&g.dragColor&&(e.color=g.dragColor)}r=!0,n=t.wavesurfer.drawer.handleEvent(h,!0),a=null,o=null}};this.wrapper.addEventListener("mousedown",m),this.wrapper.addEventListener("touchstart",m),this.on("disable-drag-selection",(function(){t.wrapper.removeEventListener("touchstart",m),t.wrapper.removeEventListener("mousedown",m)}));var w=function(e){e.touches&&e.touches.length>1||(r=!1,g=0,o=null,a&&(t.util.preventClick(),a.fireEvent("update-end",e),t.wavesurfer.fireEvent("region-update-end",a,e)),a=null)};this.wrapper.addEventListener("mouseleave",w),this.wrapper.addEventListener("mouseup",w),this.wrapper.addEventListener("touchend",w),document.body.addEventListener("mouseup",w),document.body.addEventListener("touchend",w),this.on("disable-drag-selection",(function(){document.body.removeEventListener("mouseup",w),document.body.removeEventListener("touchend",w),t.wrapper.removeEventListener("touchend",w),t.wrapper.removeEventListener("mouseup",w),t.wrapper.removeEventListener("mouseleave",w)}));var b=function(i){if(r&&!(++g<=h)&&!(i.touches&&i.touches.length>1)&&(!i.targetTouches||i.targetTouches[0].identifier==s)&&(a||(a=t.add(e||{})))){var c=t.wavesurfer.drawer.handleEvent(i),m=t.wavesurfer.regions.util.getRegionSnapToGridValue(n*v),w=t.wavesurfer.regions.util.getRegionSnapToGridValue(c*v);a.update({start:Math.min(w,m),end:Math.max(w,m)});var b=t.util.withOrientation(i,t.vertical);if(d&&u.clientWidth<t.wrapper.scrollWidth){var y=b.clientX-l.left;(o=y<=f?-1:y>=l.right-f?1:null)&&p(i)}}};this.wrapper.addEventListener("mousemove",b),this.wrapper.addEventListener("touchmove",b),this.on("disable-drag-selection",(function(){t.wrapper.removeEventListener("touchmove",b),t.wrapper.removeEventListener("mousemove",b)})),this.wavesurfer.on("region-created",(function(e){t.regionsMinLength&&(e.minLength=t.regionsMinLength)}))}},{key:"disableDragSelection",value:function(){this.fireEvent("disable-drag-selection")}},{key:"getCurrentRegion",value:function(){var e=this,t=this.wavesurfer.getCurrentTime(),r=null;return Object.keys(this.list).forEach((function(i){var n=e.list[i];n.start<=t&&n.end>=t&&(!r||n.end-n.start<r.end-r.start)&&(r=n)})),r}},{key:"getRegionSnapToGridValue",value:function(e,t){if(t.snapToGridInterval){var r=t.snapToGridOffset||0;return Math.round((e-r)/t.snapToGridInterval)*t.snapToGridInterval+r}return e}}])&&o(t.prototype,r),n&&o(t,n),Object.defineProperty(t,"prototype",{writable:!1}),e}();t.default=l,e.exports=t.default},638:(e,t)=>{function r(e,t){for(var r=0;r<t.length;r++){var i=t[r];i.enumerable=i.enumerable||!1,i.configurable=!0,"value"in i&&(i.writable=!0),Object.defineProperty(e,i.key,i)}}Object.defineProperty(t,"__esModule",{value:!0}),t.Region=void 0;var i=function(){function e(t,r,i){var n,a=this;!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),this.wavesurfer=i,this.wrapper=i.drawer.wrapper,this.util=i.util,this.style=this.util.style,this.regionsUtil=r,this.vertical=i.drawer.params.vertical,this.id=null==t.id?i.util.getId():t.id,this.start=Number(t.start)||0,this.end=null==t.end?this.start+4/this.wrapper.scrollWidth*this.wavesurfer.getDuration():Number(t.end),this.resize=void 0===t.resize||Boolean(t.resize),this.drag=void 0===t.drag||Boolean(t.drag),this.isResizing=!1,this.isDragging=!1,this.loop=Boolean(t.loop),this.color=t.color||"rgba(0, 0, 0, 0.1)",this.handleStyle=t.handleStyle||{left:{},right:{}},this.handleLeftEl=null,this.handleRightEl=null,this.data=t.data||{},this.attributes=t.attributes||{},this.showTooltip=null===(n=t.showTooltip)||void 0===n||n,this.maxLength=t.maxLength,this.minLength=t.minLength,this._onRedraw=function(){return a.updateRender()},this.scroll=!1!==t.scroll&&i.params.scrollParent,this.scrollSpeed=t.scrollSpeed||1,this.scrollThreshold=t.scrollThreshold||10,this.preventContextMenu=void 0!==t.preventContextMenu&&Boolean(t.preventContextMenu);var s=null==t.channelIdx?-1:parseInt(t.channelIdx);if(this.channelIdx=s,this.regionHeight="100%",this.marginTop="0px",-1!==s){var o=null!=this.wavesurfer.backend.buffer?this.wavesurfer.backend.buffer.numberOfChannels:-1;o>=0&&s<o&&(this.regionHeight=Math.floor(1/o*100)+"%",this.marginTop=this.wavesurfer.getHeight()*s+"px")}this.formatTimeCallback=t.formatTimeCallback,this.edgeScrollWidth=t.edgeScrollWidth,this.bindInOut(),this.render(),this.wavesurfer.on("zoom",this._onRedraw),this.wavesurfer.on("redraw",this._onRedraw),this.wavesurfer.fireEvent("region-created",this)}var t,i,n;return t=e,(i=[{key:"update",value:function(e,t){null!=e.start&&(this.start=Number(e.start)),null!=e.end&&(this.end=Number(e.end)),null!=e.loop&&(this.loop=Boolean(e.loop)),null!=e.color&&(this.color=e.color),null!=e.handleStyle&&(this.handleStyle=e.handleStyle),null!=e.data&&(this.data=e.data),null!=e.resize&&(this.resize=Boolean(e.resize),this.updateHandlesResize(this.resize)),null!=e.drag&&(this.drag=Boolean(e.drag)),null!=e.maxLength&&(this.maxLength=Number(e.maxLength)),null!=e.minLength&&(this.minLength=Number(e.minLength)),null!=e.attributes&&(this.attributes=e.attributes),this.updateRender(),this.fireEvent("update"),this.wavesurfer.fireEvent("region-updated",this,t)}},{key:"remove",value:function(){this.element&&(this.wrapper.removeChild(this.element.domElement),this.element=null,this.fireEvent("remove"),this.wavesurfer.un("zoom",this._onRedraw),this.wavesurfer.un("redraw",this._onRedraw),this.wavesurfer.fireEvent("region-removed",this))}},{key:"play",value:function(e){var t=e||this.start;this.wavesurfer.play(t,this.end),this.fireEvent("play"),this.wavesurfer.fireEvent("region-play",this)}},{key:"playLoop",value:function(e){this.loop=!0,this.play(e)}},{key:"setLoop",value:function(e){this.loop=e}},{key:"render",value:function(){for(var e in this.element=this.util.withOrientation(this.wrapper.appendChild(document.createElement("region")),this.vertical),this.element.className="wavesurfer-region",this.showTooltip&&(this.element.title=this.formatTime(this.start,this.end)),this.element.setAttribute("data-id",this.id),this.attributes)this.element.setAttribute("data-region-"+e,this.attributes[e]);if(this.style(this.element,{position:"absolute",zIndex:3,height:this.regionHeight,top:this.marginTop}),this.resize){this.handleLeftEl=this.util.withOrientation(this.element.appendChild(document.createElement("handle")),this.vertical),this.handleRightEl=this.util.withOrientation(this.element.appendChild(document.createElement("handle")),this.vertical),this.handleLeftEl.className="wavesurfer-handle wavesurfer-handle-start",this.handleRightEl.className="wavesurfer-handle wavesurfer-handle-end";var t={cursor:this.vertical?"row-resize":"col-resize",position:"absolute",top:"0px",width:"2px",height:"100%",backgroundColor:"rgba(0, 0, 0, 1)"},r="none"!==this.handleStyle.left?Object.assign({left:"0px"},t,this.handleStyle.left):null,i="none"!==this.handleStyle.right?Object.assign({right:"0px"},t,this.handleStyle.right):null;r&&this.style(this.handleLeftEl,r),i&&this.style(this.handleRightEl,i)}this.updateRender(),this.bindEvents()}},{key:"formatTime",value:function(e,t){return this.formatTimeCallback?this.formatTimeCallback(e,t):(e==t?[e]:[e,t]).map((function(e){return[Math.floor(e%3600/60),("00"+Math.floor(e%60)).slice(-2)].join(":")})).join("-")}},{key:"getWidth",value:function(){return this.wavesurfer.drawer.width/this.wavesurfer.params.pixelRatio}},{key:"updateRender",value:function(){var e=this.wavesurfer.getDuration(),t=this.getWidth(),r=this.start,i=this.end;if(r<0&&(i-=r=0),i>e&&(r=e-((i=e)-r)),null!=this.minLength&&(i=Math.max(r+this.minLength,i)),null!=this.maxLength&&(i=Math.min(r+this.maxLength,i)),null!=this.element){var n=Math.round(r/e*t),a=Math.round(i/e*t)-n;for(var s in this.style(this.element,{left:n+"px",width:a+"px",backgroundColor:this.color,cursor:this.drag?"move":"default"}),this.attributes)this.element.setAttribute("data-region-"+s,this.attributes[s]);this.showTooltip&&(this.element.title=this.formatTime(this.start,this.end))}}},{key:"bindInOut",value:function(){var e=this;this.firedIn=!1,this.firedOut=!1;var t=function(t){var r=Math.round(10*e.start)/10,i=Math.round(10*e.end)/10;t=Math.round(10*t)/10,!e.firedOut&&e.firedIn&&(r>t||i<=t)&&(e.firedOut=!0,e.firedIn=!1,e.fireEvent("out"),e.wavesurfer.fireEvent("region-out",e)),!e.firedIn&&r<=t&&i>t&&(e.firedIn=!0,e.firedOut=!1,e.fireEvent("in"),e.wavesurfer.fireEvent("region-in",e))};this.wavesurfer.backend.on("audioprocess",t),this.on("remove",(function(){e.wavesurfer.backend.un("audioprocess",t)})),this.on("out",(function(){if(e.loop){var t=e.wavesurfer.getCurrentTime();t>=e.start&&t<=e.end&&e.wavesurfer.play(e.start)}}))}},{key:"bindEvents",value:function(){var e=this,t=this.preventContextMenu;this.element.addEventListener("mouseenter",(function(t){e.fireEvent("mouseenter",t),e.wavesurfer.fireEvent("region-mouseenter",e,t)})),this.element.addEventListener("mouseleave",(function(t){e.fireEvent("mouseleave",t),e.wavesurfer.fireEvent("region-mouseleave",e,t)})),this.element.addEventListener("click",(function(t){t.preventDefault(),e.fireEvent("click",t),e.wavesurfer.fireEvent("region-click",e,t)})),this.element.addEventListener("dblclick",(function(t){t.stopPropagation(),t.preventDefault(),e.fireEvent("dblclick",t),e.wavesurfer.fireEvent("region-dblclick",e,t)})),this.element.addEventListener("contextmenu",(function(r){t&&r.preventDefault(),e.fireEvent("contextmenu",r),e.wavesurfer.fireEvent("region-contextmenu",e,r)})),(this.drag||this.resize)&&this.bindDragEvents()}},{key:"bindDragEvents",value:function(){var e,t,r,i,n,a,s,o,l,h=this,u=this.wavesurfer.drawer.container,d=this.scrollSpeed,c=(this.scrollThreshold,!1),f=function t(u){var c=h.util.withOrientation(u,h.vertical),f=h.wavesurfer.getDuration();if(a&&(r||n)){var v=c.clientX,g=0,p=0,m=0,w=h.regionsUtil.getRegionSnapToGridValue(h.wavesurfer.drawer.handleEvent(u)*f);if(r)-1===a?(p=o*h.wavesurfer.params.minPxPerSec,g=v-s.left):(p=l*h.wavesurfer.params.minPxPerSec,g=s.right-v);else{var b=h.minLength;b||(b=0),"start"===n?(w>h.end-b&&(w=h.end-b,m=d*a),w<0&&(w=0)):"end"===n&&(w<h.start+b&&(w=h.start+b,m=d*a),w>f&&(w=f))}var y=h.wrapper.scrollLeft;if(-1===a){if(0===Math.round(y))return;if(Math.round(y-p+g)<=0)return}else{if(Math.round(y)===i)return;if(Math.round(y+p-g)>=i)return}var E=y-m+d*a;if(-1===a){var L=Math.max(0+p-g,E);h.wrapper.scrollLeft=E=L}else{var k=Math.min(i-p+g,E);h.wrapper.scrollLeft=E=k}var x=w-e;e=w,r?h.onDrag(x):h.onResize(x,n),window.requestAnimationFrame((function(){t(u)}))}},v=function(a){var u=h.wavesurfer.getDuration();a.touches&&a.touches.length>1||(t=a.targetTouches?a.targetTouches[0].identifier:null,(h.drag||h.resize)&&a.stopPropagation(),e=h.regionsUtil.getRegionSnapToGridValue(h.wavesurfer.drawer.handleEvent(a,!0)*u),o=e-h.start,l=h.end-e,i=h.wrapper.scrollWidth-h.wrapper.clientWidth,s=h.util.withOrientation(h.wrapper.getBoundingClientRect(),h.vertical),h.isResizing=!1,h.isDragging=!1,"handle"===a.target.tagName.toLowerCase()?(h.isResizing=!0,n=a.target.classList.contains("wavesurfer-handle-start")?"start":"end"):(h.isDragging=!0,r=!0,n=!1))},g=function(e){e.touches&&e.touches.length>1||((r||n)&&(h.isDragging=!1,h.isResizing=!1,r=!1,a=null,n=!1),c&&(c=!1,h.util.preventClick(),h.fireEvent("update-end",e),h.wavesurfer.fireEvent("region-update-end",h,e)))},p=function(i){var d=h.wavesurfer.getDuration(),v=h.util.withOrientation(i,h.vertical);if(!(i.touches&&i.touches.length>1)&&(!i.targetTouches||i.targetTouches[0].identifier==t)&&(r||n)){var g=h.regionsUtil.getRegionSnapToGridValue(h.wavesurfer.drawer.handleEvent(i)*d);if(r){var p=h.wavesurfer.getDuration();g>p-l&&(g=p-l),g-o<0&&(g=o)}if(n){var m=h.minLength;m||(m=0),"start"===n?(g>h.end-m&&(g=h.end-m),g<0&&(g=0)):"end"===n&&(g<h.start+m&&(g=h.start+m),g>d&&(g=d))}var w=g-e;if(e=g,h.drag&&r&&(c=c||!!w,h.onDrag(w)),h.resize&&n&&(c=c||!!w,h.onResize(w,n)),h.scroll&&u.clientWidth<h.wrapper.scrollWidth){var b=v.clientX;(a=b<s.left+h.edgeScrollWidth?-1:b>s.right-h.edgeScrollWidth?1:null)&&f(i)}}};this.element.addEventListener("mousedown",v),this.element.addEventListener("touchstart",v),document.body.addEventListener("mousemove",p),document.body.addEventListener("touchmove",p,{passive:!1}),document.addEventListener("mouseup",g),document.body.addEventListener("touchend",g),this.on("remove",(function(){document.removeEventListener("mouseup",g),document.body.removeEventListener("touchend",g),document.body.removeEventListener("mousemove",p),document.body.removeEventListener("touchmove",p)})),this.wavesurfer.on("destroy",(function(){document.removeEventListener("mouseup",g),document.body.removeEventListener("touchend",g)}))}},{key:"onDrag",value:function(e){var t=this.wavesurfer.getDuration();this.end+e>t&&(e=t-this.end),this.start+e<0&&(e=-1*this.start);var r={direction:this._getDragDirection(e),action:"drag"};this.update({start:this.start+e,end:this.end+e},r)}},{key:"_getDragDirection",value:function(e){return e<0?"left":e>0?"right":null}},{key:"onResize",value:function(e,t){var r=this.wavesurfer.getDuration(),i={action:"resize",direction:"start"===t?"left":"right"};"start"===t?(e>0&&this.end-(this.start+e)<this.minLength&&(e=this.end-this.minLength-this.start),e<0&&this.end-(this.start+e)>this.maxLength&&(e=this.end-this.start-this.maxLength),e<0&&this.start+e<0&&(e=-1*this.start),this.update({start:Math.min(this.start+e,this.end),end:Math.max(this.start+e,this.end)},i)):(e<0&&this.end+e-this.start<this.minLength&&(e=this.start+this.minLength-this.end),e>0&&this.end+e-this.start>this.maxLength&&(e=this.maxLength-(this.end-this.start)),e>0&&this.end+e>r&&(e=r-this.end),this.update({start:Math.min(this.end+e,this.start),end:Math.max(this.end+e,this.start)},i))}},{key:"updateHandlesResize",value:function(e){var t;t=e?this.vertical?"row-resize":"col-resize":"auto",this.handleLeftEl&&this.style(this.handleLeftEl,{cursor:t}),this.handleRightEl&&this.style(this.handleRightEl,{cursor:t})}}])&&r(t.prototype,i),n&&r(t,n),Object.defineProperty(t,"prototype",{writable:!1}),e}();t.Region=i}},t={};var r=function r(i){var n=t[i];if(void 0!==n)return n.exports;var a=t[i]={exports:{}};return e[i](a,a.exports,r),a.exports}(23);return r})()}));
7
7
  //# sourceMappingURL=wavesurfer.regions.min.js.map