muzical-ui 0.1.20 → 0.1.21

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 (171) hide show
  1. package/.next/standalone/.next/BUILD_ID +1 -1
  2. package/.next/standalone/.next/app-path-routes-manifest.json +1 -0
  3. package/.next/standalone/.next/build-manifest.json +3 -3
  4. package/.next/standalone/.next/routes-manifest.json +6 -0
  5. package/.next/standalone/.next/server/app/_global-error.html +1 -1
  6. package/.next/standalone/.next/server/app/_global-error.rsc +1 -1
  7. package/.next/standalone/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +1 -1
  8. package/.next/standalone/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  9. package/.next/standalone/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
  10. package/.next/standalone/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
  11. package/.next/standalone/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  12. package/.next/standalone/.next/server/app/_not-found/page.js.nft.json +1 -1
  13. package/.next/standalone/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  14. package/.next/standalone/.next/server/app/_not-found.html +1 -1
  15. package/.next/standalone/.next/server/app/_not-found.rsc +17 -17
  16. package/.next/standalone/.next/server/app/_not-found.segments/_full.segment.rsc +17 -17
  17. package/.next/standalone/.next/server/app/_not-found.segments/_head.segment.rsc +4 -4
  18. package/.next/standalone/.next/server/app/_not-found.segments/_index.segment.rsc +11 -11
  19. package/.next/standalone/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +2 -2
  20. package/.next/standalone/.next/server/app/_not-found.segments/_not-found.segment.rsc +3 -3
  21. package/.next/standalone/.next/server/app/_not-found.segments/_tree.segment.rsc +2 -2
  22. package/.next/standalone/.next/server/app/api/youtube/audio/route/app-paths-manifest.json +3 -0
  23. package/.next/standalone/.next/server/app/api/youtube/audio/route/build-manifest.json +9 -0
  24. package/.next/standalone/.next/server/app/api/youtube/audio/route/server-reference-manifest.json +4 -0
  25. package/.next/standalone/.next/server/app/api/youtube/audio/route.js +7 -0
  26. package/.next/standalone/.next/server/app/api/youtube/audio/route.js.map +5 -0
  27. package/.next/standalone/.next/server/app/api/youtube/audio/route.js.nft.json +1 -0
  28. package/.next/standalone/.next/server/app/api/youtube/audio/route_client-reference-manifest.js +3 -0
  29. package/.next/standalone/.next/server/app/index.html +1 -1
  30. package/.next/standalone/.next/server/app/index.rsc +16 -16
  31. package/.next/standalone/.next/server/app/index.segments/__PAGE__.segment.rsc +2 -2
  32. package/.next/standalone/.next/server/app/index.segments/_full.segment.rsc +16 -16
  33. package/.next/standalone/.next/server/app/index.segments/_head.segment.rsc +4 -4
  34. package/.next/standalone/.next/server/app/index.segments/_index.segment.rsc +11 -11
  35. package/.next/standalone/.next/server/app/index.segments/_tree.segment.rsc +2 -2
  36. package/.next/standalone/.next/server/app/musicbrainz/page.js.nft.json +1 -1
  37. package/.next/standalone/.next/server/app/musicbrainz/page_client-reference-manifest.js +1 -1
  38. package/.next/standalone/.next/server/app/musicbrainz.html +1 -1
  39. package/.next/standalone/.next/server/app/musicbrainz.rsc +16 -16
  40. package/.next/standalone/.next/server/app/musicbrainz.segments/_full.segment.rsc +16 -16
  41. package/.next/standalone/.next/server/app/musicbrainz.segments/_head.segment.rsc +4 -4
  42. package/.next/standalone/.next/server/app/musicbrainz.segments/_index.segment.rsc +11 -11
  43. package/.next/standalone/.next/server/app/musicbrainz.segments/_tree.segment.rsc +2 -2
  44. package/.next/standalone/.next/server/app/musicbrainz.segments/musicbrainz/__PAGE__.segment.rsc +2 -2
  45. package/.next/standalone/.next/server/app/musicbrainz.segments/musicbrainz.segment.rsc +3 -3
  46. package/.next/standalone/.next/server/app/page.js.nft.json +1 -1
  47. package/.next/standalone/.next/server/app/page_client-reference-manifest.js +1 -1
  48. package/.next/standalone/.next/server/app/settings/browse/page.js.nft.json +1 -1
  49. package/.next/standalone/.next/server/app/settings/browse/page_client-reference-manifest.js +1 -1
  50. package/.next/standalone/.next/server/app/settings/browse.html +1 -1
  51. package/.next/standalone/.next/server/app/settings/browse.rsc +19 -19
  52. package/.next/standalone/.next/server/app/settings/browse.segments/_full.segment.rsc +19 -19
  53. package/.next/standalone/.next/server/app/settings/browse.segments/_head.segment.rsc +4 -4
  54. package/.next/standalone/.next/server/app/settings/browse.segments/_index.segment.rsc +11 -11
  55. package/.next/standalone/.next/server/app/settings/browse.segments/_tree.segment.rsc +2 -2
  56. package/.next/standalone/.next/server/app/settings/browse.segments/settings/browse/__PAGE__.segment.rsc +3 -3
  57. package/.next/standalone/.next/server/app/settings/browse.segments/settings/browse.segment.rsc +3 -3
  58. package/.next/standalone/.next/server/app/settings/browse.segments/settings.segment.rsc +4 -4
  59. package/.next/standalone/.next/server/app/settings/display/page.js.nft.json +1 -1
  60. package/.next/standalone/.next/server/app/settings/display/page_client-reference-manifest.js +1 -1
  61. package/.next/standalone/.next/server/app/settings/display.html +1 -1
  62. package/.next/standalone/.next/server/app/settings/display.rsc +19 -19
  63. package/.next/standalone/.next/server/app/settings/display.segments/_full.segment.rsc +19 -19
  64. package/.next/standalone/.next/server/app/settings/display.segments/_head.segment.rsc +4 -4
  65. package/.next/standalone/.next/server/app/settings/display.segments/_index.segment.rsc +11 -11
  66. package/.next/standalone/.next/server/app/settings/display.segments/_tree.segment.rsc +2 -2
  67. package/.next/standalone/.next/server/app/settings/display.segments/settings/display/__PAGE__.segment.rsc +3 -3
  68. package/.next/standalone/.next/server/app/settings/display.segments/settings/display.segment.rsc +3 -3
  69. package/.next/standalone/.next/server/app/settings/display.segments/settings.segment.rsc +4 -4
  70. package/.next/standalone/.next/server/app/settings/genius/page.js.nft.json +1 -1
  71. package/.next/standalone/.next/server/app/settings/genius/page_client-reference-manifest.js +1 -1
  72. package/.next/standalone/.next/server/app/settings/genius.html +1 -1
  73. package/.next/standalone/.next/server/app/settings/genius.rsc +19 -19
  74. package/.next/standalone/.next/server/app/settings/genius.segments/_full.segment.rsc +19 -19
  75. package/.next/standalone/.next/server/app/settings/genius.segments/_head.segment.rsc +4 -4
  76. package/.next/standalone/.next/server/app/settings/genius.segments/_index.segment.rsc +11 -11
  77. package/.next/standalone/.next/server/app/settings/genius.segments/_tree.segment.rsc +2 -2
  78. package/.next/standalone/.next/server/app/settings/genius.segments/settings/genius/__PAGE__.segment.rsc +3 -3
  79. package/.next/standalone/.next/server/app/settings/genius.segments/settings/genius.segment.rsc +3 -3
  80. package/.next/standalone/.next/server/app/settings/genius.segments/settings.segment.rsc +4 -4
  81. package/.next/standalone/.next/server/app/settings/lastfm/page.js.nft.json +1 -1
  82. package/.next/standalone/.next/server/app/settings/lastfm/page_client-reference-manifest.js +1 -1
  83. package/.next/standalone/.next/server/app/settings/lastfm.html +1 -1
  84. package/.next/standalone/.next/server/app/settings/lastfm.rsc +19 -19
  85. package/.next/standalone/.next/server/app/settings/lastfm.segments/_full.segment.rsc +19 -19
  86. package/.next/standalone/.next/server/app/settings/lastfm.segments/_head.segment.rsc +4 -4
  87. package/.next/standalone/.next/server/app/settings/lastfm.segments/_index.segment.rsc +11 -11
  88. package/.next/standalone/.next/server/app/settings/lastfm.segments/_tree.segment.rsc +2 -2
  89. package/.next/standalone/.next/server/app/settings/lastfm.segments/settings/lastfm/__PAGE__.segment.rsc +3 -3
  90. package/.next/standalone/.next/server/app/settings/lastfm.segments/settings/lastfm.segment.rsc +3 -3
  91. package/.next/standalone/.next/server/app/settings/lastfm.segments/settings.segment.rsc +4 -4
  92. package/.next/standalone/.next/server/app/settings/library/page.js.nft.json +1 -1
  93. package/.next/standalone/.next/server/app/settings/library/page_client-reference-manifest.js +1 -1
  94. package/.next/standalone/.next/server/app/settings/library.html +1 -1
  95. package/.next/standalone/.next/server/app/settings/library.rsc +19 -19
  96. package/.next/standalone/.next/server/app/settings/library.segments/_full.segment.rsc +19 -19
  97. package/.next/standalone/.next/server/app/settings/library.segments/_head.segment.rsc +4 -4
  98. package/.next/standalone/.next/server/app/settings/library.segments/_index.segment.rsc +11 -11
  99. package/.next/standalone/.next/server/app/settings/library.segments/_tree.segment.rsc +2 -2
  100. package/.next/standalone/.next/server/app/settings/library.segments/settings/library/__PAGE__.segment.rsc +3 -3
  101. package/.next/standalone/.next/server/app/settings/library.segments/settings/library.segment.rsc +3 -3
  102. package/.next/standalone/.next/server/app/settings/library.segments/settings.segment.rsc +4 -4
  103. package/.next/standalone/.next/server/app/settings/page.js.nft.json +1 -1
  104. package/.next/standalone/.next/server/app/settings/page_client-reference-manifest.js +1 -1
  105. package/.next/standalone/.next/server/app/settings/playback/page.js.nft.json +1 -1
  106. package/.next/standalone/.next/server/app/settings/playback/page_client-reference-manifest.js +1 -1
  107. package/.next/standalone/.next/server/app/settings/playback.html +1 -1
  108. package/.next/standalone/.next/server/app/settings/playback.rsc +19 -19
  109. package/.next/standalone/.next/server/app/settings/playback.segments/_full.segment.rsc +19 -19
  110. package/.next/standalone/.next/server/app/settings/playback.segments/_head.segment.rsc +4 -4
  111. package/.next/standalone/.next/server/app/settings/playback.segments/_index.segment.rsc +11 -11
  112. package/.next/standalone/.next/server/app/settings/playback.segments/_tree.segment.rsc +2 -2
  113. package/.next/standalone/.next/server/app/settings/playback.segments/settings/playback/__PAGE__.segment.rsc +3 -3
  114. package/.next/standalone/.next/server/app/settings/playback.segments/settings/playback.segment.rsc +3 -3
  115. package/.next/standalone/.next/server/app/settings/playback.segments/settings.segment.rsc +4 -4
  116. package/.next/standalone/.next/server/app/settings/youtube/page.js.nft.json +1 -1
  117. package/.next/standalone/.next/server/app/settings/youtube/page_client-reference-manifest.js +1 -1
  118. package/.next/standalone/.next/server/app/settings/youtube.html +1 -1
  119. package/.next/standalone/.next/server/app/settings/youtube.rsc +19 -19
  120. package/.next/standalone/.next/server/app/settings/youtube.segments/_full.segment.rsc +19 -19
  121. package/.next/standalone/.next/server/app/settings/youtube.segments/_head.segment.rsc +4 -4
  122. package/.next/standalone/.next/server/app/settings/youtube.segments/_index.segment.rsc +11 -11
  123. package/.next/standalone/.next/server/app/settings/youtube.segments/_tree.segment.rsc +2 -2
  124. package/.next/standalone/.next/server/app/settings/youtube.segments/settings/youtube/__PAGE__.segment.rsc +3 -3
  125. package/.next/standalone/.next/server/app/settings/youtube.segments/settings/youtube.segment.rsc +3 -3
  126. package/.next/standalone/.next/server/app/settings/youtube.segments/settings.segment.rsc +4 -4
  127. package/.next/standalone/.next/server/app/settings.html +1 -1
  128. package/.next/standalone/.next/server/app/settings.rsc +18 -18
  129. package/.next/standalone/.next/server/app/settings.segments/_full.segment.rsc +18 -18
  130. package/.next/standalone/.next/server/app/settings.segments/_head.segment.rsc +4 -4
  131. package/.next/standalone/.next/server/app/settings.segments/_index.segment.rsc +11 -11
  132. package/.next/standalone/.next/server/app/settings.segments/_tree.segment.rsc +2 -2
  133. package/.next/standalone/.next/server/app/settings.segments/settings/__PAGE__.segment.rsc +3 -3
  134. package/.next/standalone/.next/server/app/settings.segments/settings.segment.rsc +4 -4
  135. package/.next/standalone/.next/server/app/youtube/page.js.nft.json +1 -1
  136. package/.next/standalone/.next/server/app/youtube/page_client-reference-manifest.js +1 -1
  137. package/.next/standalone/.next/server/app/youtube.html +1 -1
  138. package/.next/standalone/.next/server/app/youtube.rsc +16 -16
  139. package/.next/standalone/.next/server/app/youtube.segments/_full.segment.rsc +16 -16
  140. package/.next/standalone/.next/server/app/youtube.segments/_head.segment.rsc +4 -4
  141. package/.next/standalone/.next/server/app/youtube.segments/_index.segment.rsc +11 -11
  142. package/.next/standalone/.next/server/app/youtube.segments/_tree.segment.rsc +2 -2
  143. package/.next/standalone/.next/server/app/youtube.segments/youtube/__PAGE__.segment.rsc +2 -2
  144. package/.next/standalone/.next/server/app/youtube.segments/youtube.segment.rsc +3 -3
  145. package/.next/standalone/.next/server/app-paths-manifest.json +1 -0
  146. package/.next/standalone/.next/server/chunks/[externals]__0j1rmnr._.js +3 -0
  147. package/.next/standalone/.next/server/chunks/[root-of-the-server]__0ikt5.y._.js +3 -0
  148. package/.next/standalone/.next/server/chunks/_next-internal_server_app_api_youtube_audio_route_actions_0ix49ob.js +3 -0
  149. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0-tq1if._.js +3 -0
  150. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0zs1ztp._.js +3 -0
  151. package/.next/standalone/.next/server/chunks/ssr/{[root-of-the-server]__0w7m.s8._.js → [root-of-the-server]__13tszzt._.js} +2 -2
  152. package/.next/standalone/.next/server/chunks/ssr/_05uoimn._.js +1 -1
  153. package/.next/standalone/.next/server/chunks/ssr/_0b8qx~m._.js +1 -1
  154. package/.next/standalone/.next/server/functions-config-manifest.json +3 -1
  155. package/.next/standalone/.next/server/middleware-build-manifest.js +3 -3
  156. package/.next/standalone/.next/server/pages/404.html +1 -1
  157. package/.next/standalone/.next/server/pages/500.html +1 -1
  158. package/.next/standalone/.next/static/chunks/0lhqk6x34unxe.css +3 -0
  159. package/.next/standalone/.next/static/chunks/0r32qvgl36~jc.js +1 -0
  160. package/.next/standalone/.next/static/chunks/0~phgwn0_69_u.js +1 -0
  161. package/.next/standalone/.next/static/chunks/{0pmdnv4s~ewq~.js → 16kria84.v_he.js} +1 -1
  162. package/.next/standalone/package.json +101 -100
  163. package/package.json +101 -100
  164. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__03-3mbr._.js +0 -3
  165. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0rojnap._.js +0 -3
  166. package/.next/standalone/.next/static/chunks/0.lupx4pzsf~o.css +0 -3
  167. package/.next/standalone/.next/static/chunks/015agggs30k0p.js +0 -1
  168. package/.next/standalone/.next/static/chunks/02r.ik~_51-c2.js +0 -1
  169. /package/.next/standalone/.next/static/{boRiHjPbPt3qjgYApnVFs → Ez87CktJcg9_xUZRSbiRz}/_buildManifest.js +0 -0
  170. /package/.next/standalone/.next/static/{boRiHjPbPt3qjgYApnVFs → Ez87CktJcg9_xUZRSbiRz}/_clientMiddlewareManifest.js +0 -0
  171. /package/.next/standalone/.next/static/{boRiHjPbPt3qjgYApnVFs → Ez87CktJcg9_xUZRSbiRz}/_ssgManifest.js +0 -0
@@ -1 +1 @@
1
- (globalThis.TURBOPACK||(globalThis.TURBOPACK=[])).push(["object"==typeof document?document.currentScript:void 0,32537,(e,t,r)=>{"use strict";var i=/; *([!#$%&'*+.^_`|~0-9A-Za-z-]+) *= *("(?:[\u000b\u0020\u0021\u0023-\u005b\u005d-\u007e\u0080-\u00ff]|\\[\u000b\u0020-\u00ff])*"|[!#$%&'*+.^_`|~0-9A-Za-z-]+) */g,a=/^[\u000b\u0020-\u007e\u0080-\u00ff]+$/,n=/^[!#$%&'*+.^_`|~0-9A-Za-z-]+$/,s=/\\([\u000b\u0020-\u00ff])/g,o=/([\\"])/g,l=/^[!#$%&'*+.^_`|~0-9A-Za-z-]+\/[!#$%&'*+.^_`|~0-9A-Za-z-]+$/;function c(e){this.parameters=Object.create(null),this.type=e}r.format=function(e){if(!e||"object"!=typeof e)throw TypeError("argument obj is required");var t=e.parameters,r=e.type;if(!r||!l.test(r))throw TypeError("invalid type");var i=r;if(t&&"object"==typeof t)for(var s,c=Object.keys(t).sort(),u=0;u<c.length;u++){if(s=c[u],!n.test(s))throw TypeError("invalid parameter name");i+="; "+s+"="+function(e){var t=String(e);if(n.test(t))return t;if(t.length>0&&!a.test(t))throw TypeError("invalid parameter value");return'"'+t.replace(o,"\\$1")+'"'}(t[s])}return i},r.parse=function(e){if(!e)throw TypeError("argument string is required");var t,r,a,n="object"==typeof e?function(e){var t;if("function"==typeof e.getHeader?t=e.getHeader("content-type"):"object"==typeof e.headers&&(t=e.headers&&e.headers["content-type"]),"string"!=typeof t)throw TypeError("content-type header is missing from object");return t}(e):e;if("string"!=typeof n)throw TypeError("argument string is required to be a string");var o=n.indexOf(";"),u=-1!==o?n.slice(0,o).trim():n.trim();if(!l.test(u))throw TypeError("invalid media type");var m=new c(u.toLowerCase());if(-1!==o){for(i.lastIndex=o;r=i.exec(n);){if(r.index!==o)throw TypeError("invalid parameter format");o+=r[0].length,t=r[1].toLowerCase(),34===(a=r[2]).charCodeAt(0)&&-1!==(a=a.slice(1,-1)).indexOf("\\")&&(a=a.replace(s,"$1")),m.parameters[t]=a}if(o!==n.length)throw TypeError("invalid parameter format")}return m}},82087,(e,t,r)=>{"use strict";var i=/^[A-Za-z0-9][A-Za-z0-9!#$&^_.-]{0,126}$/,a=/^[A-Za-z0-9][A-Za-z0-9!#$&^_-]{0,126}$/,n=/^ *([A-Za-z0-9][A-Za-z0-9!#$&^_-]{0,126})\/([A-Za-z0-9][A-Za-z0-9!#$&^_.+-]{0,126}) *$/;function s(e,t,r){this.type=e,this.subtype=t,this.suffix=r}r.format=function(e){if(!e||"object"!=typeof e)throw TypeError("argument obj is required");var t=e.subtype,r=e.suffix,n=e.type;if(!n||!a.test(n))throw TypeError("invalid type");if(!t||!i.test(t))throw TypeError("invalid subtype");var s=n+"/"+t;if(r){if(!a.test(r))throw TypeError("invalid suffix");s+="+"+r}return s},r.parse=function(e){if(!e)throw TypeError("argument string is required");if("string"!=typeof e)throw TypeError("argument string is required to be a string");var t,r=n.exec(e.toLowerCase());if(!r)throw TypeError("invalid media type");var i=r[1],a=r[2],o=a.lastIndexOf("+");return -1!==o&&(t=a.substr(o+1),a=a.substr(0,o)),new s(i,a,t)},r.test=function(e){if(!e)throw TypeError("argument string is required");if("string"!=typeof e)throw TypeError("argument string is required to be a string");return n.test(e.toLowerCase())}},70487,75397,21589,30164,66951,99513,97891,4728,91768,73973,41490,38602,34713,74061,75878,81193,71569,56784,95772,8998,32022,63080,45461,e=>{"use strict";e.s(["LibraryProvider",()=>rT,"useLibrary",()=>rw],70487);var t=e.i(8063),r=e.i(51268);function i(e){return`${e.source}\u0000${e.query.trim().toLowerCase()}`}let a="muzical.recentBrowseSearches";function n(e){try{window.localStorage.setItem(a,JSON.stringify(e))}catch{}}e.s(["DEFAULT_BROWSE_VIEW_STORAGE_KEY",0,"muzical.defaultBrowseView","RECENT_BROWSE_SEARCHES_LIMIT",0,12,"RECENT_BROWSE_SEARCHES_STORAGE_KEY",0,a],75397);let s="muzical-library",o="libraryRoots",l="libraryCatalog",c=[".mp3",".flac",".m4a",".aac",".ogg",".opus",".wav",".webm",".aiff",".aif",".alac",".wma"];e.s(["LIBRARY_AUDIO_EXTENSIONS",0,c,"LIBRARY_CATALOG_STORE_NAME",0,l,"LIBRARY_DB_NAME",0,s,"LIBRARY_DB_VERSION",0,3,"LIBRARY_STORE_NAME",0,o],21589);let u="catalog",m="favorites";function d(e,t,r){if(!e.objectStoreNames.contains(l))return Promise.reject(Error(`Missing object store ${l}`));let i={key:u,rootIds:[...t].sort((e,t)=>e.localeCompare(t,void 0,{sensitivity:"base"})),tracks:[...r],savedAt:Date.now()};return new Promise((t,r)=>{let a=e.transaction(l,"readwrite"),n=a.objectStore(l).put(i);n.onerror=()=>{r(n.error??Error("IndexedDB catalog put failed"))},a.oncomplete=()=>{t()},a.onerror=()=>{r(a.error??Error("IndexedDB catalog transaction failed"))}})}let f=()=>({key:m,songIds:[],artistNames:[],albumKeys:[]});function p(e){if(e instanceof DOMException){if("AbortError"===e.name)return"";if("SecurityError"===e.name||"NotAllowedError"===e.name||e.message.includes("not allowed by the user agent")||e.message.includes("The request is not allowed"))return"Folder access is blocked in this context. Open the app in Chrome or Edge in a normal window (not an embedded preview), and use https:// or http://localhost."}if(e instanceof Error){let t=e.message;return t.includes("not allowed by the user agent")||t.includes("The request is not allowed")?"Folder access is blocked in this context. Open the app in Chrome or Edge in a normal window (not an embedded preview), and use https:// or http://localhost.":t}return"Could not access the folder."}let h=new Set(c);function g(e,t){let r=e.lastIndexOf(".");if(r<0)return e;let i=e.slice(r).toLowerCase();return(t??h).has(i)?e.slice(0,r):e}function b(e){let t=e.library;if(!t)return null;let{fileLastModified:r,fileSize:i}=t;return"number"==typeof r&&Number.isFinite(r)&&"number"==typeof i&&Number.isFinite(i)&&!(i<0)?{fileLastModified:r,fileSize:i}:null}e.s(["parseBlob",()=>eJ,"scanAppendingHeaders",()=>e0],30164);var y=e.i(52333),x=e.i(81995),k=e.i(67396),T=e.i(93432);let w={get:e=>({signature:x.UINT32_LE.get(e,0),compressedSize:x.UINT32_LE.get(e,8),uncompressedSize:x.UINT32_LE.get(e,12)}),len:16},S={get(e){let t=x.UINT16_LE.get(e,6);return{signature:x.UINT32_LE.get(e,0),minVersion:x.UINT16_LE.get(e,4),dataDescriptor:!!(8&t),compressedMethod:x.UINT16_LE.get(e,8),compressedSize:x.UINT32_LE.get(e,18),uncompressedSize:x.UINT32_LE.get(e,22),filenameLength:x.UINT16_LE.get(e,26),extraFieldLength:x.UINT16_LE.get(e,28),filename:null}},len:30},I={get:e=>({signature:x.UINT32_LE.get(e,0),nrOfThisDisk:x.UINT16_LE.get(e,4),nrOfThisDiskWithTheStart:x.UINT16_LE.get(e,6),nrOfEntriesOnThisDisk:x.UINT16_LE.get(e,8),nrOfEntriesOfSize:x.UINT16_LE.get(e,10),sizeOfCd:x.UINT32_LE.get(e,12),offsetOfStartOfCd:x.UINT32_LE.get(e,16),zipFileCommentLength:x.UINT16_LE.get(e,20)}),len:22},v={get(e){let t=x.UINT16_LE.get(e,8);return{signature:x.UINT32_LE.get(e,0),minVersion:x.UINT16_LE.get(e,6),dataDescriptor:!!(8&t),compressedMethod:x.UINT16_LE.get(e,10),compressedSize:x.UINT32_LE.get(e,20),uncompressedSize:x.UINT32_LE.get(e,24),filenameLength:x.UINT16_LE.get(e,28),extraFieldLength:x.UINT16_LE.get(e,30),fileCommentLength:x.UINT16_LE.get(e,32),relativeOffsetOfLocalHeader:x.UINT32_LE.get(e,42),filename:null}},len:46};function A(e){let t=new Uint8Array(x.UINT32_LE.len);return x.UINT32_LE.put(t,0,e),t}let E=(0,T.default)("tokenizer:inflate"),C=A(0x8074b50),z=A(0x6054b50);class _{constructor(e){this.tokenizer=e,this.syncBuffer=new Uint8Array(262144)}async isZip(){return await this.peekSignature()===0x4034b50}peekSignature(){return this.tokenizer.peekToken(x.UINT32_LE)}async findEndOfCentralDirectoryLocator(){let e=this.tokenizer,t=Math.min(16384,e.fileInfo.size),r=this.syncBuffer.subarray(0,t);await this.tokenizer.readBuffer(r,{position:e.fileInfo.size-t});for(let i=r.length-4;i>=0;i--)if(r[i]===z[0]&&r[i+1]===z[1]&&r[i+2]===z[2]&&r[i+3]===z[3])return e.fileInfo.size-t+i;return -1}async readCentralDirectory(){if(!this.tokenizer.supportsRandomAccess())return void E("Cannot reading central-directory without random-read support");E("Reading central-directory...");let e=this.tokenizer.position,t=await this.findEndOfCentralDirectoryLocator();if(t>0){E("Central-directory 32-bit signature found");let r=await this.tokenizer.readToken(I,t),i=[];this.tokenizer.setPosition(r.offsetOfStartOfCd);for(let e=0;e<r.nrOfEntriesOfSize;++e){let t=await this.tokenizer.readToken(v);if(0x2014b50!==t.signature)throw Error("Expected Central-File-Header signature");t.filename=await this.tokenizer.readToken(new x.StringType(t.filenameLength,"utf-8")),await this.tokenizer.ignore(t.extraFieldLength),await this.tokenizer.ignore(t.fileCommentLength),i.push(t),E(`Add central-directory file-entry: n=${e+1}/${i.length}: filename=${i[e].filename}`)}return this.tokenizer.setPosition(e),i}this.tokenizer.setPosition(e)}async unzip(e){let t=await this.readCentralDirectory();if(t)return this.iterateOverCentralDirectory(t,e);let r=!1;do{let t,i=await this.readLocalFileHeader();if(!i)break;let a=e(i);if(r=!!a.stop,await this.tokenizer.ignore(i.extraFieldLength),i.dataDescriptor&&0===i.compressedSize){let e=[],t=262144;E("Compressed-file-size unknown, scanning for next data-descriptor-signature....");let r=-1;for(;r<0&&262144===t;){t=await this.tokenizer.peekBuffer(this.syncBuffer,{mayBeLess:!0});let i=(r=function(e,t){let r=e.length,i=t.length;if(i>r)return -1;for(let a=0;a<=r-i;a++){let r=!0;for(let n=0;n<i;n++)if(e[a+n]!==t[n]){r=!1;break}if(r)return a}return -1}(this.syncBuffer.subarray(0,t),C))>=0?r:t;if(a.handler){let t=new Uint8Array(i);await this.tokenizer.readBuffer(t),e.push(t)}else await this.tokenizer.ignore(i)}E(`Found data-descriptor-signature at pos=${this.tokenizer.position}`),a.handler&&await this.inflate(i,function(e){let t=new Uint8Array(e.reduce((e,t)=>e+t.length,0)),r=0;for(let i of e)t.set(i,r),r+=i.length;return t}(e),a.handler)}else a.handler?(E(`Reading compressed-file-data: ${i.compressedSize} bytes`),t=new Uint8Array(i.compressedSize),await this.tokenizer.readBuffer(t),await this.inflate(i,t,a.handler)):(E(`Ignoring compressed-file-data: ${i.compressedSize} bytes`),await this.tokenizer.ignore(i.compressedSize));if(E(`Reading data-descriptor at pos=${this.tokenizer.position}`),i.dataDescriptor&&0x8074b50!==(await this.tokenizer.readToken(w)).signature)throw Error(`Expected data-descriptor-signature at position ${this.tokenizer.position-w.len}`)}while(!r)}async iterateOverCentralDirectory(e,t){for(let r of e){let e=t(r);if(e.handler){this.tokenizer.setPosition(r.relativeOffsetOfLocalHeader);let t=await this.readLocalFileHeader();if(t){await this.tokenizer.ignore(t.extraFieldLength);let i=new Uint8Array(r.compressedSize);await this.tokenizer.readBuffer(i),await this.inflate(t,i,e.handler)}}if(e.stop)break}}async inflate(e,t,r){if(0===e.compressedMethod)return r(t);if(8!==e.compressedMethod)throw Error(`Unsupported ZIP compression method: ${e.compressedMethod}`);return E(`Decompress filename=${e.filename}, compressed-size=${t.length}`),r(await _.decompressDeflateRaw(t))}static async decompressDeflateRaw(e){let t=new ReadableStream({start(t){t.enqueue(e),t.close()}}),r=new DecompressionStream("deflate-raw"),i=t.pipeThrough(r);try{let e=new Response(i),t=await e.arrayBuffer();return new Uint8Array(t)}catch(e){throw TypeError(e instanceof Error?`Failed to deflate ZIP entry: ${e.message}`:"Unknown decompression error in ZIP entry")}}async readLocalFileHeader(){let e=await this.tokenizer.peekToken(x.UINT32_LE);if(0x4034b50===e){let e=await this.tokenizer.readToken(S);return e.filename=await this.tokenizer.readToken(new x.StringType(e.filenameLength,"utf-8")),e}if(0x2014b50===e)return!1;if(0xe011cfd0===e)throw Error("Encrypted ZIP");throw Error("Unexpected signature")}}class N{constructor(e){this.tokenizer=e}inflate(){let e=this.tokenizer;return new ReadableStream({async pull(t){let r=new Uint8Array(1024),i=await e.readBuffer(r,{mayBeLess:!0});0===i?t.close():t.enqueue(r.subarray(0,i))}}).pipeThrough(new DecompressionStream("gzip"))}}var M=e.i(44397);let R={get:(e,t)=>127&e[t+3]|e[t+2]<<7|e[t+1]<<14|e[t]<<21,len:4},L=0x80000000-1,P=new Set(["Unexpected signature","Encrypted ZIP","Expected Central-File-Header signature"]),D=["ZIP entry count exceeds ","Unsupported ZIP compression method:","ZIP entry compressed data exceeds ","ZIP entry decompressed data exceeds ","Expected data-descriptor-signature at position "],O=new Set(["Z_BUF_ERROR","Z_DATA_ERROR","ERR_INVALID_STATE"]);class U extends Error{}function B(e,t,r){if(!Number.isFinite(e)||e<0||e>t)throw new U(`${r} has invalid size ${e} (maximum ${t} bytes)`);return e}async function j(e,t,{maximumLength:r=0x1000000,reason:i="skip"}={}){let a=B(t,r,i);await e.ignore(a)}async function F(e,t,r,{maximumLength:i=t.length,reason:a="read"}={}){let n=B(r?.length??t.length,i,a);return e.readBuffer(t,{...r,length:n})}async function X(e,{maximumLength:t=1048576}={}){let r=new ReadableStream({start(t){t.enqueue(e),t.close()}}).pipeThrough(new DecompressionStream("deflate-raw")).getReader(),i=[],a=0;try{for(;;){let{done:e,value:n}=await r.read();if(e)break;if((a+=n.length)>t)throw await r.cancel(),Error(`ZIP entry decompressed data exceeds ${t} bytes`);i.push(n)}}finally{r.releaseLock()}let n=new Uint8Array(a),s=0;for(let e of i)n.set(e,s),s+=e.length;return n}async function $(e,{shouldBuffer:t,maximumLength:r=1048576}={}){let{syncBuffer:i}=e,{length:a}=i,n=[],s=0;for(;;){let o=await e.tokenizer.peekBuffer(i,{mayBeLess:!0}),l=function(e,t){if(e.length<16)return -1;let r=e.length-16;for(let i=0;i<=r;i++)if(0x8074b50===x.UINT32_LE.get(e,i)&&x.UINT32_LE.get(e,i+8)===t+i)return i;return -1}(i.subarray(0,o),s),c=l>=0?0:o===a?Math.min(15,o-1):0,u=l>=0?l:o-c;if(0===u)break;if((s+=u)>r)throw Error(`ZIP entry compressed data exceeds ${r} bytes`);if(t){let t=new Uint8Array(u);await e.tokenizer.readBuffer(t),n.push(t)}else await e.tokenizer.ignore(u);if(l>=0)break}if(V(e.tokenizer)||(e.knownSizeDescriptorScannedBytes+=s),t){let e=new Uint8Array(s),t=0;for(let r of n)e.set(r,t),t+=r.length;return e}}async function G(e,t,{shouldBuffer:r,maximumDescriptorLength:i=1048576}={}){var a;let n;if(t.dataDescriptor&&0===t.compressedSize)return $(e,{shouldBuffer:r,maximumLength:i});if(!r)return void await j(e.tokenizer,t.compressedSize,{maximumLength:V(e.tokenizer)?1048576:e.tokenizer.fileInfo.size,reason:"ZIP entry compressed data"});let s=Math.min(Number.isFinite(n=(a=e.tokenizer).fileInfo.size)?Math.max(0,n-a.position):Number.MAX_SAFE_INTEGER,L);if(!Number.isFinite(t.compressedSize)||t.compressedSize<0||t.compressedSize>s)throw Error(`ZIP entry compressed data exceeds ${s} bytes`);let o=new Uint8Array(t.compressedSize);return await e.tokenizer.readBuffer(o),o}async function W(e,t){return new Q(t).fromBuffer(e)}function q(e){switch(e=e.toLowerCase()){case"application/epub+zip":return{ext:"epub",mime:e};case"application/vnd.oasis.opendocument.text":return{ext:"odt",mime:e};case"application/vnd.oasis.opendocument.text-template":return{ext:"ott",mime:e};case"application/vnd.oasis.opendocument.spreadsheet":return{ext:"ods",mime:e};case"application/vnd.oasis.opendocument.spreadsheet-template":return{ext:"ots",mime:e};case"application/vnd.oasis.opendocument.presentation":return{ext:"odp",mime:e};case"application/vnd.oasis.opendocument.presentation-template":return{ext:"otp",mime:e};case"application/vnd.oasis.opendocument.graphics":return{ext:"odg",mime:e};case"application/vnd.oasis.opendocument.graphics-template":return{ext:"otg",mime:e};case"application/vnd.openxmlformats-officedocument.presentationml.slideshow":return{ext:"ppsx",mime:e};case"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet":return{ext:"xlsx",mime:e};case"application/vnd.ms-excel.sheet.macroenabled":return{ext:"xlsm",mime:"application/vnd.ms-excel.sheet.macroenabled.12"};case"application/vnd.openxmlformats-officedocument.spreadsheetml.template":return{ext:"xltx",mime:e};case"application/vnd.ms-excel.template.macroenabled":return{ext:"xltm",mime:"application/vnd.ms-excel.template.macroenabled.12"};case"application/vnd.ms-powerpoint.slideshow.macroenabled":return{ext:"ppsm",mime:"application/vnd.ms-powerpoint.slideshow.macroenabled.12"};case"application/vnd.openxmlformats-officedocument.wordprocessingml.document":return{ext:"docx",mime:e};case"application/vnd.ms-word.document.macroenabled":return{ext:"docm",mime:"application/vnd.ms-word.document.macroenabled.12"};case"application/vnd.openxmlformats-officedocument.wordprocessingml.template":return{ext:"dotx",mime:e};case"application/vnd.ms-word.template.macroenabledtemplate":return{ext:"dotm",mime:"application/vnd.ms-word.template.macroenabled.12"};case"application/vnd.openxmlformats-officedocument.presentationml.template":return{ext:"potx",mime:e};case"application/vnd.ms-powerpoint.template.macroenabled":return{ext:"potm",mime:"application/vnd.ms-powerpoint.template.macroenabled.12"};case"application/vnd.openxmlformats-officedocument.presentationml.presentation":return{ext:"pptx",mime:e};case"application/vnd.ms-powerpoint.presentation.macroenabled":return{ext:"pptm",mime:"application/vnd.ms-powerpoint.presentation.macroenabled.12"};case"application/vnd.ms-visio.drawing":return{ext:"vsdx",mime:"application/vnd.visio"};case"application/vnd.ms-package.3dmanufacturing-3dmodel+xml":return{ext:"3mf",mime:"model/3mf"}}}function Y(e,t,r){for(let[i,a]of(r={offset:0,...r},t.entries()))if(r.mask){if(a!==(r.mask[i]&e[i+r.offset]))return!1}else if(a!==e[i+r.offset])return!1;return!0}function V(e){let t=e.fileInfo.size;return!Number.isFinite(t)||t===Number.MAX_SAFE_INTEGER}function Z(e,t,r){return V(e)&&e.position-t>r}function K(e,t=1048576){for(let r of[e.compressedSize,e.uncompressedSize])if(!Number.isFinite(r)||r<0||r>t)return!1;return!0}function H(e){if(e.hasContentTypesEntry&&!e.hasUnparseableContentTypes&&!e.isParsingContentTypes&&!e.hasParsedContentTypesEntry){if(e.hasWordDirectory)return{ext:"docx",mime:"application/vnd.openxmlformats-officedocument.wordprocessingml.document"};if(e.hasPresentationDirectory)return{ext:"pptx",mime:"application/vnd.openxmlformats-officedocument.presentationml.presentation"};if(e.hasSpreadsheetDirectory)return{ext:"xlsx",mime:"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"};if(e.hasThreeDimensionalModelEntry)return{ext:"3mf",mime:"model/3mf"}}}_.prototype.inflate=async function(e,t,r){if(0===e.compressedMethod)return r(t);if(8!==e.compressedMethod)throw Error(`Unsupported ZIP compression method: ${e.compressedMethod}`);return r(await X(t,{maximumLength:1048576}))},_.prototype.unzip=async function(e){let t=!1,r=0,i=this.tokenizer.position;this.knownSizeDescriptorScannedBytes=0;do{if(Z(this.tokenizer,i,0x1000000))throw new U("ZIP stream probing exceeds 16777216 bytes");let a=await this.readLocalFileHeader();if(!a)break;if(++r>1024)throw Error("ZIP entry count exceeds 1024");let n=e(a);t=!!n.stop,await this.tokenizer.ignore(a.extraFieldLength);let s=await G(this,a,{shouldBuffer:!!n.handler,maximumDescriptorLength:Math.min(1048576,V(this.tokenizer)?Math.max(0,0x1000000-(this.tokenizer.position-i)):Math.max(0,1048576-this.knownSizeDescriptorScannedBytes))});if(n.handler&&await this.inflate(a,s,n.handler),a.dataDescriptor){let e=new Uint8Array(16);if(await this.tokenizer.readBuffer(e),0x8074b50!==x.UINT32_LE.get(e,0))throw Error(`Expected data-descriptor-signature at position ${this.tokenizer.position-e.length}`)}if(Z(this.tokenizer,i,0x1000000))throw new U("ZIP stream probing exceeds 16777216 bytes")}while(!t)};class Q{constructor(e){const t=function(e){return Number.isFinite(e)?Math.max(0,Math.min(4098,Math.trunc(e))):0}(e?.mpegOffsetTolerance);this.options={...e,mpegOffsetTolerance:t},this.detectors=[...this.options.customDetectors??[],{id:"core",detect:this.detectConfident},{id:"core.imprecise",detect:this.detectImprecise}],this.tokenizerOptions={abortSignal:this.options.signal},this.gzipProbeDepth=0}getTokenizerOptions(){return{...this.tokenizerOptions}}createTokenizerFromWebStream(e){return function(e){let t=e?.streamReader;if(t?.constructor?.name!=="WebStreamByobReader")return e;let{reader:r}=t,i=async()=>{await r.cancel(),r.releaseLock()};return t.close=i,t.abort=async()=>{t.interrupted=!0,await i()},e}(y.fromWebStream(e,this.getTokenizerOptions()))}async parseTokenizer(e,t=0){this.detectionReentryCount=t;let r=e.position;for(let t of this.detectors){let i;try{i=await t.detect(e)}catch(e){if(e instanceof k.EndOfStreamError||e instanceof U)return;throw e}if(i)return i;if(r!==e.position)return}}async fromTokenizer(e){try{return await this.parseTokenizer(e)}finally{await e.close()}}async fromBuffer(e){if(!(e instanceof Uint8Array||e instanceof ArrayBuffer))throw TypeError(`Expected the \`input\` argument to be of type \`Uint8Array\` or \`ArrayBuffer\`, got \`${typeof e}\``);let t=e instanceof Uint8Array?e:new Uint8Array(e);if(t?.length>1)return this.fromTokenizer(y.fromBuffer(t,this.getTokenizerOptions()))}async fromBlob(e){this.options.signal?.throwIfAborted();let t=y.fromBlob(e,this.getTokenizerOptions());return this.fromTokenizer(t)}async fromStream(e){this.options.signal?.throwIfAborted();let t=this.createTokenizerFromWebStream(e);return this.fromTokenizer(t)}async toDetectionStream(e,t){var r,i,a;let n,s,o=Number.isFinite(r=t?.sampleSize??4100)?Math.max(1,Math.trunc(r)):4100,l=e.getReader({mode:"byob"});try{let{value:e,done:t}=await (i=new Uint8Array(o),a=this.options.signal,void 0===a?l.read(i):(a.throwIfAborted(),new Promise((e,t)=>{let r=()=>{a.removeEventListener("abort",n)},n=()=>{let e=a.reason;r(),(async()=>{try{await l.cancel(e)}catch{}})(),t(e)};a.addEventListener("abort",n,{once:!0}),(async()=>{try{let t=await l.read(i);r(),e(t)}catch(e){r(),t(e)}})()})));if(s=e,!t&&e)try{n=await this.fromBuffer(e.subarray(0,o))}catch(e){if(!(e instanceof k.EndOfStreamError))throw e;n=void 0}s=e}finally{l.releaseLock()}let c=new TransformStream({async start(e){e.enqueue(s)},transform(e,t){t.enqueue(e)}}),u=e.pipeThrough(c);return u.fileType=n,u}async detectGzip(e){let t,r,i,a,n,s,o,l,c;if(this.gzipProbeDepth>=1)return{ext:"gz",mime:"application/gzip"};let u=(n=new N(e).inflate().getReader(),s=0,o=!1,l=!1,c=async e=>{o||l||(l=!0,await n.cancel(e))},new ReadableStream({async pull(e){if(s>=0x1000000){e.close(),await c();return}let{done:t,value:r}=await n.read();if(t||!r){o=!0,e.close();return}let i=0x1000000-s;if(r.length>i){e.enqueue(r.subarray(0,i)),s+=i,e.close(),await c();return}e.enqueue(r),s+=r.length},async cancel(e){await c(e)}})),m=V(e);if(m){let e=new AbortController;t=setTimeout(()=>{e.abort(new DOMException("Operation timed out after 100 ms","TimeoutError"))},100),r=void 0===this.options.signal?e.signal:AbortSignal.any([this.options.signal,e.signal]),(i=new Q({...this.options,signal:r})).gzipProbeDepth=this.gzipProbeDepth+1}else this.gzipProbeDepth++;try{a=await (i??this).fromStream(u)}catch(e){if(e?.name==="AbortError"&&r?.reason?.name!=="TimeoutError")throw e}finally{clearTimeout(t),!m&&this.gzipProbeDepth--}return a?.ext==="tar"?{ext:"tar.gz",mime:"application/gzip"}:{ext:"gz",mime:"application/gzip"}}check(e,t){return Y(this.buffer,e,t)}checkString(e,t){return this.check(function(e,t){if("utf-16le"===t){let t=[];for(let r=0;r<e.length;r++){let i=e.charCodeAt(r);t.push(255&i,i>>8&255)}return t}if("utf-16be"===t){let t=[];for(let r=0;r<e.length;r++){let i=e.charCodeAt(r);t.push(i>>8&255,255&i)}return t}return[...e].map(e=>e.charCodeAt(0))}(e,t?.encoding),t)}detectConfident=async e=>{if(this.buffer=new Uint8Array(4100),void 0===e.fileInfo.size&&(e.fileInfo.size=Number.MAX_SAFE_INTEGER),this.tokenizer=e,V(e)&&(await e.peekBuffer(this.buffer,{length:3,mayBeLess:!0}),this.check([31,139,8])))return this.detectGzip(e);if(await e.peekBuffer(this.buffer,{length:32,mayBeLess:!0}),this.check([66,77]))return{ext:"bmp",mime:"image/bmp"};if(this.check([11,119]))return{ext:"ac3",mime:"audio/vnd.dolby.dd-raw"};if(this.check([120,1]))return{ext:"dmg",mime:"application/x-apple-diskimage"};if(this.check([77,90]))return{ext:"exe",mime:"application/x-msdownload"};if(this.check([37,33]))return(await e.peekBuffer(this.buffer,{length:24,mayBeLess:!0}),this.checkString("PS-Adobe-",{offset:2})&&this.checkString(" EPSF-",{offset:14}))?{ext:"eps",mime:"application/eps"}:{ext:"ps",mime:"application/postscript"};if(this.check([31,160])||this.check([31,157]))return{ext:"Z",mime:"application/x-compress"};if(this.check([199,113]))return{ext:"cpio",mime:"application/x-cpio"};if(this.check([96,234]))return{ext:"arj",mime:"application/x-arj"};if(this.check([239,187,191])){if(this.detectionReentryCount>=256)return;return this.detectionReentryCount++,await this.tokenizer.ignore(3),this.detectConfident(e)}if(this.check([71,73,70]))return{ext:"gif",mime:"image/gif"};if(this.check([73,73,188]))return{ext:"jxr",mime:"image/vnd.ms-photo"};if(this.check([31,139,8]))return this.detectGzip(e);if(this.check([66,90,104]))return{ext:"bz2",mime:"application/x-bzip2"};if(this.checkString("ID3")){await j(e,6,{maximumLength:6,reason:"ID3 header prefix"});let t=await e.readToken(R),r=V(e);if(!Number.isFinite(t)||t<0||r&&(t>0x1000000||e.position+t>0x1000000))return;if(e.position+t>e.fileInfo.size){if(r)return;return{ext:"mp3",mime:"audio/mpeg"}}try{await j(e,t,{maximumLength:r?0x1000000:e.fileInfo.size,reason:"ID3 payload"})}catch(e){if(e instanceof k.EndOfStreamError)return;throw e}if(this.detectionReentryCount>=256)return;return this.detectionReentryCount++,this.parseTokenizer(e,this.detectionReentryCount)}if(this.checkString("MP+"))return{ext:"mpc",mime:"audio/x-musepack"};if((67===this.buffer[0]||70===this.buffer[0])&&this.check([87,83],{offset:1}))return{ext:"swf",mime:"application/x-shockwave-flash"};if(this.check([255,216,255]))return this.check([247],{offset:3})?{ext:"jls",mime:"image/jls"}:{ext:"jpg",mime:"image/jpeg"};if(this.check([79,98,106,1]))return{ext:"avro",mime:"application/avro"};if(this.checkString("FLIF"))return{ext:"flif",mime:"image/flif"};if(this.checkString("8BPS"))return{ext:"psd",mime:"image/vnd.adobe.photoshop"};if(this.checkString("MPCK"))return{ext:"mpc",mime:"audio/x-musepack"};if(this.checkString("FORM"))return{ext:"aif",mime:"audio/aiff"};if(this.checkString("icns",{offset:0}))return{ext:"icns",mime:"image/icns"};if(this.check([80,75,3,4])){let t,r={hasContentTypesEntry:!1,hasParsedContentTypesEntry:!1,isParsingContentTypes:!1,hasUnparseableContentTypes:!1,hasWordDirectory:!1,hasPresentationDirectory:!1,hasSpreadsheetDirectory:!1,hasThreeDimensionalModelEntry:!1};try{await new _(e).unzip(e=>{var i;(i=e.filename).startsWith("word/")&&(r.hasWordDirectory=!0),i.startsWith("ppt/")&&(r.hasPresentationDirectory=!0),i.startsWith("xl/")&&(r.hasSpreadsheetDirectory=!0),i.startsWith("3D/")&&i.endsWith(".model")&&(r.hasThreeDimensionalModelEntry=!0);let a="[Content_Types].xml"===e.filename,n=H(r);if(!a&&n)return t=n,{stop:!0};switch(e.filename){case"META-INF/mozilla.rsa":return t={ext:"xpi",mime:"application/x-xpinstall"},{stop:!0};case"META-INF/MANIFEST.MF":return t={ext:"jar",mime:"application/java-archive"},{stop:!0};case"mimetype":if(!K(e,1048576))return{};return{async handler(e){let r=new TextDecoder("utf-8").decode(e).trim();t=q(r)},stop:!0};case"[Content_Types].xml":if(r.hasContentTypesEntry=!0,!K(e,1048576))return r.hasUnparseableContentTypes=!0,{};return r.isParsingContentTypes=!0,{async handler(e){let i=new TextDecoder("utf-8").decode(e),a=function(e){let t=e.indexOf('.main+xml"');if(-1===t){let t="application/vnd.ms-package.3dmanufacturing-3dmodel+xml";return e.includes(`ContentType="${t}"`)?t:void 0}let r=e.slice(0,t),i=r.lastIndexOf('"');return r.slice(i+1)}(i);a&&(t=q(a)),r.hasParsedContentTypesEntry=!0,r.isParsingContentTypes=!1},stop:!0};default:if(/classes\d*\.dex/.test(e.filename))return t={ext:"apk",mime:"application/vnd.android.package-archive"},{stop:!0};return{}}})}catch(e){if(!function(e){if(e instanceof k.EndOfStreamError||e instanceof U)return!0;if(!(e instanceof Error))return!1;if(P.has(e.message)||O.has(e.code))return!0;for(let t of D)if(e.message.startsWith(t))return!0;return!1}(e))throw e;r.isParsingContentTypes&&(r.isParsingContentTypes=!1,r.hasUnparseableContentTypes=!0)}return t??H(r)??{ext:"zip",mime:"application/zip"}}if(this.checkString("OggS")){await e.ignore(28);let t=new Uint8Array(8);return(await e.readBuffer(t),Y(t,[79,112,117,115,72,101,97,100]))?{ext:"opus",mime:"audio/ogg; codecs=opus"}:Y(t,[128,116,104,101,111,114,97])?{ext:"ogv",mime:"video/ogg"}:Y(t,[1,118,105,100,101,111,0])?{ext:"ogm",mime:"video/ogg"}:Y(t,[127,70,76,65,67])?{ext:"oga",mime:"audio/ogg"}:Y(t,[83,112,101,101,120,32,32])?{ext:"spx",mime:"audio/ogg"}:Y(t,[1,118,111,114,98,105,115])?{ext:"ogg",mime:"audio/ogg"}:{ext:"ogx",mime:"application/ogg"}}if(this.check([80,75])&&(3===this.buffer[2]||5===this.buffer[2]||7===this.buffer[2])&&(4===this.buffer[3]||6===this.buffer[3]||8===this.buffer[3]))return{ext:"zip",mime:"application/zip"};if(this.checkString("MThd"))return{ext:"mid",mime:"audio/midi"};if(this.checkString("wOFF")&&(this.check([0,1,0,0],{offset:4})||this.checkString("OTTO",{offset:4})))return{ext:"woff",mime:"font/woff"};if(this.checkString("wOF2")&&(this.check([0,1,0,0],{offset:4})||this.checkString("OTTO",{offset:4})))return{ext:"woff2",mime:"font/woff2"};if(this.check([212,195,178,161])||this.check([161,178,195,212]))return{ext:"pcap",mime:"application/vnd.tcpdump.pcap"};if(this.checkString("DSD "))return{ext:"dsf",mime:"audio/x-dsf"};if(this.checkString("LZIP"))return{ext:"lz",mime:"application/x-lzip"};if(this.checkString("fLaC"))return{ext:"flac",mime:"audio/flac"};if(this.check([66,80,71,251]))return{ext:"bpg",mime:"image/bpg"};if(this.checkString("wvpk"))return{ext:"wv",mime:"audio/wavpack"};if(this.checkString("%PDF"))return{ext:"pdf",mime:"application/pdf"};if(this.check([0,97,115,109]))return{ext:"wasm",mime:"application/wasm"};if(this.check([73,73])){let e=await this.readTiffHeader(!1);if(e)return e}if(this.check([77,77])){let e=await this.readTiffHeader(!0);if(e)return e}if(this.checkString("MAC "))return{ext:"ape",mime:"audio/ape"};if(this.check([26,69,223,163])){async function t(){let t=await e.peekNumber(x.UINT8),r=128,i=0;for(;(t&r)==0&&0!==r;)++i,r>>=1;let a=new Uint8Array(i+1);return await F(e,a,void 0,{maximumLength:a.length,reason:"EBML field"}),a}async function r(){let e=await t(),r=await t();r[0]^=128>>r.length-1;let i=Math.min(6,r.length),a=new DataView(e.buffer),n=new DataView(r.buffer,r.length-i,i);return{id:(0,M.getUintBE)(a),len:(0,M.getUintBE)(n)}}async function i(t){let i=0;for(;t>0;){if(++i>256||Z(e,n,0x1000000))return;let a=e.position,s=await r();if(17026===s.id){if(s.len>64)return;let t=B(s.len,64,"EBML DocType");return(await e.readToken(new x.StringType(t))).replaceAll(/\00.*$/g,"")}if(V(e)&&(!Number.isFinite(s.len)||s.len<0||s.len>1048576)||(await j(e,s.len,{maximumLength:V(e)?1048576:e.fileInfo.size,reason:"EBML payload"}),--t,e.position<=a))return}}let a=await r(),n=e.position;switch(await i(a.len)){case"webm":return{ext:"webm",mime:"video/webm"};case"matroska":return{ext:"mkv",mime:"video/matroska"};default:return}}if(this.checkString("SQLi"))return{ext:"sqlite",mime:"application/x-sqlite3"};if(this.check([78,69,83,26]))return{ext:"nes",mime:"application/x-nintendo-nes-rom"};if(this.checkString("Cr24"))return{ext:"crx",mime:"application/x-google-chrome-extension"};if(this.checkString("MSCF")||this.checkString("ISc("))return{ext:"cab",mime:"application/vnd.ms-cab-compressed"};if(this.check([237,171,238,219]))return{ext:"rpm",mime:"application/x-rpm"};if(this.check([197,208,211,198]))return{ext:"eps",mime:"application/eps"};if(this.check([40,181,47,253]))return{ext:"zst",mime:"application/zstd"};if(this.check([127,69,76,70]))return{ext:"elf",mime:"application/x-elf"};if(this.check([33,66,68,78]))return{ext:"pst",mime:"application/vnd.ms-outlook"};if(this.checkString("PAR1")||this.checkString("PARE"))return{ext:"parquet",mime:"application/vnd.apache.parquet"};if(this.checkString("ttcf"))return{ext:"ttc",mime:"font/collection"};if(this.check([254,237,250,206])||this.check([254,237,250,207])||this.check([206,250,237,254])||this.check([207,250,237,254]))return{ext:"macho",mime:"application/x-mach-binary"};if(this.check([4,34,77,24]))return{ext:"lz4",mime:"application/x-lz4"};if(this.checkString("regf"))return{ext:"dat",mime:"application/x-ft-windows-registry-hive"};if(this.checkString("$FL2")||this.checkString("$FL3"))return{ext:"sav",mime:"application/x-spss-sav"};if(this.check([79,84,84,79,0]))return{ext:"otf",mime:"font/otf"};if(this.checkString("#!AMR"))return{ext:"amr",mime:"audio/amr"};if(this.checkString("{\\rtf"))return{ext:"rtf",mime:"application/rtf"};if(this.check([70,76,86,1]))return{ext:"flv",mime:"video/x-flv"};if(this.checkString("IMPM"))return{ext:"it",mime:"audio/x-it"};if(this.checkString("-lh0-",{offset:2})||this.checkString("-lh1-",{offset:2})||this.checkString("-lh2-",{offset:2})||this.checkString("-lh3-",{offset:2})||this.checkString("-lh4-",{offset:2})||this.checkString("-lh5-",{offset:2})||this.checkString("-lh6-",{offset:2})||this.checkString("-lh7-",{offset:2})||this.checkString("-lzs-",{offset:2})||this.checkString("-lz4-",{offset:2})||this.checkString("-lz5-",{offset:2})||this.checkString("-lhd-",{offset:2}))return{ext:"lzh",mime:"application/x-lzh-compressed"};if(this.check([0,0,1,186])){if(this.check([33],{offset:4,mask:[241]}))return{ext:"mpg",mime:"video/MP1S"};if(this.check([68],{offset:4,mask:[196]}))return{ext:"mpg",mime:"video/MP2P"}}if(this.checkString("ITSF"))return{ext:"chm",mime:"application/vnd.ms-htmlhelp"};if(this.check([202,254,186,190])){let e=x.UINT32_BE.get(this.buffer,4),t=x.UINT16_BE.get(this.buffer,6);if(e>0&&e<=30)return{ext:"macho",mime:"application/x-mach-binary"};if(t>30)return{ext:"class",mime:"application/java-vm"}}if(this.checkString(".RMF"))return{ext:"rm",mime:"application/vnd.rn-realmedia"};if(this.checkString("DRACO"))return{ext:"drc",mime:"application/vnd.google.draco"};if(this.check([253,55,122,88,90,0]))return{ext:"xz",mime:"application/x-xz"};if(this.checkString("<?xml "))return{ext:"xml",mime:"application/xml"};if(this.check([55,122,188,175,39,28]))return{ext:"7z",mime:"application/x-7z-compressed"};if(this.check([82,97,114,33,26,7])&&(0===this.buffer[6]||1===this.buffer[6]))return{ext:"rar",mime:"application/x-rar-compressed"};if(this.checkString("solid "))return{ext:"stl",mime:"model/stl"};if(this.checkString("AC")){let e=new x.StringType(4,"latin1").get(this.buffer,2);if(e.match("^d*")&&e>=1e3&&e<=1050)return{ext:"dwg",mime:"image/vnd.dwg"}}if(this.checkString("070707"))return{ext:"cpio",mime:"application/x-cpio"};if(this.checkString("BLENDER"))return{ext:"blend",mime:"application/x-blender"};if(this.checkString("!<arch>"))return(await e.ignore(8),"debian-binary"===await e.readToken(new x.StringType(13,"ascii")))?{ext:"deb",mime:"application/x-deb"}:{ext:"ar",mime:"application/x-unix-archive"};if(this.checkString("WEBVTT")&&["\n","\r"," "," ","\0"].some(e=>this.checkString(e,{offset:6})))return{ext:"vtt",mime:"text/vtt"};if(this.check([137,80,78,71,13,10,26,10])){let t={ext:"png",mime:"image/png"},r={ext:"apng",mime:"image/apng"};async function a(){return{length:await e.readToken(x.INT32_BE),type:await e.readToken(new x.StringType(4,"latin1"))}}await e.ignore(8);let i=V(e),n=e.position,s=0,o=!1;do{if(++s>512||Z(e,n,0x1000000))break;let l=e.position,c=await a();if(c.length<0)return;if("IHDR"===c.type){if(13!==c.length)return;o=!0}switch(c.type){case"IDAT":return t;case"acTL":return r;default:if(!o&&"CgBI"!==c.type)return;if(i&&c.length>1048576)return o&&(32&c.type.codePointAt(0))!=0?t:void 0;try{await j(e,c.length+4,{maximumLength:i?1048580:e.fileInfo.size,reason:"PNG chunk payload"})}catch(e){if(!i&&(e instanceof U||e instanceof k.EndOfStreamError))return t;throw e}}if(e.position<=l)break}while(e.position+8<e.fileInfo.size)return t}if(this.check([65,82,82,79,87,49,0,0]))return{ext:"arrow",mime:"application/vnd.apache.arrow.file"};if(this.check([103,108,84,70,2,0,0,0]))return{ext:"glb",mime:"model/gltf-binary"};if(this.check([102,114,101,101],{offset:4})||this.check([109,100,97,116],{offset:4})||this.check([109,111,111,118],{offset:4})||this.check([119,105,100,101],{offset:4}))return{ext:"mov",mime:"video/quicktime"};if(this.check([73,73,82,79,8,0,0,0,24]))return{ext:"orf",mime:"image/x-olympus-orf"};if(this.checkString("gimp xcf "))return{ext:"xcf",mime:"image/x-xcf"};if(this.checkString("ftyp",{offset:4})&&(96&this.buffer[8])!=0){let e=new x.StringType(4,"latin1").get(this.buffer,8).replace("\0"," ").trim();switch(e){case"avif":case"avis":return{ext:"avif",mime:"image/avif"};case"mif1":return{ext:"heic",mime:"image/heif"};case"msf1":return{ext:"heic",mime:"image/heif-sequence"};case"heic":case"heix":return{ext:"heic",mime:"image/heic"};case"hevc":case"hevx":return{ext:"heic",mime:"image/heic-sequence"};case"qt":return{ext:"mov",mime:"video/quicktime"};case"M4V":case"M4VH":case"M4VP":return{ext:"m4v",mime:"video/x-m4v"};case"M4P":return{ext:"m4p",mime:"video/mp4"};case"M4B":return{ext:"m4b",mime:"audio/mp4"};case"M4A":return{ext:"m4a",mime:"audio/x-m4a"};case"F4V":return{ext:"f4v",mime:"video/mp4"};case"F4P":return{ext:"f4p",mime:"video/mp4"};case"F4A":return{ext:"f4a",mime:"audio/mp4"};case"F4B":return{ext:"f4b",mime:"audio/mp4"};case"crx":return{ext:"cr3",mime:"image/x-canon-cr3"};default:if(e.startsWith("3g")){if(e.startsWith("3g2"))return{ext:"3g2",mime:"video/3gpp2"};return{ext:"3gp",mime:"video/3gpp"}}return{ext:"mp4",mime:"video/mp4"}}}if(this.checkString("REGEDIT4\r\n"))return{ext:"reg",mime:"application/x-ms-regedit"};if(this.check([82,73,70,70])){if(this.checkString("WEBP",{offset:8}))return{ext:"webp",mime:"image/webp"};if(this.check([65,86,73],{offset:8}))return{ext:"avi",mime:"video/vnd.avi"};if(this.check([87,65,86,69],{offset:8}))return{ext:"wav",mime:"audio/wav"};if(this.check([81,76,67,77],{offset:8}))return{ext:"qcp",mime:"audio/qcelp"}}if(this.check([73,73,85,0,24,0,0,0,136,231,116,216]))return{ext:"rw2",mime:"image/x-panasonic-rw2"};if(this.check([48,38,178,117,142,102,207,17,166,217])){let t=!1;try{async function n(){let t=new Uint8Array(16);return await F(e,t,void 0,{maximumLength:t.length,reason:"ASF header GUID"}),{id:t,size:Number(await e.readToken(x.UINT64_LE))}}await j(e,30,{maximumLength:30,reason:"ASF header prelude"});let r=V(e),i=e.position,a=0;for(;e.position+24<e.fileInfo.size&&!(++a>512||Z(e,i,0x1000000));){let i=e.position,a=await n(),s=a.size-24;if(!Number.isFinite(s)||s<0){t=!0;break}if(Y(a.id,[145,7,220,183,183,169,207,17,142,230,0,192,12,32,83,101])){let t=new Uint8Array(16);if(s-=await F(e,t,void 0,{maximumLength:t.length,reason:"ASF stream type GUID"}),Y(t,[64,158,105,248,77,91,207,17,168,253,0,128,95,92,68,43]))return{ext:"asf",mime:"audio/x-ms-asf"};if(Y(t,[192,239,25,188,77,91,207,17,168,253,0,128,95,92,68,43]))return{ext:"asf",mime:"video/x-ms-asf"};break}if(r&&s>1048576||(await j(e,s,{maximumLength:r?1048576:e.fileInfo.size,reason:"ASF header payload"}),e.position<=i)){t=!0;break}}}catch(r){if(r instanceof k.EndOfStreamError||r instanceof U)V(e)&&(t=!0);else throw r}if(t)return;return{ext:"asf",mime:"application/vnd.ms-asf"}}if(this.check([171,75,84,88,32,49,49,187,13,10,26,10]))return{ext:"ktx",mime:"image/ktx"};if((this.check([126,16,4])||this.check([126,24,4]))&&this.check([48,77,73,69],{offset:4}))return{ext:"mie",mime:"application/x-mie"};if(this.check([39,10,0,0,0,0,0,0,0,0,0,0],{offset:2}))return{ext:"shp",mime:"application/x-esri-shape"};if(this.check([255,79,255,81]))return{ext:"j2c",mime:"image/j2c"};if(this.check([0,0,0,12,106,80,32,32,13,10,135,10]))switch(await e.ignore(20),await e.readToken(new x.StringType(4,"ascii"))){case"jp2 ":return{ext:"jp2",mime:"image/jp2"};case"jpx ":return{ext:"jpx",mime:"image/jpx"};case"jpm ":return{ext:"jpm",mime:"image/jpm"};case"mjp2":return{ext:"mj2",mime:"image/mj2"};default:return}if(this.check([255,10])||this.check([0,0,0,12,74,88,76,32,13,10,135,10]))return{ext:"jxl",mime:"image/jxl"};if(this.check([254,255]))return this.checkString("<?xml ",{offset:2,encoding:"utf-16be"})?{ext:"xml",mime:"application/xml"}:void 0;if(this.check([208,207,17,224,161,177,26,225]))return{ext:"cfb",mime:"application/x-cfb"};if(await e.peekBuffer(this.buffer,{length:Math.min(256,e.fileInfo.size),mayBeLess:!0}),this.check([97,99,115,112],{offset:36}))return{ext:"icc",mime:"application/vnd.iccprofile"};if(this.checkString("**ACE",{offset:7})&&this.checkString("**",{offset:12}))return{ext:"ace",mime:"application/x-ace-compressed"};if(this.checkString("BEGIN:")){if(this.checkString("VCARD",{offset:6}))return{ext:"vcf",mime:"text/vcard"};if(this.checkString("VCALENDAR",{offset:6}))return{ext:"ics",mime:"text/calendar"}}if(this.checkString("FUJIFILMCCD-RAW"))return{ext:"raf",mime:"image/x-fujifilm-raf"};if(this.checkString("Extended Module:"))return{ext:"xm",mime:"audio/x-xm"};if(this.checkString("Creative Voice File"))return{ext:"voc",mime:"audio/x-voc"};if(this.check([4,0,0,0])&&this.buffer.length>=16){let e=new DataView(this.buffer.buffer).getUint32(12,!0);if(e>12&&this.buffer.length>=e+16)try{let t=new TextDecoder().decode(this.buffer.subarray(16,e+16));if(JSON.parse(t).files)return{ext:"asar",mime:"application/x-asar"}}catch{}}if(this.check([6,14,43,52,2,5,1,1,13,1,2,1,1,2]))return{ext:"mxf",mime:"application/mxf"};if(this.checkString("SCRM",{offset:44}))return{ext:"s3m",mime:"audio/x-s3m"};if(this.check([71])&&this.check([71],{offset:188})||this.check([71],{offset:4})&&this.check([71],{offset:196}))return{ext:"mts",mime:"video/mp2t"};if(this.check([66,79,79,75,77,79,66,73],{offset:60}))return{ext:"mobi",mime:"application/x-mobipocket-ebook"};if(this.check([68,73,67,77],{offset:128}))return{ext:"dcm",mime:"application/dicom"};if(this.check([76,0,0,0,1,20,2,0,0,0,0,0,192,0,0,0,0,0,0,70]))return{ext:"lnk",mime:"application/x.ms.shortcut"};if(this.check([98,111,111,107,0,0,0,0,109,97,114,107,0,0,0,0]))return{ext:"alias",mime:"application/x.apple.alias"};if(this.checkString("Kaydara FBX Binary \0"))return{ext:"fbx",mime:"application/x.autodesk.fbx"};if(this.check([76,80],{offset:34})&&(this.check([0,0,1],{offset:8})||this.check([1,0,2],{offset:8})||this.check([2,0,2],{offset:8})))return{ext:"eot",mime:"application/vnd.ms-fontobject"};if(this.check([6,6,237,245,216,29,70,229,189,49,239,231,254,116,183,29]))return{ext:"indd",mime:"application/x-indesign"};if(this.check([255,255,0,0,7,0,0,0,4,0,0,0,1,0,1,0])||this.check([0,0,255,255,0,0,0,7,0,0,0,4,0,1,0,1]))return{ext:"jmp",mime:"application/x-jmp-data"};if(await e.peekBuffer(this.buffer,{length:Math.min(512,e.fileInfo.size),mayBeLess:!0}),this.checkString("ustar",{offset:257})&&(this.checkString("\0",{offset:262})||this.checkString(" ",{offset:262}))||this.check([0,0,0,0,0,0],{offset:257})&&function(e,t=0){let r=Number.parseInt(new x.StringType(6).get(e,148).replace(/\0.*$/,"").trim(),8);if(Number.isNaN(r))return!1;let i=256;for(let r=t;r<t+148;r++)i+=e[r];for(let r=t+156;r<t+512;r++)i+=e[r];return r===i}(this.buffer))return{ext:"tar",mime:"application/x-tar"};if(this.check([255,254])){let e="utf-16le";return this.checkString("<?xml ",{offset:2,encoding:e})?{ext:"xml",mime:"application/xml"}:this.check([255,14],{offset:2})&&this.checkString("SketchUp Model",{offset:4,encoding:e})?{ext:"skp",mime:"application/vnd.sketchup.skp"}:this.checkString("Windows Registry Editor Version 5.00\r\n",{offset:2,encoding:e})?{ext:"reg",mime:"application/x-ms-regedit"}:void 0}if(this.checkString("-----BEGIN PGP MESSAGE-----"))return{ext:"pgp",mime:"application/pgp-encrypted"}};detectImprecise=async e=>{var t;this.buffer=new Uint8Array(4100);let r=Number.isFinite(t=e.fileInfo.size)?Math.max(0,t):Number.MAX_SAFE_INTEGER;if(await e.peekBuffer(this.buffer,{length:Math.min(8,r),mayBeLess:!0}),this.check([0,0,1,186])||this.check([0,0,1,179]))return{ext:"mpg",mime:"video/mpeg"};if(this.check([0,1,0,0,0]))return{ext:"ttf",mime:"font/ttf"};if(this.check([0,0,1,0]))return{ext:"ico",mime:"image/x-icon"};if(this.check([0,0,2,0]))return{ext:"cur",mime:"image/x-icon"};if(await e.peekBuffer(this.buffer,{length:Math.min(2+this.options.mpegOffsetTolerance,r),mayBeLess:!0}),this.buffer.length>=2+this.options.mpegOffsetTolerance)for(let e=0;e<=this.options.mpegOffsetTolerance;++e){let t=this.scanMpeg(e);if(t)return t}};async readTiffTag(e){let t=await this.tokenizer.readToken(e?x.UINT16_BE:x.UINT16_LE);switch(await this.tokenizer.ignore(10),t){case 50341:return{ext:"arw",mime:"image/x-sony-arw"};case 50706:return{ext:"dng",mime:"image/x-adobe-dng"}}}async readTiffIFD(e){let t=await this.tokenizer.readToken(e?x.UINT16_BE:x.UINT16_LE);if(!(t>512)&&(!V(this.tokenizer)||!(2+12*t>0x1000000)))for(let r=0;r<t;++r){let t=await this.readTiffTag(e);if(t)return t}}async readTiffHeader(e){let t={ext:"tif",mime:"image/tiff"},r=(e?x.UINT16_BE:x.UINT16_LE).get(this.buffer,2),i=(e?x.UINT32_BE:x.UINT32_LE).get(this.buffer,4);if(42===r){let r;if(i>=6){if(this.checkString("CR",{offset:8}))return{ext:"cr2",mime:"image/x-canon-cr2"};if(i>=8){let t=(e?x.UINT16_BE:x.UINT16_LE).get(this.buffer,8),r=(e?x.UINT16_BE:x.UINT16_LE).get(this.buffer,10);if(28===t&&254===r||31===t&&11===r)return{ext:"nef",mime:"image/x-nikon-nef"}}}if(V(this.tokenizer)&&i>1048576)return t;let a=V(this.tokenizer)?0x1000000:this.tokenizer.fileInfo.size;try{await j(this.tokenizer,i,{maximumLength:a,reason:"TIFF IFD offset"})}catch(e){if(e instanceof k.EndOfStreamError)return;throw e}try{r=await this.readTiffIFD(e)}catch(e){if(e instanceof k.EndOfStreamError)return;throw e}return r??t}if(43===r)return t}scanMpeg(e){if(this.check([255,224],{offset:e,mask:[255,224]})){if(this.check([16],{offset:e+1,mask:[22]}))return this.check([8],{offset:e+1,mask:[8]}),{ext:"aac",mime:"audio/aac"};if(this.check([2],{offset:e+1,mask:[6]}))return{ext:"mp3",mime:"audio/mpeg"};if(this.check([4],{offset:e+1,mask:[6]}))return{ext:"mp2",mime:"audio/mpeg"};if(this.check([6],{offset:e+1,mask:[6]}))return{ext:"mp1",mime:"audio/mpeg"}}}}var J=e.i(32537),ee=e.i(82087),et=e.i(9922);let er={multiple:!1},ei={year:er,track:er,disk:er,title:er,artist:er,artists:{multiple:!0,unique:!0},albumartist:er,albumartists:{multiple:!0,unique:!0},album:er,date:er,originaldate:er,originalyear:er,releasedate:er,comment:{multiple:!0,unique:!1},genre:{multiple:!0,unique:!0},picture:{multiple:!0,unique:!0},composer:{multiple:!0,unique:!0},lyrics:{multiple:!0,unique:!1},albumsort:{multiple:!1,unique:!0},titlesort:{multiple:!1,unique:!0},work:{multiple:!1,unique:!0},artistsort:{multiple:!1,unique:!0},albumartistsort:{multiple:!1,unique:!0},composersort:{multiple:!1,unique:!0},lyricist:{multiple:!0,unique:!0},writer:{multiple:!0,unique:!0},conductor:{multiple:!0,unique:!0},remixer:{multiple:!0,unique:!0},arranger:{multiple:!0,unique:!0},engineer:{multiple:!0,unique:!0},producer:{multiple:!0,unique:!0},technician:{multiple:!0,unique:!0},djmixer:{multiple:!0,unique:!0},mixer:{multiple:!0,unique:!0},label:{multiple:!0,unique:!0},grouping:er,subtitle:{multiple:!0},discsubtitle:er,totaltracks:er,totaldiscs:er,compilation:er,rating:{multiple:!0},bpm:er,mood:er,media:er,catalognumber:{multiple:!0,unique:!0},tvShow:er,tvShowSort:er,tvSeason:er,tvEpisode:er,tvEpisodeId:er,tvNetwork:er,podcast:er,podcasturl:er,releasestatus:er,releasetype:{multiple:!0},releasecountry:er,script:er,language:er,copyright:er,license:er,encodedby:er,encodersettings:er,gapless:er,barcode:er,isrc:{multiple:!0},asin:er,musicbrainz_recordingid:er,musicbrainz_trackid:er,musicbrainz_albumid:er,musicbrainz_artistid:{multiple:!0},musicbrainz_albumartistid:{multiple:!0},musicbrainz_releasegroupid:er,musicbrainz_workid:er,musicbrainz_trmid:er,musicbrainz_discid:er,acoustid_id:er,acoustid_fingerprint:er,musicip_puid:er,musicip_fingerprint:er,website:er,"performer:instrument":{multiple:!0,unique:!0},averageLevel:er,peakLevel:er,notes:{multiple:!0,unique:!1},key:er,originalalbum:er,originalartist:er,discogs_artist_id:{multiple:!0,unique:!0},discogs_release_id:er,discogs_label_id:er,discogs_master_release_id:er,discogs_votes:er,discogs_rating:er,replaygain_track_peak:er,replaygain_track_gain:er,replaygain_album_peak:er,replaygain_album_gain:er,replaygain_track_minmax:er,replaygain_album_minmax:er,replaygain_undo:er,description:{multiple:!0},longDescription:er,category:{multiple:!0},hdVideo:er,keywords:{multiple:!0},movement:er,movementIndex:er,movementTotal:er,podcastId:er,showMovement:er,stik:er,playCounter:er};class ea{static toIntOrNull(e){let t=Number.parseInt(e,10);return Number.isNaN(t)?null:t}static normalizeTrack(e){let t=e.toString().split("/");return{no:Number.parseInt(t[0],10)||null,of:Number.parseInt(t[1],10)||null}}constructor(e,t){this.tagTypes=e,this.tagMap=t}mapGenericTag(e,t){e={id:e.id,value:e.value},this.postMap(e,t);let r=this.getCommonName(e.id);return r?{id:r,value:e.value}:null}getCommonName(e){return this.tagMap[e]}postMap(e,t){}}ea.maxRatingScore=1;let en={title:"title",artist:"artist",album:"album",year:"year",comment:"comment",track:"track",genre:"genre"};class es extends ea{constructor(){super(["ID3v1"],en)}}class eo extends ea{constructor(e,t){const r={};for(const e of Object.keys(t))r[e.toUpperCase()]=t[e];super(e,r)}getCommonName(e){return this.tagMap[e.toUpperCase()]}}var el=e.i(94569);let ec={TIT2:"title",TPE1:"artist","TXXX:Artists":"artists",TPE2:"albumartist",TALB:"album",TDRV:"date",TORY:"originalyear",TPOS:"disk",TCON:"genre",APIC:"picture",TCOM:"composer",USLT:"lyrics",TSOA:"albumsort",TSOT:"titlesort",TOAL:"originalalbum",TSOP:"artistsort",TSO2:"albumartistsort",TSOC:"composersort",TEXT:"lyricist","TXXX:Writer":"writer",TPE3:"conductor",TPE4:"remixer","IPLS:arranger":"arranger","IPLS:engineer":"engineer","IPLS:producer":"producer","IPLS:DJ-mix":"djmixer","IPLS:mix":"mixer",TPUB:"label",TIT1:"grouping",TIT3:"subtitle",TRCK:"track",TCMP:"compilation",POPM:"rating",TBPM:"bpm",TMED:"media","TXXX:CATALOGNUMBER":"catalognumber","TXXX:MusicBrainz Album Status":"releasestatus","TXXX:MusicBrainz Album Type":"releasetype","TXXX:MusicBrainz Album Release Country":"releasecountry","TXXX:RELEASECOUNTRY":"releasecountry","TXXX:SCRIPT":"script",TLAN:"language",TCOP:"copyright",WCOP:"license",TENC:"encodedby",TSSE:"encodersettings","TXXX:BARCODE":"barcode","TXXX:ISRC":"isrc",TSRC:"isrc","TXXX:ASIN":"asin","TXXX:originalyear":"originalyear","UFID:http://musicbrainz.org":"musicbrainz_recordingid","TXXX:MusicBrainz Release Track Id":"musicbrainz_trackid","TXXX:MusicBrainz Album Id":"musicbrainz_albumid","TXXX:MusicBrainz Artist Id":"musicbrainz_artistid","TXXX:MusicBrainz Album Artist Id":"musicbrainz_albumartistid","TXXX:MusicBrainz Release Group Id":"musicbrainz_releasegroupid","TXXX:MusicBrainz Work Id":"musicbrainz_workid","TXXX:MusicBrainz TRM Id":"musicbrainz_trmid","TXXX:MusicBrainz Disc Id":"musicbrainz_discid","TXXX:ACOUSTID_ID":"acoustid_id","TXXX:Acoustid Id":"acoustid_id","TXXX:Acoustid Fingerprint":"acoustid_fingerprint","TXXX:MusicIP PUID":"musicip_puid","TXXX:MusicMagic Fingerprint":"musicip_fingerprint",WOAR:"website",TDRC:"date",TYER:"year",TDOR:"originaldate","TIPL:arranger":"arranger","TIPL:engineer":"engineer","TIPL:producer":"producer","TIPL:DJ-mix":"djmixer","TIPL:mix":"mixer",TMOO:"mood",SYLT:"lyrics",TSST:"discsubtitle",TKEY:"key",COMM:"comment",TOPE:"originalartist","PRIV:AverageLevel":"averageLevel","PRIV:PeakLevel":"peakLevel","TXXX:DISCOGS_ARTIST_ID":"discogs_artist_id","TXXX:DISCOGS_ARTISTS":"artists","TXXX:DISCOGS_ARTIST_NAME":"artists","TXXX:DISCOGS_ALBUM_ARTISTS":"albumartist","TXXX:DISCOGS_CATALOG":"catalognumber","TXXX:DISCOGS_COUNTRY":"releasecountry","TXXX:DISCOGS_DATE":"originaldate","TXXX:DISCOGS_LABEL":"label","TXXX:DISCOGS_LABEL_ID":"discogs_label_id","TXXX:DISCOGS_MASTER_RELEASE_ID":"discogs_master_release_id","TXXX:DISCOGS_RATING":"discogs_rating","TXXX:DISCOGS_RELEASED":"date","TXXX:DISCOGS_RELEASE_ID":"discogs_release_id","TXXX:DISCOGS_VOTES":"discogs_votes","TXXX:CATALOGID":"catalognumber","TXXX:STYLE":"genre","TXXX:REPLAYGAIN_TRACK_PEAK":"replaygain_track_peak","TXXX:REPLAYGAIN_TRACK_GAIN":"replaygain_track_gain","TXXX:REPLAYGAIN_ALBUM_PEAK":"replaygain_album_peak","TXXX:REPLAYGAIN_ALBUM_GAIN":"replaygain_album_gain","TXXX:MP3GAIN_MINMAX":"replaygain_track_minmax","TXXX:MP3GAIN_ALBUM_MINMAX":"replaygain_album_minmax","TXXX:MP3GAIN_UNDO":"replaygain_undo",MVNM:"movement",MVIN:"movementIndex",PCST:"podcast",TCAT:"category",TDES:"description",TDRL:"releasedate",TGID:"podcastId",TKWD:"keywords",WFED:"podcasturl",GRP1:"grouping",PCNT:"playCounter"};class eu extends eo{static toRating(e){return{source:e.email,rating:e.rating>0?(e.rating-1)/254*ea.maxRatingScore:void 0}}constructor(){super(["ID3v2.3","ID3v2.4"],ec)}postMap(e,t){switch(e.id){case"UFID":{let t=e.value;"http://musicbrainz.org"===t.owner_identifier&&(e.id+=`:${t.owner_identifier}`,e.value=(0,el.decodeString)(t.identifier,"latin1"))}break;case"PRIV":{let r=e.value;switch(r.owner_identifier){case"AverageLevel":case"PeakValue":e.id+=`:${r.owner_identifier}`,e.value=4===r.data.length?x.UINT32_LE.get(r.data,0):null,null===e.value&&t.addWarning("Failed to parse PRIV:PeakValue");break;default:t.addWarning(`Unknown PRIV owner-identifier: ${r.data}`)}}break;case"POPM":e.value=eu.toRating(e.value)}}}let em={Title:"title",Author:"artist","WM/AlbumArtist":"albumartist","WM/AlbumTitle":"album","WM/Year":"date","WM/OriginalReleaseTime":"originaldate","WM/OriginalReleaseYear":"originalyear",Description:"comment","WM/TrackNumber":"track","WM/PartOfSet":"disk","WM/Genre":"genre","WM/Composer":"composer","WM/Lyrics":"lyrics","WM/AlbumSortOrder":"albumsort","WM/TitleSortOrder":"titlesort","WM/ArtistSortOrder":"artistsort","WM/AlbumArtistSortOrder":"albumartistsort","WM/ComposerSortOrder":"composersort","WM/Writer":"lyricist","WM/Conductor":"conductor","WM/ModifiedBy":"remixer","WM/Engineer":"engineer","WM/Producer":"producer","WM/DJMixer":"djmixer","WM/Mixer":"mixer","WM/Publisher":"label","WM/ContentGroupDescription":"grouping","WM/SubTitle":"subtitle","WM/SetSubTitle":"discsubtitle","WM/IsCompilation":"compilation","WM/SharedUserRating":"rating","WM/BeatsPerMinute":"bpm","WM/Mood":"mood","WM/Media":"media","WM/CatalogNo":"catalognumber","MusicBrainz/Album Status":"releasestatus","MusicBrainz/Album Type":"releasetype","MusicBrainz/Album Release Country":"releasecountry","WM/Script":"script","WM/Language":"language",Copyright:"copyright",LICENSE:"license","WM/EncodedBy":"encodedby","WM/EncodingSettings":"encodersettings","WM/Barcode":"barcode","WM/ISRC":"isrc","MusicBrainz/Track Id":"musicbrainz_recordingid","MusicBrainz/Release Track Id":"musicbrainz_trackid","MusicBrainz/Album Id":"musicbrainz_albumid","MusicBrainz/Artist Id":"musicbrainz_artistid","MusicBrainz/Album Artist Id":"musicbrainz_albumartistid","MusicBrainz/Release Group Id":"musicbrainz_releasegroupid","MusicBrainz/Work Id":"musicbrainz_workid","MusicBrainz/TRM Id":"musicbrainz_trmid","MusicBrainz/Disc Id":"musicbrainz_discid","Acoustid/Id":"acoustid_id","Acoustid/Fingerprint":"acoustid_fingerprint","MusicIP/PUID":"musicip_puid","WM/ARTISTS":"artists","WM/InitialKey":"key",ASIN:"asin","WM/Work":"work","WM/AuthorURL":"website","WM/Picture":"picture"};class ed extends ea{static toRating(e){return{rating:Number.parseFloat(e+1)/5}}constructor(){super(["asf"],em)}postMap(e){if("WM/SharedUserRating"===e.id){let t=e.id.split(":");e.value=ed.toRating(e.value),e.id=t[0]}}}let ef={TT2:"title",TP1:"artist",TP2:"albumartist",TAL:"album",TYE:"year",COM:"comment",TRK:"track",TPA:"disk",TCO:"genre",PIC:"picture",TCM:"composer",TOR:"originaldate",TOT:"originalalbum",TXT:"lyricist",TP3:"conductor",TPB:"label",TT1:"grouping",TT3:"subtitle",TLA:"language",TCR:"copyright",WCP:"license",TEN:"encodedby",TSS:"encodersettings",WAR:"website",PCS:"podcast",TCP:"compilation",TDR:"date",TS2:"albumartistsort",TSA:"albumsort",TSC:"composersort",TSP:"artistsort",TST:"titlesort",WFD:"podcasturl",TBP:"bpm",GP1:"grouping"};class ep extends eo{constructor(){super(["ID3v2.2"],ef)}}let eh={Title:"title",Artist:"artist",Artists:"artists","Album Artist":"albumartist",Album:"album",Year:"date",Originalyear:"originalyear",Originaldate:"originaldate",Releasedate:"releasedate",Comment:"comment",Track:"track",Disc:"disk",DISCNUMBER:"disk",Genre:"genre","Cover Art (Front)":"picture","Cover Art (Back)":"picture",Composer:"composer",Lyrics:"lyrics",ALBUMSORT:"albumsort",TITLESORT:"titlesort",WORK:"work",ARTISTSORT:"artistsort",ALBUMARTISTSORT:"albumartistsort",COMPOSERSORT:"composersort",Lyricist:"lyricist",Writer:"writer",Conductor:"conductor",MixArtist:"remixer",Arranger:"arranger",Engineer:"engineer",Producer:"producer",DJMixer:"djmixer",Mixer:"mixer",Label:"label",Grouping:"grouping",Subtitle:"subtitle",DiscSubtitle:"discsubtitle",Compilation:"compilation",BPM:"bpm",Mood:"mood",Media:"media",CatalogNumber:"catalognumber",MUSICBRAINZ_ALBUMSTATUS:"releasestatus",MUSICBRAINZ_ALBUMTYPE:"releasetype",RELEASECOUNTRY:"releasecountry",Script:"script",Language:"language",Copyright:"copyright",LICENSE:"license",EncodedBy:"encodedby",EncoderSettings:"encodersettings",Barcode:"barcode",ISRC:"isrc",ASIN:"asin",musicbrainz_trackid:"musicbrainz_recordingid",musicbrainz_releasetrackid:"musicbrainz_trackid",MUSICBRAINZ_ALBUMID:"musicbrainz_albumid",MUSICBRAINZ_ARTISTID:"musicbrainz_artistid",MUSICBRAINZ_ALBUMARTISTID:"musicbrainz_albumartistid",MUSICBRAINZ_RELEASEGROUPID:"musicbrainz_releasegroupid",MUSICBRAINZ_WORKID:"musicbrainz_workid",MUSICBRAINZ_TRMID:"musicbrainz_trmid",MUSICBRAINZ_DISCID:"musicbrainz_discid",Acoustid_Id:"acoustid_id",ACOUSTID_FINGERPRINT:"acoustid_fingerprint",MUSICIP_PUID:"musicip_puid",Weblink:"website",REPLAYGAIN_TRACK_GAIN:"replaygain_track_gain",REPLAYGAIN_TRACK_PEAK:"replaygain_track_peak",MP3GAIN_MINMAX:"replaygain_track_minmax",MP3GAIN_UNDO:"replaygain_undo"};class eg extends eo{constructor(){super(["APEv2"],eh)}}let eb={"©nam":"title","©ART":"artist",aART:"albumartist","----:com.apple.iTunes:Band":"albumartist","©alb":"album","©day":"date","©cmt":"comment","©com":"comment",trkn:"track",disk:"disk","©gen":"genre",covr:"picture","©wrt":"composer","©lyr":"lyrics",soal:"albumsort",sonm:"titlesort",soar:"artistsort",soaa:"albumartistsort",soco:"composersort","----:com.apple.iTunes:LYRICIST":"lyricist","----:com.apple.iTunes:CONDUCTOR":"conductor","----:com.apple.iTunes:REMIXER":"remixer","----:com.apple.iTunes:ENGINEER":"engineer","----:com.apple.iTunes:PRODUCER":"producer","----:com.apple.iTunes:DJMIXER":"djmixer","----:com.apple.iTunes:MIXER":"mixer","----:com.apple.iTunes:LABEL":"label","©grp":"grouping","----:com.apple.iTunes:SUBTITLE":"subtitle","----:com.apple.iTunes:DISCSUBTITLE":"discsubtitle",cpil:"compilation",tmpo:"bpm","----:com.apple.iTunes:MOOD":"mood","----:com.apple.iTunes:MEDIA":"media","----:com.apple.iTunes:CATALOGNUMBER":"catalognumber",tvsh:"tvShow",tvsn:"tvSeason",tves:"tvEpisode",sosn:"tvShowSort",tven:"tvEpisodeId",tvnn:"tvNetwork",pcst:"podcast",purl:"podcasturl","----:com.apple.iTunes:MusicBrainz Album Status":"releasestatus","----:com.apple.iTunes:MusicBrainz Album Type":"releasetype","----:com.apple.iTunes:MusicBrainz Album Release Country":"releasecountry","----:com.apple.iTunes:SCRIPT":"script","----:com.apple.iTunes:LANGUAGE":"language",cprt:"copyright","©cpy":"copyright","----:com.apple.iTunes:LICENSE":"license","©too":"encodedby",pgap:"gapless","----:com.apple.iTunes:BARCODE":"barcode","----:com.apple.iTunes:ISRC":"isrc","----:com.apple.iTunes:ASIN":"asin","----:com.apple.iTunes:NOTES":"comment","----:com.apple.iTunes:MusicBrainz Track Id":"musicbrainz_recordingid","----:com.apple.iTunes:MusicBrainz Release Track Id":"musicbrainz_trackid","----:com.apple.iTunes:MusicBrainz Album Id":"musicbrainz_albumid","----:com.apple.iTunes:MusicBrainz Artist Id":"musicbrainz_artistid","----:com.apple.iTunes:MusicBrainz Album Artist Id":"musicbrainz_albumartistid","----:com.apple.iTunes:MusicBrainz Release Group Id":"musicbrainz_releasegroupid","----:com.apple.iTunes:MusicBrainz Work Id":"musicbrainz_workid","----:com.apple.iTunes:MusicBrainz TRM Id":"musicbrainz_trmid","----:com.apple.iTunes:MusicBrainz Disc Id":"musicbrainz_discid","----:com.apple.iTunes:Acoustid Id":"acoustid_id","----:com.apple.iTunes:Acoustid Fingerprint":"acoustid_fingerprint","----:com.apple.iTunes:MusicIP PUID":"musicip_puid","----:com.apple.iTunes:fingerprint":"musicip_fingerprint","----:com.apple.iTunes:replaygain_track_gain":"replaygain_track_gain","----:com.apple.iTunes:replaygain_track_peak":"replaygain_track_peak","----:com.apple.iTunes:replaygain_album_gain":"replaygain_album_gain","----:com.apple.iTunes:replaygain_album_peak":"replaygain_album_peak","----:com.apple.iTunes:replaygain_track_minmax":"replaygain_track_minmax","----:com.apple.iTunes:replaygain_album_minmax":"replaygain_album_minmax","----:com.apple.iTunes:replaygain_undo":"replaygain_undo",gnre:"genre","----:com.apple.iTunes:ALBUMARTISTSORT":"albumartistsort","----:com.apple.iTunes:ARTISTS":"artists","----:com.apple.iTunes:ORIGINALDATE":"originaldate","----:com.apple.iTunes:ORIGINALYEAR":"originalyear","----:com.apple.iTunes:RELEASEDATE":"releasedate",desc:"description",ldes:"longDescription","©mvn":"movement","©mvi":"movementIndex","©mvc":"movementTotal","©wrk":"work",catg:"category",egid:"podcastId",hdvd:"hdVideo",keyw:"keywords",shwm:"showMovement",stik:"stik",rate:"rating"};class ey extends eo{constructor(){super(["iTunes"],eb)}postMap(e,t){"rate"===e.id&&(e.value={source:void 0,rating:Number.parseFloat(e.value)/100})}}let ex={TITLE:"title",ARTIST:"artist",ARTISTS:"artists",ALBUMARTIST:"albumartist","ALBUM ARTIST":"albumartist",ALBUM:"album",DATE:"date",ORIGINALDATE:"originaldate",ORIGINALYEAR:"originalyear",RELEASEDATE:"releasedate",COMMENT:"comment",TRACKNUMBER:"track",DISCNUMBER:"disk",GENRE:"genre",METADATA_BLOCK_PICTURE:"picture",COMPOSER:"composer",LYRICS:"lyrics",ALBUMSORT:"albumsort",TITLESORT:"titlesort",WORK:"work",ARTISTSORT:"artistsort",ALBUMARTISTSORT:"albumartistsort",COMPOSERSORT:"composersort",LYRICIST:"lyricist",WRITER:"writer",CONDUCTOR:"conductor",REMIXER:"remixer",ARRANGER:"arranger",ENGINEER:"engineer",PRODUCER:"producer",DJMIXER:"djmixer",MIXER:"mixer",LABEL:"label",GROUPING:"grouping",SUBTITLE:"subtitle",DISCSUBTITLE:"discsubtitle",TRACKTOTAL:"totaltracks",DISCTOTAL:"totaldiscs",COMPILATION:"compilation",RATING:"rating",BPM:"bpm",KEY:"key",MOOD:"mood",MEDIA:"media",CATALOGNUMBER:"catalognumber",RELEASESTATUS:"releasestatus",RELEASETYPE:"releasetype",RELEASECOUNTRY:"releasecountry",SCRIPT:"script",LANGUAGE:"language",COPYRIGHT:"copyright",LICENSE:"license",ENCODEDBY:"encodedby",ENCODERSETTINGS:"encodersettings",BARCODE:"barcode",ISRC:"isrc",ASIN:"asin",MUSICBRAINZ_TRACKID:"musicbrainz_recordingid",MUSICBRAINZ_RELEASETRACKID:"musicbrainz_trackid",MUSICBRAINZ_ALBUMID:"musicbrainz_albumid",MUSICBRAINZ_ARTISTID:"musicbrainz_artistid",MUSICBRAINZ_ALBUMARTISTID:"musicbrainz_albumartistid",MUSICBRAINZ_RELEASEGROUPID:"musicbrainz_releasegroupid",MUSICBRAINZ_WORKID:"musicbrainz_workid",MUSICBRAINZ_TRMID:"musicbrainz_trmid",MUSICBRAINZ_DISCID:"musicbrainz_discid",ACOUSTID_ID:"acoustid_id",ACOUSTID_ID_FINGERPRINT:"acoustid_fingerprint",MUSICIP_PUID:"musicip_puid",WEBSITE:"website",NOTES:"notes",TOTALTRACKS:"totaltracks",TOTALDISCS:"totaldiscs",DISCOGS_ARTIST_ID:"discogs_artist_id",DISCOGS_ARTISTS:"artists",DISCOGS_ARTIST_NAME:"artists",DISCOGS_ALBUM_ARTISTS:"albumartist",DISCOGS_CATALOG:"catalognumber",DISCOGS_COUNTRY:"releasecountry",DISCOGS_DATE:"originaldate",DISCOGS_LABEL:"label",DISCOGS_LABEL_ID:"discogs_label_id",DISCOGS_MASTER_RELEASE_ID:"discogs_master_release_id",DISCOGS_RATING:"discogs_rating",DISCOGS_RELEASED:"date",DISCOGS_RELEASE_ID:"discogs_release_id",DISCOGS_VOTES:"discogs_votes",CATALOGID:"catalognumber",STYLE:"genre",REPLAYGAIN_TRACK_GAIN:"replaygain_track_gain",REPLAYGAIN_TRACK_PEAK:"replaygain_track_peak",REPLAYGAIN_ALBUM_GAIN:"replaygain_album_gain",REPLAYGAIN_ALBUM_PEAK:"replaygain_album_peak",REPLAYGAIN_MINMAX:"replaygain_track_minmax",REPLAYGAIN_ALBUM_MINMAX:"replaygain_album_minmax",REPLAYGAIN_UNDO:"replaygain_undo"};class ek extends ea{static toRating(e,t,r){return{source:e?e.toLowerCase():void 0,rating:Number.parseFloat(t)/r*ea.maxRatingScore}}constructor(){super(["vorbis"],ex)}postMap(e){if("RATING"===e.id)e.value=ek.toRating(void 0,e.value,100);else if(0===e.id.indexOf("RATING:")){let t=e.id.split(":");e.value=ek.toRating(t[1],e.value,1),e.id=t[0]}}}let eT={IART:"artist",ICRD:"date",INAM:"title",TITL:"title",IPRD:"album",ITRK:"track",IPRT:"track",COMM:"comment",ICMT:"comment",ICNT:"releasecountry",GNRE:"genre",IWRI:"writer",RATE:"rating",YEAR:"year",ISFT:"encodedby",CODE:"encodedby",TURL:"website",IGNR:"genre",IENG:"engineer",ITCH:"technician",IMED:"media",IRPD:"album"};class ew extends ea{constructor(){super(["exif"],eT)}}let eS={"segment:title":"title","album:ARTIST":"albumartist","album:ARTISTSORT":"albumartistsort","album:TITLE":"album","album:DATE_RECORDED":"originaldate","album:DATE_RELEASED":"releasedate","album:PART_NUMBER":"disk","album:TOTAL_PARTS":"totaltracks","track:ARTIST":"artist","track:ARTISTSORT":"artistsort","track:TITLE":"title","track:PART_NUMBER":"track","track:MUSICBRAINZ_TRACKID":"musicbrainz_recordingid","track:MUSICBRAINZ_ALBUMID":"musicbrainz_albumid","track:MUSICBRAINZ_ARTISTID":"musicbrainz_artistid","track:PUBLISHER":"label","track:GENRE":"genre","track:ENCODER":"encodedby","track:ENCODER_OPTIONS":"encodersettings","edition:TOTAL_PARTS":"totaldiscs",picture:"picture"};class eI extends eo{constructor(){super(["matroska"],eS)}}let ev={NAME:"title",AUTH:"artist","(c) ":"copyright",ANNO:"comment"};class eA extends ea{constructor(){super(["AIFF"],ev)}}var eE=e.i(56382);class eC{constructor(){this.tagMappers={},[new es,new ep,new eu,new ey,new ey,new ek,new eg,new ed,new ew,new eI,new eA].forEach(e=>{this.registerTagMapper(e)})}mapTag(e,t,r){if(this.tagMappers[e])return this.tagMappers[e].mapGenericTag(t,r);throw new eE.InternalParserError(`No generic tag mapper defined for tag-format: ${e}`)}registerTagMapper(e){for(let t of e.tagTypes)this.tagMappers[t]=e}}var ez=e.i(47587);let e_=/\[(\d{2}):(\d{2})\.(\d{2,3})]/,eN=(0,T.default)("music-metadata:collector"),eM=["matroska","APEv2","vorbis","ID3v2.4","ID3v2.3","ID3v2.2","exif","asf","iTunes","AIFF","ID3v1"];class eR{constructor(e){this.format={tagTypes:[],trackInfo:[]},this.native={},this.common={track:{no:null,of:null},disk:{no:null,of:null},movementIndex:{no:null,of:null}},this.quality={warnings:[]},this.commonOrigin={},this.originPriority={},this.tagMapper=new eC,this.opts=e;let t=1;for(const e of eM)this.originPriority[e]=t++;this.originPriority.artificial=500,this.originPriority.id3v1=600}hasAny(){return Object.keys(this.native).length>0}addStreamInfo(e){eN(`streamInfo: type=${e.type?et.TrackTypeValueToKeyMap[e.type]:"?"}, codec=${e.codecName}`),this.format.trackInfo.push(e)}setFormat(e,t){eN(`format: ${e} = ${t}`),this.format[e]=t,this.opts?.observer&&this.opts.observer({metadata:this,tag:{type:"format",id:e,value:t}})}setAudioOnly(){this.setFormat("hasAudio",!0),this.setFormat("hasVideo",!1)}async addTag(e,t,r){eN(`tag ${e}.${t} = ${r}`),this.native[e]||(this.format.tagTypes.push(e),this.native[e]=[]),this.native[e].push({id:t,value:r}),await this.toCommon(e,t,r)}addWarning(e){this.quality.warnings.push({message:e})}async postMap(e,t){switch(t.id){case"artist":return this.handleSingularArtistTag(e,t,"artist","artists");case"albumartist":return this.handleSingularArtistTag(e,t,"albumartist","albumartists");case"artists":return this.handlePluralArtistTag(e,t,"artist","artists");case"albumartists":return this.handlePluralArtistTag(e,t,"albumartist","albumartists");case"picture":return this.postFixPicture(t.value).then(r=>{null!==r&&(t.value=r,this.setGenericTag(e,t))});case"totaltracks":this.common.track.of=ea.toIntOrNull(t.value);return;case"totaldiscs":this.common.disk.of=ea.toIntOrNull(t.value);return;case"movementTotal":this.common.movementIndex.of=ea.toIntOrNull(t.value);return;case"track":case"disk":case"movementIndex":{let e=this.common[t.id].of;this.common[t.id]=ea.normalizeTrack(t.value),this.common[t.id].of=null!=e?e:this.common[t.id].of;return}case"bpm":case"year":case"originalyear":t.value=Number.parseInt(t.value,10);break;case"date":{let e=Number.parseInt(t.value.substr(0,4),10);Number.isNaN(e)||(this.common.year=e);break}case"discogs_label_id":case"discogs_release_id":case"discogs_master_release_id":case"discogs_artist_id":case"discogs_votes":t.value="string"==typeof t.value?Number.parseInt(t.value,10):t.value;break;case"replaygain_track_gain":case"replaygain_track_peak":case"replaygain_album_gain":case"replaygain_album_peak":t.value=(0,el.toRatio)(t.value);break;case"replaygain_track_minmax":t.value=t.value.split(",").map(e=>Number.parseInt(e,10));break;case"replaygain_undo":{let e=t.value.split(",").map(e=>Number.parseInt(e,10));t.value={leftChannel:e[0],rightChannel:e[1]};break}case"gapless":case"compilation":case"podcast":case"showMovement":t.value="1"===t.value||1===t.value;break;case"isrc":{let e=this.common[t.id];if(e&&-1!==e.indexOf(t.value))return;break}case"comment":"string"==typeof t.value&&(t.value={text:t.value}),"iTunPGAP"===t.value.descriptor&&this.setGenericTag(e,{id:"gapless",value:"1"===t.value.text});break;case"lyrics":var r,i;"string"==typeof t.value&&(r=t.value,t.value=e_.test(r)?function(e){let t=e.split("\n"),r=[];for(let e of t){let t=e.match(e_);if(t){let i=(60*Number.parseInt(t[1],10)+Number.parseInt(t[2],10))*1e3+(3===t[3].length?Number.parseInt(t[3],10):10*Number.parseInt(t[3],10)),a=e.replace(e_,"").trim();r.push({timestamp:i,text:a})}}return{contentType:ez.LyricsContentType.lyrics,timeStampFormat:ez.TimestampFormat.milliseconds,text:r.map(e=>e.text).join("\n"),syncText:r}}(r):(i=r,{contentType:ez.LyricsContentType.lyrics,timeStampFormat:ez.TimestampFormat.notSynchronized,text:i.trim(),syncText:[]}))}null!==t.value&&this.setGenericTag(e,t)}toCommonMetadata(){return{format:this.format,native:this.native,quality:this.quality,common:this.common}}handleSingularArtistTag(e,t,r,i){if(this.commonOrigin[r]===this.originPriority[e])return this.postMap("artificial",{id:i,value:t.value});this.common[i]||this.setGenericTag("artificial",{id:i,value:t.value}),this.setGenericTag(e,t)}handlePluralArtistTag(e,t,r,i){if((!this.common[r]||this.commonOrigin[r]===this.originPriority.artificial)&&(!this.common[i]||-1===this.common[i].indexOf(t.value))){var a;let e=(a=(this.common[i]||[]).concat([t.value])).length>2?`${a.slice(0,a.length-1).join(", ")} & ${a[a.length-1]}`:a.join(" & ");this.setGenericTag("artificial",{id:r,value:e})}this.setGenericTag(e,t)}async postFixPicture(e){if(e.data&&e.data.length>0){if(!e.format){let t=await W(Uint8Array.from(e.data));if(!t)return null;e.format=t.mime}return e.format=e.format.toLocaleLowerCase(),"image/jpg"===e.format&&(e.format="image/jpeg"),e}return this.addWarning("Empty picture tag found"),null}async toCommon(e,t,r){let i=this.tagMapper.mapTag(e,{id:t,value:r},this);i&&await this.postMap(e,i)}setGenericTag(e,t){var r,i;eN(`common.${t.id} = ${t.value}`);let a=this.commonOrigin[t.id]||1e3,n=this.originPriority[e];if(ei[r=t.id]&&!ei[r].multiple)if(!(n<=a))return eN(`Ignore native tag (singleton): ${e}.${t.id} = ${t.value}`);else this.common[t.id]=t.value,this.commonOrigin[t.id]=n;else if(n===a)(!ei[i=t.id].multiple||ei[i].unique)&&-1!==this.common[t.id].indexOf(t.value)?eN(`Ignore duplicate value: ${e}.${t.id} = ${t.value}`):this.common[t.id].push(t.value);else{if(!(n<a))return eN(`Ignore native tag (list): ${e}.${t.id} = ${t.value}`);this.common[t.id]=[t.value],this.commonOrigin[t.id]=n}this.opts?.observer&&this.opts.observer({metadata:this,tag:{type:"common",id:t.id,value:t.value}})}}let eL={parserType:"mpeg",extensions:[".mp2",".mp3",".m2a",".aac","aacp"],mimeTypes:["audio/mpeg","audio/mp3","audio/aacs","audio/aacp"],load:async()=>(await e.A(4856)).MpegParser},eP={parserType:"apev2",extensions:[".ape"],mimeTypes:["audio/ape","audio/monkeys-audio"],load:async()=>(await e.A(96166)).APEv2Parser},eD={parserType:"asf",extensions:[".asf",".wma",".wmv"],mimeTypes:["audio/ms-wma","video/ms-wmv","audio/ms-asf","video/ms-asf","application/vnd.ms-asf"],load:async()=>(await e.A(97971)).AsfParser},eO={parserType:"dsdiff",extensions:[".dff"],mimeTypes:["audio/dsf","audio/dsd"],load:async()=>(await e.A(99054)).DsdiffParser},eU={parserType:"aiff",extensions:[".aif","aiff","aifc"],mimeTypes:["audio/aiff","audio/aif","audio/aifc","application/aiff"],load:async()=>(await e.A(55758)).AIFFParser},eB={parserType:"dsf",extensions:[".dsf"],mimeTypes:["audio/dsf"],load:async()=>(await e.A(70308)).DsfParser},ej={parserType:"flac",extensions:[".flac"],mimeTypes:["audio/flac"],load:async()=>(await e.A(43602)).FlacParser},eF={parserType:"matroska",extensions:[".mka",".mkv",".mk3d",".mks","webm"],mimeTypes:["audio/matroska","video/matroska","audio/webm","video/webm"],load:async()=>(await e.A(56043)).MatroskaParser},eX={parserType:"mp4",extensions:[".mp4",".m4a",".m4b",".m4pa","m4v","m4r","3gp",".mov",".movie",".qt"],mimeTypes:["audio/mp4","audio/m4a","video/m4v","video/mp4","video/quicktime"],load:async()=>(await e.A(41636)).MP4Parser},e$={parserType:"musepack",extensions:[".mpc"],mimeTypes:["audio/musepack"],load:async()=>(await e.A(95346)).MusepackParser},eG={parserType:"ogg",extensions:[".ogg",".ogv",".oga",".ogm",".ogx",".opus",".spx"],mimeTypes:["audio/ogg","audio/opus","audio/speex","video/ogg"],load:async()=>(await e.A(74814)).OggParser},eW={parserType:"wavpack",extensions:[".wv",".wvp"],mimeTypes:["audio/wavpack"],load:async()=>(await e.A(77549)).WavPackParser},eq={parserType:"riff",extensions:[".wav","wave",".bwf"],mimeTypes:["audio/vnd.wave","audio/wav","audio/wave"],load:async()=>(await e.A(99248)).WaveParser},eY=(0,T.default)("music-metadata:parser:factory");class eV{constructor(){this.parsers=[],[ej,eL,eP,eX,eF,eq,eG,eD,eU,eW,e$,eB,eO].forEach(e=>{this.registerParser(e)})}registerParser(e){this.parsers.push(e)}async parse(e,t,r){if(e.supportsRandomAccess()?(eY("tokenizer supports random-access, scanning for appending headers"),await e0(e,r)):eY("tokenizer does not support random-access, cannot scan for appending headers"),!t){let r=new Uint8Array(4100);if(e.fileInfo.mimeType&&(t=this.findLoaderForContentType(e.fileInfo.mimeType)),!t&&e.fileInfo.path&&(t=this.findLoaderForExtension(e.fileInfo.path)),!t){eY("Guess parser on content..."),await e.peekBuffer(r,{mayBeLess:!0});let i=await W(r,{mpegOffsetTolerance:10});if(!i||!i.mime)throw new eE.CouldNotDetermineFileTypeError("Failed to determine audio format");if(eY(`Guessed file type is mime=${i.mime}, extension=${i.ext}`),!(t=this.findLoaderForContentType(i.mime)))throw new eE.UnsupportedFileTypeError(`Guessed MIME-type not supported: ${i.mime}`)}}eY(`Loading ${t.parserType} parser...`);let i=new eR(r),a=new(await t.load())(i,e,r??{});return eY(`Parser ${t.parserType} loaded`),await a.parse(),i.format.trackInfo&&(void 0===i.format.hasAudio&&i.setFormat("hasAudio",!!i.format.trackInfo.find(e=>e.type===et.TrackType.audio)),void 0===i.format.hasVideo&&i.setFormat("hasVideo",!!i.format.trackInfo.find(e=>e.type===et.TrackType.video))),i.toCommonMetadata()}findLoaderForExtension(e){var t;let r;if(!e)return;let i=(-1===(r=(t=e).lastIndexOf("."))?"":t.substring(r)).toLocaleLowerCase()||e;return this.parsers.find(e=>-1!==e.extensions.indexOf(i))}findLoaderForContentType(e){let t;if(!e)return;try{let r,i;r=J.default.parse(e),t={type:(i=(0,ee.parse)(r.type)).type,subtype:i.subtype,suffix:i.suffix,parameters:r.parameters}}catch(t){eY(`Invalid HTTP Content-Type header value: ${e}`);return}let r=0===t.subtype.indexOf("x-")?t.subtype.substring(2):t.subtype;return this.parsers.find(e=>e.mimeTypes.find(e=>-1!==e.indexOf(`${t.type}/${r}`)))}getSupportedMimeTypes(){let e=new Set;return this.parsers.forEach(t=>{t.mimeTypes.forEach(t=>{e.add(t),e.add(t.replace("/","/x-"))})}),Array.from(e)}}var eZ=e.i(63848),eK=e.i(1664),eH=e.i(34454);async function eQ(e){let t=e.fileInfo.size;if(t>=143){let r=new Uint8Array(15),i=e.position;await e.readBuffer(r,{position:t-143}),e.setPosition(i);let a=(0,eH.textDecode)(r,"latin1");if("LYRICS200"===a.substring(6))return Number.parseInt(a.substring(0,6),10)+15}return 0}async function eJ(e,t={}){let r=(0,y.fromBlob)(e);try{var i,a;return await (i=r,a=t,new eV().parse(i,void 0,a))}finally{await r.close()}}async function e0(e,t={}){let r=e.fileInfo.size;await (0,eK.hasID3v1Header)(e)&&(r-=128,r-=await eQ(e)),t.apeHeader=await eZ.APEv2Parser.findApeFooterOffset(e,r)}async function e1(e){try{let t=await eJ(e,{duration:!0}),r=t.common.title?.trim()??"",i=t.common.artist?.trim()||t.common.artists?.[0]?.trim()||t.common.albumartist?.trim()||t.common.albumartists?.[0]?.trim()||"",a=t.common.album?.trim()??"",n=t.format.duration,s="number"==typeof n&&Number.isFinite(n)?Math.round(n):0;return{title:r,artist:i,album:a,durationSec:s}}catch{return null}}async function e2(e,t,r,i,a,n,s,o){if(!(n.maxScanDepth>0)||!(a>=n.maxScanDepth))for await(let[l,c]of r.entries()){let r=i?`${i}/${l}`:l;if("directory"===c.kind){if(n.followSymlinks&&s.has(r))continue;let i=n.followSymlinks?new Set(s):s;n.followSymlinks&&i.add(r),await e2(e,t,c,r,a+1,n,i,o)}else"file"===c.kind&&function(e,t){let r=e.lastIndexOf(".");if(r<0)return!1;let i=e.slice(r).toLowerCase();return(t??h).has(i)}(l,n.enabledExtensions)&&o.push({rootId:e,rootDisplayName:t,relativePath:r,handle:c})}}function e4(e){let t=e.lastIndexOf("/");return t>=0?e.slice(t+1):e}function e3(e,t){let r=e.split("/").filter(Boolean);return r.length>1?r[r.length-2]??t:t}async function e5(e,t,r,i){let a=`lib:${e.rootId}:${e.relativePath}`,n=r.get(a),s=n?b(n):null,o=i?performance.now():0,l=(t,r)=>{var a;let n,s;return i&&(a={relativePath:e.relativePath,rootDisplayName:e.rootDisplayName,durationMs:performance.now()-o,outcome:t},n=`${a.rootDisplayName}/${a.relativePath}`,s="cached"===a.outcome?"cached":"parsed"===a.outcome?"parsed":"error",console.info(`[muzical scan] ${n} — ${a.durationMs.toFixed(1)} ms (${s})`)),r};try{let r=await e.handle.getFile();if(n&&s&&r.lastModified===s.fileLastModified&&r.size===s.fileSize)return l("cached",n);let i=e4(e.relativePath),o=g(i,t),c=e3(e.relativePath,e.rootDisplayName),u=await e1(r),m={id:a,title:u?.title?u.title:o,artist:u?.artist?u.artist:"Unknown artist",album:u?.album?u.album:c,durationSec:u?.durationSec&&u.durationSec>0?u.durationSec:0,audioUrl:null,library:{rootId:e.rootId,relativePath:e.relativePath}};return l("parsed",m.library?{...m,library:{...m.library,fileLastModified:r.lastModified,fileSize:r.size}}:m)}catch{let r,i;return l("error",(r=g(e4(e.relativePath),t),i=e3(e.relativePath,e.rootDisplayName),{id:`lib:${e.rootId}:${e.relativePath}`,title:r,artist:"Unknown artist",album:i,durationSec:0,audioUrl:null,library:{rootId:e.rootId,relativePath:e.relativePath}}))}}async function e8(e,t,r,i,a){if(0===e.length)return[];let n=Array(e.length),s=0,o=0,l=0,c=e.length,u=()=>{a?.({filesDone:o,filesTotal:c,filesSkipped:l})};u();let m=async()=>{for(;;){let a=s++;if(a>=e.length)break;let c=e[a],m=`lib:${c.rootId}:${c.relativePath}`,d=r.has(m);n[a]=await e5(c,t,r,i),d&&n[a]===r.get(m)&&(l+=1),o+=1,u()}},d=Math.min(8,e.length);return await Promise.all(Array.from({length:d},()=>m())),n}async function e6(e,t,r,i,a,n,s){s?.({phase:"walk"});let o=[];await e2(e,t,r,"",0,i,new Set,o);let l=function(e){let t=new Map;for(let r of e)r.library&&b(r)&&t.set(r.id,r);return t}(a.filter(t=>t.library?.rootId===e));return s?.({phase:"metadata",filesDone:0,filesTotal:o.length,filesSkipped:0}),n&&o.length>0&&console.info(`[muzical scan] ${t}: reading metadata for ${o.length} file${1===o.length?"":"s"}…`),e8(o,i.enabledExtensions,l,n,e=>{s?.({phase:"metadata",...e})})}async function e7(e,t,r,i,a,n){let s=[],o=0,l=null,c=e.filter(e=>t.has(e.id)),u=c.length,m=a?performance.now():0;a&&u>0&&console.info(`[muzical scan] Starting scan of ${u} root${1===u?"":"s"}…`);for(let e=0;e<c.length;e++){let m=c[e],d=t.get(m.id);if(!d)continue;let f=t=>{n?.({rootIndex:e,rootCount:u,rootName:m.name,phase:t.phase,filesDone:t.filesDone,filesTotal:t.filesTotal,filesSkipped:t.filesSkipped})};f({phase:"walk"});try{let e=await e6(m.id,m.name,d,r,i,a,e=>{"walk"===e.phase?f({phase:"walk"}):f({phase:"metadata",filesDone:e.filesDone,filesTotal:e.filesTotal,filesSkipped:e.filesSkipped})});s.push(...e)}catch(e){o+=1,l||(l=e instanceof DOMException?`${e.name}: ${e.message}`:e instanceof Error?e.message:String(e))}}if(s.sort((e,t)=>{let r=e.library?.rootId??"",i=t.library?.rootId??"",a=r.localeCompare(i,void 0,{sensitivity:"base"});if(0!==a)return a;let n=e.library?.relativePath??e.title,s=t.library?.relativePath??t.title;return n.localeCompare(s,void 0,{sensitivity:"base"})}),a){let e=performance.now()-m;console.info(`[muzical scan] Finished: ${s.length} track${1===s.length?"":"s"} in ${e.toFixed(0)} ms`)}return{tracks:s,failedRootCount:o,firstError:l}}function e9(e){return!e.library&&(!!("musicbrainz"===e.source||"youtube"===e.source||e.id.startsWith("musicbrainz:")||e.id.startsWith("youtube:"))||!!e.youtubeQuery?.trim())}function te(e){return e?.trim()||"Unknown artist"}function tt(e,t){return`${e}\u0000${t}`}function tr(e,t){return e.filter(e=>tt(e.album,e.artist)===t)}function ti(e,t){let r=t.trim();return r?e.filter(e=>te(e.artist)===r):[]}function ta(e,t){let r=t.artist.trim()||e.artist,i=t.album.trim()||e.album,a={...e,artist:r,album:i};return e.youtubeQuery?.trim()&&(a.youtubeQuery=`${e.title} ${r}`.trim(),a.youtubeVideoId=void 0),a}function tn(e,t){let r=t.artist.trim()||e.artist,i={...e,artist:r};return e.youtubeQuery?.trim()&&(i.youtubeQuery=`${e.title} ${r}`.trim(),i.youtubeVideoId=void 0),i}function ts(e,t){let r=t.title.trim()||e.title,i=t.artist.trim()||e.artist,a=t.album.trim()||e.album,n={...e,title:r,artist:i,album:a};return e.youtubeQuery?.trim()&&(n.youtubeQuery=`${r} ${i}`.trim(),n.youtubeVideoId=void 0),n}async function to(e,t){let r={mode:"readwrite"};try{let i=await e.queryPermission?.(r);if("granted"===i)return!0;if(!t)return!1;let a=await e.requestPermission?.(r);return"granted"===a}catch{return!1}}async function tl(e,t){let r=e.library;if(!r)return null;let i=t.get(r.rootId);if(!i)return null;let a=r.relativePath.split("/").filter(Boolean);if(0===a.length)return null;let n=i;for(let e=0;e<a.length-1;e++){let t=a[e];if(!t)return null;n=await n.getDirectoryHandle(t)}let s=a[a.length-1];return s?n.getFileHandle(s):null}function tc(e){let t=e.name.toLowerCase();if(t.endsWith(".mp3"))return"mp3";if(t.endsWith(".flac"))return"flac";let r=e.type.toLowerCase();return"audio/mpeg"===r||"audio/mp3"===r?"mp3":"audio/flac"===r||"audio/x-flac"===r?"flac":null}function tu(e){return String(e).split("").map(e=>e.charCodeAt(0))}function tm(e){return new Uint8Array(tu(e))}function td(e){let t=new ArrayBuffer(2*e.length),r=new Uint8Array(t);return new Uint16Array(t).set(tu(e)),r}function tf(e){return[e>>>24&255,e>>>16&255,e>>>8&255,255&e]}e.s(["default",0,e9],66951);e.s(["albumCompositeKey",0,tt,"artistDisplayName",0,te],99513),e.s(["default",0,tr],97891),e.s(["default",0,ti],4728),e.s(["default",0,ta],91768),e.s(["default",0,tn],73973);class tp{_setIntegerFrame(e,t){let r=parseInt(t,10);this.frames.push({name:e,value:r,size:11+r.toString().length})}_setStringFrame(e,t){let r=t.toString(),i=13+2*r.length;"TDAT"===e&&(i=11+r.length),this.frames.push({name:e,value:r,size:i})}_setPictureFrame(e,t,r,i){var a,n,s;let o=function(e){if(!e||!e.length)return null;if(255===e[0]&&216===e[1]&&255===e[2])return"image/jpeg";if(137===e[0]&&80===e[1]&&78===e[2]&&71===e[3])return"image/png";if(71===e[0]&&73===e[1]&&70===e[2])return"image/gif";if(87===e[8]&&69===e[9]&&66===e[10]&&80===e[11])return"image/webp";let t=73===e[0]&&73===e[1]&&42===e[2]&&0===e[3],r=77===e[0]&&77===e[1]&&0===e[2]&&42===e[3];return t||r?"image/tiff":66===e[0]&&77===e[1]?"image/bmp":0===e[0]&&0===e[1]&&1===e[2]&&0===e[3]?"image/x-icon":null}(new Uint8Array(t)),l=r.toString();if(!o)throw Error("Unknown picture MIME type");r||(i=!1),this.frames.push({name:"APIC",value:t,pictureType:e,mimeType:o,useUnicodeEncoding:i,description:l,size:(a=t.byteLength,n=o.length,s=l.length,11+n+1+1+(i?2+2*(s+1):s+1)+a)})}_setLyricsFrame(e,t,r){let i=e.split("").map(e=>e.charCodeAt(0)),a=t.toString(),n=r.toString();this.frames.push({name:"USLT",value:n,language:i,description:a,size:16+2*a.length+2+2+2*n.length})}_setCommentFrame(e,t,r){let i=e.split("").map(e=>e.charCodeAt(0)),a=t.toString(),n=r.toString();this.frames.push({name:"COMM",value:n,language:i,description:a,size:16+2*a.length+2+2+2*n.length})}_setPrivateFrame(e,t){let r=e.toString();this.frames.push({name:"PRIV",value:t,id:r,size:10+r.length+1+t.byteLength})}_setUserStringFrame(e,t){let r=e.toString(),i=t.toString();this.frames.push({name:"TXXX",description:r,value:i,size:13+2*r.length+2+2+2*i.length})}_setUrlLinkFrame(e,t){let r=t.toString();this.frames.push({name:e,value:r,size:10+r.length})}_setPairedTextFrame(e,t){let r;this.frames.push({name:e,value:t,size:(r=0,t.forEach(e=>{r+=2+2*e[0].length+2+2+2*e[1].length+2}),11+r)})}_setSynchronisedLyricsFrame(e,t,r,i,a){var n;let s,o=a.toString(),l=i.split("").map(e=>e.charCodeAt(0));this.frames.push({name:"SYLT",value:t,language:l,description:o,type:e,timestampFormat:r,size:(n=o.length,s=0,t.forEach(e=>{s+=2+2*e[0].length+2+4}),18+2*n+2+s)})}constructor(e){if(!e||"object"!=typeof e||!("byteLength"in e))throw Error("First argument should be an instance of ArrayBuffer or Buffer");this.arrayBuffer=e,this.padding=4096,this.frames=[],this.url=""}setFrame(e,t){switch(e){case"TPE1":case"TCOM":case"TCON":{if(!Array.isArray(t))throw Error(`${e} frame value should be an array of strings`);let r="TCON"===e?";":"/",i=t.join(r);this._setStringFrame(e,i);break}case"TLAN":case"TIT1":case"TIT2":case"TIT3":case"TALB":case"TPE2":case"TPE3":case"TPE4":case"TRCK":case"TPOS":case"TMED":case"TPUB":case"TCOP":case"TKEY":case"TEXT":case"TDAT":case"TCMP":case"TSSE":case"TSRC":this._setStringFrame(e,t);break;case"TBPM":case"TLEN":case"TYER":this._setIntegerFrame(e,t);break;case"USLT":if(t.language=t.language||"eng","object"!=typeof t||!("description"in t)||!("lyrics"in t))throw Error("USLT frame value should be an object with keys description and lyrics");if(t.language&&!t.language.match(/[a-z]{3}/i))throw Error("Language must be coded following the ISO 639-2 standards");this._setLyricsFrame(t.language,t.description,t.lyrics);break;case"APIC":if("object"!=typeof t||!("type"in t)||!("data"in t)||!("description"in t))throw Error("APIC frame value should be an object with keys type, data and description");if(t.type<0||t.type>20)throw Error("Incorrect APIC frame picture type");this._setPictureFrame(t.type,t.data,t.description,!!t.useUnicodeEncoding);break;case"TXXX":if("object"!=typeof t||!("description"in t)||!("value"in t))throw Error("TXXX frame value should be an object with keys description and value");this._setUserStringFrame(t.description,t.value);break;case"WCOM":case"WCOP":case"WOAF":case"WOAR":case"WOAS":case"WORS":case"WPAY":case"WPUB":this._setUrlLinkFrame(e,t);break;case"COMM":if(t.language=t.language||"eng","object"!=typeof t||!("description"in t)||!("text"in t))throw Error("COMM frame value should be an object with keys description and text");if(t.language&&!t.language.match(/[a-z]{3}/i))throw Error("Language must be coded following the ISO 639-2 standards");this._setCommentFrame(t.language,t.description,t.text);break;case"PRIV":if("object"!=typeof t||!("id"in t)||!("data"in t))throw Error("PRIV frame value should be an object with keys id and data");this._setPrivateFrame(t.id,t.data);break;case"IPLS":if(!Array.isArray(t)||!Array.isArray(t[0]))throw Error("IPLS frame value should be an array of pairs");this._setPairedTextFrame(e,t);break;case"SYLT":if("object"!=typeof t||!("type"in t)||!("text"in t)||!("timestampFormat"in t))throw Error("SYLT frame value should be an object with keys type, text and timestampFormat");if(!Array.isArray(t.text)||!Array.isArray(t.text[0]))throw Error("SYLT frame text value should be an array of pairs");if(t.type<0||t.type>6)throw Error("Incorrect SYLT frame content type");if(t.timestampFormat<1||t.timestampFormat>2)throw Error("Incorrect SYLT frame time stamp format");t.language=t.language||"eng",t.description=t.description||"",this._setSynchronisedLyricsFrame(t.type,t.text,t.timestampFormat,t.language,t.description);break;default:throw Error(`Unsupported frame ${e}`)}return this}removeTag(){var e;if(this.arrayBuffer.byteLength<10)return;let t=new Uint8Array(this.arrayBuffer),r=t[3],i=((e=[t[6],t[7],t[8],t[9]])[0]<<21)+(e[1]<<14)+(e[2]<<7)+e[3]+10;73!==t[0]||68!==t[1]||51!==t[2]||r<2||r>4||(this.arrayBuffer=new Uint8Array(t.subarray(i)).buffer)}addTag(){var e;this.removeTag();let t=[255,254],r=10+this.frames.reduce((e,t)=>e+t.size,0)+this.padding,i=new ArrayBuffer(this.arrayBuffer.byteLength+r),a=new Uint8Array(i),n=0,s=[];return s=[73,68,51,3],a.set(s,n),n+=s.length,n++,n++,s=[(e=r-10)>>>21&127,e>>>14&127,e>>>7&127,127&e],a.set(s,n),n+=s.length,this.frames.forEach(e=>{switch(s=tm(e.name),a.set(s,n),n+=s.length,s=tf(e.size-10),a.set(s,n),n+=s.length,n+=2,e.name){case"WCOM":case"WCOP":case"WOAF":case"WOAR":case"WOAS":case"WORS":case"WPAY":case"WPUB":s=tm(e.value),a.set(s,n),n+=s.length;break;case"TPE1":case"TCOM":case"TCON":case"TLAN":case"TIT1":case"TIT2":case"TIT3":case"TALB":case"TPE2":case"TPE3":case"TPE4":case"TRCK":case"TPOS":case"TKEY":case"TMED":case"TPUB":case"TCOP":case"TEXT":case"TSSE":case"TSRC":s=[1].concat(t),a.set(s,n),n+=s.length,s=td(e.value),a.set(s,n),n+=s.length;break;case"TXXX":case"USLT":case"COMM":s=[1],"USLT"!==e.name&&"COMM"!==e.name||(s=s.concat(e.language)),s=s.concat(t),a.set(s,n),n+=s.length,s=td(e.description),a.set(s,n),n+=s.length,s=[0,0].concat(t),a.set(s,n),n+=s.length,s=td(e.value),a.set(s,n),n+=s.length;break;case"TBPM":case"TLEN":case"TDAT":case"TYER":n++,s=tm(e.value),a.set(s,n),n+=s.length;break;case"PRIV":s=tm(e.id),a.set(s,n),n+=s.length,n++,a.set(new Uint8Array(e.value),n),n+=e.value.byteLength;break;case"APIC":s=[+!!e.useUnicodeEncoding],a.set(s,n),n+=s.length,s=tm(e.mimeType),a.set(s,n),n+=s.length,s=[0,e.pictureType],a.set(s,n),n+=s.length,e.useUnicodeEncoding?(s=[].concat(t),a.set(s,n),n+=s.length,s=td(e.description),a.set(s,n),n+=s.length,n+=2):(s=tm(e.description),a.set(s,n),n+=s.length,n++),a.set(new Uint8Array(e.value),n),n+=e.value.byteLength;break;case"IPLS":s=[1],a.set(s,n),n+=s.length,e.value.forEach(e=>{s=[].concat(t),a.set(s,n),n+=s.length,s=td(e[0].toString()),a.set(s,n),n+=s.length,s=[0,0].concat(t),a.set(s,n),n+=s.length,s=td(e[1].toString()),a.set(s,n),n+=s.length,s=[0,0],a.set(s,n),n+=s.length});break;case"SYLT":s=[1].concat(e.language).concat(e.timestampFormat).concat(e.type),a.set(s,n),n+=s.length,s=[].concat(t),a.set(s,n),n+=s.length,s=td(e.description),a.set(s,n),n+=s.length,n+=2,e.value.forEach(e=>{s=[].concat(t),a.set(s,n),n+=s.length,s=td(e[0].toString()),a.set(s,n),n+=s.length,s=[0,0],a.set(s,n),n+=s.length,s=tf(e[1]),a.set(s,n),n+=s.length})}}),n+=this.padding,a.set(new Uint8Array(this.arrayBuffer),n),this.arrayBuffer=i,i}getBlob(){return new Blob([this.arrayBuffer],{type:"audio/mpeg"})}getURL(){return this.url||(this.url=URL.createObjectURL(this.getBlob())),this.url}revokeURL(){URL.revokeObjectURL(this.url)}}async function th(e,t){var r;let i,a;if("mp3"!==tc(e))throw Error("Unsupported file format");return r=await e.arrayBuffer(),(i=new tp(r)).setFrame("TIT2",t.title.trim()),i.setFrame("TPE1",[t.artist.trim()]),(a=t.album.trim())&&i.setFrame("TALB",a),i.addTag()}async function tg(e,t,r,i){let a;if(!e.library)return{ok:!1,reason:"Only local library files can be tagged on disk."};let n=r.get(e.library.rootId);if(!n)return{ok:!1,reason:"Library folder is not available. Try rescanning."};if(!await to(n,i))return{ok:!1,reason:"Write permission is required. Re-add the library folder or allow write access when prompted."};let s=await tl(e,r);if(!s)return{ok:!1,reason:"Could not open the audio file."};let o=await s.getFile();if(!tc(o))return{ok:!1,reason:"Tag writing is supported for MP3 files only."};try{a=await th(o,t)}catch{return{ok:!1,reason:"Failed to update embedded tags in this file."}}try{let e=await s.createWritable();await e.write(a),await e.close()}catch{return{ok:!1,reason:"Could not save tags to the file."}}return{ok:!0}}async function tb(e,t,r){let i=0,a=0,n=null;for(let s of e){if(!s.library)continue;let e=await tg(s,{title:s.title,artist:s.artist,album:s.album},t,r&&0===i&&0===a);e.ok?i+=1:(a+=1,n||(n=e.reason))}return{ok:0===a,writtenCount:i,failedCount:a,reason:n}}function ty(e,t){let r=new Map;for(let t of e)r.set(t.id,t);for(let e of t)e9(e)&&(r.has(e.id)||r.set(e.id,e));return[...r.values()]}function tx(e){return e.library?{...e,source:e.source??"library"}:"youtube"===e.source||e.id.startsWith("youtube:")?{...e,source:"youtube",library:void 0}:"musicbrainz"===e.source||e.id.startsWith("musicbrainz:")?{...e,source:"musicbrainz",library:void 0}:e.youtubeQuery?.trim()?{...e,source:e.source??"musicbrainz",library:void 0}:{...e,library:void 0}}function tk(e){if(!e||"object"!=typeof e||"string"!=typeof e.id||!e.id.trim()||"string"!=typeof e.title||"string"!=typeof e.artist||"string"!=typeof e.album)return null;let t="number"==typeof e.durationSec&&Number.isFinite(e.durationSec)&&e.durationSec>=0?e.durationSec:0,r="library"===e.source||"musicbrainz"===e.source||"youtube"===e.source?e.source:void 0,i="string"==typeof e.audioUrl?e.audioUrl:null===e.audioUrl?null:void 0,a="string"==typeof e.youtubeQuery?e.youtubeQuery:void 0,n="string"==typeof e.youtubeVideoId?e.youtubeVideoId:void 0,s=function(e){if(e&&"object"==typeof e&&"string"==typeof e.rootId&&"string"==typeof e.relativePath)return{rootId:e.rootId,relativePath:e.relativePath}}(e.library);return{id:e.id.trim(),title:e.title,artist:e.artist,album:e.album,durationSec:t,audioUrl:i,youtubeQuery:a,youtubeVideoId:n,source:r,library:s}}async function tT(e,t){let r=e.library;if(!r)return null;let i=t.get(r.rootId);if(!i)return null;let a=r.relativePath.split("/").filter(Boolean);if(0===a.length)return null;let n=i;for(let e=0;e<a.length-1;e++){let t=a[e];if(!t)return null;n=await n.getDirectoryHandle(t)}let s=a[a.length-1];return s?(await n.getFileHandle(s)).getFile():null}function tw(e){return[...e].sort((e,t)=>t.updatedAt-e.updatedAt)}function tS(e){let{tracks:i,contextLabel:a,onClose:n}=e,{playlists:s,addTracksToPlaylist:o,createPlaylist:l}=rw(),c=(0,r.useId)(),u=(0,r.useId)(),m=(0,r.useRef)(null),[d,f]=(0,r.useState)(""),[p,h]=(0,r.useState)(null),[g,b]=(0,r.useState)(null),y=(0,r.useMemo)(()=>tw(s),[s]),x=(0,r.useCallback)(e=>{var t,r;b(null),h((t=o(e,i),r=i.length,0===t?"Already in playlist":t===r?`Added ${t} track${1===t?"":"s"}`:`Added ${t} new track${1===t?"":"s"} (${r-t} already present)`))},[o,i]),k=(0,r.useCallback)(()=>{b(null);let e=d.trim();if(!e)return void b("Enter a playlist name.");let t=l(e,i.map(e=>e.id));t?(f(""),h(`Created “${t.name}” with ${t.trackIds.length} track${1===t.trackIds.length?"":"s"}`)):b("Could not create playlist.")},[l,d,i]);return(0,r.useEffect)(()=>{let e=e=>{"Escape"===e.key&&n()};return document.addEventListener("keydown",e),m.current?.focus(),()=>document.removeEventListener("keydown",e)},[n]),(0,t.jsx)("div",{className:"fixed inset-0 z-50 flex items-end justify-center bg-zinc-900/50 p-4 sm:items-center",role:"presentation",onClick:n,children:(0,t.jsxs)("div",{ref:m,role:"dialog","aria-modal":"true","aria-labelledby":c,tabIndex:-1,className:"flex max-h-[min(85vh,32rem)] w-full max-w-md flex-col overflow-hidden rounded-2xl border border-zinc-200 bg-white shadow-xl dark:border-zinc-700 dark:bg-zinc-950",onClick:e=>e.stopPropagation(),children:[(0,t.jsxs)("header",{className:"flex shrink-0 items-start justify-between gap-3 border-b border-zinc-200 px-4 py-3 dark:border-zinc-800",children:[(0,t.jsxs)("div",{className:"min-w-0",children:[(0,t.jsx)("h2",{id:c,className:"truncate text-base font-semibold text-zinc-900 dark:text-zinc-100",children:"Add to playlist"}),(0,t.jsx)("p",{className:"truncate text-sm text-zinc-500",children:a})]}),(0,t.jsx)("button",{type:"button",onClick:n,className:"shrink-0 cursor-pointer rounded-lg px-2 py-1 text-sm font-medium text-zinc-600 transition hover:bg-zinc-100 dark:text-zinc-400 dark:hover:bg-zinc-800",children:"Close"})]}),(0,t.jsxs)("div",{className:"min-h-0 flex-1 overflow-y-auto overscroll-contain px-4 py-4",children:[(0,t.jsxs)("div",{className:"flex flex-col gap-2",children:[(0,t.jsx)("label",{htmlFor:u,className:"text-xs font-medium uppercase tracking-wider text-zinc-500",children:"Create new playlist"}),(0,t.jsxs)("div",{className:"flex items-center gap-2",children:[(0,t.jsx)("input",{id:u,type:"text",value:d,onChange:e=>f(e.target.value),onKeyDown:e=>{"Enter"===e.key&&(e.preventDefault(),k())},placeholder:"My playlist",className:"min-w-0 flex-1 rounded-lg border border-zinc-200 bg-white px-3 py-2 text-sm text-zinc-900 outline-none transition focus:border-accent-400 focus:ring-2 focus:ring-accent-500/20 dark:border-zinc-700 dark:bg-zinc-900 dark:text-zinc-100 dark:focus:border-accent-500/60",autoFocus:!0}),(0,t.jsx)("button",{type:"button",onClick:k,className:"shrink-0 cursor-pointer rounded-lg bg-accent-500 px-3 py-2 text-xs font-semibold text-zinc-950 transition hover:bg-accent-400",children:"Create"})]}),g?(0,t.jsx)("p",{className:"text-xs text-red-600 dark:text-red-400",children:g}):null,p?(0,t.jsx)("p",{className:"text-xs text-zinc-500 dark:text-zinc-400",children:p}):null]}),(0,t.jsxs)("div",{className:"mt-5",children:[(0,t.jsx)("p",{className:"mb-2 text-xs font-medium uppercase tracking-wider text-zinc-500",children:"Existing playlists"}),0===y.length?(0,t.jsx)("p",{className:"px-1 text-xs text-zinc-500",children:"No playlists yet — create one above."}):(0,t.jsx)("ul",{className:"flex flex-col gap-1",children:y.map(e=>(0,t.jsx)("li",{children:(0,t.jsxs)("button",{type:"button",onClick:()=>x(e.id),className:"flex w-full cursor-pointer items-center justify-between gap-3 rounded-lg border border-zinc-200 bg-white px-3 py-2 text-left text-sm transition hover:border-accent-400/60 hover:bg-accent-50/40 dark:border-zinc-800 dark:bg-zinc-900/40 dark:hover:bg-accent-950/30",children:[(0,t.jsxs)("span",{className:"min-w-0 flex-1",children:[(0,t.jsx)("span",{className:"block truncate font-medium text-zinc-900 dark:text-zinc-100",children:e.name}),(0,t.jsxs)("span",{className:"block truncate text-xs text-zinc-500",children:[e.trackIds.length," track",1===e.trackIds.length?"":"s"]})]}),(0,t.jsx)("span",{className:"shrink-0 rounded-full bg-accent-500/15 px-2.5 py-1 text-xs font-medium text-accent-800 ring-1 ring-accent-500/25 dark:text-accent-300 dark:ring-accent-500/40",children:"Add"})]})},e.id))})]})]})]})})}function tI(e){let{progress:r,onDismiss:i}=e;return r?(0,t.jsxs)("div",{role:"status","aria-live":"polite","aria-busy":r.percent<100,className:"pointer-events-auto fixed bottom-4 right-4 z-50 w-[min(100vw-2rem,22rem)] rounded-xl border border-zinc-200/90 bg-white/95 p-4 pr-10 shadow-lg shadow-zinc-900/10 backdrop-blur-sm dark:border-zinc-700/80 dark:bg-zinc-900/95 dark:shadow-black/40",children:[(0,t.jsx)("button",{type:"button",onClick:i,className:"absolute right-2 top-2 flex h-7 w-7 cursor-pointer items-center justify-center rounded-full text-zinc-500 transition hover:bg-zinc-100 hover:text-zinc-800 dark:hover:bg-zinc-800 dark:hover:text-zinc-200","aria-label":"Dismiss notification",children:(0,t.jsx)("svg",{viewBox:"0 0 24 24",className:"h-4 w-4",fill:"none",stroke:"currentColor",strokeWidth:"2","aria-hidden":!0,children:(0,t.jsx)("path",{d:"M6 6l12 12M18 6L6 18",strokeLinecap:"round"})})}),(0,t.jsx)("p",{className:"text-sm font-medium text-zinc-900 dark:text-zinc-100",children:r.percent>=100?"Library scan complete":"Scanning library"}),(0,t.jsx)("p",{className:"mt-1 truncate text-xs text-zinc-600 dark:text-zinc-400",children:r.label}),(0,t.jsx)("div",{role:"progressbar","aria-valuemin":0,"aria-valuemax":100,"aria-valuenow":r.percent,"aria-label":"Library scan progress",className:"mt-3 h-1.5 overflow-hidden rounded-full bg-zinc-200 dark:bg-zinc-800",children:(0,t.jsx)("div",{className:"h-full rounded-full bg-accent-500 transition-[width] duration-200 ease-out dark:bg-accent-400",style:{width:`${r.percent}%`}})}),(0,t.jsxs)("p",{className:"mt-2 text-right text-[11px] tabular-nums text-zinc-500 dark:text-zinc-500",children:[r.percent,"%",r.filesTotal>0?(0,t.jsxs)("span",{className:"text-zinc-400",children:[" ","· ",r.filesDone,"/",r.filesTotal," files"]}):null]})]}):null}e.s(["default",0,tw],41490);var tv=e.i(70096);function tA(e){return(0,t.jsxs)("svg",{viewBox:"0 0 24 24",fill:"currentColor","aria-hidden":!0,className:e.className,children:[(0,t.jsx)("circle",{cx:"5",cy:"12",r:"1.75"}),(0,t.jsx)("circle",{cx:"12",cy:"12",r:"1.75"}),(0,t.jsx)("circle",{cx:"19",cy:"12",r:"1.75"})]})}function tE(e){let[i,a]=(0,r.useState)(!1),n=(0,r.useRef)(null),s=(0,r.useId)(),o=e.triggerLabel??"Track actions";return(0,r.useEffect)(()=>{if(!i)return;let e=e=>{let t=e.target;t instanceof Node&&(n.current?.contains(t)||a(!1))},t=e=>{"Escape"===e.key&&a(!1)};return document.addEventListener("pointerdown",e),document.addEventListener("keydown",t),()=>{document.removeEventListener("pointerdown",e),document.removeEventListener("keydown",t)}},[i]),(0,t.jsxs)("div",{ref:n,className:"relative shrink-0",children:[(0,t.jsx)("button",{type:"button","aria-haspopup":"menu","aria-expanded":i,"aria-controls":s,"aria-label":o,onClick:()=>a(e=>!e),className:"flex h-8 w-8 cursor-pointer items-center justify-center rounded-full text-zinc-500 transition hover:bg-zinc-200/80 hover:text-zinc-800 dark:hover:bg-zinc-800 dark:hover:text-zinc-200",children:(0,t.jsx)(tA,{className:"h-4 w-4"})}),i?(0,t.jsx)("div",{id:s,role:"menu",className:"absolute top-full right-0 z-30 mt-1 min-w-[11rem] overflow-hidden rounded-lg border border-zinc-200 bg-white py-1 shadow-lg dark:border-zinc-700 dark:bg-zinc-900",children:e.items.map(e=>(0,t.jsx)("button",{type:"button",role:"menuitem",disabled:e.disabled,onClick:()=>{e.disabled||(e.onSelect(),a(!1))},className:"block w-full cursor-pointer px-3 py-2 text-left text-xs font-medium text-zinc-800 transition hover:bg-zinc-100 disabled:cursor-not-allowed disabled:opacity-40 dark:text-zinc-200 dark:hover:bg-zinc-800",children:e.label},e.id))}):null]})}function tC(e){let t=Math.max(0,Math.floor(e)),r=Math.floor(t/60);return`${r}:${(t%60).toString().padStart(2,"0")}`}function tz(e){let t=[{id:"details",label:"View details",onSelect:()=>e.onViewDetails(e.track)}];return e.onViewRelatedSongs&&t.push({id:"related",label:"Related songs",onSelect:()=>e.onViewRelatedSongs(e.track)}),e.onAddToPlaylist&&t.push({id:"add-to-playlist",label:"Add to playlist…",onSelect:()=>e.onAddToPlaylist(e.track)}),e.onRemoveFromLibrary?t.push({id:"remove",label:"Remove from library",onSelect:e.onRemoveFromLibrary}):e.onSave&&t.push({id:"save",label:e.alreadySaved?"In library":"Add to library",disabled:e.alreadySaved,onSelect:e.onSave}),t}function t_(e){let{openTrackDetails:r,openRelatedSongs:i,removeFromLibrary:a}=rw(),n=e.compact?"px-1.5 py-1.5":"px-2 py-2",s=e.compact?"gap-1.5":"gap-2",o=e.subtitle??`${e.track.artist} \xb7 ${e.track.album}`;return(0,t.jsxs)("div",{className:`flex items-center ${s} rounded-lg ${n} hover:bg-zinc-100 dark:hover:bg-zinc-800/80`,children:[(0,t.jsxs)("div",{className:"min-w-0 flex-1",children:[(0,t.jsx)("p",{className:"truncate text-sm font-medium text-zinc-900 dark:text-zinc-100",children:e.track.title}),(0,t.jsx)("p",{className:"truncate text-xs text-zinc-500",children:o})]}),(0,t.jsx)("span",{className:"shrink-0 text-xs tabular-nums text-zinc-500",children:e.track.durationSec>0?tC(e.track.durationSec):"—"}),(0,t.jsx)(tE,{triggerLabel:`Actions for ${e.track.title}`,items:tz({track:e.track,onViewDetails:r,onViewRelatedSongs:i,onSave:e.alreadySaved?void 0:()=>e.onSave(e.track),onRemoveFromLibrary:e.alreadySaved?()=>a(e.track):void 0})}),(0,t.jsx)("button",{type:"button",onClick:()=>e.onQueue(e.track),className:"shrink-0 cursor-pointer rounded-full bg-accent-500/15 px-2.5 py-1 text-xs font-medium text-accent-800 ring-1 ring-accent-500/25 transition hover:bg-accent-500/25 dark:text-accent-300 dark:ring-accent-500/40",children:"Add"})]})}e.s(["default",()=>t_],75878),e.s(["default",0,tE],38602),e.s(["formatDuration",0,tC],34713),e.s(["default",0,tz],74061);var tN=e.i(75353);async function tM(e,t){let r=e.artist.trim(),i=e.track.trim(),a=e.mbid?.trim();if(!a&&(!r||!i))return[];let n=(0,tN.default)();if(!n)throw Error("Add a Last.fm API key in Settings → Last.fm");let s=new URL("/api/lastfm/track-similar",window.location.origin);s.searchParams.set("artist",r),s.searchParams.set("track",i),a&&s.searchParams.set("mbid",a),void 0!==e.limit&&s.searchParams.set("limit",String(e.limit));let o=await fetch(s,{signal:t,headers:{"X-Muzical-Lastfm-Api-Key":n}}),l=await o.json().catch(()=>({}));if(!o.ok)throw console.error("[Last.fm] proxy request failed",{status:o.status,statusText:o.statusText,proxyUrl:s.toString(),body:l}),Error(l.error?.trim()||`Last.fm request failed (${o.status})`);if(Array.isArray(l.tracks))return l.tracks;if("number"==typeof l.error&&l.error>0)throw Error(l.message?.trim()||`Last.fm error ${l.error}`);let c=l.similartracks?.track;if(!c)return[];let u=Array.isArray(c)?c:[c],m=[];for(let e of u){let t=function(e){var t;let r=e.name?.trim(),i="string"==typeof(t=e.artist)?t.trim():t&&"object"==typeof t?(t.name?.trim()||t["#text"]?.trim())??"":"";if(!r||!i)return null;let a=e.mbid?.trim();return{name:r,artistName:i,mbid:a&&a.length>0?a:void 0,match:function(e){if(void 0===e)return;let t=Number.parseFloat(e);return Number.isFinite(t)?t:void 0}(e.match),url:e.url?.trim()||void 0,durationSec:function(e){if(void 0===e)return;let t=Number.parseInt(e,10);return Number.isFinite(t)&&t>0?t:void 0}(e.duration)}}(e);t&&m.push(t)}return m}function tR(e){let t=e.name.trim()||"Unknown title",r=e.artistName.trim()||"Unknown artist",i=e.mbid?.trim();return{id:i&&i.length>0?`musicbrainz:${i}`:`lastfm:${encodeURIComponent(r)}\u0000${encodeURIComponent(t)}`,title:t,artist:r,album:"Unknown album",durationSec:e.durationSec??0,youtubeQuery:`${t} ${r}`.trim(),source:i?"musicbrainz":void 0}}function tL(e){let{seedTrack:i,onClose:a}=e,{libraryTracks:n,addToQueue:s,addToLibrary:o,compactLists:l}=rw(),c=(0,r.useId)(),u=(0,r.useRef)(null),[m,d]=(0,r.useState)(!1),[f,p]=(0,r.useState)(null),[h,g]=(0,r.useState)([]),b=(0,r.useMemo)(()=>new Set(n.map(e=>e.id)),[n]);(0,r.useEffect)(()=>{if(!i)return;if(!(0,tN.default)()){d(!1),p(null),g([]);return}let e=new AbortController;d(!0),p(null),g([]);let t=function(e){let t="musicbrainz:";if(!e.startsWith(t))return null;let r=e.slice(t.length).trim();return r.length>0?r:null}(i.id);return tM({artist:i.artist,track:i.title,mbid:t??void 0,limit:25},e.signal).then(e=>{g(e.map(tR))}).catch(t=>{e.signal.aborted||p(t instanceof Error?t.message:"Failed to load related songs")}).finally(()=>{e.signal.aborted||d(!1)}),()=>e.abort()},[i]),(0,r.useEffect)(()=>{if(!i)return;let e=e=>{"Escape"===e.key&&a()};return document.addEventListener("keydown",e),()=>document.removeEventListener("keydown",e)},[i,a]);let y=(0,r.useCallback)(()=>{0!==h.length&&s(h)},[s,h]);if(!i)return null;let x=(0,tN.default)().length>0;return(0,t.jsx)("div",{className:"fixed inset-0 z-50 flex items-end justify-center bg-zinc-900/50 p-4 sm:items-center",role:"presentation",onClick:e=>{e.target===e.currentTarget&&a()},children:(0,t.jsxs)("div",{ref:u,role:"dialog","aria-modal":"true","aria-labelledby":c,className:"flex max-h-[min(85vh,36rem)] w-full max-w-lg flex-col overflow-hidden rounded-2xl border border-zinc-200 bg-white shadow-xl dark:border-zinc-700 dark:bg-zinc-950",onClick:e=>e.stopPropagation(),children:[(0,t.jsxs)("div",{className:"flex items-start justify-between gap-3 border-b border-zinc-200 px-4 py-3 dark:border-zinc-800",children:[(0,t.jsxs)("div",{className:"min-w-0",children:[(0,t.jsx)("h2",{id:c,className:"text-base font-semibold text-zinc-900 dark:text-zinc-50",children:"Related songs"}),(0,t.jsxs)("p",{className:"mt-0.5 truncate text-sm text-zinc-600 dark:text-zinc-400",children:[i.title," · ",i.artist]}),(0,t.jsx)("p",{className:"mt-1 text-xs text-zinc-500",children:"Via Last.fm listening similarity"})]}),(0,t.jsx)("button",{type:"button",onClick:a,className:"shrink-0 rounded-full px-2 py-1 text-sm font-medium text-zinc-600 hover:bg-zinc-100 dark:text-zinc-400 dark:hover:bg-zinc-800",children:"Close"})]}),(0,t.jsxs)("div",{className:"min-h-0 flex-1 overflow-y-auto overscroll-contain px-2 py-3",children:[x?null:(0,t.jsxs)("p",{className:"px-2 py-4 text-sm text-zinc-600 dark:text-zinc-400",children:["Add a Last.fm API key in"," ",(0,t.jsx)(tv.default,{href:"/settings/lastfm",className:"font-medium text-accent-700 underline-offset-2 hover:underline dark:text-accent-400",onClick:a,children:"Settings → Last.fm"}),"."]}),m?(0,t.jsx)("p",{className:"px-2 py-6 text-center text-sm text-zinc-500",children:"Loading related songs…"}):null,f?(0,t.jsx)("p",{className:"px-2 py-4 text-sm text-red-600 dark:text-red-400",children:f}):null,m||f||!x||0!==h.length?null:(0,t.jsx)("p",{className:"px-2 py-6 text-center text-sm text-zinc-500",children:"No similar tracks found."}),!m&&h.length>0?(0,t.jsx)("ul",{className:"space-y-0.5",children:h.map(e=>(0,t.jsx)("li",{children:(0,t.jsx)(t_,{track:e,compact:l,alreadySaved:b.has(e.id)||e9(e),onQueue:s,onSave:o})},e.id))}):null]}),h.length>0?(0,t.jsx)("div",{className:"border-t border-zinc-200 px-4 py-3 dark:border-zinc-800",children:(0,t.jsxs)("button",{type:"button",onClick:y,className:"w-full rounded-full bg-accent-500 px-4 py-2 text-sm font-medium text-zinc-950 transition hover:bg-accent-400",children:["Add all to queue (",h.length,")"]})}):null]})})}let tP="mt-1 block w-full rounded-lg border border-zinc-300 bg-white px-3 py-2 text-sm text-zinc-900 outline-none ring-accent-500/0 transition focus:border-accent-400 focus:ring-2 focus:ring-accent-500/20 dark:border-zinc-600 dark:bg-zinc-900 dark:text-zinc-100";function tD(e){return{title:e.title,artist:e.artist,album:e.album}}function tO(e){let{track:i,canWriteToFile:a,saving:n,saveError:s,onSave:o}=e,[l,c]=(0,r.useState)(()=>tD(i)),[u,m]=(0,r.useState)(()=>tD(i));(0,r.useEffect)(()=>{let e=tD(i);c(e),m(e)},[i.id,i.title,i.artist,i.album]);let d=l.title!==u.title||l.artist!==u.artist||l.album!==u.album,f=d&&""!==l.title.trim()&&""!==l.artist.trim(),p=(0,r.useCallback)(()=>{c(u)},[u]),h=(0,r.useCallback)(async e=>{if(e.preventDefault(),!f||n)return;let t=ts(i,l),r={title:t.title,artist:t.artist,album:t.album};await o(r),m(r),c(r)},[f,l,o,n,i]);return(0,t.jsxs)("form",{onSubmit:h,className:"space-y-3",children:[(0,t.jsx)("h3",{className:"text-xs font-medium uppercase tracking-wider text-zinc-500",children:"Metadata"}),(0,t.jsxs)("label",{className:"block",children:[(0,t.jsx)("span",{className:"text-xs font-medium text-zinc-500",children:"Title"}),(0,t.jsx)("input",{type:"text",value:l.title,onChange:e=>c(t=>({...t,title:e.target.value})),className:tP,autoComplete:"off",required:!0})]}),(0,t.jsxs)("label",{className:"block",children:[(0,t.jsx)("span",{className:"text-xs font-medium text-zinc-500",children:"Artist"}),(0,t.jsx)("input",{type:"text",value:l.artist,onChange:e=>c(t=>({...t,artist:e.target.value})),className:tP,autoComplete:"off",required:!0})]}),(0,t.jsxs)("label",{className:"block",children:[(0,t.jsx)("span",{className:"text-xs font-medium text-zinc-500",children:"Album"}),(0,t.jsx)("input",{type:"text",value:l.album,onChange:e=>c(t=>({...t,album:e.target.value})),className:tP,autoComplete:"off"})]}),a?(0,t.jsx)("p",{className:"text-xs text-zinc-500",children:"Saving also writes ID3 tags to MP3 files when the library folder allows write access."}):null,i.youtubeQuery?.trim()?(0,t.jsx)("p",{className:"text-xs text-zinc-500",children:"Saving updates the YouTube search query and clears any resolved video id for this track."}):null,s?(0,t.jsx)("p",{className:"text-xs text-red-600 dark:text-red-400",role:"alert",children:s}):null,(0,t.jsxs)("div",{className:"flex flex-wrap gap-2 pt-1",children:[(0,t.jsx)("button",{type:"submit",disabled:!f||n,className:"rounded-full bg-accent-500 px-4 py-2 text-sm font-medium text-zinc-950 transition hover:bg-accent-400 disabled:cursor-not-allowed disabled:opacity-50",children:n?"Saving…":"Save"}),(0,t.jsx)("button",{type:"button",disabled:!d||n,onClick:p,className:"rounded-full border border-zinc-300 bg-white px-4 py-2 text-sm font-medium text-zinc-800 transition hover:bg-zinc-50 disabled:cursor-not-allowed disabled:opacity-50 dark:border-zinc-600 dark:bg-zinc-800 dark:text-zinc-200 dark:hover:bg-zinc-700",children:"Revert"})]})]})}function tU(e){if(!Number.isFinite(e)||e<0)return"—";if(e<1024)return`${e} B`;let t=["KB","MB","GB","TB"],r=e/1024,i=0;for(;r>=1024&&i<t.length-1;)r/=1024,i+=1;return`${r<10?r.toFixed(1):Math.round(r).toString()} ${t[i]}`}function tB(e,t,r,i=!1){if(null==r)return;let a="number"==typeof r?String(r):r.trim();a&&e.push({label:t,value:a,mono:i})}async function tj(e){let t=[];tB(t,"File name",e.name,!0),tB(t,"MIME type",e.type||"—"),t.push({label:"File size",value:tU(e.size)}),t.push({label:"Last modified",value:new Date(e.lastModified).toLocaleString()});try{let{format:r,common:i}=await eJ(e,{duration:!0});r.container&&tB(t,"Container",r.container),r.codec&&tB(t,"Codec",r.codec),"number"==typeof r.bitrate&&r.bitrate>0&&tB(t,"Bitrate",`${Math.round(r.bitrate/1e3)} kbps`),"number"==typeof r.sampleRate&&r.sampleRate>0&&tB(t,"Sample rate",`${r.sampleRate} Hz`),"number"==typeof r.numberOfChannels&&tB(t,"Channels",r.numberOfChannels),"number"==typeof r.bitsPerSample&&r.bitsPerSample>0&&tB(t,"Bits per sample",r.bitsPerSample),tB(t,"Tag title",i.title),tB(t,"Tag artist",i.artist??i.artists?.join(", ")),tB(t,"Tag album artist",i.albumartist??i.albumartists?.join(", ")),tB(t,"Tag album",i.album),"number"==typeof i.year&&tB(t,"Tag year",i.year),i.genre?.length&&tB(t,"Tag genre",i.genre.join(", ")),"number"==typeof i.track?.no&&tB(t,"Tag track #",i.track.no),"number"==typeof i.disk?.no&&tB(t,"Tag disc #",i.disk.no),tB(t,"Tag composer",Array.isArray(i.composer)?i.composer.join(", "):i.composer),tB(t,"Tag comment",i.comment?.join(" · "))}catch{tB(t,"Embedded tags","Could not read metadata from this file")}return t}function tF(e,t,r,i=!1){let a=r?.trim();a&&e.push({label:t,value:a,mono:i})}function tX(e){return 0===e.rows.length?null:(0,t.jsxs)("section",{children:[(0,t.jsx)("h3",{className:"text-xs font-medium uppercase tracking-wider text-zinc-500",children:e.title}),(0,t.jsx)("dl",{className:"mt-2 divide-y divide-zinc-100 rounded-lg border border-zinc-200 dark:divide-zinc-800 dark:border-zinc-800",children:e.rows.map(r=>(0,t.jsxs)("div",{className:"grid gap-0.5 px-3 py-2 sm:grid-cols-[7rem_1fr] sm:gap-3",children:[(0,t.jsx)("dt",{className:"text-xs font-medium text-zinc-500",children:r.label}),(0,t.jsx)("dd",{className:["text-sm break-words text-zinc-900 dark:text-zinc-100",r.mono?"font-mono text-xs":""].join(" "),children:r.value})]},`${e.title}-${r.label}`))})]})}function t$(e){let{track:i,onClose:a}=e,{roots:n,resolveFileForTrack:s,saveTrackMetadata:o}=rw(),l=(0,r.useId)(),c=(0,r.useRef)(null),[u,m]=(0,r.useState)([]),[d,f]=(0,r.useState)(!1),[p,h]=(0,r.useState)(null),[g,b]=(0,r.useState)(!1),[y,x]=(0,r.useState)(null),k=(0,r.useMemo)(()=>{var e;let t;return i?(e={omitEditableTags:!0},t=[],e?.omitEditableTags||(tF(t,"Title",i.title),tF(t,"Artist",i.artist),tF(t,"Album",i.album)),i.durationSec>0&&t.push({label:"Duration",value:tC(i.durationSec)}),tF(t,"Source",i.library?"Local library file":"youtube"===i.source||i.id.startsWith("youtube:")?"YouTube":"musicbrainz"===i.source||i.id.startsWith("musicbrainz:")?"MusicBrainz":i.youtubeVideoId?.trim()?"YouTube":i.youtubeQuery?.trim()?"YouTube (search)":"library"===i.source?"Local library":"Unknown"),tF(t,"Track ID",i.id,!0),i.library&&(tF(t,"Library folder",n.find(e=>e.id===i.library?.rootId)?.name??i.library.rootId),tF(t,"Relative path",i.library.relativePath,!0),"number"==typeof i.library.fileSize&&Number.isFinite(i.library.fileSize)&&t.push({label:"File size (at scan)",value:tU(i.library.fileSize)}),"number"==typeof i.library.fileLastModified&&Number.isFinite(i.library.fileLastModified)&&t.push({label:"Modified (at scan)",value:new Date(i.library.fileLastModified).toLocaleString()})),tF(t,"YouTube query",i.youtubeQuery,!0),tF(t,"YouTube video ID",i.youtubeVideoId,!0),t):[]},[i,n]),T=(0,r.useCallback)(async e=>{if(!i)return;b(!0),x(null);let t=await o(i.id,e);(b(!1),t.ok)?i.library&&s(i).then(async e=>{e&&m(await tj(e))}):x(t.reason)},[s,o,i]);return((0,r.useEffect)(()=>{if(!i?.library)return;let e=!1,t=requestAnimationFrame(()=>{e||(f(!0),h(null),m([]))});return s(i).then(async t=>{if(e)return;if(!t)return void h("Could not open the file. Try rescanning the library folder.");let r=await tj(t);e||m(r)}).catch(()=>{e||h("Failed to read file metadata.")}).finally(()=>{e||f(!1)}),()=>{e=!0,cancelAnimationFrame(t)}},[i,s]),(0,r.useEffect)(()=>{if(i?.library)return;let e=requestAnimationFrame(()=>{m([]),f(!1),h(null)});return()=>cancelAnimationFrame(e)},[i?.library,i?.id]),(0,r.useEffect)(()=>{if(!i)return;let e=e=>{"Escape"===e.key&&a()};return document.addEventListener("keydown",e),c.current?.focus(),()=>document.removeEventListener("keydown",e)},[i,a]),i)?(0,t.jsx)("div",{className:"fixed inset-0 z-50 flex items-end justify-center bg-zinc-900/50 p-4 sm:items-center",role:"presentation",onClick:a,children:(0,t.jsxs)("div",{ref:c,role:"dialog","aria-modal":"true","aria-labelledby":l,tabIndex:-1,className:"flex max-h-[min(85vh,40rem)] w-full max-w-lg flex-col overflow-hidden rounded-2xl border border-zinc-200 bg-white shadow-xl dark:border-zinc-700 dark:bg-zinc-950",onClick:e=>e.stopPropagation(),children:[(0,t.jsxs)("header",{className:"flex shrink-0 items-start justify-between gap-3 border-b border-zinc-200 px-4 py-3 dark:border-zinc-800",children:[(0,t.jsxs)("div",{className:"min-w-0",children:[(0,t.jsx)("h2",{id:l,className:"truncate text-base font-semibold text-zinc-900 dark:text-zinc-100",children:i.title}),(0,t.jsxs)("p",{className:"truncate text-sm text-zinc-500",children:[i.artist," · ",i.album]})]}),(0,t.jsx)("button",{type:"button",onClick:a,className:"shrink-0 cursor-pointer rounded-lg px-2 py-1 text-sm font-medium text-zinc-600 transition hover:bg-zinc-100 dark:text-zinc-400 dark:hover:bg-zinc-800",children:"Close"})]}),(0,t.jsxs)("div",{className:"min-h-0 flex-1 space-y-5 overflow-y-auto overscroll-contain px-4 py-4",children:[(0,t.jsx)(tO,{track:i,canWriteToFile:!!i.library,saving:g,saveError:y,onSave:T}),(0,t.jsx)(tX,{title:"Details",rows:k}),i.library?(0,t.jsxs)("section",{children:[(0,t.jsx)("h3",{className:"text-xs font-medium uppercase tracking-wider text-zinc-500",children:"File & embedded metadata"}),d?(0,t.jsx)("p",{className:"mt-2 text-sm text-zinc-500",children:"Reading file…"}):null,p?(0,t.jsx)("p",{className:"mt-2 text-sm text-red-600 dark:text-red-400",role:"alert",children:p}):null,d||p||!(u.length>0)?null:(0,t.jsx)("dl",{className:"mt-2 divide-y divide-zinc-100 rounded-lg border border-zinc-200 dark:divide-zinc-800 dark:border-zinc-800",children:u.map(e=>(0,t.jsxs)("div",{className:"grid gap-0.5 px-3 py-2 sm:grid-cols-[7rem_1fr] sm:gap-3",children:[(0,t.jsx)("dt",{className:"text-xs font-medium text-zinc-500",children:e.label}),(0,t.jsx)("dd",{className:["text-sm text-zinc-900 break-words dark:text-zinc-100",e.mono?"font-mono text-xs":""].join(" "),children:e.value})]},`file-${e.label}`))})]}):null]})]})}):null}function tG(){return{maxScanDepth:0,followSymlinks:!1,enabledExtensions:[...c]}}e.s(["default",0,tG],81193);let tW="muzical.libraryScanPreferences",tq=new Set(c);function tY(){let e=tG();try{let t=window.localStorage.getItem(tW);if(!t)return e;let r=JSON.parse(t);if(!r||"object"!=typeof r)return e;let i="number"==typeof r.maxScanDepth&&Number.isFinite(r.maxScanDepth)&&r.maxScanDepth>=0?Math.floor(r.maxScanDepth):e.maxScanDepth,a=!0===r.followSymlinks,n=e.enabledExtensions;if(Array.isArray(r.enabledExtensions)){let e=r.enabledExtensions.filter(e=>"string"==typeof e&&tq.has(e.toLowerCase()));e.length>0&&(n=[...new Set(e.map(e=>e.toLowerCase()))])}return{maxScanDepth:i,followSymlinks:a,enabledExtensions:n}}catch{return e}}let tV="muzical.playlists";function tZ(e){return e.trim().replace(/\s+/g," ").slice(0,80)}let tK="muzical.listeningStats.v1";function tH(e){return"number"==typeof e&&Number.isFinite(e)&&e>0?e:0}function tQ(e){if("number"==typeof e&&Number.isFinite(e)&&!(e<=0))return e}let tJ="muzical.playbackSnapshot";function t0(e){try{window.localStorage.setItem(tJ,JSON.stringify(e))}catch{}}function t1(){return{trackIds:[],tracks:[],activeTrackId:null,positionSec:0}}function t2(e){let t=new Set,r=[];for(let i of e){let e=i.youtubeQuery?.trim();!(!e||i.youtubeVideoId?.trim())&&(t.has(i.id)||(t.add(i.id),r.push({trackId:i.id,query:e})))}return r}e.s(["default",0,t2],71569);var t4=e.i(62445);async function t3(e,t){let r=e.trim();if(!r)return null;let i=new URL("/api/youtube/resolve",window.location.origin);i.searchParams.set("q",r);let a=await fetch(i.toString(),{signal:t});if(!a.ok)return null;let n=await a.json();return n.videoId?.trim()||null}var t5=e.i(65079);function t8(e){let t=e.toLowerCase();return t.includes("quota")||t.includes("quotaexceeded")}function t6(){(0,t4.setYoutubeDataApiBlockedInternal)(!0)}e.s(["default",0,t8],56784),e.s(["default",0,t6],95772),e.s(["YOUTUBE_DATA_API_MIN_INTERVAL_MS",0,900,"YOUTUBE_SEARCH_CACHE_TTL_MS",0,3e5,"YOUTUBE_SEARCH_DEBOUNCE_MS",0,500,"YOUTUBE_SEARCH_PAGE_SIZE",0,20],8998);let t7=0,t9=Promise.resolve();async function re(){t9=t9.then(async()=>{let e=Math.max(0,900-(Date.now()-t7));e>0&&await new Promise(t=>setTimeout(t,e)),t7=Date.now()}),await t9}e.s(["default",0,re],32022);let rt=new Map;function rr(e){let t=e.trim().toLowerCase();return t?rt.get(t)??null:null}async function ri(e,t,r){let i=e.trim(),a=t.trim();if(!i||!a||(0,t4.default)())return null;let n=rr(i);if(n)return n;let s=new URL("https://www.googleapis.com/youtube/v3/search");s.searchParams.set("part","snippet"),s.searchParams.set("type","video"),s.searchParams.set("maxResults","5"),s.searchParams.set("videoEmbeddable","true"),s.searchParams.set("q",i),s.searchParams.set("key",a),await re();let o=await fetch(s,{signal:r}),l=await o.json();if(!o.ok){let e=l.error?.message?.trim()??"";return(l.error?.errors?.some(e=>"quotaExceeded"===e.reason)||t8(e))&&t6(),null}for(let e of l.items??[]){let t=e.id?.videoId?.trim();if(t)return!function(e,t){let r=e.trim().toLowerCase(),i=t.trim();r&&i&&rt.set(r,i)}(i,t),t}return null}async function ra(e,t){let r=e.trim();if(!r)return null;let i=rr(r);if(i)return i;let a=(0,t5.default)().trim();if(a&&!(0,t4.default)()){let e=await ri(r,a,t);if(e)return e}return t3(r,t)}async function rn(e,t,r={}){if(0===e.length||(0,t4.default)())return;let i="number"==typeof r.maxConcurrent&&r.maxConcurrent>0?Math.floor(r.maxConcurrent):2,a=r.signal,n=0,s=async()=>{for(;n<e.length;){if(a?.aborted)return;let r=n;n+=1;let i=e[r];if((0,t4.default)())return;let s=null;try{s=await ra(i.query,a)}catch{continue}!(a?.aborted||(0,t4.default)())&&s&&t(i.trackId,s)}},o=Array.from({length:Math.min(i,e.length)},()=>s());await Promise.all(o)}e.s(["default",0,ra],63080),e.s(["default",0,rn],45461);var rs=e.i(40911);let ro=(0,r.createContext)(null),rl="muzical.recentlyPlayedTrackIds",rc="muzical.compactLists",ru="muzical.autoRescanOnStartup",rm="muzical.logLibraryScanTiming",rd="muzical.rememberLastQueue";function rf(e){return Array.isArray(e)?[...e]:[e]}function rp(e){try{let t=window.localStorage.getItem(e);if(!t)return!1;let r=JSON.parse(t);return!0===r}catch{return!1}}function rh(e,t){try{let r=window.localStorage.getItem(e);if(null===r)return t;let i=JSON.parse(r);return!0===i}catch{return t}}function rg(e,t){try{window.localStorage.setItem(e,JSON.stringify(t))}catch{}}function rb(e,t){let r=new Set(e);return r.has(t)?r.delete(t):r.add(t),[...r].sort((e,t)=>e.localeCompare(t,void 0,{sensitivity:"base"}))}let ry="Use Rescan all in Settings → Library, or remove and add the folders again so the browser can access your music.";async function rx(e){if(0===e.size)return!1;let t={mode:"read"};for(let r of e.values())try{let e=await r.queryPermission?.(t);if("granted"!==e)return!1}catch{return!1}return!0}async function rk(e,t){let r={mode:"read"};for(let i of e.values())try{let e=await i.queryPermission?.(r);if("granted"===e||!t)continue;await i.requestPermission?.(r)}catch{}}function rT(e){let{preferences:c}=(0,rs.useYoutubePreferences)(),h=(0,r.useRef)(null),g=(0,r.useRef)(!1),b=(0,r.useRef)(new Map),y=(0,r.useRef)([]),x=(0,r.useRef)([]),k=(0,r.useRef)(null),T=(0,r.useRef)(null),w=(0,r.useRef)(!1),S=(0,r.useRef)(!1),I=(0,r.useRef)(tY()),v=(0,r.useRef)(!1),A=(0,r.useRef)(!1),E=(0,r.useRef)(!1),C=(0,r.useRef)({activeQueueId:null,positionSec:0}),z=(0,r.useRef)(null),_=(0,r.useRef)(!1),[N,M]=(0,r.useState)([]),[R,L]=(0,r.useState)([]),[P,D]=(0,r.useState)([]),[O,U]=(0,r.useState)([]),[B,j]=(0,r.useState)([]),[F,X]=(0,r.useState)([]),[$,G]=(0,r.useState)([]),[W,q]=(0,r.useState)({}),[Y,V]=(0,r.useState)([]),[Z,K]=(0,r.useState)(!1),[H,Q]=(0,r.useState)(!0),[J,ee]=(0,r.useState)(!1),[et,er]=(0,r.useState)(tY),[ei,ea]=(0,r.useState)(!1),[en,es]=(0,r.useState)(null),[eo,el]=(0,r.useState)(null),[ec,eu]=(0,r.useState)(!1),[em,ed]=(0,r.useState)(!1),[ef,ep]=(0,r.useState)(!1),[eh,eg]=(0,r.useState)(null),[eb,ey]=(0,r.useState)(null),[ex,ek]=(0,r.useState)(!1),[eT,ew]=(0,r.useState)(null),[eS,eI]=(0,r.useState)(null),[ev,eA]=(0,r.useState)(!1),[eE,eC]=(0,r.useState)(0),ez=(0,r.useRef)(0),[e_,eN]=(0,r.useState)([]),eM=(0,r.useRef)(!1),[eR,eL]=(0,r.useState)(null),eP=(0,r.useCallback)(e=>{let t=Math.max(0,Math.floor(e));0!==t&&(ez.current+=t,eC(ez.current),eA(!0))},[]),eD=(0,r.useCallback)(e=>{let t=Math.max(0,Math.floor(e));ez.current=Math.max(0,ez.current-t),eC(ez.current),0===ez.current&&eA(!1)},[]);(0,r.useEffect)(()=>{Promise.resolve().then(()=>{ek("showDirectoryPicker"in window)})},[]),(0,r.useEffect)(()=>{Promise.resolve().then(()=>{G((function(e){try{let t=window.localStorage.getItem(e);if(!t)return[];let r=JSON.parse(t);if(!Array.isArray(r))return[];return r.filter(e=>"string"==typeof e)}catch{return[]}})(rl).slice(0,24))})},[]),(0,r.useEffect)(()=>{Promise.resolve().then(()=>{q(function(){try{let e=window.localStorage.getItem(tK);if(!e)return{};let t=JSON.parse(e);if(!t||"object"!=typeof t||Array.isArray(t))return{};let r={};for(let[e,i]of Object.entries(t)){let t=e&&"object"==typeof i&&null!==i?{trackId:e,playCount:Math.floor(tH(i.playCount)),completedCount:Math.floor(tH(i.completedCount)),skipCount:Math.floor(tH(i.skipCount)),totalListenSec:tH(i.totalListenSec),firstPlayedAt:tQ(i.firstPlayedAt),lastPlayedAt:tQ(i.lastPlayedAt),lastCompletedAt:tQ(i.lastCompletedAt),lastSkippedAt:tQ(i.lastSkippedAt)}:null;t&&(0!==t.playCount||0!==t.completedCount||0!==t.skipCount||0!==t.totalListenSec)&&(r[e]=t)}return r}catch{return{}}}()),_.current=!0})},[]),(0,r.useEffect)(()=>{queueMicrotask(()=>{V((function(){try{let e=window.localStorage.getItem(a);if(!e)return[];let t=JSON.parse(e);if(!Array.isArray(t))return[];let r=[];for(let e of t){let t=function(e){var t;if("object"!=typeof e||null===e||"library"!==(t=e.source)&&"musicbrainz"!==t&&"youtube"!==t||"string"!=typeof e.query)return null;let r=e.query.trim();return r?{source:e.source,query:r}:null}(e);t&&r.push(t)}return r}catch{return[]}})().slice(0,12)),S.current=!0})},[]),(0,r.useEffect)(()=>{Promise.resolve().then(()=>{K(rp(rc))})},[]),(0,r.useEffect)(()=>{Promise.resolve().then(()=>{Q(rh(ru,!0))})},[]),(0,r.useEffect)(()=>{Promise.resolve().then(()=>{let e=rp(rm);ee(e),v.current=e})},[]),(0,r.useEffect)(()=>{Promise.resolve().then(()=>{let e=tY();I.current=e,er(e)})},[]),(0,r.useEffect)(()=>{Promise.resolve().then(()=>{let e=rp(rd);A.current=e,ea(e)})},[]),(0,r.useEffect)(()=>{var e=$.slice(0,24);try{window.localStorage.setItem(rl,JSON.stringify(e))}catch{}},[$]),(0,r.useEffect)(()=>{if(_.current)try{window.localStorage.setItem(tK,JSON.stringify(W))}catch{}},[W]),(0,r.useEffect)(()=>{S.current&&n(Y.slice(0,12))},[Y]),(0,r.useEffect)(()=>{queueMicrotask(()=>{eN(function(){try{let e=window.localStorage.getItem(tV);if(!e)return[];return function(e){if(!Array.isArray(e))return[];let t=[];for(let i of e){var r;if(!i||"object"!=typeof i)continue;let e="string"==typeof i.id?i.id:null,a="string"==typeof i.name?tZ(i.name):"",n=Array.isArray(r=i.trackIds)&&r.every(e=>"string"==typeof e)?i.trackIds:null,s="number"==typeof i.createdAt?i.createdAt:Date.now(),o="number"==typeof i.updatedAt?i.updatedAt:s;e&&a&&n&&t.push({id:e,name:a,trackIds:[...n],createdAt:s,updatedAt:o})}return t}(JSON.parse(e))}catch{return[]}}()),eM.current=!0})},[]),(0,r.useEffect)(()=>{if(eM.current)try{let e=e_.slice(0,200);window.localStorage.setItem(tV,JSON.stringify(e))}catch{}},[e_]),(0,r.useEffect)(()=>{x.current=B},[B]),(0,r.useEffect)(()=>()=>{k.current&&(clearTimeout(k.current),k.current=null),T.current&&(clearTimeout(T.current),T.current=null),z.current&&(clearTimeout(z.current),z.current=null)},[]);let eO=(0,r.useCallback)(()=>{if(!A.current)return;if(z.current&&(clearTimeout(z.current),z.current=null),0===F.length)return void t0(t1());let e=C.current.activeQueueId,t=e?F.find(t=>t.queueId===e):F[0];t0({trackIds:F.map(e=>e.track.id),tracks:F.map(e=>e.track),activeTrackId:t?.track.id??null,positionSec:C.current.positionSec})},[F]),eU=(0,r.useCallback)(()=>{!A.current||E.current&&(z.current&&clearTimeout(z.current),z.current=setTimeout(()=>{z.current=null,eO()},400))},[eO]),eB=(0,r.useCallback)(e=>{if(!E.current){if(E.current=!0,A.current){let t=function(){try{let e,t=window.localStorage.getItem(tJ);if(!t)return null;let r=JSON.parse(t);if(!r||"object"!=typeof r||!Array.isArray(r.trackIds))return null;let i=r.trackIds.filter(e=>"string"==typeof e&&e.length>0);if(Array.isArray(r.tracks)){let t=[];for(let e of r.tracks){let r=tk(e);r&&t.push(r)}t.length>0&&(e=t)}let a="string"==typeof r.activeTrackId?r.activeTrackId:null,n="number"==typeof r.positionSec&&Number.isFinite(r.positionSec)&&r.positionSec>=0?r.positionSec:0;return{trackIds:i,tracks:e,activeTrackId:a,positionSec:n}}catch{return null}}();if(t&&t.trackIds.length>0){let r=function(e,t){let r=new Map;for(let t of e)r.set(t.id,t);let i=[];if(t.tracks&&t.tracks.length>0)for(let e of t.tracks)i.push(r.get(e.id)??e);else for(let e of t.trackIds){let t=r.get(e);t&&i.push(t)}let a=i.map(e=>({queueId:crypto.randomUUID(),track:e})),n=null;if(t.activeTrackId){let e=a.find(e=>e.track.id===t.activeTrackId);n=e?.queueId??a[0]?.queueId??null}else n=a[0]?.queueId??null;return{queue:a,activeQueueId:n,positionSec:t.positionSec}}(e,t);if(r.queue.length>0){let e=!1;X(t=>t.length>0?t:(e=!0,r.queue)),e&&(C.current={activeQueueId:r.activeQueueId,positionSec:r.positionSec},es({activeQueueId:r.activeQueueId,positionSec:r.positionSec}))}}}ed(!0)}},[]);(0,r.useEffect)(()=>{if(!E.current)return;let e=new Map(B.map(e=>[e.id,e]));X(t=>t.map(t=>{let r=e.get(t.track.id);return r?{...t,track:r}:t}))},[B]),(0,r.useEffect)(()=>{eU()},[F,eU]),(0,r.useEffect)(()=>{!ec||E.current||eB(B)},[ec,B,eB]),(0,r.useEffect)(()=>{let e=()=>{eO()};return window.addEventListener("pagehide",e),()=>{window.removeEventListener("pagehide",e)}},[eO]);let ej=(0,r.useCallback)(()=>{k.current&&(clearTimeout(k.current),k.current=null);let e=h.current;e&&d(e,y.current.map(e=>e.id),x.current).catch(()=>{})},[]),eF=(0,r.useCallback)(()=>{k.current&&clearTimeout(k.current),k.current=setTimeout(()=>{k.current=null,ej()},450)},[ej]);(0,r.useEffect)(()=>{let e=()=>{ej()};return window.addEventListener("pagehide",e),()=>{window.removeEventListener("pagehide",e)}},[ej]);let eX=(0,r.useCallback)(()=>{T.current&&(clearTimeout(T.current),T.current=null)},[]),e$=(0,r.useCallback)(()=>{eX(),T.current=setTimeout(()=>{T.current=null,eg(null)},4e3)},[eX]),eG=(0,r.useCallback)(()=>{eX(),eg(null)},[eX]),eW=(0,r.useCallback)(e=>{eg({percent:function(e){if(e.rootCount<=0)return 0;let t=100/e.rootCount,r=e.rootIndex*t;if("walk"===e.phase)r+=.12*t;else{let i=e.filesTotal??0,a=e.filesDone??0;r+=t*(.12+.88*(i>0?Math.min(1,a/i):0))}return Math.min(100,Math.round(r))}(e),label:function(e){let t=e.rootCount>1?`[${e.rootIndex+1}/${e.rootCount}] `:"";if("walk"===e.phase)return`${t}Listing files in ${e.rootName}…`;let r=e.filesTotal??0,i=e.filesDone??0,a=e.filesSkipped??0;return r>0?a>0?`${t}Reading tags (${i}/${r}, ${a} unchanged) \xb7 ${e.rootName}`:`${t}Reading tags (${i}/${r}) \xb7 ${e.rootName}`:`${t}Reading tags \xb7 ${e.rootName}`}(e),rootName:e.rootName,filesDone:e.filesDone??0,filesTotal:e.filesTotal??0})},[]),eq=(0,r.useCallback)(async e=>{if(g.current)return null;g.current=!0;let t=y.current,r=b.current;eX(),ep(!0),ey(null),eg({percent:0,label:"Starting library scan…",rootName:null,filesDone:0,filesTotal:0});try{var i;t.length>0&&await rk(r,e);let a={maxScanDepth:(i=I.current).maxScanDepth,followSymlinks:i.followSymlinks,enabledExtensions:new Set(i.enabledExtensions)},n=await e7(t,r,a,x.current,v.current,eW);return eg({percent:100,label:n.tracks.length>0?`Found ${n.tracks.length} track${1===n.tracks.length?"":"s"}`:"Scan complete",rootName:null,filesDone:n.tracks.length,filesTotal:n.tracks.length}),e$(),n}catch(e){return eg(null),ey(e instanceof Error?e.message:"Scan failed"),null}finally{g.current=!1,ep(!1)}},[eW,eX,e$]),eY=(0,r.useCallback)(async(e=!1)=>{let t=await eq(e);if(!t)return;let r=y.current,{tracks:i,failedRootCount:a,firstError:n}=t,s=ty(i,x.current);j(s);let o=h.current;if(o)try{await d(o,r.map(e=>e.id),s)}catch{}e&&a>0&&0===i.length&&r.length>0&&ey(n?`${n} ${ry}`:ry)},[eq]),eV=(0,r.useCallback)((e,t)=>{if(!Number.isFinite(t)||t<=0)return;let r=r=>r.id===e&&r.durationSec<=0?{...r,durationSec:t}:r;j(e=>e.map(r)),X(e=>e.map(e=>({...e,track:r(e.track)}))),eF()},[eF]),eZ=(0,r.useCallback)((e,t)=>{let r=e.trim();if(!r)return;let i=e=>e.id===r?t(e):e;j(e=>e.map(i)),X(e=>e.map(e=>({...e,track:i(e.track)}))),ew(e=>e?.id===r?t(e):e),eF()},[eF]),eK=(0,r.useCallback)(async(e,t)=>{let r=e.trim();if(!r)return{ok:!1,reason:"Invalid track."};let i=x.current.find(e=>e.id===r);if(!i)return{ok:!1,reason:"Track not found."};let a=ts(i,t);return(eZ(r,()=>a),a.library)?tg(a,{title:a.title,artist:a.artist,album:a.album},b.current,!0):{ok:!0}},[eZ]),eH=(0,r.useCallback)(async e=>tb(e,b.current,!0),[]),eQ=(0,r.useCallback)((e,t)=>{let r=e.trim();if(!r)return null;let i=t.artist.trim();if(!i)return null;let a=t.album.trim(),n=e=>tt(e.album,e.artist)===r,s=tr(x.current,r);if(0===s.length)return null;let o=tt(a||s[0].album,i),l=e=>n(e)?ta(e,{artist:i,album:a}):e;return j(e=>e.map(l)),X(e=>e.map(e=>({...e,track:l(e.track)}))),ew(e=>e&&n(e)?l(e):e),D(e=>{if(!e.includes(r))return e;let t=e.filter(e=>e!==r);return t.includes(o)?t:[...t,o]}),eF(),o},[eF]),eJ=(0,r.useCallback)((e,t)=>{let r=e.trim(),i=t.artist.trim();if(!r||!i)return null;let a=e=>te(e.artist)===r;if(0===ti(x.current,r).length)return null;let n=e=>a(e)?tn(e,{artist:i}):e;return j(e=>e.map(n)),X(e=>e.map(e=>({...e,track:n(e.track)}))),ew(e=>e&&a(e)?n(e):e),L(e=>{if(!e.includes(r))return e;let t=e.filter(e=>e!==r);return t.includes(i)?t:[...t,i]}),D(e=>{let t=!1,a=e.map(e=>{let a=e.split("\0"),n=a[0]??"";return te(a[1]??"")!==r?e:(t=!0,tt(n,i))});return t?[...new Set(a)]:e}),eF(),i},[eF]);(0,r.useEffect)(()=>{if(!c.prefetchQueueVideoIds||(0,t4.default)())return;let e=c.prefetchQueueMaxTracks,t=t2(F.map(e=>e.track)).slice(0,e);if(0===t.length)return;let r=new AbortController,i=t.length;return eP(i),rn(t,(e,t)=>{eZ(e,e=>({...e,youtubeVideoId:t}))},{signal:r.signal}).finally(()=>{eD(i)}),()=>{r.abort()}},[F,eZ,c.prefetchQueueVideoIds,c.prefetchQueueMaxTracks,eP,eD]);let e0=(0,r.useCallback)(e=>{let t=(Array.isArray(e)?e:[e]).map(e=>({queueId:crypto.randomUUID(),track:e}));X(e=>[...e,...t])},[]),e1=(0,r.useCallback)(e=>{let t=Array.isArray(e)?[...e]:[e];if(0===t.length)return;let r=t.map(e=>({queueId:crypto.randomUUID(),track:e})),i=r[0].queueId;C.current={activeQueueId:i,positionSec:0},X(r),el({activeQueueId:i}),A.current&&(z.current&&(clearTimeout(z.current),z.current=null),t0({trackIds:t.map(e=>e.id),tracks:t,activeTrackId:t[0].id,positionSec:0}))},[]),e2=(0,r.useCallback)(()=>{el(null)},[]),e4=(0,r.useCallback)(e=>{let t=(Array.isArray(e)?e:[e]).map(tx);0!==t.length&&(j(e=>{let r=new Map(e.map(e=>[e.id,e])),i=!1;for(let e of t){let t=r.get(e.id);if(t){r.set(e.id,{...t,...e,youtubeVideoId:e.youtubeVideoId??t.youtubeVideoId}),i=!0;continue}r.set(e.id,e),i=!0}return i?[...r.values()]:e}),eF())},[eF]),e3=(0,r.useCallback)(e=>{let t=new Set((Array.isArray(e)?e:[e]).map(e=>e.id).filter(Boolean));0!==t.size&&(j(e=>e.filter(e=>!t.has(e.id))),M(e=>e.filter(e=>!t.has(e))),X(e=>e.filter(e=>!t.has(e.track.id))),eF())},[eF]),e5=(0,r.useCallback)(e=>{let t=e.trim();if(!t)return;let r=tr(x.current,t);0!==r.length&&(D(e=>e.filter(e=>e!==t)),e3(r))},[e3]),e8=(0,r.useCallback)(e=>{let t=e.trim();if(!t)return;let r=ti(x.current,t);0!==r.length&&(L(e=>e.filter(e=>e!==t)),e3(r))},[e3]),e6=(0,r.useCallback)(()=>{let e=x.current,t=new Set(e.filter(e9).map(e=>e.id));0!==t.size&&(j(e.filter(e=>!e9(e))),M(e=>e.filter(e=>!t.has(e))),X(e=>e.filter(e=>!t.has(e.track.id))),eF())},[eF]),to=(0,r.useCallback)(e=>{X(t=>t.filter(t=>t.queueId!==e))},[]),tl=(0,r.useCallback)(()=>{C.current={activeQueueId:null,positionSec:0},X([]),A.current&&(z.current&&(clearTimeout(z.current),z.current=null),t0(t1()))},[]),tc=(0,r.useCallback)((e,t)=>{if(!Number.isFinite(e)||!Number.isFinite(t))return;let r=Math.trunc(e),i=Math.trunc(t);X(e=>{if(r<0||i<0||r>=e.length||i>=e.length||r===i)return e;let t=[...e],[a]=t.splice(r,1);return t.splice(i,0,a),t})},[]),tu=(0,r.useCallback)(e=>{let t=e.trim();t&&G(e=>[t,...e.filter(e=>e!==t)].slice(0,24))},[]),tm=(0,r.useCallback)(e=>{let t=e.trim();if(!t)return;let r=Date.now();tu(t),q(e=>{let i=e[t];return{...e,[t]:{trackId:t,playCount:(i?.playCount??0)+1,completedCount:i?.completedCount??0,skipCount:i?.skipCount??0,totalListenSec:i?.totalListenSec??0,firstPlayedAt:i?.firstPlayedAt??r,lastPlayedAt:r,lastCompletedAt:i?.lastCompletedAt,lastSkippedAt:i?.lastSkippedAt}}})},[tu]),td=(0,r.useCallback)((e,t)=>{let r=e.trim();r&&Number.isFinite(t)&&!(t<=0)&&q(e=>{let i=e[r],a=Math.min(30,Math.max(0,t));return a<=0?e:{...e,[r]:{trackId:r,playCount:i?.playCount??0,completedCount:i?.completedCount??0,skipCount:i?.skipCount??0,totalListenSec:(i?.totalListenSec??0)+a,firstPlayedAt:i?.firstPlayedAt,lastPlayedAt:i?.lastPlayedAt,lastCompletedAt:i?.lastCompletedAt,lastSkippedAt:i?.lastSkippedAt}}})},[]),tf=(0,r.useCallback)(e=>{let t=e.trim();if(!t)return;let r=Date.now();q(e=>{let i=e[t];return{...e,[t]:{trackId:t,playCount:i?.playCount??0,completedCount:(i?.completedCount??0)+1,skipCount:i?.skipCount??0,totalListenSec:i?.totalListenSec??0,firstPlayedAt:i?.firstPlayedAt,lastPlayedAt:i?.lastPlayedAt,lastCompletedAt:r,lastSkippedAt:i?.lastSkippedAt}}})},[]),tp=(0,r.useCallback)(e=>{let t=e.trim();if(!t)return;let r=Date.now();q(e=>{let i=e[t];return{...e,[t]:{trackId:t,playCount:i?.playCount??0,completedCount:i?.completedCount??0,skipCount:(i?.skipCount??0)+1,totalListenSec:i?.totalListenSec??0,firstPlayedAt:i?.firstPlayedAt,lastPlayedAt:i?.lastPlayedAt,lastCompletedAt:i?.lastCompletedAt,lastSkippedAt:r}}})},[]),th=(0,r.useCallback)(()=>{q({});try{window.localStorage.removeItem(tK)}catch{}},[]),tw=(0,r.useCallback)((e,t)=>{let r=t.trim();!r||"library"===e&&r.length<2||"musicbrainz"===e&&r.length<3||"youtube"===e&&r.length<2||V(t=>{let a=function(e,t){let r=t.query.trim();if(!r)return[...e];let a={source:t.source,query:r},n=i(a);return[a,...e.filter(e=>i(e)!==n)].slice(0,12)}(t,{source:e,query:r});return S.current&&n(a),a})},[]),tv=(0,r.useCallback)(()=>{V([]),n([])},[]),tA=(0,r.useCallback)((e,t)=>{let r,i=tZ(e);if(!i)return null;let a=Date.now(),n=new Set,s=[];if(t)for(let e of t)!e||n.has(e)||(n.add(e),s.push(e));let o={id:(r=Math.random().toString(36).slice(2,10),`pl_${Date.now().toString(36)}_${r}`),name:i,trackIds:s,createdAt:a,updatedAt:a};return eN(e=>[o,...e].slice(0,200)),o},[]),tE=(0,r.useCallback)((e,t)=>{let r=tZ(t);if(!r)return!1;let i=!1;return eN(t=>t.map(t=>t.id!==e||(i=!0,t.name===r)?t:{...t,name:r,updatedAt:Date.now()})),i},[]),tC=(0,r.useCallback)(e=>{eN(t=>t.filter(t=>t.id!==e))},[]),tz=(0,r.useCallback)((e,t)=>{let r=rf(t).map(e=>e.id).filter(e=>!!e);if(0===r.length)return 0;let i=0;return eN(t=>t.map(t=>{if(t.id!==e)return t;let a=function(e,t){if(0===t.length)return e;let r=new Set(e.trackIds),i=[];for(let e of t)!e||r.has(e)||(r.add(e),i.push(e));return 0===i.length?e:{...e,trackIds:[...e.trackIds,...i],updatedAt:Date.now()}}(t,r);return i=a.trackIds.length-t.trackIds.length,a})),i},[]),t_=(0,r.useCallback)((e,t)=>{0!==t.length&&eN(r=>r.map(r=>r.id===e?function(e,t){if(0===t.length)return e;let r=new Set(t),i=e.trackIds.filter(e=>!r.has(e));return i.length===e.trackIds.length?e:{...e,trackIds:i,updatedAt:Date.now()}}(r,t):r))},[]),tN=(0,r.useCallback)((e,t,r)=>{eN(i=>i.map(i=>i.id===e?function(e,t,r){let i=e.trackIds.length;if(t<0||t>=i)return e;let a=Math.max(0,Math.min(i-1,r));if(a===t)return e;let n=[...e.trackIds],[s]=n.splice(t,1);return n.splice(a,0,s),{...e,trackIds:n,updatedAt:Date.now()}}(i,t,r):i))},[]),tM=(0,r.useCallback)((e,t)=>{let r=rf(e);0!==r.length&&eL({tracks:r,contextLabel:t})},[]),tR=(0,r.useCallback)(()=>{eL(null)},[]),tP=(0,r.useCallback)(e=>{K(e),rg(rc,e)},[]),tD=(0,r.useCallback)(e=>{Q(e),rg(ru,e)},[]),tO=(0,r.useCallback)(e=>{v.current=e,ee(e),rg(rm,e)},[]),tU=(0,r.useCallback)(e=>{ew(e)},[]),tB=(0,r.useCallback)(()=>{ew(null)},[]),tj=(0,r.useCallback)(e=>{eI(e)},[]),tF=(0,r.useCallback)(()=>{eI(null)},[]),tX=(0,r.useCallback)(e=>{I.current=e,er(e);try{window.localStorage.setItem(tW,JSON.stringify(e))}catch{}},[]),tG=(0,r.useCallback)(e=>{A.current=e,ea(e),rg(rd,e),e?eO():t0(t1())},[eO]),tq=(0,r.useCallback)(()=>{es(null)},[]),t3=(0,r.useCallback)((e,t)=>{C.current={activeQueueId:e,positionSec:t},eU()},[eU]),t5=(0,r.useCallback)(e=>tT(e,b.current),[]),t8=(0,r.useMemo)(()=>new Set(N),[N]),t6=(0,r.useMemo)(()=>new Set(R),[R]),t7=(0,r.useMemo)(()=>new Set(P),[P]),t9=(0,r.useCallback)(e=>t8.has(e),[t8]),re=(0,r.useCallback)(e=>t6.has(e),[t6]),rt=(0,r.useCallback)(e=>t7.has(e),[t7]),rr=(0,r.useCallback)(e=>{M(t=>rb(t,e))},[]),ri=(0,r.useCallback)(e=>{L(t=>rb(t,e))},[]),ra=(0,r.useCallback)(e=>{D(t=>rb(t,e))},[]),rT=(0,r.useCallback)(e=>{rr(e.id)},[rr]),rw=(0,r.useCallback)(e=>{M([...e.songIds]),L([...e.artistNames]),D([...e.albumKeys])},[]);(0,r.useEffect)(()=>{if(!w.current)return;let e=h.current;e&&(function(e,t){if(!e.objectStoreNames.contains(l))return Promise.reject(Error(`Missing object store ${l}`));let r={key:m,songIds:[...t.songIds],artistNames:[...t.artistNames],albumKeys:[...t.albumKeys]};return new Promise((t,i)=>{let a=e.transaction(l,"readwrite"),n=a.objectStore(l).put(r);n.onerror=()=>{i(n.error??Error("IndexedDB favorites put failed"))},a.oncomplete=()=>{t()},a.onerror=()=>{i(a.error??Error("IndexedDB favorites transaction failed"))}})})(e,{songIds:N,artistNames:R,albumKeys:P}).catch(()=>{})},[N,R,P]);let rS=(0,r.useCallback)(async e=>{try{let t=crypto.randomUUID(),r=Date.now(),i={id:t,name:e.name,addedAt:r,handle:e},a=h.current;if(!a)return void ey("Library database is not ready yet.");await new Promise((e,t)=>{let r=a.transaction(o,"readwrite"),n=r.objectStore(o).put(i);n.onerror=()=>{t(n.error??Error("IndexedDB put failed"))},r.oncomplete=()=>{e()},r.onerror=()=>{t(r.error??Error("IndexedDB transaction failed"))}}),b.current.set(t,e);let n=[...y.current,{id:t,name:e.name,addedAt:r}];y.current=n,U(n),await eY(!0)}catch(e){ey(p(e))}},[eY]),rI=(0,r.useCallback)(()=>{let e;if(!window.isSecureContext)return void ey("Folder access needs a secure context. Use https:// or open the app at http://localhost.");if(!ex)return void ey("This browser does not support folder selection. Use a Chromium-based desktop browser.");if(!h.current)return void ey("Library database is not ready yet.");ey(null);try{e=window.showDirectoryPicker({mode:"readwrite"})}catch(t){let e=p(t);e&&ey(e);return}e.then(e=>rS(e)).catch(e=>{if(e instanceof DOMException&&"AbortError"===e.name)return;let t=p(e);t&&ey(t)})},[ex,rS]),rv=(0,r.useCallback)(async e=>{let t=h.current;if(t)try{await new Promise((r,i)=>{let a=t.transaction(o,"readwrite"),n=a.objectStore(o).delete(e);n.onerror=()=>{i(n.error??Error("IndexedDB delete failed"))},a.oncomplete=()=>{r()},a.onerror=()=>{i(a.error??Error("IndexedDB transaction failed"))}}),b.current.delete(e);let r=y.current.filter(t=>t.id!==e);y.current=r,U(r),await eY(!0)}catch(e){ey(e instanceof Error?e.message:"Could not remove library folder")}},[eY]),rA=(0,r.useCallback)(async()=>{await eY(!0)},[eY]);(0,r.useEffect)(()=>{let e=!1;return(async()=>{let t=[];try{var r;let i=await new Promise((e,t)=>{let r=indexedDB.open(s,3);r.onerror=()=>{t(r.error??Error("IndexedDB open failed"))},r.onsuccess=()=>{e(r.result)},r.onupgradeneeded=()=>{let e=r.result;e.objectStoreNames.contains(o)||e.createObjectStore(o,{keyPath:"id"}),e.objectStoreNames.contains(l)||e.createObjectStore(l,{keyPath:"key"})}});if(e)return void i.close();h.current=i;try{let t=await (!i.objectStoreNames.contains(l)?Promise.resolve(f()):new Promise((e,t)=>{let r=i.transaction(l,"readonly").objectStore(l).get(m);r.onerror=()=>{t(r.error??Error("IndexedDB favorites get failed"))},r.onsuccess=()=>{let t=r.result;t&&t.key===m&&Array.isArray(t.songIds)&&Array.isArray(t.artistNames)&&Array.isArray(t.albumKeys)?e({key:m,songIds:[...t.songIds],artistNames:[...t.artistNames],albumKeys:[...t.albumKeys]}):e(f())}}));e||(M(t.songIds),L(t.artistNames),D(t.albumKeys))}catch{e||(M([]),L([]),D([]))}e||(w.current=!0),navigator.storage?.persist?.();let a=await new Promise((e,t)=>{let r=i.transaction(o,"readonly").objectStore(o).getAll();r.onerror=()=>{t(r.error??Error("IndexedDB getAll failed"))},r.onsuccess=()=>{e(r.result)}});if(e)return;let n=new Map,c=[];for(let e of a)n.set(e.id,e.handle),c.push({id:e.id,name:e.name,addedAt:e.addedAt});if(e)return;b.current=n,y.current=c,U(c),t=[];let p=!1,g=[];try{let a=await (!i.objectStoreNames.contains(l)?Promise.resolve(null):new Promise((e,t)=>{let r=i.transaction(l,"readonly").objectStore(l).get(u);r.onerror=()=>{t(r.error??Error("IndexedDB catalog get failed"))},r.onsuccess=()=>{let t=r.result;t&&t.key===u&&Array.isArray(t.rootIds)&&Array.isArray(t.tracks)?e(t):e(null)}}));if(!e&&a){let e=function(e){let t=[],r=new Set;for(let i of e){let e=tk(i);!e||r.has(e.id)||(r.add(e.id),t.push(e))}return t}(a.tracks);(g=e.filter(e9),c.length>0&&(r=a.rootIds,c.length===r.length&&[...c].map(e=>e.id).sort((e,t)=>e.localeCompare(t,void 0,{sensitivity:"base"})).every((e,t)=>e===r[t])))?(t=e,j(t),p=!0):g.length>0&&(t=g,j(g),p=!0)}}catch{}if(e)return;let k=c.length>0&&await rx(n),T=rh(ru,!0);if(e)return;if(k&&T&&!e){let r=await eq(!1);if(e||!r)return;let{tracks:a,firstError:n,failedRootCount:s}=r;if(0===a.length&&c.length>0&&s>0)if(p)ey(null);else{t=ty(a,g),j(t);try{await d(i,c.map(e=>e.id),t)}catch{}ey(n?`${n} ${ry}`:ry)}else{t=ty(a,x.current),j(t);try{await d(i,c.map(e=>e.id),t)}catch{}}}}catch(t){e||ey(t instanceof Error?t.message:"Could not load library")}finally{e||(E.current||eB(t),eu(!0))}})(),()=>{e=!0}},[eq,eB]);let rE=(0,r.useMemo)(()=>({roots:O,libraryTracks:B,queue:F,recentlyPlayedTrackIds:$,listeningStats:W,recentBrowseSearches:Y,compactLists:Z,autoRescanOnStartup:H,logLibraryScanTiming:J,scanPreferences:et,rememberLastQueue:ei,playbackRestore:en,playNowRequest:eo,isQueueReady:em,isScanning:ef,youtubePrefetchActive:ev,youtubePrefetchVideoCount:eE,beginYoutubePrefetch:eP,endYoutubePrefetch:eD,scanError:eb,hasDirectoryPicker:ex,addLibraryFolder:rI,removeLibraryFolder:rv,rescanAll:rA,addToQueue:e0,playNow:e1,addToLibrary:e4,removeFromLibrary:e3,removeAlbumFromLibrary:e5,removeArtistFromLibrary:e8,removeAllMusicBrainzFromLibrary:e6,removeFromQueue:to,clearQueue:tl,recordRecentlyPlayedTrack:tu,recordTrackPlaybackStarted:tm,recordTrackPlaybackProgress:td,recordTrackPlaybackCompleted:tf,recordTrackSkipped:tp,clearListeningStats:th,recordRecentBrowseSearch:tw,clearRecentBrowseSearches:tv,setCompactLists:tP,setAutoRescanOnStartup:tD,setLogLibraryScanTiming:tO,setScanPreferences:tX,setRememberLastQueue:tG,consumePlaybackRestore:tq,consumePlayNowRequest:e2,reportPlayback:t3,reorderQueueItems:tc,resolveFileForTrack:t5,bumpTrackDuration:eV,patchTrackById:eZ,saveTrackMetadata:eK,writeLibraryTracksToFiles:eH,patchAlbumMetadataByKey:eQ,patchArtistMetadataByKey:eJ,favoriteSongIds:N,favoriteArtistNames:R,favoriteAlbumKeys:P,isFavoriteSong:t9,isFavoriteArtist:re,isFavoriteAlbum:rt,toggleFavoriteSong:rr,toggleFavoriteArtist:ri,toggleFavoriteAlbum:ra,toggleFavoriteTrack:rT,importFavorites:rw,detailsTrack:eT,openTrackDetails:tU,closeTrackDetails:tB,relatedSongsSeedTrack:eS,openRelatedSongs:tj,closeRelatedSongs:tF,playlists:e_,createPlaylist:tA,renamePlaylist:tE,deletePlaylist:tC,addTracksToPlaylist:tz,removeTracksFromPlaylist:t_,reorderPlaylistTracks:tN,openAddToPlaylist:tM}),[O,B,F,$,W,Y,Z,H,J,et,ei,en,eo,em,ef,ev,eE,eP,eD,eb,ex,rI,rv,rA,e0,e1,e4,e3,e5,e8,e6,to,tl,tu,tm,td,tf,tp,th,tw,tv,tP,tD,tO,tX,tG,tq,e2,t3,tc,t5,eV,eZ,eK,eH,eQ,eJ,N,R,P,t9,re,rt,rr,ri,ra,rT,rw,eT,tU,tB,eS,tj,tF,e_,tA,tE,tC,tz,t_,tN,tM]);return(0,t.jsxs)(ro.Provider,{value:rE,children:[e.children,(0,t.jsx)(tI,{progress:eh,onDismiss:eG}),(0,t.jsx)(t$,{track:eT,onClose:tB}),(0,t.jsx)(tL,{seedTrack:eS,onClose:tF}),eR?(0,t.jsx)(tS,{tracks:eR.tracks,contextLabel:eR.contextLabel,onClose:tR}):null]})}function rw(){let e=(0,r.useContext)(ro);if(!e)throw Error("useLibrary must be used within LibraryProvider");return e}}]);
1
+ (globalThis.TURBOPACK||(globalThis.TURBOPACK=[])).push(["object"==typeof document?document.currentScript:void 0,32537,(e,t,r)=>{"use strict";var i=/; *([!#$%&'*+.^_`|~0-9A-Za-z-]+) *= *("(?:[\u000b\u0020\u0021\u0023-\u005b\u005d-\u007e\u0080-\u00ff]|\\[\u000b\u0020-\u00ff])*"|[!#$%&'*+.^_`|~0-9A-Za-z-]+) */g,a=/^[\u000b\u0020-\u007e\u0080-\u00ff]+$/,n=/^[!#$%&'*+.^_`|~0-9A-Za-z-]+$/,s=/\\([\u000b\u0020-\u00ff])/g,o=/([\\"])/g,l=/^[!#$%&'*+.^_`|~0-9A-Za-z-]+\/[!#$%&'*+.^_`|~0-9A-Za-z-]+$/;function c(e){this.parameters=Object.create(null),this.type=e}r.format=function(e){if(!e||"object"!=typeof e)throw TypeError("argument obj is required");var t=e.parameters,r=e.type;if(!r||!l.test(r))throw TypeError("invalid type");var i=r;if(t&&"object"==typeof t)for(var s,c=Object.keys(t).sort(),u=0;u<c.length;u++){if(s=c[u],!n.test(s))throw TypeError("invalid parameter name");i+="; "+s+"="+function(e){var t=String(e);if(n.test(t))return t;if(t.length>0&&!a.test(t))throw TypeError("invalid parameter value");return'"'+t.replace(o,"\\$1")+'"'}(t[s])}return i},r.parse=function(e){if(!e)throw TypeError("argument string is required");var t,r,a,n="object"==typeof e?function(e){var t;if("function"==typeof e.getHeader?t=e.getHeader("content-type"):"object"==typeof e.headers&&(t=e.headers&&e.headers["content-type"]),"string"!=typeof t)throw TypeError("content-type header is missing from object");return t}(e):e;if("string"!=typeof n)throw TypeError("argument string is required to be a string");var o=n.indexOf(";"),u=-1!==o?n.slice(0,o).trim():n.trim();if(!l.test(u))throw TypeError("invalid media type");var m=new c(u.toLowerCase());if(-1!==o){for(i.lastIndex=o;r=i.exec(n);){if(r.index!==o)throw TypeError("invalid parameter format");o+=r[0].length,t=r[1].toLowerCase(),34===(a=r[2]).charCodeAt(0)&&-1!==(a=a.slice(1,-1)).indexOf("\\")&&(a=a.replace(s,"$1")),m.parameters[t]=a}if(o!==n.length)throw TypeError("invalid parameter format")}return m}},82087,(e,t,r)=>{"use strict";var i=/^[A-Za-z0-9][A-Za-z0-9!#$&^_.-]{0,126}$/,a=/^[A-Za-z0-9][A-Za-z0-9!#$&^_-]{0,126}$/,n=/^ *([A-Za-z0-9][A-Za-z0-9!#$&^_-]{0,126})\/([A-Za-z0-9][A-Za-z0-9!#$&^_.+-]{0,126}) *$/;function s(e,t,r){this.type=e,this.subtype=t,this.suffix=r}r.format=function(e){if(!e||"object"!=typeof e)throw TypeError("argument obj is required");var t=e.subtype,r=e.suffix,n=e.type;if(!n||!a.test(n))throw TypeError("invalid type");if(!t||!i.test(t))throw TypeError("invalid subtype");var s=n+"/"+t;if(r){if(!a.test(r))throw TypeError("invalid suffix");s+="+"+r}return s},r.parse=function(e){if(!e)throw TypeError("argument string is required");if("string"!=typeof e)throw TypeError("argument string is required to be a string");var t,r=n.exec(e.toLowerCase());if(!r)throw TypeError("invalid media type");var i=r[1],a=r[2],o=a.lastIndexOf("+");return -1!==o&&(t=a.substr(o+1),a=a.substr(0,o)),new s(i,a,t)},r.test=function(e){if(!e)throw TypeError("argument string is required");if("string"!=typeof e)throw TypeError("argument string is required to be a string");return n.test(e.toLowerCase())}},70487,75397,21589,30164,66951,99513,97891,4728,91768,73973,56784,95772,8998,32022,63080,41490,38602,34713,74061,75878,81193,71569,45461,e=>{"use strict";e.s(["LibraryProvider",()=>rA,"useLibrary",()=>rE],70487);var t=e.i(8063),r=e.i(51268);function i(e){return`${e.source}\u0000${e.query.trim().toLowerCase()}`}let a="muzical.recentBrowseSearches";function n(e){try{window.localStorage.setItem(a,JSON.stringify(e))}catch{}}e.s(["DEFAULT_BROWSE_VIEW_STORAGE_KEY",0,"muzical.defaultBrowseView","RECENT_BROWSE_SEARCHES_LIMIT",0,12,"RECENT_BROWSE_SEARCHES_STORAGE_KEY",0,a],75397);let s="muzical-library",o="libraryRoots",l="libraryCatalog",c=[".mp3",".flac",".m4a",".aac",".ogg",".opus",".wav",".webm",".aiff",".aif",".alac",".wma"];e.s(["LIBRARY_AUDIO_EXTENSIONS",0,c,"LIBRARY_CATALOG_STORE_NAME",0,l,"LIBRARY_DB_NAME",0,s,"LIBRARY_DB_VERSION",0,3,"LIBRARY_STORE_NAME",0,o],21589);let u="catalog",m="favorites";function d(e,t,r){if(!e.objectStoreNames.contains(l))return Promise.reject(Error(`Missing object store ${l}`));let i={key:u,rootIds:[...t].sort((e,t)=>e.localeCompare(t,void 0,{sensitivity:"base"})),tracks:[...r],savedAt:Date.now()};return new Promise((t,r)=>{let a=e.transaction(l,"readwrite"),n=a.objectStore(l).put(i);n.onerror=()=>{r(n.error??Error("IndexedDB catalog put failed"))},a.oncomplete=()=>{t()},a.onerror=()=>{r(a.error??Error("IndexedDB catalog transaction failed"))}})}let f=()=>({key:m,songIds:[],artistNames:[],albumKeys:[]});function p(e){if(e instanceof DOMException){if("AbortError"===e.name)return"";if("SecurityError"===e.name||"NotAllowedError"===e.name||e.message.includes("not allowed by the user agent")||e.message.includes("The request is not allowed"))return"Folder access is blocked in this context. Open the app in Chrome or Edge in a normal window (not an embedded preview), and use https:// or http://localhost."}if(e instanceof Error){let t=e.message;return t.includes("not allowed by the user agent")||t.includes("The request is not allowed")?"Folder access is blocked in this context. Open the app in Chrome or Edge in a normal window (not an embedded preview), and use https:// or http://localhost.":t}return"Could not access the folder."}let h=new Set(c);function g(e,t){let r=e.lastIndexOf(".");if(r<0)return e;let i=e.slice(r).toLowerCase();return(t??h).has(i)?e.slice(0,r):e}function b(e){let t=e.library;if(!t)return null;let{fileLastModified:r,fileSize:i}=t;return"number"==typeof r&&Number.isFinite(r)&&"number"==typeof i&&Number.isFinite(i)&&!(i<0)?{fileLastModified:r,fileSize:i}:null}e.s(["parseBlob",()=>eJ,"scanAppendingHeaders",()=>e0],30164);var y=e.i(52333),x=e.i(81995),k=e.i(67396),T=e.i(93432);let w={get:e=>({signature:x.UINT32_LE.get(e,0),compressedSize:x.UINT32_LE.get(e,8),uncompressedSize:x.UINT32_LE.get(e,12)}),len:16},S={get(e){let t=x.UINT16_LE.get(e,6);return{signature:x.UINT32_LE.get(e,0),minVersion:x.UINT16_LE.get(e,4),dataDescriptor:!!(8&t),compressedMethod:x.UINT16_LE.get(e,8),compressedSize:x.UINT32_LE.get(e,18),uncompressedSize:x.UINT32_LE.get(e,22),filenameLength:x.UINT16_LE.get(e,26),extraFieldLength:x.UINT16_LE.get(e,28),filename:null}},len:30},I={get:e=>({signature:x.UINT32_LE.get(e,0),nrOfThisDisk:x.UINT16_LE.get(e,4),nrOfThisDiskWithTheStart:x.UINT16_LE.get(e,6),nrOfEntriesOnThisDisk:x.UINT16_LE.get(e,8),nrOfEntriesOfSize:x.UINT16_LE.get(e,10),sizeOfCd:x.UINT32_LE.get(e,12),offsetOfStartOfCd:x.UINT32_LE.get(e,16),zipFileCommentLength:x.UINT16_LE.get(e,20)}),len:22},v={get(e){let t=x.UINT16_LE.get(e,8);return{signature:x.UINT32_LE.get(e,0),minVersion:x.UINT16_LE.get(e,6),dataDescriptor:!!(8&t),compressedMethod:x.UINT16_LE.get(e,10),compressedSize:x.UINT32_LE.get(e,20),uncompressedSize:x.UINT32_LE.get(e,24),filenameLength:x.UINT16_LE.get(e,28),extraFieldLength:x.UINT16_LE.get(e,30),fileCommentLength:x.UINT16_LE.get(e,32),relativeOffsetOfLocalHeader:x.UINT32_LE.get(e,42),filename:null}},len:46};function A(e){let t=new Uint8Array(x.UINT32_LE.len);return x.UINT32_LE.put(t,0,e),t}let E=(0,T.default)("tokenizer:inflate"),C=A(0x8074b50),z=A(0x6054b50);class _{constructor(e){this.tokenizer=e,this.syncBuffer=new Uint8Array(262144)}async isZip(){return await this.peekSignature()===0x4034b50}peekSignature(){return this.tokenizer.peekToken(x.UINT32_LE)}async findEndOfCentralDirectoryLocator(){let e=this.tokenizer,t=Math.min(16384,e.fileInfo.size),r=this.syncBuffer.subarray(0,t);await this.tokenizer.readBuffer(r,{position:e.fileInfo.size-t});for(let i=r.length-4;i>=0;i--)if(r[i]===z[0]&&r[i+1]===z[1]&&r[i+2]===z[2]&&r[i+3]===z[3])return e.fileInfo.size-t+i;return -1}async readCentralDirectory(){if(!this.tokenizer.supportsRandomAccess())return void E("Cannot reading central-directory without random-read support");E("Reading central-directory...");let e=this.tokenizer.position,t=await this.findEndOfCentralDirectoryLocator();if(t>0){E("Central-directory 32-bit signature found");let r=await this.tokenizer.readToken(I,t),i=[];this.tokenizer.setPosition(r.offsetOfStartOfCd);for(let e=0;e<r.nrOfEntriesOfSize;++e){let t=await this.tokenizer.readToken(v);if(0x2014b50!==t.signature)throw Error("Expected Central-File-Header signature");t.filename=await this.tokenizer.readToken(new x.StringType(t.filenameLength,"utf-8")),await this.tokenizer.ignore(t.extraFieldLength),await this.tokenizer.ignore(t.fileCommentLength),i.push(t),E(`Add central-directory file-entry: n=${e+1}/${i.length}: filename=${i[e].filename}`)}return this.tokenizer.setPosition(e),i}this.tokenizer.setPosition(e)}async unzip(e){let t=await this.readCentralDirectory();if(t)return this.iterateOverCentralDirectory(t,e);let r=!1;do{let t,i=await this.readLocalFileHeader();if(!i)break;let a=e(i);if(r=!!a.stop,await this.tokenizer.ignore(i.extraFieldLength),i.dataDescriptor&&0===i.compressedSize){let e=[],t=262144;E("Compressed-file-size unknown, scanning for next data-descriptor-signature....");let r=-1;for(;r<0&&262144===t;){t=await this.tokenizer.peekBuffer(this.syncBuffer,{mayBeLess:!0});let i=(r=function(e,t){let r=e.length,i=t.length;if(i>r)return -1;for(let a=0;a<=r-i;a++){let r=!0;for(let n=0;n<i;n++)if(e[a+n]!==t[n]){r=!1;break}if(r)return a}return -1}(this.syncBuffer.subarray(0,t),C))>=0?r:t;if(a.handler){let t=new Uint8Array(i);await this.tokenizer.readBuffer(t),e.push(t)}else await this.tokenizer.ignore(i)}E(`Found data-descriptor-signature at pos=${this.tokenizer.position}`),a.handler&&await this.inflate(i,function(e){let t=new Uint8Array(e.reduce((e,t)=>e+t.length,0)),r=0;for(let i of e)t.set(i,r),r+=i.length;return t}(e),a.handler)}else a.handler?(E(`Reading compressed-file-data: ${i.compressedSize} bytes`),t=new Uint8Array(i.compressedSize),await this.tokenizer.readBuffer(t),await this.inflate(i,t,a.handler)):(E(`Ignoring compressed-file-data: ${i.compressedSize} bytes`),await this.tokenizer.ignore(i.compressedSize));if(E(`Reading data-descriptor at pos=${this.tokenizer.position}`),i.dataDescriptor&&0x8074b50!==(await this.tokenizer.readToken(w)).signature)throw Error(`Expected data-descriptor-signature at position ${this.tokenizer.position-w.len}`)}while(!r)}async iterateOverCentralDirectory(e,t){for(let r of e){let e=t(r);if(e.handler){this.tokenizer.setPosition(r.relativeOffsetOfLocalHeader);let t=await this.readLocalFileHeader();if(t){await this.tokenizer.ignore(t.extraFieldLength);let i=new Uint8Array(r.compressedSize);await this.tokenizer.readBuffer(i),await this.inflate(t,i,e.handler)}}if(e.stop)break}}async inflate(e,t,r){if(0===e.compressedMethod)return r(t);if(8!==e.compressedMethod)throw Error(`Unsupported ZIP compression method: ${e.compressedMethod}`);return E(`Decompress filename=${e.filename}, compressed-size=${t.length}`),r(await _.decompressDeflateRaw(t))}static async decompressDeflateRaw(e){let t=new ReadableStream({start(t){t.enqueue(e),t.close()}}),r=new DecompressionStream("deflate-raw"),i=t.pipeThrough(r);try{let e=new Response(i),t=await e.arrayBuffer();return new Uint8Array(t)}catch(e){throw TypeError(e instanceof Error?`Failed to deflate ZIP entry: ${e.message}`:"Unknown decompression error in ZIP entry")}}async readLocalFileHeader(){let e=await this.tokenizer.peekToken(x.UINT32_LE);if(0x4034b50===e){let e=await this.tokenizer.readToken(S);return e.filename=await this.tokenizer.readToken(new x.StringType(e.filenameLength,"utf-8")),e}if(0x2014b50===e)return!1;if(0xe011cfd0===e)throw Error("Encrypted ZIP");throw Error("Unexpected signature")}}class N{constructor(e){this.tokenizer=e}inflate(){let e=this.tokenizer;return new ReadableStream({async pull(t){let r=new Uint8Array(1024),i=await e.readBuffer(r,{mayBeLess:!0});0===i?t.close():t.enqueue(r.subarray(0,i))}}).pipeThrough(new DecompressionStream("gzip"))}}var M=e.i(44397);let R={get:(e,t)=>127&e[t+3]|e[t+2]<<7|e[t+1]<<14|e[t]<<21,len:4},L=0x80000000-1,P=new Set(["Unexpected signature","Encrypted ZIP","Expected Central-File-Header signature"]),D=["ZIP entry count exceeds ","Unsupported ZIP compression method:","ZIP entry compressed data exceeds ","ZIP entry decompressed data exceeds ","Expected data-descriptor-signature at position "],O=new Set(["Z_BUF_ERROR","Z_DATA_ERROR","ERR_INVALID_STATE"]);class U extends Error{}function B(e,t,r){if(!Number.isFinite(e)||e<0||e>t)throw new U(`${r} has invalid size ${e} (maximum ${t} bytes)`);return e}async function j(e,t,{maximumLength:r=0x1000000,reason:i="skip"}={}){let a=B(t,r,i);await e.ignore(a)}async function F(e,t,r,{maximumLength:i=t.length,reason:a="read"}={}){let n=B(r?.length??t.length,i,a);return e.readBuffer(t,{...r,length:n})}async function X(e,{maximumLength:t=1048576}={}){let r=new ReadableStream({start(t){t.enqueue(e),t.close()}}).pipeThrough(new DecompressionStream("deflate-raw")).getReader(),i=[],a=0;try{for(;;){let{done:e,value:n}=await r.read();if(e)break;if((a+=n.length)>t)throw await r.cancel(),Error(`ZIP entry decompressed data exceeds ${t} bytes`);i.push(n)}}finally{r.releaseLock()}let n=new Uint8Array(a),s=0;for(let e of i)n.set(e,s),s+=e.length;return n}async function $(e,{shouldBuffer:t,maximumLength:r=1048576}={}){let{syncBuffer:i}=e,{length:a}=i,n=[],s=0;for(;;){let o=await e.tokenizer.peekBuffer(i,{mayBeLess:!0}),l=function(e,t){if(e.length<16)return -1;let r=e.length-16;for(let i=0;i<=r;i++)if(0x8074b50===x.UINT32_LE.get(e,i)&&x.UINT32_LE.get(e,i+8)===t+i)return i;return -1}(i.subarray(0,o),s),c=l>=0?0:o===a?Math.min(15,o-1):0,u=l>=0?l:o-c;if(0===u)break;if((s+=u)>r)throw Error(`ZIP entry compressed data exceeds ${r} bytes`);if(t){let t=new Uint8Array(u);await e.tokenizer.readBuffer(t),n.push(t)}else await e.tokenizer.ignore(u);if(l>=0)break}if(V(e.tokenizer)||(e.knownSizeDescriptorScannedBytes+=s),t){let e=new Uint8Array(s),t=0;for(let r of n)e.set(r,t),t+=r.length;return e}}async function G(e,t,{shouldBuffer:r,maximumDescriptorLength:i=1048576}={}){var a;let n;if(t.dataDescriptor&&0===t.compressedSize)return $(e,{shouldBuffer:r,maximumLength:i});if(!r)return void await j(e.tokenizer,t.compressedSize,{maximumLength:V(e.tokenizer)?1048576:e.tokenizer.fileInfo.size,reason:"ZIP entry compressed data"});let s=Math.min(Number.isFinite(n=(a=e.tokenizer).fileInfo.size)?Math.max(0,n-a.position):Number.MAX_SAFE_INTEGER,L);if(!Number.isFinite(t.compressedSize)||t.compressedSize<0||t.compressedSize>s)throw Error(`ZIP entry compressed data exceeds ${s} bytes`);let o=new Uint8Array(t.compressedSize);return await e.tokenizer.readBuffer(o),o}async function W(e,t){return new Q(t).fromBuffer(e)}function q(e){switch(e=e.toLowerCase()){case"application/epub+zip":return{ext:"epub",mime:e};case"application/vnd.oasis.opendocument.text":return{ext:"odt",mime:e};case"application/vnd.oasis.opendocument.text-template":return{ext:"ott",mime:e};case"application/vnd.oasis.opendocument.spreadsheet":return{ext:"ods",mime:e};case"application/vnd.oasis.opendocument.spreadsheet-template":return{ext:"ots",mime:e};case"application/vnd.oasis.opendocument.presentation":return{ext:"odp",mime:e};case"application/vnd.oasis.opendocument.presentation-template":return{ext:"otp",mime:e};case"application/vnd.oasis.opendocument.graphics":return{ext:"odg",mime:e};case"application/vnd.oasis.opendocument.graphics-template":return{ext:"otg",mime:e};case"application/vnd.openxmlformats-officedocument.presentationml.slideshow":return{ext:"ppsx",mime:e};case"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet":return{ext:"xlsx",mime:e};case"application/vnd.ms-excel.sheet.macroenabled":return{ext:"xlsm",mime:"application/vnd.ms-excel.sheet.macroenabled.12"};case"application/vnd.openxmlformats-officedocument.spreadsheetml.template":return{ext:"xltx",mime:e};case"application/vnd.ms-excel.template.macroenabled":return{ext:"xltm",mime:"application/vnd.ms-excel.template.macroenabled.12"};case"application/vnd.ms-powerpoint.slideshow.macroenabled":return{ext:"ppsm",mime:"application/vnd.ms-powerpoint.slideshow.macroenabled.12"};case"application/vnd.openxmlformats-officedocument.wordprocessingml.document":return{ext:"docx",mime:e};case"application/vnd.ms-word.document.macroenabled":return{ext:"docm",mime:"application/vnd.ms-word.document.macroenabled.12"};case"application/vnd.openxmlformats-officedocument.wordprocessingml.template":return{ext:"dotx",mime:e};case"application/vnd.ms-word.template.macroenabledtemplate":return{ext:"dotm",mime:"application/vnd.ms-word.template.macroenabled.12"};case"application/vnd.openxmlformats-officedocument.presentationml.template":return{ext:"potx",mime:e};case"application/vnd.ms-powerpoint.template.macroenabled":return{ext:"potm",mime:"application/vnd.ms-powerpoint.template.macroenabled.12"};case"application/vnd.openxmlformats-officedocument.presentationml.presentation":return{ext:"pptx",mime:e};case"application/vnd.ms-powerpoint.presentation.macroenabled":return{ext:"pptm",mime:"application/vnd.ms-powerpoint.presentation.macroenabled.12"};case"application/vnd.ms-visio.drawing":return{ext:"vsdx",mime:"application/vnd.visio"};case"application/vnd.ms-package.3dmanufacturing-3dmodel+xml":return{ext:"3mf",mime:"model/3mf"}}}function Y(e,t,r){for(let[i,a]of(r={offset:0,...r},t.entries()))if(r.mask){if(a!==(r.mask[i]&e[i+r.offset]))return!1}else if(a!==e[i+r.offset])return!1;return!0}function V(e){let t=e.fileInfo.size;return!Number.isFinite(t)||t===Number.MAX_SAFE_INTEGER}function Z(e,t,r){return V(e)&&e.position-t>r}function K(e,t=1048576){for(let r of[e.compressedSize,e.uncompressedSize])if(!Number.isFinite(r)||r<0||r>t)return!1;return!0}function H(e){if(e.hasContentTypesEntry&&!e.hasUnparseableContentTypes&&!e.isParsingContentTypes&&!e.hasParsedContentTypesEntry){if(e.hasWordDirectory)return{ext:"docx",mime:"application/vnd.openxmlformats-officedocument.wordprocessingml.document"};if(e.hasPresentationDirectory)return{ext:"pptx",mime:"application/vnd.openxmlformats-officedocument.presentationml.presentation"};if(e.hasSpreadsheetDirectory)return{ext:"xlsx",mime:"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"};if(e.hasThreeDimensionalModelEntry)return{ext:"3mf",mime:"model/3mf"}}}_.prototype.inflate=async function(e,t,r){if(0===e.compressedMethod)return r(t);if(8!==e.compressedMethod)throw Error(`Unsupported ZIP compression method: ${e.compressedMethod}`);return r(await X(t,{maximumLength:1048576}))},_.prototype.unzip=async function(e){let t=!1,r=0,i=this.tokenizer.position;this.knownSizeDescriptorScannedBytes=0;do{if(Z(this.tokenizer,i,0x1000000))throw new U("ZIP stream probing exceeds 16777216 bytes");let a=await this.readLocalFileHeader();if(!a)break;if(++r>1024)throw Error("ZIP entry count exceeds 1024");let n=e(a);t=!!n.stop,await this.tokenizer.ignore(a.extraFieldLength);let s=await G(this,a,{shouldBuffer:!!n.handler,maximumDescriptorLength:Math.min(1048576,V(this.tokenizer)?Math.max(0,0x1000000-(this.tokenizer.position-i)):Math.max(0,1048576-this.knownSizeDescriptorScannedBytes))});if(n.handler&&await this.inflate(a,s,n.handler),a.dataDescriptor){let e=new Uint8Array(16);if(await this.tokenizer.readBuffer(e),0x8074b50!==x.UINT32_LE.get(e,0))throw Error(`Expected data-descriptor-signature at position ${this.tokenizer.position-e.length}`)}if(Z(this.tokenizer,i,0x1000000))throw new U("ZIP stream probing exceeds 16777216 bytes")}while(!t)};class Q{constructor(e){const t=function(e){return Number.isFinite(e)?Math.max(0,Math.min(4098,Math.trunc(e))):0}(e?.mpegOffsetTolerance);this.options={...e,mpegOffsetTolerance:t},this.detectors=[...this.options.customDetectors??[],{id:"core",detect:this.detectConfident},{id:"core.imprecise",detect:this.detectImprecise}],this.tokenizerOptions={abortSignal:this.options.signal},this.gzipProbeDepth=0}getTokenizerOptions(){return{...this.tokenizerOptions}}createTokenizerFromWebStream(e){return function(e){let t=e?.streamReader;if(t?.constructor?.name!=="WebStreamByobReader")return e;let{reader:r}=t,i=async()=>{await r.cancel(),r.releaseLock()};return t.close=i,t.abort=async()=>{t.interrupted=!0,await i()},e}(y.fromWebStream(e,this.getTokenizerOptions()))}async parseTokenizer(e,t=0){this.detectionReentryCount=t;let r=e.position;for(let t of this.detectors){let i;try{i=await t.detect(e)}catch(e){if(e instanceof k.EndOfStreamError||e instanceof U)return;throw e}if(i)return i;if(r!==e.position)return}}async fromTokenizer(e){try{return await this.parseTokenizer(e)}finally{await e.close()}}async fromBuffer(e){if(!(e instanceof Uint8Array||e instanceof ArrayBuffer))throw TypeError(`Expected the \`input\` argument to be of type \`Uint8Array\` or \`ArrayBuffer\`, got \`${typeof e}\``);let t=e instanceof Uint8Array?e:new Uint8Array(e);if(t?.length>1)return this.fromTokenizer(y.fromBuffer(t,this.getTokenizerOptions()))}async fromBlob(e){this.options.signal?.throwIfAborted();let t=y.fromBlob(e,this.getTokenizerOptions());return this.fromTokenizer(t)}async fromStream(e){this.options.signal?.throwIfAborted();let t=this.createTokenizerFromWebStream(e);return this.fromTokenizer(t)}async toDetectionStream(e,t){var r,i,a;let n,s,o=Number.isFinite(r=t?.sampleSize??4100)?Math.max(1,Math.trunc(r)):4100,l=e.getReader({mode:"byob"});try{let{value:e,done:t}=await (i=new Uint8Array(o),a=this.options.signal,void 0===a?l.read(i):(a.throwIfAborted(),new Promise((e,t)=>{let r=()=>{a.removeEventListener("abort",n)},n=()=>{let e=a.reason;r(),(async()=>{try{await l.cancel(e)}catch{}})(),t(e)};a.addEventListener("abort",n,{once:!0}),(async()=>{try{let t=await l.read(i);r(),e(t)}catch(e){r(),t(e)}})()})));if(s=e,!t&&e)try{n=await this.fromBuffer(e.subarray(0,o))}catch(e){if(!(e instanceof k.EndOfStreamError))throw e;n=void 0}s=e}finally{l.releaseLock()}let c=new TransformStream({async start(e){e.enqueue(s)},transform(e,t){t.enqueue(e)}}),u=e.pipeThrough(c);return u.fileType=n,u}async detectGzip(e){let t,r,i,a,n,s,o,l,c;if(this.gzipProbeDepth>=1)return{ext:"gz",mime:"application/gzip"};let u=(n=new N(e).inflate().getReader(),s=0,o=!1,l=!1,c=async e=>{o||l||(l=!0,await n.cancel(e))},new ReadableStream({async pull(e){if(s>=0x1000000){e.close(),await c();return}let{done:t,value:r}=await n.read();if(t||!r){o=!0,e.close();return}let i=0x1000000-s;if(r.length>i){e.enqueue(r.subarray(0,i)),s+=i,e.close(),await c();return}e.enqueue(r),s+=r.length},async cancel(e){await c(e)}})),m=V(e);if(m){let e=new AbortController;t=setTimeout(()=>{e.abort(new DOMException("Operation timed out after 100 ms","TimeoutError"))},100),r=void 0===this.options.signal?e.signal:AbortSignal.any([this.options.signal,e.signal]),(i=new Q({...this.options,signal:r})).gzipProbeDepth=this.gzipProbeDepth+1}else this.gzipProbeDepth++;try{a=await (i??this).fromStream(u)}catch(e){if(e?.name==="AbortError"&&r?.reason?.name!=="TimeoutError")throw e}finally{clearTimeout(t),!m&&this.gzipProbeDepth--}return a?.ext==="tar"?{ext:"tar.gz",mime:"application/gzip"}:{ext:"gz",mime:"application/gzip"}}check(e,t){return Y(this.buffer,e,t)}checkString(e,t){return this.check(function(e,t){if("utf-16le"===t){let t=[];for(let r=0;r<e.length;r++){let i=e.charCodeAt(r);t.push(255&i,i>>8&255)}return t}if("utf-16be"===t){let t=[];for(let r=0;r<e.length;r++){let i=e.charCodeAt(r);t.push(i>>8&255,255&i)}return t}return[...e].map(e=>e.charCodeAt(0))}(e,t?.encoding),t)}detectConfident=async e=>{if(this.buffer=new Uint8Array(4100),void 0===e.fileInfo.size&&(e.fileInfo.size=Number.MAX_SAFE_INTEGER),this.tokenizer=e,V(e)&&(await e.peekBuffer(this.buffer,{length:3,mayBeLess:!0}),this.check([31,139,8])))return this.detectGzip(e);if(await e.peekBuffer(this.buffer,{length:32,mayBeLess:!0}),this.check([66,77]))return{ext:"bmp",mime:"image/bmp"};if(this.check([11,119]))return{ext:"ac3",mime:"audio/vnd.dolby.dd-raw"};if(this.check([120,1]))return{ext:"dmg",mime:"application/x-apple-diskimage"};if(this.check([77,90]))return{ext:"exe",mime:"application/x-msdownload"};if(this.check([37,33]))return(await e.peekBuffer(this.buffer,{length:24,mayBeLess:!0}),this.checkString("PS-Adobe-",{offset:2})&&this.checkString(" EPSF-",{offset:14}))?{ext:"eps",mime:"application/eps"}:{ext:"ps",mime:"application/postscript"};if(this.check([31,160])||this.check([31,157]))return{ext:"Z",mime:"application/x-compress"};if(this.check([199,113]))return{ext:"cpio",mime:"application/x-cpio"};if(this.check([96,234]))return{ext:"arj",mime:"application/x-arj"};if(this.check([239,187,191])){if(this.detectionReentryCount>=256)return;return this.detectionReentryCount++,await this.tokenizer.ignore(3),this.detectConfident(e)}if(this.check([71,73,70]))return{ext:"gif",mime:"image/gif"};if(this.check([73,73,188]))return{ext:"jxr",mime:"image/vnd.ms-photo"};if(this.check([31,139,8]))return this.detectGzip(e);if(this.check([66,90,104]))return{ext:"bz2",mime:"application/x-bzip2"};if(this.checkString("ID3")){await j(e,6,{maximumLength:6,reason:"ID3 header prefix"});let t=await e.readToken(R),r=V(e);if(!Number.isFinite(t)||t<0||r&&(t>0x1000000||e.position+t>0x1000000))return;if(e.position+t>e.fileInfo.size){if(r)return;return{ext:"mp3",mime:"audio/mpeg"}}try{await j(e,t,{maximumLength:r?0x1000000:e.fileInfo.size,reason:"ID3 payload"})}catch(e){if(e instanceof k.EndOfStreamError)return;throw e}if(this.detectionReentryCount>=256)return;return this.detectionReentryCount++,this.parseTokenizer(e,this.detectionReentryCount)}if(this.checkString("MP+"))return{ext:"mpc",mime:"audio/x-musepack"};if((67===this.buffer[0]||70===this.buffer[0])&&this.check([87,83],{offset:1}))return{ext:"swf",mime:"application/x-shockwave-flash"};if(this.check([255,216,255]))return this.check([247],{offset:3})?{ext:"jls",mime:"image/jls"}:{ext:"jpg",mime:"image/jpeg"};if(this.check([79,98,106,1]))return{ext:"avro",mime:"application/avro"};if(this.checkString("FLIF"))return{ext:"flif",mime:"image/flif"};if(this.checkString("8BPS"))return{ext:"psd",mime:"image/vnd.adobe.photoshop"};if(this.checkString("MPCK"))return{ext:"mpc",mime:"audio/x-musepack"};if(this.checkString("FORM"))return{ext:"aif",mime:"audio/aiff"};if(this.checkString("icns",{offset:0}))return{ext:"icns",mime:"image/icns"};if(this.check([80,75,3,4])){let t,r={hasContentTypesEntry:!1,hasParsedContentTypesEntry:!1,isParsingContentTypes:!1,hasUnparseableContentTypes:!1,hasWordDirectory:!1,hasPresentationDirectory:!1,hasSpreadsheetDirectory:!1,hasThreeDimensionalModelEntry:!1};try{await new _(e).unzip(e=>{var i;(i=e.filename).startsWith("word/")&&(r.hasWordDirectory=!0),i.startsWith("ppt/")&&(r.hasPresentationDirectory=!0),i.startsWith("xl/")&&(r.hasSpreadsheetDirectory=!0),i.startsWith("3D/")&&i.endsWith(".model")&&(r.hasThreeDimensionalModelEntry=!0);let a="[Content_Types].xml"===e.filename,n=H(r);if(!a&&n)return t=n,{stop:!0};switch(e.filename){case"META-INF/mozilla.rsa":return t={ext:"xpi",mime:"application/x-xpinstall"},{stop:!0};case"META-INF/MANIFEST.MF":return t={ext:"jar",mime:"application/java-archive"},{stop:!0};case"mimetype":if(!K(e,1048576))return{};return{async handler(e){let r=new TextDecoder("utf-8").decode(e).trim();t=q(r)},stop:!0};case"[Content_Types].xml":if(r.hasContentTypesEntry=!0,!K(e,1048576))return r.hasUnparseableContentTypes=!0,{};return r.isParsingContentTypes=!0,{async handler(e){let i=new TextDecoder("utf-8").decode(e),a=function(e){let t=e.indexOf('.main+xml"');if(-1===t){let t="application/vnd.ms-package.3dmanufacturing-3dmodel+xml";return e.includes(`ContentType="${t}"`)?t:void 0}let r=e.slice(0,t),i=r.lastIndexOf('"');return r.slice(i+1)}(i);a&&(t=q(a)),r.hasParsedContentTypesEntry=!0,r.isParsingContentTypes=!1},stop:!0};default:if(/classes\d*\.dex/.test(e.filename))return t={ext:"apk",mime:"application/vnd.android.package-archive"},{stop:!0};return{}}})}catch(e){if(!function(e){if(e instanceof k.EndOfStreamError||e instanceof U)return!0;if(!(e instanceof Error))return!1;if(P.has(e.message)||O.has(e.code))return!0;for(let t of D)if(e.message.startsWith(t))return!0;return!1}(e))throw e;r.isParsingContentTypes&&(r.isParsingContentTypes=!1,r.hasUnparseableContentTypes=!0)}return t??H(r)??{ext:"zip",mime:"application/zip"}}if(this.checkString("OggS")){await e.ignore(28);let t=new Uint8Array(8);return(await e.readBuffer(t),Y(t,[79,112,117,115,72,101,97,100]))?{ext:"opus",mime:"audio/ogg; codecs=opus"}:Y(t,[128,116,104,101,111,114,97])?{ext:"ogv",mime:"video/ogg"}:Y(t,[1,118,105,100,101,111,0])?{ext:"ogm",mime:"video/ogg"}:Y(t,[127,70,76,65,67])?{ext:"oga",mime:"audio/ogg"}:Y(t,[83,112,101,101,120,32,32])?{ext:"spx",mime:"audio/ogg"}:Y(t,[1,118,111,114,98,105,115])?{ext:"ogg",mime:"audio/ogg"}:{ext:"ogx",mime:"application/ogg"}}if(this.check([80,75])&&(3===this.buffer[2]||5===this.buffer[2]||7===this.buffer[2])&&(4===this.buffer[3]||6===this.buffer[3]||8===this.buffer[3]))return{ext:"zip",mime:"application/zip"};if(this.checkString("MThd"))return{ext:"mid",mime:"audio/midi"};if(this.checkString("wOFF")&&(this.check([0,1,0,0],{offset:4})||this.checkString("OTTO",{offset:4})))return{ext:"woff",mime:"font/woff"};if(this.checkString("wOF2")&&(this.check([0,1,0,0],{offset:4})||this.checkString("OTTO",{offset:4})))return{ext:"woff2",mime:"font/woff2"};if(this.check([212,195,178,161])||this.check([161,178,195,212]))return{ext:"pcap",mime:"application/vnd.tcpdump.pcap"};if(this.checkString("DSD "))return{ext:"dsf",mime:"audio/x-dsf"};if(this.checkString("LZIP"))return{ext:"lz",mime:"application/x-lzip"};if(this.checkString("fLaC"))return{ext:"flac",mime:"audio/flac"};if(this.check([66,80,71,251]))return{ext:"bpg",mime:"image/bpg"};if(this.checkString("wvpk"))return{ext:"wv",mime:"audio/wavpack"};if(this.checkString("%PDF"))return{ext:"pdf",mime:"application/pdf"};if(this.check([0,97,115,109]))return{ext:"wasm",mime:"application/wasm"};if(this.check([73,73])){let e=await this.readTiffHeader(!1);if(e)return e}if(this.check([77,77])){let e=await this.readTiffHeader(!0);if(e)return e}if(this.checkString("MAC "))return{ext:"ape",mime:"audio/ape"};if(this.check([26,69,223,163])){async function t(){let t=await e.peekNumber(x.UINT8),r=128,i=0;for(;(t&r)==0&&0!==r;)++i,r>>=1;let a=new Uint8Array(i+1);return await F(e,a,void 0,{maximumLength:a.length,reason:"EBML field"}),a}async function r(){let e=await t(),r=await t();r[0]^=128>>r.length-1;let i=Math.min(6,r.length),a=new DataView(e.buffer),n=new DataView(r.buffer,r.length-i,i);return{id:(0,M.getUintBE)(a),len:(0,M.getUintBE)(n)}}async function i(t){let i=0;for(;t>0;){if(++i>256||Z(e,n,0x1000000))return;let a=e.position,s=await r();if(17026===s.id){if(s.len>64)return;let t=B(s.len,64,"EBML DocType");return(await e.readToken(new x.StringType(t))).replaceAll(/\00.*$/g,"")}if(V(e)&&(!Number.isFinite(s.len)||s.len<0||s.len>1048576)||(await j(e,s.len,{maximumLength:V(e)?1048576:e.fileInfo.size,reason:"EBML payload"}),--t,e.position<=a))return}}let a=await r(),n=e.position;switch(await i(a.len)){case"webm":return{ext:"webm",mime:"video/webm"};case"matroska":return{ext:"mkv",mime:"video/matroska"};default:return}}if(this.checkString("SQLi"))return{ext:"sqlite",mime:"application/x-sqlite3"};if(this.check([78,69,83,26]))return{ext:"nes",mime:"application/x-nintendo-nes-rom"};if(this.checkString("Cr24"))return{ext:"crx",mime:"application/x-google-chrome-extension"};if(this.checkString("MSCF")||this.checkString("ISc("))return{ext:"cab",mime:"application/vnd.ms-cab-compressed"};if(this.check([237,171,238,219]))return{ext:"rpm",mime:"application/x-rpm"};if(this.check([197,208,211,198]))return{ext:"eps",mime:"application/eps"};if(this.check([40,181,47,253]))return{ext:"zst",mime:"application/zstd"};if(this.check([127,69,76,70]))return{ext:"elf",mime:"application/x-elf"};if(this.check([33,66,68,78]))return{ext:"pst",mime:"application/vnd.ms-outlook"};if(this.checkString("PAR1")||this.checkString("PARE"))return{ext:"parquet",mime:"application/vnd.apache.parquet"};if(this.checkString("ttcf"))return{ext:"ttc",mime:"font/collection"};if(this.check([254,237,250,206])||this.check([254,237,250,207])||this.check([206,250,237,254])||this.check([207,250,237,254]))return{ext:"macho",mime:"application/x-mach-binary"};if(this.check([4,34,77,24]))return{ext:"lz4",mime:"application/x-lz4"};if(this.checkString("regf"))return{ext:"dat",mime:"application/x-ft-windows-registry-hive"};if(this.checkString("$FL2")||this.checkString("$FL3"))return{ext:"sav",mime:"application/x-spss-sav"};if(this.check([79,84,84,79,0]))return{ext:"otf",mime:"font/otf"};if(this.checkString("#!AMR"))return{ext:"amr",mime:"audio/amr"};if(this.checkString("{\\rtf"))return{ext:"rtf",mime:"application/rtf"};if(this.check([70,76,86,1]))return{ext:"flv",mime:"video/x-flv"};if(this.checkString("IMPM"))return{ext:"it",mime:"audio/x-it"};if(this.checkString("-lh0-",{offset:2})||this.checkString("-lh1-",{offset:2})||this.checkString("-lh2-",{offset:2})||this.checkString("-lh3-",{offset:2})||this.checkString("-lh4-",{offset:2})||this.checkString("-lh5-",{offset:2})||this.checkString("-lh6-",{offset:2})||this.checkString("-lh7-",{offset:2})||this.checkString("-lzs-",{offset:2})||this.checkString("-lz4-",{offset:2})||this.checkString("-lz5-",{offset:2})||this.checkString("-lhd-",{offset:2}))return{ext:"lzh",mime:"application/x-lzh-compressed"};if(this.check([0,0,1,186])){if(this.check([33],{offset:4,mask:[241]}))return{ext:"mpg",mime:"video/MP1S"};if(this.check([68],{offset:4,mask:[196]}))return{ext:"mpg",mime:"video/MP2P"}}if(this.checkString("ITSF"))return{ext:"chm",mime:"application/vnd.ms-htmlhelp"};if(this.check([202,254,186,190])){let e=x.UINT32_BE.get(this.buffer,4),t=x.UINT16_BE.get(this.buffer,6);if(e>0&&e<=30)return{ext:"macho",mime:"application/x-mach-binary"};if(t>30)return{ext:"class",mime:"application/java-vm"}}if(this.checkString(".RMF"))return{ext:"rm",mime:"application/vnd.rn-realmedia"};if(this.checkString("DRACO"))return{ext:"drc",mime:"application/vnd.google.draco"};if(this.check([253,55,122,88,90,0]))return{ext:"xz",mime:"application/x-xz"};if(this.checkString("<?xml "))return{ext:"xml",mime:"application/xml"};if(this.check([55,122,188,175,39,28]))return{ext:"7z",mime:"application/x-7z-compressed"};if(this.check([82,97,114,33,26,7])&&(0===this.buffer[6]||1===this.buffer[6]))return{ext:"rar",mime:"application/x-rar-compressed"};if(this.checkString("solid "))return{ext:"stl",mime:"model/stl"};if(this.checkString("AC")){let e=new x.StringType(4,"latin1").get(this.buffer,2);if(e.match("^d*")&&e>=1e3&&e<=1050)return{ext:"dwg",mime:"image/vnd.dwg"}}if(this.checkString("070707"))return{ext:"cpio",mime:"application/x-cpio"};if(this.checkString("BLENDER"))return{ext:"blend",mime:"application/x-blender"};if(this.checkString("!<arch>"))return(await e.ignore(8),"debian-binary"===await e.readToken(new x.StringType(13,"ascii")))?{ext:"deb",mime:"application/x-deb"}:{ext:"ar",mime:"application/x-unix-archive"};if(this.checkString("WEBVTT")&&["\n","\r"," "," ","\0"].some(e=>this.checkString(e,{offset:6})))return{ext:"vtt",mime:"text/vtt"};if(this.check([137,80,78,71,13,10,26,10])){let t={ext:"png",mime:"image/png"},r={ext:"apng",mime:"image/apng"};async function a(){return{length:await e.readToken(x.INT32_BE),type:await e.readToken(new x.StringType(4,"latin1"))}}await e.ignore(8);let i=V(e),n=e.position,s=0,o=!1;do{if(++s>512||Z(e,n,0x1000000))break;let l=e.position,c=await a();if(c.length<0)return;if("IHDR"===c.type){if(13!==c.length)return;o=!0}switch(c.type){case"IDAT":return t;case"acTL":return r;default:if(!o&&"CgBI"!==c.type)return;if(i&&c.length>1048576)return o&&(32&c.type.codePointAt(0))!=0?t:void 0;try{await j(e,c.length+4,{maximumLength:i?1048580:e.fileInfo.size,reason:"PNG chunk payload"})}catch(e){if(!i&&(e instanceof U||e instanceof k.EndOfStreamError))return t;throw e}}if(e.position<=l)break}while(e.position+8<e.fileInfo.size)return t}if(this.check([65,82,82,79,87,49,0,0]))return{ext:"arrow",mime:"application/vnd.apache.arrow.file"};if(this.check([103,108,84,70,2,0,0,0]))return{ext:"glb",mime:"model/gltf-binary"};if(this.check([102,114,101,101],{offset:4})||this.check([109,100,97,116],{offset:4})||this.check([109,111,111,118],{offset:4})||this.check([119,105,100,101],{offset:4}))return{ext:"mov",mime:"video/quicktime"};if(this.check([73,73,82,79,8,0,0,0,24]))return{ext:"orf",mime:"image/x-olympus-orf"};if(this.checkString("gimp xcf "))return{ext:"xcf",mime:"image/x-xcf"};if(this.checkString("ftyp",{offset:4})&&(96&this.buffer[8])!=0){let e=new x.StringType(4,"latin1").get(this.buffer,8).replace("\0"," ").trim();switch(e){case"avif":case"avis":return{ext:"avif",mime:"image/avif"};case"mif1":return{ext:"heic",mime:"image/heif"};case"msf1":return{ext:"heic",mime:"image/heif-sequence"};case"heic":case"heix":return{ext:"heic",mime:"image/heic"};case"hevc":case"hevx":return{ext:"heic",mime:"image/heic-sequence"};case"qt":return{ext:"mov",mime:"video/quicktime"};case"M4V":case"M4VH":case"M4VP":return{ext:"m4v",mime:"video/x-m4v"};case"M4P":return{ext:"m4p",mime:"video/mp4"};case"M4B":return{ext:"m4b",mime:"audio/mp4"};case"M4A":return{ext:"m4a",mime:"audio/x-m4a"};case"F4V":return{ext:"f4v",mime:"video/mp4"};case"F4P":return{ext:"f4p",mime:"video/mp4"};case"F4A":return{ext:"f4a",mime:"audio/mp4"};case"F4B":return{ext:"f4b",mime:"audio/mp4"};case"crx":return{ext:"cr3",mime:"image/x-canon-cr3"};default:if(e.startsWith("3g")){if(e.startsWith("3g2"))return{ext:"3g2",mime:"video/3gpp2"};return{ext:"3gp",mime:"video/3gpp"}}return{ext:"mp4",mime:"video/mp4"}}}if(this.checkString("REGEDIT4\r\n"))return{ext:"reg",mime:"application/x-ms-regedit"};if(this.check([82,73,70,70])){if(this.checkString("WEBP",{offset:8}))return{ext:"webp",mime:"image/webp"};if(this.check([65,86,73],{offset:8}))return{ext:"avi",mime:"video/vnd.avi"};if(this.check([87,65,86,69],{offset:8}))return{ext:"wav",mime:"audio/wav"};if(this.check([81,76,67,77],{offset:8}))return{ext:"qcp",mime:"audio/qcelp"}}if(this.check([73,73,85,0,24,0,0,0,136,231,116,216]))return{ext:"rw2",mime:"image/x-panasonic-rw2"};if(this.check([48,38,178,117,142,102,207,17,166,217])){let t=!1;try{async function n(){let t=new Uint8Array(16);return await F(e,t,void 0,{maximumLength:t.length,reason:"ASF header GUID"}),{id:t,size:Number(await e.readToken(x.UINT64_LE))}}await j(e,30,{maximumLength:30,reason:"ASF header prelude"});let r=V(e),i=e.position,a=0;for(;e.position+24<e.fileInfo.size&&!(++a>512||Z(e,i,0x1000000));){let i=e.position,a=await n(),s=a.size-24;if(!Number.isFinite(s)||s<0){t=!0;break}if(Y(a.id,[145,7,220,183,183,169,207,17,142,230,0,192,12,32,83,101])){let t=new Uint8Array(16);if(s-=await F(e,t,void 0,{maximumLength:t.length,reason:"ASF stream type GUID"}),Y(t,[64,158,105,248,77,91,207,17,168,253,0,128,95,92,68,43]))return{ext:"asf",mime:"audio/x-ms-asf"};if(Y(t,[192,239,25,188,77,91,207,17,168,253,0,128,95,92,68,43]))return{ext:"asf",mime:"video/x-ms-asf"};break}if(r&&s>1048576||(await j(e,s,{maximumLength:r?1048576:e.fileInfo.size,reason:"ASF header payload"}),e.position<=i)){t=!0;break}}}catch(r){if(r instanceof k.EndOfStreamError||r instanceof U)V(e)&&(t=!0);else throw r}if(t)return;return{ext:"asf",mime:"application/vnd.ms-asf"}}if(this.check([171,75,84,88,32,49,49,187,13,10,26,10]))return{ext:"ktx",mime:"image/ktx"};if((this.check([126,16,4])||this.check([126,24,4]))&&this.check([48,77,73,69],{offset:4}))return{ext:"mie",mime:"application/x-mie"};if(this.check([39,10,0,0,0,0,0,0,0,0,0,0],{offset:2}))return{ext:"shp",mime:"application/x-esri-shape"};if(this.check([255,79,255,81]))return{ext:"j2c",mime:"image/j2c"};if(this.check([0,0,0,12,106,80,32,32,13,10,135,10]))switch(await e.ignore(20),await e.readToken(new x.StringType(4,"ascii"))){case"jp2 ":return{ext:"jp2",mime:"image/jp2"};case"jpx ":return{ext:"jpx",mime:"image/jpx"};case"jpm ":return{ext:"jpm",mime:"image/jpm"};case"mjp2":return{ext:"mj2",mime:"image/mj2"};default:return}if(this.check([255,10])||this.check([0,0,0,12,74,88,76,32,13,10,135,10]))return{ext:"jxl",mime:"image/jxl"};if(this.check([254,255]))return this.checkString("<?xml ",{offset:2,encoding:"utf-16be"})?{ext:"xml",mime:"application/xml"}:void 0;if(this.check([208,207,17,224,161,177,26,225]))return{ext:"cfb",mime:"application/x-cfb"};if(await e.peekBuffer(this.buffer,{length:Math.min(256,e.fileInfo.size),mayBeLess:!0}),this.check([97,99,115,112],{offset:36}))return{ext:"icc",mime:"application/vnd.iccprofile"};if(this.checkString("**ACE",{offset:7})&&this.checkString("**",{offset:12}))return{ext:"ace",mime:"application/x-ace-compressed"};if(this.checkString("BEGIN:")){if(this.checkString("VCARD",{offset:6}))return{ext:"vcf",mime:"text/vcard"};if(this.checkString("VCALENDAR",{offset:6}))return{ext:"ics",mime:"text/calendar"}}if(this.checkString("FUJIFILMCCD-RAW"))return{ext:"raf",mime:"image/x-fujifilm-raf"};if(this.checkString("Extended Module:"))return{ext:"xm",mime:"audio/x-xm"};if(this.checkString("Creative Voice File"))return{ext:"voc",mime:"audio/x-voc"};if(this.check([4,0,0,0])&&this.buffer.length>=16){let e=new DataView(this.buffer.buffer).getUint32(12,!0);if(e>12&&this.buffer.length>=e+16)try{let t=new TextDecoder().decode(this.buffer.subarray(16,e+16));if(JSON.parse(t).files)return{ext:"asar",mime:"application/x-asar"}}catch{}}if(this.check([6,14,43,52,2,5,1,1,13,1,2,1,1,2]))return{ext:"mxf",mime:"application/mxf"};if(this.checkString("SCRM",{offset:44}))return{ext:"s3m",mime:"audio/x-s3m"};if(this.check([71])&&this.check([71],{offset:188})||this.check([71],{offset:4})&&this.check([71],{offset:196}))return{ext:"mts",mime:"video/mp2t"};if(this.check([66,79,79,75,77,79,66,73],{offset:60}))return{ext:"mobi",mime:"application/x-mobipocket-ebook"};if(this.check([68,73,67,77],{offset:128}))return{ext:"dcm",mime:"application/dicom"};if(this.check([76,0,0,0,1,20,2,0,0,0,0,0,192,0,0,0,0,0,0,70]))return{ext:"lnk",mime:"application/x.ms.shortcut"};if(this.check([98,111,111,107,0,0,0,0,109,97,114,107,0,0,0,0]))return{ext:"alias",mime:"application/x.apple.alias"};if(this.checkString("Kaydara FBX Binary \0"))return{ext:"fbx",mime:"application/x.autodesk.fbx"};if(this.check([76,80],{offset:34})&&(this.check([0,0,1],{offset:8})||this.check([1,0,2],{offset:8})||this.check([2,0,2],{offset:8})))return{ext:"eot",mime:"application/vnd.ms-fontobject"};if(this.check([6,6,237,245,216,29,70,229,189,49,239,231,254,116,183,29]))return{ext:"indd",mime:"application/x-indesign"};if(this.check([255,255,0,0,7,0,0,0,4,0,0,0,1,0,1,0])||this.check([0,0,255,255,0,0,0,7,0,0,0,4,0,1,0,1]))return{ext:"jmp",mime:"application/x-jmp-data"};if(await e.peekBuffer(this.buffer,{length:Math.min(512,e.fileInfo.size),mayBeLess:!0}),this.checkString("ustar",{offset:257})&&(this.checkString("\0",{offset:262})||this.checkString(" ",{offset:262}))||this.check([0,0,0,0,0,0],{offset:257})&&function(e,t=0){let r=Number.parseInt(new x.StringType(6).get(e,148).replace(/\0.*$/,"").trim(),8);if(Number.isNaN(r))return!1;let i=256;for(let r=t;r<t+148;r++)i+=e[r];for(let r=t+156;r<t+512;r++)i+=e[r];return r===i}(this.buffer))return{ext:"tar",mime:"application/x-tar"};if(this.check([255,254])){let e="utf-16le";return this.checkString("<?xml ",{offset:2,encoding:e})?{ext:"xml",mime:"application/xml"}:this.check([255,14],{offset:2})&&this.checkString("SketchUp Model",{offset:4,encoding:e})?{ext:"skp",mime:"application/vnd.sketchup.skp"}:this.checkString("Windows Registry Editor Version 5.00\r\n",{offset:2,encoding:e})?{ext:"reg",mime:"application/x-ms-regedit"}:void 0}if(this.checkString("-----BEGIN PGP MESSAGE-----"))return{ext:"pgp",mime:"application/pgp-encrypted"}};detectImprecise=async e=>{var t;this.buffer=new Uint8Array(4100);let r=Number.isFinite(t=e.fileInfo.size)?Math.max(0,t):Number.MAX_SAFE_INTEGER;if(await e.peekBuffer(this.buffer,{length:Math.min(8,r),mayBeLess:!0}),this.check([0,0,1,186])||this.check([0,0,1,179]))return{ext:"mpg",mime:"video/mpeg"};if(this.check([0,1,0,0,0]))return{ext:"ttf",mime:"font/ttf"};if(this.check([0,0,1,0]))return{ext:"ico",mime:"image/x-icon"};if(this.check([0,0,2,0]))return{ext:"cur",mime:"image/x-icon"};if(await e.peekBuffer(this.buffer,{length:Math.min(2+this.options.mpegOffsetTolerance,r),mayBeLess:!0}),this.buffer.length>=2+this.options.mpegOffsetTolerance)for(let e=0;e<=this.options.mpegOffsetTolerance;++e){let t=this.scanMpeg(e);if(t)return t}};async readTiffTag(e){let t=await this.tokenizer.readToken(e?x.UINT16_BE:x.UINT16_LE);switch(await this.tokenizer.ignore(10),t){case 50341:return{ext:"arw",mime:"image/x-sony-arw"};case 50706:return{ext:"dng",mime:"image/x-adobe-dng"}}}async readTiffIFD(e){let t=await this.tokenizer.readToken(e?x.UINT16_BE:x.UINT16_LE);if(!(t>512)&&(!V(this.tokenizer)||!(2+12*t>0x1000000)))for(let r=0;r<t;++r){let t=await this.readTiffTag(e);if(t)return t}}async readTiffHeader(e){let t={ext:"tif",mime:"image/tiff"},r=(e?x.UINT16_BE:x.UINT16_LE).get(this.buffer,2),i=(e?x.UINT32_BE:x.UINT32_LE).get(this.buffer,4);if(42===r){let r;if(i>=6){if(this.checkString("CR",{offset:8}))return{ext:"cr2",mime:"image/x-canon-cr2"};if(i>=8){let t=(e?x.UINT16_BE:x.UINT16_LE).get(this.buffer,8),r=(e?x.UINT16_BE:x.UINT16_LE).get(this.buffer,10);if(28===t&&254===r||31===t&&11===r)return{ext:"nef",mime:"image/x-nikon-nef"}}}if(V(this.tokenizer)&&i>1048576)return t;let a=V(this.tokenizer)?0x1000000:this.tokenizer.fileInfo.size;try{await j(this.tokenizer,i,{maximumLength:a,reason:"TIFF IFD offset"})}catch(e){if(e instanceof k.EndOfStreamError)return;throw e}try{r=await this.readTiffIFD(e)}catch(e){if(e instanceof k.EndOfStreamError)return;throw e}return r??t}if(43===r)return t}scanMpeg(e){if(this.check([255,224],{offset:e,mask:[255,224]})){if(this.check([16],{offset:e+1,mask:[22]}))return this.check([8],{offset:e+1,mask:[8]}),{ext:"aac",mime:"audio/aac"};if(this.check([2],{offset:e+1,mask:[6]}))return{ext:"mp3",mime:"audio/mpeg"};if(this.check([4],{offset:e+1,mask:[6]}))return{ext:"mp2",mime:"audio/mpeg"};if(this.check([6],{offset:e+1,mask:[6]}))return{ext:"mp1",mime:"audio/mpeg"}}}}var J=e.i(32537),ee=e.i(82087),et=e.i(9922);let er={multiple:!1},ei={year:er,track:er,disk:er,title:er,artist:er,artists:{multiple:!0,unique:!0},albumartist:er,albumartists:{multiple:!0,unique:!0},album:er,date:er,originaldate:er,originalyear:er,releasedate:er,comment:{multiple:!0,unique:!1},genre:{multiple:!0,unique:!0},picture:{multiple:!0,unique:!0},composer:{multiple:!0,unique:!0},lyrics:{multiple:!0,unique:!1},albumsort:{multiple:!1,unique:!0},titlesort:{multiple:!1,unique:!0},work:{multiple:!1,unique:!0},artistsort:{multiple:!1,unique:!0},albumartistsort:{multiple:!1,unique:!0},composersort:{multiple:!1,unique:!0},lyricist:{multiple:!0,unique:!0},writer:{multiple:!0,unique:!0},conductor:{multiple:!0,unique:!0},remixer:{multiple:!0,unique:!0},arranger:{multiple:!0,unique:!0},engineer:{multiple:!0,unique:!0},producer:{multiple:!0,unique:!0},technician:{multiple:!0,unique:!0},djmixer:{multiple:!0,unique:!0},mixer:{multiple:!0,unique:!0},label:{multiple:!0,unique:!0},grouping:er,subtitle:{multiple:!0},discsubtitle:er,totaltracks:er,totaldiscs:er,compilation:er,rating:{multiple:!0},bpm:er,mood:er,media:er,catalognumber:{multiple:!0,unique:!0},tvShow:er,tvShowSort:er,tvSeason:er,tvEpisode:er,tvEpisodeId:er,tvNetwork:er,podcast:er,podcasturl:er,releasestatus:er,releasetype:{multiple:!0},releasecountry:er,script:er,language:er,copyright:er,license:er,encodedby:er,encodersettings:er,gapless:er,barcode:er,isrc:{multiple:!0},asin:er,musicbrainz_recordingid:er,musicbrainz_trackid:er,musicbrainz_albumid:er,musicbrainz_artistid:{multiple:!0},musicbrainz_albumartistid:{multiple:!0},musicbrainz_releasegroupid:er,musicbrainz_workid:er,musicbrainz_trmid:er,musicbrainz_discid:er,acoustid_id:er,acoustid_fingerprint:er,musicip_puid:er,musicip_fingerprint:er,website:er,"performer:instrument":{multiple:!0,unique:!0},averageLevel:er,peakLevel:er,notes:{multiple:!0,unique:!1},key:er,originalalbum:er,originalartist:er,discogs_artist_id:{multiple:!0,unique:!0},discogs_release_id:er,discogs_label_id:er,discogs_master_release_id:er,discogs_votes:er,discogs_rating:er,replaygain_track_peak:er,replaygain_track_gain:er,replaygain_album_peak:er,replaygain_album_gain:er,replaygain_track_minmax:er,replaygain_album_minmax:er,replaygain_undo:er,description:{multiple:!0},longDescription:er,category:{multiple:!0},hdVideo:er,keywords:{multiple:!0},movement:er,movementIndex:er,movementTotal:er,podcastId:er,showMovement:er,stik:er,playCounter:er};class ea{static toIntOrNull(e){let t=Number.parseInt(e,10);return Number.isNaN(t)?null:t}static normalizeTrack(e){let t=e.toString().split("/");return{no:Number.parseInt(t[0],10)||null,of:Number.parseInt(t[1],10)||null}}constructor(e,t){this.tagTypes=e,this.tagMap=t}mapGenericTag(e,t){e={id:e.id,value:e.value},this.postMap(e,t);let r=this.getCommonName(e.id);return r?{id:r,value:e.value}:null}getCommonName(e){return this.tagMap[e]}postMap(e,t){}}ea.maxRatingScore=1;let en={title:"title",artist:"artist",album:"album",year:"year",comment:"comment",track:"track",genre:"genre"};class es extends ea{constructor(){super(["ID3v1"],en)}}class eo extends ea{constructor(e,t){const r={};for(const e of Object.keys(t))r[e.toUpperCase()]=t[e];super(e,r)}getCommonName(e){return this.tagMap[e.toUpperCase()]}}var el=e.i(94569);let ec={TIT2:"title",TPE1:"artist","TXXX:Artists":"artists",TPE2:"albumartist",TALB:"album",TDRV:"date",TORY:"originalyear",TPOS:"disk",TCON:"genre",APIC:"picture",TCOM:"composer",USLT:"lyrics",TSOA:"albumsort",TSOT:"titlesort",TOAL:"originalalbum",TSOP:"artistsort",TSO2:"albumartistsort",TSOC:"composersort",TEXT:"lyricist","TXXX:Writer":"writer",TPE3:"conductor",TPE4:"remixer","IPLS:arranger":"arranger","IPLS:engineer":"engineer","IPLS:producer":"producer","IPLS:DJ-mix":"djmixer","IPLS:mix":"mixer",TPUB:"label",TIT1:"grouping",TIT3:"subtitle",TRCK:"track",TCMP:"compilation",POPM:"rating",TBPM:"bpm",TMED:"media","TXXX:CATALOGNUMBER":"catalognumber","TXXX:MusicBrainz Album Status":"releasestatus","TXXX:MusicBrainz Album Type":"releasetype","TXXX:MusicBrainz Album Release Country":"releasecountry","TXXX:RELEASECOUNTRY":"releasecountry","TXXX:SCRIPT":"script",TLAN:"language",TCOP:"copyright",WCOP:"license",TENC:"encodedby",TSSE:"encodersettings","TXXX:BARCODE":"barcode","TXXX:ISRC":"isrc",TSRC:"isrc","TXXX:ASIN":"asin","TXXX:originalyear":"originalyear","UFID:http://musicbrainz.org":"musicbrainz_recordingid","TXXX:MusicBrainz Release Track Id":"musicbrainz_trackid","TXXX:MusicBrainz Album Id":"musicbrainz_albumid","TXXX:MusicBrainz Artist Id":"musicbrainz_artistid","TXXX:MusicBrainz Album Artist Id":"musicbrainz_albumartistid","TXXX:MusicBrainz Release Group Id":"musicbrainz_releasegroupid","TXXX:MusicBrainz Work Id":"musicbrainz_workid","TXXX:MusicBrainz TRM Id":"musicbrainz_trmid","TXXX:MusicBrainz Disc Id":"musicbrainz_discid","TXXX:ACOUSTID_ID":"acoustid_id","TXXX:Acoustid Id":"acoustid_id","TXXX:Acoustid Fingerprint":"acoustid_fingerprint","TXXX:MusicIP PUID":"musicip_puid","TXXX:MusicMagic Fingerprint":"musicip_fingerprint",WOAR:"website",TDRC:"date",TYER:"year",TDOR:"originaldate","TIPL:arranger":"arranger","TIPL:engineer":"engineer","TIPL:producer":"producer","TIPL:DJ-mix":"djmixer","TIPL:mix":"mixer",TMOO:"mood",SYLT:"lyrics",TSST:"discsubtitle",TKEY:"key",COMM:"comment",TOPE:"originalartist","PRIV:AverageLevel":"averageLevel","PRIV:PeakLevel":"peakLevel","TXXX:DISCOGS_ARTIST_ID":"discogs_artist_id","TXXX:DISCOGS_ARTISTS":"artists","TXXX:DISCOGS_ARTIST_NAME":"artists","TXXX:DISCOGS_ALBUM_ARTISTS":"albumartist","TXXX:DISCOGS_CATALOG":"catalognumber","TXXX:DISCOGS_COUNTRY":"releasecountry","TXXX:DISCOGS_DATE":"originaldate","TXXX:DISCOGS_LABEL":"label","TXXX:DISCOGS_LABEL_ID":"discogs_label_id","TXXX:DISCOGS_MASTER_RELEASE_ID":"discogs_master_release_id","TXXX:DISCOGS_RATING":"discogs_rating","TXXX:DISCOGS_RELEASED":"date","TXXX:DISCOGS_RELEASE_ID":"discogs_release_id","TXXX:DISCOGS_VOTES":"discogs_votes","TXXX:CATALOGID":"catalognumber","TXXX:STYLE":"genre","TXXX:REPLAYGAIN_TRACK_PEAK":"replaygain_track_peak","TXXX:REPLAYGAIN_TRACK_GAIN":"replaygain_track_gain","TXXX:REPLAYGAIN_ALBUM_PEAK":"replaygain_album_peak","TXXX:REPLAYGAIN_ALBUM_GAIN":"replaygain_album_gain","TXXX:MP3GAIN_MINMAX":"replaygain_track_minmax","TXXX:MP3GAIN_ALBUM_MINMAX":"replaygain_album_minmax","TXXX:MP3GAIN_UNDO":"replaygain_undo",MVNM:"movement",MVIN:"movementIndex",PCST:"podcast",TCAT:"category",TDES:"description",TDRL:"releasedate",TGID:"podcastId",TKWD:"keywords",WFED:"podcasturl",GRP1:"grouping",PCNT:"playCounter"};class eu extends eo{static toRating(e){return{source:e.email,rating:e.rating>0?(e.rating-1)/254*ea.maxRatingScore:void 0}}constructor(){super(["ID3v2.3","ID3v2.4"],ec)}postMap(e,t){switch(e.id){case"UFID":{let t=e.value;"http://musicbrainz.org"===t.owner_identifier&&(e.id+=`:${t.owner_identifier}`,e.value=(0,el.decodeString)(t.identifier,"latin1"))}break;case"PRIV":{let r=e.value;switch(r.owner_identifier){case"AverageLevel":case"PeakValue":e.id+=`:${r.owner_identifier}`,e.value=4===r.data.length?x.UINT32_LE.get(r.data,0):null,null===e.value&&t.addWarning("Failed to parse PRIV:PeakValue");break;default:t.addWarning(`Unknown PRIV owner-identifier: ${r.data}`)}}break;case"POPM":e.value=eu.toRating(e.value)}}}let em={Title:"title",Author:"artist","WM/AlbumArtist":"albumartist","WM/AlbumTitle":"album","WM/Year":"date","WM/OriginalReleaseTime":"originaldate","WM/OriginalReleaseYear":"originalyear",Description:"comment","WM/TrackNumber":"track","WM/PartOfSet":"disk","WM/Genre":"genre","WM/Composer":"composer","WM/Lyrics":"lyrics","WM/AlbumSortOrder":"albumsort","WM/TitleSortOrder":"titlesort","WM/ArtistSortOrder":"artistsort","WM/AlbumArtistSortOrder":"albumartistsort","WM/ComposerSortOrder":"composersort","WM/Writer":"lyricist","WM/Conductor":"conductor","WM/ModifiedBy":"remixer","WM/Engineer":"engineer","WM/Producer":"producer","WM/DJMixer":"djmixer","WM/Mixer":"mixer","WM/Publisher":"label","WM/ContentGroupDescription":"grouping","WM/SubTitle":"subtitle","WM/SetSubTitle":"discsubtitle","WM/IsCompilation":"compilation","WM/SharedUserRating":"rating","WM/BeatsPerMinute":"bpm","WM/Mood":"mood","WM/Media":"media","WM/CatalogNo":"catalognumber","MusicBrainz/Album Status":"releasestatus","MusicBrainz/Album Type":"releasetype","MusicBrainz/Album Release Country":"releasecountry","WM/Script":"script","WM/Language":"language",Copyright:"copyright",LICENSE:"license","WM/EncodedBy":"encodedby","WM/EncodingSettings":"encodersettings","WM/Barcode":"barcode","WM/ISRC":"isrc","MusicBrainz/Track Id":"musicbrainz_recordingid","MusicBrainz/Release Track Id":"musicbrainz_trackid","MusicBrainz/Album Id":"musicbrainz_albumid","MusicBrainz/Artist Id":"musicbrainz_artistid","MusicBrainz/Album Artist Id":"musicbrainz_albumartistid","MusicBrainz/Release Group Id":"musicbrainz_releasegroupid","MusicBrainz/Work Id":"musicbrainz_workid","MusicBrainz/TRM Id":"musicbrainz_trmid","MusicBrainz/Disc Id":"musicbrainz_discid","Acoustid/Id":"acoustid_id","Acoustid/Fingerprint":"acoustid_fingerprint","MusicIP/PUID":"musicip_puid","WM/ARTISTS":"artists","WM/InitialKey":"key",ASIN:"asin","WM/Work":"work","WM/AuthorURL":"website","WM/Picture":"picture"};class ed extends ea{static toRating(e){return{rating:Number.parseFloat(e+1)/5}}constructor(){super(["asf"],em)}postMap(e){if("WM/SharedUserRating"===e.id){let t=e.id.split(":");e.value=ed.toRating(e.value),e.id=t[0]}}}let ef={TT2:"title",TP1:"artist",TP2:"albumartist",TAL:"album",TYE:"year",COM:"comment",TRK:"track",TPA:"disk",TCO:"genre",PIC:"picture",TCM:"composer",TOR:"originaldate",TOT:"originalalbum",TXT:"lyricist",TP3:"conductor",TPB:"label",TT1:"grouping",TT3:"subtitle",TLA:"language",TCR:"copyright",WCP:"license",TEN:"encodedby",TSS:"encodersettings",WAR:"website",PCS:"podcast",TCP:"compilation",TDR:"date",TS2:"albumartistsort",TSA:"albumsort",TSC:"composersort",TSP:"artistsort",TST:"titlesort",WFD:"podcasturl",TBP:"bpm",GP1:"grouping"};class ep extends eo{constructor(){super(["ID3v2.2"],ef)}}let eh={Title:"title",Artist:"artist",Artists:"artists","Album Artist":"albumartist",Album:"album",Year:"date",Originalyear:"originalyear",Originaldate:"originaldate",Releasedate:"releasedate",Comment:"comment",Track:"track",Disc:"disk",DISCNUMBER:"disk",Genre:"genre","Cover Art (Front)":"picture","Cover Art (Back)":"picture",Composer:"composer",Lyrics:"lyrics",ALBUMSORT:"albumsort",TITLESORT:"titlesort",WORK:"work",ARTISTSORT:"artistsort",ALBUMARTISTSORT:"albumartistsort",COMPOSERSORT:"composersort",Lyricist:"lyricist",Writer:"writer",Conductor:"conductor",MixArtist:"remixer",Arranger:"arranger",Engineer:"engineer",Producer:"producer",DJMixer:"djmixer",Mixer:"mixer",Label:"label",Grouping:"grouping",Subtitle:"subtitle",DiscSubtitle:"discsubtitle",Compilation:"compilation",BPM:"bpm",Mood:"mood",Media:"media",CatalogNumber:"catalognumber",MUSICBRAINZ_ALBUMSTATUS:"releasestatus",MUSICBRAINZ_ALBUMTYPE:"releasetype",RELEASECOUNTRY:"releasecountry",Script:"script",Language:"language",Copyright:"copyright",LICENSE:"license",EncodedBy:"encodedby",EncoderSettings:"encodersettings",Barcode:"barcode",ISRC:"isrc",ASIN:"asin",musicbrainz_trackid:"musicbrainz_recordingid",musicbrainz_releasetrackid:"musicbrainz_trackid",MUSICBRAINZ_ALBUMID:"musicbrainz_albumid",MUSICBRAINZ_ARTISTID:"musicbrainz_artistid",MUSICBRAINZ_ALBUMARTISTID:"musicbrainz_albumartistid",MUSICBRAINZ_RELEASEGROUPID:"musicbrainz_releasegroupid",MUSICBRAINZ_WORKID:"musicbrainz_workid",MUSICBRAINZ_TRMID:"musicbrainz_trmid",MUSICBRAINZ_DISCID:"musicbrainz_discid",Acoustid_Id:"acoustid_id",ACOUSTID_FINGERPRINT:"acoustid_fingerprint",MUSICIP_PUID:"musicip_puid",Weblink:"website",REPLAYGAIN_TRACK_GAIN:"replaygain_track_gain",REPLAYGAIN_TRACK_PEAK:"replaygain_track_peak",MP3GAIN_MINMAX:"replaygain_track_minmax",MP3GAIN_UNDO:"replaygain_undo"};class eg extends eo{constructor(){super(["APEv2"],eh)}}let eb={"©nam":"title","©ART":"artist",aART:"albumartist","----:com.apple.iTunes:Band":"albumartist","©alb":"album","©day":"date","©cmt":"comment","©com":"comment",trkn:"track",disk:"disk","©gen":"genre",covr:"picture","©wrt":"composer","©lyr":"lyrics",soal:"albumsort",sonm:"titlesort",soar:"artistsort",soaa:"albumartistsort",soco:"composersort","----:com.apple.iTunes:LYRICIST":"lyricist","----:com.apple.iTunes:CONDUCTOR":"conductor","----:com.apple.iTunes:REMIXER":"remixer","----:com.apple.iTunes:ENGINEER":"engineer","----:com.apple.iTunes:PRODUCER":"producer","----:com.apple.iTunes:DJMIXER":"djmixer","----:com.apple.iTunes:MIXER":"mixer","----:com.apple.iTunes:LABEL":"label","©grp":"grouping","----:com.apple.iTunes:SUBTITLE":"subtitle","----:com.apple.iTunes:DISCSUBTITLE":"discsubtitle",cpil:"compilation",tmpo:"bpm","----:com.apple.iTunes:MOOD":"mood","----:com.apple.iTunes:MEDIA":"media","----:com.apple.iTunes:CATALOGNUMBER":"catalognumber",tvsh:"tvShow",tvsn:"tvSeason",tves:"tvEpisode",sosn:"tvShowSort",tven:"tvEpisodeId",tvnn:"tvNetwork",pcst:"podcast",purl:"podcasturl","----:com.apple.iTunes:MusicBrainz Album Status":"releasestatus","----:com.apple.iTunes:MusicBrainz Album Type":"releasetype","----:com.apple.iTunes:MusicBrainz Album Release Country":"releasecountry","----:com.apple.iTunes:SCRIPT":"script","----:com.apple.iTunes:LANGUAGE":"language",cprt:"copyright","©cpy":"copyright","----:com.apple.iTunes:LICENSE":"license","©too":"encodedby",pgap:"gapless","----:com.apple.iTunes:BARCODE":"barcode","----:com.apple.iTunes:ISRC":"isrc","----:com.apple.iTunes:ASIN":"asin","----:com.apple.iTunes:NOTES":"comment","----:com.apple.iTunes:MusicBrainz Track Id":"musicbrainz_recordingid","----:com.apple.iTunes:MusicBrainz Release Track Id":"musicbrainz_trackid","----:com.apple.iTunes:MusicBrainz Album Id":"musicbrainz_albumid","----:com.apple.iTunes:MusicBrainz Artist Id":"musicbrainz_artistid","----:com.apple.iTunes:MusicBrainz Album Artist Id":"musicbrainz_albumartistid","----:com.apple.iTunes:MusicBrainz Release Group Id":"musicbrainz_releasegroupid","----:com.apple.iTunes:MusicBrainz Work Id":"musicbrainz_workid","----:com.apple.iTunes:MusicBrainz TRM Id":"musicbrainz_trmid","----:com.apple.iTunes:MusicBrainz Disc Id":"musicbrainz_discid","----:com.apple.iTunes:Acoustid Id":"acoustid_id","----:com.apple.iTunes:Acoustid Fingerprint":"acoustid_fingerprint","----:com.apple.iTunes:MusicIP PUID":"musicip_puid","----:com.apple.iTunes:fingerprint":"musicip_fingerprint","----:com.apple.iTunes:replaygain_track_gain":"replaygain_track_gain","----:com.apple.iTunes:replaygain_track_peak":"replaygain_track_peak","----:com.apple.iTunes:replaygain_album_gain":"replaygain_album_gain","----:com.apple.iTunes:replaygain_album_peak":"replaygain_album_peak","----:com.apple.iTunes:replaygain_track_minmax":"replaygain_track_minmax","----:com.apple.iTunes:replaygain_album_minmax":"replaygain_album_minmax","----:com.apple.iTunes:replaygain_undo":"replaygain_undo",gnre:"genre","----:com.apple.iTunes:ALBUMARTISTSORT":"albumartistsort","----:com.apple.iTunes:ARTISTS":"artists","----:com.apple.iTunes:ORIGINALDATE":"originaldate","----:com.apple.iTunes:ORIGINALYEAR":"originalyear","----:com.apple.iTunes:RELEASEDATE":"releasedate",desc:"description",ldes:"longDescription","©mvn":"movement","©mvi":"movementIndex","©mvc":"movementTotal","©wrk":"work",catg:"category",egid:"podcastId",hdvd:"hdVideo",keyw:"keywords",shwm:"showMovement",stik:"stik",rate:"rating"};class ey extends eo{constructor(){super(["iTunes"],eb)}postMap(e,t){"rate"===e.id&&(e.value={source:void 0,rating:Number.parseFloat(e.value)/100})}}let ex={TITLE:"title",ARTIST:"artist",ARTISTS:"artists",ALBUMARTIST:"albumartist","ALBUM ARTIST":"albumartist",ALBUM:"album",DATE:"date",ORIGINALDATE:"originaldate",ORIGINALYEAR:"originalyear",RELEASEDATE:"releasedate",COMMENT:"comment",TRACKNUMBER:"track",DISCNUMBER:"disk",GENRE:"genre",METADATA_BLOCK_PICTURE:"picture",COMPOSER:"composer",LYRICS:"lyrics",ALBUMSORT:"albumsort",TITLESORT:"titlesort",WORK:"work",ARTISTSORT:"artistsort",ALBUMARTISTSORT:"albumartistsort",COMPOSERSORT:"composersort",LYRICIST:"lyricist",WRITER:"writer",CONDUCTOR:"conductor",REMIXER:"remixer",ARRANGER:"arranger",ENGINEER:"engineer",PRODUCER:"producer",DJMIXER:"djmixer",MIXER:"mixer",LABEL:"label",GROUPING:"grouping",SUBTITLE:"subtitle",DISCSUBTITLE:"discsubtitle",TRACKTOTAL:"totaltracks",DISCTOTAL:"totaldiscs",COMPILATION:"compilation",RATING:"rating",BPM:"bpm",KEY:"key",MOOD:"mood",MEDIA:"media",CATALOGNUMBER:"catalognumber",RELEASESTATUS:"releasestatus",RELEASETYPE:"releasetype",RELEASECOUNTRY:"releasecountry",SCRIPT:"script",LANGUAGE:"language",COPYRIGHT:"copyright",LICENSE:"license",ENCODEDBY:"encodedby",ENCODERSETTINGS:"encodersettings",BARCODE:"barcode",ISRC:"isrc",ASIN:"asin",MUSICBRAINZ_TRACKID:"musicbrainz_recordingid",MUSICBRAINZ_RELEASETRACKID:"musicbrainz_trackid",MUSICBRAINZ_ALBUMID:"musicbrainz_albumid",MUSICBRAINZ_ARTISTID:"musicbrainz_artistid",MUSICBRAINZ_ALBUMARTISTID:"musicbrainz_albumartistid",MUSICBRAINZ_RELEASEGROUPID:"musicbrainz_releasegroupid",MUSICBRAINZ_WORKID:"musicbrainz_workid",MUSICBRAINZ_TRMID:"musicbrainz_trmid",MUSICBRAINZ_DISCID:"musicbrainz_discid",ACOUSTID_ID:"acoustid_id",ACOUSTID_ID_FINGERPRINT:"acoustid_fingerprint",MUSICIP_PUID:"musicip_puid",WEBSITE:"website",NOTES:"notes",TOTALTRACKS:"totaltracks",TOTALDISCS:"totaldiscs",DISCOGS_ARTIST_ID:"discogs_artist_id",DISCOGS_ARTISTS:"artists",DISCOGS_ARTIST_NAME:"artists",DISCOGS_ALBUM_ARTISTS:"albumartist",DISCOGS_CATALOG:"catalognumber",DISCOGS_COUNTRY:"releasecountry",DISCOGS_DATE:"originaldate",DISCOGS_LABEL:"label",DISCOGS_LABEL_ID:"discogs_label_id",DISCOGS_MASTER_RELEASE_ID:"discogs_master_release_id",DISCOGS_RATING:"discogs_rating",DISCOGS_RELEASED:"date",DISCOGS_RELEASE_ID:"discogs_release_id",DISCOGS_VOTES:"discogs_votes",CATALOGID:"catalognumber",STYLE:"genre",REPLAYGAIN_TRACK_GAIN:"replaygain_track_gain",REPLAYGAIN_TRACK_PEAK:"replaygain_track_peak",REPLAYGAIN_ALBUM_GAIN:"replaygain_album_gain",REPLAYGAIN_ALBUM_PEAK:"replaygain_album_peak",REPLAYGAIN_MINMAX:"replaygain_track_minmax",REPLAYGAIN_ALBUM_MINMAX:"replaygain_album_minmax",REPLAYGAIN_UNDO:"replaygain_undo"};class ek extends ea{static toRating(e,t,r){return{source:e?e.toLowerCase():void 0,rating:Number.parseFloat(t)/r*ea.maxRatingScore}}constructor(){super(["vorbis"],ex)}postMap(e){if("RATING"===e.id)e.value=ek.toRating(void 0,e.value,100);else if(0===e.id.indexOf("RATING:")){let t=e.id.split(":");e.value=ek.toRating(t[1],e.value,1),e.id=t[0]}}}let eT={IART:"artist",ICRD:"date",INAM:"title",TITL:"title",IPRD:"album",ITRK:"track",IPRT:"track",COMM:"comment",ICMT:"comment",ICNT:"releasecountry",GNRE:"genre",IWRI:"writer",RATE:"rating",YEAR:"year",ISFT:"encodedby",CODE:"encodedby",TURL:"website",IGNR:"genre",IENG:"engineer",ITCH:"technician",IMED:"media",IRPD:"album"};class ew extends ea{constructor(){super(["exif"],eT)}}let eS={"segment:title":"title","album:ARTIST":"albumartist","album:ARTISTSORT":"albumartistsort","album:TITLE":"album","album:DATE_RECORDED":"originaldate","album:DATE_RELEASED":"releasedate","album:PART_NUMBER":"disk","album:TOTAL_PARTS":"totaltracks","track:ARTIST":"artist","track:ARTISTSORT":"artistsort","track:TITLE":"title","track:PART_NUMBER":"track","track:MUSICBRAINZ_TRACKID":"musicbrainz_recordingid","track:MUSICBRAINZ_ALBUMID":"musicbrainz_albumid","track:MUSICBRAINZ_ARTISTID":"musicbrainz_artistid","track:PUBLISHER":"label","track:GENRE":"genre","track:ENCODER":"encodedby","track:ENCODER_OPTIONS":"encodersettings","edition:TOTAL_PARTS":"totaldiscs",picture:"picture"};class eI extends eo{constructor(){super(["matroska"],eS)}}let ev={NAME:"title",AUTH:"artist","(c) ":"copyright",ANNO:"comment"};class eA extends ea{constructor(){super(["AIFF"],ev)}}var eE=e.i(56382);class eC{constructor(){this.tagMappers={},[new es,new ep,new eu,new ey,new ey,new ek,new eg,new ed,new ew,new eI,new eA].forEach(e=>{this.registerTagMapper(e)})}mapTag(e,t,r){if(this.tagMappers[e])return this.tagMappers[e].mapGenericTag(t,r);throw new eE.InternalParserError(`No generic tag mapper defined for tag-format: ${e}`)}registerTagMapper(e){for(let t of e.tagTypes)this.tagMappers[t]=e}}var ez=e.i(47587);let e_=/\[(\d{2}):(\d{2})\.(\d{2,3})]/,eN=(0,T.default)("music-metadata:collector"),eM=["matroska","APEv2","vorbis","ID3v2.4","ID3v2.3","ID3v2.2","exif","asf","iTunes","AIFF","ID3v1"];class eR{constructor(e){this.format={tagTypes:[],trackInfo:[]},this.native={},this.common={track:{no:null,of:null},disk:{no:null,of:null},movementIndex:{no:null,of:null}},this.quality={warnings:[]},this.commonOrigin={},this.originPriority={},this.tagMapper=new eC,this.opts=e;let t=1;for(const e of eM)this.originPriority[e]=t++;this.originPriority.artificial=500,this.originPriority.id3v1=600}hasAny(){return Object.keys(this.native).length>0}addStreamInfo(e){eN(`streamInfo: type=${e.type?et.TrackTypeValueToKeyMap[e.type]:"?"}, codec=${e.codecName}`),this.format.trackInfo.push(e)}setFormat(e,t){eN(`format: ${e} = ${t}`),this.format[e]=t,this.opts?.observer&&this.opts.observer({metadata:this,tag:{type:"format",id:e,value:t}})}setAudioOnly(){this.setFormat("hasAudio",!0),this.setFormat("hasVideo",!1)}async addTag(e,t,r){eN(`tag ${e}.${t} = ${r}`),this.native[e]||(this.format.tagTypes.push(e),this.native[e]=[]),this.native[e].push({id:t,value:r}),await this.toCommon(e,t,r)}addWarning(e){this.quality.warnings.push({message:e})}async postMap(e,t){switch(t.id){case"artist":return this.handleSingularArtistTag(e,t,"artist","artists");case"albumartist":return this.handleSingularArtistTag(e,t,"albumartist","albumartists");case"artists":return this.handlePluralArtistTag(e,t,"artist","artists");case"albumartists":return this.handlePluralArtistTag(e,t,"albumartist","albumartists");case"picture":return this.postFixPicture(t.value).then(r=>{null!==r&&(t.value=r,this.setGenericTag(e,t))});case"totaltracks":this.common.track.of=ea.toIntOrNull(t.value);return;case"totaldiscs":this.common.disk.of=ea.toIntOrNull(t.value);return;case"movementTotal":this.common.movementIndex.of=ea.toIntOrNull(t.value);return;case"track":case"disk":case"movementIndex":{let e=this.common[t.id].of;this.common[t.id]=ea.normalizeTrack(t.value),this.common[t.id].of=null!=e?e:this.common[t.id].of;return}case"bpm":case"year":case"originalyear":t.value=Number.parseInt(t.value,10);break;case"date":{let e=Number.parseInt(t.value.substr(0,4),10);Number.isNaN(e)||(this.common.year=e);break}case"discogs_label_id":case"discogs_release_id":case"discogs_master_release_id":case"discogs_artist_id":case"discogs_votes":t.value="string"==typeof t.value?Number.parseInt(t.value,10):t.value;break;case"replaygain_track_gain":case"replaygain_track_peak":case"replaygain_album_gain":case"replaygain_album_peak":t.value=(0,el.toRatio)(t.value);break;case"replaygain_track_minmax":t.value=t.value.split(",").map(e=>Number.parseInt(e,10));break;case"replaygain_undo":{let e=t.value.split(",").map(e=>Number.parseInt(e,10));t.value={leftChannel:e[0],rightChannel:e[1]};break}case"gapless":case"compilation":case"podcast":case"showMovement":t.value="1"===t.value||1===t.value;break;case"isrc":{let e=this.common[t.id];if(e&&-1!==e.indexOf(t.value))return;break}case"comment":"string"==typeof t.value&&(t.value={text:t.value}),"iTunPGAP"===t.value.descriptor&&this.setGenericTag(e,{id:"gapless",value:"1"===t.value.text});break;case"lyrics":var r,i;"string"==typeof t.value&&(r=t.value,t.value=e_.test(r)?function(e){let t=e.split("\n"),r=[];for(let e of t){let t=e.match(e_);if(t){let i=(60*Number.parseInt(t[1],10)+Number.parseInt(t[2],10))*1e3+(3===t[3].length?Number.parseInt(t[3],10):10*Number.parseInt(t[3],10)),a=e.replace(e_,"").trim();r.push({timestamp:i,text:a})}}return{contentType:ez.LyricsContentType.lyrics,timeStampFormat:ez.TimestampFormat.milliseconds,text:r.map(e=>e.text).join("\n"),syncText:r}}(r):(i=r,{contentType:ez.LyricsContentType.lyrics,timeStampFormat:ez.TimestampFormat.notSynchronized,text:i.trim(),syncText:[]}))}null!==t.value&&this.setGenericTag(e,t)}toCommonMetadata(){return{format:this.format,native:this.native,quality:this.quality,common:this.common}}handleSingularArtistTag(e,t,r,i){if(this.commonOrigin[r]===this.originPriority[e])return this.postMap("artificial",{id:i,value:t.value});this.common[i]||this.setGenericTag("artificial",{id:i,value:t.value}),this.setGenericTag(e,t)}handlePluralArtistTag(e,t,r,i){if((!this.common[r]||this.commonOrigin[r]===this.originPriority.artificial)&&(!this.common[i]||-1===this.common[i].indexOf(t.value))){var a;let e=(a=(this.common[i]||[]).concat([t.value])).length>2?`${a.slice(0,a.length-1).join(", ")} & ${a[a.length-1]}`:a.join(" & ");this.setGenericTag("artificial",{id:r,value:e})}this.setGenericTag(e,t)}async postFixPicture(e){if(e.data&&e.data.length>0){if(!e.format){let t=await W(Uint8Array.from(e.data));if(!t)return null;e.format=t.mime}return e.format=e.format.toLocaleLowerCase(),"image/jpg"===e.format&&(e.format="image/jpeg"),e}return this.addWarning("Empty picture tag found"),null}async toCommon(e,t,r){let i=this.tagMapper.mapTag(e,{id:t,value:r},this);i&&await this.postMap(e,i)}setGenericTag(e,t){var r,i;eN(`common.${t.id} = ${t.value}`);let a=this.commonOrigin[t.id]||1e3,n=this.originPriority[e];if(ei[r=t.id]&&!ei[r].multiple)if(!(n<=a))return eN(`Ignore native tag (singleton): ${e}.${t.id} = ${t.value}`);else this.common[t.id]=t.value,this.commonOrigin[t.id]=n;else if(n===a)(!ei[i=t.id].multiple||ei[i].unique)&&-1!==this.common[t.id].indexOf(t.value)?eN(`Ignore duplicate value: ${e}.${t.id} = ${t.value}`):this.common[t.id].push(t.value);else{if(!(n<a))return eN(`Ignore native tag (list): ${e}.${t.id} = ${t.value}`);this.common[t.id]=[t.value],this.commonOrigin[t.id]=n}this.opts?.observer&&this.opts.observer({metadata:this,tag:{type:"common",id:t.id,value:t.value}})}}let eL={parserType:"mpeg",extensions:[".mp2",".mp3",".m2a",".aac","aacp"],mimeTypes:["audio/mpeg","audio/mp3","audio/aacs","audio/aacp"],load:async()=>(await e.A(4856)).MpegParser},eP={parserType:"apev2",extensions:[".ape"],mimeTypes:["audio/ape","audio/monkeys-audio"],load:async()=>(await e.A(96166)).APEv2Parser},eD={parserType:"asf",extensions:[".asf",".wma",".wmv"],mimeTypes:["audio/ms-wma","video/ms-wmv","audio/ms-asf","video/ms-asf","application/vnd.ms-asf"],load:async()=>(await e.A(97971)).AsfParser},eO={parserType:"dsdiff",extensions:[".dff"],mimeTypes:["audio/dsf","audio/dsd"],load:async()=>(await e.A(99054)).DsdiffParser},eU={parserType:"aiff",extensions:[".aif","aiff","aifc"],mimeTypes:["audio/aiff","audio/aif","audio/aifc","application/aiff"],load:async()=>(await e.A(55758)).AIFFParser},eB={parserType:"dsf",extensions:[".dsf"],mimeTypes:["audio/dsf"],load:async()=>(await e.A(70308)).DsfParser},ej={parserType:"flac",extensions:[".flac"],mimeTypes:["audio/flac"],load:async()=>(await e.A(43602)).FlacParser},eF={parserType:"matroska",extensions:[".mka",".mkv",".mk3d",".mks","webm"],mimeTypes:["audio/matroska","video/matroska","audio/webm","video/webm"],load:async()=>(await e.A(56043)).MatroskaParser},eX={parserType:"mp4",extensions:[".mp4",".m4a",".m4b",".m4pa","m4v","m4r","3gp",".mov",".movie",".qt"],mimeTypes:["audio/mp4","audio/m4a","video/m4v","video/mp4","video/quicktime"],load:async()=>(await e.A(41636)).MP4Parser},e$={parserType:"musepack",extensions:[".mpc"],mimeTypes:["audio/musepack"],load:async()=>(await e.A(95346)).MusepackParser},eG={parserType:"ogg",extensions:[".ogg",".ogv",".oga",".ogm",".ogx",".opus",".spx"],mimeTypes:["audio/ogg","audio/opus","audio/speex","video/ogg"],load:async()=>(await e.A(74814)).OggParser},eW={parserType:"wavpack",extensions:[".wv",".wvp"],mimeTypes:["audio/wavpack"],load:async()=>(await e.A(77549)).WavPackParser},eq={parserType:"riff",extensions:[".wav","wave",".bwf"],mimeTypes:["audio/vnd.wave","audio/wav","audio/wave"],load:async()=>(await e.A(99248)).WaveParser},eY=(0,T.default)("music-metadata:parser:factory");class eV{constructor(){this.parsers=[],[ej,eL,eP,eX,eF,eq,eG,eD,eU,eW,e$,eB,eO].forEach(e=>{this.registerParser(e)})}registerParser(e){this.parsers.push(e)}async parse(e,t,r){if(e.supportsRandomAccess()?(eY("tokenizer supports random-access, scanning for appending headers"),await e0(e,r)):eY("tokenizer does not support random-access, cannot scan for appending headers"),!t){let r=new Uint8Array(4100);if(e.fileInfo.mimeType&&(t=this.findLoaderForContentType(e.fileInfo.mimeType)),!t&&e.fileInfo.path&&(t=this.findLoaderForExtension(e.fileInfo.path)),!t){eY("Guess parser on content..."),await e.peekBuffer(r,{mayBeLess:!0});let i=await W(r,{mpegOffsetTolerance:10});if(!i||!i.mime)throw new eE.CouldNotDetermineFileTypeError("Failed to determine audio format");if(eY(`Guessed file type is mime=${i.mime}, extension=${i.ext}`),!(t=this.findLoaderForContentType(i.mime)))throw new eE.UnsupportedFileTypeError(`Guessed MIME-type not supported: ${i.mime}`)}}eY(`Loading ${t.parserType} parser...`);let i=new eR(r),a=new(await t.load())(i,e,r??{});return eY(`Parser ${t.parserType} loaded`),await a.parse(),i.format.trackInfo&&(void 0===i.format.hasAudio&&i.setFormat("hasAudio",!!i.format.trackInfo.find(e=>e.type===et.TrackType.audio)),void 0===i.format.hasVideo&&i.setFormat("hasVideo",!!i.format.trackInfo.find(e=>e.type===et.TrackType.video))),i.toCommonMetadata()}findLoaderForExtension(e){var t;let r;if(!e)return;let i=(-1===(r=(t=e).lastIndexOf("."))?"":t.substring(r)).toLocaleLowerCase()||e;return this.parsers.find(e=>-1!==e.extensions.indexOf(i))}findLoaderForContentType(e){let t;if(!e)return;try{let r,i;r=J.default.parse(e),t={type:(i=(0,ee.parse)(r.type)).type,subtype:i.subtype,suffix:i.suffix,parameters:r.parameters}}catch(t){eY(`Invalid HTTP Content-Type header value: ${e}`);return}let r=0===t.subtype.indexOf("x-")?t.subtype.substring(2):t.subtype;return this.parsers.find(e=>e.mimeTypes.find(e=>-1!==e.indexOf(`${t.type}/${r}`)))}getSupportedMimeTypes(){let e=new Set;return this.parsers.forEach(t=>{t.mimeTypes.forEach(t=>{e.add(t),e.add(t.replace("/","/x-"))})}),Array.from(e)}}var eZ=e.i(63848),eK=e.i(1664),eH=e.i(34454);async function eQ(e){let t=e.fileInfo.size;if(t>=143){let r=new Uint8Array(15),i=e.position;await e.readBuffer(r,{position:t-143}),e.setPosition(i);let a=(0,eH.textDecode)(r,"latin1");if("LYRICS200"===a.substring(6))return Number.parseInt(a.substring(0,6),10)+15}return 0}async function eJ(e,t={}){let r=(0,y.fromBlob)(e);try{var i,a;return await (i=r,a=t,new eV().parse(i,void 0,a))}finally{await r.close()}}async function e0(e,t={}){let r=e.fileInfo.size;await (0,eK.hasID3v1Header)(e)&&(r-=128,r-=await eQ(e)),t.apeHeader=await eZ.APEv2Parser.findApeFooterOffset(e,r)}async function e1(e){try{let t=await eJ(e,{duration:!0}),r=t.common.title?.trim()??"",i=t.common.artist?.trim()||t.common.artists?.[0]?.trim()||t.common.albumartist?.trim()||t.common.albumartists?.[0]?.trim()||"",a=t.common.album?.trim()??"",n=t.format.duration,s="number"==typeof n&&Number.isFinite(n)?Math.round(n):0;return{title:r,artist:i,album:a,durationSec:s}}catch{return null}}async function e2(e,t,r,i,a,n,s,o){if(!(n.maxScanDepth>0)||!(a>=n.maxScanDepth))for await(let[l,c]of r.entries()){let r=i?`${i}/${l}`:l;if("directory"===c.kind){if(n.followSymlinks&&s.has(r))continue;let i=n.followSymlinks?new Set(s):s;n.followSymlinks&&i.add(r),await e2(e,t,c,r,a+1,n,i,o)}else"file"===c.kind&&function(e,t){let r=e.lastIndexOf(".");if(r<0)return!1;let i=e.slice(r).toLowerCase();return(t??h).has(i)}(l,n.enabledExtensions)&&o.push({rootId:e,rootDisplayName:t,relativePath:r,handle:c})}}function e4(e){let t=e.lastIndexOf("/");return t>=0?e.slice(t+1):e}function e3(e,t){let r=e.split("/").filter(Boolean);return r.length>1?r[r.length-2]??t:t}async function e5(e,t,r,i){let a=`lib:${e.rootId}:${e.relativePath}`,n=r.get(a),s=n?b(n):null,o=i?performance.now():0,l=(t,r)=>{var a;let n,s;return i&&(a={relativePath:e.relativePath,rootDisplayName:e.rootDisplayName,durationMs:performance.now()-o,outcome:t},n=`${a.rootDisplayName}/${a.relativePath}`,s="cached"===a.outcome?"cached":"parsed"===a.outcome?"parsed":"error",console.info(`[muzical scan] ${n} — ${a.durationMs.toFixed(1)} ms (${s})`)),r};try{let r=await e.handle.getFile();if(n&&s&&r.lastModified===s.fileLastModified&&r.size===s.fileSize)return l("cached",n);let i=e4(e.relativePath),o=g(i,t),c=e3(e.relativePath,e.rootDisplayName),u=await e1(r),m={id:a,title:u?.title?u.title:o,artist:u?.artist?u.artist:"Unknown artist",album:u?.album?u.album:c,durationSec:u?.durationSec&&u.durationSec>0?u.durationSec:0,audioUrl:null,library:{rootId:e.rootId,relativePath:e.relativePath}};return l("parsed",m.library?{...m,library:{...m.library,fileLastModified:r.lastModified,fileSize:r.size}}:m)}catch{let r,i;return l("error",(r=g(e4(e.relativePath),t),i=e3(e.relativePath,e.rootDisplayName),{id:`lib:${e.rootId}:${e.relativePath}`,title:r,artist:"Unknown artist",album:i,durationSec:0,audioUrl:null,library:{rootId:e.rootId,relativePath:e.relativePath}}))}}async function e8(e,t,r,i,a){if(0===e.length)return[];let n=Array(e.length),s=0,o=0,l=0,c=e.length,u=()=>{a?.({filesDone:o,filesTotal:c,filesSkipped:l})};u();let m=async()=>{for(;;){let a=s++;if(a>=e.length)break;let c=e[a],m=`lib:${c.rootId}:${c.relativePath}`,d=r.has(m);n[a]=await e5(c,t,r,i),d&&n[a]===r.get(m)&&(l+=1),o+=1,u()}},d=Math.min(8,e.length);return await Promise.all(Array.from({length:d},()=>m())),n}async function e6(e,t,r,i,a,n,s){s?.({phase:"walk"});let o=[];await e2(e,t,r,"",0,i,new Set,o);let l=function(e){let t=new Map;for(let r of e)r.library&&b(r)&&t.set(r.id,r);return t}(a.filter(t=>t.library?.rootId===e));return s?.({phase:"metadata",filesDone:0,filesTotal:o.length,filesSkipped:0}),n&&o.length>0&&console.info(`[muzical scan] ${t}: reading metadata for ${o.length} file${1===o.length?"":"s"}…`),e8(o,i.enabledExtensions,l,n,e=>{s?.({phase:"metadata",...e})})}async function e7(e,t,r,i,a,n){let s=[],o=0,l=null,c=e.filter(e=>t.has(e.id)),u=c.length,m=a?performance.now():0;a&&u>0&&console.info(`[muzical scan] Starting scan of ${u} root${1===u?"":"s"}…`);for(let e=0;e<c.length;e++){let m=c[e],d=t.get(m.id);if(!d)continue;let f=t=>{n?.({rootIndex:e,rootCount:u,rootName:m.name,phase:t.phase,filesDone:t.filesDone,filesTotal:t.filesTotal,filesSkipped:t.filesSkipped})};f({phase:"walk"});try{let e=await e6(m.id,m.name,d,r,i,a,e=>{"walk"===e.phase?f({phase:"walk"}):f({phase:"metadata",filesDone:e.filesDone,filesTotal:e.filesTotal,filesSkipped:e.filesSkipped})});s.push(...e)}catch(e){o+=1,l||(l=e instanceof DOMException?`${e.name}: ${e.message}`:e instanceof Error?e.message:String(e))}}if(s.sort((e,t)=>{let r=e.library?.rootId??"",i=t.library?.rootId??"",a=r.localeCompare(i,void 0,{sensitivity:"base"});if(0!==a)return a;let n=e.library?.relativePath??e.title,s=t.library?.relativePath??t.title;return n.localeCompare(s,void 0,{sensitivity:"base"})}),a){let e=performance.now()-m;console.info(`[muzical scan] Finished: ${s.length} track${1===s.length?"":"s"} in ${e.toFixed(0)} ms`)}return{tracks:s,failedRootCount:o,firstError:l}}function e9(e){return!e.library&&(!!("musicbrainz"===e.source||"youtube"===e.source||e.id.startsWith("musicbrainz:")||e.id.startsWith("youtube:"))||!!e.youtubeQuery?.trim())}function te(e){return e?.trim()||"Unknown artist"}function tt(e,t){return`${e}\u0000${t}`}function tr(e,t){return e.filter(e=>tt(e.album,e.artist)===t)}function ti(e,t){let r=t.trim();return r?e.filter(e=>te(e.artist)===r):[]}function ta(e,t){let r=t.artist.trim()||e.artist,i=t.album.trim()||e.album,a={...e,artist:r,album:i};return e.youtubeQuery?.trim()&&(a.youtubeQuery=`${e.title} ${r}`.trim(),a.youtubeVideoId=void 0),a}function tn(e,t){let r=t.artist.trim()||e.artist,i={...e,artist:r};return e.youtubeQuery?.trim()&&(i.youtubeQuery=`${e.title} ${r}`.trim(),i.youtubeVideoId=void 0),i}function ts(e,t){let r=t.title.trim()||e.title,i=t.artist.trim()||e.artist,a=t.album.trim()||e.album,n={...e,title:r,artist:i,album:a};return e.youtubeQuery?.trim()&&(n.youtubeQuery=`${r} ${i}`.trim(),n.youtubeVideoId=void 0),n}async function to(e,t){let r=e.trim();if(!r)return null;let i=new URL("/api/youtube/resolve",window.location.origin);i.searchParams.set("q",r);let a=await fetch(i.toString(),{signal:t});if(!a.ok)return null;let n=await a.json();return n.videoId?.trim()||null}e.s(["default",0,e9],66951),e.s(["albumCompositeKey",0,tt,"artistDisplayName",0,te],99513),e.s(["default",0,tr],97891),e.s(["default",0,ti],4728),e.s(["default",0,ta],91768),e.s(["default",0,tn],73973);var tl=e.i(65079),tc=e.i(62445);function tu(e){let t=e.toLowerCase();return t.includes("quota")||t.includes("quotaexceeded")}function tm(){(0,tc.setYoutubeDataApiBlockedInternal)(!0)}e.s(["default",0,tu],56784),e.s(["default",0,tm],95772),e.s(["YOUTUBE_DATA_API_MIN_INTERVAL_MS",0,900,"YOUTUBE_SEARCH_CACHE_TTL_MS",0,3e5,"YOUTUBE_SEARCH_DEBOUNCE_MS",0,500,"YOUTUBE_SEARCH_PAGE_SIZE",0,20],8998);let td=0,tf=Promise.resolve();async function tp(){tf=tf.then(async()=>{let e=Math.max(0,900-(Date.now()-td));e>0&&await new Promise(t=>setTimeout(t,e)),td=Date.now()}),await tf}e.s(["default",0,tp],32022);let th=new Map;function tg(e){let t=e.trim().toLowerCase();return t?th.get(t)??null:null}async function tb(e,t,r){let i=e.trim(),a=t.trim();if(!i||!a||(0,tc.default)())return null;let n=tg(i);if(n)return n;let s=new URL("https://www.googleapis.com/youtube/v3/search");s.searchParams.set("part","snippet"),s.searchParams.set("type","video"),s.searchParams.set("maxResults","5"),s.searchParams.set("videoEmbeddable","true"),s.searchParams.set("q",i),s.searchParams.set("key",a),await tp();let o=await fetch(s,{signal:r}),l=await o.json();if(!o.ok){let e=l.error?.message?.trim()??"";return(l.error?.errors?.some(e=>"quotaExceeded"===e.reason)||tu(e))&&tm(),null}for(let e of l.items??[]){let t=e.id?.videoId?.trim();if(t)return!function(e,t){let r=e.trim().toLowerCase(),i=t.trim();r&&i&&th.set(r,i)}(i,t),t}return null}async function ty(e,t){let r=e.trim();if(!r)return null;let i=tg(r);if(i)return i;let a=(0,tl.default)().trim();if(a&&!(0,tc.default)()){let e=await tb(r,a,t);if(e)return e}return to(r,t)}e.s(["default",0,ty],63080);let tx=/[<>:"/\\|?*\u0000-\u001f]+/g;function tk(e,t){return(e.replace(tx," ").replace(/\s+/g," ").trim().replace(/[. ]+$/g,"")||t).slice(0,160)}function tT(e){let t=tk(e.title,"Untitled"),r=tk(e.artist,"");return r?`${r} - ${t}`:t}function tw(e,t){let r=document.createElement("a");r.href=e,t&&(r.download=t),r.rel="noopener",r.style.display="none",document.body.appendChild(r),r.click(),r.remove()}async function tS(e,t){if(e.library){let i=await t(e);if(!i)throw Error("Could not read this file from the library.");var r=i.name||`${tT(e)}.mp3`;let a=URL.createObjectURL(i);try{tw(a,r)}finally{window.setTimeout(()=>URL.revokeObjectURL(a),3e4)}return}if(e.audioUrl?.trim())return void tw(e.audioUrl,tT(e));let i=e.youtubeVideoId?.trim()||(e.youtubeQuery?.trim()?await ty(e.youtubeQuery):null);if(!i)throw Error("Could not find a YouTube video for this track.");let a=new URL("/api/youtube/audio",window.location.origin);a.searchParams.set("videoId",i),a.searchParams.set("name",tT(e)),tw(a.toString(),tT(e))}async function tI(e,t){let r={mode:"readwrite"};try{let i=await e.queryPermission?.(r);if("granted"===i)return!0;if(!t)return!1;let a=await e.requestPermission?.(r);return"granted"===a}catch{return!1}}async function tv(e,t){let r=e.library;if(!r)return null;let i=t.get(r.rootId);if(!i)return null;let a=r.relativePath.split("/").filter(Boolean);if(0===a.length)return null;let n=i;for(let e=0;e<a.length-1;e++){let t=a[e];if(!t)return null;n=await n.getDirectoryHandle(t)}let s=a[a.length-1];return s?n.getFileHandle(s):null}function tA(e){let t=e.name.toLowerCase();if(t.endsWith(".mp3"))return"mp3";if(t.endsWith(".flac"))return"flac";let r=e.type.toLowerCase();return"audio/mpeg"===r||"audio/mp3"===r?"mp3":"audio/flac"===r||"audio/x-flac"===r?"flac":null}function tE(e){return String(e).split("").map(e=>e.charCodeAt(0))}function tC(e){return new Uint8Array(tE(e))}function tz(e){let t=new ArrayBuffer(2*e.length),r=new Uint8Array(t);return new Uint16Array(t).set(tE(e)),r}function t_(e){return[e>>>24&255,e>>>16&255,e>>>8&255,255&e]}class tN{_setIntegerFrame(e,t){let r=parseInt(t,10);this.frames.push({name:e,value:r,size:11+r.toString().length})}_setStringFrame(e,t){let r=t.toString(),i=13+2*r.length;"TDAT"===e&&(i=11+r.length),this.frames.push({name:e,value:r,size:i})}_setPictureFrame(e,t,r,i){var a,n,s;let o=function(e){if(!e||!e.length)return null;if(255===e[0]&&216===e[1]&&255===e[2])return"image/jpeg";if(137===e[0]&&80===e[1]&&78===e[2]&&71===e[3])return"image/png";if(71===e[0]&&73===e[1]&&70===e[2])return"image/gif";if(87===e[8]&&69===e[9]&&66===e[10]&&80===e[11])return"image/webp";let t=73===e[0]&&73===e[1]&&42===e[2]&&0===e[3],r=77===e[0]&&77===e[1]&&0===e[2]&&42===e[3];return t||r?"image/tiff":66===e[0]&&77===e[1]?"image/bmp":0===e[0]&&0===e[1]&&1===e[2]&&0===e[3]?"image/x-icon":null}(new Uint8Array(t)),l=r.toString();if(!o)throw Error("Unknown picture MIME type");r||(i=!1),this.frames.push({name:"APIC",value:t,pictureType:e,mimeType:o,useUnicodeEncoding:i,description:l,size:(a=t.byteLength,n=o.length,s=l.length,11+n+1+1+(i?2+2*(s+1):s+1)+a)})}_setLyricsFrame(e,t,r){let i=e.split("").map(e=>e.charCodeAt(0)),a=t.toString(),n=r.toString();this.frames.push({name:"USLT",value:n,language:i,description:a,size:16+2*a.length+2+2+2*n.length})}_setCommentFrame(e,t,r){let i=e.split("").map(e=>e.charCodeAt(0)),a=t.toString(),n=r.toString();this.frames.push({name:"COMM",value:n,language:i,description:a,size:16+2*a.length+2+2+2*n.length})}_setPrivateFrame(e,t){let r=e.toString();this.frames.push({name:"PRIV",value:t,id:r,size:10+r.length+1+t.byteLength})}_setUserStringFrame(e,t){let r=e.toString(),i=t.toString();this.frames.push({name:"TXXX",description:r,value:i,size:13+2*r.length+2+2+2*i.length})}_setUrlLinkFrame(e,t){let r=t.toString();this.frames.push({name:e,value:r,size:10+r.length})}_setPairedTextFrame(e,t){let r;this.frames.push({name:e,value:t,size:(r=0,t.forEach(e=>{r+=2+2*e[0].length+2+2+2*e[1].length+2}),11+r)})}_setSynchronisedLyricsFrame(e,t,r,i,a){var n;let s,o=a.toString(),l=i.split("").map(e=>e.charCodeAt(0));this.frames.push({name:"SYLT",value:t,language:l,description:o,type:e,timestampFormat:r,size:(n=o.length,s=0,t.forEach(e=>{s+=2+2*e[0].length+2+4}),18+2*n+2+s)})}constructor(e){if(!e||"object"!=typeof e||!("byteLength"in e))throw Error("First argument should be an instance of ArrayBuffer or Buffer");this.arrayBuffer=e,this.padding=4096,this.frames=[],this.url=""}setFrame(e,t){switch(e){case"TPE1":case"TCOM":case"TCON":{if(!Array.isArray(t))throw Error(`${e} frame value should be an array of strings`);let r="TCON"===e?";":"/",i=t.join(r);this._setStringFrame(e,i);break}case"TLAN":case"TIT1":case"TIT2":case"TIT3":case"TALB":case"TPE2":case"TPE3":case"TPE4":case"TRCK":case"TPOS":case"TMED":case"TPUB":case"TCOP":case"TKEY":case"TEXT":case"TDAT":case"TCMP":case"TSSE":case"TSRC":this._setStringFrame(e,t);break;case"TBPM":case"TLEN":case"TYER":this._setIntegerFrame(e,t);break;case"USLT":if(t.language=t.language||"eng","object"!=typeof t||!("description"in t)||!("lyrics"in t))throw Error("USLT frame value should be an object with keys description and lyrics");if(t.language&&!t.language.match(/[a-z]{3}/i))throw Error("Language must be coded following the ISO 639-2 standards");this._setLyricsFrame(t.language,t.description,t.lyrics);break;case"APIC":if("object"!=typeof t||!("type"in t)||!("data"in t)||!("description"in t))throw Error("APIC frame value should be an object with keys type, data and description");if(t.type<0||t.type>20)throw Error("Incorrect APIC frame picture type");this._setPictureFrame(t.type,t.data,t.description,!!t.useUnicodeEncoding);break;case"TXXX":if("object"!=typeof t||!("description"in t)||!("value"in t))throw Error("TXXX frame value should be an object with keys description and value");this._setUserStringFrame(t.description,t.value);break;case"WCOM":case"WCOP":case"WOAF":case"WOAR":case"WOAS":case"WORS":case"WPAY":case"WPUB":this._setUrlLinkFrame(e,t);break;case"COMM":if(t.language=t.language||"eng","object"!=typeof t||!("description"in t)||!("text"in t))throw Error("COMM frame value should be an object with keys description and text");if(t.language&&!t.language.match(/[a-z]{3}/i))throw Error("Language must be coded following the ISO 639-2 standards");this._setCommentFrame(t.language,t.description,t.text);break;case"PRIV":if("object"!=typeof t||!("id"in t)||!("data"in t))throw Error("PRIV frame value should be an object with keys id and data");this._setPrivateFrame(t.id,t.data);break;case"IPLS":if(!Array.isArray(t)||!Array.isArray(t[0]))throw Error("IPLS frame value should be an array of pairs");this._setPairedTextFrame(e,t);break;case"SYLT":if("object"!=typeof t||!("type"in t)||!("text"in t)||!("timestampFormat"in t))throw Error("SYLT frame value should be an object with keys type, text and timestampFormat");if(!Array.isArray(t.text)||!Array.isArray(t.text[0]))throw Error("SYLT frame text value should be an array of pairs");if(t.type<0||t.type>6)throw Error("Incorrect SYLT frame content type");if(t.timestampFormat<1||t.timestampFormat>2)throw Error("Incorrect SYLT frame time stamp format");t.language=t.language||"eng",t.description=t.description||"",this._setSynchronisedLyricsFrame(t.type,t.text,t.timestampFormat,t.language,t.description);break;default:throw Error(`Unsupported frame ${e}`)}return this}removeTag(){var e;if(this.arrayBuffer.byteLength<10)return;let t=new Uint8Array(this.arrayBuffer),r=t[3],i=((e=[t[6],t[7],t[8],t[9]])[0]<<21)+(e[1]<<14)+(e[2]<<7)+e[3]+10;73!==t[0]||68!==t[1]||51!==t[2]||r<2||r>4||(this.arrayBuffer=new Uint8Array(t.subarray(i)).buffer)}addTag(){var e;this.removeTag();let t=[255,254],r=10+this.frames.reduce((e,t)=>e+t.size,0)+this.padding,i=new ArrayBuffer(this.arrayBuffer.byteLength+r),a=new Uint8Array(i),n=0,s=[];return s=[73,68,51,3],a.set(s,n),n+=s.length,n++,n++,s=[(e=r-10)>>>21&127,e>>>14&127,e>>>7&127,127&e],a.set(s,n),n+=s.length,this.frames.forEach(e=>{switch(s=tC(e.name),a.set(s,n),n+=s.length,s=t_(e.size-10),a.set(s,n),n+=s.length,n+=2,e.name){case"WCOM":case"WCOP":case"WOAF":case"WOAR":case"WOAS":case"WORS":case"WPAY":case"WPUB":s=tC(e.value),a.set(s,n),n+=s.length;break;case"TPE1":case"TCOM":case"TCON":case"TLAN":case"TIT1":case"TIT2":case"TIT3":case"TALB":case"TPE2":case"TPE3":case"TPE4":case"TRCK":case"TPOS":case"TKEY":case"TMED":case"TPUB":case"TCOP":case"TEXT":case"TSSE":case"TSRC":s=[1].concat(t),a.set(s,n),n+=s.length,s=tz(e.value),a.set(s,n),n+=s.length;break;case"TXXX":case"USLT":case"COMM":s=[1],"USLT"!==e.name&&"COMM"!==e.name||(s=s.concat(e.language)),s=s.concat(t),a.set(s,n),n+=s.length,s=tz(e.description),a.set(s,n),n+=s.length,s=[0,0].concat(t),a.set(s,n),n+=s.length,s=tz(e.value),a.set(s,n),n+=s.length;break;case"TBPM":case"TLEN":case"TDAT":case"TYER":n++,s=tC(e.value),a.set(s,n),n+=s.length;break;case"PRIV":s=tC(e.id),a.set(s,n),n+=s.length,n++,a.set(new Uint8Array(e.value),n),n+=e.value.byteLength;break;case"APIC":s=[+!!e.useUnicodeEncoding],a.set(s,n),n+=s.length,s=tC(e.mimeType),a.set(s,n),n+=s.length,s=[0,e.pictureType],a.set(s,n),n+=s.length,e.useUnicodeEncoding?(s=[].concat(t),a.set(s,n),n+=s.length,s=tz(e.description),a.set(s,n),n+=s.length,n+=2):(s=tC(e.description),a.set(s,n),n+=s.length,n++),a.set(new Uint8Array(e.value),n),n+=e.value.byteLength;break;case"IPLS":s=[1],a.set(s,n),n+=s.length,e.value.forEach(e=>{s=[].concat(t),a.set(s,n),n+=s.length,s=tz(e[0].toString()),a.set(s,n),n+=s.length,s=[0,0].concat(t),a.set(s,n),n+=s.length,s=tz(e[1].toString()),a.set(s,n),n+=s.length,s=[0,0],a.set(s,n),n+=s.length});break;case"SYLT":s=[1].concat(e.language).concat(e.timestampFormat).concat(e.type),a.set(s,n),n+=s.length,s=[].concat(t),a.set(s,n),n+=s.length,s=tz(e.description),a.set(s,n),n+=s.length,n+=2,e.value.forEach(e=>{s=[].concat(t),a.set(s,n),n+=s.length,s=tz(e[0].toString()),a.set(s,n),n+=s.length,s=[0,0],a.set(s,n),n+=s.length,s=t_(e[1]),a.set(s,n),n+=s.length})}}),n+=this.padding,a.set(new Uint8Array(this.arrayBuffer),n),this.arrayBuffer=i,i}getBlob(){return new Blob([this.arrayBuffer],{type:"audio/mpeg"})}getURL(){return this.url||(this.url=URL.createObjectURL(this.getBlob())),this.url}revokeURL(){URL.revokeObjectURL(this.url)}}async function tM(e,t){var r;let i,a;if("mp3"!==tA(e))throw Error("Unsupported file format");return r=await e.arrayBuffer(),(i=new tN(r)).setFrame("TIT2",t.title.trim()),i.setFrame("TPE1",[t.artist.trim()]),(a=t.album.trim())&&i.setFrame("TALB",a),i.addTag()}async function tR(e,t,r,i){let a;if(!e.library)return{ok:!1,reason:"Only local library files can be tagged on disk."};let n=r.get(e.library.rootId);if(!n)return{ok:!1,reason:"Library folder is not available. Try rescanning."};if(!await tI(n,i))return{ok:!1,reason:"Write permission is required. Re-add the library folder or allow write access when prompted."};let s=await tv(e,r);if(!s)return{ok:!1,reason:"Could not open the audio file."};let o=await s.getFile();if(!tA(o))return{ok:!1,reason:"Tag writing is supported for MP3 files only."};try{a=await tM(o,t)}catch{return{ok:!1,reason:"Failed to update embedded tags in this file."}}try{let e=await s.createWritable();await e.write(a),await e.close()}catch{return{ok:!1,reason:"Could not save tags to the file."}}return{ok:!0}}async function tL(e,t,r){let i=0,a=0,n=null;for(let s of e){if(!s.library)continue;let e=await tR(s,{title:s.title,artist:s.artist,album:s.album},t,r&&0===i&&0===a);e.ok?i+=1:(a+=1,n||(n=e.reason))}return{ok:0===a,writtenCount:i,failedCount:a,reason:n}}function tP(e,t){let r=new Map;for(let t of e)r.set(t.id,t);for(let e of t)e9(e)&&(r.has(e.id)||r.set(e.id,e));return[...r.values()]}function tD(e){return e.library?{...e,source:e.source??"library"}:"youtube"===e.source||e.id.startsWith("youtube:")?{...e,source:"youtube",library:void 0}:"musicbrainz"===e.source||e.id.startsWith("musicbrainz:")?{...e,source:"musicbrainz",library:void 0}:e.youtubeQuery?.trim()?{...e,source:e.source??"musicbrainz",library:void 0}:{...e,library:void 0}}function tO(e){if(!e||"object"!=typeof e||"string"!=typeof e.id||!e.id.trim()||"string"!=typeof e.title||"string"!=typeof e.artist||"string"!=typeof e.album)return null;let t="number"==typeof e.durationSec&&Number.isFinite(e.durationSec)&&e.durationSec>=0?e.durationSec:0,r="library"===e.source||"musicbrainz"===e.source||"youtube"===e.source?e.source:void 0,i="string"==typeof e.audioUrl?e.audioUrl:null===e.audioUrl?null:void 0,a="string"==typeof e.youtubeQuery?e.youtubeQuery:void 0,n="string"==typeof e.youtubeVideoId?e.youtubeVideoId:void 0,s=function(e){if(e&&"object"==typeof e&&"string"==typeof e.rootId&&"string"==typeof e.relativePath)return{rootId:e.rootId,relativePath:e.relativePath}}(e.library);return{id:e.id.trim(),title:e.title,artist:e.artist,album:e.album,durationSec:t,audioUrl:i,youtubeQuery:a,youtubeVideoId:n,source:r,library:s}}async function tU(e,t){let r=e.library;if(!r)return null;let i=t.get(r.rootId);if(!i)return null;let a=r.relativePath.split("/").filter(Boolean);if(0===a.length)return null;let n=i;for(let e=0;e<a.length-1;e++){let t=a[e];if(!t)return null;n=await n.getDirectoryHandle(t)}let s=a[a.length-1];return s?(await n.getFileHandle(s)).getFile():null}function tB(e){return[...e].sort((e,t)=>t.updatedAt-e.updatedAt)}function tj(e){let{tracks:i,contextLabel:a,onClose:n}=e,{playlists:s,addTracksToPlaylist:o,createPlaylist:l}=rE(),c=(0,r.useId)(),u=(0,r.useId)(),m=(0,r.useRef)(null),[d,f]=(0,r.useState)(""),[p,h]=(0,r.useState)(null),[g,b]=(0,r.useState)(null),y=(0,r.useMemo)(()=>tB(s),[s]),x=(0,r.useCallback)(e=>{var t,r;b(null),h((t=o(e,i),r=i.length,0===t?"Already in playlist":t===r?`Added ${t} track${1===t?"":"s"}`:`Added ${t} new track${1===t?"":"s"} (${r-t} already present)`))},[o,i]),k=(0,r.useCallback)(()=>{b(null);let e=d.trim();if(!e)return void b("Enter a playlist name.");let t=l(e,i.map(e=>e.id));t?(f(""),h(`Created “${t.name}” with ${t.trackIds.length} track${1===t.trackIds.length?"":"s"}`)):b("Could not create playlist.")},[l,d,i]);return(0,r.useEffect)(()=>{let e=e=>{"Escape"===e.key&&n()};return document.addEventListener("keydown",e),m.current?.focus(),()=>document.removeEventListener("keydown",e)},[n]),(0,t.jsx)("div",{className:"fixed inset-0 z-50 flex items-end justify-center bg-zinc-900/50 p-4 sm:items-center",role:"presentation",onClick:n,children:(0,t.jsxs)("div",{ref:m,role:"dialog","aria-modal":"true","aria-labelledby":c,tabIndex:-1,className:"flex max-h-[min(85vh,32rem)] w-full max-w-md flex-col overflow-hidden rounded-2xl border border-zinc-200 bg-white shadow-xl dark:border-zinc-700 dark:bg-zinc-950",onClick:e=>e.stopPropagation(),children:[(0,t.jsxs)("header",{className:"flex shrink-0 items-start justify-between gap-3 border-b border-zinc-200 px-4 py-3 dark:border-zinc-800",children:[(0,t.jsxs)("div",{className:"min-w-0",children:[(0,t.jsx)("h2",{id:c,className:"truncate text-base font-semibold text-zinc-900 dark:text-zinc-100",children:"Add to playlist"}),(0,t.jsx)("p",{className:"truncate text-sm text-zinc-500",children:a})]}),(0,t.jsx)("button",{type:"button",onClick:n,className:"shrink-0 cursor-pointer rounded-lg px-2 py-1 text-sm font-medium text-zinc-600 transition hover:bg-zinc-100 dark:text-zinc-400 dark:hover:bg-zinc-800",children:"Close"})]}),(0,t.jsxs)("div",{className:"min-h-0 flex-1 overflow-y-auto overscroll-contain px-4 py-4",children:[(0,t.jsxs)("div",{className:"flex flex-col gap-2",children:[(0,t.jsx)("label",{htmlFor:u,className:"text-xs font-medium uppercase tracking-wider text-zinc-500",children:"Create new playlist"}),(0,t.jsxs)("div",{className:"flex items-center gap-2",children:[(0,t.jsx)("input",{id:u,type:"text",value:d,onChange:e=>f(e.target.value),onKeyDown:e=>{"Enter"===e.key&&(e.preventDefault(),k())},placeholder:"My playlist",className:"min-w-0 flex-1 rounded-lg border border-zinc-200 bg-white px-3 py-2 text-sm text-zinc-900 outline-none transition focus:border-accent-400 focus:ring-2 focus:ring-accent-500/20 dark:border-zinc-700 dark:bg-zinc-900 dark:text-zinc-100 dark:focus:border-accent-500/60",autoFocus:!0}),(0,t.jsx)("button",{type:"button",onClick:k,className:"shrink-0 cursor-pointer rounded-lg bg-accent-500 px-3 py-2 text-xs font-semibold text-zinc-950 transition hover:bg-accent-400",children:"Create"})]}),g?(0,t.jsx)("p",{className:"text-xs text-red-600 dark:text-red-400",children:g}):null,p?(0,t.jsx)("p",{className:"text-xs text-zinc-500 dark:text-zinc-400",children:p}):null]}),(0,t.jsxs)("div",{className:"mt-5",children:[(0,t.jsx)("p",{className:"mb-2 text-xs font-medium uppercase tracking-wider text-zinc-500",children:"Existing playlists"}),0===y.length?(0,t.jsx)("p",{className:"px-1 text-xs text-zinc-500",children:"No playlists yet — create one above."}):(0,t.jsx)("ul",{className:"flex flex-col gap-1",children:y.map(e=>(0,t.jsx)("li",{children:(0,t.jsxs)("button",{type:"button",onClick:()=>x(e.id),className:"flex w-full cursor-pointer items-center justify-between gap-3 rounded-lg border border-zinc-200 bg-white px-3 py-2 text-left text-sm transition hover:border-accent-400/60 hover:bg-accent-50/40 dark:border-zinc-800 dark:bg-zinc-900/40 dark:hover:bg-accent-950/30",children:[(0,t.jsxs)("span",{className:"min-w-0 flex-1",children:[(0,t.jsx)("span",{className:"block truncate font-medium text-zinc-900 dark:text-zinc-100",children:e.name}),(0,t.jsxs)("span",{className:"block truncate text-xs text-zinc-500",children:[e.trackIds.length," track",1===e.trackIds.length?"":"s"]})]}),(0,t.jsx)("span",{className:"shrink-0 rounded-full bg-accent-500/15 px-2.5 py-1 text-xs font-medium text-accent-800 ring-1 ring-accent-500/25 dark:text-accent-300 dark:ring-accent-500/40",children:"Add"})]})},e.id))})]})]})]})})}function tF(e){let{progress:r,onDismiss:i}=e;return r?(0,t.jsxs)("div",{role:"status","aria-live":"polite","aria-busy":r.percent<100,className:"pointer-events-auto fixed bottom-4 right-4 z-50 w-[min(100vw-2rem,22rem)] rounded-xl border border-zinc-200/90 bg-white/95 p-4 pr-10 shadow-lg shadow-zinc-900/10 backdrop-blur-sm dark:border-zinc-700/80 dark:bg-zinc-900/95 dark:shadow-black/40",children:[(0,t.jsx)("button",{type:"button",onClick:i,className:"absolute right-2 top-2 flex h-7 w-7 cursor-pointer items-center justify-center rounded-full text-zinc-500 transition hover:bg-zinc-100 hover:text-zinc-800 dark:hover:bg-zinc-800 dark:hover:text-zinc-200","aria-label":"Dismiss notification",children:(0,t.jsx)("svg",{viewBox:"0 0 24 24",className:"h-4 w-4",fill:"none",stroke:"currentColor",strokeWidth:"2","aria-hidden":!0,children:(0,t.jsx)("path",{d:"M6 6l12 12M18 6L6 18",strokeLinecap:"round"})})}),(0,t.jsx)("p",{className:"text-sm font-medium text-zinc-900 dark:text-zinc-100",children:r.percent>=100?"Library scan complete":"Scanning library"}),(0,t.jsx)("p",{className:"mt-1 truncate text-xs text-zinc-600 dark:text-zinc-400",children:r.label}),(0,t.jsx)("div",{role:"progressbar","aria-valuemin":0,"aria-valuemax":100,"aria-valuenow":r.percent,"aria-label":"Library scan progress",className:"mt-3 h-1.5 overflow-hidden rounded-full bg-zinc-200 dark:bg-zinc-800",children:(0,t.jsx)("div",{className:"h-full rounded-full bg-accent-500 transition-[width] duration-200 ease-out dark:bg-accent-400",style:{width:`${r.percent}%`}})}),(0,t.jsxs)("p",{className:"mt-2 text-right text-[11px] tabular-nums text-zinc-500 dark:text-zinc-500",children:[r.percent,"%",r.filesTotal>0?(0,t.jsxs)("span",{className:"text-zinc-400",children:[" ","· ",r.filesDone,"/",r.filesTotal," files"]}):null]})]}):null}e.s(["default",0,tB],41490);var tX=e.i(70096);function t$(e){return(0,t.jsxs)("svg",{viewBox:"0 0 24 24",fill:"currentColor","aria-hidden":!0,className:e.className,children:[(0,t.jsx)("circle",{cx:"5",cy:"12",r:"1.75"}),(0,t.jsx)("circle",{cx:"12",cy:"12",r:"1.75"}),(0,t.jsx)("circle",{cx:"19",cy:"12",r:"1.75"})]})}function tG(e){let[i,a]=(0,r.useState)(!1),n=(0,r.useRef)(null),s=(0,r.useId)(),o=e.triggerLabel??"Track actions";return(0,r.useEffect)(()=>{if(!i)return;let e=e=>{let t=e.target;t instanceof Node&&(n.current?.contains(t)||a(!1))},t=e=>{"Escape"===e.key&&a(!1)};return document.addEventListener("pointerdown",e),document.addEventListener("keydown",t),()=>{document.removeEventListener("pointerdown",e),document.removeEventListener("keydown",t)}},[i]),(0,t.jsxs)("div",{ref:n,className:"relative shrink-0",children:[(0,t.jsx)("button",{type:"button","aria-haspopup":"menu","aria-expanded":i,"aria-controls":s,"aria-label":o,onClick:()=>a(e=>!e),className:"flex h-8 w-8 cursor-pointer items-center justify-center rounded-full text-zinc-500 transition hover:bg-zinc-200/80 hover:text-zinc-800 dark:hover:bg-zinc-800 dark:hover:text-zinc-200",children:(0,t.jsx)(t$,{className:"h-4 w-4"})}),i?(0,t.jsx)("div",{id:s,role:"menu",className:"absolute top-full right-0 z-30 mt-1 min-w-[11rem] overflow-hidden rounded-lg border border-zinc-200 bg-white py-1 shadow-lg dark:border-zinc-700 dark:bg-zinc-900",children:e.items.map(e=>(0,t.jsx)("button",{type:"button",role:"menuitem",disabled:e.disabled,onClick:()=>{e.disabled||(e.onSelect(),a(!1))},className:"block w-full cursor-pointer px-3 py-2 text-left text-xs font-medium text-zinc-800 transition hover:bg-zinc-100 disabled:cursor-not-allowed disabled:opacity-40 dark:text-zinc-200 dark:hover:bg-zinc-800",children:e.label},e.id))}):null]})}function tW(e){let t=Math.max(0,Math.floor(e)),r=Math.floor(t/60);return`${r}:${(t%60).toString().padStart(2,"0")}`}function tq(e){let t=[{id:"details",label:"View details",onSelect:()=>e.onViewDetails(e.track)}];return e.onViewRelatedSongs&&t.push({id:"related",label:"Related songs",onSelect:()=>e.onViewRelatedSongs(e.track)}),e.onAddToPlaylist&&t.push({id:"add-to-playlist",label:"Add to playlist…",onSelect:()=>e.onAddToPlaylist(e.track)}),e.onDownload&&t.push({id:"download",label:"Download",onSelect:()=>e.onDownload(e.track)}),e.onRemoveFromLibrary?t.push({id:"remove",label:"Remove from library",onSelect:e.onRemoveFromLibrary}):e.onSave&&t.push({id:"save",label:e.alreadySaved?"In library":"Add to library",disabled:e.alreadySaved,onSelect:e.onSave}),t}function tY(e){let{openTrackDetails:r,openRelatedSongs:i,downloadTrack:a,removeFromLibrary:n}=rE(),s=e.compact?"px-1.5 py-1.5":"px-2 py-2",o=e.compact?"gap-1.5":"gap-2",l=e.subtitle??`${e.track.artist} \xb7 ${e.track.album}`;return(0,t.jsxs)("div",{className:`flex items-center ${o} rounded-lg ${s} hover:bg-zinc-100 dark:hover:bg-zinc-800/80`,children:[(0,t.jsxs)("div",{className:"min-w-0 flex-1",children:[(0,t.jsx)("p",{className:"truncate text-sm font-medium text-zinc-900 dark:text-zinc-100",children:e.track.title}),(0,t.jsx)("p",{className:"truncate text-xs text-zinc-500",children:l})]}),(0,t.jsx)("span",{className:"shrink-0 text-xs tabular-nums text-zinc-500",children:e.track.durationSec>0?tW(e.track.durationSec):"—"}),(0,t.jsx)(tG,{triggerLabel:`Actions for ${e.track.title}`,items:tq({track:e.track,onViewDetails:r,onViewRelatedSongs:i,onDownload:a,onSave:e.alreadySaved?void 0:()=>e.onSave(e.track),onRemoveFromLibrary:e.alreadySaved?()=>n(e.track):void 0})}),(0,t.jsx)("button",{type:"button",onClick:()=>e.onQueue(e.track),className:"shrink-0 cursor-pointer rounded-full bg-accent-500/15 px-2.5 py-1 text-xs font-medium text-accent-800 ring-1 ring-accent-500/25 transition hover:bg-accent-500/25 dark:text-accent-300 dark:ring-accent-500/40",children:"Add"})]})}e.s(["default",()=>tY],75878),e.s(["default",0,tG],38602),e.s(["formatDuration",0,tW],34713),e.s(["default",0,tq],74061);var tV=e.i(75353);async function tZ(e,t){let r=e.artist.trim(),i=e.track.trim(),a=e.mbid?.trim();if(!a&&(!r||!i))return[];let n=(0,tV.default)();if(!n)throw Error("Add a Last.fm API key in Settings → Last.fm");let s=new URL("/api/lastfm/track-similar",window.location.origin);s.searchParams.set("artist",r),s.searchParams.set("track",i),a&&s.searchParams.set("mbid",a),void 0!==e.limit&&s.searchParams.set("limit",String(e.limit));let o=await fetch(s,{signal:t,headers:{"X-Muzical-Lastfm-Api-Key":n}}),l=await o.json().catch(()=>({}));if(!o.ok)throw console.error("[Last.fm] proxy request failed",{status:o.status,statusText:o.statusText,proxyUrl:s.toString(),body:l}),Error(l.error?.trim()||`Last.fm request failed (${o.status})`);if(Array.isArray(l.tracks))return l.tracks;if("number"==typeof l.error&&l.error>0)throw Error(l.message?.trim()||`Last.fm error ${l.error}`);let c=l.similartracks?.track;if(!c)return[];let u=Array.isArray(c)?c:[c],m=[];for(let e of u){let t=function(e){var t;let r=e.name?.trim(),i="string"==typeof(t=e.artist)?t.trim():t&&"object"==typeof t?(t.name?.trim()||t["#text"]?.trim())??"":"";if(!r||!i)return null;let a=e.mbid?.trim();return{name:r,artistName:i,mbid:a&&a.length>0?a:void 0,match:function(e){if(void 0===e)return;let t=Number.parseFloat(e);return Number.isFinite(t)?t:void 0}(e.match),url:e.url?.trim()||void 0,durationSec:function(e){if(void 0===e)return;let t=Number.parseInt(e,10);return Number.isFinite(t)&&t>0?t:void 0}(e.duration)}}(e);t&&m.push(t)}return m}function tK(e){let t=e.name.trim()||"Unknown title",r=e.artistName.trim()||"Unknown artist",i=e.mbid?.trim();return{id:i&&i.length>0?`musicbrainz:${i}`:`lastfm:${encodeURIComponent(r)}\u0000${encodeURIComponent(t)}`,title:t,artist:r,album:"Unknown album",durationSec:e.durationSec??0,youtubeQuery:`${t} ${r}`.trim(),source:i?"musicbrainz":void 0}}function tH(e){let{seedTrack:i,onClose:a}=e,{libraryTracks:n,addToQueue:s,addToLibrary:o,compactLists:l}=rE(),c=(0,r.useId)(),u=(0,r.useRef)(null),[m,d]=(0,r.useState)(!1),[f,p]=(0,r.useState)(null),[h,g]=(0,r.useState)([]),b=(0,r.useMemo)(()=>new Set(n.map(e=>e.id)),[n]);(0,r.useEffect)(()=>{if(!i)return;if(!(0,tV.default)()){d(!1),p(null),g([]);return}let e=new AbortController;d(!0),p(null),g([]);let t=function(e){let t="musicbrainz:";if(!e.startsWith(t))return null;let r=e.slice(t.length).trim();return r.length>0?r:null}(i.id);return tZ({artist:i.artist,track:i.title,mbid:t??void 0,limit:25},e.signal).then(e=>{g(e.map(tK))}).catch(t=>{e.signal.aborted||p(t instanceof Error?t.message:"Failed to load related songs")}).finally(()=>{e.signal.aborted||d(!1)}),()=>e.abort()},[i]),(0,r.useEffect)(()=>{if(!i)return;let e=e=>{"Escape"===e.key&&a()};return document.addEventListener("keydown",e),()=>document.removeEventListener("keydown",e)},[i,a]);let y=(0,r.useCallback)(()=>{0!==h.length&&s(h)},[s,h]);if(!i)return null;let x=(0,tV.default)().length>0;return(0,t.jsx)("div",{className:"fixed inset-0 z-50 flex items-end justify-center bg-zinc-900/50 p-4 sm:items-center",role:"presentation",onClick:e=>{e.target===e.currentTarget&&a()},children:(0,t.jsxs)("div",{ref:u,role:"dialog","aria-modal":"true","aria-labelledby":c,className:"flex max-h-[min(85vh,36rem)] w-full max-w-lg flex-col overflow-hidden rounded-2xl border border-zinc-200 bg-white shadow-xl dark:border-zinc-700 dark:bg-zinc-950",onClick:e=>e.stopPropagation(),children:[(0,t.jsxs)("div",{className:"flex items-start justify-between gap-3 border-b border-zinc-200 px-4 py-3 dark:border-zinc-800",children:[(0,t.jsxs)("div",{className:"min-w-0",children:[(0,t.jsx)("h2",{id:c,className:"text-base font-semibold text-zinc-900 dark:text-zinc-50",children:"Related songs"}),(0,t.jsxs)("p",{className:"mt-0.5 truncate text-sm text-zinc-600 dark:text-zinc-400",children:[i.title," · ",i.artist]}),(0,t.jsx)("p",{className:"mt-1 text-xs text-zinc-500",children:"Via Last.fm listening similarity"})]}),(0,t.jsx)("button",{type:"button",onClick:a,className:"shrink-0 rounded-full px-2 py-1 text-sm font-medium text-zinc-600 hover:bg-zinc-100 dark:text-zinc-400 dark:hover:bg-zinc-800",children:"Close"})]}),(0,t.jsxs)("div",{className:"min-h-0 flex-1 overflow-y-auto overscroll-contain px-2 py-3",children:[x?null:(0,t.jsxs)("p",{className:"px-2 py-4 text-sm text-zinc-600 dark:text-zinc-400",children:["Add a Last.fm API key in"," ",(0,t.jsx)(tX.default,{href:"/settings/lastfm",className:"font-medium text-accent-700 underline-offset-2 hover:underline dark:text-accent-400",onClick:a,children:"Settings → Last.fm"}),"."]}),m?(0,t.jsx)("p",{className:"px-2 py-6 text-center text-sm text-zinc-500",children:"Loading related songs…"}):null,f?(0,t.jsx)("p",{className:"px-2 py-4 text-sm text-red-600 dark:text-red-400",children:f}):null,m||f||!x||0!==h.length?null:(0,t.jsx)("p",{className:"px-2 py-6 text-center text-sm text-zinc-500",children:"No similar tracks found."}),!m&&h.length>0?(0,t.jsx)("ul",{className:"space-y-0.5",children:h.map(e=>(0,t.jsx)("li",{children:(0,t.jsx)(tY,{track:e,compact:l,alreadySaved:b.has(e.id)||e9(e),onQueue:s,onSave:o})},e.id))}):null]}),h.length>0?(0,t.jsx)("div",{className:"border-t border-zinc-200 px-4 py-3 dark:border-zinc-800",children:(0,t.jsxs)("button",{type:"button",onClick:y,className:"w-full rounded-full bg-accent-500 px-4 py-2 text-sm font-medium text-zinc-950 transition hover:bg-accent-400",children:["Add all to queue (",h.length,")"]})}):null]})})}let tQ="mt-1 block w-full rounded-lg border border-zinc-300 bg-white px-3 py-2 text-sm text-zinc-900 outline-none ring-accent-500/0 transition focus:border-accent-400 focus:ring-2 focus:ring-accent-500/20 dark:border-zinc-600 dark:bg-zinc-900 dark:text-zinc-100";function tJ(e){return{title:e.title,artist:e.artist,album:e.album}}function t0(e){let{track:i,canWriteToFile:a,saving:n,saveError:s,onSave:o}=e,[l,c]=(0,r.useState)(()=>tJ(i)),[u,m]=(0,r.useState)(()=>tJ(i));(0,r.useEffect)(()=>{let e=tJ(i);c(e),m(e)},[i.id,i.title,i.artist,i.album]);let d=l.title!==u.title||l.artist!==u.artist||l.album!==u.album,f=d&&""!==l.title.trim()&&""!==l.artist.trim(),p=(0,r.useCallback)(()=>{c(u)},[u]),h=(0,r.useCallback)(async e=>{if(e.preventDefault(),!f||n)return;let t=ts(i,l),r={title:t.title,artist:t.artist,album:t.album};await o(r),m(r),c(r)},[f,l,o,n,i]);return(0,t.jsxs)("form",{onSubmit:h,className:"space-y-3",children:[(0,t.jsx)("h3",{className:"text-xs font-medium uppercase tracking-wider text-zinc-500",children:"Metadata"}),(0,t.jsxs)("label",{className:"block",children:[(0,t.jsx)("span",{className:"text-xs font-medium text-zinc-500",children:"Title"}),(0,t.jsx)("input",{type:"text",value:l.title,onChange:e=>c(t=>({...t,title:e.target.value})),className:tQ,autoComplete:"off",required:!0})]}),(0,t.jsxs)("label",{className:"block",children:[(0,t.jsx)("span",{className:"text-xs font-medium text-zinc-500",children:"Artist"}),(0,t.jsx)("input",{type:"text",value:l.artist,onChange:e=>c(t=>({...t,artist:e.target.value})),className:tQ,autoComplete:"off",required:!0})]}),(0,t.jsxs)("label",{className:"block",children:[(0,t.jsx)("span",{className:"text-xs font-medium text-zinc-500",children:"Album"}),(0,t.jsx)("input",{type:"text",value:l.album,onChange:e=>c(t=>({...t,album:e.target.value})),className:tQ,autoComplete:"off"})]}),a?(0,t.jsx)("p",{className:"text-xs text-zinc-500",children:"Saving also writes ID3 tags to MP3 files when the library folder allows write access."}):null,i.youtubeQuery?.trim()?(0,t.jsx)("p",{className:"text-xs text-zinc-500",children:"Saving updates the YouTube search query and clears any resolved video id for this track."}):null,s?(0,t.jsx)("p",{className:"text-xs text-red-600 dark:text-red-400",role:"alert",children:s}):null,(0,t.jsxs)("div",{className:"flex flex-wrap gap-2 pt-1",children:[(0,t.jsx)("button",{type:"submit",disabled:!f||n,className:"rounded-full bg-accent-500 px-4 py-2 text-sm font-medium text-zinc-950 transition hover:bg-accent-400 disabled:cursor-not-allowed disabled:opacity-50",children:n?"Saving…":"Save"}),(0,t.jsx)("button",{type:"button",disabled:!d||n,onClick:p,className:"rounded-full border border-zinc-300 bg-white px-4 py-2 text-sm font-medium text-zinc-800 transition hover:bg-zinc-50 disabled:cursor-not-allowed disabled:opacity-50 dark:border-zinc-600 dark:bg-zinc-800 dark:text-zinc-200 dark:hover:bg-zinc-700",children:"Revert"})]})]})}function t1(e){if(!Number.isFinite(e)||e<0)return"—";if(e<1024)return`${e} B`;let t=["KB","MB","GB","TB"],r=e/1024,i=0;for(;r>=1024&&i<t.length-1;)r/=1024,i+=1;return`${r<10?r.toFixed(1):Math.round(r).toString()} ${t[i]}`}function t2(e,t,r,i=!1){if(null==r)return;let a="number"==typeof r?String(r):r.trim();a&&e.push({label:t,value:a,mono:i})}async function t4(e){let t=[];t2(t,"File name",e.name,!0),t2(t,"MIME type",e.type||"—"),t.push({label:"File size",value:t1(e.size)}),t.push({label:"Last modified",value:new Date(e.lastModified).toLocaleString()});try{let{format:r,common:i}=await eJ(e,{duration:!0});r.container&&t2(t,"Container",r.container),r.codec&&t2(t,"Codec",r.codec),"number"==typeof r.bitrate&&r.bitrate>0&&t2(t,"Bitrate",`${Math.round(r.bitrate/1e3)} kbps`),"number"==typeof r.sampleRate&&r.sampleRate>0&&t2(t,"Sample rate",`${r.sampleRate} Hz`),"number"==typeof r.numberOfChannels&&t2(t,"Channels",r.numberOfChannels),"number"==typeof r.bitsPerSample&&r.bitsPerSample>0&&t2(t,"Bits per sample",r.bitsPerSample),t2(t,"Tag title",i.title),t2(t,"Tag artist",i.artist??i.artists?.join(", ")),t2(t,"Tag album artist",i.albumartist??i.albumartists?.join(", ")),t2(t,"Tag album",i.album),"number"==typeof i.year&&t2(t,"Tag year",i.year),i.genre?.length&&t2(t,"Tag genre",i.genre.join(", ")),"number"==typeof i.track?.no&&t2(t,"Tag track #",i.track.no),"number"==typeof i.disk?.no&&t2(t,"Tag disc #",i.disk.no),t2(t,"Tag composer",Array.isArray(i.composer)?i.composer.join(", "):i.composer),t2(t,"Tag comment",i.comment?.join(" · "))}catch{t2(t,"Embedded tags","Could not read metadata from this file")}return t}function t3(e,t,r,i=!1){let a=r?.trim();a&&e.push({label:t,value:a,mono:i})}function t5(e){return 0===e.rows.length?null:(0,t.jsxs)("section",{children:[(0,t.jsx)("h3",{className:"text-xs font-medium uppercase tracking-wider text-zinc-500",children:e.title}),(0,t.jsx)("dl",{className:"mt-2 divide-y divide-zinc-100 rounded-lg border border-zinc-200 dark:divide-zinc-800 dark:border-zinc-800",children:e.rows.map(r=>(0,t.jsxs)("div",{className:"grid gap-0.5 px-3 py-2 sm:grid-cols-[7rem_1fr] sm:gap-3",children:[(0,t.jsx)("dt",{className:"text-xs font-medium text-zinc-500",children:r.label}),(0,t.jsx)("dd",{className:["text-sm break-words text-zinc-900 dark:text-zinc-100",r.mono?"font-mono text-xs":""].join(" "),children:r.value})]},`${e.title}-${r.label}`))})]})}function t8(e){let{track:i,onClose:a}=e,{roots:n,resolveFileForTrack:s,saveTrackMetadata:o}=rE(),l=(0,r.useId)(),c=(0,r.useRef)(null),[u,m]=(0,r.useState)([]),[d,f]=(0,r.useState)(!1),[p,h]=(0,r.useState)(null),[g,b]=(0,r.useState)(!1),[y,x]=(0,r.useState)(null),k=(0,r.useMemo)(()=>{var e;let t;return i?(e={omitEditableTags:!0},t=[],e?.omitEditableTags||(t3(t,"Title",i.title),t3(t,"Artist",i.artist),t3(t,"Album",i.album)),i.durationSec>0&&t.push({label:"Duration",value:tW(i.durationSec)}),t3(t,"Source",i.library?"Local library file":"youtube"===i.source||i.id.startsWith("youtube:")?"YouTube":"musicbrainz"===i.source||i.id.startsWith("musicbrainz:")?"MusicBrainz":i.youtubeVideoId?.trim()?"YouTube":i.youtubeQuery?.trim()?"YouTube (search)":"library"===i.source?"Local library":"Unknown"),t3(t,"Track ID",i.id,!0),i.library&&(t3(t,"Library folder",n.find(e=>e.id===i.library?.rootId)?.name??i.library.rootId),t3(t,"Relative path",i.library.relativePath,!0),"number"==typeof i.library.fileSize&&Number.isFinite(i.library.fileSize)&&t.push({label:"File size (at scan)",value:t1(i.library.fileSize)}),"number"==typeof i.library.fileLastModified&&Number.isFinite(i.library.fileLastModified)&&t.push({label:"Modified (at scan)",value:new Date(i.library.fileLastModified).toLocaleString()})),t3(t,"YouTube query",i.youtubeQuery,!0),t3(t,"YouTube video ID",i.youtubeVideoId,!0),t):[]},[i,n]),T=(0,r.useCallback)(async e=>{if(!i)return;b(!0),x(null);let t=await o(i.id,e);(b(!1),t.ok)?i.library&&s(i).then(async e=>{e&&m(await t4(e))}):x(t.reason)},[s,o,i]);return((0,r.useEffect)(()=>{if(!i?.library)return;let e=!1,t=requestAnimationFrame(()=>{e||(f(!0),h(null),m([]))});return s(i).then(async t=>{if(e)return;if(!t)return void h("Could not open the file. Try rescanning the library folder.");let r=await t4(t);e||m(r)}).catch(()=>{e||h("Failed to read file metadata.")}).finally(()=>{e||f(!1)}),()=>{e=!0,cancelAnimationFrame(t)}},[i,s]),(0,r.useEffect)(()=>{if(i?.library)return;let e=requestAnimationFrame(()=>{m([]),f(!1),h(null)});return()=>cancelAnimationFrame(e)},[i?.library,i?.id]),(0,r.useEffect)(()=>{if(!i)return;let e=e=>{"Escape"===e.key&&a()};return document.addEventListener("keydown",e),c.current?.focus(),()=>document.removeEventListener("keydown",e)},[i,a]),i)?(0,t.jsx)("div",{className:"fixed inset-0 z-50 flex items-end justify-center bg-zinc-900/50 p-4 sm:items-center",role:"presentation",onClick:a,children:(0,t.jsxs)("div",{ref:c,role:"dialog","aria-modal":"true","aria-labelledby":l,tabIndex:-1,className:"flex max-h-[min(85vh,40rem)] w-full max-w-lg flex-col overflow-hidden rounded-2xl border border-zinc-200 bg-white shadow-xl dark:border-zinc-700 dark:bg-zinc-950",onClick:e=>e.stopPropagation(),children:[(0,t.jsxs)("header",{className:"flex shrink-0 items-start justify-between gap-3 border-b border-zinc-200 px-4 py-3 dark:border-zinc-800",children:[(0,t.jsxs)("div",{className:"min-w-0",children:[(0,t.jsx)("h2",{id:l,className:"truncate text-base font-semibold text-zinc-900 dark:text-zinc-100",children:i.title}),(0,t.jsxs)("p",{className:"truncate text-sm text-zinc-500",children:[i.artist," · ",i.album]})]}),(0,t.jsx)("button",{type:"button",onClick:a,className:"shrink-0 cursor-pointer rounded-lg px-2 py-1 text-sm font-medium text-zinc-600 transition hover:bg-zinc-100 dark:text-zinc-400 dark:hover:bg-zinc-800",children:"Close"})]}),(0,t.jsxs)("div",{className:"min-h-0 flex-1 space-y-5 overflow-y-auto overscroll-contain px-4 py-4",children:[(0,t.jsx)(t0,{track:i,canWriteToFile:!!i.library,saving:g,saveError:y,onSave:T}),(0,t.jsx)(t5,{title:"Details",rows:k}),i.library?(0,t.jsxs)("section",{children:[(0,t.jsx)("h3",{className:"text-xs font-medium uppercase tracking-wider text-zinc-500",children:"File & embedded metadata"}),d?(0,t.jsx)("p",{className:"mt-2 text-sm text-zinc-500",children:"Reading file…"}):null,p?(0,t.jsx)("p",{className:"mt-2 text-sm text-red-600 dark:text-red-400",role:"alert",children:p}):null,d||p||!(u.length>0)?null:(0,t.jsx)("dl",{className:"mt-2 divide-y divide-zinc-100 rounded-lg border border-zinc-200 dark:divide-zinc-800 dark:border-zinc-800",children:u.map(e=>(0,t.jsxs)("div",{className:"grid gap-0.5 px-3 py-2 sm:grid-cols-[7rem_1fr] sm:gap-3",children:[(0,t.jsx)("dt",{className:"text-xs font-medium text-zinc-500",children:e.label}),(0,t.jsx)("dd",{className:["text-sm text-zinc-900 break-words dark:text-zinc-100",e.mono?"font-mono text-xs":""].join(" "),children:e.value})]},`file-${e.label}`))})]}):null]})]})}):null}function t6(){return{maxScanDepth:0,followSymlinks:!1,enabledExtensions:[...c]}}e.s(["default",0,t6],81193);let t7="muzical.libraryScanPreferences",t9=new Set(c);function re(){let e=t6();try{let t=window.localStorage.getItem(t7);if(!t)return e;let r=JSON.parse(t);if(!r||"object"!=typeof r)return e;let i="number"==typeof r.maxScanDepth&&Number.isFinite(r.maxScanDepth)&&r.maxScanDepth>=0?Math.floor(r.maxScanDepth):e.maxScanDepth,a=!0===r.followSymlinks,n=e.enabledExtensions;if(Array.isArray(r.enabledExtensions)){let e=r.enabledExtensions.filter(e=>"string"==typeof e&&t9.has(e.toLowerCase()));e.length>0&&(n=[...new Set(e.map(e=>e.toLowerCase()))])}return{maxScanDepth:i,followSymlinks:a,enabledExtensions:n}}catch{return e}}let rt="muzical.playlists";function rr(e){return e.trim().replace(/\s+/g," ").slice(0,80)}let ri="muzical.listeningStats.v1";function ra(e){return"number"==typeof e&&Number.isFinite(e)&&e>0?e:0}function rn(e){if("number"==typeof e&&Number.isFinite(e)&&!(e<=0))return e}let rs="muzical.playbackSnapshot";function ro(e){try{window.localStorage.setItem(rs,JSON.stringify(e))}catch{}}function rl(){return{trackIds:[],tracks:[],activeTrackId:null,positionSec:0}}function rc(e){let t=new Set,r=[];for(let i of e){let e=i.youtubeQuery?.trim();!(!e||i.youtubeVideoId?.trim())&&(t.has(i.id)||(t.add(i.id),r.push({trackId:i.id,query:e})))}return r}async function ru(e,t,r={}){if(0===e.length||(0,tc.default)())return;let i="number"==typeof r.maxConcurrent&&r.maxConcurrent>0?Math.floor(r.maxConcurrent):2,a=r.signal,n=0,s=async()=>{for(;n<e.length;){if(a?.aborted)return;let r=n;n+=1;let i=e[r];if((0,tc.default)())return;let s=null;try{s=await ty(i.query,a)}catch{continue}!(a?.aborted||(0,tc.default)())&&s&&t(i.trackId,s)}},o=Array.from({length:Math.min(i,e.length)},()=>s());await Promise.all(o)}e.s(["default",0,rc],71569),e.s(["default",0,ru],45461);var rm=e.i(40911);let rd=(0,r.createContext)(null),rf="muzical.recentlyPlayedTrackIds",rp="muzical.compactLists",rh="muzical.autoRescanOnStartup",rg="muzical.logLibraryScanTiming",rb="muzical.rememberLastQueue";function ry(e){return Array.isArray(e)?[...e]:[e]}function rx(e){try{let t=window.localStorage.getItem(e);if(!t)return!1;let r=JSON.parse(t);return!0===r}catch{return!1}}function rk(e,t){try{let r=window.localStorage.getItem(e);if(null===r)return t;let i=JSON.parse(r);return!0===i}catch{return t}}function rT(e,t){try{window.localStorage.setItem(e,JSON.stringify(t))}catch{}}function rw(e,t){let r=new Set(e);return r.has(t)?r.delete(t):r.add(t),[...r].sort((e,t)=>e.localeCompare(t,void 0,{sensitivity:"base"}))}let rS="Use Rescan all in Settings → Library, or remove and add the folders again so the browser can access your music.";async function rI(e){if(0===e.size)return!1;let t={mode:"read"};for(let r of e.values())try{let e=await r.queryPermission?.(t);if("granted"!==e)return!1}catch{return!1}return!0}async function rv(e,t){let r={mode:"read"};for(let i of e.values())try{let e=await i.queryPermission?.(r);if("granted"===e||!t)continue;await i.requestPermission?.(r)}catch{}}function rA(e){let{preferences:c}=(0,rm.useYoutubePreferences)(),h=(0,r.useRef)(null),g=(0,r.useRef)(!1),b=(0,r.useRef)(new Map),y=(0,r.useRef)([]),x=(0,r.useRef)([]),k=(0,r.useRef)(null),T=(0,r.useRef)(null),w=(0,r.useRef)(!1),S=(0,r.useRef)(!1),I=(0,r.useRef)(re()),v=(0,r.useRef)(!1),A=(0,r.useRef)(!1),E=(0,r.useRef)(!1),C=(0,r.useRef)({activeQueueId:null,positionSec:0}),z=(0,r.useRef)(null),_=(0,r.useRef)(!1),[N,M]=(0,r.useState)([]),[R,L]=(0,r.useState)([]),[P,D]=(0,r.useState)([]),[O,U]=(0,r.useState)([]),[B,j]=(0,r.useState)([]),[F,X]=(0,r.useState)([]),[$,G]=(0,r.useState)([]),[W,q]=(0,r.useState)({}),[Y,V]=(0,r.useState)([]),[Z,K]=(0,r.useState)(!1),[H,Q]=(0,r.useState)(!0),[J,ee]=(0,r.useState)(!1),[et,er]=(0,r.useState)(re),[ei,ea]=(0,r.useState)(!1),[en,es]=(0,r.useState)(null),[eo,el]=(0,r.useState)(null),[ec,eu]=(0,r.useState)(!1),[em,ed]=(0,r.useState)(!1),[ef,ep]=(0,r.useState)(!1),[eh,eg]=(0,r.useState)(null),[eb,ey]=(0,r.useState)(null),[ex,ek]=(0,r.useState)(!1),[eT,ew]=(0,r.useState)(null),[eS,eI]=(0,r.useState)(null),[ev,eA]=(0,r.useState)(!1),[eE,eC]=(0,r.useState)(0),ez=(0,r.useRef)(0),[e_,eN]=(0,r.useState)([]),eM=(0,r.useRef)(!1),[eR,eL]=(0,r.useState)(null),eP=(0,r.useCallback)(e=>{let t=Math.max(0,Math.floor(e));0!==t&&(ez.current+=t,eC(ez.current),eA(!0))},[]),eD=(0,r.useCallback)(e=>{let t=Math.max(0,Math.floor(e));ez.current=Math.max(0,ez.current-t),eC(ez.current),0===ez.current&&eA(!1)},[]);(0,r.useEffect)(()=>{Promise.resolve().then(()=>{ek("showDirectoryPicker"in window)})},[]),(0,r.useEffect)(()=>{Promise.resolve().then(()=>{G((function(e){try{let t=window.localStorage.getItem(e);if(!t)return[];let r=JSON.parse(t);if(!Array.isArray(r))return[];return r.filter(e=>"string"==typeof e)}catch{return[]}})(rf).slice(0,24))})},[]),(0,r.useEffect)(()=>{Promise.resolve().then(()=>{q(function(){try{let e=window.localStorage.getItem(ri);if(!e)return{};let t=JSON.parse(e);if(!t||"object"!=typeof t||Array.isArray(t))return{};let r={};for(let[e,i]of Object.entries(t)){let t=e&&"object"==typeof i&&null!==i?{trackId:e,playCount:Math.floor(ra(i.playCount)),completedCount:Math.floor(ra(i.completedCount)),skipCount:Math.floor(ra(i.skipCount)),totalListenSec:ra(i.totalListenSec),firstPlayedAt:rn(i.firstPlayedAt),lastPlayedAt:rn(i.lastPlayedAt),lastCompletedAt:rn(i.lastCompletedAt),lastSkippedAt:rn(i.lastSkippedAt)}:null;t&&(0!==t.playCount||0!==t.completedCount||0!==t.skipCount||0!==t.totalListenSec)&&(r[e]=t)}return r}catch{return{}}}()),_.current=!0})},[]),(0,r.useEffect)(()=>{queueMicrotask(()=>{V((function(){try{let e=window.localStorage.getItem(a);if(!e)return[];let t=JSON.parse(e);if(!Array.isArray(t))return[];let r=[];for(let e of t){let t=function(e){var t;if("object"!=typeof e||null===e||"library"!==(t=e.source)&&"musicbrainz"!==t&&"youtube"!==t||"string"!=typeof e.query)return null;let r=e.query.trim();return r?{source:e.source,query:r}:null}(e);t&&r.push(t)}return r}catch{return[]}})().slice(0,12)),S.current=!0})},[]),(0,r.useEffect)(()=>{Promise.resolve().then(()=>{K(rx(rp))})},[]),(0,r.useEffect)(()=>{Promise.resolve().then(()=>{Q(rk(rh,!0))})},[]),(0,r.useEffect)(()=>{Promise.resolve().then(()=>{let e=rx(rg);ee(e),v.current=e})},[]),(0,r.useEffect)(()=>{Promise.resolve().then(()=>{let e=re();I.current=e,er(e)})},[]),(0,r.useEffect)(()=>{Promise.resolve().then(()=>{let e=rx(rb);A.current=e,ea(e)})},[]),(0,r.useEffect)(()=>{var e=$.slice(0,24);try{window.localStorage.setItem(rf,JSON.stringify(e))}catch{}},[$]),(0,r.useEffect)(()=>{if(_.current)try{window.localStorage.setItem(ri,JSON.stringify(W))}catch{}},[W]),(0,r.useEffect)(()=>{S.current&&n(Y.slice(0,12))},[Y]),(0,r.useEffect)(()=>{queueMicrotask(()=>{eN(function(){try{let e=window.localStorage.getItem(rt);if(!e)return[];return function(e){if(!Array.isArray(e))return[];let t=[];for(let i of e){var r;if(!i||"object"!=typeof i)continue;let e="string"==typeof i.id?i.id:null,a="string"==typeof i.name?rr(i.name):"",n=Array.isArray(r=i.trackIds)&&r.every(e=>"string"==typeof e)?i.trackIds:null,s="number"==typeof i.createdAt?i.createdAt:Date.now(),o="number"==typeof i.updatedAt?i.updatedAt:s;e&&a&&n&&t.push({id:e,name:a,trackIds:[...n],createdAt:s,updatedAt:o})}return t}(JSON.parse(e))}catch{return[]}}()),eM.current=!0})},[]),(0,r.useEffect)(()=>{if(eM.current)try{let e=e_.slice(0,200);window.localStorage.setItem(rt,JSON.stringify(e))}catch{}},[e_]),(0,r.useEffect)(()=>{x.current=B},[B]),(0,r.useEffect)(()=>()=>{k.current&&(clearTimeout(k.current),k.current=null),T.current&&(clearTimeout(T.current),T.current=null),z.current&&(clearTimeout(z.current),z.current=null)},[]);let eO=(0,r.useCallback)(()=>{if(!A.current)return;if(z.current&&(clearTimeout(z.current),z.current=null),0===F.length)return void ro(rl());let e=C.current.activeQueueId,t=e?F.find(t=>t.queueId===e):F[0];ro({trackIds:F.map(e=>e.track.id),tracks:F.map(e=>e.track),activeTrackId:t?.track.id??null,positionSec:C.current.positionSec})},[F]),eU=(0,r.useCallback)(()=>{!A.current||E.current&&(z.current&&clearTimeout(z.current),z.current=setTimeout(()=>{z.current=null,eO()},400))},[eO]),eB=(0,r.useCallback)(e=>{if(!E.current){if(E.current=!0,A.current){let t=function(){try{let e,t=window.localStorage.getItem(rs);if(!t)return null;let r=JSON.parse(t);if(!r||"object"!=typeof r||!Array.isArray(r.trackIds))return null;let i=r.trackIds.filter(e=>"string"==typeof e&&e.length>0);if(Array.isArray(r.tracks)){let t=[];for(let e of r.tracks){let r=tO(e);r&&t.push(r)}t.length>0&&(e=t)}let a="string"==typeof r.activeTrackId?r.activeTrackId:null,n="number"==typeof r.positionSec&&Number.isFinite(r.positionSec)&&r.positionSec>=0?r.positionSec:0;return{trackIds:i,tracks:e,activeTrackId:a,positionSec:n}}catch{return null}}();if(t&&t.trackIds.length>0){let r=function(e,t){let r=new Map;for(let t of e)r.set(t.id,t);let i=[];if(t.tracks&&t.tracks.length>0)for(let e of t.tracks)i.push(r.get(e.id)??e);else for(let e of t.trackIds){let t=r.get(e);t&&i.push(t)}let a=i.map(e=>({queueId:crypto.randomUUID(),track:e})),n=null;if(t.activeTrackId){let e=a.find(e=>e.track.id===t.activeTrackId);n=e?.queueId??a[0]?.queueId??null}else n=a[0]?.queueId??null;return{queue:a,activeQueueId:n,positionSec:t.positionSec}}(e,t);if(r.queue.length>0){let e=!1;X(t=>t.length>0?t:(e=!0,r.queue)),e&&(C.current={activeQueueId:r.activeQueueId,positionSec:r.positionSec},es({activeQueueId:r.activeQueueId,positionSec:r.positionSec}))}}}ed(!0)}},[]);(0,r.useEffect)(()=>{if(!E.current)return;let e=new Map(B.map(e=>[e.id,e]));X(t=>t.map(t=>{let r=e.get(t.track.id);return r?{...t,track:r}:t}))},[B]),(0,r.useEffect)(()=>{eU()},[F,eU]),(0,r.useEffect)(()=>{!ec||E.current||eB(B)},[ec,B,eB]),(0,r.useEffect)(()=>{let e=()=>{eO()};return window.addEventListener("pagehide",e),()=>{window.removeEventListener("pagehide",e)}},[eO]);let ej=(0,r.useCallback)(()=>{k.current&&(clearTimeout(k.current),k.current=null);let e=h.current;e&&d(e,y.current.map(e=>e.id),x.current).catch(()=>{})},[]),eF=(0,r.useCallback)(()=>{k.current&&clearTimeout(k.current),k.current=setTimeout(()=>{k.current=null,ej()},450)},[ej]);(0,r.useEffect)(()=>{let e=()=>{ej()};return window.addEventListener("pagehide",e),()=>{window.removeEventListener("pagehide",e)}},[ej]);let eX=(0,r.useCallback)(()=>{T.current&&(clearTimeout(T.current),T.current=null)},[]),e$=(0,r.useCallback)(()=>{eX(),T.current=setTimeout(()=>{T.current=null,eg(null)},4e3)},[eX]),eG=(0,r.useCallback)(()=>{eX(),eg(null)},[eX]),eW=(0,r.useCallback)(e=>{eg({percent:function(e){if(e.rootCount<=0)return 0;let t=100/e.rootCount,r=e.rootIndex*t;if("walk"===e.phase)r+=.12*t;else{let i=e.filesTotal??0,a=e.filesDone??0;r+=t*(.12+.88*(i>0?Math.min(1,a/i):0))}return Math.min(100,Math.round(r))}(e),label:function(e){let t=e.rootCount>1?`[${e.rootIndex+1}/${e.rootCount}] `:"";if("walk"===e.phase)return`${t}Listing files in ${e.rootName}…`;let r=e.filesTotal??0,i=e.filesDone??0,a=e.filesSkipped??0;return r>0?a>0?`${t}Reading tags (${i}/${r}, ${a} unchanged) \xb7 ${e.rootName}`:`${t}Reading tags (${i}/${r}) \xb7 ${e.rootName}`:`${t}Reading tags \xb7 ${e.rootName}`}(e),rootName:e.rootName,filesDone:e.filesDone??0,filesTotal:e.filesTotal??0})},[]),eq=(0,r.useCallback)(async e=>{if(g.current)return null;g.current=!0;let t=y.current,r=b.current;eX(),ep(!0),ey(null),eg({percent:0,label:"Starting library scan…",rootName:null,filesDone:0,filesTotal:0});try{var i;t.length>0&&await rv(r,e);let a={maxScanDepth:(i=I.current).maxScanDepth,followSymlinks:i.followSymlinks,enabledExtensions:new Set(i.enabledExtensions)},n=await e7(t,r,a,x.current,v.current,eW);return eg({percent:100,label:n.tracks.length>0?`Found ${n.tracks.length} track${1===n.tracks.length?"":"s"}`:"Scan complete",rootName:null,filesDone:n.tracks.length,filesTotal:n.tracks.length}),e$(),n}catch(e){return eg(null),ey(e instanceof Error?e.message:"Scan failed"),null}finally{g.current=!1,ep(!1)}},[eW,eX,e$]),eY=(0,r.useCallback)(async(e=!1)=>{let t=await eq(e);if(!t)return;let r=y.current,{tracks:i,failedRootCount:a,firstError:n}=t,s=tP(i,x.current);j(s);let o=h.current;if(o)try{await d(o,r.map(e=>e.id),s)}catch{}e&&a>0&&0===i.length&&r.length>0&&ey(n?`${n} ${rS}`:rS)},[eq]),eV=(0,r.useCallback)((e,t)=>{if(!Number.isFinite(t)||t<=0)return;let r=r=>r.id===e&&r.durationSec<=0?{...r,durationSec:t}:r;j(e=>e.map(r)),X(e=>e.map(e=>({...e,track:r(e.track)}))),eF()},[eF]),eZ=(0,r.useCallback)((e,t)=>{let r=e.trim();if(!r)return;let i=e=>e.id===r?t(e):e;j(e=>e.map(i)),X(e=>e.map(e=>({...e,track:i(e.track)}))),ew(e=>e?.id===r?t(e):e),eF()},[eF]),eK=(0,r.useCallback)(async(e,t)=>{let r=e.trim();if(!r)return{ok:!1,reason:"Invalid track."};let i=x.current.find(e=>e.id===r);if(!i)return{ok:!1,reason:"Track not found."};let a=ts(i,t);return(eZ(r,()=>a),a.library)?tR(a,{title:a.title,artist:a.artist,album:a.album},b.current,!0):{ok:!0}},[eZ]),eH=(0,r.useCallback)(async e=>tL(e,b.current,!0),[]),eQ=(0,r.useCallback)((e,t)=>{let r=e.trim();if(!r)return null;let i=t.artist.trim();if(!i)return null;let a=t.album.trim(),n=e=>tt(e.album,e.artist)===r,s=tr(x.current,r);if(0===s.length)return null;let o=tt(a||s[0].album,i),l=e=>n(e)?ta(e,{artist:i,album:a}):e;return j(e=>e.map(l)),X(e=>e.map(e=>({...e,track:l(e.track)}))),ew(e=>e&&n(e)?l(e):e),D(e=>{if(!e.includes(r))return e;let t=e.filter(e=>e!==r);return t.includes(o)?t:[...t,o]}),eF(),o},[eF]),eJ=(0,r.useCallback)((e,t)=>{let r=e.trim(),i=t.artist.trim();if(!r||!i)return null;let a=e=>te(e.artist)===r;if(0===ti(x.current,r).length)return null;let n=e=>a(e)?tn(e,{artist:i}):e;return j(e=>e.map(n)),X(e=>e.map(e=>({...e,track:n(e.track)}))),ew(e=>e&&a(e)?n(e):e),L(e=>{if(!e.includes(r))return e;let t=e.filter(e=>e!==r);return t.includes(i)?t:[...t,i]}),D(e=>{let t=!1,a=e.map(e=>{let a=e.split("\0"),n=a[0]??"";return te(a[1]??"")!==r?e:(t=!0,tt(n,i))});return t?[...new Set(a)]:e}),eF(),i},[eF]);(0,r.useEffect)(()=>{if(!c.prefetchQueueVideoIds||(0,tc.default)())return;let e=c.prefetchQueueMaxTracks,t=rc(F.map(e=>e.track)).slice(0,e);if(0===t.length)return;let r=new AbortController,i=t.length;return eP(i),ru(t,(e,t)=>{eZ(e,e=>({...e,youtubeVideoId:t}))},{signal:r.signal}).finally(()=>{eD(i)}),()=>{r.abort()}},[F,eZ,c.prefetchQueueVideoIds,c.prefetchQueueMaxTracks,eP,eD]);let e0=(0,r.useCallback)(e=>{let t=(Array.isArray(e)?e:[e]).map(e=>({queueId:crypto.randomUUID(),track:e}));X(e=>[...e,...t])},[]),e1=(0,r.useCallback)(e=>{let t=Array.isArray(e)?[...e]:[e];if(0===t.length)return;let r=t.map(e=>({queueId:crypto.randomUUID(),track:e})),i=r[0].queueId;C.current={activeQueueId:i,positionSec:0},X(r),el({activeQueueId:i}),A.current&&(z.current&&(clearTimeout(z.current),z.current=null),ro({trackIds:t.map(e=>e.id),tracks:t,activeTrackId:t[0].id,positionSec:0}))},[]),e2=(0,r.useCallback)(()=>{el(null)},[]),e4=(0,r.useCallback)(e=>{let t=(Array.isArray(e)?e:[e]).map(tD);0!==t.length&&(j(e=>{let r=new Map(e.map(e=>[e.id,e])),i=!1;for(let e of t){let t=r.get(e.id);if(t){r.set(e.id,{...t,...e,youtubeVideoId:e.youtubeVideoId??t.youtubeVideoId}),i=!0;continue}r.set(e.id,e),i=!0}return i?[...r.values()]:e}),eF())},[eF]),e3=(0,r.useCallback)(e=>{let t=new Set((Array.isArray(e)?e:[e]).map(e=>e.id).filter(Boolean));0!==t.size&&(j(e=>e.filter(e=>!t.has(e.id))),M(e=>e.filter(e=>!t.has(e))),X(e=>e.filter(e=>!t.has(e.track.id))),eF())},[eF]),e5=(0,r.useCallback)(e=>{let t=e.trim();if(!t)return;let r=tr(x.current,t);0!==r.length&&(D(e=>e.filter(e=>e!==t)),e3(r))},[e3]),e8=(0,r.useCallback)(e=>{let t=e.trim();if(!t)return;let r=ti(x.current,t);0!==r.length&&(L(e=>e.filter(e=>e!==t)),e3(r))},[e3]),e6=(0,r.useCallback)(()=>{let e=x.current,t=new Set(e.filter(e9).map(e=>e.id));0!==t.size&&(j(e.filter(e=>!e9(e))),M(e=>e.filter(e=>!t.has(e))),X(e=>e.filter(e=>!t.has(e.track.id))),eF())},[eF]),to=(0,r.useCallback)(e=>{X(t=>t.filter(t=>t.queueId!==e))},[]),tl=(0,r.useCallback)(()=>{C.current={activeQueueId:null,positionSec:0},X([]),A.current&&(z.current&&(clearTimeout(z.current),z.current=null),ro(rl()))},[]),tu=(0,r.useCallback)((e,t)=>{if(!Number.isFinite(e)||!Number.isFinite(t))return;let r=Math.trunc(e),i=Math.trunc(t);X(e=>{if(r<0||i<0||r>=e.length||i>=e.length||r===i)return e;let t=[...e],[a]=t.splice(r,1);return t.splice(i,0,a),t})},[]),tm=(0,r.useCallback)(e=>{let t=e.trim();t&&G(e=>[t,...e.filter(e=>e!==t)].slice(0,24))},[]),td=(0,r.useCallback)(e=>{let t=e.trim();if(!t)return;let r=Date.now();tm(t),q(e=>{let i=e[t];return{...e,[t]:{trackId:t,playCount:(i?.playCount??0)+1,completedCount:i?.completedCount??0,skipCount:i?.skipCount??0,totalListenSec:i?.totalListenSec??0,firstPlayedAt:i?.firstPlayedAt??r,lastPlayedAt:r,lastCompletedAt:i?.lastCompletedAt,lastSkippedAt:i?.lastSkippedAt}}})},[tm]),tf=(0,r.useCallback)((e,t)=>{let r=e.trim();r&&Number.isFinite(t)&&!(t<=0)&&q(e=>{let i=e[r],a=Math.min(30,Math.max(0,t));return a<=0?e:{...e,[r]:{trackId:r,playCount:i?.playCount??0,completedCount:i?.completedCount??0,skipCount:i?.skipCount??0,totalListenSec:(i?.totalListenSec??0)+a,firstPlayedAt:i?.firstPlayedAt,lastPlayedAt:i?.lastPlayedAt,lastCompletedAt:i?.lastCompletedAt,lastSkippedAt:i?.lastSkippedAt}}})},[]),tp=(0,r.useCallback)(e=>{let t=e.trim();if(!t)return;let r=Date.now();q(e=>{let i=e[t];return{...e,[t]:{trackId:t,playCount:i?.playCount??0,completedCount:(i?.completedCount??0)+1,skipCount:i?.skipCount??0,totalListenSec:i?.totalListenSec??0,firstPlayedAt:i?.firstPlayedAt,lastPlayedAt:i?.lastPlayedAt,lastCompletedAt:r,lastSkippedAt:i?.lastSkippedAt}}})},[]),th=(0,r.useCallback)(e=>{let t=e.trim();if(!t)return;let r=Date.now();q(e=>{let i=e[t];return{...e,[t]:{trackId:t,playCount:i?.playCount??0,completedCount:i?.completedCount??0,skipCount:(i?.skipCount??0)+1,totalListenSec:i?.totalListenSec??0,firstPlayedAt:i?.firstPlayedAt,lastPlayedAt:i?.lastPlayedAt,lastCompletedAt:i?.lastCompletedAt,lastSkippedAt:r}}})},[]),tg=(0,r.useCallback)(()=>{q({});try{window.localStorage.removeItem(ri)}catch{}},[]),tb=(0,r.useCallback)((e,t)=>{let r=t.trim();!r||"library"===e&&r.length<2||"musicbrainz"===e&&r.length<3||"youtube"===e&&r.length<2||V(t=>{let a=function(e,t){let r=t.query.trim();if(!r)return[...e];let a={source:t.source,query:r},n=i(a);return[a,...e.filter(e=>i(e)!==n)].slice(0,12)}(t,{source:e,query:r});return S.current&&n(a),a})},[]),ty=(0,r.useCallback)(()=>{V([]),n([])},[]),tx=(0,r.useCallback)((e,t)=>{let r,i=rr(e);if(!i)return null;let a=Date.now(),n=new Set,s=[];if(t)for(let e of t)!e||n.has(e)||(n.add(e),s.push(e));let o={id:(r=Math.random().toString(36).slice(2,10),`pl_${Date.now().toString(36)}_${r}`),name:i,trackIds:s,createdAt:a,updatedAt:a};return eN(e=>[o,...e].slice(0,200)),o},[]),tk=(0,r.useCallback)((e,t)=>{let r=rr(t);if(!r)return!1;let i=!1;return eN(t=>t.map(t=>t.id!==e||(i=!0,t.name===r)?t:{...t,name:r,updatedAt:Date.now()})),i},[]),tT=(0,r.useCallback)(e=>{eN(t=>t.filter(t=>t.id!==e))},[]),tw=(0,r.useCallback)((e,t)=>{let r=ry(t).map(e=>e.id).filter(e=>!!e);if(0===r.length)return 0;let i=0;return eN(t=>t.map(t=>{if(t.id!==e)return t;let a=function(e,t){if(0===t.length)return e;let r=new Set(e.trackIds),i=[];for(let e of t)!e||r.has(e)||(r.add(e),i.push(e));return 0===i.length?e:{...e,trackIds:[...e.trackIds,...i],updatedAt:Date.now()}}(t,r);return i=a.trackIds.length-t.trackIds.length,a})),i},[]),tI=(0,r.useCallback)((e,t)=>{0!==t.length&&eN(r=>r.map(r=>r.id===e?function(e,t){if(0===t.length)return e;let r=new Set(t),i=e.trackIds.filter(e=>!r.has(e));return i.length===e.trackIds.length?e:{...e,trackIds:i,updatedAt:Date.now()}}(r,t):r))},[]),tv=(0,r.useCallback)((e,t,r)=>{eN(i=>i.map(i=>i.id===e?function(e,t,r){let i=e.trackIds.length;if(t<0||t>=i)return e;let a=Math.max(0,Math.min(i-1,r));if(a===t)return e;let n=[...e.trackIds],[s]=n.splice(t,1);return n.splice(a,0,s),{...e,trackIds:n,updatedAt:Date.now()}}(i,t,r):i))},[]),tA=(0,r.useCallback)((e,t)=>{let r=ry(e);0!==r.length&&eL({tracks:r,contextLabel:t})},[]),tE=(0,r.useCallback)(()=>{eL(null)},[]),tC=(0,r.useCallback)(e=>{K(e),rT(rp,e)},[]),tz=(0,r.useCallback)(e=>{Q(e),rT(rh,e)},[]),t_=(0,r.useCallback)(e=>{v.current=e,ee(e),rT(rg,e)},[]),tN=(0,r.useCallback)(e=>{ew(e)},[]),tM=(0,r.useCallback)(()=>{ew(null)},[]),tB=(0,r.useCallback)(e=>{eI(e)},[]),tX=(0,r.useCallback)(()=>{eI(null)},[]),t$=(0,r.useCallback)(e=>{I.current=e,er(e);try{window.localStorage.setItem(t7,JSON.stringify(e))}catch{}},[]),tG=(0,r.useCallback)(e=>{A.current=e,ea(e),rT(rb,e),e?eO():ro(rl())},[eO]),tW=(0,r.useCallback)(()=>{es(null)},[]),tq=(0,r.useCallback)((e,t)=>{C.current={activeQueueId:e,positionSec:t},eU()},[eU]),tY=(0,r.useCallback)(e=>tU(e,b.current),[]),tV=(0,r.useCallback)(e=>{tS(e,tY).catch(e=>{let t=e instanceof Error?e.message:"Could not download this track.";window.alert(t)})},[tY]),tZ=(0,r.useMemo)(()=>new Set(N),[N]),tK=(0,r.useMemo)(()=>new Set(R),[R]),tQ=(0,r.useMemo)(()=>new Set(P),[P]),tJ=(0,r.useCallback)(e=>tZ.has(e),[tZ]),t0=(0,r.useCallback)(e=>tK.has(e),[tK]),t1=(0,r.useCallback)(e=>tQ.has(e),[tQ]),t2=(0,r.useCallback)(e=>{M(t=>rw(t,e))},[]),t4=(0,r.useCallback)(e=>{L(t=>rw(t,e))},[]),t3=(0,r.useCallback)(e=>{D(t=>rw(t,e))},[]),t5=(0,r.useCallback)(e=>{t2(e.id)},[t2]),t6=(0,r.useCallback)(e=>{M([...e.songIds]),L([...e.artistNames]),D([...e.albumKeys])},[]);(0,r.useEffect)(()=>{if(!w.current)return;let e=h.current;e&&(function(e,t){if(!e.objectStoreNames.contains(l))return Promise.reject(Error(`Missing object store ${l}`));let r={key:m,songIds:[...t.songIds],artistNames:[...t.artistNames],albumKeys:[...t.albumKeys]};return new Promise((t,i)=>{let a=e.transaction(l,"readwrite"),n=a.objectStore(l).put(r);n.onerror=()=>{i(n.error??Error("IndexedDB favorites put failed"))},a.oncomplete=()=>{t()},a.onerror=()=>{i(a.error??Error("IndexedDB favorites transaction failed"))}})})(e,{songIds:N,artistNames:R,albumKeys:P}).catch(()=>{})},[N,R,P]);let t9=(0,r.useCallback)(async e=>{try{let t=crypto.randomUUID(),r=Date.now(),i={id:t,name:e.name,addedAt:r,handle:e},a=h.current;if(!a)return void ey("Library database is not ready yet.");await new Promise((e,t)=>{let r=a.transaction(o,"readwrite"),n=r.objectStore(o).put(i);n.onerror=()=>{t(n.error??Error("IndexedDB put failed"))},r.oncomplete=()=>{e()},r.onerror=()=>{t(r.error??Error("IndexedDB transaction failed"))}}),b.current.set(t,e);let n=[...y.current,{id:t,name:e.name,addedAt:r}];y.current=n,U(n),await eY(!0)}catch(e){ey(p(e))}},[eY]),rA=(0,r.useCallback)(()=>{let e;if(!window.isSecureContext)return void ey("Folder access needs a secure context. Use https:// or open the app at http://localhost.");if(!ex)return void ey("This browser does not support folder selection. Use a Chromium-based desktop browser.");if(!h.current)return void ey("Library database is not ready yet.");ey(null);try{e=window.showDirectoryPicker({mode:"readwrite"})}catch(t){let e=p(t);e&&ey(e);return}e.then(e=>t9(e)).catch(e=>{if(e instanceof DOMException&&"AbortError"===e.name)return;let t=p(e);t&&ey(t)})},[ex,t9]),rE=(0,r.useCallback)(async e=>{let t=h.current;if(t)try{await new Promise((r,i)=>{let a=t.transaction(o,"readwrite"),n=a.objectStore(o).delete(e);n.onerror=()=>{i(n.error??Error("IndexedDB delete failed"))},a.oncomplete=()=>{r()},a.onerror=()=>{i(a.error??Error("IndexedDB transaction failed"))}}),b.current.delete(e);let r=y.current.filter(t=>t.id!==e);y.current=r,U(r),await eY(!0)}catch(e){ey(e instanceof Error?e.message:"Could not remove library folder")}},[eY]),rC=(0,r.useCallback)(async()=>{await eY(!0)},[eY]);(0,r.useEffect)(()=>{let e=!1;return(async()=>{let t=[];try{var r;let i=await new Promise((e,t)=>{let r=indexedDB.open(s,3);r.onerror=()=>{t(r.error??Error("IndexedDB open failed"))},r.onsuccess=()=>{e(r.result)},r.onupgradeneeded=()=>{let e=r.result;e.objectStoreNames.contains(o)||e.createObjectStore(o,{keyPath:"id"}),e.objectStoreNames.contains(l)||e.createObjectStore(l,{keyPath:"key"})}});if(e)return void i.close();h.current=i;try{let t=await (!i.objectStoreNames.contains(l)?Promise.resolve(f()):new Promise((e,t)=>{let r=i.transaction(l,"readonly").objectStore(l).get(m);r.onerror=()=>{t(r.error??Error("IndexedDB favorites get failed"))},r.onsuccess=()=>{let t=r.result;t&&t.key===m&&Array.isArray(t.songIds)&&Array.isArray(t.artistNames)&&Array.isArray(t.albumKeys)?e({key:m,songIds:[...t.songIds],artistNames:[...t.artistNames],albumKeys:[...t.albumKeys]}):e(f())}}));e||(M(t.songIds),L(t.artistNames),D(t.albumKeys))}catch{e||(M([]),L([]),D([]))}e||(w.current=!0),navigator.storage?.persist?.();let a=await new Promise((e,t)=>{let r=i.transaction(o,"readonly").objectStore(o).getAll();r.onerror=()=>{t(r.error??Error("IndexedDB getAll failed"))},r.onsuccess=()=>{e(r.result)}});if(e)return;let n=new Map,c=[];for(let e of a)n.set(e.id,e.handle),c.push({id:e.id,name:e.name,addedAt:e.addedAt});if(e)return;b.current=n,y.current=c,U(c),t=[];let p=!1,g=[];try{let a=await (!i.objectStoreNames.contains(l)?Promise.resolve(null):new Promise((e,t)=>{let r=i.transaction(l,"readonly").objectStore(l).get(u);r.onerror=()=>{t(r.error??Error("IndexedDB catalog get failed"))},r.onsuccess=()=>{let t=r.result;t&&t.key===u&&Array.isArray(t.rootIds)&&Array.isArray(t.tracks)?e(t):e(null)}}));if(!e&&a){let e=function(e){let t=[],r=new Set;for(let i of e){let e=tO(i);!e||r.has(e.id)||(r.add(e.id),t.push(e))}return t}(a.tracks);(g=e.filter(e9),c.length>0&&(r=a.rootIds,c.length===r.length&&[...c].map(e=>e.id).sort((e,t)=>e.localeCompare(t,void 0,{sensitivity:"base"})).every((e,t)=>e===r[t])))?(t=e,j(t),p=!0):g.length>0&&(t=g,j(g),p=!0)}}catch{}if(e)return;let k=c.length>0&&await rI(n),T=rk(rh,!0);if(e)return;if(k&&T&&!e){let r=await eq(!1);if(e||!r)return;let{tracks:a,firstError:n,failedRootCount:s}=r;if(0===a.length&&c.length>0&&s>0)if(p)ey(null);else{t=tP(a,g),j(t);try{await d(i,c.map(e=>e.id),t)}catch{}ey(n?`${n} ${rS}`:rS)}else{t=tP(a,x.current),j(t);try{await d(i,c.map(e=>e.id),t)}catch{}}}}catch(t){e||ey(t instanceof Error?t.message:"Could not load library")}finally{e||(E.current||eB(t),eu(!0))}})(),()=>{e=!0}},[eq,eB]);let rz=(0,r.useMemo)(()=>({roots:O,libraryTracks:B,queue:F,recentlyPlayedTrackIds:$,listeningStats:W,recentBrowseSearches:Y,compactLists:Z,autoRescanOnStartup:H,logLibraryScanTiming:J,scanPreferences:et,rememberLastQueue:ei,playbackRestore:en,playNowRequest:eo,isQueueReady:em,isScanning:ef,youtubePrefetchActive:ev,youtubePrefetchVideoCount:eE,beginYoutubePrefetch:eP,endYoutubePrefetch:eD,scanError:eb,hasDirectoryPicker:ex,addLibraryFolder:rA,removeLibraryFolder:rE,rescanAll:rC,addToQueue:e0,playNow:e1,addToLibrary:e4,removeFromLibrary:e3,removeAlbumFromLibrary:e5,removeArtistFromLibrary:e8,removeAllMusicBrainzFromLibrary:e6,removeFromQueue:to,clearQueue:tl,recordRecentlyPlayedTrack:tm,recordTrackPlaybackStarted:td,recordTrackPlaybackProgress:tf,recordTrackPlaybackCompleted:tp,recordTrackSkipped:th,clearListeningStats:tg,recordRecentBrowseSearch:tb,clearRecentBrowseSearches:ty,setCompactLists:tC,setAutoRescanOnStartup:tz,setLogLibraryScanTiming:t_,setScanPreferences:t$,setRememberLastQueue:tG,consumePlaybackRestore:tW,consumePlayNowRequest:e2,reportPlayback:tq,reorderQueueItems:tu,resolveFileForTrack:tY,downloadTrack:tV,bumpTrackDuration:eV,patchTrackById:eZ,saveTrackMetadata:eK,writeLibraryTracksToFiles:eH,patchAlbumMetadataByKey:eQ,patchArtistMetadataByKey:eJ,favoriteSongIds:N,favoriteArtistNames:R,favoriteAlbumKeys:P,isFavoriteSong:tJ,isFavoriteArtist:t0,isFavoriteAlbum:t1,toggleFavoriteSong:t2,toggleFavoriteArtist:t4,toggleFavoriteAlbum:t3,toggleFavoriteTrack:t5,importFavorites:t6,detailsTrack:eT,openTrackDetails:tN,closeTrackDetails:tM,relatedSongsSeedTrack:eS,openRelatedSongs:tB,closeRelatedSongs:tX,playlists:e_,createPlaylist:tx,renamePlaylist:tk,deletePlaylist:tT,addTracksToPlaylist:tw,removeTracksFromPlaylist:tI,reorderPlaylistTracks:tv,openAddToPlaylist:tA}),[O,B,F,$,W,Y,Z,H,J,et,ei,en,eo,em,ef,ev,eE,eP,eD,eb,ex,rA,rE,rC,e0,e1,e4,e3,e5,e8,e6,to,tl,tm,td,tf,tp,th,tg,tb,ty,tC,tz,t_,t$,tG,tW,e2,tq,tu,tY,tV,eV,eZ,eK,eH,eQ,eJ,N,R,P,tJ,t0,t1,t2,t4,t3,t5,t6,eT,tN,tM,eS,tB,tX,e_,tx,tk,tT,tw,tI,tv,tA]);return(0,t.jsxs)(rd.Provider,{value:rz,children:[e.children,(0,t.jsx)(tF,{progress:eh,onDismiss:eG}),(0,t.jsx)(t8,{track:eT,onClose:tM}),(0,t.jsx)(tH,{seedTrack:eS,onClose:tX}),eR?(0,t.jsx)(tj,{tracks:eR.tracks,contextLabel:eR.contextLabel,onClose:tE}):null]})}function rE(){let e=(0,r.useContext)(rd);if(!e)throw Error("useLibrary must be used within LibraryProvider");return e}}]);