Направление
Поставщик контекста, который переключает компоненты между направлениями написания «слева направо» (LTR) и «справа налево» (RTL), благодаря чему меню, ползунки и вкладки правильно отображаются в арабском, иврите и персидском языках.
Компонент DirectionProvider используется для задания направления текста (ltr или rtl) в вашем приложении. Это необходимо для поддержки языков с письмом справа налево, таких как арабский, иврит и персидский.
Ниже — предпросмотр компонента в режиме RTL. Используйте переключатель языка, чтобы сменить язык. Чтобы увидеть больше примеров, ищите раздел RTL на страницах компонентов.
Оберните дерево приложения один раз — и каждый direction-aware компонент (выпадающие меню, слайдеры, вкладки, тултипы) читает направление из React context, а не вынюхивает его из DOM. Построен на утилите Base UI Direction Provider; сам ничего не рендерит и не несёт собственных стилей — необруталистские рамки и тени живут в компонентах, которыми он управляет.
Когда это пригодится:
- Приложения на арабском, иврите или персидском — навигация стрелками, выравнивание попапов и поведение слайдера переворачиваются вместе с направлением чтения.
- Переключатель локали — меняйте
directionу провайдера вместе сdirна<html>, когда пользователь меняет язык. - Страницы со смешанным направлением — вложите провайдер вокруг RTL-блока (встроенная форма, цитата) внутри в целом LTR-приложения.
Установка#
pnpm dlx shadcn@latest add https://neobrutalism.com/r/base/direction.jsonnpx shadcn@latest add https://neobrutalism.com/r/base/direction.jsonyarn dlx shadcn@latest add https://neobrutalism.com/r/base/direction.jsonbunx --bun shadcn@latest add https://neobrutalism.com/r/base/direction.json
Установите следующие зависимости:
pnpm add @base-ui/reactnpm install @base-ui/reactyarn add @base-ui/reactbun add @base-ui/react
Скопируйте и вставьте следующий код в свой проект.
"use client"
import * as React from "react"
import { Direction } from "radix-ui"
function DirectionProvider({
dir,
direction,
children,
}: React.ComponentProps<typeof Direction.DirectionProvider> & {
direction?: React.ComponentProps<typeof Direction.DirectionProvider>["dir"]
}) {
return (
<Direction.DirectionProvider dir={direction ?? dir}>
{children}
</Direction.DirectionProvider>
)
}
const useDirection = Direction.useDirection
export { DirectionProvider, useDirection }
Обновите пути импорта в соответствии с настройками вашего проекта.
Использование#
import { DirectionProvider } from "@/components/ui/direction"<html dir="rtl">
<body>
<DirectionProvider direction="rtl">
{/* Your app content */}
</DirectionProvider>
</body>
</html>useDirection#
Хук useDirection используется для получения текущего направления приложения.
import { useDirection } from "@/components/ui/direction"
function MyComponent() {
const direction = useDirection()
return <div>Current direction: {direction}</div>
}Доступность#
DirectionProvider управляет только логикой компонентов — атрибут dir он никогда не ставит. Всегда задавайте dir и на <html> (или на оборачивающем элементе): браузеры, программы чтения с экрана и CSS logical properties берут направление из DOM-атрибута, а не из React context. Синхронизация этих двух источников и делает RTL-страницу корректной и визуально, и для ассистивных технологий.