Перейти до вмісту
tatetUI

Button

Основна кнопка дії з варіантами, розмірами та станом завантаження.

Кнопка — єдиний компонент, який є в усіх чотирьох вихідних проєктах, і скрізь написаний по-різному. Ця версія збирає рішення, кожне з яких закриває конкретний баг.

Приклад

Варіанти

solid — головна дія на екрані, і вона має бути одна. Решта — підпорядковані.

Завантаження

Індикатор позиційований абсолютно, а вміст лише гасне до opacity-0. Кнопка не змінює ширину посеред запиту, тож сусідні елементи не стрибають.

API

Props

НазваТипТиповоОпис
typebuttonsubmitreset"button"Тип нативної кнопки. Ігнорується, коли задано `to`.
sizemdsmlgiconicon-sm"md"Розмір. `icon` і `icon-sm` — квадратні, для кнопок без тексту.
variantdangersolidsoftoutlineghost"solid"Візуальна вага. `solid` — головна дія на екрані, вона має бути одна.
titlestringНативна підказка при наведенні. Не замінює `label` для скрінрідера.
labelstringДоступна назва. ОБОВ'ЯЗКОВИЙ для кнопок без тексту — інакше кнопка для скрінрідера безіменна.
tostring | Record<string, unknown>Робить кнопку посиланням: корінь стає `NuxtLink` замість `button`. Потрібно, коли дія веде на іншу сторінку — інакше зникає середній клік, Ctrl+клік і пункт «відкрити в новій вкладці».
loadingbooleanБлокує кліки й показує індикатор, зберігаючи ширину кнопки.
disabledbooleanБлокує кліки. На відміну від `loading`, не показує індикатора.
blockbooleanРозтягує кнопку на всю ширину контейнера.

Події

НазваPayloadОпис
click[event: MouseEvent]Клік по кнопці. Не спрацьовує, поки вона `disabled` або `loading`.

Слоти

НазваОпис
defaultВміст кнопки — зазвичай текст.
leadingІконка перед текстом.
trailingІконка після тексту.

Доступно через ref

НазваТипОпис
focus() => voidСтавить фокус на кнопку. Використовує ConfirmDialog.

Коли використовувати

Для дій, що щось змінюють: надіслати форму, зберегти, видалити.

Якщо дія веде на іншу сторінку — передайте to. Корінь стане NuxtLink, і повернеться середній клік, Ctrl+клік та «відкрити в новій вкладці», яких у <button @click="navigateTo(...)"> немає.

Коли НЕ використовувати

Не ставте variant="solid" двом кнопкам поруч: якщо головні обидві, то головної немає жодної.

Для кнопок без тексту обов'язковий label — інакше кнопка для скрінрідера безіменна.

Доступність

Фокус-кільце видиме: focus-visible:ring-2 на токені --ring, з ring-offset, який відриває кільце від заливки. У вихідних проєктах focus:outline-none стоїть майже всюди без заміни — керування з клавіатури там сліпе.

Під час завантаження кнопка отримує aria-busy, а кліки блокуються і на рівні обробника, і через pointer-events-none.