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

Toast

Черга сповіщень, доступна з будь-якого місця без прокидання пропсів.

Стан черги оголошено на рівні модуля, тому useToast() — singleton: усі виклики в застосунку працюють з однією чергою. Показати повідомлення можна звідки завгодно, не заводячи Pinia-стор і нічого не прокидаючи через дерево.

Приклад

Використання

const toast = useToast()

toast.success('Зміни збережено')
toast.error('Не вдалося зберегти')

// Кнопки дій під повідомленням: дії — дані тоста, а не слот, бо черга
// живе в composable поза шаблоном. Клік по дії сам тост не закриває —
// закривайте через dismiss(id), коли потрібно.
const id = toast.info('Файл завеликий', {
  duration: 0,
  actions: [
    { label: 'Стиснути', onClick: () => compress() },
    { label: 'Закрити', onClick: () => toast.dismiss(id) },
  ],
})

Контейнер UiToaster монтується рівно один раз, зазвичай в app.vue.

API

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

Для результату дії, який не вимагає реакції: збережено, надіслано, скопійовано.

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

Не повідомляйте тостом про те, що потребує рішення. Тост зникає — питання лишається. Для цього є useConfirm().

Не дублюйте тостом помилку поля форми: її місце під самим полем, де видно, що виправляти.

Доступність

Помилки отримують role="alert" і aria-live="assertive" — їх скрінрідер зачитає одразу. Решта — role="status" і polite, щоб не перебивати те, що користувач читає.

Тривалість різна за типом: помилка тримається 6 секунд, попередження 5, решта 3. Помилку треба встигнути прочитати, а не побачити спалах на місці, де щойно щось пішло не так.

Контейнер має data-overlay-ignore — маркер, який поважає useFocusTrap. Без нього тости, що з'явилися під відкритою модалкою, отримали б inert разом з рештою фону, і закрити їх було б неможливо.

Що виправлено проти вихідної версії

Таймер автозакриття тепер скасовується при ручному. Раніше він лишався жити: користувач закривав тост хрестиком, а через секунду спрацьовував відкладений splice і зносив інший тост, який на той час опинився на його місці в масиві.

Тони беруть токени статусів. Вихідна версія малювала попередження білим по bg-amber-500 — контраст ≈1.9:1, тобто найгірше читабельним було саме те повідомлення, яке найважливіше прочитати.