Библиотека Tippy.js предоставляет мощный и гибкий механизм для создания всплывающих подсказок и тултипов в веб-приложениях. Центральным элементом её работы является объект конфигурации, который позволяет точно управлять поведением тултипов. Корректная типизация конфигурации обеспечивает удобство разработки, предотвращает ошибки и улучшает поддержку кода.
Объект конфигурации Tippy.js представлен как набор ключей с определёнными типами значений:
tippy(targets, {
content: 'Пример подсказки',
placement: 'top',
trigger: 'mouseenter focus',
animation: 'fade',
delay: [100, 200],
interactive: true,
});
Ключевые параметры и их типы:
content —
string | HTMLElement | (() => string | HTMLElement)
Содержимое тултипа может быть статическим текстом, DOM-элементом или
функцией, возвращающей одно из этих значений. Функция полезна для
динамически обновляемого контента.
placement — string Возможные
значения: 'top' | 'bottom' | 'left' | 'right' | 'auto' и их
варианты с -start или -end. Определяет
расположение тултипа относительно целевого элемента.
trigger — string Определяет
события, которые активируют тултип: 'mouseenter',
'focus', 'click', 'manual'. Может
комбинироваться через пробел.
animation — string | false Название
анимации или false, если анимацию нужно отключить.
Стандартные варианты: 'fade', 'scale',
'shift-away'.
delay — number | [number, number]
Задержка перед показом и скрытием тултипа. Если передан массив, первый
элемент — задержка показа, второй — скрытия.
interactive — boolean Позволяет
взаимодействовать с содержимым тултипа (например, клики внутри тултипа
не будут скрывать его).
Tippy.js поддерживает несколько типов функций обратного вызова
(callbacks) с конкретными аргументами:
boolean может блокировать
показ.boolean может блокировать
скрытие.Пример строгой типизации в TypeScript:
import tippy, { Instance, Props } from 'tippy.js';
const tooltip = tippy('#button', {
content: 'Нажмите сюда',
onShow(instance: Instance<Props>) {
console.log('Тултип будет показан');
return true;
},
onHide(instance: Instance<Props>) {
console.log('Тултип будет скрыт');
return true;
},
});
Некоторые свойства объекта конфигурации могут принимать функции для динамической генерации значений:
() => string | HTMLElement(reference: Element, tooltip: HTMLElement) => string(instance: Instance<Props>, event: Event) => number | [number, number]Это позволяет строить тултипы, которые адаптируются к контексту DOM или состоянию приложения.
Пример использования динамического placement:
tippy('#dynamic', {
content: 'Динамическое размещение',
placement(reference, tooltip) {
return reference.getBoundingClientRect().top < 100 ? 'bottom' : 'top';
},
});
Tippy.js поддерживает возможность переопределять только часть
конфигурации через метод setProps:
tooltip.setProps({
content: 'Обновлённый текст',
animation: 'scale',
});
Типы гарантируют, что передаваемые значения соответствуют допустимым опциям, а остальная часть конфигурации сохраняется без изменений.
Для сложных проектов можно расширять типы Props с
добавлением собственных полей. Это позволяет интегрировать тултипы с
внутренними состояниями приложения, сохраняя строгую проверку типов:
interface CustomProps extends Props {
userRole?: string;
}
const tooltip = tippy<HTMLElement, CustomProps>('#custom', {
content: 'Для администратора',
userRole: 'admin',
});
Такой подход улучшает читаемость кода и предотвращает ошибки при передаче некорректных данных в конфигурацию.
Корректная типизация конфигурации Tippy.js обеспечивает:
Применение типизации на всех уровнях конфигурации и обратных вызовов делает работу с Tippy.js предсказуемой и надёжной даже в крупных приложениях.