Popover
Компонент, предназначенный для отображения части пользовательского интерфейса во всплывающем окне.
Функциональность
Компонент позволяет отобразить всплывающее окно, позиционированное рядом с якорным элементом.
В качестве якорного используется элемент, переданный в свойство children.
Механизм вызова всплывающего окна
Свойство trigger определяет способ взаимодействия, при котором всплывающее окно будет отображаться или скрываться.
"click"
Показ/скрытие происходит при нажатии на якорный элемент;
"hover"
Показ происходит при наведении мыши на якорных элемент, скрытие - при отведении.
Используйте как единственный механизм активации только для декоративных элементов в сочетании с aria-hidden и disableFocusTrap (см. секцию Доступность (a11y))
"focus"
Показ происходит при фокусе на якорном элементе, скрытие - при потере фокуса;
"manual"
Показ/скрытие контролируется только через свойство shown.
Обработчик, переданный в свойство onShownChange, будет вызываться при нажатии за пределами якорного и всплывающего элементов,
а также по кнопке ESC.
Хук usePopover
Вы можете использовать хук usePopover, который позволяет устанавливать якорный элемент для Popover,
не прокидывая его в качестве children.
Доступность (a11y)
Текстовые метки
Старайтесь сопровождать элемент текстовым описанием для корректной работы скринридеров. Для этого необходимо вручную передавать некоторые параметры.
- у всплывающего элемента обязательно должен быть указан
role↗. Зачастую это либо"tooltip"↗, либо"dialog"↗; - у якорного элемента, в зависимости от
roleвсплывающего элемента, должны быть заданы атрибутыaria-*. Какие именно можно ознакомиться в документации конкретногоrole.
trigger="hover"
Использования trigger="hover", как единственного механизма активации, приводит к тому, что события наведения не генерируются при клавиатурной навигации или скринридером.
Если нужно, чтобы контент из Popover был доступен, комбинируйте hover с триггером focus.
// ❌ WCAG
<Popover trigger="hover">{children}</Popover>
// ✅ WCAG
<Popover trigger={['hover', 'focus']}>{children}</Popover>Свойства и методы
Popover
| Свойство | Описание |
|---|---|
arrow | booleanОтображать ли стрелку, указывающую на якорный элемент. По умолчанию: - |
arrowHeight | numberВысота стрелки. Складывается с По умолчанию: - |
ArrowIcon | ComponentType<SVGAttributes<SVGSVGElement>>Пользовательская SVG иконка. Требования:
По умолчанию: - |
arrowPadding | numberБезопасная зона вокруг стрелки, чтобы та не выходила за края контента. По умолчанию: - |
arrowProps | PopoverArrowPropsПозволяет набросить на стрелку пользовательские атрибуты. По умолчанию: - |
autoFocus | boolean | "root"Управление автоматическим фокусом при открытии всплывающего элемента. По умолчанию: - |
children | ReactElement<unknown, string | JSXElementConstructor<any>>Целевой элемент. Всплывающее окно появится возле него. По умолчанию: - |
closeAfterClick | booleanПри По умолчанию: - |
content | ReactNode | FloatingContentRenderPropСодержимое всплывающего окна. При передаче контента в виде render prop ↗,
в аргументе функции можно получить метод По умолчанию: - |
customMiddlewares | { name: string; options?: any; fn: (state: { placement: Placement; platform: Platform; strategy: Strategy; x: number; y: number; initialPlacement: Placement; middlewareData: MiddlewareData; rects: ElementRects; elements: Elements; }) => Promisable<...>; }[]Массив кастомных модификаторов для Popper (необходимо мемоизировать). По умолчанию: - |
defaultShown | booleanНачальное состояние всплывающего элемента. По умолчанию: - |
disableCloseOnClickOutside | booleanОтключает закрытие нажатием на область вне целевого и всплывающего элемента. По умолчанию: - |
disableCloseOnEscKey | booleanОтключает закрытие нажатием на кнопку ESC. По умолчанию: - |
disabled | booleanБлокирует изменение состояния. По умолчанию: - |
disableFlipMiddleware | booleanУказанное значение По умолчанию: - |
disableFocusTrap | booleanПозволяет отключить захват фокуса. По умолчанию: - |
disableInteractive | booleanОтключает взаимодействие со всплывающим элементом. По умолчанию: - |
disableShiftMiddleware | booleanПозволяет отключить смещение по главной оси, которое не даёт всплывающему элементу выходить за границы видимой области. По умолчанию: - |
getRootRef | Ref<HTMLDivElement>По умолчанию: - |
hideWhenReferenceHidden | booleanПринудительно скрывает компонент если целевой элемент вышел за область видимости. По умолчанию: - |
hoverDelay | number | [number, number]Количество миллисекунд, после которых произойдёт показ/скрытие всплывающего элемента при наведении. По умолчанию: - |
keepMounted | booleanИспользуется для того, чтобы не удалять всплывающий элемент из DOM дерева при скрытии. По умолчанию: - |
noStyling | booleanОтключает у всплывающего элемента стилизацию по умолчанию. У
У
Используется в случае, если необходимо стилизовать по своему. Для По умолчанию: - |
offsetByCrossAxis | numberОтступ по вспомогательной оси. По умолчанию: - |
offsetByMainAxis | numberОтступ по главной оси. По умолчанию: - |
onPlacementChange | OnPlacementChangeВ зависимости от области видимости, позиция может смениться на более оптимальную, чтобы всплывающий элемент вместился в эту область видимости. По умолчанию: - |
onReferenceHiddenChange | ((hidden: boolean) => void)Событие скрытия / раскрытия компонента при использовании свойства По умолчанию: - |
onShownChange | OnShownChangeВызывается при каждом изменении видимости всплывающего элемента. По умолчанию: - |
onShownChanged | OnShownChangeВызывается при каждом изменении видимости всплывающего элемента, но после завершении анимации. По умолчанию: - |
placement | PlacementWithAutoПо умолчанию компонент выберет наилучшее расположение сам, но приоритетное можно задать с помощью этого свойства. По умолчанию: - |
restoreFocus | RestoreFocusTypeНужно ли после закрытия всплывающего элемента возвращать фокус на предыдущий активный элемент. По умолчанию: - |
sameWidth | booleanВыставлять ширину равной target элементу. По умолчанию: - |
shown | booleanЕсли передан, то всплывающий элемент будет показано/скрыто в зависимости от значения свойства. По умолчанию: - |
strategy | StrategyСтратегия позиционирования всплывающего элемента.
По умолчанию: - |
trigger | TriggerTypeМеханика вызова всплывающего элемента.
Избегайте использования По умолчанию: - |
usePortal | boolean | HTMLElement | RefObject<HTMLElement>По умолчанию используется document.body. По умолчанию: - |
zIndex | string | numberПеребивает zIndex заданный по умолчанию. По умолчанию: - |
usePopover
| Свойство | Описание |
|---|---|
arrow | booleanОтображать ли стрелку, указывающую на якорный элемент. По умолчанию: - |
arrowHeight | numberВысота стрелки. Складывается с По умолчанию: 8 |
ArrowIcon | ComponentType<SVGAttributes<SVGSVGElement>>Пользовательская SVG иконка. Требования:
По умолчанию: (props: React.SVGAttributes<SVGSVGElement>): React.ReactNode => {
return (
<svg
width={DEFAULT_ARROW_WIDTH}
height={ARROW_HEIGHT_WITH_WHITE_SPACE}
viewBox={`0 0 ${DEFAULT_ARROW_WIDTH} ${ARROW_HEIGHT_WITH_WHITE_SPACE}`}
xmlns="http://www.w3.org/2000/svg"
{...props}
>
<path d="M10 0c3 0 6 8 10 8v1H0V8c3.975 0 7-8 10-8Z" fill="currentColor" />
</svg>
);
} |
arrowPadding | numberБезопасная зона вокруг стрелки, чтобы та не выходила за края контента. По умолчанию: 10 |
arrowProps | PopoverArrowPropsПозволяет набросить на стрелку пользовательские атрибуты. По умолчанию: - |
autoFocus | boolean | "root"Управление автоматическим фокусом при открытии всплывающего элемента. По умолчанию: true |
closeAfterClick | booleanПри По умолчанию: - |
content | ReactNode | FloatingContentRenderPropСодержимое всплывающего окна. При передаче контента в виде render prop ↗,
в аргументе функции можно получить метод По умолчанию: - |
customMiddlewares | { name: string; options?: any; fn: (state: { placement: Placement; platform: Platform; strategy: Strategy; x: number; y: number; initialPlacement: Placement; middlewareData: MiddlewareData; rects: ElementRects; elements: Elements; }) => Promisable<...>; }[]Массив кастомных модификаторов для Popper (необходимо мемоизировать). По умолчанию: - |
defaultShown | booleanНачальное состояние всплывающего элемента. По умолчанию: false |
disableCloseOnClickOutside | booleanОтключает закрытие нажатием на область вне целевого и всплывающего элемента. По умолчанию: - |
disableCloseOnEscKey | booleanОтключает закрытие нажатием на кнопку ESC. По умолчанию: - |
disabled | booleanБлокирует изменение состояния. По умолчанию: - |
disableFlipMiddleware | booleanУказанное значение По умолчанию: false |
disableFocusTrap | booleanПозволяет отключить захват фокуса. По умолчанию: - |
disableInteractive | booleanОтключает взаимодействие со всплывающим элементом. По умолчанию: - |
disableShiftMiddleware | booleanПозволяет отключить смещение по главной оси, которое не даёт всплывающему элементу выходить за границы видимой области. По умолчанию: false |
getRootRef | Ref<HTMLDivElement>По умолчанию: - |
hideWhenReferenceHidden | booleanПринудительно скрывает компонент если целевой элемент вышел за область видимости. По умолчанию: - |
hoverDelay | number | [number, number]Количество миллисекунд, после которых произойдёт показ/скрытие всплывающего элемента при наведении. По умолчанию: 150 |
keepMounted | booleanИспользуется для того, чтобы не удалять всплывающий элемент из DOM дерева при скрытии. По умолчанию: false |
noStyling | booleanОтключает у всплывающего элемента стилизацию по умолчанию. У
У
Используется в случае, если необходимо стилизовать по своему. Для По умолчанию: false |
offsetByCrossAxis | numberОтступ по вспомогательной оси. По умолчанию: 0 |
offsetByMainAxis | numberОтступ по главной оси. По умолчанию: 8 |
onPlacementChange | OnPlacementChangeВ зависимости от области видимости, позиция может смениться на более оптимальную, чтобы всплывающий элемент вместился в эту область видимости. По умолчанию: - |
onReferenceHiddenChange | ((hidden: boolean) => void)Событие скрытия / раскрытия компонента при использовании свойства По умолчанию: - |
onShownChange | OnShownChangeВызывается при каждом изменении видимости всплывающего элемента. По умолчанию: - |
onShownChanged | OnShownChangeВызывается при каждом изменении видимости всплывающего элемента, но после завершении анимации. По умолчанию: - |
placement | PlacementWithAutoПо умолчанию компонент выберет наилучшее расположение сам, но приоритетное можно задать с помощью этого свойства. По умолчанию: bottom-start |
restoreFocus | RestoreFocusTypeНужно ли после закрытия всплывающего элемента возвращать фокус на предыдущий активный элемент. По умолчанию: true |
sameWidth | booleanВыставлять ширину равной target элементу. По умолчанию: - |
shown | booleanЕсли передан, то всплывающий элемент будет показано/скрыто в зависимости от значения свойства. По умолчанию: - |
strategy | StrategyСтратегия позиционирования всплывающего элемента.
По умолчанию: - |
trigger | TriggerTypeМеханика вызова всплывающего элемента.
Избегайте использования По умолчанию: click |
usePortal | boolean | HTMLElement | RefObject<HTMLElement>По умолчанию используется document.body. По умолчанию: true |
zIndex | string | numberПеребивает zIndex заданный по умолчанию. По умолчанию: var(--vkui--z_index_popout) |