Tour

Быстрый старт​

Минимальный пример — два шага, управление через open, current и onChange:

renderStep​

renderStep — обязательный prop, отвечающий за содержимое карточки тура. Получает пять аргументов:

АргументТипОписание
currentnumberИндекс текущего шага (с нуля)
lengthnumberОбщее количество шагов
lastbooleantrue, если шаг последний
stepTourStepДанные текущего шага (title, description, …)
goToStep(index: number) => voidПереход к произвольному шагу

Шаги тура​

Массив steps задаёт последовательность шагов. Каждый шаг описывается объектом TourStep:

СвойствоТипОписание
targetstring | RefObject | HTMLElementCSS-селектор, React ref или DOM-элемент для подсветки
placementPlacementПозиция карточки относительно цели (bottom по умолчанию)
highlightOffsetnumberОтступ подсветки — переопределяет общий highlightOffset
highlightBorderRadiusCSSProperties['borderRadius']Скругление подсветки — переопределяет общий highlightBorderRadius
titlestringЗаголовок карточки
descriptionstringОписание карточки

target​

Свойство target принимает три формата:

Строка CSS-селектора — элемент ищется через document.querySelector:

Оверлей​

Свойство withOverlay включает затемнение фона вокруг подсвеченного элемента. Цвет регулируется через overlayColor:

Подсветка элемента​

highlightOffset задаёт отступ вокруг целевого элемента. highlightBorderRadius задаёт форму подсветки. Оба свойства можно переопределить на уровне конкретного шага:

Стрелка​

Свойство hasTail добавляет стрелку-указатель к карточке тура. Цвет стрелки задаётся через tailColor:

Позиционирование карточки​

offset задаёт отступ карточки от целевого элемента в формате [mainAxis, crossAxis]. Направление определяется свойством placement в каждом шаге:

Контролируемый и неконтролируемый режим​

Компонент поддерживает оба режима работы:

Управление состоянием вынесено наружу через open, current, onChange и onClose:

Кастомная подсветка​

Свойство renderHighlight заменяет стандартную подсветку произвольным React-элементом. При использовании вместе с withOverlay={false} позволяет создать полностью кастомный эффект без тёмного оверлея.

Функция получает объект TourHighlightProps:

СвойствоТипОписание
leftnumberКоордината X подсветки (уже учитывает highlightOffset)
topnumberКоордината Y подсветки (уже учитывает highlightOffset)
widthnumberШирина подсветки (уже учитывает highlightOffset)
heightnumberВысота подсветки (уже учитывает highlightOffset)
borderRadiusnumberСкругление блока высветления

Пример с анимированным пульсирующим бордером:

Кастомный TourCard​

Библиотека поставляет компонент TourCard, из которого можно собрать карточку шага с изображением, пагинацией и собственными элементами управления.

В горизонтальной ориентации contentDirection меняет взаимное расположение изображения и контента, а paginationType позволяет выбрать пагинацию точками (dot) или счётчиком (compact). Для вертикальной карточки всегда используется пагинация точками.

Тип компонента TourCard​

type TourCardProps = {
/** Ориентация карточки. @default 'horizontal' */
orientation?: 'horizontal' | 'vertical';
/** Расположение контента в горизонтальной карточке. @default 'row-reverse' */
contentDirection?: 'row-reverse' | 'row';
/** Заголовок карточки. */
title?: string;
/** Описание карточки. */
description?: string;
/** Свойства изображения: src, alt, ratio, customRatio и другие. */
image?: ImageProps;
/** Показывать пагинацию. @default true */
showPagination?: boolean;
/** Максимальное количество отображаемых точек пагинации. @default 3 */
paginationVisibleItems?: number;
/** Вид пагинации; compact применяется только в горизонтальной карточке. @default 'dot' */
paginationType?: 'dot' | 'compact';
/** Индекс текущего шага. */
stepCurrent?: number;
/** Общее количество шагов. */
stepLength?: number;
/** Функция перехода к шагу по индексу. */
goToStep?: (index: number) => void;
/** Кнопки навигации по шагам. */
actionButtons?: ReactNode;
/** Кнопка пропуска тура. */
skipButton?: ReactNode;
/** Показывать кнопку закрытия. @default true */
showClose?: boolean;
/** Обработчик закрытия тура. */
onClose?: () => void;
/** Вид карточки. */
view?: string;
/** Размер карточки. */
size?: string;
} & HTMLAttributes<HTMLDivElement>;

API​