function Square({ value = "grey", className = "", onClick = () => {} } = {}) {
let colorCycle = Object.keys(colorMap);
let output = htl.html`<div class="${className}" style="
width: ${cellSize}px;
height: ${cellSize}px;
display: inline-block;
"></div>`;
output.value = value;
function update(nextValue = output.value) {
if (nextValue !== output.value) {
output.value = nextValue;
output.dispatchEvent(new Event("input", { bubbles: true }));
}
output.style.backgroundColor = colorMap[output.value];
}
invalidationListener(output, "click", invalidation, () => {
let index = colorCycle.indexOf(output.value);
index = (index + 1) % colorCycle.length;
update(colorCycle[index]);
onClick();
});
update();
return output;
}