Cara, seu código funciona e é claro no que faz. E acho que isso é o que mais importa.
No entanto, eu sempre tento pensar em deixar código de forma que a manutenção no futuro seja fácil. Por exemplo, ao invés de criar um id para cada botão, você poderia criar um atributo igual para todos os botões e outro atributo com a url da imagem.
Ficaria mais ou menos assim:
No HTML criamos o atributo data-button
para cada botão e adicionamos outro atributodata-image-url
que armazena a url da imagem que irá aparecer quando aquele botão for clicado:
<button data-button data-image-url=¨/public/azul-off.opti.webp¨>Blue</button>
<button data-button data-image-url=¨/public/orange-off.opti.webp¨>Orange</button>
<button data-button data-image-url=¨/public/pink-off.opti.webp¨>Pink</button>
<!-- ... -->
E aí no Javascript você apenas cria um loop que vai automaticamente adicionar os event listeners para cada botão:
document.querySelectorAll('[data-button]').forEach(button => {
button.addEventListener('click', () => {
changeImage(button.dataset.imageUrl)
})
}
Desta forma, se no futuro você precisar adicionar uma nova cor, a única coisa que você vai precisar fazer é adicionar um novo botão com a URL da nova imagem.
Se você nunca utilizou atributos do tipo data
talvez este código esteja um pouco confuso para você. Link para você entender melhor sobre os data attributes.
Espero ter ajudado!