QuestionTooltip

Тултип с встроенным триггером — иконкой «?» размером 16px. Использует Tooltip под капотом, добавляя стандартный triggerButton с aria-label.

Демо

Когда использовать

  • Рядом с названием поля формы, чтобы объяснить назначение поля.
  • Рядом с термином или аббревиатурой в тексте и таблицах.
  • В онбординговых состояниях — пояснение новой фичи.

Анатомия

Size

Размер триггера-иконки и тултипа: xs — для плотных форм, s — дефолт рядом с заголовками секций.

Установка

pnpm add @cloud-ru/ds-tooltip
import { QuestionTooltip } from '@cloud-ru/ds-tooltip'

Примеры использования

Подсказка к полю формы

Подсказка к полю формыaria-label триггера задаётся через triggerLabel
tsx
import { QuestionTooltip } from '@cloud-ru/ds-tooltip';

export function Question() {
  return (
    <label style={{ display: 'inline-flex', gap: 8, alignItems: 'center' }}>
      <span>API-ключ</span>
      <input type='text' name='api-key' placeholder='sk_...' />
      <QuestionTooltip tip='Строка из 32 символов. Хранится зашифрованной, видна только владельцу.' />
    </label>
  );
}

Props

Types

PropsQuestionTooltipProps
PropTypeDefaultRequiredDescription
childrenReactNode | ChildrenFunction—noТриггер поповера (подробнее читайте ниже)
classNamestring—no
closeOnPopstateboolean—noЗакрывать ли поповер при переходе по истории браузера
data-test-idstring—no
disableMaxWidthbooleanfalsenoОтключение ограничения ширины тултипа
disableSpanWrapperboolean—noОтключает для `isValidElement` внешнюю обертку триггера <br/> Пригодится для элементов с `position: absolute` <br/> Работает для триггеров, которые умеют отдать свою DOM-ноду: нативные элементы, `forwardRef`-компоненты и компоненты, помеченные `withInnerRefSupport` из `@cloud-ru/ds-utils`. Остальные всё равно получают `<span>` — без ноды поповеру не от чего считать позицию; в dev-режиме об этом печатается предупреждение.
fallbackPlacementsPlacement[]—noЦепочка расположений которая будет применяться к поповеру от первого к последнему если при текущем он не влезает.
hoverDelayClosenumber—noЗадержка закрытия по ховеру
hoverDelayOpennumber—noЗадержка открытия по ховеру
offsetnumber0noОтступ поповера от его триггер-элемента (в пикселях).
onOpenChange((isOpen: boolean) => void)—noКолбек отображения компонента. Срабатывает при изменении состояния open.
openboolean—noУправляет состоянием показан/не показан.
placement"bottom" | "bottom-end" | "bottom-start" | "left" | "left-end" | "left-start" | "right" | "right-end" | "right-start" | "top" | "top-end" | "top-start"topnoПоложение поповера относительно своего триггера (children).
size"s" | "xs"xsnoРазмер
tabIndexnumber0noTab index для кнопки-триггера
tipReactNode—yesСодержимое тултипа (текст или разметка)
tooltipClassnamestring—noCSS-класс контейнера подсказки
trigger"click" | "clickAndFocusVisible" | "focus" | "focusVisible" | "hover" | "hoverAndFocus" | "hoverAndFocusVisible"hovernoУсловие отображения поповера: <br/> - `click` - открывать по клику <br/> - `hover` - открывать по ховеру <br/> - `focusVisible` - открывать по focus-visible <br/> - `focus` - открывать по фокусу <br/> - `hoverAndFocusVisible` - открывать по ховеру и focus-visible <br/> - `hoverAndFocus` - открывать по ховеру и фокусу <br/> - `clickAndFocusVisible` - открывать по клику и focus-visible
triggerClassNamestring—noCSS-класс триггера
triggerLabelstringПодсказкаnoДоступное имя для иконки-триггера
triggerRefForwardedRef<HTMLElement | ReferenceType | null>—noRef ссылка на триггер

Unions

Types

QuestionTooltipProps

Unions

Storybook

Figma