<div id="palette"></div>
<script type="text/javascript">
function start(){
const rungeStyles = dom.create({el: "style"}, document.head);
let currentAccentColor = "d";
let currentCompColor = "g";
const colorNames = ['z', 'a', 'b', 'c', 'd', 'e', 'f', 'g'];
const colorShades = [0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15];
const runge = colorNames.map(colorName => {
return colorShades.map(colorShade => {
return colorName + colorShade;
})
});
const palette = dom.create({class: "grid"}, dom.gid("palette"));
runge.forEach((color, i) => {
const paletteColor = dom.create({class: "cell palette-color"}, palette);
color.forEach((colorShade, l) => {
const background = `var(--${colorNames[i]}${l})`;
const text = l > 8 ? `var(--${colorNames[i]}${l-8})` : `var(--${colorNames[i]}${l+7})`;
dom.create({
class: "palette-color-shade",
html: background,
style: `background-color: ${background}; color: ${text}`
}, paletteColor);
});
});
function changeAccentColor(letter, keep){
colorNames.forEach(colorName => document.body.classList.remove("accent-" + colorName))
rungeStyles.innerHTML = `
.accent-${letter} {
--accent0: var(--${letter}0); --comp0: var(--${currentCompColor}0);
--accent1: var(--${letter}1); --comp1: var(--${currentCompColor}1);
--accent2: var(--${letter}2); --comp2: var(--${currentCompColor}2);
--accent3: var(--${letter}3); --comp3: var(--${currentCompColor}3);
--accent4: var(--${letter}4); --comp4: var(--${currentCompColor}4);
--accent5: var(--${letter}5); --comp5: var(--${currentCompColor}5);
--accent6: var(--${letter}6); --comp6: var(--${currentCompColor}6);
--accent7: var(--${letter}7); --comp7: var(--${currentCompColor}7);
--accent8: var(--${letter}8); --comp8: var(--${currentCompColor}8);
--accent9: var(--${letter}9); --comp9: var(--${currentCompColor}9);
--accent10: var(--${letter}10); --comp10: var(--${currentCompColor}10);
--accent11: var(--${letter}11); --comp11: var(--${currentCompColor}11);
--accent12: var(--${letter}12); --comp12: var(--${currentCompColor}12);
--accent13: var(--${letter}13); --comp13: var(--${currentCompColor}13);
--accent14: var(--${letter}14); --comp14: var(--${currentCompColor}14);
--accent15: var(--${letter}15); --comp15: var(--${currentCompColor}15);
}
`
document.body.classList.add("accent-" + letter)
if (keep) {
currentAccentColor = letter;
Array.from(keep.target.parentNode.children).forEach(node => node.classList.remove("current"));
keep.target.classList.add("current");
}
}
function changeCompColor(letter, keep){
rungeStyles.innerHTML = `
root: {
--accent0: var(--${currentAccentColor}0); --comp0: var(--${letter}0);
--accent1: var(--${currentAccentColor}1); --comp1: var(--${letter}1);
--accent2: var(--${currentAccentColor}2); --comp2: var(--${letter}2);
--accent3: var(--${currentAccentColor}3); --comp3: var(--${letter}3);
--accent4: var(--${currentAccentColor}4); --comp4: var(--${letter}4);
--accent5: var(--${currentAccentColor}5); --comp5: var(--${letter}5);
--accent6: var(--${currentAccentColor}6); --comp6: var(--${letter}6);
--accent7: var(--${currentAccentColor}7); --comp7: var(--${letter}7);
--accent8: var(--${currentAccentColor}8); --comp8: var(--${letter}8);
--accent9: var(--${currentAccentColor}9); --comp9: var(--${letter}9);
--accent10: var(--${currentAccentColor}10); --comp10: var(--${letter}10);
--accent11: var(--${currentAccentColor}11); --comp11: var(--${letter}11);
--accent12: var(--${currentAccentColor}12); --comp12: var(--${letter}12);
--accent13: var(--${currentAccentColor}13); --comp13: var(--${letter}13);
--accent14: var(--${currentAccentColor}14); --comp14: var(--${letter}14);
--accent15: var(--${currentAccentColor}15); --comp15: var(--${letter}15);
}
`
if (keep) {
currentCompColor = letter;
Array.from(keep.target.parentNode.children).forEach(node => node.classList.remove("current")); keep.target.classList.add("current");
}
}
dom.qsa(".select").forEach(select => {
const selectOptions = dom.create({class: "select-options"}, select);
colorNames.forEach(colorName => {
const className = colorName === "d" ? "select-option current" : "select-option";
const option = dom.create({class: className, style: `background-color: var(--${colorName}8)`}, selectOptions);
if (select.classList.contains("accent-color")) {
option.addEventListener("mouseenter", ()=>{ changeAccentColor(colorName) });
option.addEventListener("mouseleave", ()=>{ changeAccentColor(currentAccentColor) });
option.addEventListener("click", (e)=>{ changeAccentColor(colorName, e) });
}
else {
option.addEventListener("mouseenter", ()=>{ changeCompColor(colorName) });
option.addEventListener("mouseleave", ()=>{ changeCompColor(currentCompColor) });
option.addEventListener("click", (e)=>{ changeCompColor(colorName, e) });
}
})
})
}
window.addEventListener("load", start)
</script>
<div class="grid ui" style="width: 200px; position: absolute; bottom: 400px">
<div class="cell">
<div class="darkmode">
<div class="darkmode-toggle">
<div class="darkmode-thumb"></div>
</div>
</div>
</div>
<div class="cell cell-shrink">
<div class="accent-color colors select">
<div style="background-color: var(--accent8)" class="color"></div>
</div>
</div>
<div class="cell cell-shrink" style="display: none">
<div class="comp-color colors select">
<div style="background-color: var(--comp8)" class="color"></div>
</div>
</div>
</div>