Initial commit
Create the Board Score PWA with offline support, Kurzgesagt-style themes, multiple game configs, dynamic players, avatars via DiceBear, and complete statistics.
This commit is contained in:
@@ -0,0 +1,29 @@
|
||||
import { useEffect } from 'react';
|
||||
import { GameConfig } from '../types';
|
||||
import { hexToHslString } from '../utils/theme';
|
||||
|
||||
export function useGameTheme(gameConfig?: GameConfig | null) {
|
||||
useEffect(() => {
|
||||
if (!gameConfig?.colors?.primary) return;
|
||||
|
||||
const root = document.documentElement;
|
||||
// Save original styles to revert them when unmounting
|
||||
const originalPrimary = root.style.getPropertyValue('--primary');
|
||||
const originalForeground = root.style.getPropertyValue('--primary-foreground');
|
||||
|
||||
const hslColor = hexToHslString(gameConfig.colors.primary);
|
||||
|
||||
// Apply game specific theme
|
||||
root.style.setProperty('--primary', hslColor);
|
||||
root.style.setProperty('--primary-foreground', '0 0% 100%'); // White text for primary buttons
|
||||
|
||||
return () => {
|
||||
// Revert to global theme
|
||||
if (originalPrimary) root.style.setProperty('--primary', originalPrimary);
|
||||
else root.style.removeProperty('--primary');
|
||||
|
||||
if (originalForeground) root.style.setProperty('--primary-foreground', originalForeground);
|
||||
else root.style.removeProperty('--primary-foreground');
|
||||
};
|
||||
}, [gameConfig]);
|
||||
}
|
||||
Reference in New Issue
Block a user