@applemusic-like-lyrics/core 0.0.8 → 0.0.11

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -1,5 +1,7 @@
1
1
  # AMLL Core
2
2
 
3
+ > 警告:此为个人项目,且尚未完成开发,可能仍有大量问题,所以请勿直接用于生产环境!
4
+
3
5
  AMLL 的纯 JS 核心组件框架,包括歌词显示组件和背景组件等其它可以复用的组件。
4
6
 
5
7
  此处的东西都是 UI 框架无关的,所以可以间接在各种动态页面框架下引用。
package/dist/amll-core.js CHANGED
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const v=require("@pixi/display"),M=require("@pixi/app"),y=require("@pixi/filter-blur"),S=require("@pixi/filter-color-matrix"),C=require("@pixi/core"),L=require("@pixi/sprite"),z=require("jss"),A=require("jss-preset-default"),B=/^(((?<hour>[0-9]+):)?(?<min>[0-9]+):)?(?<sec>[0-9]+([\.:]([0-9]+))?)/;function T(d){const e=B.exec(d);if(e){const t=Number(e.groups?.hour||"0"),i=Number(e.groups?.min||"0"),n=Number(e.groups?.sec.replace(/:/,".")||"0");return Math.floor((t*3600+i*60+n)*1e3)}else throw new TypeError("时间戳字符串解析失败")}function D(d){const t=new DOMParser().parseFromString(d,"application/xml");let i="v1";for(const a of t.querySelectorAll("ttm\\:agent"))if(a.getAttribute("type")==="person"){const s=a.getAttribute("xml:id");s&&(i=s)}const n=[];for(const a of t.querySelectorAll("body p[begin][end]")){const s={words:[],startTime:T(a.getAttribute("begin")??"0:0"),endTime:T(a.getAttribute("end")??"0:0"),translatedLyric:"",romanLyric:"",isBG:!1,isDuet:a.getAttribute("ttm:agent")!==i};let r=null;for(const l of a.childNodes)if(l.nodeType===Node.TEXT_NODE){const h=l.textContent??"";/^(\s+)$/.test(h)?s.words.push({word:" ",startTime:0,endTime:0}):s.words.push({word:h,startTime:0,endTime:0})}else if(l.nodeType===Node.ELEMENT_NODE){const h=l,o=h.getAttribute("ttm:role");if(h.nodeName==="span"&&o)if(o==="x-bg"){const c={words:[],startTime:s.startTime,endTime:s.endTime,translatedLyric:"",romanLyric:"",isBG:!0,isDuet:s.isDuet};for(const u of h.childNodes)if(u.nodeType===Node.TEXT_NODE){const f=u.textContent??"";/^(\s+)$/.test(f)?c.words.push({word:" ",startTime:0,endTime:0}):c.words.push({word:f,startTime:0,endTime:0})}else if(u.nodeType===Node.ELEMENT_NODE){const f=u,b=f.getAttribute("ttm:role");if(f.nodeName==="span"&&b)b==="x-translation"?c.translatedLyric=f.innerHTML.trim():b==="x-roman"&&(c.romanLyric=f.innerHTML.trim());else if(f.hasAttribute("begin")&&f.hasAttribute("end")){const x={word:u.textContent,startTime:T(f.getAttribute("begin")),endTime:T(f.getAttribute("end"))};c.words.push(x)}}const m=c.words[0];c.startTime=m.startTime,m?.word.startsWith("(")&&(m.word=m.word.substring(1));const p=c.words[c.words.length-1];c.endTime=p.endTime,p?.word.endsWith(")")&&(p.word=p.word.substring(0,p.word.length-1)),r=c}else o==="x-translation"?s.translatedLyric=h.innerHTML:o==="x-roman"&&(s.romanLyric=h.innerHTML);else if(h.hasAttribute("begin")&&h.hasAttribute("end")){const c={word:l.textContent??"",startTime:T(h.getAttribute("begin")),endTime:T(h.getAttribute("end"))};s.words.push(c)}}n.push(s),r&&n.push(r)}return console.log(n),n}const I=Object.freeze(Object.defineProperty({__proto__:null,parseTTML:D},Symbol.toStringTag,{value:"Module"}));class k extends v.Container{time=0}class F{constructor(e){this.canvas=e;const t=e.getBoundingClientRect();this.canvas.width=t.width*this.currerntRenderScale,this.canvas.height=t.height*this.currerntRenderScale,this.observer=new ResizeObserver(()=>{const i=e.getBoundingClientRect();this.canvas.width=Math.max(1,i.width),this.canvas.height=Math.max(1,i.height),this.app.renderer.resize(this.canvas.width*this.currerntRenderScale,this.canvas.height*this.currerntRenderScale),this.rebuildFilters()}),this.observer.observe(e),this.app=new M.Application({view:e,resizeTo:this.canvas,powerPreference:"low-power",backgroundAlpha:0}),this.rebuildFilters(),this.app.ticker.add(this.onTick),this.app.ticker.start()}observer;app;curContainer;lastContainer=new Set;onTick=e=>{for(const t of this.lastContainer)t.alpha=Math.max(0,t.alpha-e/60),t.alpha<=0&&(this.app.stage.removeChild(t),this.lastContainer.delete(t));if(this.curContainer){this.curContainer.alpha=Math.min(1,this.curContainer.alpha+e/60);const[t,i,n,a]=this.curContainer.children,s=Math.max(this.app.screen.width,this.app.screen.height);t.position.set(this.app.screen.width/2,this.app.screen.height/2),i.position.set(this.app.screen.width/2.5,this.app.screen.height/2.5),n.position.set(this.app.screen.width/2,this.app.screen.height/2),a.position.set(this.app.screen.width/2,this.app.screen.height/2),t.width=s*Math.sqrt(2),t.height=t.width,i.width=s*.8,i.height=i.width,n.width=s*.5,n.height=n.width,a.width=s*.25,a.height=a.width,this.curContainer.time+=e*this.flowSpeed,t.rotation+=e/1e3*this.flowSpeed,i.rotation-=e/500*this.flowSpeed,n.rotation+=e/1e3*this.flowSpeed,a.rotation-=e/750*this.flowSpeed,n.x=this.app.screen.width/2+this.app.screen.width/4*Math.cos(this.curContainer.time/1e3*.75),n.y=this.app.screen.height/2+this.app.screen.width/4*Math.cos(this.curContainer.time/1e3*.75),a.x=this.app.screen.width/2+this.app.screen.width/4*.1+Math.cos(this.curContainer.time*.006*.75),a.y=this.app.screen.height/2+this.app.screen.width/4*.1+Math.cos(this.curContainer.time*.006*.75)}};flowSpeed=2;currerntRenderScale=.75;setFlowSpeed(e){this.flowSpeed=e}setRenderScale(e){this.currerntRenderScale=e;const t=this.canvas.getBoundingClientRect();this.canvas.width=Math.max(1,t.width),this.canvas.height=Math.max(1,t.height),this.app.renderer.resize(this.canvas.width*this.currerntRenderScale,this.canvas.height*this.currerntRenderScale),this.rebuildFilters()}rebuildFilters(){const e=Math.min(this.canvas.width,this.canvas.height),t=new S.ColorMatrixFilter;t.saturate(1.2,!1);const i=new S.ColorMatrixFilter;i.brightness(.6,!1);const n=new S.ColorMatrixFilter;n.contrast(.3,!0),this.app.stage.filters=[],this.app.stage.filters.push(new y.BlurFilter(5,1)),this.app.stage.filters.push(new y.BlurFilter(10,1)),this.app.stage.filters.push(new y.BlurFilter(20,2)),this.app.stage.filters.push(new y.BlurFilter(40,2)),e>512&&this.app.stage.filters.push(new y.BlurFilter(80,2)),e>768&&this.app.stage.filters.push(new y.BlurFilter(160,4)),e>768*2&&this.app.stage.filters.push(new y.BlurFilter(320,4)),this.app.stage.filters.push(t,i,n),this.app.stage.filters.push(new y.BlurFilter(5,1))}setFPS(e){this.app.ticker.maxFPS=e}pause(){this.app.ticker.stop(),this.app.render()}resume(){this.app.ticker.start()}async setAlbumImage(e){const t=await C.Texture.fromURL(e),i=new k,n=new L.Sprite(t),a=new L.Sprite(t),s=new L.Sprite(t),r=new L.Sprite(t);n.anchor.set(.5,.5),a.anchor.set(.5,.5),s.anchor.set(.5,.5),r.anchor.set(.5,.5),n.rotation=Math.random()*Math.PI*2,a.rotation=Math.random()*Math.PI*2,s.rotation=Math.random()*Math.PI*2,r.rotation=Math.random()*Math.PI*2,i.addChild(n,a,s,r),this.curContainer&&this.lastContainer.add(this.curContainer),this.curContainer=i,this.app.stage.addChild(this.curContainer),this.curContainer.alpha=0}dispose(){this.observer.disconnect(),this.app.ticker.remove(this.onTick)}}class q extends F{element;constructor(){const e=document.createElement("canvas");super(e),this.element=e,e.style.pointerEvents="none",e.style.zIndex="-1"}getElement(){return this.element}dispose(){super.dispose(),this.element.remove()}}const O=(d,e)=>d.size===e.size&&[...d].every(t=>e.has(t));function N(d){const t=2.5949095;return d<.5?Math.pow(2*d,2)*((t+1)*2*d-t)/2:(Math.pow(2*d-2,2)*((t+1)*(d*2-2)+t)+2)/2}const g=(d,e,t)=>Math.max(d,Math.min(e,t));class ${constructor(e){this.lyricPlayer=e,this.element.className=this.lyricPlayer.style.classes.interludeDots,this.element.appendChild(this.dot0),this.element.appendChild(this.dot1),this.element.appendChild(this.dot2)}element=document.createElement("div");dot0=document.createElement("span");dot1=document.createElement("span");dot2=document.createElement("span");left=0;top=0;scale=1;lastStyle="";currentInterlude;currentTime=0;targetBreatheDuration=1500;getElement(){return this.element}setTransform(e=this.left,t=this.top){this.left=e,this.top=t,this.update()}setInterlude(e){this.currentInterlude=e,this.currentTime=e?.[0]??0}update(e=0){this.currentTime+=e;let t="";if(t+=`transform:translate(${this.left}px, ${this.top}px)`,this.currentInterlude){const i=this.currentInterlude[1]-this.currentInterlude[0],n=this.currentTime-this.currentInterlude[0];if(n<=i){const a=i/Math.ceil(i/this.targetBreatheDuration);let s=1,r=1;s*=Math.sin(1.5*Math.PI-n/a*2)/10+1,n<1e3&&(s*=1-Math.pow((1e3-n)/1e3,2)),n<500?r=0:n<1e3&&(r*=(n-500)/500),i-n<750&&(s*=1-N((750-(i-n))/750/2)),i-n<375&&(r*=g(0,(i-n)/375,1)),s=Math.max(0,s),t+=` scale(${s})`;const l=g(.25,n*3/i*.75,1),h=g(.25,(n-i/3)*3/i*.75,1),o=g(.25,(n-i/3*2)*3/i*.75,1);this.dot0.style.opacity=`${g(0,Math.max(0,r*l),1)}`,this.dot1.style.opacity=`${g(0,Math.max(0,r*h),1)}`,this.dot2.style.opacity=`${g(0,Math.max(0,r*o),1)}`}else t+=" scale(0)",this.dot0.style.opacity="0",this.dot1.style.opacity="0",this.dot2.style.opacity="0"}else t+=" scale(0)",this.dot0.style.opacity="0",this.dot1.style.opacity="0",this.dot2.style.opacity="0";t+=";",this.lastStyle!==t&&(this.element.setAttribute("style",t),this.lastStyle=t)}dispose(){this.element.remove()}}class E{currentPosition=0;targetPosition=0;currentTime=0;params={};currentSolver;getV;queueParams;queuePosition;constructor(e=0){this.targetPosition=e,this.currentPosition=this.targetPosition,this.currentSolver=()=>this.targetPosition,this.getV=()=>0}resetSolver(){const e=this.getV(this.currentTime);this.currentTime=0,this.currentSolver=R(this.currentPosition,e,this.targetPosition,0,this.params),this.getV=_(this.currentSolver)}arrived(){return Math.abs(this.targetPosition-this.currentPosition)<.01&&this.getV(this.currentTime)<.01&&this.queueParams===void 0&&this.queuePosition===void 0}setPosition(e){this.targetPosition=e,this.currentPosition=e,this.currentSolver=()=>this.targetPosition,this.getV=()=>0}update(e=0){this.currentTime+=e,this.currentPosition=this.currentSolver(this.currentTime),this.queueParams&&(this.queueParams.time-=e,this.queueParams.time<=0&&this.updateParams({...this.queueParams})),this.queuePosition&&(this.queuePosition.time-=e,this.queuePosition.time<=0&&this.setTargetPosition(this.queuePosition.position)),this.arrived()&&this.setPosition(this.targetPosition)}updateParams(e,t=0){t>0?this.queueParams={...e,time:t}:(this.params={...this.params,...e},this.resetSolver())}setTargetPosition(e,t=0){t>0?this.queuePosition={position:e,time:t}:(this.queuePosition=void 0,this.targetPosition=e,this.resetSolver())}getCurrentPosition(){return this.currentPosition}}function R(d,e,t,i=0,n){const a=n?.soft??!1,s=n?.stiffness??100,r=n?.damping??10,l=n?.mass??1,h=t-d;if(a||1<=r/(2*Math.sqrt(s*l))){const o=-Math.sqrt(s/l),c=-o*h-e;return m=>(m-=i,m<0?d:t-(h+m*c)*Math.E**(m*o))}else{const o=Math.sqrt(4*l*s-r**2),c=(r*h-2*l*e)/o,m=.5*o/l,p=-(.5*r)/l;return u=>(u-=i,u<0?d:t-(Math.cos(u*m)*h+Math.sin(u*m)*c)*Math.E**(u*p))}}function W(d){return t=>(d(t+.001)-d(t-.001))/(2*.001)}function _(d){return W(d)}const w=/^[\p{Unified_Ideograph}\u0800-\u9FFC]+$/u;function G(d,e="rgba(0,0,0,1)",t="rgba(0,0,0,0.5)"){const i=2+d,n=d/i,a=(1-n)/2;return[`linear-gradient(to right,${e} ${a*100}%,${t} ${(a+n)*100}%)`,n,i]}function P(d){return d.endTime-d.startTime>=1e3&&d.word.length<=7}class X{constructor(e,t={words:[],translatedLyric:"",romanLyric:"",startTime:0,endTime:0,isBG:!1,isDuet:!1}){this.lyricPlayer=e,this.lyricLine=t,this.element.setAttribute("class",this.lyricPlayer.style.classes.lyricLine),this.lyricLine.isBG&&this.element.classList.add(this.lyricPlayer.style.classes.lyricBgLine),this.lyricLine.isDuet&&this.element.classList.add(this.lyricPlayer.style.classes.lyricDuetLine),this.element.appendChild(document.createElement("div")),this.element.appendChild(document.createElement("div")),this.element.appendChild(document.createElement("div"));const i=this.element.children[0],n=this.element.children[1],a=this.element.children[2];i.setAttribute("class",this.lyricPlayer.style.classes.lyricMainLine),n.setAttribute("class",this.lyricPlayer.style.classes.lyricSubLine),a.setAttribute("class",this.lyricPlayer.style.classes.lyricSubLine),this.rebuildElement(),this.rebuildStyle()}element=document.createElement("div");left=0;top=0;scale=1;blur=0;delay=0;splittedWords=[];lineSize=[0,0];lineTransforms={posX:new E(0),posY:new E(0),scale:new E(1)};isEnabled=!1;enable(){this.isEnabled=!0,this.element.classList.add("active");const e=this.element.children[0];this.splittedWords.forEach(t=>{t.elementAnimations.forEach(i=>{i.currentTime=0,i.playbackRate=1,i.play()})}),e.classList.add("active")}measureSize(){this._hide&&(this.element.style.display="",this.element.style.visibility="hidden");const e=[this.element.clientWidth,this.element.clientHeight];return this._hide&&(this.element.style.display="none",this.element.style.visibility=""),e}disable(){this.isEnabled=!1,this.element.classList.remove("active");const e=this.element.children[0];this.splittedWords.forEach(t=>{t.elementAnimations.forEach(i=>{i.id==="float-word"&&(i.playbackRate=-1,i.play())})}),e.classList.remove("active")}setLine(e){this.lyricLine=e,this.lyricLine.isBG?this.element.classList.add(this.lyricPlayer.style.classes.lyricBgLine):this.element.classList.remove(this.lyricPlayer.style.classes.lyricBgLine),this.lyricLine.isDuet?this.element.classList.add(this.lyricPlayer.style.classes.lyricDuetLine):this.element.classList.remove(this.lyricPlayer.style.classes.lyricDuetLine),this.rebuildElement(),this.rebuildStyle()}getLine(){return this.lyricLine}_hide=!0;lastStyle="";show(){this._hide=!1,this.rebuildStyle()}hide(){this._hide=!0,this.rebuildStyle()}rebuildStyle(){if(this._hide){this.lastStyle!=="display:none;transform:translate(0,-10000px);"&&(this.lastStyle="display:none;transform:translate(0,-10000px);",this.element.setAttribute("style","display:none;transform:translate(0,-10000px);"));return}let e=`transform:translate(${this.lineTransforms.posX.getCurrentPosition()}px,${this.lineTransforms.posY.getCurrentPosition()}px) scale(${this.lineTransforms.scale.getCurrentPosition()});`;!this.lyricPlayer.getEnableSpring()&&this.isInSight&&(e+=`transition-delay:${this.delay}ms;`),e+=`filter:blur(${Math.min(32,this.blur)}px);`,e!==this.lastStyle&&(this.lastStyle=e,this.element.setAttribute("style",e))}rebuildElement(){const e=this.element.children[0],t=this.element.children[1],i=this.element.children[2];this.splittedWords=[],this.lyricLine.words.forEach(l=>{const h=l.word.split(/\s+/),o=h.reduce((m,p)=>m+p.length,0);let c=0;h.forEach((m,p)=>{p>0&&this.splittedWords.push({word:" ",startTime:0,endTime:0,width:0,height:0,elements:[],elementAnimations:[],shouldEmphasize:!1}),this.splittedWords.push({word:m,startTime:l.startTime+(l.endTime-l.startTime)/o*c,endTime:l.startTime+(l.endTime-l.startTime)/o*(c+m.length),width:0,height:0,elements:[],elementAnimations:[],shouldEmphasize:P(l)}),c+=m.length})});const n=[],a=[];function s(l){for(;l.firstChild;)l.firstChild.nodeType===Node.ELEMENT_NODE?n.push(e.firstChild):l.firstChild.nodeType===Node.TEXT_NODE&&a.push(e.firstChild),l.removeChild(l.firstChild),s(l.firstChild)}s(e);let r=null;this.splittedWords.forEach(l=>{if(l.word.trim().length>0)if(l.shouldEmphasize){const h=n.pop()??document.createElement("span");h.className="emphasize",l.elements=[h];for(const o of l.word){const c=n.pop()??document.createElement("span");c.className="",c.innerText=o,h.appendChild(c),l.elements.push(c)}if(l.elementAnimations=this.initEmphasizeAnimation(l),console.log(l.word,w.test(l.word)),r&&!w.test(l.word))if(r.childElementCount>0)r.appendChild(h);else{const o=n.pop()??document.createElement("span");o.className="",r.remove(),o.appendChild(r),o.appendChild(h),e.appendChild(o),r=o}else r=w.test(l.word)?null:h,e.appendChild(h)}else{const h=n.pop()??document.createElement("span");if(h.className="",h.innerText=l.word,l.elements=[h],l.elementAnimations.push(this.initFloatAnimation(l,h)),r)if(r.childElementCount>0)r.appendChild(h);else{const o=n.pop()??document.createElement("span");o.className="",r.remove(),o.appendChild(r),o.appendChild(h),e.appendChild(o),r=o}else r=h,e.appendChild(h)}else if(l.word.length>0){const h=a.pop()??document.createTextNode(" ");e.appendChild(h),r=null}else r=null}),t.innerText=this.lyricLine.translatedLyric,i.innerText=this.lyricLine.romanLyric}initFloatAnimation(e,t){const i=e.startTime-this.lyricLine.startTime,n=Math.max(1e3,e.endTime-e.startTime),a=t.animate([{transform:"translateY(0px)"},{transform:"translateY(-3%)"}],{duration:isFinite(n)?n:0,delay:isFinite(i)?i:0,id:"float-word",composite:"add",fill:"both"});return a.pause(),a}initEmphasizeAnimation(e){const t=e.startTime-this.lyricLine.startTime,i=e.endTime-e.startTime;return e.elements.map((n,a,s)=>{if(a===0)return this.initFloatAnimation(e,n);{const r=n.animate([{offset:0,transform:"translate3d(0, 0px, 0px)",filter:"drop-shadow(0 0 0 var(--amll-lyric-line-color))"},{offset:.5,transform:"translate3d(0, -2%, 20px)",filter:"drop-shadow(0 0 0.2rem var(--amll-lyric-line-color))"},{offset:1,transform:"translate3d(0, 0px, 0)",filter:"drop-shadow(0 0 0 var(--amll-lyric-line-color))"}],{duration:Math.max(1e3,e.endTime-e.startTime),delay:t+i/(s.length-1)*(a-1),id:"glow-word",iterations:1,composite:"replace",fill:"both"});return r.pause(),r}})}updateMaskImage(){this._hide&&(this.element.style.display="",this.element.style.visibility="hidden"),this.splittedWords.forEach(e=>{const t=e.elements[0];if(t){e.width=t.clientWidth,e.height=t.clientHeight;const[i,n,a]=G(16/e.width,"rgba(0,0,0,0.75)","rgba(0,0,0,0.25)"),s=`${a*100}% 100%`;this.lyricPlayer.supportMaskImage?(t.style.maskImage=i,t.style.maskOrigin="left",t.style.maskSize=s):(t.style.webkitMaskImage=i,t.style.webkitMaskOrigin="left",t.style.webkitMaskSize=s);const r=e.width+16,l=`clamp(${-r}px,calc(${-r}px + (var(--amll-player-time) - ${e.startTime})*${r/Math.abs(e.endTime-e.startTime)}px),0px) 0px, left top`;t.style.maskPosition=l,t.style.webkitMaskPosition=l}}),this._hide&&(this.element.style.display="none",this.element.style.visibility="")}getElement(){return this.element}setTransform(e=this.left,t=this.top,i=this.scale,n=1,a=0,s=!1,r=0){this.left=e,this.top=t,this.scale=i,this.delay=r*1e3|0;const l=this.element.children[0];l.style.opacity=`${n}`,s||!this.lyricPlayer.getEnableSpring()?(this.blur=Math.min(32,a),s&&this.element.classList.add(this.lyricPlayer.style.classes.tmpDisableTransition),this.lineTransforms.posX.setPosition(e),this.lineTransforms.posY.setPosition(t),this.lineTransforms.scale.setPosition(i),this.lyricPlayer.getEnableSpring()?this.rebuildStyle():this.show(),s&&requestAnimationFrame(()=>{this.element.classList.remove(this.lyricPlayer.style.classes.tmpDisableTransition)})):(this.lineTransforms.posX.setTargetPosition(e,r),this.lineTransforms.posY.setTargetPosition(t,r),this.lineTransforms.scale.setTargetPosition(i),this.blur!==Math.min(32,a)&&(this.blur=Math.min(32,a),this.element.style.filter=`blur(${Math.min(32,a)}px)`))}update(e=0){this.lyricPlayer.getEnableSpring()&&(this.lineTransforms.posX.update(e),this.lineTransforms.posY.update(e),this.lineTransforms.scale.update(e),this.isInSight?this.show():this.hide())}get isInSight(){const e=this.lineTransforms.posX.getCurrentPosition(),t=this.lineTransforms.posY.getCurrentPosition(),i=e+this.lineSize[0],n=t+this.lineSize[1],a=this.lyricPlayer.pos[0],s=this.lyricPlayer.pos[1],r=this.lyricPlayer.pos[0]+this.lyricPlayer.size[0],l=this.lyricPlayer.pos[1]+this.lyricPlayer.size[1];return!(e>r||t>l||i<a||n<s)}dispose(){this.element.remove()}}const Y=z.create(A());class V extends EventTarget{element=document.createElement("div");currentTime=0;lyricLines=[];processedLines=[];lyricLinesEl=[];lyricLinesSize=new Map;hotLines=new Set;bufferedLines=new Set;scrollToIndex=0;resizeObserver=new ResizeObserver(e=>{const t=e[0].contentRect;this.size[0]=t.width,this.size[1]=t.height,this.pos[0]=t.left,this.pos[1]=t.top,this.rebuildStyle(),this.calcLayout(!0),this.lyricLinesEl.forEach(i=>i.updateMaskImage())});posXSpringParams={mass:1,damping:10,stiffness:100};posYSpringParams={mass:1,damping:15,stiffness:100};scaleSpringParams={mass:1,damping:20,stiffness:100};enableBlur=!0;interludeDots;interludeDotsSize=[0,0];supportPlusLighter=CSS.supports("mix-blend-mode","plus-lighter");supportMaskImage=CSS.supports("mask-image","none");disableSpring=!1;alignAnchor=.5;size=[0,0];pos=[0,0];setEnableSpring(e=!0){this.disableSpring=!e,e?this.element.classList.remove(this.style.classes.disableSpring):this.element.classList.add(this.style.classes.disableSpring),this.calcLayout(!0)}getEnableSpring(){return!this.disableSpring}style=Y.createStyleSheet({lyricPlayer:{userSelect:"none",padding:"1rem",boxSizing:"border-box",fontSize:"max(5vh, 12px)",fontWeight:"bold",width:"100%",height:"100%",overflow:"hidden",maxWidth:"100%",maxHeight:"100%",zIndex:1,color:"var(--amll-lyric-line-color)",mixBlendMode:"plus-lighter",contain:"strict"},lyricLine:{position:"absolute",transformOrigin:"left",maxWidth:"65%",padding:"max(2vh, 1rem) 1rem",contain:"content",transition:"filter 0.25s",margin:"max(2vh, 1rem) -1rem"},"@media (max-width: 1024px)":{lyricLine:{maxWidth:"75%",padding:"max(1vh, 1rem) 1rem",margin:"0 -1rem"}},lyricDuetLine:{textAlign:"right",transformOrigin:"right"},lyricBgLine:{opacity:0,fontSize:"max(50%, 10px)",transition:"opacity 0.25s","&.active":{transition:"opacity 0.25s 0.25s",opacity:1}},lyricMainLine:{transition:"opacity 0.3s 0.25s",margin:"-1rem",padding:"1rem","& span":{display:"inline-block",margin:"-1rem",padding:"1rem"},"& > span":{whiteSpace:"pre-wrap",wordBreak:"keep-all",maxLines:"1","&.emphasize":{margin:"-1rem",padding:"1rem",transformStyle:"preserve-3d",perspective:"50vw"}}},lyricSubLine:{fontSize:"max(50%, 10px)",opacity:.5},disableSpring:{"& > *":{transition:"filter 0.25s, transform 0.5s"}},interludeDots:{height:"min(1rem,2.5vh)",transformOrigin:"center",width:"fit-content",padding:"2.5% 0",position:"absolute",display:"flex",gap:"0.5rem","& > *":{width:"100%",display:"inline-block",borderRadius:"50%",aspectRatio:"1 / 1",backgroundColor:"var(--amll-lyric-line-color)",marginRight:"4px"},"&.duet":{right:"1rem",transformOrigin:"center"}},"@supports (mix-blend-mode: plus-lighter)":{lyricSubLine:{opacity:.3}},tmpDisableTransition:{transition:"none !important"}});onPageShow=()=>{this.calcLayout(!0)};constructor(){super(),this.interludeDots=new $(this),this.element.setAttribute("class",this.style.classes.lyricPlayer),this.disableSpring&&this.element.classList.add(this.style.classes.disableSpring),this.rebuildStyle(),this.resizeObserver.observe(this.element),this.element.appendChild(this.interludeDots.getElement()),this.style.attach(),this.interludeDots.setTransform(0,200),window.addEventListener("pageshow",this.onPageShow)}getCurrentInterlude(){if(this.bufferedLines.size>0)return;const e=this.currentTime+20,t=this.scrollToIndex;if(t===0){if(this.processedLines[0]?.startTime&&this.processedLines[0].startTime>e)return[0,this.processedLines[0].startTime,-2]}else if(this.processedLines[t]?.endTime&&this.processedLines[t+1]?.startTime&&this.processedLines[t+1].startTime>e&&this.processedLines[t].endTime<e)return[this.processedLines[t].endTime,this.processedLines[t+1].startTime,t]}rebuildStyle(){let e="";e+="--amll-lyric-player-width:",e+=this.element.clientWidth,e+="px;",e+="--amll-lyric-player-height:",e+=this.element.clientHeight,e+="px;",e+="--amll-lyric-line-color:",e+="#FFFFFF;",e+="--amll-player-time:",e+=this.currentTime,e+=";",this.element.setAttribute("style",e)}setEnableBlur(e){this.enableBlur!==e&&(this.enableBlur=e,this.calcLayout())}setLyricLines(e){this.lyricLines=e;const t=750;this.processedLines=e.filter(i=>i.words.reduce((n,a)=>n+a.word.trim().length,0)>0).map((i,n,a)=>{if(i.isBG)return{...i};{const s=a[n-1],r=a[n-2];if(s?.isBG&&r){if(r.endTime<i.startTime)return{...i,startTime:Math.max(r.endTime,i.startTime-t)||i.startTime}}else if(s?.endTime&&s.endTime<i.startTime)return{...i,startTime:Math.max(s?.endTime,i.startTime-t)||i.startTime};return{...i}}}),this.processedLines.forEach((i,n,a)=>{const s=a[n+1],r=i.words[i.words.length-1];r&&P(r)&&(s?s.startTime>i.endTime&&(i.endTime=Math.min(i.endTime+1500,s.startTime)):i.endTime=i.endTime+1500)}),this.processedLines.forEach((i,n,a)=>{if(i.isBG)return;const s=a[n+1];s?.isBG&&(s.startTime=Math.min(s.startTime,i.startTime))}),this.lyricLinesEl.forEach(i=>i.dispose()),this.lyricLinesEl=this.processedLines.map(i=>new X(this,i)),this.lyricLinesEl.forEach(i=>{this.element.appendChild(i.getElement()),i.updateMaskImage()}),this.setLinePosXSpringParams({}),this.setLinePosYSpringParams({}),this.setLineScaleSpringParams({}),this.setCurrentTime(0,!0),this.calcLayout(!0)}calcLayout(e=!1){e&&(this.lyricLinesEl.forEach(o=>{const c=o.measureSize();this.lyricLinesSize.set(o,c),o.lineSize=c}),this.interludeDotsSize[0]=this.interludeDots.getElement().clientWidth,this.interludeDotsSize[1]=this.interludeDots.getElement().clientHeight);const t=.95;let n=-this.lyricLinesEl.slice(0,this.scrollToIndex).reduce((o,c)=>o+(c.getLine().isBG?0:this.lyricLinesSize.get(c)?.[1]??0),0);if(this.alignAnchor==="bottom"){n+=this.element.clientHeight/2;const o=this.lyricLinesEl[this.scrollToIndex];if(o){const c=this.lyricLinesSize.get(o)?.[1]??0;n-=c/2}}else if(typeof this.alignAnchor=="number"){n+=this.element.clientHeight*this.alignAnchor;const o=this.lyricLinesEl[this.scrollToIndex];if(o){const c=this.lyricLinesSize.get(o)?.[1]??0;n-=c/2}}const a=this.getCurrentInterlude();let s=0;if(a&&(s=a[1]-a[0],s>=5e3)){const o=this.lyricLinesEl[a[2]+1];o&&(n-=this.lyricLinesSize.get(o)?.[1]??0)}const r=Math.max(...this.bufferedLines);let l=0,h=!1;this.lyricLinesEl.forEach((o,c)=>{const m=this.bufferedLines.has(c),p=m||c>=this.scrollToIndex&&c<r,u=o.getLine();let f=0;u.isDuet&&(f=this.size[0]-(this.lyricLinesSize.get(o)?.[0]??0)),!h&&s>=5e3&&(c===this.scrollToIndex&&a?.[2]===-2||c===this.scrollToIndex+1)&&(h=!0,this.interludeDots.setTransform(0,n),a&&this.interludeDots.setInterlude([a[0],a[1]]),n+=this.interludeDotsSize[1]),o.setTransform(f,n,p?1:t,m?1:1/3,this.enableBlur?3*(p?0:1+(c<this.scrollToIndex?Math.abs(this.scrollToIndex-c):Math.abs(c-Math.max(this.scrollToIndex,r)))):0,e,l),u.isBG&&p?n+=this.lyricLinesSize.get(o)?.[1]??0:u.isBG||(n+=this.lyricLinesSize.get(o)?.[1]??0),n>=0&&(l+=.05)})}getCurrentTime(){return this.currentTime}getLyricLines(){return this.lyricLines}getElement(){return this.element}setAlignAnchor(e){this.alignAnchor=e}setCurrentTime(e,t=!1){this.currentTime=e,this.element.style.setProperty("--amll-player-time",`${e}`);const i=new Set,n=new Set,a=new Set;this.hotLines.forEach(s=>{const r=this.processedLines[s];if(!r.isBG)if(r){const l=this.processedLines[s+1];if(l?.isBG){const h=Math.min(r.startTime,l?.startTime),o=Math.max(r.endTime,l?.endTime);(h>e||o<=e)&&(this.hotLines.delete(s),i.add(s),this.hotLines.delete(s+1),i.add(s+1),t&&(this.lyricLinesEl[s].disable(),this.lyricLinesEl[s+1].disable()))}else(r.startTime>e||r.endTime<=e)&&(this.hotLines.delete(s),i.add(s),t&&this.lyricLinesEl[s].disable())}else this.hotLines.delete(s),i.add(s),t&&this.lyricLinesEl[s].disable()}),this.processedLines.forEach((s,r,l)=>{!s.isBG&&s.startTime<=e&&s.endTime>e&&(this.hotLines.has(r)||(this.hotLines.add(r),a.add(r),t&&this.lyricLinesEl[r].enable(),l[r+1]?.isBG&&(this.hotLines.add(r+1),a.add(r+1),t&&this.lyricLinesEl[r+1].enable())))}),this.bufferedLines.forEach(s=>{this.hotLines.has(s)||(n.add(s),t&&this.lyricLinesEl[s].disable())}),t?(this.bufferedLines.size>0?this.scrollToIndex=Math.min(...this.bufferedLines):this.scrollToIndex=this.processedLines.findIndex(s=>s.startTime>=e),this.bufferedLines.clear(),this.hotLines.forEach(s=>this.bufferedLines.add(s)),this.calcLayout(!0)):(n.size>0||a.size>0)&&(n.size===0&&a.size>0?(a.forEach(s=>{this.bufferedLines.add(s),this.lyricLinesEl[s].enable()}),this.scrollToIndex=Math.min(...this.bufferedLines)):a.size===0&&n.size>0?O(n,this.bufferedLines)&&this.bufferedLines.forEach(s=>{this.hotLines.has(s)||(this.bufferedLines.delete(s),this.lyricLinesEl[s].disable())}):(a.forEach(s=>{this.bufferedLines.add(s),this.lyricLinesEl[s].enable()}),n.forEach(s=>{this.bufferedLines.delete(s),this.lyricLinesEl[s].disable()}),this.bufferedLines.size>0&&(this.scrollToIndex=Math.min(...this.bufferedLines))),this.calcLayout())}update(e=0){const t=e/1e3;this.interludeDots.update(e),this.lyricLinesEl.forEach(i=>i.update(t))}setLinePosXSpringParams(e){this.posXSpringParams={...this.posXSpringParams,...e},this.lyricLinesEl.forEach(t=>t.lineTransforms.posX.updateParams(this.posXSpringParams))}setLinePosYSpringParams(e){this.posYSpringParams={...this.posYSpringParams,...e},this.lyricLinesEl.forEach(t=>t.lineTransforms.posY.updateParams(this.posYSpringParams))}setLineScaleSpringParams(e){this.scaleSpringParams={...this.scaleSpringParams,...e},this.lyricLinesEl.forEach(t=>t.lineTransforms.scale.updateParams(this.scaleSpringParams))}dispose(){this.element.remove(),this.resizeObserver.disconnect(),this.style.detach(),this.lyricLinesEl.forEach(e=>e.dispose()),window.removeEventListener("pageshow",this.onPageShow)}}exports.BackgroundRender=q;exports.LyricPlayer=V;exports.ttml=I;
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const C=require("@pixi/display"),M=require("@pixi/app"),y=require("@pixi/filter-blur"),E=require("@pixi/filter-color-matrix"),z=require("@pixi/core"),w=require("@pixi/sprite"),D=require("jss"),A=require("jss-preset-default"),B=/^(((?<hour>[0-9]+):)?(?<min>[0-9]+):)?(?<sec>[0-9]+([\.:]([0-9]+))?)/;function T(h){const e=B.exec(h);if(e){const t=Number(e.groups?.hour||"0"),n=Number(e.groups?.min||"0"),i=Number(e.groups?.sec.replace(/:/,".")||"0");return Math.floor((t*3600+n*60+i)*1e3)}else throw new TypeError("时间戳字符串解析失败")}function I(h){const t=new DOMParser().parseFromString(h,"application/xml");let n="v1";for(const l of t.querySelectorAll("ttm\\:agent"))if(l.getAttribute("type")==="person"){const s=l.getAttribute("xml:id");s&&(n=s)}const i=[];for(const l of t.querySelectorAll("body p[begin][end]")){const s={words:[],startTime:T(l.getAttribute("begin")??"0:0"),endTime:T(l.getAttribute("end")??"0:0"),translatedLyric:"",romanLyric:"",isBG:!1,isDuet:l.getAttribute("ttm:agent")!==n};let r=null;for(const a of l.childNodes)if(a.nodeType===Node.TEXT_NODE){const o=a.textContent??"";/^(\s+)$/.test(o)?s.words.push({word:" ",startTime:0,endTime:0}):s.words.push({word:o,startTime:0,endTime:0})}else if(a.nodeType===Node.ELEMENT_NODE){const o=a,c=o.getAttribute("ttm:role");if(o.nodeName==="span"&&c)if(c==="x-bg"){const d={words:[],startTime:s.startTime,endTime:s.endTime,translatedLyric:"",romanLyric:"",isBG:!0,isDuet:s.isDuet};for(const m of o.childNodes)if(m.nodeType===Node.TEXT_NODE){const p=m.textContent??"";/^(\s+)$/.test(p)?d.words.push({word:" ",startTime:0,endTime:0}):d.words.push({word:p,startTime:0,endTime:0})}else if(m.nodeType===Node.ELEMENT_NODE){const p=m,L=p.getAttribute("ttm:role");if(p.nodeName==="span"&&L)L==="x-translation"?d.translatedLyric=p.innerHTML.trim():L==="x-roman"&&(d.romanLyric=p.innerHTML.trim());else if(p.hasAttribute("begin")&&p.hasAttribute("end")){const b={word:m.textContent,startTime:T(p.getAttribute("begin")),endTime:T(p.getAttribute("end"))};d.words.push(b)}}const u=d.words[0];d.startTime=u.startTime,u?.word.startsWith("(")&&(u.word=u.word.substring(1));const f=d.words[d.words.length-1];d.endTime=f.endTime,f?.word.endsWith(")")&&(f.word=f.word.substring(0,f.word.length-1)),r=d}else c==="x-translation"?s.translatedLyric=o.innerHTML:c==="x-roman"&&(s.romanLyric=o.innerHTML);else if(o.hasAttribute("begin")&&o.hasAttribute("end")){const d={word:a.textContent??"",startTime:T(o.getAttribute("begin")),endTime:T(o.getAttribute("end"))};s.words.push(d)}}i.push(s),r&&i.push(r)}return i}const k=Object.freeze(Object.defineProperty({__proto__:null,parseTTML:I},Symbol.toStringTag,{value:"Module"}));class F extends C.Container{time=0}class q{constructor(e){this.canvas=e;const t=e.getBoundingClientRect();this.canvas.width=t.width*this.currerntRenderScale,this.canvas.height=t.height*this.currerntRenderScale,this.observer=new ResizeObserver(()=>{const n=e.getBoundingClientRect();this.canvas.width=Math.max(1,n.width),this.canvas.height=Math.max(1,n.height),this.app.renderer.resize(this.canvas.width*this.currerntRenderScale,this.canvas.height*this.currerntRenderScale),this.app.ticker.start(),this.rebuildFilters()}),this.observer.observe(e),this.app=new M.Application({view:e,resizeTo:this.canvas,powerPreference:"low-power",backgroundAlpha:0}),this.rebuildFilters(),this.app.ticker.add(this.onTick),this.app.ticker.start()}observer;app;curContainer;staticMode=!1;lastContainer=new Set;onTick=e=>{for(const t of this.lastContainer)t.alpha=Math.max(0,t.alpha-e/60),t.alpha<=0&&(this.app.stage.removeChild(t),this.lastContainer.delete(t));if(this.curContainer){this.curContainer.alpha=Math.min(1,this.curContainer.alpha+e/60);const[t,n,i,l]=this.curContainer.children,s=Math.max(this.app.screen.width,this.app.screen.height);t.position.set(this.app.screen.width/2,this.app.screen.height/2),n.position.set(this.app.screen.width/2.5,this.app.screen.height/2.5),i.position.set(this.app.screen.width/2,this.app.screen.height/2),l.position.set(this.app.screen.width/2,this.app.screen.height/2),t.width=s*Math.sqrt(2),t.height=t.width,n.width=s*.8,n.height=n.width,i.width=s*.5,i.height=i.width,l.width=s*.25,l.height=l.width,this.curContainer.time+=e*this.flowSpeed,t.rotation+=e/1e3*this.flowSpeed,n.rotation-=e/500*this.flowSpeed,i.rotation+=e/1e3*this.flowSpeed,l.rotation-=e/750*this.flowSpeed,i.x=this.app.screen.width/2+this.app.screen.width/4*Math.cos(this.curContainer.time/1e3*.75),i.y=this.app.screen.height/2+this.app.screen.width/4*Math.cos(this.curContainer.time/1e3*.75),l.x=this.app.screen.width/2+this.app.screen.width/4*.1+Math.cos(this.curContainer.time*.006*.75),l.y=this.app.screen.height/2+this.app.screen.width/4*.1+Math.cos(this.curContainer.time*.006*.75),this.curContainer.alpha>=1&&this.lastContainer.size===0&&this.staticMode&&this.app.ticker.stop()}};flowSpeed=2;currerntRenderScale=.75;setFlowSpeed(e){this.flowSpeed=e}setRenderScale(e){this.currerntRenderScale=e;const t=this.canvas.getBoundingClientRect();this.canvas.width=Math.max(1,t.width),this.canvas.height=Math.max(1,t.height),this.app.renderer.resize(this.canvas.width*this.currerntRenderScale,this.canvas.height*this.currerntRenderScale),this.rebuildFilters()}rebuildFilters(){const e=Math.min(this.canvas.width,this.canvas.height),t=new E.ColorMatrixFilter;t.saturate(1.2,!1);const n=new E.ColorMatrixFilter;n.brightness(.6,!1);const i=new E.ColorMatrixFilter;i.contrast(.3,!0),this.app.stage.filters=[],this.app.stage.filters.push(new y.BlurFilter(5,1)),this.app.stage.filters.push(new y.BlurFilter(10,1)),this.app.stage.filters.push(new y.BlurFilter(20,2)),this.app.stage.filters.push(new y.BlurFilter(40,2)),e>512&&this.app.stage.filters.push(new y.BlurFilter(80,2)),e>768&&this.app.stage.filters.push(new y.BlurFilter(160,4)),e>768*2&&this.app.stage.filters.push(new y.BlurFilter(320,4)),this.app.stage.filters.push(t,n,i),this.app.stage.filters.push(new y.BlurFilter(5,1))}setStaticMode(e=!1){this.staticMode=e,this.app.ticker.start()}setFPS(e){this.app.ticker.maxFPS=e}pause(){this.app.ticker.stop(),this.app.render()}resume(){this.app.ticker.start()}async setAlbumImage(e){const t=await z.Texture.fromURL(e),n=new F,i=new w.Sprite(t),l=new w.Sprite(t),s=new w.Sprite(t),r=new w.Sprite(t);i.anchor.set(.5,.5),l.anchor.set(.5,.5),s.anchor.set(.5,.5),r.anchor.set(.5,.5),i.rotation=Math.random()*Math.PI*2,l.rotation=Math.random()*Math.PI*2,s.rotation=Math.random()*Math.PI*2,r.rotation=Math.random()*Math.PI*2,n.addChild(i,l,s,r),this.curContainer&&this.lastContainer.add(this.curContainer),this.curContainer=n,this.app.stage.addChild(this.curContainer),this.curContainer.alpha=0,this.app.ticker.start()}dispose(){this.observer.disconnect(),this.app.ticker.remove(this.onTick)}}class N extends q{element;constructor(){const e=document.createElement("canvas");super(e),this.element=e,e.style.pointerEvents="none",e.style.zIndex="-1"}getElement(){return this.element}dispose(){super.dispose(),this.element.remove()}}const O=(h,e)=>h.size===e.size&&[...h].every(t=>e.has(t));class S{currentPosition=0;targetPosition=0;currentTime=0;params={};currentSolver;getV;queueParams;queuePosition;constructor(e=0){this.targetPosition=e,this.currentPosition=this.targetPosition,this.currentSolver=()=>this.targetPosition,this.getV=()=>0}resetSolver(){const e=this.getV(this.currentTime);this.currentTime=0,this.currentSolver=$(this.currentPosition,e,this.targetPosition,0,this.params),this.getV=R(this.currentSolver)}arrived(){return Math.abs(this.targetPosition-this.currentPosition)<.01&&this.getV(this.currentTime)<.01&&this.queueParams===void 0&&this.queuePosition===void 0}setPosition(e){this.targetPosition=e,this.currentPosition=e,this.currentSolver=()=>this.targetPosition,this.getV=()=>0}update(e=0){this.currentTime+=e,this.currentPosition=this.currentSolver(this.currentTime),this.queueParams&&(this.queueParams.time-=e,this.queueParams.time<=0&&this.updateParams({...this.queueParams})),this.queuePosition&&(this.queuePosition.time-=e,this.queuePosition.time<=0&&this.setTargetPosition(this.queuePosition.position)),this.arrived()&&this.setPosition(this.targetPosition)}updateParams(e,t=0){t>0?this.queueParams={...e,time:t}:(this.params={...this.params,...e},this.resetSolver())}setTargetPosition(e,t=0){t>0?this.queuePosition={position:e,time:t}:(this.queuePosition=void 0,this.targetPosition=e,this.resetSolver())}getCurrentPosition(){return this.currentPosition}}function $(h,e,t,n=0,i){const l=i?.soft??!1,s=i?.stiffness??100,r=i?.damping??10,a=i?.mass??1,o=t-h;if(l||1<=r/(2*Math.sqrt(s*a))){const c=-Math.sqrt(s/a),d=-c*o-e;return u=>(u-=n,u<0?h:t-(o+u*d)*Math.E**(u*c))}else{const c=Math.sqrt(4*a*s-r**2),d=(r*o-2*a*e)/c,u=.5*c/a,f=-(.5*r)/a;return m=>(m-=n,m<0?h:t-(Math.cos(m*u)*o+Math.sin(m*u)*d)*Math.E**(m*f))}}function _(h){return t=>(h(t+.001)-h(t-.001))/(2*.001)}function R(h){return _(h)}class X{constructor(e){this.lyricPlayer=e,this.element.setAttribute("class",this.lyricPlayer.style.classes.lyricLine),this.rebuildStyle()}element=document.createElement("div");left=0;top=0;delay=0;lineSize=[0,0];lineTransforms={posX:new S(0),posY:new S(0)};measureSize(){return[this.element.clientWidth,this.element.clientHeight]}lastStyle="";show(){this.rebuildStyle()}hide(){this.rebuildStyle()}rebuildStyle(){let e=`transform:translate(${this.lineTransforms.posX.getCurrentPosition()}px,${this.lineTransforms.posY.getCurrentPosition()}px);`;!this.lyricPlayer.getEnableSpring()&&this.isInSight&&(e+=`transition-delay:${this.delay}ms;`),e!==this.lastStyle&&(this.lastStyle=e,this.element.setAttribute("style",e))}getElement(){return this.element}setTransform(e=this.left,t=this.top,n=!1,i=0){this.left=e,this.top=t,this.delay=i*1e3|0,n||!this.lyricPlayer.getEnableSpring()?(n&&this.element.classList.add(this.lyricPlayer.style.classes.tmpDisableTransition),this.lineTransforms.posX.setPosition(e),this.lineTransforms.posY.setPosition(t),this.lyricPlayer.getEnableSpring()?this.rebuildStyle():this.show(),n&&requestAnimationFrame(()=>{this.element.classList.remove(this.lyricPlayer.style.classes.tmpDisableTransition)})):(this.lineTransforms.posX.setTargetPosition(e,i),this.lineTransforms.posY.setTargetPosition(t,i))}update(e=0){this.lyricPlayer.getEnableSpring()&&(this.lineTransforms.posX.update(e),this.lineTransforms.posY.update(e),this.isInSight?this.show():this.hide())}get isInSight(){const e=this.lineTransforms.posX.getCurrentPosition(),t=this.lineTransforms.posY.getCurrentPosition(),n=e+this.lineSize[0],i=t+this.lineSize[1],l=this.lyricPlayer.pos[0],s=this.lyricPlayer.pos[1],r=this.lyricPlayer.pos[0]+this.lyricPlayer.size[0],a=this.lyricPlayer.pos[1]+this.lyricPlayer.size[1];return!(e>r||t>a||n<l||i<s)}dispose(){this.element.remove()}}function W(h){const t=2.5949095;return h<.5?Math.pow(2*h,2)*((t+1)*2*h-t)/2:(Math.pow(2*h-2,2)*((t+1)*(h*2-2)+t)+2)/2}const g=(h,e,t)=>Math.max(h,Math.min(e,t));class Y{constructor(e){this.lyricPlayer=e,this.element.className=this.lyricPlayer.style.classes.interludeDots,this.element.appendChild(this.dot0),this.element.appendChild(this.dot1),this.element.appendChild(this.dot2)}element=document.createElement("div");dot0=document.createElement("span");dot1=document.createElement("span");dot2=document.createElement("span");left=0;top=0;scale=1;lastStyle="";currentInterlude;currentTime=0;targetBreatheDuration=1500;getElement(){return this.element}setTransform(e=this.left,t=this.top){this.left=e,this.top=t,this.update()}setInterlude(e){this.currentInterlude=e,this.currentTime=e?.[0]??0}update(e=0){this.currentTime+=e;let t="";if(t+=`transform:translate(${this.left}px, ${this.top}px)`,this.currentInterlude){const n=this.currentInterlude[1]-this.currentInterlude[0],i=this.currentTime-this.currentInterlude[0];if(i<=n){const l=n/Math.ceil(n/this.targetBreatheDuration);let s=1,r=1;s*=Math.sin(1.5*Math.PI-i/l*2)/10+1,i<1e3&&(s*=1-Math.pow((1e3-i)/1e3,2)),i<500?r=0:i<1e3&&(r*=(i-500)/500),n-i<750&&(s*=1-W((750-(n-i))/750/2)),n-i<375&&(r*=g(0,(n-i)/375,1)),s=Math.max(0,s),t+=` scale(${s})`;const a=g(.25,i*3/n*.75,1),o=g(.25,(i-n/3)*3/n*.75,1),c=g(.25,(i-n/3*2)*3/n*.75,1);this.dot0.style.opacity=`${g(0,Math.max(0,r*a),1)}`,this.dot1.style.opacity=`${g(0,Math.max(0,r*o),1)}`,this.dot2.style.opacity=`${g(0,Math.max(0,r*c),1)}`}else t+=" scale(0)",this.dot0.style.opacity="0",this.dot1.style.opacity="0",this.dot2.style.opacity="0"}else t+=" scale(0)",this.dot0.style.opacity="0",this.dot1.style.opacity="0",this.dot2.style.opacity="0";t+=";",this.lastStyle!==t&&(this.element.setAttribute("style",t),this.lastStyle=t)}dispose(){this.element.remove()}}const v=/^[\p{Unified_Ideograph}\u0800-\u9FFC]+$/u;function G(h,e="rgba(0,0,0,1)",t="rgba(0,0,0,0.5)"){const n=2+h,i=h/n,l=(1-i)/2;return[`linear-gradient(to right,${e} ${l*100}%,${t} ${(l+i)*100}%)`,i,n]}function x(h){return h.endTime-h.startTime>=1e3&&h.word.length<=7}class V{constructor(e,t={words:[],translatedLyric:"",romanLyric:"",startTime:0,endTime:0,isBG:!1,isDuet:!1}){this.lyricPlayer=e,this.lyricLine=t,this.element.setAttribute("class",this.lyricPlayer.style.classes.lyricLine),this.lyricLine.isBG&&this.element.classList.add(this.lyricPlayer.style.classes.lyricBgLine),this.lyricLine.isDuet&&this.element.classList.add(this.lyricPlayer.style.classes.lyricDuetLine),this.element.appendChild(document.createElement("div")),this.element.appendChild(document.createElement("div")),this.element.appendChild(document.createElement("div"));const n=this.element.children[0],i=this.element.children[1],l=this.element.children[2];n.setAttribute("class",this.lyricPlayer.style.classes.lyricMainLine),i.setAttribute("class",this.lyricPlayer.style.classes.lyricSubLine),l.setAttribute("class",this.lyricPlayer.style.classes.lyricSubLine),this.rebuildElement(),this.rebuildStyle()}element=document.createElement("div");left=0;top=0;scale=1;blur=0;delay=0;splittedWords=[];lineSize=[0,0];lineTransforms={posX:new S(0),posY:new S(0),scale:new S(1)};isEnabled=!1;enable(){this.isEnabled=!0,this.element.classList.add("active");const e=this.element.children[0];this.splittedWords.forEach(t=>{t.elementAnimations.forEach(n=>{n.currentTime=0,n.playbackRate=1,n.play()})}),e.classList.add("active")}measureSize(){this._hide&&(this.element.style.display="",this.element.style.visibility="hidden");const e=[this.element.clientWidth,this.element.clientHeight];return this._hide&&(this.element.style.display="none",this.element.style.visibility=""),e}disable(){this.isEnabled=!1,this.element.classList.remove("active");const e=this.element.children[0];this.splittedWords.forEach(t=>{t.elementAnimations.forEach(n=>{n.id==="float-word"&&(n.playbackRate=-1,n.play())})}),e.classList.remove("active")}setLine(e){this.lyricLine=e,this.lyricLine.isBG?this.element.classList.add(this.lyricPlayer.style.classes.lyricBgLine):this.element.classList.remove(this.lyricPlayer.style.classes.lyricBgLine),this.lyricLine.isDuet?this.element.classList.add(this.lyricPlayer.style.classes.lyricDuetLine):this.element.classList.remove(this.lyricPlayer.style.classes.lyricDuetLine),this.rebuildElement(),this.rebuildStyle()}getLine(){return this.lyricLine}_hide=!0;lastStyle="";show(){this._hide=!1,this.rebuildStyle()}hide(){this._hide=!0,this.rebuildStyle()}rebuildStyle(){if(this._hide){this.lastStyle!=="display:none;transform:translate(0,-10000px);"&&(this.lastStyle="display:none;transform:translate(0,-10000px);",this.element.setAttribute("style","display:none;transform:translate(0,-10000px);"));return}let e=`transform:translate(${this.lineTransforms.posX.getCurrentPosition()}px,${this.lineTransforms.posY.getCurrentPosition()}px) scale(${this.lineTransforms.scale.getCurrentPosition()});`;!this.lyricPlayer.getEnableSpring()&&this.isInSight&&(e+=`transition-delay:${this.delay}ms;`),e+=`filter:blur(${Math.min(32,this.blur)}px);`,e!==this.lastStyle&&(this.lastStyle=e,this.element.setAttribute("style",e))}rebuildElement(){const e=this.element.children[0],t=this.element.children[1],n=this.element.children[2];if(this.lyricPlayer._getIsNonDynamic()){for(;e.firstChild;)e.removeChild(e.firstChild),s(e.firstChild);e.innerText=this.lyricLine.words.map(a=>a.word).join(""),t.innerText=this.lyricLine.translatedLyric,n.innerText=this.lyricLine.romanLyric;return}this.splittedWords=[],this.lyricLine.words.forEach(a=>{const o=a.word.split(/\s+/),c=o.reduce((u,f)=>u+f.length,0);let d=0;o.forEach((u,f)=>{f>0&&this.splittedWords.push({word:" ",startTime:0,endTime:0,width:0,height:0,elements:[],elementAnimations:[],shouldEmphasize:!1}),this.splittedWords.push({word:u,startTime:a.startTime+(a.endTime-a.startTime)/c*d,endTime:a.startTime+(a.endTime-a.startTime)/c*(d+u.length),width:0,height:0,elements:[],elementAnimations:[],shouldEmphasize:x(a)}),d+=u.length})});const i=[],l=[];function s(a){for(;a.firstChild;)a.firstChild.nodeType===Node.ELEMENT_NODE?i.push(e.firstChild):a.firstChild.nodeType===Node.TEXT_NODE&&l.push(e.firstChild),a.removeChild(a.firstChild),s(a.firstChild)}s(e);let r=null;this.splittedWords.forEach(a=>{if(a.word.trim().length>0)if(a.shouldEmphasize){const o=i.pop()??document.createElement("span");o.className="emphasize",a.elements=[o];for(const c of a.word){const d=i.pop()??document.createElement("span");d.className="",d.innerText=c,o.appendChild(d),a.elements.push(d)}if(a.elementAnimations=this.initEmphasizeAnimation(a),r&&!v.test(a.word))if(r.childElementCount>0)r.appendChild(o);else{const c=i.pop()??document.createElement("span");c.className="",r.remove(),c.appendChild(r),c.appendChild(o),e.appendChild(c),r=c}else r=v.test(a.word)?null:o,e.appendChild(o)}else{const o=i.pop()??document.createElement("span");if(o.className="",o.innerText=a.word,a.elements=[o],a.elementAnimations.push(this.initFloatAnimation(a,o)),r)if(r.childElementCount>0)r.appendChild(o);else{const c=i.pop()??document.createElement("span");c.className="",r.remove(),c.appendChild(r),c.appendChild(o),e.appendChild(c),r=c}else r=o,e.appendChild(o)}else if(a.word.length>0){const o=l.pop()??document.createTextNode(" ");e.appendChild(o),r=null}else r=null}),t.innerText=this.lyricLine.translatedLyric,n.innerText=this.lyricLine.romanLyric}initFloatAnimation(e,t){const n=e.startTime-this.lyricLine.startTime,i=Math.max(1e3,e.endTime-e.startTime),l=t.animate([{transform:"translateY(0px)"},{transform:"translateY(-3%)"}],{duration:isFinite(i)?i:0,delay:isFinite(n)?n:0,id:"float-word",composite:"add",fill:"both"});return l.pause(),l}initEmphasizeAnimation(e){const t=e.startTime-this.lyricLine.startTime,n=e.endTime-e.startTime;return e.elements.map((i,l,s)=>{if(l===0)return this.initFloatAnimation(e,i);{const r=Math.max(1e3,e.endTime-e.startTime),a=t+n/(s.length-1)*(l-1),o=i.animate([{offset:0,transform:"translate3d(0, 0px, 0px)",filter:"drop-shadow(0 0 0 var(--amll-lyric-view-color,white))"},{offset:.5,transform:"translate3d(0, -2%, 20px)",filter:"drop-shadow(0 0 0.05em var(--amll-lyric-view-color,white))"},{offset:1,transform:"translate3d(0, 0px, 0)",filter:"drop-shadow(0 0 0 var(--amll-lyric-view-color,white))"}],{duration:isFinite(r)?r:0,delay:isFinite(a)?a:0,id:"glow-word",iterations:1,composite:"replace",fill:"both"});return o.pause(),o}})}updateMaskImage(){this._hide&&(this.element.style.display="",this.element.style.visibility="hidden"),this.splittedWords.forEach(e=>{const t=e.elements[0];if(t){e.width=t.clientWidth,e.height=t.clientHeight;const[n,i,l]=G(16/e.width,"rgba(0,0,0,0.75)","rgba(0,0,0,0.25)"),s=`${l*100}% 100%`;this.lyricPlayer.supportMaskImage?(t.style.maskImage=n,t.style.maskOrigin="left",t.style.maskSize=s):(t.style.webkitMaskImage=n,t.style.webkitMaskOrigin="left",t.style.webkitMaskSize=s);const r=e.width+16,a=`clamp(${-r}px,calc(${-r}px + (var(--amll-player-time) - ${e.startTime})*${r/Math.abs(e.endTime-e.startTime)}px),0px) 0px, left top`;t.style.maskPosition=a,t.style.webkitMaskPosition=a}}),this._hide&&(this.element.style.display="none",this.element.style.visibility="")}getElement(){return this.element}setTransform(e=this.left,t=this.top,n=this.scale,i=1,l=0,s=!1,r=0){this.left=e,this.top=t,this.scale=n,this.delay=r*1e3|0;const a=this.element.children[0];a.style.opacity=`${i}`,s||!this.lyricPlayer.getEnableSpring()?(this.blur=Math.min(32,l),s&&this.element.classList.add(this.lyricPlayer.style.classes.tmpDisableTransition),this.lineTransforms.posX.setPosition(e),this.lineTransforms.posY.setPosition(t),this.lineTransforms.scale.setPosition(n),this.lyricPlayer.getEnableSpring()?this.rebuildStyle():this.show(),s&&requestAnimationFrame(()=>{this.element.classList.remove(this.lyricPlayer.style.classes.tmpDisableTransition)})):(this.lineTransforms.posX.setTargetPosition(e,r),this.lineTransforms.posY.setTargetPosition(t,r),this.lineTransforms.scale.setTargetPosition(n),this.blur!==Math.min(32,l)&&(this.blur=Math.min(32,l),this.element.style.filter=`blur(${Math.min(32,l)}px)`))}update(e=0){this.lyricPlayer.getEnableSpring()&&(this.lineTransforms.posX.update(e),this.lineTransforms.posY.update(e),this.lineTransforms.scale.update(e),this.isInSight?this.show():this.hide())}get isInSight(){const e=this.lineTransforms.posX.getCurrentPosition(),t=this.lineTransforms.posY.getCurrentPosition(),n=e+this.lineSize[0],i=t+this.lineSize[1],l=this.lyricPlayer.pos[0],s=this.lyricPlayer.pos[1],r=this.lyricPlayer.pos[0]+this.lyricPlayer.size[0],a=this.lyricPlayer.pos[1]+this.lyricPlayer.size[1];return!(e>r||t>a||n<l||i<s)}dispose(){this.element.remove()}}const j=D.create(A());class H extends EventTarget{element=document.createElement("div");currentTime=0;lyricLines=[];processedLines=[];lyricLinesEl=[];lyricLinesSize=new Map;hotLines=new Set;bufferedLines=new Set;scrollToIndex=0;allowScroll=!0;scrolledHandler=0;isScrolled=!1;invokedByScrollEvent=!1;scrollOffset=0;resizeObserver=new ResizeObserver(e=>{const t=e[0].contentRect;this.size[0]=t.width,this.size[1]=t.height,this.pos[0]=t.left,this.pos[1]=t.top;const n=getComputedStyle(e[0].target),i=this.element.clientWidth-parseFloat(n.paddingLeft)-parseFloat(n.paddingRight),l=this.element.clientHeight-parseFloat(n.paddingTop)-parseFloat(n.paddingBottom);this.innerSize[0]=i,this.innerSize[1]=l,this.rebuildStyle(),this.calcLayout(!0,!0),this.lyricLinesEl.forEach(s=>s.updateMaskImage())});posXSpringParams={mass:1,damping:10,stiffness:100};posYSpringParams={mass:1,damping:15,stiffness:100};scaleSpringParams={mass:1,damping:20,stiffness:100};enableBlur=!0;interludeDots;interludeDotsSize=[0,0];bottomLine;supportPlusLighter=CSS.supports("mix-blend-mode","plus-lighter");supportMaskImage=CSS.supports("mask-image","none");disableSpring=!1;alignAnchor="center";alignPosition=.5;isNonDynamic=!1;size=[0,0];innerSize=[0,0];pos=[0,0];_getIsNonDynamic(){return this.isNonDynamic}setEnableSpring(e=!0){this.disableSpring=!e,e?this.element.classList.remove(this.style.classes.disableSpring):this.element.classList.add(this.style.classes.disableSpring),this.calcLayout(!0)}getEnableSpring(){return!this.disableSpring}style=j.createStyleSheet({lyricPlayer:{userSelect:"none",fontSize:"var(--amll-lyric-player-font-size,max(5vh, 12px))",padding:"1em",margin:"-1em",width:"100%",height:"100%",overflow:"hidden",maxWidth:"100%",maxHeight:"100%",zIndex:1,color:"var(--amll-lyric-view-color,white)",mixBlendMode:"plus-lighter",contain:"strict"},lyricLine:{position:"absolute",transformOrigin:"left",maxWidth:"var(--amll-lyric-player-width,100%)",minWidth:"var(--amll-lyric-player-width,100%)",width:"var(--amll-lyric-player-width,100%)",padding:"2vh 0.05em",contain:"content",willChange:"filter,transform,opacity",transition:"filter 0.25s",boxSizing:"border-box"},"@media (max-width: 1024px)":{lyricLine:{padding:"1vh 0"}},lyricDuetLine:{textAlign:"right",transformOrigin:"right"},lyricBgLine:{opacity:0,fontSize:"max(50%, 10px)",transition:"opacity 0.25s","&.active":{transition:"opacity 0.25s 0.25s",opacity:.75}},lyricMainLine:{transition:"opacity 0.3s 0.25s",willChange:"opacity",margin:"-1em",padding:"1em","& span":{display:"inline-block"},"& > span":{whiteSpace:"pre-wrap",wordBreak:"keep-all",maxLines:"1","&.emphasize":{transformStyle:"preserve-3d",perspective:"50vw",padding:"1em",margin:"-1em"}}},lyricSubLine:{fontSize:"max(50%, 10px)",opacity:.5},disableSpring:{"& > *":{transition:"filter 0.25s, transform 0.5s"}},interludeDots:{height:"clamp(0.5em,1vh,3em)",transformOrigin:"center",width:"fit-content",padding:"2.5% 0",position:"absolute",display:"flex",gap:"0.25em",left:"1em","& > *":{height:"100%",display:"inline-block",borderRadius:"50%",aspectRatio:"1 / 1",backgroundColor:"var(--amll-lyric-view-color,white)",marginRight:"4px"},"&.duet":{right:"1em",transformOrigin:"center"}},"@supports (mix-blend-mode: plus-lighter)":{lyricSubLine:{opacity:.3}},tmpDisableTransition:{transition:"none !important"}});onPageShow=()=>{this.calcLayout(!0,!0)};constructor(){super(),this.interludeDots=new Y(this),this.bottomLine=new X(this),this.element.setAttribute("class",this.style.classes.lyricPlayer),this.disableSpring&&this.element.classList.add(this.style.classes.disableSpring),this.rebuildStyle(),this.resizeObserver.observe(this.element),this.element.appendChild(this.interludeDots.getElement()),this.element.appendChild(this.bottomLine.getElement()),this.style.attach(),this.interludeDots.setTransform(0,200),window.addEventListener("pageshow",this.onPageShow),this.element.addEventListener("wheel",e=>{this.allowScroll&&(this.isScrolled=!0,clearTimeout(this.scrolledHandler),this.scrolledHandler=setTimeout(()=>{this.isScrolled=!1,this.scrollOffset=0},5e3),this.invokedByScrollEvent=!0,e.deltaMode===e.DOM_DELTA_PIXEL?(this.scrollOffset+=e.deltaY,this.calcLayout(!0)):(this.scrollOffset+=e.deltaY*50,this.calcLayout(!1)),this.invokedByScrollEvent=!1)})}getCurrentInterlude(){if(this.bufferedLines.size>0)return;const e=this.currentTime+20,t=this.scrollToIndex;if(t===0){if(this.processedLines[0]?.startTime&&this.processedLines[0].startTime>e)return[e,this.processedLines[0].startTime,-2,this.processedLines[0].isDuet]}else if(this.processedLines[t]?.endTime&&this.processedLines[t+1]?.startTime&&this.processedLines[t+1].startTime>e&&this.processedLines[t].endTime<e)return[Math.max(this.processedLines[t].endTime,e),this.processedLines[t+1].startTime,t,this.processedLines[t+1].isDuet]}rebuildStyle(){let e="";e+="--amll-lyric-player-width:",e+=this.innerSize[0],e+="px;",e+="--amll-lyric-player-height:",e+=this.innerSize[1],e+="px;",e+="--amll-player-time:",e+=this.currentTime,e+=";",this.element.setAttribute("style",e)}setEnableBlur(e){this.enableBlur!==e&&(this.enableBlur=e,this.calcLayout())}setLyricLines(e){this.lyricLines=e;const t=750;this.processedLines=e.filter(i=>i.words.reduce((l,s)=>l+s.word.trim().length,0)>0).map((i,l,s)=>{if(i.isBG)return{...i};{const r=s[l-1],a=s[l-2];if(r?.isBG&&a){if(a.endTime<i.startTime)return{...i,startTime:Math.max(a.endTime,i.startTime-t)||i.startTime}}else if(r?.endTime&&r.endTime<i.startTime)return{...i,startTime:Math.max(r?.endTime,i.startTime-t)||i.startTime};return{...i}}}),this.isNonDynamic=!0;for(const i of this.processedLines)if(i.words.length>1){this.isNonDynamic=!1;break}this.processedLines.forEach((i,l,s)=>{const r=s[l+1],a=i.words[i.words.length-1];a&&x(a)&&(r?r.startTime>i.endTime&&(i.endTime=Math.min(i.endTime+1500,r.startTime)):i.endTime=i.endTime+1500)}),this.processedLines.forEach((i,l,s)=>{if(i.isBG)return;const r=s[l+1];r?.isBG&&(r.startTime=Math.min(r.startTime,i.startTime))});const n=this.lyricLinesEl;for(this.lyricLinesEl=this.processedLines.map((i,l)=>this.lyricLinesEl[l]??new V(this,i));n.length>this.processedLines.length;)n.pop()?.dispose();this.lyricLinesEl.forEach(i=>{this.element.appendChild(i.getElement()),i.updateMaskImage()}),this.interludeDots.setInterlude(void 0),this.hotLines.clear(),this.bufferedLines.clear(),this.setLinePosXSpringParams({}),this.setLinePosYSpringParams({}),this.setLineScaleSpringParams({}),this.setCurrentTime(0,!0),this.calcLayout(!0,!0)}calcLayout(e=!1,t=!1){t&&(this.lyricLinesEl.forEach(m=>{const p=m.measureSize();this.lyricLinesSize.set(m,p),m.lineSize=p}),this.interludeDotsSize[0]=this.interludeDots.getElement().clientWidth,this.interludeDotsSize[1]=this.interludeDots.getElement().clientHeight,this.bottomLine.lineSize=this.bottomLine.measureSize());const n=this.getCurrentInterlude();let i=-this.scrollOffset,l=this.scrollToIndex,s=0;n?(s=n[1]-n[0],s>=5e3&&this.lyricLinesEl[n[2]+1]&&(l=n[2]+1)):this.interludeDots.setInterlude(void 0);const r=.95,a=this.lyricLinesEl.slice(0,l).reduce((m,p)=>m+(p.getLine().isBG?0:this.lyricLinesSize.get(p)?.[1]??0),0);i-=a,i+=this.size[1]*this.alignPosition;const o=this.lyricLinesEl[l];if(o){const m=this.lyricLinesSize.get(o)?.[1]??0;switch(this.alignAnchor){case"bottom":i-=m;break;case"center":i-=m/2;break}}const c=Math.max(...this.bufferedLines);let d=0,u=.05,f=!1;this.lyricLinesEl.forEach((m,p)=>{const L=this.bufferedLines.has(p),b=L||p>=this.scrollToIndex&&p<c,P=m.getLine();P.isDuet&&this.size[0]-(this.lyricLinesSize.get(m)?.[0]??0),!f&&s>=5e3&&(p===this.scrollToIndex&&n?.[2]===-2||p===this.scrollToIndex+1)&&(f=!0,this.interludeDots.setTransform(32,i),n&&this.interludeDots.setInterlude([n[0],n[1]]),i+=this.interludeDotsSize[1]),m.setTransform(0,i,b?1:r,L?1:1/3,!this.invokedByScrollEvent&&this.enableBlur?b?0:1+(p<this.scrollToIndex?Math.abs(this.scrollToIndex-p):Math.abs(p-Math.max(this.scrollToIndex,c))):0,e,d),P.isBG&&b?i+=this.lyricLinesSize.get(m)?.[1]??0:P.isBG||(i+=this.lyricLinesSize.get(m)?.[1]??0),i>=0&&(d+=u,u/=1.2)}),this.bottomLine.setTransform(0,i,e,d)}getCurrentTime(){return this.currentTime}getLyricLines(){return this.lyricLines}getElement(){return this.element}getBottomLineElement(){return this.bottomLine.getElement()}setAlignAnchor(e){this.alignAnchor=e}setAlignPosition(e){this.alignPosition=e}setCurrentTime(e,t=!1){if(this.currentTime=e,this.element.style.setProperty("--amll-player-time",`${e}`),this.isScrolled)return;const n=new Set,i=new Set,l=new Set;this.hotLines.forEach(s=>{const r=this.processedLines[s];if(r){if(r.isBG)return;const a=this.processedLines[s+1];if(a?.isBG){const o=Math.min(r.startTime,a?.startTime),c=Math.max(r.endTime,a?.endTime);(o>e||c<=e)&&(this.hotLines.delete(s),n.add(s),this.hotLines.delete(s+1),n.add(s+1),t&&(this.lyricLinesEl[s].disable(),this.lyricLinesEl[s+1].disable()))}else(r.startTime>e||r.endTime<=e)&&(this.hotLines.delete(s),n.add(s),t&&this.lyricLinesEl[s].disable())}else this.hotLines.delete(s),n.add(s),t&&this.lyricLinesEl[s].disable()}),this.processedLines.forEach((s,r,a)=>{!s.isBG&&s.startTime<=e&&s.endTime>e&&(this.hotLines.has(r)||(this.hotLines.add(r),l.add(r),t&&this.lyricLinesEl[r].enable(),a[r+1]?.isBG&&(this.hotLines.add(r+1),l.add(r+1),t&&this.lyricLinesEl[r+1].enable())))}),this.bufferedLines.forEach(s=>{this.hotLines.has(s)||(i.add(s),t&&this.lyricLinesEl[s].disable())}),t?(this.bufferedLines.size>0?this.scrollToIndex=Math.min(...this.bufferedLines):this.scrollToIndex=this.processedLines.findIndex(s=>s.startTime>=e),this.bufferedLines.clear(),this.hotLines.forEach(s=>this.bufferedLines.add(s)),this.calcLayout(!0)):(i.size>0||l.size>0)&&(i.size===0&&l.size>0?(l.forEach(s=>{this.bufferedLines.add(s),this.lyricLinesEl[s].enable()}),this.scrollToIndex=Math.min(...this.bufferedLines)):l.size===0&&i.size>0?O(i,this.bufferedLines)&&this.bufferedLines.forEach(s=>{this.hotLines.has(s)||(this.bufferedLines.delete(s),this.lyricLinesEl[s].disable())}):(l.forEach(s=>{this.bufferedLines.add(s),this.lyricLinesEl[s].enable()}),i.forEach(s=>{this.bufferedLines.delete(s),this.lyricLinesEl[s].disable()}),this.bufferedLines.size>0&&(this.scrollToIndex=Math.min(...this.bufferedLines))),this.calcLayout())}update(e=0){const t=e/1e3;this.interludeDots.update(e),this.bottomLine.update(t),this.lyricLinesEl.forEach(n=>n.update(t))}setLinePosXSpringParams(e){this.posXSpringParams={...this.posXSpringParams,...e},this.bottomLine.lineTransforms.posX.updateParams(this.posXSpringParams),this.lyricLinesEl.forEach(t=>t.lineTransforms.posX.updateParams(this.posXSpringParams))}setLinePosYSpringParams(e){this.posYSpringParams={...this.posYSpringParams,...e},this.bottomLine.lineTransforms.posY.updateParams(this.posYSpringParams),this.lyricLinesEl.forEach(t=>t.lineTransforms.posY.updateParams(this.posYSpringParams))}setLineScaleSpringParams(e){this.scaleSpringParams={...this.scaleSpringParams,...e},this.lyricLinesEl.forEach(t=>t.lineTransforms.scale.updateParams(this.scaleSpringParams))}dispose(){this.element.remove(),this.resizeObserver.disconnect(),this.style.detach(),this.lyricLinesEl.forEach(e=>e.dispose()),window.removeEventListener("pageshow",this.onPageShow),this.bottomLine.dispose(),this.interludeDots.dispose()}}exports.BackgroundRender=N;exports.LyricPlayer=H;exports.ttml=k;
2
2
  //# sourceMappingURL=amll-core.js.map