Tooltip

import { Tooltip } from '@megafon/ui-core';
Триггер-события
export const triggerEvents: ISelectItem[] = [
{
value: TriggerEvent.CONTROLLED,
title: TriggerEvent.CONTROLLED,
},
{
value: TriggerEvent.HOVER,
title: TriggerEvent.HOVER,
},
{
value: TriggerEvent.CLICK,
title: TriggerEvent.CLICK,
},
];
Код DemoTooltipWithTriggerWrapper
export const DemoTooltipWithTriggerWrapper = ({ children }) => {
const triggerElement = React.useRef<HTMLElement | null>(null);
return children({ triggerElement })
};
Код DemoSelectTriggerWrapper
export const DemoSelectTriggerWrapper = ({ children }) => {
const { value } = triggerEvents[0];
const [currentValue, setCurrentValue] = React.useState<SelectItemValueType>(value);
const handleSelect = (_e: React.SyntheticEvent<EventTarget>, data: ISelectItem<string>) => {
setCurrentValue(data.value);
};
return children({
onSelect: handleSelect,
currentValue,
});
};
Код DemoControlledTooltipWrapper
export const DemoControlledTooltipWrapper = ({ children, isOpen = false }) => {
const [isOpened, setIsOpened] = React.useState<boolean>(isOpen);
const handleOpen = () => setIsOpened(true);
const handleClose = () => setIsOpened(false);
return children({
isOpened,
handleOpen,
handleClose,
});
};

Типы взаимодействия с триггер-элементом для показа тултипа

Эмуляция при наведении
Эмуляция при клике

Позиционирование относительно триггер-элемента

Положение сверху
title
text
Положение справа
title
text
Положение слева
title
text
Положение снизу

Перестроение относительно триггер-элемента

Перестроение только вниз
Перестроение по умолчанию, во все стороны
Перестроение не происходит при совпадении
расположения и заданного направления для перестроения

Перестроение при скролле

Расположение тултипа меняется при соприкосновении с границей контейнера.

Горизонтальное перестроение
Вертикальное перестроение
Доп. текст
Проскрольте немного демо в нижний правый угол, чтобы нажать кнопку для показа тултипа
Демонстрация перестроения тултипа по всем доступным положениям.
Маленький тултип
Доп. текст

Варианты содержимого тултипа

Заголовок
Оказание услуг связи приостановлено. Пожалуйста, проверьте ваш баланс.
Дополнительное содержимое тултипа
Заголовок
Оказание услуг связи приостановлено. Пожалуйста, проверьте ваш баланс.
  • Пункт 1
  • Пункт 2

Цветовая тема

Заголовок
Белая тема (по умолчанию)
Дополнительное содержимое тултипа
Заголовок
Красная тема
Дополнительное содержимое тултипа
Заголовок
Синяя тема
Дополнительное содержимое тултипа

Размер тултипа

Для размера small отображается только контент, переданный через пропс text.

Заголовок
Большой размер
Дополнительное содержимое тултипа
Маленький размер

Размер отступов от контента

Подключение к домашнему интернету осуществляется в удобное для вас время по технологиям технологиям Ethernet, Docsis.

Монтажник проведёт все необходимые работы под ключ.(размер текста больше)

Подключение к домашнему интернету осуществляется в удобное для вас время по технологиям технологиям Ethernet, Docsis.

Монтажник проведёт все необходимые работы под ключ.(размер текста меньше)

Подключение к домашнему интернету осуществляется в удобное для вас время по технологиям технологиям Ethernet, Docsis.

Монтажник проведёт все необходимые работы под ключ.(размер текста меньше)

Размер тултипа

C установленной шириной контента

Тултип будет такой же длины как контент
Подключение к домашнему интернету осуществляется в удобное для вас время по технологиям Ethernet, Docsis. Монтажник проведёт все необходимые работы под ключ.

При относительном позиционировании родительского элемента

Тултип будет такой же длины как родитель
Подключение к домашнему интернету осуществляется в удобное для вас время по технологиям Ethernet, Docsis. Монтажник проведёт все необходимые работы под ключ.

Расположение стрелки тултипа

Выравнивание стрелки по умолчанию
Использование targetElement для выравнивания стрелки
Код DemoTooltipWithTriggerWrapper
export const DemoTooltipWithTriggerWrapper = ({ children }) => {
const triggerElement = React.useRef<HTMLElement | null>(null);
const targetElement = React.useRef<HTMLElement | null>(null);
return children({
triggerElement,
targetElement,
});
};

Выравнивание по boundary-элементу

Тултип выровнен по границе этого текста.

Тултип выровнен по границе boundaryElement, даже несмотря на то, что он больше не центрируется.
Код DemoTooltipWithTriggerWrapper
export const DemoTooltipWithTriggerWrapper = ({ children }) => {
const triggerElement = React.useRef<HTMLElement | null>(null);
const boundaryElement = React.useRef<HTMLElement | null>(null);
return children({
triggerElement,
boundaryElement,
});
};

Смена типа взаимодействия с триггер-элементом

При первом наведении мыши на элемент, когда тултип открыт

controlled
controlled
Код DemoTooltipWithTriggerWrapper
export const DemoTooltipWithTriggerWrapper = ({ children }) => {
const triggerElement = React.useRef<HTMLElement | null>(null);
const [triggerEvent, setTriggerEvent] = React.useState(TriggerEvent.CONTROLLED);
const handleTriggerChange = React.useCallback(
trigger => {
if (!isTriggered) {
setIsTriggered(true);
setTriggerEvent(trigger);
}
},
[isTriggered],
);
return children({
triggerElement,
triggerEvent,
handleTriggerChange
});
};

При выборе из списка

controlled
controlled
hover
click
Код DemoControlledTooltipWrapper
export const DemoControlledTooltipWrapper = ({ children, isOpen = false }) => {
const [isOpened, setIsOpened] = React.useState<boolean>(isOpen);
const handleToggle = () => setIsOpened(open => !open);
return children({
isOpened,
handleToggle,
});
};

Управление компонентом снаружи

Подключение к домашнему интернету осуществляется в удобное для вас время по технологиям Ethernet, Docsis. Монтажник проведёт все необходимые работы под ключ.

C сохранением внутренних обработчиков для триггер-элемента

Подключение к домашнему интернету осуществляется в удобное для вас время по технологиям Ethernet, Docsis. Монтажник проведёт все необходимые работы под ключ.

Подключение к домашнему интернету осуществляется в удобное для вас время по технологиям Ethernet, Docsis. Монтажник проведёт все необходимые работы под ключ.

С использованием порталов

Tooltip добавляется в конец document.body