{"version":3,"file":"amll-react-framework.cjs","names":["FC","HTMLProps","useEffect","useLayoutEffect","useRef","AudioFFTVisualizer","fftData","HTMLCanvasElement","t0","$","_c","props","canvasRef","fftDataRef","undefined","current","t1","t2","t3","t4","Symbol","for","canvas","ctx","getContext","targetSize","width","height","obs","ResizeObserver","sizes","size","contentRect","window","devicePixelRatio","observe","maxValue","stopped","buf","resampleLinear","src","dstLen","n","length","slice","out","Array","scale","Math","max","i","x","x0","floor","x1","min","t","onFrame","processed","i_0","t_0","clearRect","beginPath","dpr","desiredSpacing","desiredCount","lineCount","display","targetMaxValue","apply","len","barWidth","strokeStyle","lineWidth","lineCap","lineJoin","barBeginY","i_1","x_0","moveTo","norm","lineTo","stroke","requestAnimationFrame","disconnect","t5","classNames","motion","Variants","forwardRef","HTMLProps","memo","NamedExoticComponent","RefAttributes","IconDolbyAtmos","LoselessIcon","styles","COMMON_VARIENTS","hide","opacity","scale","transition","duration","ease","show","hover","active","DOLBY_VARIENTS","AudioQualityTagProps","isDolbyAtmos","tagText","tagIcon","HTMLDivElement","AudioQualityTag","Omit","t0","ref","$","_c","className","onClick","rest","t1","clickable","t2","audioQualityTag","t3","undefined","dolbyLogo","dolbyLogoGlow","commonTag","commonTagText","t4","classNames","animate","motion","PanInfo","useAnimationFrame","useMotionTemplate","useMotionValue","useSpring","useTransform","React","useEffect","useRef","styles","SliderProps","className","style","CSSProperties","value","min","max","isPlaying","onChange","v","onAfterChange","onBeforeChange","onSeeking","beforeIcon","ReactNode","afterIcon","changeOnDrag","MAX_HEIGHT","MIN_HEIGHT","INITIAL_INSET","MAX_BOUNCE_DISTANCE","BouncingSlider","FC","containerRef","HTMLDivElement","innerRef","rectRef","DOMRect","isHoveringRef","progressMv","scaleX","insetMv","clipPath","bounceXSpring","damping","stiffness","isDraggingRef","localTimeRef","current","newProgress","Math","set","_time","delta","expand","type","ease","duration","collapse","handlePanStart","_event","MouseEvent","TouchEvent","PointerEvent","getBoundingClientRect","handlePan","info","rect","relPos","point","x","left","width","tanh","clampedPos","NewValue","handlePanEnd","handleHoverStart","handleHoverEnd","handleTap","nowPlayingSlider","inner","thumb","originX","classNames","motion","FC","HTMLProps","useRef","useState","styles","ControlThumb","onClick","HTMLDivElement","t0","$","_c","className","rest","containerRef","hoveringRef","t1","Symbol","for","x","y","thumbOffset","setThumbOffset","t2","e","container","current","rect","getBoundingClientRect","left","clientX","top","clientY","Math","abs","onMouseMove","t3","controlThumb","t4","width","height","hover","t5","t6","scale","t10","t7","t8","t9","type","duration","evt","nativeEvent","evt_0","t11","marginTop","marginLeft","rotate","t12","t13","t14","classNames","Squircle","ForwardRefExoticComponent","forwardRef","HTMLProps","RefAttributes","useEffect","useLayoutEffect","useMemo","useRef","useState","styles","CoverProps","coverUrl","coverIsVideo","coverVideoPaused","musicPaused","pauseShrinkAspect","HTMLDivElement","Cover","t0","ref","$","_c","className","rest","frameRef","t1","t2","cover","clsNames","videoRef","t3","t4","videoEl","current","pause","play","cornerRadius","setCornerRadius","t5","t6","Symbol","for","frameEl","onResize","size","Math","min","clientWidth","clientHeight","max","window","innerHeight","obz","ResizeObserver","observe","disconnect","t7","t8","t9","React","CSSProperties","t10","node","t11","coverInner","backgroundImage","t12","t13","classNames","ComponentProps","FC","memo","useState","styles","MediaButton","t0","$","_c","children","className","onAnimationEnd","onClick","rest","t1","type","undefined","isAnimating","setIsAnimating","t2","e","handleClick","t3","e_0","handleAnimationEnd","t4","mediaButton","animate","t5","classNames","HTMLProps","memo","IconMore","styles","MenuButton","React","FC","HTMLButtonElement","t0","$","_c","className","rest","t1","type","t2","menuButton","Symbol","for","t3","classNames","FC","HTMLProps","PropsWithChildren","memo","useRef","styles","TextMarquee","HTMLDivElement","t0","$","_c","children","className","rest","outerDiv","innerDiv","t1","Symbol","for","Set","currentAnimationsRef","t2","current","outerWidth","clientWidth","innerWidth","classList","add","animating","distance","ani","animate","transform","iterations","direction","easing","duration","Math","max","finished","then","remove","onMouseEnter","t3","ani_0","finish","clear","onMouseLeave","t4","textMarquee","t5","t6","classNames","HTMLProps","memo","MenuButton","TextMarquee","styles","MusicInfo","React","FC","name","artists","album","onArtistClicked","artist","index","onAlbumClicked","onMenuButtonClicked","HTMLDivElement","t0","$","_c","className","rest","t1","t2","t3","t4","t5","t6","musicInfo","undefined","map","_temp","info","t7","v","classnames","motion","React","HTMLProps","styles","HorizontalLayout","FC","thumbSlot","ReactNode","coverSlot","controlsSlot","lyricSlot","backgroundSlot","bottomControls","hideLyric","asChild","HTMLDivElement","t0","$","_c","className","rest","t1","horizontalLayout","t2","t3","t4","thumb","t5","cover","t6","controls","t7","lyric","t8","t9","classNames","MotionProps","motion","Target","React","HTMLProps","useCallback","useLayoutEffect","useRef","useState","styles","VerticalLayout","FC","thumbSlot","ReactNode","smallControlsSlot","bigControlsSlot","coverSlot","lyricSlot","asChild","hideLyric","immerseCover","HTMLDivElement","className","rest","rootRef","phonyBigCoverRef","phonySmallCoverRef","coverFrameRef","hideLyricRef","immerseCoverRef","currentCoverStyle","setCurrentCoverStyle","undefined","calcCoverLayout","current","rootEl","HTMLElement","targetCover","getComputedStyle","display","parentElement","rootB","getBoundingClientRect","targetCoverB","halfHeight","top","height","targetCoverSize","Math","max","width","min","clientWidth","clientHeight","targetCoverLeft","x","targetCoverTop","y","left","phonyBigCoverEl","phonySmallCoverEl","obz","ResizeObserver","observe","init","disconnect","verticalLayout","thumb","lyricLayout","phonySmallCover","smallControls","lyric","noLyricLayout","phonyBigCover","bigControls","coverFrame","type","stiffness","damping","React","HTMLProps","useCallback","useLayoutEffect","useRef","useState","styles","HorizontalLayout","VerticalLayout","AutoLyricLayout","FC","thumbSlot","ReactNode","controlsSlot","horizontalBottomControls","smallControlsSlot","bigControlsSlot","coverSlot","lyricSlot","backgroundSlot","hideLyric","verticalImmerseCover","onLayoutChange","isVertical","onElementMounted","node","HTMLDivElement","t0","$","_c","rest","setIsVertical","rootRef","t1","current","setRefs","t2","t3","Symbol","for","rootEl","clientWidth","clientHeight","obz","ResizeObserver","rootB","getBoundingClientRect","width","height","observe","disconnect","t4","t5","t6","background","t7","t8","toDuration","duration","isRemainTime","d","Math","abs","sec","min","floor","secText","repeat","toString","length","PrebuiltToggleIconButtonType","Lyrics","Playlist","Repeat","Shuffle","Star","AirPlay","classNames","FC","HTMLProps","memo","ReactNode","airplayIcon","styles","lyricsOffIcon","lyricsOnIcon","playlistOffIcon","playlistOnIcon","PrebuiltToggleIconButtonType","repeatOffIcon","repeatOnNormalIcon","shuffleOffIcon","shuffleOnIcon","starIcon","starFilledIcon","ToggleIconButton","uncheckedIcon","checkedIcon","checked","Omit","HTMLButtonElement","t0","$","_c","className","rest","t1","toggleIconButton","t2","t3","IconComponent","PREBUILT_ICONS_MAP","Record","Lyrics","Playlist","Repeat","Shuffle","Star","AirPlay","PrebuiltToggleIconButton","type","onClick","UncheckedIcon","CheckedIcon","t4","React","useEffect","useRef","BouncingSlider","SliderProps","IconSpeaker","IconSpeaker3","styles","VolumeControl","FC","props","$","_c","lastValueRef","value","minSpeakerRef","maxSpeakerRef","t0","t1","max","min","current","classList","remove","speakerAnimate","requestAnimationFrame","add","t2","t3","Symbol","for","t4","volumeControl","LyricLineMouseEvent","LyricPlayerRef","atom","PrimitiveAtom","Callback","onEmit","args","Args","Result","c","_onEmit","onClickControlThumbAtom","globalThis","jotaiAtomCache","get","debugLabel","onClickAudioQualityTagAtom","onRequestOpenMenuAtom","onPlayOrResumeAtom","onRequestPrevSongAtom","onRequestNextSongAtom","onSeekPositionAtom","_position","onLyricLineClickAtom","_evt","_playerRef","onLyricLineContextMenuAtom","onChangeVolumeAtom","_volume","onToggleShuffleAtom","onCycleRepeatModeAtom","DomLyricPlayer","DomSlimLyricPlayer","LyricPlayerBase","MeshGradientRenderer","PixiRenderer","BackgroundRenderProps","atom","PrimitiveAtom","WritableAtom","atomWithStorage","RESET","PlayerControlsType","Controls","FFT","None","VerticalCoverLayout","Auto","ForceNormal","ForceImmersive","LyricPlayerImplementation","Dom","DomSlim","LyricSizePreset","Tiny","ExtraSmall","Small","Medium","Large","ExtraLarge","Huge","LyricPlayerImplementationObject","lyricPlayer","args","ConstructorParameters","getInitialPlayerImplementation","savedImpl","localStorage","getItem","lyricPlayerImplementationAtom","globalThis","jotaiAtomCache","get","debugLabel","enableLyricLineBlurEffectAtom","enableLyricLineScaleEffectAtom","enableLyricLineSpringAnimationAtom","enableLyricTranslationLineAtom","enableLyricRomanLineAtom","enableLyricSwapTransRomanLineAtom","lyricWordFadeWidthAtom","lyricFontFamilyAtom","lyricFontWeightAtom","lyricLetterSpacingAtom","lyricSizePresetAtom","playerControlsTypeAtom","showMusicNameAtom","verticalCoverLayoutAtom","showMusicArtistsAtom","showMusicAlbumAtom","showVolumeControlAtom","showBottomControlAtom","LyricBackgroundRenderer","renderer","getInitialBackgroundRenderer","savedRenderer","lyricBackgroundRendererAtom","cssBackgroundPropertyAtom","lyricBackgroundFPSAtom","lyricBackgroundRenderScaleAtom","lyricBackgroundStaticModeAtom","isLyricPageOpenedAtom","hideLyricViewAtom","showRemainingTimeAtom","fftDataRangeAtom","atom","PrimitiveAtom","WritableAtom","onCycleRepeatModeAtom","onToggleShuffleAtom","RepeatMode","Off","One","All","isShuffleActiveAtom","globalThis","jotaiAtomCache","get","debugLabel","repeatModeAtom","isShuffleEnabledAtom","isRepeatEnabledAtom","toggleShuffleActionAtom","callback","onEmit","cycleRepeatModeActionAtom","LyricLine","atom","PrimitiveAtom","WritableAtom","atomWithStorage","RESET","SongData","type","filePath","origOrder","id","songJsonData","ArtistStateEntry","name","AudioQualityType","None","Standard","Lossless","HiResLossless","DolbyAtmos","MusicQualityState","codec","channels","sampleRate","sampleFormat","musicIdAtom","globalThis","jotaiAtomCache","get","debugLabel","musicNameAtom","musicArtistsAtom","musicAlbumNameAtom","musicCoverAtom","musicCoverIsVideoAtom","musicDurationAtom","musicPlayingAtom","musicPlayingPositionAtom","musicVolumeAtom","undefined","getOnInit","musicLyricLinesAtom","musicQualityAtom","musicQualityTagAtom","tagIcon","tagText","isDolbyAtmos","fftDataAtom","lowFreqVolumeAtom","OptimizeLyricOptions","BackgroundRender","LyricPlayer","LyricPlayerRef","MeshGradientRenderer","PixiRenderer","structuredClone","classNames","AnimatePresence","LayoutGroup","atom","useAtom","useAtomValue","useSetAtom","FC","HTMLProps","useEffect","useLayoutEffect","useMemo","useRef","useState","AutoLyricLayout","toDuration","AudioFFTVisualizer","AudioQualityTag","BouncingSlider","ControlThumb","Cover","MediaButton","MusicInfo","PrebuiltToggleIconButton","PrebuiltToggleIconButtonType","VolumeControl","IconForward","IconPause","IconPlay","IconRewind","RepeatIcon","RepeatActiveIcon","RepeatOneActiveIcon","ShuffleIcon","ShuffleActiveIcon","React","onChangeVolumeAtom","onClickAudioQualityTagAtom","onClickControlThumbAtom","onLyricLineClickAtom","onLyricLineContextMenuAtom","onPlayOrResumeAtom","onRequestNextSongAtom","onRequestOpenMenuAtom","onRequestPrevSongAtom","onSeekPositionAtom","cssBackgroundPropertyAtom","enableLyricLineBlurEffectAtom","enableLyricLineScaleEffectAtom","enableLyricLineSpringAnimationAtom","enableLyricRomanLineAtom","enableLyricSwapTransRomanLineAtom","enableLyricTranslationLineAtom","hideLyricViewAtom","isLyricPageOpenedAtom","LyricSizePreset","lyricBackgroundFPSAtom","lyricBackgroundRendererAtom","lyricBackgroundRenderScaleAtom","lyricBackgroundStaticModeAtom","lyricFontFamilyAtom","lyricFontWeightAtom","lyricLetterSpacingAtom","lyricPlayerImplementationAtom","lyricSizePresetAtom","lyricWordFadeWidthAtom","PlayerControlsType","playerControlsTypeAtom","showBottomControlAtom","showMusicAlbumAtom","showMusicArtistsAtom","showMusicNameAtom","showRemainingTimeAtom","showVolumeControlAtom","VerticalCoverLayout","verticalCoverLayoutAtom","cycleRepeatModeActionAtom","isShuffleActiveAtom","RepeatMode","repeatModeAtom","toggleShuffleActionAtom","fftDataAtom","lowFreqVolumeAtom","musicAlbumNameAtom","musicArtistsAtom","musicCoverAtom","musicCoverIsVideoAtom","musicDurationAtom","musicLyricLinesAtom","musicNameAtom","musicPlayingAtom","musicPlayingPositionAtom","musicQualityTagAtom","musicVolumeAtom","styles","PrebuiltMusicInfo","className","style","CSSProperties","t0","$","_c","musicName","musicArtists","musicAlbum","onMenuClicked","onEmit","showMusicName","showMusicArtists","showMusicAlbum","fontFamily","fontWeight","letterSpacing","t1","undefined","t2","t3","t4","combinedStyle","t5","t6","map","_temp","t7","t8","PrebuiltMediaButtons","showOtherButtons","musicIsPlaying","onRequestPrevSong","onRequestNextSong","onPlayOrResume","isShuffleOn","currentRepeatMode","toggleShuffle","cycleRepeat","Symbol","for","width","height","iconStyle","One","All","renderRepeatIcon","songMediaButton","songMediaPlayButton","t9","t10","t11","TimeLabel","isRemaining","currentPosition","duration","time","TotalDurationLabel","manualSeekTriggerAtom","globalThis","jotaiAtomCache","get","timestamp","debugLabel","PrebuiltProgressBar","memo","musicDuration","musicPosition","musicQualityTag","onClickAudioQualityTag","onSeekPosition","setManualSeekTrigger","showRemaining","setShowRemaining","fontStyle","position","Date","now","handleSeek","qualityTag","isDolbyAtmos","tagText","tagIcon","cursor","userSelect","t12","t13","t14","progressBarLabels","t15","getLyricFontSizeFromPreset","preset","Tiny","ExtraSmall","Small","Large","ExtraLarge","Huge","PrebuiltCoreLyricPlayer","alignPosition","alignAnchor","bottomLine","ReactNode","optimizeOptions","amllPlayerRef","lyricLines","isLyricPageOpened","musicPlayingPosition","lyricFontFamily","lyricFontWeight","lyricLetterSpacing","lyricSizePreset","lyricPlayerImplementation","lyricPlayer","enableLyricLineBlurEffect","enableLyricLineScaleEffect","enableLyricLineSpringAnimation","lyricWordFadeWidth","enableLyricTranslationLine","enableLyricRomanLine","enableLyricSwapTransRomanLine","onLyricLineClick","onLyricLineContextMenu","manualSeekTrigger","processed","line","translatedLyric","line_0","romanLyric","line_1","processedLyricLines","current","setCurrentTime","evt","targetTime","getLine","startTime","evt_0","PrebuiltVolumeControl","musicVolume","onChangeVolume","showVolumeControl","PrebuiltMusicControls","HTMLDivElement","props","playerControlsType","fftData","controls","Controls","FFT","PrebuiltLyricPlayerProps","bottomLineSlot","PrebuiltLyricPlayer","rest","hideLyricView","setHideLyricView","musicCover","musicCoverIsVideo","lowFreqVolume","lyricBackgroundFPS","verticalCoverLayout","lyricBackgroundStaticMode","lyricBackgroundRenderScale","onClickControlThumb","isVertical","setIsVertical","setAlignPosition","setAlignAnchor","coverElRef","layoutEl","setLayoutEl","backgroundRenderer","showBottomControl","cssBackgroundProperty","obz","ResizeObserver","coverB","getBoundingClientRect","layoutB","top","observe","disconnect","verticalImmerseCover","Auto","ForceImmersive","autoLyricLayout","hideLyric","smallMusicInfo","renderer","zIndex","minWidth","minHeight","overflow","background","bigMusicInfo","bigControls","t16","display","justifyContent","Lyrics","AirPlay","Playlist","t17","bigVolumeControl","t18","t19","horizontalControls","t20","flex","t21","t22","v","name"],"sources":["../src/components/AudioFFTVisualizer/index.tsx","../src/components/AudioQualityTag/index.module.css","../src/components/AudioQualityTag/index.tsx","../src/components/BouncingSlider/index.module.css","../src/components/BouncingSlider/index.tsx","../src/components/ControlThumb/index.module.css","../src/components/ControlThumb/index.tsx","../src/components/Cover/index.module.css","../src/components/Cover/index.tsx","../src/components/MediaButton/index.module.css","../src/components/MediaButton/index.tsx","../src/components/MenuButton/index.module.css","../src/components/MenuButton/index.tsx","../src/components/TextMarquee/index.module.css","../src/components/TextMarquee/index.tsx","../src/components/MusicInfo/index.module.css","../src/components/MusicInfo/index.tsx","../src/layout/auto.module.css","../src/layout/horizontal.module.css","../src/layout/horizontal.tsx","../src/layout/vertical.module.css","../src/layout/vertical.tsx","../src/layout/auto.tsx","../src/utils/duration.ts","../src/components/ToggleIconButton/index.module.css","../src/components/ToggleIconButton/prebuilt-enum.ts","../src/components/ToggleIconButton/index.tsx","../src/components/VolumeControlSlider/index.module.css","../src/components/VolumeControlSlider/index.tsx","../src/states/callbacks.ts","../src/states/configAtoms.ts","../src/states/controlsAtoms.ts","../src/states/dataAtoms.ts","../src/components/PrebuiltLyricPlayer/index.module.css","../src/components/PrebuiltLyricPlayer/index.tsx","../src/index.ts"],"sourcesContent":["import {\n\ttype FC,\n\ttype HTMLProps,\n\tuseEffect,\n\tuseLayoutEffect,\n\tuseRef,\n} from \"react\";\n\nexport const AudioFFTVisualizer: FC<\n\t{\n\t\tfftData: number[];\n\t} & HTMLProps<HTMLCanvasElement>\n> = ({ fftData, ...props }) => {\n\tconst canvasRef = useRef<HTMLCanvasElement>(null);\n\tconst fftDataRef = useRef<number[]>(undefined);\n\tif (fftDataRef.current === undefined) {\n\t\tfftDataRef.current = fftData;\n\t}\n\n\tuseEffect(() => {\n\t\tfftDataRef.current = fftData;\n\t}, [fftData]);\n\n\tuseLayoutEffect(() => {\n\t\tconst canvas = canvasRef.current;\n\n\t\tif (canvas) {\n\t\t\tconst ctx = canvas.getContext(\"2d\");\n\t\t\tif (ctx) {\n\t\t\t\tlet targetSize = { width: 0, height: 0 };\n\t\t\t\tconst obs = new ResizeObserver((sizes) => {\n\t\t\t\t\tfor (const size of sizes) {\n\t\t\t\t\t\ttargetSize = {\n\t\t\t\t\t\t\twidth: size.contentRect.width * window.devicePixelRatio,\n\t\t\t\t\t\t\theight: size.contentRect.height * window.devicePixelRatio,\n\t\t\t\t\t\t};\n\t\t\t\t\t}\n\t\t\t\t});\n\n\t\t\t\tobs.observe(canvas);\n\n\t\t\t\tlet maxValue = 100;\n\t\t\t\tlet stopped = false;\n\n\t\t\t\tlet buf: number[] = [];\n\n\t\t\t\t// 线性重采样，将 src 重采样为指定长度\n\t\t\t\tfunction resampleLinear(src: number[], dstLen: number): number[] {\n\t\t\t\t\tconst n = src.length;\n\t\t\t\t\tif (dstLen <= 0 || n === 0) return [];\n\t\t\t\t\tif (n === dstLen) return src.slice();\n\t\t\t\t\tconst out = new Array(dstLen);\n\t\t\t\t\tconst scale = (n - 1) / Math.max(1, dstLen - 1);\n\t\t\t\t\tfor (let i = 0; i < dstLen; i++) {\n\t\t\t\t\t\tconst x = i * scale;\n\t\t\t\t\t\tconst x0 = Math.floor(x);\n\t\t\t\t\t\tconst x1 = Math.min(n - 1, x0 + 1);\n\t\t\t\t\t\tconst t = x - x0;\n\t\t\t\t\t\tout[i] = src[x0] * (1 - t) + src[x1] * t;\n\t\t\t\t\t}\n\t\t\t\t\treturn out;\n\t\t\t\t}\n\n\t\t\t\tfunction onFrame() {\n\t\t\t\t\tif (!(canvas && ctx) || stopped) return;\n\t\t\t\t\tconst width = canvas.width;\n\t\t\t\t\tconst height = canvas.height;\n\t\t\t\t\tif (targetSize.width !== width || targetSize.height !== height) {\n\t\t\t\t\t\tcanvas.width = targetSize.width;\n\t\t\t\t\t\tcanvas.height = targetSize.height;\n\t\t\t\t\t}\n\n\t\t\t\t\tconst processed = fftDataRef.current ?? [];\n\t\t\t\t\tif (buf.length !== processed.length) {\n\t\t\t\t\t\tbuf = [...processed];\n\t\t\t\t\t} else {\n\t\t\t\t\t\tfor (let i = 0; i < buf.length; i++) {\n\t\t\t\t\t\t\tlet t = processed[i];\n\t\t\t\t\t\t\tt = t * Math.min(((i + 5) / buf.length) * 4, 1);\n\t\t\t\t\t\t\tbuf[i] += t * 2;\n\t\t\t\t\t\t\tbuf[i] /= 3;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tctx.clearRect(0, 0, width, height);\n\t\t\t\t\t{\n\t\t\t\t\t\tctx.beginPath();\n\n\t\t\t\t\t\t// 根据画布宽度与 DPR 计算目标绘制条数\n\t\t\t\t\t\tconst dpr = window.devicePixelRatio || 1;\n\t\t\t\t\t\tconst desiredSpacing = 8 * dpr; // 目标线间距（设备像素）\n\t\t\t\t\t\tlet desiredCount = Math.floor(width / Math.max(1, desiredSpacing));\n\t\t\t\t\t\tdesiredCount = Math.max(8, desiredCount);\n\t\t\t\t\t\tconst lineCount =\n\t\t\t\t\t\t\tbuf.length > 0 ? Math.min(buf.length, desiredCount) : 0;\n\n\t\t\t\t\t\tconst display = lineCount > 0 ? resampleLinear(buf, lineCount) : [];\n\n\t\t\t\t\t\tconst targetMaxValue =\n\t\t\t\t\t\t\tdisplay.length > 0 ? Math.max.apply(Math, display) : 0;\n\t\t\t\t\t\tmaxValue = Math.max(targetMaxValue * 0.1 + maxValue * 0.9, 100);\n\n\t\t\t\t\t\tconst len = Math.max(1, display.length);\n\t\t\t\t\t\tconst barWidth = width / len; // 步长（中心点间距）\n\n\t\t\t\t\t\tctx.strokeStyle = \"white\";\n\t\t\t\t\t\tctx.lineWidth = 4 * dpr;\n\t\t\t\t\t\tctx.lineCap = \"round\";\n\t\t\t\t\t\tctx.lineJoin = \"round\";\n\n\t\t\t\t\t\tconst barBeginY = height - barWidth;\n\n\t\t\t\t\t\tfor (let i = 0; i < display.length; i++) {\n\t\t\t\t\t\t\tconst x = barWidth * (i + 0.5);\n\t\t\t\t\t\t\tctx.moveTo(x, barBeginY);\n\t\t\t\t\t\t\tconst norm = Math.min(1, Math.max(0, display[i] / maxValue));\n\t\t\t\t\t\t\tctx.lineTo(x, barBeginY - norm ** 2 * (height - barWidth * 2));\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tctx.stroke();\n\t\t\t\t\t}\n\n\t\t\t\t\trequestAnimationFrame(onFrame);\n\t\t\t\t}\n\n\t\t\t\tonFrame();\n\n\t\t\t\treturn () => {\n\t\t\t\t\tobs.disconnect();\n\t\t\t\t\tstopped = true;\n\t\t\t\t};\n\t\t\t}\n\t\t}\n\n\t\treturn;\n\t}, []);\n\n\treturn <canvas ref={canvasRef} {...props} />;\n};\n",".audioQualityTag {\n\toverflow: hidden;\n}\n\n@keyframes dolby-glow {\n\t0% {\n\t\topacity: 1;\n\t}\n\n\t100% {\n\t\topacity: 0;\n\t}\n}\n\n.dolbyLogoGlow {\n\tposition: absolute;\n\tfilter: blur(7px);\n\tmargin-top: 2.5px;\n\topacity: 1;\n\tanimation-name: dolby-glow;\n\tanimation-fill-mode: forwards;\n\tanimation-duration: 3s;\n\tanimation-timing-function: ease-in-out;\n\tanimation-delay: 1s;\n}\n\n.clickable {\n\tcursor: pointer;\n}\n\n.commonTag {\n\tposition: relative;\n\tdisplay: flex;\n\talign-items: center;\n\tpadding: 2px 5px;\n\tpadding-left: 0.1em;\n\tpadding-right: 0.52em;\n\tcolor: white;\n\tbox-sizing: border-box;\n\n\t&::before {\n\t\tposition: absolute;\n\t\tleft: 0;\n\t\ttop: 0;\n\t\twidth: 100%;\n\t\theight: 100%;\n\t\tcontent: \"\";\n\n\t\tborder-image-source: url(audio_quality_tag.svg);\n\t\tborder-image-slice: 15 fill;\n\t\tborder-image-width: 8.5px;\n\t\topacity: 0.2;\n\t}\n}\n\n.commonTagText {\n\tfont-family: -apple-system, BlinkMacSystemFont, \"SF Pro Text\", \"Pingfang SC\";\n\tfont-size: 11px;\n\tfont-weight: 500;\n\tletter-spacing: 0.01809em;\n\twhite-space: nowrap;\n}\n","import classNames from \"classnames\";\nimport { motion, type Variants } from \"framer-motion\";\nimport {\n\tforwardRef,\n\ttype HTMLProps,\n\tmemo,\n\ttype NamedExoticComponent,\n\ttype RefAttributes,\n} from \"react\";\nimport IconDolbyAtmos from \"./icon_dolby_atmos.svg?react\";\nimport LoselessIcon from \"./icon_loseless.svg?react\";\nimport styles from \"./index.module.css\";\n\nconst COMMON_VARIENTS: Variants = {\n\thide: {\n\t\topacity: 0,\n\t\tscale: 0.8,\n\t\ttransition: {\n\t\t\tduration: 0.25,\n\t\t\tease: \"circIn\",\n\t\t},\n\t},\n\tshow: {\n\t\topacity: 1,\n\t\tscale: 1,\n\t\ttransition: {\n\t\t\tduration: 1,\n\t\t\tease: [0, 0.71, 0.2, 1.01],\n\t\t},\n\t},\n\thover: {\n\t\tscale: 0.95,\n\t},\n\tactive: {\n\t\tscale: 0.9,\n\t},\n};\n\nconst DOLBY_VARIENTS: Variants = {\n\thide: {\n\t\topacity: 0,\n\t\tscale: 0.8,\n\t\ttransition: {\n\t\t\tduration: 0.25,\n\t\t\tease: \"circIn\",\n\t\t},\n\t},\n\tshow: {\n\t\topacity: [0, 1],\n\t\tscale: 1,\n\t\ttransition: {\n\t\t\tduration: 1,\n\t\t\tease: [0, 0.71, 0.2, 1.01],\n\t\t},\n\t},\n\thover: {\n\t\tscale: 0.95,\n\t},\n\tactive: {\n\t\tscale: 0.9,\n\t},\n};\n\nexport type AudioQualityTagProps = {\n\tisDolbyAtmos?: boolean;\n\ttagText?: string;\n\ttagIcon?: boolean;\n} & HTMLProps<HTMLDivElement>;\n\nexport const AudioQualityTag: NamedExoticComponent<\n\tOmit<AudioQualityTagProps, \"ref\"> & RefAttributes<HTMLDivElement>\n> = memo(\n\tforwardRef<HTMLDivElement, AudioQualityTagProps>(\n\t\t({ tagText, tagIcon, isDolbyAtmos, className, onClick, ...rest }, ref) => {\n\t\t\treturn (\n\t\t\t\t<div\n\t\t\t\t\tclassName={classNames(\n\t\t\t\t\t\tclassName,\n\t\t\t\t\t\tstyles.audioQualityTag,\n\t\t\t\t\t\tonClick && styles.clickable,\n\t\t\t\t\t)}\n\t\t\t\t\tonClick={onClick}\n\t\t\t\t\tref={ref}\n\t\t\t\t\t{...rest}\n\t\t\t\t>\n\t\t\t\t\t{isDolbyAtmos ? (\n\t\t\t\t\t\t<motion.div\n\t\t\t\t\t\t\tkey=\"dolby-atmos\"\n\t\t\t\t\t\t\tinitial=\"hide\"\n\t\t\t\t\t\t\tanimate=\"show\"\n\t\t\t\t\t\t\twhileHover={onClick ? \"hover\" : undefined}\n\t\t\t\t\t\t\twhileTap={onClick ? \"active\" : undefined}\n\t\t\t\t\t\t\texit=\"hide\"\n\t\t\t\t\t\t\tclassName={styles.dolbyLogo}\n\t\t\t\t\t\t\tvariants={DOLBY_VARIENTS}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<IconDolbyAtmos className={styles.dolbyLogoGlow} />\n\t\t\t\t\t\t\t<IconDolbyAtmos />\n\t\t\t\t\t\t</motion.div>\n\t\t\t\t\t) : (\n\t\t\t\t\t\t<motion.div\n\t\t\t\t\t\t\tkey={`common-tag-${tagIcon}-${tagText}`}\n\t\t\t\t\t\t\tinitial=\"hide\"\n\t\t\t\t\t\t\tanimate=\"show\"\n\t\t\t\t\t\t\twhileHover={onClick ? \"hover\" : undefined}\n\t\t\t\t\t\t\twhileTap={onClick ? \"active\" : undefined}\n\t\t\t\t\t\t\texit=\"hide\"\n\t\t\t\t\t\t\tvariants={COMMON_VARIENTS}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<div className={styles.commonTag}>\n\t\t\t\t\t\t\t\t{tagIcon && <LoselessIcon height=\"11px\" />}\n\t\t\t\t\t\t\t\t{tagText && (\n\t\t\t\t\t\t\t\t\t<div className={styles.commonTagText}>{tagText}</div>\n\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t</motion.div>\n\t\t\t\t\t)}\n\t\t\t\t</div>\n\t\t\t);\n\t\t},\n\t),\n);\n",".nowPlayingSlider {\n\ttouch-action: none;\n\tcursor: pointer;\n\tdisplay: flex;\n\tjustify-content: stretch;\n\talign-items: center;\n\tmin-height: 24px;\n\n\ttransform: translateZ(0);\n\n\t& > .inner {\n\t\tflex: 1;\n\t\twidth: 100%;\n\n\t\theight: 20px;\n\n\t\tbackground-color: #ffffff26;\n\n\t\t& > .thumb {\n\t\t\twidth: 100%;\n\t\t\theight: 100%;\n\t\t\tbackground-color: white;\n\t\t\topacity: 0.4;\n\t\t\ttransform-origin: left center;\n\t\t}\n\t}\n\n\t.nowPlayingSlider > svg {\n\t\topacity: 0.5;\n\t}\n}\n","import classNames from \"classnames\";\nimport {\n\tanimate,\n\tmotion,\n\ttype PanInfo,\n\tuseAnimationFrame,\n\tuseMotionTemplate,\n\tuseMotionValue,\n\tuseSpring,\n\tuseTransform,\n} from \"framer-motion\";\nimport type React from \"react\";\nimport { useEffect, useRef } from \"react\";\nimport styles from \"./index.module.css\";\n\nexport interface SliderProps {\n\tclassName?: string;\n\tstyle?: React.CSSProperties;\n\tvalue: number;\n\tmin: number;\n\tmax: number;\n\tisPlaying?: boolean;\n\tonChange?: (v: number) => void;\n\tonAfterChange?: (v: number) => void;\n\tonBeforeChange?: () => void;\n\tonSeeking?: (v: boolean) => void;\n\tbeforeIcon?: React.ReactNode;\n\tafterIcon?: React.ReactNode;\n\tchangeOnDrag?: boolean;\n}\n\nconst MAX_HEIGHT = 20;\nconst MIN_HEIGHT = 8;\nconst INITIAL_INSET = (MAX_HEIGHT - MIN_HEIGHT) / 2;\n\nconst MAX_BOUNCE_DISTANCE = 12;\n\nexport const BouncingSlider: React.FC<SliderProps> = ({\n\tclassName,\n\tstyle,\n\tvalue,\n\tmin,\n\tmax,\n\tisPlaying = false,\n\tonChange,\n\tonAfterChange,\n\tonBeforeChange,\n\tonSeeking,\n\tbeforeIcon,\n\tafterIcon,\n\tchangeOnDrag = false,\n}) => {\n\tconst containerRef = useRef<HTMLDivElement>(null);\n\tconst innerRef = useRef<HTMLDivElement>(null);\n\tconst rectRef = useRef<DOMRect | null>(null);\n\tconst isHoveringRef = useRef(false);\n\n\tconst progressMv = useMotionValue(0);\n\tconst scaleX = useTransform(progressMv, [0, 1], [0, 1]);\n\n\tconst insetMv = useMotionValue(INITIAL_INSET);\n\n\tconst clipPath = useMotionTemplate`inset(${insetMv}px 0px round 100px)`;\n\n\tconst bounceXSpring = useSpring(0, { damping: 12, stiffness: 300 });\n\n\tconst isDraggingRef = useRef(false);\n\tconst localTimeRef = useRef(value);\n\n\tuseEffect(() => {\n\t\tif (isDraggingRef.current) return;\n\n\t\tlocalTimeRef.current = value;\n\t\tconst newProgress = Math.max(0, Math.min(1, (value - min) / (max - min)));\n\t\tprogressMv.set(newProgress);\n\t}, [value, min, max, progressMv]);\n\n\tuseAnimationFrame((_time, delta) => {\n\t\tif (isPlaying && !isDraggingRef.current) {\n\t\t\tlocalTimeRef.current += delta;\n\n\t\t\tif (localTimeRef.current > max) localTimeRef.current = max;\n\n\t\t\tconst newProgress = Math.max(\n\t\t\t\t0,\n\t\t\t\tMath.min(1, (localTimeRef.current - min) / (max - min)),\n\t\t\t);\n\t\t\tprogressMv.set(newProgress);\n\t\t}\n\t});\n\n\tconst expand = () => {\n\t\tanimate(insetMv, 0, { type: \"tween\", ease: \"easeOut\", duration: 0.28 });\n\t};\n\n\tconst collapse = () => {\n\t\tanimate(insetMv, INITIAL_INSET, {\n\t\t\ttype: \"spring\",\n\t\t\tdamping: 12,\n\t\t\tstiffness: 200,\n\t\t});\n\t};\n\n\tconst handlePanStart = (_event: MouseEvent | TouchEvent | PointerEvent) => {\n\t\tisDraggingRef.current = true;\n\n\t\tif (innerRef.current) {\n\t\t\trectRef.current = innerRef.current.getBoundingClientRect();\n\t\t}\n\n\t\texpand();\n\n\t\tonBeforeChange?.();\n\t\tonSeeking?.(true);\n\t};\n\n\tconst handlePan = (\n\t\t_event: MouseEvent | TouchEvent | PointerEvent,\n\t\tinfo: PanInfo,\n\t) => {\n\t\tconst rect = rectRef.current;\n\t\tif (!rect) return;\n\n\t\tconst relPos = (info.point.x - rect.left) / rect.width;\n\n\t\tif (relPos < 0) {\n\t\t\tbounceXSpring.set(Math.tanh(relPos * 2) * MAX_BOUNCE_DISTANCE);\n\t\t} else if (relPos > 1) {\n\t\t\tbounceXSpring.set(Math.tanh((relPos - 1) * 2) * MAX_BOUNCE_DISTANCE);\n\t\t} else {\n\t\t\tbounceXSpring.set(0);\n\t\t}\n\n\t\tconst clampedPos = Math.max(0, Math.min(1, relPos));\n\t\tconst NewValue = min + clampedPos * (max - min);\n\n\t\tlocalTimeRef.current = NewValue;\n\n\t\tprogressMv.set(clampedPos);\n\n\t\tif (changeOnDrag) {\n\t\t\tonChange?.(NewValue);\n\t\t}\n\t};\n\n\tconst handlePanEnd = () => {\n\t\tisDraggingRef.current = false;\n\t\trectRef.current = null;\n\n\t\tif (isHoveringRef.current) {\n\t\t\texpand();\n\t\t} else {\n\t\t\tcollapse();\n\t\t}\n\n\t\tbounceXSpring.set(0);\n\n\t\tonSeeking?.(false);\n\n\t\tonChange?.(localTimeRef.current);\n\n\t\tonAfterChange?.(localTimeRef.current);\n\t};\n\n\tconst handleHoverStart = () => {\n\t\tisHoveringRef.current = true;\n\t\tif (!isDraggingRef.current) {\n\t\t\texpand();\n\t\t}\n\t};\n\n\tconst handleHoverEnd = () => {\n\t\tisHoveringRef.current = false;\n\t\tif (!isDraggingRef.current) {\n\t\t\tcollapse();\n\t\t}\n\t};\n\n\tconst handleTap = (\n\t\t_event: MouseEvent | TouchEvent | PointerEvent,\n\t\tinfo: PanInfo,\n\t) => {\n\t\tconst rect = innerRef.current?.getBoundingClientRect();\n\t\tif (!rect) return;\n\n\t\tconst relPos = Math.max(\n\t\t\t0,\n\t\t\tMath.min(1, (info.point.x - rect.left) / rect.width),\n\t\t);\n\n\t\tconst NewValue = min + relPos * (max - min);\n\n\t\tlocalTimeRef.current = NewValue;\n\t\tprogressMv.set(relPos);\n\n\t\tonBeforeChange?.();\n\t\tonChange?.(NewValue);\n\t\tonAfterChange?.(NewValue);\n\t};\n\n\treturn (\n\t\t<motion.div\n\t\t\tref={containerRef}\n\t\t\tclassName={classNames(styles.nowPlayingSlider, className)}\n\t\t\tstyle={{\n\t\t\t\t...style,\n\t\t\t\tx: bounceXSpring,\n\t\t\t}}\n\t\t\tonPanStart={handlePanStart}\n\t\t\tonPan={handlePan}\n\t\t\tonPanEnd={handlePanEnd}\n\t\t\tonTap={handleTap}\n\t\t\tonHoverStart={handleHoverStart}\n\t\t\tonHoverEnd={handleHoverEnd}\n\t\t>\n\t\t\t{beforeIcon}\n\t\t\t<motion.div\n\t\t\t\tref={innerRef}\n\t\t\t\tclassName={styles.inner}\n\t\t\t\tstyle={{\n\t\t\t\t\tclipPath: clipPath,\n\t\t\t\t}}\n\t\t\t>\n\t\t\t\t<motion.div\n\t\t\t\t\tclassName={styles.thumb}\n\t\t\t\t\tstyle={{\n\t\t\t\t\t\tscaleX: scaleX,\n\t\t\t\t\t\toriginX: 0,\n\t\t\t\t\t}}\n\t\t\t\t/>\n\t\t\t</motion.div>\n\n\t\t\t{afterIcon}\n\t\t</motion.div>\n\t);\n};\n",".controlThumb {\n\tjustify-self: center;\n\twidth: 100%;\n\theight: 100%;\n\tmix-blend-mode: plus-lighter;\n\n\t& button {\n\t\tdisplay: block;\n\t\ttouch-action: none;\n\t\tposition: absolute;\n\t\tborder: none;\n\t\tpadding: 0;\n\t\tborder-radius: 4px;\n\t\tbackground-color: #ffffff2d;\n\t\tmix-blend-mode: plus-lighter;\n\t\tcursor: none;\n\n\t\t& div {\n\t\t\tposition: absolute;\n\t\t\tbackground-color: black;\n\t\t\tborder-radius: 10px;\n\t\t}\n\t}\n}\n","import classNames from \"classnames\";\nimport { motion } from \"framer-motion\";\nimport type { FC, HTMLProps } from \"react\";\nimport { useRef, useState } from \"react\";\nimport styles from \"./index.module.css\";\n\nexport const ControlThumb: FC<\n\t{\n\t\tonClick?: () => void;\n\t} & HTMLProps<HTMLDivElement>\n> = ({ onClick, className, ...rest }) => {\n\tconst containerRef = useRef<HTMLDivElement>(null);\n\tconst hoveringRef = useRef(false);\n\tconst [thumbOffset, setThumbOffset] = useState({\n\t\tx: -25,\n\t\ty: -4,\n\t});\n\tconst onMouseMove = (e: MouseEvent) => {\n\t\tconst container = containerRef.current;\n\t\tif (container && hoveringRef.current) {\n\t\t\tconst rect = container.getBoundingClientRect();\n\t\t\tconst left = (e.clientX - rect.left) / 2;\n\t\t\tconst top = (e.clientY - rect.top) / 2;\n\t\t\tif (Math.abs(left) > 25 || Math.abs(top) > 25) {\n\t\t\t\tsetThumbOffset({\n\t\t\t\t\tx: -25,\n\t\t\t\t\ty: -4,\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\tsetThumbOffset({\n\t\t\t\t\tx: left - 25 / 2,\n\t\t\t\t\ty: top - 25 / 2,\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t};\n\n\treturn (\n\t\t<div\n\t\t\tclassName={classNames(styles.controlThumb, className)}\n\t\t\tref={containerRef}\n\t\t\t{...rest}\n\t\t>\n\t\t\t<motion.button\n\t\t\t\ttype=\"button\"\n\t\t\t\tvariants={{\n\t\t\t\t\trest: {\n\t\t\t\t\t\twidth: 50,\n\t\t\t\t\t\theight: 8,\n\t\t\t\t\t},\n\t\t\t\t\thover: {\n\t\t\t\t\t\twidth: 25,\n\t\t\t\t\t\theight: 25,\n\t\t\t\t\t},\n\t\t\t\t}}\n\t\t\t\tanimate={{\n\t\t\t\t\t...thumbOffset,\n\t\t\t\t}}\n\t\t\t\twhileTap={{\n\t\t\t\t\tscale: 0.9,\n\t\t\t\t}}\n\t\t\t\twhileHover=\"hover\"\n\t\t\t\tinitial=\"rest\"\n\t\t\t\ttransition={{\n\t\t\t\t\ttype: \"spring\",\n\t\t\t\t\tduration: 0.5,\n\t\t\t\t}}\n\t\t\t\tonMouseMove={(evt) => {\n\t\t\t\t\tonMouseMove(evt.nativeEvent);\n\t\t\t\t}}\n\t\t\t\tonHoverStart={(evt) => {\n\t\t\t\t\tonMouseMove(evt);\n\t\t\t\t\thoveringRef.current = true;\n\t\t\t\t}}\n\t\t\t\tonHoverEnd={() => {\n\t\t\t\t\thoveringRef.current = false;\n\t\t\t\t\tsetThumbOffset({\n\t\t\t\t\t\tx: -25,\n\t\t\t\t\t\ty: -4,\n\t\t\t\t\t});\n\t\t\t\t}}\n\t\t\t\tonClick={onClick}\n\t\t\t>\n\t\t\t\t<motion.div\n\t\t\t\t\tvariants={{\n\t\t\t\t\t\trest: {\n\t\t\t\t\t\t\theight: 0,\n\t\t\t\t\t\t\twidth: 0,\n\t\t\t\t\t\t\tmarginTop: 0,\n\t\t\t\t\t\t\tmarginLeft: 25,\n\t\t\t\t\t\t\trotate: 0,\n\t\t\t\t\t\t},\n\t\t\t\t\t\thover: {\n\t\t\t\t\t\t\theight: 2,\n\t\t\t\t\t\t\twidth: 15,\n\t\t\t\t\t\t\tmarginTop: -1,\n\t\t\t\t\t\t\tmarginLeft: 5,\n\t\t\t\t\t\t\trotate: 45,\n\t\t\t\t\t\t},\n\t\t\t\t\t}}\n\t\t\t\t\ttransition={{\n\t\t\t\t\t\ttype: \"spring\",\n\t\t\t\t\t\tduration: 0.5,\n\t\t\t\t\t}}\n\t\t\t\t/>\n\t\t\t\t<motion.div\n\t\t\t\t\tvariants={{\n\t\t\t\t\t\trest: {\n\t\t\t\t\t\t\theight: 0,\n\t\t\t\t\t\t\twidth: 0,\n\t\t\t\t\t\t\tmarginTop: 0,\n\t\t\t\t\t\t\tmarginLeft: 25,\n\t\t\t\t\t\t\trotate: 0,\n\t\t\t\t\t\t},\n\t\t\t\t\t\thover: {\n\t\t\t\t\t\t\theight: 2,\n\t\t\t\t\t\t\twidth: 15,\n\t\t\t\t\t\t\tmarginTop: -1,\n\t\t\t\t\t\t\tmarginLeft: 5,\n\t\t\t\t\t\t\trotate: -45,\n\t\t\t\t\t\t},\n\t\t\t\t\t}}\n\t\t\t\t\ttransition={{\n\t\t\t\t\t\ttype: \"spring\",\n\t\t\t\t\t\tduration: 0.5,\n\t\t\t\t\t}}\n\t\t\t\t/>\n\t\t\t</motion.button>\n\t\t</div>\n\t);\n};\n",".cover {\n\t--base-box-shadow-v-0: rgba(0, 0, 0, 0.19);\n\t--base-box-shadow-y-0: 1em;\n\t--base-box-shadow-r-0: 1.2em;\n\taspect-ratio: 1 / 1;\n\twidth: 100%;\n\theight: 100%;\n\tobject-fit: cover;\n\tobject-position: center;\n\tbackground-position: center;\n\tbackground-size: cover;\n\t/* border-radius: max(2%, 0.7vh); */\n\tfilter: drop-shadow(\n\t\tvar(--base-box-shadow-v-0) 0px var(--base-box-shadow-y-0)\n\t\t\tvar(--base-box-shadow-r-0)\n\t);\n\ttransform: scale(1);\n\ttransition:\n\t\tbackground-image 0.5s linear,\n\t\tfilter 0.5s ease,\n\t\ttransform 0.5s cubic-bezier(0.3, 0.2, 0.2, 1.4);\n\n\t&.musicPaused {\n\t\t--base-box-shadow-v-0: rgba(0, 0, 0, 0.19);\n\t\t--base-box-shadow-y-0: 0.8em;\n\t\t--base-box-shadow-r-0: 0.8em;\n\t\ttransform: scale(var(--scale-level));\n\t\ttransition:\n\t\t\tbackground-image 0.5s linear,\n\t\t\tfilter 0.5s ease,\n\t\t\ttransform 0.6s cubic-bezier(0.4, 0.2, 0.1, 1);\n\t}\n}\n\n.coverInner {\n\twidth: 100%;\n\theight: 100%;\n\tbackground-position: center;\n\tbackground-size: cover;\n\tbackground-color: black;\n\ttransition: background-image 0.5s linear;\n}\n","/**\n * @fileoverview\n * 一个专辑图组件\n */\n\nimport classNames from \"classnames\";\nimport { Squircle } from \"corner-smoothing\";\nimport {\n\ttype ForwardRefExoticComponent,\n\tforwardRef,\n\ttype HTMLProps,\n\ttype RefAttributes,\n\tuseEffect,\n\tuseLayoutEffect,\n\tuseMemo,\n\tuseRef,\n\tuseState,\n} from \"react\";\nimport styles from \"./index.module.css\";\n\nexport type CoverProps = {\n\tcoverUrl?: string;\n\tcoverIsVideo?: boolean;\n\tcoverVideoPaused?: boolean;\n\tmusicPaused?: boolean;\n\tpauseShrinkAspect?: number;\n} & HTMLProps<HTMLDivElement>;\n\n/**\n * 一个专辑图组件\n */\nexport const Cover: ForwardRefExoticComponent<\n\tCoverProps & RefAttributes<HTMLDivElement>\n> = forwardRef<HTMLDivElement, CoverProps>(\n\t(\n\t\t{\n\t\t\tcoverUrl,\n\t\t\tcoverIsVideo,\n\t\t\tcoverVideoPaused,\n\t\t\tclassName,\n\t\t\tmusicPaused,\n\t\t\tpauseShrinkAspect,\n\t\t\t...rest\n\t\t},\n\t\tref,\n\t) => {\n\t\tconst frameRef = useRef<HTMLDivElement>(null);\n\t\tconst clsNames = useMemo(\n\t\t\t() =>\n\t\t\t\tclassNames(styles.cover, musicPaused && styles.musicPaused, className),\n\t\t\t[className, musicPaused],\n\t\t);\n\t\tconst videoRef = useRef<HTMLVideoElement>(null);\n\t\tuseEffect(() => {\n\t\t\tconst videoEl = videoRef.current;\n\t\t\tif (videoEl) {\n\t\t\t\tif (coverVideoPaused) {\n\t\t\t\t\tvideoEl.pause();\n\t\t\t\t} else {\n\t\t\t\t\tvideoEl.play();\n\t\t\t\t}\n\t\t\t}\n\t\t}, [coverVideoPaused]);\n\t\tconst [cornerRadius, setCornerRadius] = useState(20);\n\n\t\tuseLayoutEffect(() => {\n\t\t\tconst frameEl = frameRef.current;\n\t\t\tif (frameEl) {\n\t\t\t\tconst onResize = () => {\n\t\t\t\t\tconst size = Math.min(frameEl.clientWidth, frameEl.clientHeight);\n\t\t\t\t\tsetCornerRadius(Math.max(size * 0.02, window.innerHeight * 0.007));\n\t\t\t\t};\n\t\t\t\tconst obz = new ResizeObserver(onResize);\n\t\t\t\tonResize();\n\t\t\t\tobz.observe(frameEl);\n\t\t\t\treturn () => {\n\t\t\t\t\tobz.disconnect();\n\t\t\t\t};\n\t\t\t}\n\t\t\treturn;\n\t\t}, []);\n\n\t\treturn (\n\t\t\t<div\n\t\t\t\tclassName={clsNames}\n\t\t\t\tstyle={\n\t\t\t\t\t{\n\t\t\t\t\t\t\"--scale-level\": pauseShrinkAspect ?? 0.75,\n\t\t\t\t\t} as React.CSSProperties\n\t\t\t\t}\n\t\t\t\tref={(node) => {\n\t\t\t\t\tframeRef.current = node;\n\t\t\t\t\tif (typeof ref === \"function\") {\n\t\t\t\t\t\tref(node);\n\t\t\t\t\t} else if (ref) {\n\t\t\t\t\t\tref.current = node;\n\t\t\t\t\t}\n\t\t\t\t}}\n\t\t\t\t{...rest}\n\t\t\t>\n\t\t\t\t<Squircle\n\t\t\t\t\tcornerRadius={cornerRadius}\n\t\t\t\t\tcornerSmoothing={0.7}\n\t\t\t\t\tclassName={styles.coverInner}\n\t\t\t\t>\n\t\t\t\t\t{coverIsVideo ? (\n\t\t\t\t\t\t<video\n\t\t\t\t\t\t\tclassName={styles.coverInner}\n\t\t\t\t\t\t\tsrc={coverUrl}\n\t\t\t\t\t\t\tautoPlay\n\t\t\t\t\t\t\tloop\n\t\t\t\t\t\t\tmuted\n\t\t\t\t\t\t\tplaysInline\n\t\t\t\t\t\t\tcrossOrigin=\"anonymous\"\n\t\t\t\t\t\t\tref={videoRef}\n\t\t\t\t\t\t/>\n\t\t\t\t\t) : (\n\t\t\t\t\t\t<div\n\t\t\t\t\t\t\tclassName={styles.coverInner}\n\t\t\t\t\t\t\tstyle={\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\tbackgroundImage: `url(${coverUrl})`,\n\t\t\t\t\t\t\t\t\t\"--scale-level\": pauseShrinkAspect ?? 0.75,\n\t\t\t\t\t\t\t\t} as React.CSSProperties\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t/>\n\t\t\t\t\t)}\n\t\t\t\t</Squircle>\n\t\t\t</div>\n\t\t);\n\t},\n);\n","@keyframes pressed-animation {\n\t0% {\n\t\ttransform: scale(1);\n\t}\n\n\t20% {\n\t\ttransform: scale(0.85);\n\t}\n\n\t50% {\n\t\ttransform: scale(1.1);\n\t}\n\n\t100% {\n\t\ttransform: scale(1);\n\t}\n}\n\n.mediaButton {\n\taspect-ratio: 1 / 1;\n\tdisplay: flex;\n\tjustify-content: center;\n\talign-items: center;\n\tborder-radius: 50%;\n\tposition: relative;\n\tbackground-color: #fff0;\n\tpadding: 0;\n\tborder: none;\n\n\ttransition: background-color 0.3s;\n\n\t&:hover {\n\t\tbackground-color: #fff2;\n\t}\n\n\t&:active {\n\t\tbackground-color: #fff2;\n\n\t\t* {\n\t\t\tanimation-name: none !important;\n\t\t}\n\t}\n\n\t& > * {\n\t\ttransition: transform 0.5s;\n\t\ttransform-origin: center;\n\t}\n\n\t&.animate > * {\n\t\tanimation: pressed-animation 0.7s;\n\t\tanimation-composition: accumulate;\n\t}\n}\n","import classNames from \"classnames\";\nimport { type ComponentProps, type FC, memo, useState } from \"react\";\nimport styles from \"./index.module.css\";\n\nexport const MediaButton: FC<ComponentProps<\"button\">> = memo(\n\t({\n\t\tclassName,\n\t\tchildren,\n\t\ttype = \"button\",\n\t\tonClick,\n\t\tonAnimationEnd,\n\t\t...rest\n\t}) => {\n\t\tconst [isAnimating, setIsAnimating] = useState(false);\n\n\t\tconst handleClick = (e: React.MouseEvent<HTMLButtonElement>) => {\n\t\t\tsetIsAnimating(true);\n\t\t\tonClick?.(e);\n\t\t};\n\n\t\tconst handleAnimationEnd = (e: React.AnimationEvent<HTMLButtonElement>) => {\n\t\t\tsetIsAnimating(false);\n\t\t\tonAnimationEnd?.(e);\n\t\t};\n\n\t\treturn (\n\t\t\t<button\n\t\t\t\tclassName={classNames(\n\t\t\t\t\tstyles.mediaButton,\n\t\t\t\t\t{ [styles.animate]: isAnimating },\n\t\t\t\t\tclassName,\n\t\t\t\t)}\n\t\t\t\ttype={type}\n\t\t\t\tonClick={handleClick}\n\t\t\t\tonAnimationEnd={handleAnimationEnd}\n\t\t\t\t{...rest}\n\t\t\t>\n\t\t\t\t{children}\n\t\t\t</button>\n\t\t);\n\t},\n);\n",".menuButton {\n\taspect-ratio: 1 / 1;\n\tpadding: 0;\n\tposition: relative;\n\tborder: none;\n\tbackground: #ffffff15 !important;\n\twidth: 3.5vh;\n\tmargin-left: 16px;\n\tborder-radius: 50%;\n\talign-self: center;\n\tdisplay: flex;\n\talign-items: center;\n\tjustify-content: center;\n\tpadding: 0;\n\n\t& svg {\n\t\twidth: 72%;\n\t\theight: auto;\n\t\tcolor: #ffffff;\n\t}\n\n\t@media screen and (max-width: 1000px) {\n\t\twidth: max(2em, min(5vw, 4vh));\n\t}\n}\n","import classNames from \"classnames\";\nimport { type HTMLProps, memo } from \"react\";\nimport IconMore from \"./icon_more.svg?react\";\nimport styles from \"./index.module.css\";\n\nexport const MenuButton: React.FC<HTMLProps<HTMLButtonElement>> = memo(\n\t({ className, type, ...rest }) => {\n\t\treturn (\n\t\t\t<button\n\t\t\t\tclassName={classNames(styles.menuButton, className)}\n\t\t\t\ttype=\"button\"\n\t\t\t\t{...rest}\n\t\t\t>\n\t\t\t\t<IconMore />\n\t\t\t</button>\n\t\t);\n\t},\n);\n",".textMarquee {\n\tmin-width: 0;\n\toverflow: hidden;\n\t-webkit-mask-image: linear-gradient(to right, #000 95%, #0000);\n\n\t&.animating {\n\t\t-webkit-mask-image: linear-gradient(\n\t\t\tto left,\n\t\t\t#0000,\n\t\t\t#000 5%,\n\t\t\t#000 95%,\n\t\t\t#0000\n\t\t);\n\t}\n\n\t& > * {\n\t\twidth: fit-content;\n\t}\n}\n","import classNames from \"classnames\";\nimport type { FC, HTMLProps, PropsWithChildren } from \"react\";\nimport { memo, useRef } from \"react\";\nimport styles from \"./index.module.css\";\n\nexport const TextMarquee: FC<PropsWithChildren<HTMLProps<HTMLDivElement>>> =\n\tmemo(({ children, className, ...rest }) => {\n\t\tconst outerDiv = useRef<HTMLDivElement>(null);\n\t\tconst innerDiv = useRef<HTMLDivElement>(null);\n\t\tconst currentAnimationsRef = useRef(new Set<Animation>());\n\n\t\tconst onMouseEnter = () => {\n\t\t\tif (innerDiv.current && outerDiv.current) {\n\t\t\t\tconst outerWidth = outerDiv.current.clientWidth;\n\t\t\t\tconst innerWidth = innerDiv.current.clientWidth;\n\n\t\t\t\tif (innerWidth <= outerWidth * 0.95) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\touterDiv.current?.classList.add(styles.animating);\n\n\t\t\t\tconst distance = innerWidth - outerWidth * 0.95;\n\n\t\t\t\tconst ani = innerDiv.current.animate(\n\t\t\t\t\t[\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\ttransform: \"translateX(0px)\",\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\ttransform: `translateX(${-distance}px)`,\n\t\t\t\t\t\t},\n\t\t\t\t\t],\n\t\t\t\t\t{\n\t\t\t\t\t\titerations: 2,\n\t\t\t\t\t\tdirection: \"alternate\",\n\t\t\t\t\t\teasing: \"linear\",\n\t\t\t\t\t\tduration: Math.max(0, ((distance * 2) / 64) * 1000),\n\t\t\t\t\t},\n\t\t\t\t);\n\n\t\t\t\tani.finished.then(() => {\n\t\t\t\t\touterDiv.current?.classList.remove(styles.animating);\n\t\t\t\t});\n\n\t\t\t\tcurrentAnimationsRef.current.add(ani);\n\t\t\t}\n\t\t};\n\n\t\tconst onMouseLeave = () => {\n\t\t\tfor (const ani of currentAnimationsRef.current) {\n\t\t\t\tani.finish();\n\t\t\t}\n\t\t\touterDiv.current?.classList.remove(styles.animating);\n\t\t\tcurrentAnimationsRef.current.clear();\n\t\t};\n\n\t\treturn (\n\t\t\t<div\n\t\t\t\tref={outerDiv}\n\t\t\t\tclassName={classNames(styles.textMarquee, className)}\n\t\t\t\tonMouseEnter={onMouseEnter}\n\t\t\t\tonMouseLeave={onMouseLeave}\n\t\t\t\t{...rest}\n\t\t\t>\n\t\t\t\t<div ref={innerDiv}>{children}</div>\n\t\t\t</div>\n\t\t);\n\t});\n",".musicInfo {\n\tdisplay: flex;\n\tcolor: white;\n\tfont-size: max(2vh, 1em);\n\tmin-width: 0;\n}\n\n.info {\n\tflex: 1;\n\tmin-width: 0;\n\toverflow: hidden;\n\t/* 固定行高，否则文字变化时有可能产生布局抖动 */\n\tline-height: 1.25em;\n}\n\n.name {\n\twhite-space: nowrap;\n\tcursor: text;\n\tuser-select: text;\n\tmin-width: 0;\n\tfont-weight: 500;\n\tletter-spacing: 0.4px;\n\topacity: 0.9;\n\tmix-blend-mode: normal !important;\n}\n\n.artists,\n.album {\n\twhite-space: nowrap;\n\ttext-align: center;\n\topacity: 0.45;\n\tfont-weight: 400;\n\n\tletter-spacing: 0.4px;\n\n\t& a {\n\t\ttext-decoration: none;\n\n\t\tuser-select: text;\n\n\t\t&:hover {\n\t\t\topacity: 0.75;\n\t\t}\n\n\t\t&:active {\n\t\t\topacity: 0.5;\n\t\t}\n\n\t\t&::after {\n\t\t\tcontent: var(--applemusic-like-lyrics-music-artists-separator, \", \");\n\t\t}\n\n\t\t&:nth-last-child(2)::after {\n\t\t\tcontent: \" & \";\n\t\t}\n\n\t\t&:last-child::after {\n\t\t\tcontent: \"\";\n\t\t}\n\t}\n}\n","import classNames from \"classnames\";\nimport { type HTMLProps, memo } from \"react\";\nimport { MenuButton } from \"../MenuButton\";\nimport { TextMarquee } from \"../TextMarquee\";\nimport styles from \"./index.module.css\";\n\nexport const MusicInfo: React.FC<\n\t{\n\t\tname?: string;\n\t\tartists?: string[];\n\t\talbum?: string;\n\t\tonArtistClicked?: (artist: string, index: number) => void;\n\t\tonAlbumClicked?: () => void;\n\t\tonMenuButtonClicked?: () => void;\n\t} & HTMLProps<HTMLDivElement>\n> = memo(\n\t({\n\t\tname,\n\t\tartists,\n\t\talbum,\n\t\tonArtistClicked,\n\t\tonAlbumClicked,\n\t\tonMenuButtonClicked,\n\t\tclassName,\n\t\t...rest\n\t}) => {\n\t\treturn (\n\t\t\t<div className={classNames(styles.musicInfo, className)} {...rest}>\n\t\t\t\t<div className={styles.info}>\n\t\t\t\t\t{name !== undefined && (\n\t\t\t\t\t\t<TextMarquee className={styles.name}>{name}</TextMarquee>\n\t\t\t\t\t)}\n\t\t\t\t\t{artists !== undefined && (\n\t\t\t\t\t\t<TextMarquee className={styles.artists}>\n\t\t\t\t\t\t\t{artists.map((v) => (\n\t\t\t\t\t\t\t\t<a key={`artist-${v}`}>{v}</a>\n\t\t\t\t\t\t\t))}\n\t\t\t\t\t\t</TextMarquee>\n\t\t\t\t\t)}\n\t\t\t\t\t{album !== undefined && (\n\t\t\t\t\t\t<TextMarquee className={styles.album}>{album}</TextMarquee>\n\t\t\t\t\t)}\n\t\t\t\t</div>\n\t\t\t\t<MenuButton onClick={onMenuButtonClicked} />\n\t\t\t</div>\n\t\t);\n\t},\n);\n",".background {\n\tposition: absolute;\n\tleft: 0%;\n\theight: 100%;\n\twidth: 100%;\n\ttransition: 0.5s ease-in-out;\n}\n\n.background::after {\n\twidth: 100vw;\n\theight: 100vh;\n\tcontent: \"\";\n\tposition: absolute;\n\ttop: 0px;\n\tleft: 0px;\n\tbackground-image: linear-gradient(#00000000 60%, #0000001a 100%);\n}\n",".horizontalLayout {\n\t/* --info-size-fract: 0.85fr; */\n\t/* --player-size-fract: 1fr; */\n\twidth: 100%;\n\theight: 100%;\n\n\tposition: relative;\n\tdisplay: grid;\n\tgrid-template-rows: [drag-area] minmax(30px, 0.45fr) [thumb] auto [cover] auto [music-info] 3fr [buttom-controls] 0fr 0.3fr;\n\tgrid-template-columns: [info-side] 0.45fr [player-side] 0.55fr [side-controls] 0fr;\n\tgap: 8px;\n\ttransition: all 0.5s ease-in-out;\n\tleft: 0%;\n\n\t--hide-lyric-left: 61.111111%;\n\n\t.thumb,\n\t.cover,\n\t.controls {\n\t\ttransition: left 0.5s cubic-bezier(0.5, 0, 0.5, 1);\n\t\tleft: 0%;\n\t}\n\n\t&.hideLyric {\n\t\t/* percentage(calc((1 - var(--info-size-fract) / (var(--info-size-fract) + var(--player-size-fract))) / 2)) */\n\t\t/* left: var(--hide-lyric-left); */\n\n\t\t.lyric {\n\t\t\ttransition:\n\t\t\t\topacity 0.25s cubic-bezier(0.5, 0, 0.5, 1),\n\t\t\t\ttransform 0.5s cubic-bezier(0.5, 0, 0.5, 1);\n\t\t\topacity: 0;\n\t\t\tpointer-events: none;\n\t\t}\n\n\t\t.thumb,\n\t\t.cover,\n\t\t.controls {\n\t\t\tleft: var(--hide-lyric-left);\n\t\t}\n\t}\n\n\t--horizontal-layout-max-width: min(50vh, 38vw);\n\n\t@media screen and (max-height: 1000px) {\n\t\t--horizontal-layout-max-width: min(45vh, 38vw);\n\t}\n\n\t@media screen and (max-height: 768px) {\n\t\tfont-size: 0.8em;\n\t\tgap: 2px;\n\t\tgrid-template-rows: [drag-area] minmax(30px, 0.45fr) [thumb] auto [cover] auto [music-info] 3fr [buttom-controls] 0fr 0.2fr;\n\t}\n}\n\n.thumb {\n\tgrid-column: info-side;\n\tgrid-row: thumb;\n\twill-change: transform;\n\tjustify-self: center;\n\tmargin: 2vh;\n\n\tmix-blend-mode: plus-lighter;\n\n\tposition: relative;\n}\n\n.cover {\n\taspect-ratio: 1 / 1;\n\tgrid-column: info-side;\n\tgrid-row: cover;\n\talign-self: center;\n\tjustify-self: center;\n\twidth: var(--horizontal-layout-max-width);\n\theight: var(--horizontal-layout-max-width);\n\n\tposition: relative;\n}\n\n.controls {\n\tgrid-column: info-side;\n\tgrid-row: music-info;\n\twill-change: transform;\n\tjustify-self: center;\n\n\tmix-blend-mode: plus-lighter;\n\tmin-width: 0;\n\tmin-height: 0;\n\twidth: var(--horizontal-layout-max-width);\n\n\tdisplay: flex;\n\tflex-direction: column;\n\tjustify-content: space-between;\n\n\tposition: relative;\n\n\tmargin-top: calc(-8px + 1.75em);\n\t/* 计算一下该有的间距 没懂为啥整个加个gap8px */\n}\n\n.lyric {\n\tbox-sizing: border-box;\n\tgrid-column: player-side;\n\tgrid-row: 2 / 5;\n\twidth: 100%;\n\theight: 100%;\n\ttransition: opacity 0.5s 0.25s cubic-bezier(0.5, 0, 0.5, 1);\n\tpadding-right: 15%;\n\n\tmask-image: linear-gradient(transparent, black 10%, black 90%, transparent);\n\n\tmix-blend-mode: plus-lighter;\n\tcontain: paint;\n\n\t@media screen and (max-width: 1600px), (max-height: 1000px) {\n\t\tpadding-right: 8%;\n\t}\n}\n\n.bottomControls {\n\tgrid-column: 1 / 4;\n\tgrid-row: buttom-controls;\n\tmix-blend-mode: plus-lighter;\n\n\tdisplay: flex;\n\tflex-direction: row-reverse;\n\tgap: 4em;\n\tpadding-right: 4em;\n\tpadding-left: 4em;\n\n\t@media screen and (max-width: 1600px), (max-height: 1000px) {\n\t\tgap: 2em;\n\t\tpadding-right: 2em;\n\t\tpadding-left: 2em;\n\t}\n}\n","/**\n * @fileoverview\n * 一个适用于歌词页面横向布局的组件\n */\n\nimport classnames from \"classnames\";\nimport { motion } from \"framer-motion\";\nimport type React from \"react\";\nimport type { HTMLProps } from \"react\";\nimport styles from \"./horizontal.module.css\";\n\nexport const HorizontalLayout: React.FC<\n\t{\n\t\tthumbSlot?: React.ReactNode;\n\t\tcoverSlot?: React.ReactNode;\n\t\tcontrolsSlot?: React.ReactNode;\n\t\tlyricSlot?: React.ReactNode;\n\t\tbackgroundSlot?: React.ReactNode;\n\t\tbottomControls?: React.ReactNode;\n\t\thideLyric?: boolean;\n\t\tasChild?: boolean;\n\t} & HTMLProps<HTMLDivElement>\n> = ({\n\tthumbSlot,\n\tcoverSlot,\n\tcontrolsSlot,\n\tlyricSlot,\n\tbottomControls,\n\thideLyric,\n\tclassName,\n\tasChild,\n\t...rest\n}) => {\n\treturn (\n\t\t<div\n\t\t\tclassName={classnames(\n\t\t\t\tclassName,\n\t\t\t\t!asChild && styles.horizontalLayout,\n\t\t\t\t!asChild && hideLyric && styles.hideLyric,\n\t\t\t)}\n\t\t\t{...rest}\n\t\t>\n\t\t\t<motion.div layout layoutId=\"amll-player-thumb\" className={styles.thumb}>\n\t\t\t\t{thumbSlot}\n\t\t\t</motion.div>\n\t\t\t<motion.div layout layoutId=\"amll-player-cover\" className={styles.cover}>\n\t\t\t\t{coverSlot}\n\t\t\t</motion.div>\n\t\t\t<motion.div\n\t\t\t\tlayout\n\t\t\t\tlayoutId=\"amll-player-controls\"\n\t\t\t\tclassName={styles.controls}\n\t\t\t>\n\t\t\t\t{controlsSlot}\n\t\t\t</motion.div>\n\t\t\t<div className={styles.lyric}>{lyricSlot}</div>\n\t\t\t<div className={styles.bottomControls}>{bottomControls}</div>\n\t\t</div>\n\t);\n};\n",".verticalLayout {\n\twidth: 100%;\n\theight: 100%;\n\tmin-height: 0;\n\tmin-width: 0;\n\toverflow: hidden;\n\tdisplay: grid;\n\tposition: relative;\n\t/* 保证可以拖动窗口的区域 */\n\tgrid-template-rows:\n\t\t[drag-area] 30px\n\t\t/* 控制条的空间 */\n\t\t[thumb] 30px\n\t\t/* 主视图，包括是否展示歌词的两种布局 */\n\t\t[main-view] 1fr\n\t\t/* 主要控制栏的区域 */\n\t\t[control] 0fr;\n\tgap: 2px;\n}\n\n.thumb {\n\tgrid-row: thumb;\n\tjustify-self: center;\n\tz-index: 1;\n\tmix-blend-mode: plus-lighter;\n\n\t/* border: 1px solid aqua; */\n\n\t@media screen and (max-width: 768px) {\n\t\tmargin: 4px;\n\t}\n}\n\n.coverFrame {\n\tposition: absolute;\n\twidth: 0px;\n\theight: 0px;\n\n\t&.immerseCover {\n\t\tmask-image: linear-gradient(to bottom, #000 0%, #000 70%, #0000 100%);\n\t}\n}\n\n/* 封面的位置由 JS 设定 */\n.cover {\n\taspect-ratio: 1 / 1;\n\tposition: absolute;\n\ttop: 0;\n\tleft: 0;\n\tz-index: 1;\n}\n\n.lyricLayout {\n\tgrid-row: main-view;\n\t/* 强制和 .noLyricLayout 占用同一区域 */\n\tgrid-column: 1 / 2;\n\tdisplay: grid;\n\tgrid-template-rows: 1em [controls] 0fr [lyric-view] 1fr [bottom-controls] 0fr;\n\tgrid-template-columns: 3em [cover-side] 0fr [info-side] 1fr 3em;\n\tmix-blend-mode: plus-lighter;\n\n\t@media screen and (max-width: 480px) {\n\t\tgrid-template-columns: 20px [cover-side] 0fr [info-side] 1fr 20px;\n\t}\n}\n\n.noLyricLayout {\n\tgrid-row: main-view;\n\t/* 强制和 .lyricLayout 占用同一区域 */\n\tgrid-column: 1 / 2;\n\toverflow-y: hidden;\n\tdisplay: grid;\n\tgrid-template-rows: 1em [cover-view] 1fr [lyric-view] 0fr;\n\tgrid-template-columns: 3em [main-view] 1fr 3em;\n\tpointer-events: none;\n\n\t@media screen and (max-width: 480px) {\n\t\tgrid-template-columns: 2em [main-view] 1fr 2em;\n\t}\n}\n\n/* 辅助定位的小封面图位置 */\n.phonySmallCover {\n\tgrid-row: controls;\n\tgrid-column: cover-side;\n\tjustify-self: center;\n\talign-self: center;\n\taspect-ratio: 1 / 1;\n\topacity: 0;\n\tpointer-events: none;\n\n\twidth: 6em;\n\n\t@media screen and (max-width: 480px) {\n\t\twidth: 4.5em;\n\t}\n\n\t/* border: 1px solid greenyellow; */\n}\n\n/* 辅助定位的大封面图位置 */\n.phonyBigCover {\n\tgrid-row: cover-view;\n\tgrid-column: 2 / 3;\n\topacity: 0;\n\tpointer-events: none;\n\n\t/* border: 1px solid pink; */\n}\n\n.smallControls {\n\tgrid-row: controls;\n\tgrid-column: info-side;\n\talign-self: center;\n\n\t/* border: 1px solid yellow; */\n\ttransition: opacity 0.25s 0.25s;\n\tpadding-left: 1em;\n\tmin-width: 0;\n\toverflow: visible;\n\theight: fit-content;\n\tz-index: 1;\n\tmix-blend-mode: plus-lighter;\n}\n\n.lyric {\n\tgrid-row: lyric-view;\n\tgrid-column: 1 / 5;\n\n\t/* border: 1px solid blue; */\n\n\ttransition: opacity 0.5s 0.5s;\n\topacity: 1;\n\tmix-blend-mode: plus-lighter;\n\t/* contain: paint; */\n\n\tmask-image: linear-gradient(transparent 0%, black 10%, black 100%);\n\t/* margin-left: calc(-24px - 1em); */\n\t/* width: calc(100% + 24px + 1em); */\n\tbox-sizing: content-box;\n\tmin-height: 0;\n}\n\n.bigControls {\n\tgrid-row: lyric-view;\n\tgrid-column: 2 / 3;\n\n\t/* border: 1px solid red; */\n\ttransition: opacity 0.5s;\n\topacity: 0;\n\tmix-blend-mode: plus-lighter;\n\tmin-width: 0;\n\tz-index: 2;\n}\n\n.hideLyric {\n\t.smallControls {\n\t\topacity: 0;\n\t\ttransition: opacity 0.5s;\n\t\tpointer-events: none;\n\t}\n\n\t.noLyricLayout {\n\t\tpointer-events: auto;\n\t}\n\n\t.lyric {\n\t\topacity: 0;\n\t\ttransition: opacity 0.5s;\n\t\tpointer-events: none;\n\t}\n\n\t.bigControls {\n\t\topacity: 1;\n\t}\n}\n\n.background {\n\tposition: absolute;\n\theight: 100%;\n\twidth: 100%;\n}\n","/**\n * @fileoverview\n * 一个适用于歌词页面竖向布局的组件\n */\n\nimport classNames from \"classnames\";\nimport { type MotionProps, motion, type Target } from \"framer-motion\";\nimport type React from \"react\";\nimport type { HTMLProps } from \"react\";\nimport { useCallback, useLayoutEffect, useRef, useState } from \"react\";\nimport styles from \"./vertical.module.css\";\n\nexport const VerticalLayout: React.FC<\n\t{\n\t\tthumbSlot?: React.ReactNode;\n\t\tsmallControlsSlot?: React.ReactNode;\n\t\tbigControlsSlot?: React.ReactNode;\n\t\tcoverSlot?: React.ReactNode;\n\t\tlyricSlot?: React.ReactNode;\n\t\tasChild?: boolean;\n\t\thideLyric?: boolean;\n\t\timmerseCover?: boolean;\n\t} & HTMLProps<HTMLDivElement>\n> = ({\n\tthumbSlot,\n\tcoverSlot,\n\tsmallControlsSlot,\n\tbigControlsSlot,\n\tlyricSlot,\n\thideLyric,\n\tasChild,\n\tclassName,\n\timmerseCover,\n\t...rest\n}) => {\n\tconst rootRef = useRef<HTMLDivElement>(null);\n\tconst phonyBigCoverRef = useRef<HTMLDivElement>(null);\n\tconst phonySmallCoverRef = useRef<HTMLDivElement>(null);\n\tconst coverFrameRef = useRef<HTMLDivElement>(null);\n\tconst hideLyricRef = useRef(hideLyric ?? false);\n\tconst immerseCoverRef = useRef(immerseCover ?? false);\n\tconst [currentCoverStyle, setCurrentCoverStyle] =\n\t\tuseState<MotionProps[\"animate\"]>(undefined);\n\tconst calcCoverLayout = useCallback(\n\t\t(hideLyric = hideLyricRef.current): Target | undefined => {\n\t\t\tif (!rootRef.current) return;\n\t\t\tlet rootEl: HTMLElement = rootRef.current;\n\t\t\tconst targetCover = hideLyric\n\t\t\t\t? phonyBigCoverRef.current\n\t\t\t\t: phonySmallCoverRef.current;\n\t\t\tif (!targetCover || !rootEl) return;\n\t\t\tconst immerseCover = immerseCoverRef.current;\n\t\t\twhile (getComputedStyle(rootEl).display === \"contents\") {\n\t\t\t\trootEl = rootEl.parentElement!;\n\t\t\t}\n\t\t\tconst rootB = rootEl.getBoundingClientRect();\n\t\t\tconst targetCoverB = targetCover.getBoundingClientRect();\n\t\t\tif (immerseCover) {\n\t\t\t\tconst halfHeight =\n\t\t\t\t\ttargetCoverB.top - rootB.top + targetCoverB.height / 2;\n\t\t\t\tconst targetCoverSize = Math.max(\n\t\t\t\t\thalfHeight * 2.4,\n\t\t\t\t\trootB.width * 1.2,\n\t\t\t\t\tMath.min(targetCover.clientWidth, targetCover.clientHeight),\n\t\t\t\t);\n\t\t\t\tconst targetCoverLeft =\n\t\t\t\t\ttargetCoverB.x - rootB.x + (targetCoverB.width - targetCoverSize) / 2;\n\t\t\t\tconst targetCoverTop =\n\t\t\t\t\ttargetCoverB.y -\n\t\t\t\t\trootB.y +\n\t\t\t\t\t(targetCoverB.height - targetCoverSize) / 2;\n\t\t\t\treturn {\n\t\t\t\t\twidth: targetCoverSize,\n\t\t\t\t\theight: targetCoverSize,\n\t\t\t\t\tleft: targetCoverLeft,\n\t\t\t\t\ttop: targetCoverTop,\n\t\t\t\t};\n\t\t\t}\n\t\t\tconst targetCoverSize = Math.min(\n\t\t\t\ttargetCover.clientWidth,\n\t\t\t\ttargetCover.clientHeight,\n\t\t\t);\n\t\t\tconst targetCoverLeft =\n\t\t\t\ttargetCoverB.x - rootB.x + (targetCoverB.width - targetCoverSize) / 2;\n\t\t\tconst targetCoverTop =\n\t\t\t\ttargetCoverB.y - rootB.y + (targetCoverB.height - targetCoverSize) / 2;\n\t\t\treturn {\n\t\t\t\twidth: targetCoverSize,\n\t\t\t\theight: targetCoverSize,\n\t\t\t\tleft: targetCoverLeft,\n\t\t\t\ttop: targetCoverTop,\n\t\t\t};\n\t\t},\n\t\t[],\n\t);\n\tuseLayoutEffect(() => {\n\t\thideLyricRef.current = hideLyric ?? false;\n\t\timmerseCoverRef.current = immerseCover ?? false;\n\t\tsetCurrentCoverStyle(calcCoverLayout(hideLyricRef.current));\n\t}, [hideLyric, immerseCover, calcCoverLayout]);\n\tuseLayoutEffect(() => {\n\t\tconst phonyBigCoverEl = phonyBigCoverRef.current;\n\t\tconst phonySmallCoverEl = phonySmallCoverRef.current;\n\t\t// const coverFrameEl = coverFrameRef.current;\n\t\tif (!phonyBigCoverEl || !phonySmallCoverEl) return;\n\t\tconst obz = new ResizeObserver(() => {\n\t\t\tsetCurrentCoverStyle(calcCoverLayout(hideLyricRef.current));\n\t\t});\n\t\tobz.observe(phonyBigCoverEl);\n\t\tobz.observe(phonySmallCoverEl);\n\t\tconst init = calcCoverLayout(hideLyricRef.current);\n\t\tsetCurrentCoverStyle(init);\n\t\treturn () => {\n\t\t\tobz.disconnect();\n\t\t};\n\t}, [calcCoverLayout]);\n\treturn (\n\t\t<div\n\t\t\tclassName={classNames(\n\t\t\t\tclassName,\n\t\t\t\t!asChild && styles.verticalLayout,\n\t\t\t\t!asChild && hideLyric && styles.hideLyric,\n\t\t\t)}\n\t\t\tref={rootRef}\n\t\t\t{...rest}\n\t\t>\n\t\t\t<div className={styles.thumb}>{thumbSlot}</div>\n\t\t\t<div className={styles.lyricLayout}>\n\t\t\t\t{/** 用于占位，测量布局的大小用 */}\n\t\t\t\t<div className={styles.phonySmallCover} ref={phonySmallCoverRef} />\n\t\t\t\t<div className={styles.smallControls}>{smallControlsSlot}</div>\n\t\t\t\t<div className={styles.lyric}>{lyricSlot}</div>\n\t\t\t</div>\n\t\t\t<div className={styles.noLyricLayout}>\n\t\t\t\t{/** 用于占位，测量布局的大小用 */}\n\t\t\t\t<div className={styles.phonyBigCover} ref={phonyBigCoverRef} />\n\t\t\t\t<div className={styles.bigControls}>{bigControlsSlot}</div>\n\t\t\t</div>\n\t\t\t{currentCoverStyle && (\n\t\t\t\t<motion.div\n\t\t\t\t\tclassName={classNames(\n\t\t\t\t\t\tstyles.coverFrame,\n\t\t\t\t\t\timmerseCover && styles.immerseCover,\n\t\t\t\t\t)}\n\t\t\t\t\tanimate={currentCoverStyle}\n\t\t\t\t\tinitial={false}\n\t\t\t\t\ttransition={{\n\t\t\t\t\t\ttype: \"spring\",\n\t\t\t\t\t\tstiffness: 200,\n\t\t\t\t\t\tdamping: 30,\n\t\t\t\t\t}}\n\t\t\t\t\tref={coverFrameRef}\n\t\t\t\t>\n\t\t\t\t\t{coverSlot}\n\t\t\t\t</motion.div>\n\t\t\t)}\n\t\t</div>\n\t);\n};\n","import type React from \"react\";\nimport type { HTMLProps } from \"react\";\nimport { useCallback, useLayoutEffect, useRef, useState } from \"react\";\nimport styles from \"./auto.module.css\";\nimport { HorizontalLayout } from \"./horizontal\";\nimport { VerticalLayout } from \"./vertical\";\n\n/**\n * 会根据当前元素的宽高比自动选择横向或者纵向布局的组件\n */\nexport const AutoLyricLayout: React.FC<\n\t{\n\t\tthumbSlot?: React.ReactNode;\n\t\tcontrolsSlot?: React.ReactNode;\n\t\thorizontalBottomControls?: React.ReactNode;\n\t\tsmallControlsSlot?: React.ReactNode;\n\t\tbigControlsSlot?: React.ReactNode;\n\t\tcoverSlot?: React.ReactNode;\n\t\tlyricSlot?: React.ReactNode;\n\t\tbackgroundSlot?: React.ReactNode;\n\t\thideLyric?: boolean;\n\t\tverticalImmerseCover?: boolean;\n\t\tonLayoutChange?: (isVertical: boolean) => void;\n\t\tonElementMounted?: (node: HTMLDivElement | null) => void;\n\t} & HTMLProps<HTMLDivElement>\n> = ({\n\tthumbSlot,\n\tcontrolsSlot,\n\thorizontalBottomControls,\n\tsmallControlsSlot,\n\tbigControlsSlot,\n\tcoverSlot,\n\tlyricSlot,\n\tbackgroundSlot,\n\thideLyric,\n\tverticalImmerseCover,\n\tonLayoutChange,\n\tonElementMounted,\n\t...rest\n}) => {\n\tconst [isVertical, setIsVertical] = useState(false);\n\tconst rootRef = useRef<HTMLDivElement>(null);\n\n\tconst setRefs = useCallback(\n\t\t(node: HTMLDivElement | null) => {\n\t\t\trootRef.current = node;\n\n\t\t\tif (onElementMounted) {\n\t\t\t\tonElementMounted(node);\n\t\t\t}\n\t\t},\n\t\t[onElementMounted],\n\t);\n\n\tuseLayoutEffect(() => {\n\t\tconst rootEl = rootRef.current;\n\t\tif (!rootEl) return;\n\n\t\tsetIsVertical(rootEl.clientWidth < rootEl.clientHeight);\n\n\t\tconst obz = new ResizeObserver(() => {\n\t\t\tconst rootB = rootEl.getBoundingClientRect();\n\t\t\tsetIsVertical(rootB.width < rootB.height);\n\t\t});\n\t\tobz.observe(rootEl);\n\t\treturn () => obz.disconnect();\n\t}, []);\n\n\tuseLayoutEffect(() => {\n\t\tonLayoutChange?.(isVertical);\n\t}, [isVertical, onLayoutChange]);\n\n\t// 如果分开使用两个布局，会导致不能衔接背景组件，导致两者间切换有闪屏情况\n\t// 如果直接使用背景并各套一个 div，会导致无法应用 plus-lighter 效果\n\t// 故借助 display: contents 来融合布局\n\n\treturn (\n\t\t<div {...rest} ref={setRefs}>\n\t\t\t<div className={styles.background}>{backgroundSlot}</div>\n\t\t\t{isVertical ? (\n\t\t\t\t<VerticalLayout\n\t\t\t\t\tthumbSlot={thumbSlot}\n\t\t\t\t\tsmallControlsSlot={smallControlsSlot}\n\t\t\t\t\tbigControlsSlot={bigControlsSlot}\n\t\t\t\t\tcoverSlot={coverSlot}\n\t\t\t\t\tlyricSlot={lyricSlot}\n\t\t\t\t\thideLyric={hideLyric}\n\t\t\t\t\timmerseCover={verticalImmerseCover}\n\t\t\t\t/>\n\t\t\t) : (\n\t\t\t\t<HorizontalLayout\n\t\t\t\t\tthumbSlot={thumbSlot}\n\t\t\t\t\tcontrolsSlot={controlsSlot}\n\t\t\t\t\tcoverSlot={coverSlot}\n\t\t\t\t\tlyricSlot={lyricSlot}\n\t\t\t\t\tbottomControls={horizontalBottomControls}\n\t\t\t\t\thideLyric={hideLyric}\n\t\t\t\t/>\n\t\t\t)}\n\t\t</div>\n\t);\n};\n","export function toDuration(duration: number) {\n\tconst isRemainTime = duration < 0;\n\n\tconst d = Math.abs(duration | 0);\n\tconst sec = d % 60;\n\tconst min = Math.floor((d - sec) / 60);\n\tconst secText = \"0\".repeat(2 - sec.toString().length) + sec;\n\n\treturn `${isRemainTime ? \"-\" : \"\"}${min}:${secText}`;\n}\n",".toggleIconButton {\n\tborder: none;\n\tbackground-color: transparent;\n\taspect-ratio: 1 / 1;\n\tdisplay: flex;\n\tjustify-content: center;\n\talign-items: center;\n\tcolor: currentColor;\n\n\topacity: 0.45;\n\twidth: 4em;\n\theight: 4em;\n\n\t& svg {\n\t\twidth: 4em;\n\t\theight: 4em;\n\t\taspect-ratio: 1 / 1;\n\t}\n\n\t@media screen and (max-width: 1600px), (max-height: 1000px) {\n\t\twidth: 3em;\n\t\theight: 3em;\n\n\t\t& svg {\n\t\t\twidth: 3em;\n\t\t\theight: 3em;\n\t\t}\n\t}\n}\n","export enum PrebuiltToggleIconButtonType {\n\tLyrics = \"lyrics\",\n\tPlaylist = \"playlist\",\n\tRepeat = \"repeat\",\n\tShuffle = \"shuffle\",\n\tStar = \"star\",\n\tAirPlay = \"airplay\",\n}\n","import classNames from \"classnames\";\nimport { type FC, type HTMLProps, memo, type ReactNode } from \"react\";\nimport airplayIcon from \"../IconButton/airplay.svg?react\";\nimport styles from \"./index.module.css\";\nimport lyricsOffIcon from \"./lyrics_off.svg?react\";\nimport lyricsOnIcon from \"./lyrics_on.svg?react\";\nimport playlistOffIcon from \"./playlist_off.svg?react\";\nimport playlistOnIcon from \"./playlist_on.svg?react\";\nimport { PrebuiltToggleIconButtonType } from \"./prebuilt-enum\";\nimport repeatOffIcon from \"./repeat_off.svg?react\";\nimport repeatOnNormalIcon from \"./repeat_on_normal.svg?react\";\nimport shuffleOffIcon from \"./shuffle_off.svg?react\";\nimport shuffleOnIcon from \"./shuffle_on.svg?react\";\nimport starIcon from \"./star.svg?react\";\nimport starFilledIcon from \"./star_filled.svg?react\";\n\nexport const ToggleIconButton: FC<\n\t{\n\t\tuncheckedIcon: ReactNode;\n\t\tcheckedIcon: ReactNode;\n\t\tchecked?: boolean;\n\t} & Omit<HTMLProps<HTMLButtonElement>, \"type\">\n> = memo(({ uncheckedIcon, checkedIcon, checked, className, ...rest }) => {\n\treturn (\n\t\t<button\n\t\t\tclassName={classNames(className, styles.toggleIconButton)}\n\t\t\ttype=\"button\"\n\t\t\t{...rest}\n\t\t>\n\t\t\t{checked ? checkedIcon : uncheckedIcon}\n\t\t</button>\n\t);\n});\n\ntype IconComponent = typeof lyricsOffIcon;\n\nconst PREBUILT_ICONS_MAP: Record<\n\tPrebuiltToggleIconButtonType,\n\t[IconComponent, IconComponent]\n> = {\n\t[PrebuiltToggleIconButtonType.Lyrics]: [lyricsOffIcon, lyricsOnIcon],\n\t[PrebuiltToggleIconButtonType.Playlist]: [playlistOffIcon, playlistOnIcon],\n\t[PrebuiltToggleIconButtonType.Repeat]: [repeatOffIcon, repeatOnNormalIcon],\n\t[PrebuiltToggleIconButtonType.Shuffle]: [shuffleOffIcon, shuffleOnIcon],\n\t[PrebuiltToggleIconButtonType.Star]: [starIcon, starFilledIcon],\n\t[PrebuiltToggleIconButtonType.AirPlay]: [airplayIcon, airplayIcon],\n};\n\nexport const PrebuiltToggleIconButton: FC<\n\t{\n\t\ttype: PrebuiltToggleIconButtonType;\n\t\tchecked?: boolean;\n\t} & Omit<HTMLProps<HTMLButtonElement>, \"type\">\n> = memo(({ type, checked, onClick, ...rest }) => {\n\tconst [UncheckedIcon, CheckedIcon] = PREBUILT_ICONS_MAP[type];\n\treturn (\n\t\t<ToggleIconButton\n\t\t\tuncheckedIcon={<UncheckedIcon />}\n\t\t\tcheckedIcon={<CheckedIcon />}\n\t\t\tchecked={checked ?? false}\n\t\t\tonClick={onClick}\n\t\t\t{...rest}\n\t\t/>\n\t);\n});\n","@keyframes speaker-bounce-part1 {\n\tto {\n\t\ttransform: scale(1.2);\n\t}\n}\n\n@keyframes speaker-bounce-part2 {\n\tto {\n\t\ttransform: scale(0.85);\n\t}\n}\n\n@keyframes speaker-bounce-part3 {\n\tto {\n\t\ttransform: scale(1);\n\t}\n}\n\n.volumeControl {\n\tdisplay: flex;\n\talign-items: center;\n\tflex-direction: row;\n\tmargin-left: -12px;\n\tmargin-right: -8px;\n}\n\n.volumeControl > svg {\n\topacity: 0.5;\n}\n\n.speakerAnimate :global(.speaker-bounce-1) {\n\tanimation:\n\t\tspeaker-bounce-part1 0.2s ease-in-out 0s forwards,\n\t\tspeaker-bounce-part2 0.2s ease-in-out 0.2s forwards,\n\t\tspeaker-bounce-part3 0.2s ease-in-out 0.4s forwards;\n\ttransform-origin: center;\n}\n\n.speakerAnimate :global(.speaker-bounce-2) {\n\tanimation:\n\t\tspeaker-bounce-part1 0.2s ease-in-out 0.05s forwards,\n\t\tspeaker-bounce-part2 0.2s ease-in-out 0.25s forwards,\n\t\tspeaker-bounce-part3 0.2s ease-in-out 0.45s forwards;\n\ttransform-origin: center;\n}\n\n.speakerAnimate :global(.speaker-bounce-3) {\n\tanimation:\n\t\tspeaker-bounce-part1 0.2s ease-in-out 0.1s forwards,\n\t\tspeaker-bounce-part2 0.2s ease-in-out 0.3s forwards,\n\t\tspeaker-bounce-part3 0.2s ease-in-out 0.5s forwards;\n\ttransform-origin: center;\n}\n\n.speakerAnimate :global(.speaker-bounce-4) {\n\tanimation:\n\t\tspeaker-bounce-part1 0.2s ease-in-out 0.15s forwards,\n\t\tspeaker-bounce-part2 0.2s ease-in-out 0.35s forwards,\n\t\tspeaker-bounce-part3 0.2s ease-in-out 0.55s forwards;\n\ttransform-origin: center;\n}\n","import type React from \"react\";\nimport { useEffect, useRef } from \"react\";\nimport { BouncingSlider, type SliderProps } from \"../BouncingSlider\";\nimport IconSpeaker from \"./icon_speaker.svg?react\";\nimport IconSpeaker3 from \"./icon_speaker_3.svg?react\";\nimport styles from \"./index.module.css\";\n\nexport const VolumeControl: React.FC<SliderProps> = (props) => {\n\tconst lastValueRef = useRef(props.value);\n\tconst minSpeakerRef = useRef<SVGSVGElement>(null);\n\tconst maxSpeakerRef = useRef<SVGSVGElement>(null);\n\n\tuseEffect(() => {\n\t\tif (lastValueRef.current !== props.value) {\n\t\t\tlastValueRef.current = props.value;\n\t\t\tif (props.value <= props.min && minSpeakerRef.current) {\n\t\t\t\tminSpeakerRef.current.classList.remove(styles.speakerAnimate);\n\t\t\t\trequestAnimationFrame(() => {\n\t\t\t\t\tminSpeakerRef.current?.classList?.add(styles.speakerAnimate);\n\t\t\t\t});\n\t\t\t} else if (props.value >= props.max && maxSpeakerRef.current) {\n\t\t\t\tmaxSpeakerRef.current.classList.remove(styles.speakerAnimate);\n\t\t\t\trequestAnimationFrame(() => {\n\t\t\t\t\tmaxSpeakerRef.current?.classList?.add(styles.speakerAnimate);\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t}, [props.value, props.min, props.max]);\n\n\treturn (\n\t\t<BouncingSlider\n\t\t\tclassName={styles.volumeControl}\n\t\t\tbeforeIcon={<IconSpeaker ref={minSpeakerRef} color=\"#FFFFFF\" />}\n\t\t\tafterIcon={<IconSpeaker3 ref={maxSpeakerRef} color=\"#FFFFFF\" />}\n\t\t\tchangeOnDrag={true}\n\t\t\t{...props}\n\t\t/>\n\t);\n};\n","import type { LyricLineMouseEvent } from \"@applemusic-like-lyrics/core\";\nimport type { LyricPlayerRef } from \"@applemusic-like-lyrics/react\";\nimport { atom, type PrimitiveAtom } from \"jotai\";\n\nexport interface Callback<Args extends unknown[], Result = void> {\n\tonEmit?: (...args: Args) => Result;\n}\n\nconst c = <Args extends unknown[], Result = void>(\n\t_onEmit: (...args: Args) => Result,\n): Callback<Args, Result> => ({});\n\n/**\n * 点击歌曲专辑图上方的控制横条时触发\n *\n * 通常用于关闭歌词页面\n */\nexport const onClickControlThumbAtom: PrimitiveAtom<Callback<[], void>> = atom(\n\tc(() => {}),\n);\n\n/**\n * 点击音质标签时触发\n *\n * 通常用于打开音质详情对话框\n */\nexport const onClickAudioQualityTagAtom: PrimitiveAtom<Callback<[], void>> =\n\tatom(c(() => {}));\n\n/**\n * 点击菜单按钮时触发\n */\nexport const onRequestOpenMenuAtom: PrimitiveAtom<Callback<[], void>> = atom(\n\tc(() => {}),\n);\n\n/**\n * 点击暂停或播放按钮时触发\n */\nexport const onPlayOrResumeAtom: PrimitiveAtom<Callback<[], void>> = atom(\n\tc(() => {}),\n);\n\n/**\n * 点击上一首按钮时触发\n */\nexport const onRequestPrevSongAtom: PrimitiveAtom<Callback<[], void>> = atom(\n\tc(() => {}),\n);\n\n/**\n * 点击下一首按钮时触发\n */\nexport const onRequestNextSongAtom: PrimitiveAtom<Callback<[], void>> = atom(\n\tc(() => {}),\n);\n\n/**\n * 拖动进度条触发跳转时触发\n * @param position - 目标播放位置，单位为毫秒\n */\nexport const onSeekPositionAtom: PrimitiveAtom<\n\tCallback<[_position: number], void>\n> = atom(c((_position: number) => {}));\n\n/**\n * 当某个歌词行被左键点击时触发\n * @param _evt 歌词行的事件对象，可以访问到对应的歌词行信息和歌词行索引\n * @param _playerRef 歌词播放组件的引用\n */\nexport const onLyricLineClickAtom: PrimitiveAtom<\n\tCallback<[_evt: LyricLineMouseEvent, _playerRef: LyricPlayerRef | null], void>\n> = atom(\n\tc((_evt: LyricLineMouseEvent, _playerRef: LyricPlayerRef | null) => {}),\n);\n\n/**\n * 当某个歌词行被右键点击时触发\n * @param _evt 歌词行的事件对象，可以访问到对应的歌词行信息和歌词行索引\n * @param _playerRef 歌词播放组件的引用\n */\nexport const onLyricLineContextMenuAtom: PrimitiveAtom<\n\tCallback<[_evt: LyricLineMouseEvent, _playerRef: LyricPlayerRef | null], void>\n> = atom(\n\tc((_evt: LyricLineMouseEvent, _playerRef: LyricPlayerRef | null) => {}),\n);\n\n/**\n * 通过音量滑块改变音量时触发\n * @param volume - 目标音量，取值范围为 [0-1]\n */\nexport const onChangeVolumeAtom: PrimitiveAtom<\n\tCallback<[_volume: number], void>\n> = atom(c((_volume: number) => {}));\n\n/**\n * 点击随机按钮时触发\n */\nexport const onToggleShuffleAtom: PrimitiveAtom<Callback<[], void>> = atom(\n\tc(() => {}),\n);\n\n/**\n * 点击循环按钮时触发\n */\nexport const onCycleRepeatModeAtom: PrimitiveAtom<Callback<[], void>> = atom(\n\tc(() => {}),\n);\n","import {\n\tDomLyricPlayer,\n\tDomSlimLyricPlayer,\n\ttype LyricPlayerBase,\n\tMeshGradientRenderer,\n\tPixiRenderer,\n} from \"@applemusic-like-lyrics/core\";\nimport type { BackgroundRenderProps } from \"@applemusic-like-lyrics/react\";\nimport { atom, type PrimitiveAtom, type WritableAtom } from \"jotai\";\nimport { atomWithStorage, type RESET } from \"jotai/utils\";\n\n//#region 类型定义\n/**\n * 播放器底部控制区域的控制组件类型\n * - `Controls`: 播放控制按钮\n * - `FFT`: 音频可视化内容\n * - `None`: 不显示任何内容\n */\nexport enum PlayerControlsType {\n\tControls = \"controls\",\n\tFFT = \"fft\",\n\tNone = \"none\",\n}\n\n/**\n * 在隐藏歌词的情况下专辑图的布局方式：\n * - `Auto`: 根据专辑图是否为视频以使用沉浸布局\n * - `ForceNormal`: 强制使用默认的专辑图布局\n * - `ForceImmersive`: 强制使用沉浸式的专辑图布局\n */\nexport enum VerticalCoverLayout {\n\tAuto = \"auto\",\n\tForceNormal = \"force-normal\",\n\tForceImmersive = \"force-immersive\",\n}\n\n/**\n * 可用的歌词渲染器实现\n */\nexport enum LyricPlayerImplementation {\n\tDom = \"dom\",\n\tDomSlim = \"dom-slim\",\n}\n\n/**\n * 可用的预设歌词字体大小\n */\nexport enum LyricSizePreset {\n\tTiny = \"tiny\",\n\tExtraSmall = \"extra-small\",\n\tSmall = \"small\",\n\tMedium = \"medium\",\n\tLarge = \"large\",\n\tExtraLarge = \"extra-large\",\n\tHuge = \"huge\",\n}\n//#endregion\n\n//#region 歌词效果配置\nexport type LyricPlayerImplementationObject = {\n\tlyricPlayer?: {\n\t\tnew (\n\t\t\t...args: ConstructorParameters<typeof LyricPlayerBase>\n\t\t): LyricPlayerBase;\n\t};\n};\n\nconst getInitialPlayerImplementation = (): LyricPlayerImplementationObject => {\n\tconst savedImpl = localStorage.getItem(\n\t\t\"amll-react-full.lyricPlayerImplementation\",\n\t);\n\tswitch (savedImpl) {\n\t\tcase LyricPlayerImplementation.DomSlim:\n\t\t\treturn { lyricPlayer: DomSlimLyricPlayer };\n\t\tdefault:\n\t\t\treturn { lyricPlayer: DomLyricPlayer };\n\t}\n};\n\n/**\n * 歌词播放组件的实现类型\n * @default DomLyricPlayer\n */\nexport const lyricPlayerImplementationAtom: PrimitiveAtom<LyricPlayerImplementationObject> =\n\tatom(getInitialPlayerImplementation());\n\n/**\n * 是否启用歌词行模糊效果\n *\n * 性能影响：较高\n * @default true\n */\nexport const enableLyricLineBlurEffectAtom: WritableAtom<\n\tboolean,\n\t[boolean | ((prev: boolean) => boolean) | typeof RESET],\n\tvoid\n> = atomWithStorage(\"amll-react-full.enableLyricLineBlurEffect\", true);\n\n/**\n * 是否启用歌词行缩放效果\n *\n * 性能影响：无\n * @default true\n */\nexport const enableLyricLineScaleEffectAtom: WritableAtom<\n\tboolean,\n\t[boolean | ((prev: boolean) => boolean) | typeof RESET],\n\tvoid\n> = atomWithStorage(\"amll-react-full.enableLyricLineScaleEffect\", true);\n\n/**\n * 是否使用物理弹簧算法实现歌词动画效果\n *\n * 如果启用，则会通过弹簧算法实时处理歌词位置，但是需要性能足够强劲的电脑方可流畅运行\n *\n * 如果不启用，则会回退到基于 transition 的过渡效果，对低性能的机器比较友好，但是效果会比较单一\n *\n * 性能影响：较高\n * @default true\n */\nexport const enableLyricLineSpringAnimationAtom: WritableAtom<\n\tboolean,\n\t[boolean | ((prev: boolean) => boolean) | typeof RESET],\n\tvoid\n> = atomWithStorage(\"amll-react-full.enableLyricLineSpringAnimation\", true);\n\n/**\n * 是否显示翻译歌词行\n *\n * 性能影响：无\n * @default true\n */\nexport const enableLyricTranslationLineAtom: WritableAtom<\n\tboolean,\n\t[boolean | ((prev: boolean) => boolean) | typeof RESET],\n\tvoid\n> = atomWithStorage(\"amll-react-full.enableLyricTranslationLine\", true);\n\n/**\n * 是否显示音译歌词行\n *\n * 性能影响：无\n * @default true\n */\nexport const enableLyricRomanLineAtom: WritableAtom<\n\tboolean,\n\t[boolean | ((prev: boolean) => boolean) | typeof RESET],\n\tvoid\n> = atomWithStorage(\"amll-react-full.enableLyricRomanLine\", true);\n\n/**\n * 是否交换音译和翻译歌词行的显示位置\n *\n * 性能影响：无\n * @default false\n */\nexport const enableLyricSwapTransRomanLineAtom: WritableAtom<\n\tboolean,\n\t[boolean | ((prev: boolean) => boolean) | typeof RESET],\n\tvoid\n> = atomWithStorage(\"amll-react-full.enableLyricSwapTransRomanLine\", false);\n\n/**\n * 调节逐词歌词时单词的渐变过渡宽度，单位为一个全角字的宽度\n * - 如果要模拟 Apple Music for Android 的效果，可以设置为 1\n * - 如果要模拟 Apple Music for iPad 的效果，可以设置为 0.5\n * - 如需关闭逐词歌词时单词的渐变过渡效果，可以设置为 0\n * @default 0.5\n */\nexport const lyricWordFadeWidthAtom: WritableAtom<\n\tnumber,\n\t[number | ((prev: number) => number) | typeof RESET],\n\tvoid\n> = atomWithStorage(\"amll-react-full.lyricWordFadeWidth\", 0.5);\n\n/**\n * 设置歌词组件的字体家族\n *\n * 以逗号分隔的字体名称组合，等同于 CSS 的 font-family 属性\n * @default \"\"\n */\nexport const lyricFontFamilyAtom: WritableAtom<\n\tstring,\n\t[string | ((prev: string) => string) | typeof RESET],\n\tvoid\n> = atomWithStorage(\"amll-react-full.lyricFontFamily\", \"\");\n\n/**\n * 设置歌词组件的字体字重\n *\n * 等同于 CSS 的 font-weight 属性\n * @default 600\n */\nexport const lyricFontWeightAtom: WritableAtom<\n\tnumber | string,\n\t[\n\t\t| number\n\t\t| string\n\t\t| ((prev: number | string) => number | string)\n\t\t| typeof RESET,\n\t],\n\tvoid\n> = atomWithStorage<number | string>(\"amll-react-full.lyricFontWeight\", 600);\n\n/**\n * 设置歌词组件的字符间距\n *\n * 等同于 CSS 的 letter-spacing 属性\n * @default \"normal\"\n */\nexport const lyricLetterSpacingAtom: WritableAtom<\n\tstring,\n\t[string | ((prev: string) => string) | typeof RESET],\n\tvoid\n> = atomWithStorage(\"amll-react-full.lyricLetterSpacing\", \"normal\");\n\n/**\n * 设置歌词的字体大小\n * @default LyricSizePreset.Medium\n */\nexport const lyricSizePresetAtom: WritableAtom<\n\tLyricSizePreset,\n\t[\n\t\t| LyricSizePreset\n\t\t| ((prev: LyricSizePreset) => LyricSizePreset)\n\t\t| typeof RESET,\n\t],\n\tvoid\n> = atomWithStorage<LyricSizePreset>(\n\t\"amll-react-full.lyricSizePreset\",\n\tLyricSizePreset.Medium,\n);\n//#endregion\n\n//#region 歌曲信息展示配置\n/**\n * 播放控制组件的显示类型，即歌曲信息下方的组件\n */\nexport const playerControlsTypeAtom: WritableAtom<\n\tPlayerControlsType,\n\t[\n\t\t| PlayerControlsType\n\t\t| ((prev: PlayerControlsType) => PlayerControlsType)\n\t\t| typeof RESET,\n\t],\n\tvoid\n> = atomWithStorage<PlayerControlsType>(\n\t\"amll-react-full.playerControlsType\",\n\tPlayerControlsType.Controls,\n);\n\n/**\n * 是否显示歌曲名称\n * @default true\n */\nexport const showMusicNameAtom: WritableAtom<\n\tboolean,\n\t[boolean | ((prev: boolean) => boolean) | typeof RESET],\n\tvoid\n> = atomWithStorage(\"amll-react-full.showMusicName\", true);\n\n/**\n * 在隐藏歌词的情况下专辑图的布局方式\n * @default VerticalCoverLayout.Auto\n */\nexport const verticalCoverLayoutAtom: WritableAtom<\n\tVerticalCoverLayout,\n\t[\n\t\t| VerticalCoverLayout\n\t\t| ((prev: VerticalCoverLayout) => VerticalCoverLayout)\n\t\t| typeof RESET,\n\t],\n\tvoid\n> = atomWithStorage<VerticalCoverLayout>(\n\t\"amll-react-full.verticalCoverLayout\",\n\tVerticalCoverLayout.Auto,\n);\n\n/**\n * 是否显示歌曲作者\n * @default true\n */\nexport const showMusicArtistsAtom: WritableAtom<\n\tboolean,\n\t[boolean | ((prev: boolean) => boolean) | typeof RESET],\n\tvoid\n> = atomWithStorage(\"amll-react-full.showMusicArtists\", true);\n\n/**\n * 是否显示歌曲专辑名称\n *\n * 如果同时启用三个，布局上可能不太好看，请酌情调节\n * @default false\n */\nexport const showMusicAlbumAtom: WritableAtom<\n\tboolean,\n\t[boolean | ((prev: boolean) => boolean) | typeof RESET],\n\tvoid\n> = atomWithStorage(\"amll-react-full.showMusicAlbum\", false);\n\n/**\n * 是否显示音量控制条\n * @default true\n */\nexport const showVolumeControlAtom: WritableAtom<\n\tboolean,\n\t[boolean | ((prev: boolean) => boolean) | typeof RESET],\n\tvoid\n> = atomWithStorage(\"amll-react-full.showVolumeControl\", true);\n\n/**\n * 是否显示底部控制按钮组\n *\n * 在横向布局里是右下角的几个按钮，在竖向布局里是播放按钮下方的几个按钮\n * @default true\n */\nexport const showBottomControlAtom: WritableAtom<\n\tboolean,\n\t[boolean | ((prev: boolean) => boolean) | typeof RESET],\n\tvoid\n> = atomWithStorage(\"amll-react-full.showBottomControl\", true);\n//#endregion\n\n//#region 歌词背景配置\nexport type LyricBackgroundRenderer = {\n\trenderer?: BackgroundRenderProps[\"renderer\"] | string;\n};\n\nconst getInitialBackgroundRenderer = (): LyricBackgroundRenderer => {\n\tconst savedRenderer = localStorage.getItem(\n\t\t\"amll-react-full.lyricBackgroundRenderer\",\n\t);\n\tswitch (savedRenderer) {\n\t\tcase \"pixi\":\n\t\t\treturn { renderer: PixiRenderer };\n\t\tcase \"css-bg\":\n\t\t\treturn { renderer: \"css-bg\" };\n\t\tdefault:\n\t\t\treturn { renderer: MeshGradientRenderer };\n\t}\n};\n\n/**\n * 配置所使用的歌词背景渲染器\n */\nexport const lyricBackgroundRendererAtom: PrimitiveAtom<LyricBackgroundRenderer> =\n\tatom<LyricBackgroundRenderer>(getInitialBackgroundRenderer());\n\n/**\n * 当背景渲染器设置为纯色或CSS背景时，使用此值\n * @default \"#111111\"\n */\nexport const cssBackgroundPropertyAtom: WritableAtom<\n\tstring,\n\t[string | ((prev: string) => string) | typeof RESET],\n\tvoid\n> = atomWithStorage(\"amll-player.cssBackgroundProperty\", \"#111111\");\n\n/**\n * 调节背景的最大渲染帧率，较低的值可以提升性能\n *\n * 性能影响：高\n * @default 60\n */\nexport const lyricBackgroundFPSAtom: WritableAtom<\n\tnumber,\n\t[number | ((prev: number) => number) | typeof RESET],\n\tvoid\n> = atomWithStorage<number>(\"amll-react-full.lyricBackgroundFPS\", 60);\n\n/**\n * 调节背景的渲染倍率，较低的值可以提升性能\n *\n * 性能影响：高\n * @default 1\n */\nexport const lyricBackgroundRenderScaleAtom: WritableAtom<\n\tnumber,\n\t[number | ((prev: number) => number) | typeof RESET],\n\tvoid\n> = atomWithStorage<number>(\"amll-react-full.lyricBackgroundRenderScale\", 1);\n\n/**\n * 是否启用背景静态模式\n *\n * 让背景会在除了切换歌曲变换封面的情况下保持静止，如果遇到了性能问题，可以考虑开启此项\n *\n * 注意：启用此项会导致背景跳动效果失效\n * @default false\n */\nexport const lyricBackgroundStaticModeAtom: WritableAtom<\n\tboolean,\n\t[boolean | ((prev: boolean) => boolean) | typeof RESET],\n\tvoid\n> = atomWithStorage<boolean>(\n\t\"amll-react-full.lyricBackgroundStaticMode\",\n\tfalse,\n);\n//#endregion\n\n//#region UI 交互状态\n/**\n * 控制歌词播放页面是否可见\n */\nexport const isLyricPageOpenedAtom: PrimitiveAtom<boolean> = atom(false);\n\n/**\n * 是否隐藏歌词视图（即使有歌词数据）\n * @default false\n */\nexport const hideLyricViewAtom: WritableAtom<\n\tboolean,\n\t[boolean | ((prev: boolean) => boolean) | typeof RESET],\n\tvoid\n> = atomWithStorage(\"amll-react-full.hideLyricView\", false);\n\n/**\n * 是否在进度条上显示剩余时间而非当前时间\n * @default true\n */\nexport const showRemainingTimeAtom: WritableAtom<\n\tboolean,\n\t[boolean | ((prev: boolean) => boolean) | typeof RESET],\n\tvoid\n> = atomWithStorage(\"amll-react-full.showRemainingTime\", true);\n\n/**\n * 音频可视化频域范围\n *\n * 单位为赫兹（hz），此项会影响音频可视化和背景跳动效果的展示效果\n * @default [80, 2000]\n */\nexport const fftDataRangeAtom: WritableAtom<\n\t[number, number],\n\t[\n\t\t| [number, number]\n\t\t| ((prev: [number, number]) => [number, number])\n\t\t| typeof RESET,\n\t],\n\tvoid\n> = atomWithStorage(\"amll-react-full.fftDataRange\", [80, 2000] as [\n\tnumber,\n\tnumber,\n]);\n//#endregion\n","import { atom, type PrimitiveAtom, type WritableAtom } from \"jotai\";\nimport { onCycleRepeatModeAtom, onToggleShuffleAtom } from \"./callbacks\";\n\n/**\n * 重复播放的模式\n */\nexport enum RepeatMode {\n\tOff = \"off\",\n\tOne = \"one\",\n\tAll = \"all\",\n}\n\n/**\n * 随机播放是否开启\n */\nexport const isShuffleActiveAtom: PrimitiveAtom<boolean> = atom<boolean>(false);\n\n/**\n * 当前的重复播放模式\n */\nexport const repeatModeAtom: PrimitiveAtom<RepeatMode> = atom<RepeatMode>(\n\tRepeatMode.Off,\n);\n\n/**\n * 随机按钮是否可用\n */\nexport const isShuffleEnabledAtom: PrimitiveAtom<boolean> = atom<boolean>(true);\n\n/**\n * 重复按钮是否可用\n */\nexport const isRepeatEnabledAtom: PrimitiveAtom<boolean> = atom<boolean>(true);\n\n/**\n * 切换随机播放模式的动作\n */\nexport const toggleShuffleActionAtom: WritableAtom<null, [], void> = atom(\n\tnull,\n\t(get) => {\n\t\tconst callback = get(onToggleShuffleAtom);\n\t\tcallback.onEmit?.();\n\t},\n);\n\n/**\n * 切换循环播放模式的动作\n */\nexport const cycleRepeatModeActionAtom: WritableAtom<null, [], void> = atom(\n\tnull,\n\t(get) => {\n\t\tconst callback = get(onCycleRepeatModeAtom);\n\t\tcallback.onEmit?.();\n\t},\n);\n","import type { LyricLine } from \"@applemusic-like-lyrics/core\";\nimport { atom, type PrimitiveAtom, type WritableAtom } from \"jotai\";\nimport { atomWithStorage, type RESET } from \"jotai/utils\";\n\nexport type SongData =\n\t| { type: \"local\"; filePath: string; origOrder: number }\n\t| { type: \"custom\"; id: string; songJsonData: string; origOrder: number };\n\n/**\n * 一位艺术家的信息\n */\nexport interface ArtistStateEntry {\n\tname: string;\n\tid: string;\n}\n\n/**\n * 音频质量的类型枚举\n */\nexport enum AudioQualityType {\n\tNone = \"none\",\n\tStandard = \"standard\",\n\tLossless = \"lossless\",\n\tHiResLossless = \"hi-res-lossless\",\n\tDolbyAtmos = \"dolby-atmos\",\n}\n\n/**\n * 描述音频质量信息的接口\n */\nexport interface MusicQualityState {\n\t/**\n\t * 音频质量\n\t */\n\ttype: AudioQualityType;\n\t/**\n\t * 音频解码器\n\t */\n\tcodec: string;\n\t/**\n\t * 音频通道数量\n\t */\n\tchannels: number;\n\t/**\n\t * 采样率\n\t */\n\tsampleRate: number;\n\t/**\n\t * 采样格式\n\t */\n\tsampleFormat: string;\n}\n\n//#region 当前音乐状态\n/**\n * 当前播放歌曲的 ID\n */\nexport const musicIdAtom: PrimitiveAtom<string> = atom(\"\");\n\n/**\n * 当前播放的音乐名称\n */\nexport const musicNameAtom: PrimitiveAtom<string> = atom(\"未知歌曲\");\n\n/**\n * 当前播放的音乐创作者列表\n */\nexport const musicArtistsAtom: PrimitiveAtom<ArtistStateEntry[]> = atom<\n\tArtistStateEntry[]\n>([{ name: \"未知创作者\", id: \"unknown\" }]);\n\n/**\n * 当前播放的音乐所属专辑名称\n */\nexport const musicAlbumNameAtom: PrimitiveAtom<string> = atom(\"未知专辑\");\n\n/**\n * 当前播放的音乐专辑封面 URL\n *\n * 除了图片也可以是视频资源\n */\nexport const musicCoverAtom: PrimitiveAtom<string> = atom(\"\");\n\n/**\n * 当前播放的音乐专辑封面资源是否为视频\n */\nexport const musicCoverIsVideoAtom: PrimitiveAtom<boolean> = atom(false);\n\n/**\n * 当前音乐的总时长，单位为毫秒\n */\nexport const musicDurationAtom: PrimitiveAtom<number> = atom(0);\n\n/**\n * 当前音乐是否正在播放\n */\nexport const musicPlayingAtom: PrimitiveAtom<boolean> = atom(false);\n\n/**\n * 当前音乐的播放进度，单位为毫秒\n */\nexport const musicPlayingPositionAtom: PrimitiveAtom<number> = atom(0);\n\n/**\n * 当前播放的音乐音量大小，范围在 [0.0-1.0] 之间\n */\nexport const musicVolumeAtom: WritableAtom<\n\tnumber,\n\t[number | ((prev: number) => number) | typeof RESET],\n\tvoid\n> = atomWithStorage(\"amll-react-full.musicVolumeAtom\", 0.5, undefined, {\n\tgetOnInit: true,\n});\n\n/**\n * 当前播放的音乐的歌词数据\n */\nexport const musicLyricLinesAtom: PrimitiveAtom<LyricLine[]> = atom<\n\tLyricLine[]\n>([]);\n\n/**\n * 当前音乐的音质信息\n */\nexport const musicQualityAtom: PrimitiveAtom<MusicQualityState> =\n\tatom<MusicQualityState>({\n\t\ttype: AudioQualityType.None,\n\t\tcodec: \"unknown\",\n\t\tchannels: 2,\n\t\tsampleRate: 44100,\n\t\tsampleFormat: \"s16\",\n\t});\n\n/**\n * 根据音质信息生成的、用于UI展示的标签内容\n *\n * 如果为 null 则不显示标签\n */\nexport const musicQualityTagAtom: PrimitiveAtom<{\n\ttagIcon: boolean;\n\ttagText: string;\n\tisDolbyAtmos: boolean;\n} | null> = atom<{\n\ttagIcon: boolean;\n\ttagText: string;\n\tisDolbyAtmos: boolean;\n} | null>(null);\n//#endregion\n\n//#region 音频可视化相关\n/**\n * 用于音频可视化频谱图的实时频域数据\n */\nexport const fftDataAtom: PrimitiveAtom<number[]> = atom<number[]>([]);\n\n/**\n * 设置低频的音量大小，范围在 80hz-120hz 之间为宜，取值范围在 0.0-1.0 之间。\n *\n * 部分渲染器会根据音量大小调整背景效果（例如根据鼓点跳动）。如果无法获取到类似的数据，请传入 1.0 作为默认值，或不做任何处理。\n */\nexport const lowFreqVolumeAtom: PrimitiveAtom<number> = atom<number>(1);\n//#endregion\n",".horizontalControls {\n\tmin-width: 0;\n\toverflow: hidden;\n\n\t@media screen and (max-height: 1000px) {\n\t\tpadding: 0vh 0 !important;\n\t}\n\n\t@media screen and (min-height: 1000px) {\n\t\tpadding-top: 2vh;\n\t\tpadding-bottom: 1vh;\n\t}\n}\n\n.controls,\n.bigControls {\n\tdisplay: flex;\n\tjustify-content: space-evenly;\n\talign-items: center;\n}\n\n.controls {\n\tjustify-content: space-between;\n}\n\n.bigControls {\n\tpadding: 2vh min(2vw, 2vh);\n\tpadding-bottom: 0;\n}\n\n.songMediaButton,\n.songMediaPlayButton {\n\twidth: 18%;\n\taspect-ratio: 1 / 1;\n}\n\n.songMediaButton > svg {\n\tscale: 3;\n\ttransition: scale 0.3s;\n\n\t@media screen and (max-height: 1080px) {\n\t\tscale: 2;\n\t}\n\n\t@media screen and (max-height: 768px) {\n\t\tscale: 1.5;\n\t}\n\n\t@media screen and (max-height: 512px) {\n\t\tscale: 1;\n\t}\n\n\t@media screen and (max-width: 480px) {\n\t\tscale: 0.5;\n\t}\n}\n\n.songMediaPlayButton > svg {\n\tscale: 2;\n\ttransition: scale 0.3s;\n\n\t@media screen and (max-height: 1080px) {\n\t\tscale: 1.1;\n\t}\n\n\t@media screen and (max-height: 768px) {\n\t\tscale: 0.8;\n\t}\n\n\t@media screen and (max-height: 512px) {\n\t\tscale: 0.5;\n\t}\n\n\t@media screen and (max-width: 480px) {\n\t\tscale: 0.5;\n\t}\n}\n\n.qualityTag {\n\tscale: 1.4;\n\ttransition: scale 0.3s;\n\n\t@media screen and (max-height: 768px) {\n\t\tscale: 0.5;\n\t}\n\n\t@media screen and (max-height: 1080px) {\n\t\tscale: 1;\n\t}\n}\n\n.progressBarLabels {\n\tdisplay: flex;\n\tjustify-content: space-between;\n\talign-items: center;\n\tfont-weight: 500;\n\tfont-size: max(1.2vh, 0.8em);\n\topacity: 0.5;\n\tmargin-top: 4px;\n\n\t@media screen and (max-height: 768px) {\n\t\tmargin-top: 0;\n\t}\n\n\t& > * {\n\t\tflex: 1;\n\t}\n\n\t& > *:nth-child(2) {\n\t\tflex: 0;\n\t}\n\n\t& > *:last-child {\n\t\ttext-align: right;\n\t}\n}\n\n.bigControls > button {\n\theight: 10vh !important;\n\twidth: 10vh !important;\n\n\t&:nth-child(2) > svg {\n\t\tscale: 1.75;\n\n\t\t@media screen and (max-width: 480px) {\n\t\t\tscale: 1.25;\n\t\t}\n\t}\n\n\t& > svg {\n\t\tscale: 2.5;\n\n\t\t@media screen and (max-width: 480px) {\n\t\t\tscale: 2;\n\t\t}\n\t}\n}\n\n.autoLyricLayout {\n\t--info-timing-func-in: cubic-bezier(0.5, 0, 0.75, 0);\n\t--info-timing-func-out: cubic-bezier(0.25, 1, 0.5, 1);\n}\n\n.bigMusicInfo {\n\ttransition:\n\t\ttransform 0.3s var(--info-timing-func-in),\n\t\topacity 0.3s var(--info-timing-func-in);\n\ttransform: translateY(-25vh);\n\topacity: 0;\n\toverflow-x: hidden;\n\tmin-width: 0;\n\tpadding: 2em 0;\n\n\t@media screen and (max-height: 768px) {\n\t\tpadding: 1em 0;\n\t}\n\n\t@media screen and (max-height: 512px) {\n\t\tpadding: 0.25em 0;\n\t}\n}\n\n.bigMusicInfo.hideLyric {\n\ttransition:\n\t\ttransform 0.5s 0.3s var(--info-timing-func-out),\n\t\topacity 0.5s 0.3s var(--info-timing-func-out);\n\ttransform: translateY(0);\n\topacity: 1;\n}\n\n.smallMusicInfo {\n\ttransition:\n\t\ttransform 0.5s 0.3s var(--info-timing-func-out),\n\t\topacity 0.3s 0.3s var(--info-timing-func-out);\n\ttransform: translateY(0);\n\topacity: 1;\n\tfont-size: clamp(1em, 2vh, 1.25em) !important;\n}\n\n.smallMusicInfo.hideLyric {\n\ttransition:\n\t\ttransform 0.3s var(--info-timing-func-in),\n\t\topacity 0.3s var(--info-timing-func-in);\n\ttransform: translateY(25vh);\n\topacity: 0;\n}\n\n.bigVolumeControl {\n\tpadding-bottom: 4em;\n\n\t@media screen and (max-height: 768px) {\n\t\tpadding-bottom: 2em;\n\t}\n\n\t@media screen and (max-height: 512px) {\n\t\tpadding-bottom: 1em;\n\t}\n}\n","/**\n * @fileoverview\n * 已经部署好所有组件的歌词播放器组件，在正确设置所有的 Jotai 状态后可以开箱即用\n */\n\nimport type { OptimizeLyricOptions } from \"@applemusic-like-lyrics/core\";\nimport {\n\tBackgroundRender,\n\tLyricPlayer,\n\ttype LyricPlayerRef,\n\tMeshGradientRenderer,\n\tPixiRenderer,\n} from \"@applemusic-like-lyrics/react\";\nimport structuredClone from \"@ungap/structured-clone\";\nimport classNames from \"classnames\";\nimport { AnimatePresence, LayoutGroup } from \"framer-motion\";\nimport { atom, useAtom, useAtomValue, useSetAtom } from \"jotai\";\nimport {\n\ttype FC,\n\ttype HTMLProps,\n\tuseEffect,\n\tuseLayoutEffect,\n\tuseMemo,\n\tuseRef,\n\tuseState,\n} from \"react\";\nimport { AutoLyricLayout } from \"../../layout/auto\";\nimport { toDuration } from \"../../utils\";\nimport { AudioFFTVisualizer } from \"../AudioFFTVisualizer\";\nimport { AudioQualityTag } from \"../AudioQualityTag\";\nimport { BouncingSlider } from \"../BouncingSlider\";\nimport { ControlThumb } from \"../ControlThumb\";\nimport { Cover } from \"../Cover\";\nimport { MediaButton } from \"../MediaButton\";\nimport { MusicInfo } from \"../MusicInfo\";\nimport { PrebuiltToggleIconButton } from \"../ToggleIconButton\";\nimport { PrebuiltToggleIconButtonType } from \"../ToggleIconButton/prebuilt-enum\";\n\nimport { VolumeControl } from \"../VolumeControlSlider\";\n\nimport IconForward from \"./icon_forward.svg?react\";\nimport IconPause from \"./icon_pause.svg?react\";\nimport IconPlay from \"./icon_play.svg?react\";\nimport IconRewind from \"./icon_rewind.svg?react\";\nimport RepeatIcon from \"./repeat.svg?react\";\nimport RepeatActiveIcon from \"./repeat-active.svg?react\";\nimport RepeatOneActiveIcon from \"./repeat-one-active.svg?react\";\nimport ShuffleIcon from \"./shuffle.svg?react\";\nimport ShuffleActiveIcon from \"./shuffle-active.svg?react\";\n\nimport \"./icon-animations.css\";\nimport React from \"react\";\nimport {\n\tonChangeVolumeAtom,\n\tonClickAudioQualityTagAtom,\n\tonClickControlThumbAtom,\n\tonLyricLineClickAtom,\n\tonLyricLineContextMenuAtom,\n\tonPlayOrResumeAtom,\n\tonRequestNextSongAtom,\n\tonRequestOpenMenuAtom,\n\tonRequestPrevSongAtom,\n\tonSeekPositionAtom,\n} from \"../../states/callbacks\";\nimport {\n\tcssBackgroundPropertyAtom,\n\tenableLyricLineBlurEffectAtom,\n\tenableLyricLineScaleEffectAtom,\n\tenableLyricLineSpringAnimationAtom,\n\tenableLyricRomanLineAtom,\n\tenableLyricSwapTransRomanLineAtom,\n\tenableLyricTranslationLineAtom,\n\thideLyricViewAtom,\n\tisLyricPageOpenedAtom,\n\tLyricSizePreset,\n\tlyricBackgroundFPSAtom,\n\tlyricBackgroundRendererAtom,\n\tlyricBackgroundRenderScaleAtom,\n\tlyricBackgroundStaticModeAtom,\n\tlyricFontFamilyAtom,\n\tlyricFontWeightAtom,\n\tlyricLetterSpacingAtom,\n\tlyricPlayerImplementationAtom,\n\tlyricSizePresetAtom,\n\tlyricWordFadeWidthAtom,\n\tPlayerControlsType,\n\tplayerControlsTypeAtom,\n\tshowBottomControlAtom,\n\tshowMusicAlbumAtom,\n\tshowMusicArtistsAtom,\n\tshowMusicNameAtom,\n\tshowRemainingTimeAtom,\n\tshowVolumeControlAtom,\n\tVerticalCoverLayout,\n\tverticalCoverLayoutAtom,\n} from \"../../states/configAtoms\";\nimport {\n\tcycleRepeatModeActionAtom,\n\tisShuffleActiveAtom,\n\tRepeatMode,\n\trepeatModeAtom,\n\ttoggleShuffleActionAtom,\n} from \"../../states/controlsAtoms\";\nimport {\n\tfftDataAtom,\n\tlowFreqVolumeAtom,\n\tmusicAlbumNameAtom,\n\tmusicArtistsAtom,\n\tmusicCoverAtom,\n\tmusicCoverIsVideoAtom,\n\tmusicDurationAtom,\n\tmusicLyricLinesAtom,\n\tmusicNameAtom,\n\tmusicPlayingAtom,\n\tmusicPlayingPositionAtom,\n\tmusicQualityTagAtom,\n\tmusicVolumeAtom,\n} from \"../../states/dataAtoms\";\nimport styles from \"./index.module.css\";\n\nconst PrebuiltMusicInfo: FC<{\n\tclassName?: string;\n\tstyle?: React.CSSProperties;\n}> = ({ className, style }) => {\n\tconst musicName = useAtomValue(musicNameAtom);\n\tconst musicArtists = useAtomValue(musicArtistsAtom);\n\tconst musicAlbum = useAtomValue(musicAlbumNameAtom);\n\tconst onMenuClicked = useAtomValue(onRequestOpenMenuAtom).onEmit;\n\tconst showMusicName = useAtomValue(showMusicNameAtom);\n\tconst showMusicArtists = useAtomValue(showMusicArtistsAtom);\n\tconst showMusicAlbum = useAtomValue(showMusicAlbumAtom);\n\tconst fontFamily = useAtomValue(lyricFontFamilyAtom);\n\tconst fontWeight = useAtomValue(lyricFontWeightAtom);\n\tconst letterSpacing = useAtomValue(lyricLetterSpacingAtom);\n\tconst combinedStyle = useMemo(\n\t\t() => ({\n\t\t\t...style,\n\t\t\tfontFamily: fontFamily || undefined,\n\t\t\tfontWeight: fontWeight || undefined,\n\t\t\tletterSpacing: letterSpacing || undefined,\n\t\t}),\n\t\t[style, fontFamily, fontWeight, letterSpacing],\n\t);\n\n\treturn (\n\t\t<MusicInfo\n\t\t\tclassName={className}\n\t\t\tstyle={combinedStyle}\n\t\t\tname={showMusicName ? musicName : undefined}\n\t\t\tartists={showMusicArtists ? musicArtists.map((v) => v.name) : undefined}\n\t\t\talbum={showMusicAlbum ? musicAlbum : undefined}\n\t\t\tonMenuButtonClicked={onMenuClicked}\n\t\t/>\n\t);\n};\n\nconst PrebuiltMediaButtons: FC<{\n\tshowOtherButtons?: boolean;\n}> = ({ showOtherButtons }) => {\n\tconst musicIsPlaying = useAtomValue(musicPlayingAtom);\n\tconst onRequestPrevSong = useAtomValue(onRequestPrevSongAtom).onEmit;\n\tconst onRequestNextSong = useAtomValue(onRequestNextSongAtom).onEmit;\n\tconst onPlayOrResume = useAtomValue(onPlayOrResumeAtom).onEmit;\n\n\tconst isShuffleOn = useAtomValue(isShuffleActiveAtom);\n\tconst currentRepeatMode = useAtomValue(repeatModeAtom);\n\n\tconst toggleShuffle = useSetAtom(toggleShuffleActionAtom);\n\tconst cycleRepeat = useSetAtom(cycleRepeatModeActionAtom);\n\n\tconst iconStyle = {\n\t\twidth: \"1.3em\",\n\t\theight: \"1.3em\",\n\t};\n\n\tconst renderRepeatIcon = () => {\n\t\tswitch (currentRepeatMode) {\n\t\t\tcase RepeatMode.One:\n\t\t\t\treturn <RepeatOneActiveIcon color=\"#ffffffff\" style={iconStyle} />;\n\t\t\tcase RepeatMode.All:\n\t\t\t\treturn <RepeatActiveIcon color=\"#ffffffff\" style={iconStyle} />;\n\t\t\tdefault:\n\t\t\t\treturn <RepeatIcon color=\"#ffffffff\" style={iconStyle} />;\n\t\t}\n\t};\n\n\treturn (\n\t\t<>\n\t\t\t{showOtherButtons && (\n\t\t\t\t<MediaButton className={styles.songMediaButton} onClick={toggleShuffle}>\n\t\t\t\t\t{isShuffleOn ? (\n\t\t\t\t\t\t<ShuffleActiveIcon color=\"#ffffffff\" style={iconStyle} />\n\t\t\t\t\t) : (\n\t\t\t\t\t\t<ShuffleIcon color=\"#ffffffff\" style={iconStyle} />\n\t\t\t\t\t)}\n\t\t\t\t</MediaButton>\n\t\t\t)}\n\t\t\t<MediaButton\n\t\t\t\tclassName={styles.songMediaButton}\n\t\t\t\tonClick={onRequestPrevSong}\n\t\t\t>\n\t\t\t\t<IconRewind color=\"#FFFFFF\" />\n\t\t\t</MediaButton>\n\t\t\t<MediaButton\n\t\t\t\tclassName={styles.songMediaPlayButton}\n\t\t\t\tonClick={onPlayOrResume}\n\t\t\t>\n\t\t\t\t{musicIsPlaying ? (\n\t\t\t\t\t<IconPause color=\"#FFFFFF\" />\n\t\t\t\t) : (\n\t\t\t\t\t<IconPlay color=\"#FFFFFF\" />\n\t\t\t\t)}\n\t\t\t</MediaButton>\n\t\t\t<MediaButton\n\t\t\t\tclassName={styles.songMediaButton}\n\t\t\t\tonClick={onRequestNextSong}\n\t\t\t>\n\t\t\t\t<IconForward color=\"#FFFFFF\" />\n\t\t\t</MediaButton>\n\n\t\t\t{showOtherButtons && (\n\t\t\t\t<MediaButton className={styles.songMediaButton} onClick={cycleRepeat}>\n\t\t\t\t\t{renderRepeatIcon()}\n\t\t\t\t</MediaButton>\n\t\t\t)}\n\t\t</>\n\t);\n};\n\nconst TimeLabel: FC<{ isRemaining?: boolean }> = ({ isRemaining }) => {\n\tconst currentPosition = useAtomValue(musicPlayingPositionAtom);\n\tconst duration = useAtomValue(musicDurationAtom);\n\tconst time = useMemo(\n\t\t() =>\n\t\t\ttoDuration(\n\t\t\t\tisRemaining\n\t\t\t\t\t? (currentPosition - duration) / 1000\n\t\t\t\t\t: currentPosition / 1000,\n\t\t\t),\n\t\t[currentPosition, duration, isRemaining],\n\t);\n\treturn <>{time}</>;\n};\n\nconst TotalDurationLabel: FC = () => {\n\tconst duration = useAtomValue(musicDurationAtom);\n\tconst time = useMemo(() => toDuration(duration / 1000), [duration]);\n\treturn <>{time}</>;\n};\n\nconst manualSeekTriggerAtom = atom<{ time: number; timestamp: number } | null>(\n\tnull,\n);\n\nconst PrebuiltProgressBar: FC = React.memo(() => {\n\tconst musicDuration = useAtomValue(musicDurationAtom);\n\tconst musicPosition = useAtomValue(musicPlayingPositionAtom);\n\tconst musicIsPlaying = useAtomValue(musicPlayingAtom);\n\tconst musicQualityTag = useAtomValue(musicQualityTagAtom);\n\tconst onClickAudioQualityTag = useAtomValue(\n\t\tonClickAudioQualityTagAtom,\n\t).onEmit;\n\tconst onSeekPosition = useAtomValue(onSeekPositionAtom).onEmit;\n\tconst setManualSeekTrigger = useSetAtom(manualSeekTriggerAtom);\n\n\tconst [showRemaining, setShowRemaining] = useAtom(showRemainingTimeAtom);\n\n\tconst fontFamily = useAtomValue(lyricFontFamilyAtom);\n\tconst fontWeight = useAtomValue(lyricFontWeightAtom);\n\tconst letterSpacing = useAtomValue(lyricLetterSpacingAtom);\n\n\tconst fontStyle = useMemo(\n\t\t() => ({\n\t\t\tfontFamily: fontFamily || undefined,\n\t\t\tfontWeight: fontWeight || undefined,\n\t\t\tletterSpacing: letterSpacing || undefined,\n\t\t}),\n\t\t[fontFamily, fontWeight, letterSpacing],\n\t);\n\n\tconst handleSeek = (position: number) => {\n\t\tonSeekPosition?.(position);\n\t\tsetManualSeekTrigger({ time: position, timestamp: Date.now() });\n\t};\n\n\treturn (\n\t\t<div>\n\t\t\t<BouncingSlider\n\t\t\t\tisPlaying={musicIsPlaying}\n\t\t\t\tmin={0}\n\t\t\t\tmax={musicDuration}\n\t\t\t\tvalue={musicPosition}\n\t\t\t\tonChange={handleSeek}\n\t\t\t/>\n\t\t\t<div className={styles.progressBarLabels}>\n\t\t\t\t<div style={fontStyle}>\n\t\t\t\t\t<TimeLabel />\n\t\t\t\t</div>\n\t\t\t\t<div>\n\t\t\t\t\t<AnimatePresence mode=\"popLayout\">\n\t\t\t\t\t\t{musicQualityTag && (\n\t\t\t\t\t\t\t<AudioQualityTag\n\t\t\t\t\t\t\t\tclassName={styles.qualityTag}\n\t\t\t\t\t\t\t\tisDolbyAtmos={musicQualityTag.isDolbyAtmos}\n\t\t\t\t\t\t\t\ttagText={musicQualityTag.tagText}\n\t\t\t\t\t\t\t\ttagIcon={musicQualityTag.tagIcon}\n\t\t\t\t\t\t\t\tonClick={onClickAudioQualityTag}\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t)}\n\t\t\t\t\t</AnimatePresence>\n\t\t\t\t</div>\n\t\t\t\t<div\n\t\t\t\t\tstyle={{ ...fontStyle, cursor: \"pointer\", userSelect: \"none\" }}\n\t\t\t\t\tonClick={() => setShowRemaining(!showRemaining)}\n\t\t\t\t>\n\t\t\t\t\t{showRemaining ? <TimeLabel isRemaining /> : <TotalDurationLabel />}\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\t);\n});\n\nfunction getLyricFontSizeFromPreset(preset: LyricSizePreset): string {\n\tswitch (preset) {\n\t\tcase LyricSizePreset.Tiny:\n\t\t\treturn \"max(max(2.5vh, 1.25vw), 10px)\";\n\t\tcase LyricSizePreset.ExtraSmall:\n\t\t\treturn \"max(max(3vh, 1.5vw), 10px)\";\n\t\tcase LyricSizePreset.Small:\n\t\t\treturn \"max(max(4vh, 2vw), 12px)\";\n\t\tcase LyricSizePreset.Large:\n\t\t\treturn \"max(max(6vh, 3vw), 16px)\";\n\t\tcase LyricSizePreset.ExtraLarge:\n\t\t\treturn \"max(max(7vh, 3.5vw), 18px)\";\n\t\tcase LyricSizePreset.Huge:\n\t\t\treturn \"max(max(8vh, 4vw), 20px)\";\n\t\tdefault:\n\t\t\treturn \"max(max(5vh, 2.5vw), 14px)\";\n\t}\n}\n\nconst PrebuiltCoreLyricPlayer: FC<{\n\talignPosition: number;\n\talignAnchor: \"center\" | \"bottom\" | \"top\";\n\tbottomLine?: React.ReactNode;\n\toptimizeOptions?: OptimizeLyricOptions;\n}> = ({ alignPosition, alignAnchor, bottomLine, optimizeOptions }) => {\n\tconst amllPlayerRef = useRef<LyricPlayerRef>(null);\n\tconst musicIsPlaying = useAtomValue(musicPlayingAtom);\n\tconst lyricLines = useAtomValue(musicLyricLinesAtom);\n\tconst isLyricPageOpened = useAtomValue(isLyricPageOpenedAtom);\n\tconst musicPlayingPosition = useAtomValue(musicPlayingPositionAtom);\n\n\tconst lyricFontFamily = useAtomValue(lyricFontFamilyAtom);\n\tconst lyricFontWeight = useAtomValue(lyricFontWeightAtom);\n\tconst lyricLetterSpacing = useAtomValue(lyricLetterSpacingAtom);\n\tconst lyricSizePreset = useAtomValue(lyricSizePresetAtom);\n\n\tconst lyricPlayerImplementation = useAtomValue(\n\t\tlyricPlayerImplementationAtom,\n\t).lyricPlayer;\n\n\tconst enableLyricLineBlurEffect = useAtomValue(enableLyricLineBlurEffectAtom);\n\tconst enableLyricLineScaleEffect = useAtomValue(\n\t\tenableLyricLineScaleEffectAtom,\n\t);\n\tconst enableLyricLineSpringAnimation = useAtomValue(\n\t\tenableLyricLineSpringAnimationAtom,\n\t);\n\tconst lyricWordFadeWidth = useAtomValue(lyricWordFadeWidthAtom);\n\tconst enableLyricTranslationLine = useAtomValue(\n\t\tenableLyricTranslationLineAtom,\n\t);\n\tconst enableLyricRomanLine = useAtomValue(enableLyricRomanLineAtom);\n\tconst enableLyricSwapTransRomanLine = useAtomValue(\n\t\tenableLyricSwapTransRomanLineAtom,\n\t);\n\tconst onLyricLineClick = useAtomValue(onLyricLineClickAtom).onEmit;\n\tconst onLyricLineContextMenu = useAtomValue(\n\t\tonLyricLineContextMenuAtom,\n\t).onEmit;\n\tconst manualSeekTrigger = useAtomValue(manualSeekTriggerAtom);\n\n\tconst processedLyricLines = useMemo(() => {\n\t\tconst processed = structuredClone(lyricLines);\n\t\tif (!enableLyricTranslationLine) {\n\t\t\tfor (const line of processed) {\n\t\t\t\tline.translatedLyric = \"\";\n\t\t\t}\n\t\t}\n\t\tif (!enableLyricRomanLine) {\n\t\t\tfor (const line of processed) {\n\t\t\t\tline.romanLyric = \"\";\n\t\t\t}\n\t\t}\n\t\tif (enableLyricSwapTransRomanLine) {\n\t\t\tfor (const line of processed) {\n\t\t\t\t[line.translatedLyric, line.romanLyric] = [\n\t\t\t\t\tline.romanLyric,\n\t\t\t\t\tline.translatedLyric,\n\t\t\t\t];\n\t\t\t}\n\t\t}\n\t\treturn processed;\n\t}, [\n\t\tlyricLines,\n\t\tenableLyricTranslationLine,\n\t\tenableLyricRomanLine,\n\t\tenableLyricSwapTransRomanLine,\n\t]);\n\n\tuseEffect(() => {\n\t\tif (manualSeekTrigger) {\n\t\t\tamllPlayerRef.current?.lyricPlayer?.setCurrentTime(\n\t\t\t\tmanualSeekTrigger.time,\n\t\t\t\ttrue,\n\t\t\t);\n\t\t}\n\t}, [manualSeekTrigger]);\n\n\treturn (\n\t\t<LyricPlayer\n\t\t\tstyle={\n\t\t\t\t{\n\t\t\t\t\twidth: \"100%\",\n\t\t\t\t\theight: \"100%\",\n\t\t\t\t\tfontFamily: lyricFontFamily || undefined,\n\t\t\t\t\tfontWeight: lyricFontWeight || undefined,\n\t\t\t\t\tletterSpacing: lyricLetterSpacing || undefined,\n\t\t\t\t\t\"--amll-lp-font-size\": getLyricFontSizeFromPreset(lyricSizePreset),\n\t\t\t\t} as React.CSSProperties\n\t\t\t}\n\t\t\tref={amllPlayerRef}\n\t\t\tplaying={musicIsPlaying}\n\t\t\tdisabled={!isLyricPageOpened}\n\t\t\talignPosition={alignPosition}\n\t\t\talignAnchor={alignAnchor}\n\t\t\tcurrentTime={musicPlayingPosition}\n\t\t\tlyricLines={processedLyricLines}\n\t\t\toptimizeOptions={optimizeOptions}\n\t\t\tenableBlur={enableLyricLineBlurEffect}\n\t\t\tenableScale={enableLyricLineScaleEffect}\n\t\t\tenableSpring={enableLyricLineSpringAnimation}\n\t\t\twordFadeWidth={lyricWordFadeWidth}\n\t\t\tlyricPlayer={lyricPlayerImplementation}\n\t\t\tonLyricLineClick={(evt) => {\n\t\t\t\tconst targetTime = evt.line.getLine().startTime;\n\t\t\t\tamllPlayerRef.current?.lyricPlayer?.setCurrentTime(targetTime, true);\n\t\t\t\tonLyricLineClick?.(evt, amllPlayerRef.current);\n\t\t\t}}\n\t\t\tonLyricLineContextMenu={(evt) =>\n\t\t\t\tonLyricLineContextMenu?.(evt, amllPlayerRef.current)\n\t\t\t}\n\t\t\tbottomLine={bottomLine}\n\t\t/>\n\t);\n};\n\nconst PrebuiltVolumeControl: FC<{\n\tstyle?: React.CSSProperties;\n\tclassName?: string;\n}> = ({ style, className }) => {\n\tconst musicVolume = useAtomValue(musicVolumeAtom);\n\tconst onChangeVolume = useAtomValue(onChangeVolumeAtom).onEmit;\n\tconst showVolumeControl = useAtomValue(showVolumeControlAtom);\n\tif (showVolumeControl)\n\t\treturn (\n\t\t\t<VolumeControl\n\t\t\t\tvalue={musicVolume}\n\t\t\t\tmin={0}\n\t\t\t\tmax={1}\n\t\t\t\tstyle={style}\n\t\t\t\tclassName={className}\n\t\t\t\tonChange={onChangeVolume}\n\t\t\t/>\n\t\t);\n\treturn null;\n};\n\nconst PrebuiltMusicControls: FC<\n\t{\n\t\tshowOtherButtons?: boolean;\n\t} & HTMLProps<HTMLDivElement>\n> = ({ className, showOtherButtons, ...props }) => {\n\tconst playerControlsType = useAtomValue(playerControlsTypeAtom);\n\tconst fftData = useAtomValue(fftDataAtom);\n\treturn (\n\t\t<div className={classNames(styles.controls, className)} {...props}>\n\t\t\t{playerControlsType === PlayerControlsType.Controls && (\n\t\t\t\t<PrebuiltMediaButtons showOtherButtons={showOtherButtons} />\n\t\t\t)}\n\t\t\t{playerControlsType === PlayerControlsType.FFT && (\n\t\t\t\t<AudioFFTVisualizer\n\t\t\t\t\tstyle={{\n\t\t\t\t\t\twidth: \"100%\",\n\t\t\t\t\t\theight: \"8vh\",\n\t\t\t\t\t}}\n\t\t\t\t\tfftData={fftData}\n\t\t\t\t/>\n\t\t\t)}\n\t\t</div>\n\t);\n};\n\nexport interface PrebuiltLyricPlayerProps extends HTMLProps<HTMLDivElement> {\n\tbottomLineSlot?: React.ReactNode;\n\toptimizeOptions?: OptimizeLyricOptions;\n}\n\n/**\n * 已经部署好所有组件的歌词播放器组件，在正确设置所有的 Jotai 状态后可以开箱即用\n */\nexport const PrebuiltLyricPlayer: FC<PrebuiltLyricPlayerProps> = ({\n\tclassName,\n\tbottomLineSlot,\n\toptimizeOptions,\n\t...rest\n}) => {\n\tconst [hideLyricView, setHideLyricView] = useAtom(hideLyricViewAtom);\n\tconst musicCover = useAtomValue(musicCoverAtom);\n\tconst musicCoverIsVideo = useAtomValue(musicCoverIsVideoAtom);\n\tconst musicIsPlaying = useAtomValue(musicPlayingAtom);\n\tconst lowFreqVolume = useAtomValue(lowFreqVolumeAtom);\n\tconst isLyricPageOpened = useAtomValue(isLyricPageOpenedAtom);\n\tconst lyricBackgroundFPS = useAtomValue(lyricBackgroundFPSAtom);\n\tconst verticalCoverLayout = useAtomValue(verticalCoverLayoutAtom);\n\tconst lyricBackgroundStaticMode = useAtomValue(lyricBackgroundStaticModeAtom);\n\tconst lyricBackgroundRenderScale = useAtomValue(\n\t\tlyricBackgroundRenderScaleAtom,\n\t);\n\tconst onClickControlThumb = useAtomValue(onClickControlThumbAtom).onEmit;\n\tconst [isVertical, setIsVertical] = useState(false);\n\tconst [alignPosition, setAlignPosition] = useState(0.25);\n\tconst [alignAnchor, setAlignAnchor] = useState<\"center\" | \"bottom\" | \"top\">(\n\t\t\"top\",\n\t);\n\tconst coverElRef = useRef<HTMLDivElement>(null);\n\tconst [layoutEl, setLayoutEl] = useState<HTMLDivElement | null>(null);\n\tconst backgroundRenderer = useAtomValue(lyricBackgroundRendererAtom);\n\tconst showBottomControl = useAtomValue(showBottomControlAtom);\n\n\tconst cssBackgroundProperty = useAtomValue(cssBackgroundPropertyAtom);\n\n\tuseLayoutEffect(() => {\n\t\t// 如果是水平布局，则让歌词对齐到封面的中心\n\t\tif (!isVertical && coverElRef.current && layoutEl) {\n\t\t\tconst obz = new ResizeObserver(() => {\n\t\t\t\tif (!(coverElRef.current && layoutEl)) return;\n\t\t\t\tconst coverB = coverElRef.current.getBoundingClientRect();\n\t\t\t\tconst layoutB = layoutEl.getBoundingClientRect();\n\t\t\t\tsetAlignPosition(\n\t\t\t\t\t(coverB.top + coverB.height / 2 - layoutB.top) / layoutB.height,\n\t\t\t\t);\n\t\t\t});\n\t\t\tobz.observe(coverElRef.current);\n\t\t\tobz.observe(layoutEl);\n\t\t\tsetAlignAnchor(\"center\");\n\t\t\treturn () => obz.disconnect();\n\t\t}\n\t\t// 如果是垂直布局，则把歌词对齐到顶部（歌曲信息下方）\n\t\tif (isVertical) {\n\t\t\tsetAlignPosition(0.1);\n\t\t\tsetAlignAnchor(\"top\");\n\t\t}\n\t\treturn;\n\t}, [isVertical, layoutEl]);\n\n\tconst verticalImmerseCover =\n\t\thideLyricView &&\n\t\t(verticalCoverLayout === VerticalCoverLayout.Auto\n\t\t\t? musicCoverIsVideo && isVertical\n\t\t\t: verticalCoverLayout === VerticalCoverLayout.ForceImmersive);\n\n\treturn (\n\t\t<LayoutGroup>\n\t\t\t<AutoLyricLayout\n\t\t\t\tonElementMounted={setLayoutEl}\n\t\t\t\tclassName={classNames(styles.autoLyricLayout, className)}\n\t\t\t\tonLayoutChange={setIsVertical}\n\t\t\t\tverticalImmerseCover={verticalImmerseCover}\n\t\t\t\tcoverSlot={\n\t\t\t\t\t<Cover\n\t\t\t\t\t\tcoverUrl={musicCover}\n\t\t\t\t\t\tcoverIsVideo={musicCoverIsVideo}\n\t\t\t\t\t\tref={coverElRef}\n\t\t\t\t\t\tmusicPaused={\n\t\t\t\t\t\t\t!musicIsPlaying && !musicCoverIsVideo && verticalImmerseCover\n\t\t\t\t\t\t}\n\t\t\t\t\t/>\n\t\t\t\t}\n\t\t\t\tthumbSlot={<ControlThumb onClick={onClickControlThumb} />}\n\t\t\t\tsmallControlsSlot={\n\t\t\t\t\t<PrebuiltMusicInfo\n\t\t\t\t\t\tclassName={classNames(\n\t\t\t\t\t\t\tstyles.smallMusicInfo,\n\t\t\t\t\t\t\thideLyricView && styles.hideLyric,\n\t\t\t\t\t\t)}\n\t\t\t\t\t/>\n\t\t\t\t}\n\t\t\t\tbackgroundSlot={\n\t\t\t\t\ttypeof backgroundRenderer.renderer === \"string\" &&\n\t\t\t\t\tbackgroundRenderer.renderer === \"css-bg\" ? (\n\t\t\t\t\t\t<div\n\t\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\t\tzIndex: -1,\n\t\t\t\t\t\t\t\twidth: \"100%\",\n\t\t\t\t\t\t\t\theight: \"100%\",\n\t\t\t\t\t\t\t\tminWidth: \"0\",\n\t\t\t\t\t\t\t\tminHeight: \"0\",\n\t\t\t\t\t\t\t\toverflow: \"hidden\",\n\t\t\t\t\t\t\t\tbackground: cssBackgroundProperty,\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t/>\n\t\t\t\t\t) : (\n\t\t\t\t\t\t<BackgroundRender\n\t\t\t\t\t\t\talbum={musicCover}\n\t\t\t\t\t\t\talbumIsVideo={musicCoverIsVideo}\n\t\t\t\t\t\t\tlowFreqVolume={lowFreqVolume}\n\t\t\t\t\t\t\trenderScale={lyricBackgroundRenderScale}\n\t\t\t\t\t\t\tfps={lyricBackgroundFPS}\n\t\t\t\t\t\t\trenderer={\n\t\t\t\t\t\t\t\ttypeof backgroundRenderer.renderer === \"string\"\n\t\t\t\t\t\t\t\t\t? backgroundRenderer.renderer === \"pixi\"\n\t\t\t\t\t\t\t\t\t\t? PixiRenderer\n\t\t\t\t\t\t\t\t\t\t: MeshGradientRenderer\n\t\t\t\t\t\t\t\t\t: backgroundRenderer.renderer\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tstaticMode={lyricBackgroundStaticMode || !isLyricPageOpened}\n\t\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\t\tzIndex: -1,\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t/>\n\t\t\t\t\t)\n\t\t\t\t}\n\t\t\t\tbigControlsSlot={\n\t\t\t\t\t<>\n\t\t\t\t\t\t<PrebuiltMusicInfo\n\t\t\t\t\t\t\tclassName={classNames(\n\t\t\t\t\t\t\t\tstyles.bigMusicInfo,\n\t\t\t\t\t\t\t\thideLyricView && styles.hideLyric,\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t/>\n\t\t\t\t\t\t<PrebuiltProgressBar />\n\t\t\t\t\t\t<PrebuiltMusicControls className={styles.bigControls} />\n\t\t\t\t\t\t{showBottomControl && (\n\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\t\t\tdisplay: \"flex\",\n\t\t\t\t\t\t\t\t\tjustifyContent: \"space-evenly\",\n\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t<PrebuiltToggleIconButton\n\t\t\t\t\t\t\t\t\ttype={PrebuiltToggleIconButtonType.Lyrics}\n\t\t\t\t\t\t\t\t\tchecked={!hideLyricView}\n\t\t\t\t\t\t\t\t\tonClick={() => setHideLyricView(!hideLyricView)}\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t<PrebuiltToggleIconButton\n\t\t\t\t\t\t\t\t\ttype={PrebuiltToggleIconButtonType.AirPlay}\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t<PrebuiltToggleIconButton\n\t\t\t\t\t\t\t\t\ttype={PrebuiltToggleIconButtonType.Playlist}\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t)}\n\t\t\t\t\t\t<PrebuiltVolumeControl className={styles.bigVolumeControl} />\n\t\t\t\t\t</>\n\t\t\t\t}\n\t\t\t\tcontrolsSlot={\n\t\t\t\t\t<>\n\t\t\t\t\t\t<PrebuiltMusicInfo className={styles.horizontalControls} />\n\t\t\t\t\t\t<PrebuiltProgressBar />\n\t\t\t\t\t\t<PrebuiltMusicControls\n\t\t\t\t\t\t\tclassName={styles.controls}\n\t\t\t\t\t\t\tshowOtherButtons\n\t\t\t\t\t\t/>\n\t\t\t\t\t\t<PrebuiltVolumeControl />\n\t\t\t\t\t</>\n\t\t\t\t}\n\t\t\t\thorizontalBottomControls={\n\t\t\t\t\tshowBottomControl && (\n\t\t\t\t\t\t<>\n\t\t\t\t\t\t\t<PrebuiltToggleIconButton\n\t\t\t\t\t\t\t\ttype={PrebuiltToggleIconButtonType.Playlist}\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t<PrebuiltToggleIconButton\n\t\t\t\t\t\t\t\ttype={PrebuiltToggleIconButtonType.Lyrics}\n\t\t\t\t\t\t\t\tchecked={!hideLyricView}\n\t\t\t\t\t\t\t\tonClick={() => setHideLyricView(!hideLyricView)}\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t<div style={{ flex: \"1\" }} />\n\t\t\t\t\t\t\t<PrebuiltToggleIconButton\n\t\t\t\t\t\t\t\ttype={PrebuiltToggleIconButtonType.AirPlay}\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t</>\n\t\t\t\t\t)\n\t\t\t\t}\n\t\t\t\tlyricSlot={\n\t\t\t\t\t<PrebuiltCoreLyricPlayer\n\t\t\t\t\t\talignPosition={alignPosition}\n\t\t\t\t\t\talignAnchor={alignAnchor}\n\t\t\t\t\t\tbottomLine={bottomLineSlot}\n\t\t\t\t\t\toptimizeOptions={optimizeOptions}\n\t\t\t\t\t/>\n\t\t\t\t}\n\t\t\t\thideLyric={hideLyricView}\n\t\t\t\t{...rest}\n\t\t\t/>\n\t\t</LayoutGroup>\n\t);\n};\n","export * from \"./components\";\nexport * from \"./layout\";\nexport * from \"./states/callbacks\";\nexport * from \"./states/configAtoms\";\nexport * from \"./states/controlsAtoms\";\nexport * from \"./states/dataAtoms\";\nexport * from \"./utils\";\n"],"mappings":"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"}