// Theme utility functions for map controls and buttons /** * Get theme-aware styles for map controls based on user theme * @param {string} userTheme - 'light' or 'dark' * @returns {Object} Object containing CSS properties for the theme */ export function getThemeStyles(userTheme) { if (userTheme === 'light') { return { backgroundColor: '#ffffff', color: '#000000', borderColor: '#e5e7eb', shadowColor: 'rgba(0, 0, 0, 0.1)' }; } else { return { backgroundColor: '#374151', color: '#ffffff', borderColor: '#4b5563', shadowColor: 'rgba(0, 0, 0, 0.3)' }; } } /** * Apply theme-aware styles to a control element * @param {HTMLElement} element - DOM element to style * @param {string} userTheme - 'light' or 'dark' * @param {Object} additionalStyles - Optional additional CSS properties */ export function applyThemeToControl(element, userTheme, additionalStyles = {}) { const themeStyles = getThemeStyles(userTheme); // Apply base theme styles element.style.backgroundColor = themeStyles.backgroundColor; element.style.color = themeStyles.color; element.style.border = `1px solid ${themeStyles.borderColor}`; element.style.boxShadow = `0 1px 4px ${themeStyles.shadowColor}`; // Apply any additional styles Object.assign(element.style, additionalStyles); } /** * Apply theme-aware styles to a button element * @param {HTMLElement} button - Button element to style * @param {string} userTheme - 'light' or 'dark' */ export function applyThemeToButton(button, userTheme) { applyThemeToControl(button, userTheme, { border: 'none', cursor: 'pointer' }); // Add hover effects const themeStyles = getThemeStyles(userTheme); const hoverBg = userTheme === 'light' ? '#f3f4f6' : '#4b5563'; button.addEventListener('mouseenter', () => { button.style.backgroundColor = hoverBg; }); button.addEventListener('mouseleave', () => { button.style.backgroundColor = themeStyles.backgroundColor; }); } /** * Apply theme-aware styles to a panel/container element * @param {HTMLElement} panel - Panel element to style * @param {string} userTheme - 'light' or 'dark' */ export function applyThemeToPanel(panel, userTheme) { applyThemeToControl(panel, userTheme, { borderRadius: '4px' }); }