npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

@snack-uikit/toaster

v1.0.1

Published

`npm i @snack-uikit/toaster`

Readme

Toaster

Installation

npm i @snack-uikit/toaster

Changelog

Description

  • Пакет @snack-uikit/toaster предоставляет систему уведомлений (тостеров) для отображения временных сообщений пользователю: системных событий, результатов действий пользователя и прогресса загрузки файлов.
  • Компоненты автоматически управляют жизненным циклом уведомлений (автозакрытие, позиционирование, лимит количества), поддерживают программное создание, обновление и закрытие через объект toaster, а также работают с разными визуальными вариантами (appearance) для передачи типа сообщения.
  • Каждый тип тостера предназначен для своего сценария: ToastSystemEvent — для важных системных уведомлений с заголовком и описанием, ToastUserAction — для кратких сообщений о результатах действий пользователя, ToastUpload — для отслеживания прогресса загрузки файлов с возможностью управления процессом.

ToastSystemEvent

Description

  • ToastSystemEvent — компонент для отображения системных уведомлений о важных событиях приложения (успешные операции, ошибки, предупреждения, информационные сообщения).
  • Поддерживает разные типы статусов через проп appearance (neutral, success, error, errorCritical, warning) с соответствующей иконкой и цветовой схемой.
  • Позволяет задать заголовок и описание с автоматическим усечением длинных текстов (заголовок до 2 строк, описание до 4 строк).
  • Может отображать прогресс-бар (progressBar), показывающий оставшееся время до автозакрытия уведомления.
  • Поддерживает кнопку закрытия (closable) с возможностью кастомизации обработчика (onCloseClick).
  • Позволяет добавить текстовую ссылку (link) и кнопки действий в футере (action) для выполнения связанных с уведомлением операций.
  • Figma: ToastSystemEvent.

Example

import { toaster } from '@snack-uikit/toaster';

// Создание системного уведомления
const toastId = await toaster.systemEvent.success({
  title: 'Настройки сохранены',
  description: 'Новые параметры будут применены при следующем входе в систему.',
  link: {
    text: 'Изменить ещё раз',
    href: '#',
  },
  action: [
    { label: 'Отменить', onClick: () => console.log('Revert') },
    { label: 'Подробнее', onClick: () => console.log('Details') },
  ],
  progressBar: true,
  closable: true,
});

// Обновление существующего уведомления
toaster.systemEvent.update.error(toastId, {
  title: 'Ошибка сохранения',
  description: 'Не удалось сохранить изменения. Попробуйте ещё раз.',
});

// Закрытие уведомления
toaster.systemEvent.dismiss(toastId);

ToastUserAction

Description

  • ToastUserAction — компонент для отображения кратких уведомлений о результатах действий пользователя (успешное выполнение операции, ошибка, предупреждение).
  • Поддерживает разные типы статусов через проп appearance (neutral, success, error, warning) с соответствующей иконкой и цветовой схемой.
  • Отображает краткий текст (label) без описания, что делает уведомление компактным и ненавязчивым.
  • Может показывать состояние загрузки (loading) с анимацией вместо иконки статуса.
  • Поддерживает текстовую ссылку (link) для перехода к связанному контенту или действию.
  • Отличается от ToastSystemEvent более компактным размером и отсутствием заголовка, описания и кнопок действий, что делает его подходящим для быстрых обратных связей на действия пользователя.
  • Figma: ToastUserAction.

Example

import { toaster } from '@snack-uikit/toaster';

// Создание уведомления о действии пользователя
const toastId = await toaster.userAction.success({
  label: 'Файл успешно загружен',
  link: {
    text: 'Открыть',
    href: '#',
  },
});

// Обновление уведомления с состоянием загрузки
toaster.userAction.update.neutral(toastId, {
  label: 'Обработка файла...',
  loading: true,
});

// Закрытие уведомления
toaster.userAction.dismiss(toastId);

ToastUpload

Description

  • ToastUpload — компонент для отображения прогресса загрузки одного или нескольких файлов с возможностью управления процессом (пауза, продолжение, повтор при ошибке, отмена).
  • Отображает список файлов (files) с индивидуальным прогрессом каждого файла, его статусом (loading, pause, error, uploaded, errorUploaded) и возможностью управления через действия (actions).
  • Показывает общий прогресс загрузки (progress) в виде счётчика (current/total) и процентов, а также прогресс-бар при свёрнутом состоянии.
  • Поддерживает разные статусы загрузки (status) с соответствующим визуальным оформлением и доступными действиями (продолжить, приостановить, повторить).
  • Позволяет сворачивать и разворачивать список файлов (collapsed, onCollapsed) для экономии места на экране.
  • Может быть перемещаемым (draggable) с ограничениями области перемещения (draggableBounds).
  • Поддерживает кнопку отмены всей загрузки (cancelButton) и кнопку закрытия (closable).
  • Отображает заголовок (title) и описание статуса (description) для информирования пользователя о текущем состоянии загрузки.
  • Figma: ToastUpload.

Example

import { toaster } from '@snack-uikit/toaster';

// Создание или обновление уведомления о загрузке
const toastId = toaster.upload.startOrUpdate({
  title: 'Загрузка файлов',
  description: '3 минуты осталось',
  status: 'loading',
  progress: {
    current: 4,
    total: 10,
  },
  files: [
    {
      id: '1',
      title: 'document.pdf',
      formattedSize: '45 MB',
      progress: 50,
      status: 'loading',
      statusLabel: 'Загрузка...',
      actions: {
        onPause: () => console.log('Pause file 1'),
        onRetry: () => console.log('Retry file 1'),
      },
    },
    {
      id: '2',
      title: 'image.jpg',
      formattedSize: '12 MB',
      progress: 100,
      status: 'uploaded',
      statusLabel: 'Загружено',
      link: { href: '#', text: 'Открыть' },
    },
  ],
  generalActions: {
    onContinue: () => console.log('Continue all'),
    onPause: () => console.log('Pause all'),
    onRetry: () => console.log('Retry all'),
  },
  cancelButton: {
    label: 'Отменить все',
    onClick: () => console.log('Cancel all'),
  },
  closable: true,
  collapsed: false,
  draggable: true,
});

// Закрытие уведомления
toaster.upload.dismiss(toastId);

Usage

import { toaster } from '@snack-uikit/toaster';

// create userAction toast
const userActionId = await toaster.userAction.success({ label, id });

// create systemEvent toast
const systemEventId = await toaster.systemEvent.success({ title, description, id });

// update userAction toast
toaster.userAction.update.error(userActionId, { label: 'new text' });

// update systemEvent toast
toaster.systemEvent.update.error(systemEventId, {
  title: 'new text',
  description: 'new description',
});

// dismiss userAction toast
toaster.userAction.dismiss(userActionId);

// dismiss systemEvent toast
toaster.systemEvent.dismiss(systemEventId);

// create or update upload toast
const uploadToastId = toaster.upload.startOrUpdate(options);

// dismiss upload toast
toaster.upload.dismiss(uploadToastId);

dismissToast

``

Закрытие тостера

ToastSystemEvent

Props

| name | type | default value | description | |------|------|---------------|-------------| | title* | string | - | | | closeToast | () => void | - | | | toastProps | ToastProps | - | | | data | unknown | - | | | description | string | - | | | appearance | enum ToastSystemEventAppearance: "neutral", "error", "errorCritical", "warning", "success" | neutral | | | link | ToastSystemEventLink | - | | | progressBar | boolean | true | | | closable | boolean | true | | | className | string | - | CSS-класс | | onCloseClick | (e: MouseEvent<HTMLButtonElement, MouseEvent>, close?: () => void) => void | - | | | action | ButtonActionProps[] | - | | | loading | never | - | |

ToastUserAction

Props

| name | type | default value | description | |------|------|---------------|-------------| | label* | string | - | | | closeToast | () => void | - | | | toastProps | ToastProps | - | | | data | unknown | - | | | appearance | enum ToastUserActionAppearance: "neutral", "error", "warning", "success" | neutral | | | link | ToastUserActionLink | - | | | className | string | - | CSS-класс | | loading | boolean | - | |

ToasterContainer

Props

| name | type | default value | description | |------|------|---------------|-------------| | position | enum ToastPosition: "top-right", "top-center", "top-left", "bottom-right", "bottom-center", "bottom-left" | bottom-right | | | limit | number | 5 | | | containerId | Id | - | | | displayCloseAllButton | boolean | - | | | type | enum ToasterType: "system-event", "user-action", "upload" | system-event | |

ToastUpload

Props

| name | type | default value | description | |------|------|---------------|-------------| | generalActions* | Omit<UploadActions, "onCancel"> | - | Экшены для управления загрузкой | | files* | UploadItem[] | - | Загружаемые элементы | | progress* | { current: number; total: number; } | - | Общий прогресс загрузки | | description* | string | - | Описание статуса загрузки | | status* | enum ToastUploadStatus: "error", "loading", "pause", "uploaded", "errorUploaded" | - | Общий статус загрузки | | closeToast | () => void | - | | | toastProps | ToastProps | - | | | data | unknown | - | | | title | string | - | Заголовок тостера | | onCloseClick | (e: MouseEvent<HTMLButtonElement, MouseEvent>, close?: () => void) => void | - | Закрыть тостер | | closable | boolean | - | Показывать кнопку закрытия тостера | | className | string | - | CSS-класс контейнера | | collapsed | boolean | - | Тостер свернут/развернут | | onCollapsed | (collapsed: boolean) => void | - | Развернуть/свернуть тостер | | cancelButton | ButtonTextNeutralProps | - | Отмена всей загрузки | | draggable | boolean | - | Перемещение тостера | | draggableBounds | string \| false \| DraggableBounds | - | Ограничения перемещения тостера |

TODO

  • Translations