<!DOCTYPE html> <html lang="en" class="flex h-screen justify-center items-center bg-gray-900"> <head> <meta charset="UTF-8"> <title></title> </head> <button x-data="{ state: 'Unliked', usedKeyboard: false, async updateState(to) { this.state = 'Saving' await new Promise(resolve => setTimeout(resolve, 1000)) this.state = to } }" :class="{ 'like unliked': state === 'Unliked', 'like saving': state === 'Saving', 'like liked': state === 'Liked', 'focus:outline-none': !usedKeyboard }" @click="updateState(state === 'Unliked' ? 'Liked' : 'Unliked')" @keydown.window.tab="usedKeyboard = true"> <span class="like-icon like-icon-state" aria-label="state" x-text="state" aria-live="polite">Unliked</span> </button> </body> </html>