import { ReactiveStore } from "@luna/core"; import { LunaSettings, LunaSwitchSetting, LunaNumberSetting } from "@luna/ui"; import React from "react"; export const settings = await ReactiveStore.getPluginStorage("RadiantLyrics", { lyricsGlowEnabled: true, trackTitleGlow: false, hideUIEnabled: true, playerBarVisible: false, CoverEverywhere: true, performanceMode: false, spinningArt: true, textGlow: 20, backgroundScale: 15, backgroundRadius: 25, backgroundContrast: 120, backgroundBlur: 80, backgroundBrightness: 40, spinSpeed: 45, settingsAffectNowPlaying: true, stickyLyricsFeature: true, stickyLyrics: false, stickyLyricsIcon: "chevron" as string, }); export const Settings = () => { const [hideUIEnabled, setHideUIEnabled] = React.useState( settings.hideUIEnabled, ); const [playerBarVisible, setPlayerBarVisible] = React.useState( settings.playerBarVisible, ); const [lyricsGlowEnabled, setLyricsGlowEnabled] = React.useState( settings.lyricsGlowEnabled, ); const [textGlow, setTextGlow] = React.useState(settings.textGlow); const [CoverEverywhere, setCoverEverywhere] = React.useState( settings.CoverEverywhere, ); const [performanceMode, setPerformanceMode] = React.useState( settings.performanceMode, ); const [spinningArt, setspinningArt] = React.useState( settings.spinningArt, ); const [backgroundContrast, setBackgroundContrast] = React.useState( settings.backgroundContrast, ); const [backgroundBlur, setBackgroundBlur] = React.useState( settings.backgroundBlur, ); const [backgroundBrightness, setBackgroundBrightness] = React.useState( settings.backgroundBrightness, ); const [spinSpeed, setSpinSpeed] = React.useState(settings.spinSpeed); const [settingsAffectNowPlaying, setSettingsAffectNowPlaying] = React.useState(settings.settingsAffectNowPlaying); const [trackTitleGlow, setTrackTitleGlow] = React.useState( settings.trackTitleGlow, ); const [backgroundScale, setBackgroundScale] = React.useState( settings.backgroundScale, ); const [backgroundRadius, setBackgroundRadius] = React.useState( settings.backgroundRadius, ); const [stickyLyricsFeature, setStickyLyricsFeature] = React.useState( settings.stickyLyricsFeature, ); // Derive props and override onChange to accept a broader first param type type BaseSwitchProps = React.ComponentProps; type AnySwitchProps = Omit & { onChange: (_: unknown, checked: boolean) => void; checked: boolean; }; const AnySwitch = LunaSwitchSetting as unknown as React.ComponentType< AnySwitchProps >; return ( { setLyricsGlowEnabled((settings.lyricsGlowEnabled = checked)); // Update styles immediately when setting changes if ((window as any).updateRadiantLyricsStyles) { (window as any).updateRadiantLyricsStyles(); } }} /> { setTrackTitleGlow((settings.trackTitleGlow = checked)); if ((window as any).updateRadiantLyricsStyles) { (window as any).updateRadiantLyricsStyles(); } }} /> { setStickyLyricsFeature((settings.stickyLyricsFeature = checked)); if ((window as any).updateStickyLyricsFeature) { (window as any).updateStickyLyricsFeature(); } }} /> { setHideUIEnabled((settings.hideUIEnabled = checked)); }} /> { console.log("Player Bar Visibility:", checked ? "visible" : "hidden"); setPlayerBarVisible((settings.playerBarVisible = checked)); // Update styles immediately when setting changes if ((window as any).updateRadiantLyricsStyles) { (window as any).updateRadiantLyricsStyles(); } }} /> { console.log( "Spinning Cover Everywhere:", checked ? "enabled" : "disabled", ); setCoverEverywhere( (settings.CoverEverywhere = checked), ); // Update styles immediately when setting changes if ((window as any).updateRadiantLyricsGlobalBackground) { (window as any).updateRadiantLyricsGlobalBackground(); } }} /> { console.log("Performance Mode:", checked ? "enabled" : "disabled"); setPerformanceMode((settings.performanceMode = checked)); // Update background animations immediately when setting changes if ((window as any).updateRadiantLyricsGlobalBackground) { (window as any).updateRadiantLyricsGlobalBackground(); } if ((window as any).updateRadiantLyricsNowPlayingBackground) { (window as any).updateRadiantLyricsNowPlayingBackground(); } }} /> { console.log( "Background Cover Spin:", checked ? "enabled" : "disabled", ); setspinningArt((settings.spinningArt = checked)); if ((window as any).updateRadiantLyricsGlobalBackground) { (window as any).updateRadiantLyricsGlobalBackground(); } if ( settings.settingsAffectNowPlaying && (window as any).updateRadiantLyricsNowPlayingBackground ) { (window as any).updateRadiantLyricsNowPlayingBackground(); } }} /> { setTextGlow((settings.textGlow = value)); // Update variables immediately when setting changes if ((window as any).updateRadiantLyricsTextGlow) { (window as any).updateRadiantLyricsTextGlow(); } }} /> { setBackgroundScale((settings.backgroundScale = value)); if ((window as any).updateRadiantLyricsGlobalBackground) { (window as any).updateRadiantLyricsGlobalBackground(); } if ( settings.settingsAffectNowPlaying && (window as any).updateRadiantLyricsNowPlayingBackground ) { (window as any).updateRadiantLyricsNowPlayingBackground(); } }} /> { setBackgroundRadius((settings.backgroundRadius = value)); if ((window as any).updateRadiantLyricsGlobalBackground) { (window as any).updateRadiantLyricsGlobalBackground(); } if ( settings.settingsAffectNowPlaying && (window as any).updateRadiantLyricsNowPlayingBackground ) { (window as any).updateRadiantLyricsNowPlayingBackground(); } }} /> { setBackgroundContrast((settings.backgroundContrast = value)); if ((window as any).updateRadiantLyricsGlobalBackground) { (window as any).updateRadiantLyricsGlobalBackground(); } if ( settings.settingsAffectNowPlaying && (window as any).updateRadiantLyricsNowPlayingBackground ) { (window as any).updateRadiantLyricsNowPlayingBackground(); } }} /> { console.log("Background Blur:", value); setBackgroundBlur((settings.backgroundBlur = value)); if ((window as any).updateRadiantLyricsGlobalBackground) { (window as any).updateRadiantLyricsGlobalBackground(); } if ( settings.settingsAffectNowPlaying && (window as any).updateRadiantLyricsNowPlayingBackground ) { (window as any).updateRadiantLyricsNowPlayingBackground(); } }} /> { console.log("Background Brightness:", value); setBackgroundBrightness((settings.backgroundBrightness = value)); if ((window as any).updateRadiantLyricsGlobalBackground) { (window as any).updateRadiantLyricsGlobalBackground(); } if ( settings.settingsAffectNowPlaying && (window as any).updateRadiantLyricsNowPlayingBackground ) { (window as any).updateRadiantLyricsNowPlayingBackground(); } }} /> { console.log("Spin Speed:", value); setSpinSpeed((settings.spinSpeed = value)); if ((window as any).updateRadiantLyricsGlobalBackground) { (window as any).updateRadiantLyricsGlobalBackground(); } if ( settings.settingsAffectNowPlaying && (window as any).updateRadiantLyricsNowPlayingBackground ) { (window as any).updateRadiantLyricsNowPlayingBackground(); } }} /> { console.log( "Settings Affect Now Playing:", checked ? "enabled" : "disabled", ); setSettingsAffectNowPlaying( (settings.settingsAffectNowPlaying = checked), ); // Update Now Playing background immediately when setting changes if ((window as any).updateRadiantLyricsNowPlayingBackground) { (window as any).updateRadiantLyricsNowPlayingBackground(); } }} /> ); };