export function changeColor(rgb) { setPrimaryColor(rgb); setSecondaryColor(rgb); } export function getPrimaryColor() { return getComputedStyle(document.documentElement).getPropertyValue('--color-primary'); } export function resetColors(odysee = false) { if (odysee) { document.documentElement !== null && document.documentElement.style.setProperty('--color-primary-dynamic', 'var(--color-primary-static)'); document.documentElement !== null && document.documentElement.style.setProperty('--color-primary-contrast', 'var(--color-primary-contrast-static)'); document.documentElement !== null && document.documentElement.style.setProperty('--color-secondary-dynamic', 'var(--color-secondary-static)'); document.documentElement !== null && document.documentElement.style.setProperty( '--color-secondary-contrast', 'var(--color-secondary-contrast-static)' ); document.documentElement !== null && document.documentElement.style.setProperty('--color-link', 'var(--color-primary)'); } } function setPrimaryColor(rgb) { document.documentElement !== null && document.documentElement.style.setProperty('--color-primary-dynamic', rgb.r + ',' + rgb.g + ',' + rgb.b); document.documentElement !== null && document.documentElement.style.setProperty( '--color-primary-contrast', getBrightness(rgb) > 155 ? 'black' : 'white' ); } function setSecondaryColor(rgb) { var threshold = 155; if (document.documentElement !== null) { threshold = getComputedStyle(document.documentElement).getPropertyValue('--color-text') === ' #000000' ? 70 : 155; } rgb = colorMixer(rgb, getBrightness(rgb) > threshold ? { r: 0, g: 0, b: 0 } : { r: 255, g: 255, b: 255 }, 0.6); document.documentElement !== null && document.documentElement.style.setProperty('--color-secondary-dynamic', rgb.r + ',' + rgb.g + ',' + rgb.b); document.documentElement !== null && document.documentElement.style.setProperty( '--color-secondary-contrast', getBrightness(rgb) > 155 ? 'black' : 'white' ); } function getBrightness(rgb) { return Math.round((parseInt(rgb.r) * 299 + parseInt(rgb.g) * 587 + parseInt(rgb.b) * 114) / 1000); } function colorMixer(rgbA, rgbB, mix) { let r = colorChannelMixer(rgbA.r, rgbB.r, mix); let g = colorChannelMixer(rgbA.g, rgbB.g, mix); let b = colorChannelMixer(rgbA.b, rgbB.b, mix); return { r: r, g: g, b: b }; } function colorChannelMixer(a, b, mix) { let channelA = a * mix; let channelB = b * (1 - mix); return parseInt(channelA + channelB); }