1import{a as t}from"./musicData-C_P8dZk9.js";function e(t){const[e,s,o]=t.split(":");return 3600*parseInt(e)+60*parseInt(s)+parseFloat(o)}function s(t){const s=[],o=/<(\d{2}:\d{2}:\d{2}\.\d{3})>([^<]*)/g;let a;for(a=o.exec(t);null!==a;){const i=e(a[1]),l=a[2].trim();l&&s.push({time:i,text:l}),a=o.exec(t)}return s}class o{constructor(){this.modal=null,this.lenis=null}setLenis(t){this.lenis=t}open(t,e,s){if(!s)return;const o=s.getSongs().filter(e=>e.isInAlbum(t)).sort((e,s)=>(e.getTrackNumberInAlbum(t)||999)-(s.getTrackNumberInAlbum(t)||999));this.modal||this.createModal();const a=this.modal.querySelector("#tracklist-modal-title"),i=this.modal.querySelector("#tracklist-modal-content");a.textContent=`${e} - å
¨å鲿¥½æ²`,i.innerHTML=`\n <ul class="modal-track-list">\n ${o.map(e=>`<li class="modal-track-item">\n <span class="modal-track-number">${e.getTrackNumberInAlbum(t)}</span>\n <span class="modal-track-title">${e.title}</span>\n ${e.audioFiles?`\n <a href="#" class="modal-track-link" data-song-id="${e.id}">\n <i class="fas fa-play"></i>\n </a>\n `:""}\n </li>`).join("")}\n </ul>\n `;i.querySelectorAll(".modal-track-link").forEach(t=>{t.addEventListener("click",e=>{e.preventDefault();const s=t.dataset.songId,a=o.find(t=>t.id===s);if(a){const t=new CustomEvent("play-song",{detail:{song:a}});document.dispatchEvent(t)}})}),this.modal.classList.add("show"),document.body.style.overflow="hidden"}close(){this.modal&&(this.modal.classList.remove("show"),document.body.style.overflow="")}createModal(){this.modal=document.createElement("div"),this.modal.className="tracklist-modal",this.modal.id="tracklist-modal",this.modal.innerHTML='\n <div class="tracklist-modal__content">\n <div class="tracklist-modal__header">\n <h3 id="tracklist-modal-title">ãã©ãã¯ãªã¹ã</h3>\n <button class="tracklist-modal__close">Ã</button>\n </div>\n <div class="tracklist-modal__body">\n <div id="tracklist-modal-content"></div>\n </div>\n </div>\n ',document.body.appendChild(this.modal);const t=this.modal.querySelector(".tracklist-modal__body");t.addEventListener("wheel",t=>{t.stopPropagation()},{passive:!1}),t.addEventListener("touchstart",t=>{t.stopPropagation()},{passive:!0}),t.addEventListener("touchmove",t=>{t.stopPropagation()},{passive:!0});this.modal.querySelector(".tracklist-modal__close").addEventListener("click",()=>this.close()),this.modal.addEventListener("click",t=>{t.target===this.modal&&this.close()}),document.addEventListener("keydown",t=>{"Escape"===t.key&&this.modal.classList.contains("show")&&this.close()})}}class a{constructor(){this.modal=null,this.lenis=null}setLenis(t){this.lenis=t}async open(t,e){try{const s=t.url,o=await fetch(`/${s}`);if(!o.ok)throw new Error("ã©ã¤ãã¼ãã¼ããã¡ã¤ã«ãè¦ã¤ããã¾ãã");const a=await o.text(),i=new DOMParser,l=i.parseFromString(a,"text/html").body.innerHTML;this.showModal(e,l)}catch(s){this.showModal(e,"<p>ã©ã¤ãã¼ãã¼ãã®èªã¿è¾¼ã¿ã«å¤±æãã¾ããã</p>")}}showModal(t,e){this.modal||this.createModal();const s=this.modal.querySelector("#liner-notes-modal-title"),o=this.modal.querySelector("#liner-notes-modal-content");s.textContent=`${t} - ã©ã¤ãã¼ãã¼ã`,o.innerHTML=e,this.modal.classList.add("show"),document.body.style.overflow="hidden"}close(){this.modal&&(this.modal.classList.remove("show"),document.body.style.overflow="")}createModal(){this.modal=document.createElement("div"),this.modal.className="liner-notes-modal",this.modal.id="liner-notes-modal",this.modal.innerHTML='\n <div class="liner-notes-modal__content">\n <div class="liner-notes-modal__header">\n <h3 id="liner-notes-modal-title">ã©ã¤ãã¼ãã¼ã</h3>\n <button class="liner-notes-modal__close">Ã</button>\n </div>\n <div class="liner-notes-modal__body">\n <div class="liner-notes-modal__content-area" id="liner-notes-modal-content"></div>\n </div>\n </div>\n ',document.body.appendChild(this.modal);const t=this.modal.querySelector(".liner-notes-modal__body");t.addEventListener("wheel",t=>{t.stopPropagation()},{passive:!1}),t.addEventListener("touchstart",t=>{t.stopPropagation()},{passive:!0}),t.addEventListener("touchmove",t=>{t.stopPropagation()},{passive:!0});this.modal.querySelector(".liner-notes-modal__close").addEventListener("click",()=>this.close()),this.modal.addEventListener("click",t=>{t.target===this.modal&&this.close()}),document.addEventListener("keydown",t=>{"Escape"===t.key&&this.modal.classList.contains("show")&&this.close()})}}class i{constructor(){this.modal=null,this.lenis=null,this.cues=[],this.currentAudio=null,this.animationFrame=null,this.isKaraokeMode=!1}setLenis(t){this.lenis=t}async open(t,e,s,o=null){this.modal||this.createModal();const a=this.modal.querySelector("#lyrics-modal-title"),i=this.modal.querySelector("#lyrics-modal-content"),l=this.modal.querySelector("#karaoke-toggle");if(a.textContent=`${e} - Lyrics`,this.originalLyrics=s,o){this.isKaraokeMode=await this.loadVTTFile(o);const t=document.querySelector("floating-audio-player #floating-player"),e=t&&"block"===t.style.display;l.style.display=this.isKaraokeMode&&e?"inline-block":"none"}else this.isKaraokeMode=!1,l.style.display="none";i.textContent=s,i.className="lyrics-modal__lyrics",l.classList.remove("active"),this.modal.classList.add("show"),document.body.style.overflow="hidden"}async loadVTTFile(o){try{const a=t(o);if(!a)throw new Error("VTT file not found");return this.cues=function(t){const o=t.split("\n").map(t=>t.trim()).filter(t=>t),a=[];let i=0;for("WEBVTT"===o[0]&&(i=1);i<o.length;)if(/^\d+$/.test(o[i])&&i++,i<o.length&&o[i].includes("--\x3e")){const t=o[i].match(/(\d{2}:\d{2}:\d{2}\.\d{3})\s*-->\s*(\d{2}:\d{2}:\d{2}\.\d{3})/);if(t){const l=e(t[1]),n=e(t[2]);i++;let d="";for(;i<o.length&&!o[i].includes("--\x3e")&&!/^\d+$/.test(o[i]);)d&&(d+="\n"),d+=o[i],i++;d&&a.push({startTime:l,endTime:n,text:d,words:s(d)})}else i++}else i++;return a}(a),!0}catch(a){return!1}}displayKaraokeLyrics(t){t.innerHTML="",t.className="lyrics-modal__lyrics karaoke-mode",this.cues.forEac
1h((e,s)=>{const o=document.createElement("div");o.className="karaoke-cue",o.dataset.cueIndex=s,e.words.length>0?e.words.forEach((t,e)=>{const s=document.createElement("span");s.className="karaoke-word",s.dataset.wordIndex=e,s.textContent=t.text,o.appendChild(s)}):o.textContent=e.text.replace(/<[^>]*>/g,""),t.appendChild(o)})}startKaraokeSync(){const t=document.querySelector("floating-audio-player audio");t&&!t.paused&&(this.currentAudio=t,this.syncKaraoke())}syncKaraoke(){if(!this.currentAudio||!this.isKaraokeMode)return;const t=this.currentAudio.currentTime,e=function(t,e){return t.find(t=>e>=t.startTime&&e<=t.endTime)||null}(this.cues,t);this.modal.querySelectorAll(".karaoke-cue").forEach(t=>{t.classList.remove("active","past");t.querySelectorAll(".karaoke-word").forEach(t=>t.classList.remove("active","past"))}),this.cues.forEach((s,o)=>{const a=this.modal.querySelector(`[data-cue-index="${o}"]`);if(a)if(s===e){a.classList.add("active");const s=function(t,e){let s=-1;for(let o=0;o<t.length&&e>=t[o].time;o++)s=o;return s}(e.words,t);a.querySelectorAll(".karaoke-word").forEach((t,e)=>{e<=s&&t.classList.add("active")}),a.scrollIntoView({behavior:"smooth",block:"center"})}else if(s.endTime<t){a.classList.add("past");a.querySelectorAll(".karaoke-word").forEach(t=>t.classList.add("past"))}}),this.animationFrame=requestAnimationFrame(()=>this.syncKaraoke())}stopKaraokeSync(){this.animationFrame&&(cancelAnimationFrame(this.animationFrame),this.animationFrame=null)}close(){this.modal&&(this.modal.classList.remove("show"),document.body.style.overflow="",this.stopKaraokeSync())}createModal(){this.modal=document.createElement("div"),this.modal.className="lyrics-modal",this.modal.id="lyrics-modal",this.modal.innerHTML='\n <div class="lyrics-modal__content">\n <div class="lyrics-modal__header">\n <h3 id="lyrics-modal-title">æè©</h3>\n <div class="lyrics-modal__controls">\n <button id="karaoke-toggle" class="btn btn--sync" style="display: none;">\n <i class="fas fa-music"></i> æè©åæ\n </button>\n <button class="lyrics-modal__close">Ã</button>\n </div>\n </div>\n <div class="lyrics-modal__body">\n <div class="lyrics-modal__lyrics" id="lyrics-modal-content"></div>\n </div>\n </div>\n ',document.body.appendChild(this.modal);const t=this.modal.querySelector(".lyrics-modal__body");t.addEventListener("wheel",t=>{t.stopPropagation()},{passive:!1}),t.addEventListener("touchstart",t=>{t.stopPropagation()},{passive:!0}),t.addEventListener("touchmove",t=>{t.stopPropagation()},{passive:!0});this.modal.querySelector(".lyrics-modal__close").addEventListener("click",()=>this.close());const e=this.modal.querySelector("#karaoke-toggle");e.addEventListener("click",()=>{e.classList.toggle("active");const t=this.modal.querySelector("#lyrics-modal-content");e.classList.contains("active")?(this.displayKaraokeLyrics(t),this.startKaraokeSync()):(this.stopKaraokeSync(),t.textContent=this.originalLyrics||"æè©ãããã¾ãã",t.className="lyrics-modal__lyrics")}),this.modal.addEventListener("click",t=>{t.target===this.modal&&this.close()}),document.addEventListener("keydown",t=>{"Escape"===t.key&&this.modal.classList.contains("show")&&this.close()})}}export{a as L,o as T,i as a};
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.