Richtung
Ein Kontext-Provider, der Komponenten zwischen LTR und RTL umschaltet, sodass Menüs, Schieberegler und Registerkarten auf Arabisch, Hebräisch und Persisch korrekt gespiegelt werden.
Die Komponente DirectionProvider wird verwendet, um die Textrichtung (ltr oder rtl) deiner Anwendung festzulegen. Das ist unerlässlich, um von rechts nach links geschriebene Sprachen wie Arabisch, Hebräisch und Persisch zu unterstützen.
Hier ist eine Vorschau der Komponente im RTL-Modus. Verwende die Sprachauswahl, um die Sprache zu wechseln. Weitere Beispiele findest du im RTL-Abschnitt auf den Komponentenseiten.
Einmal um deinen Komponentenbaum gelegt, liest jede richtungsbewusste Komponente – Dropdown-Menüs, Slider, Tabs, Tooltips – die Leserichtung aus dem React-Context, statt im DOM nachzusehen. Basiert auf dem Utility Base UI Direction Provider; es rendert nichts und bringt kein eigenes Styling mit – die neobrutalistischen Rahmen und Schatten stecken in den Komponenten, die es steuert.
Typische Anwendungsfälle:
- Apps auf Arabisch, Hebräisch oder Persisch – Pfeiltasten-Navigation, Popup-Ausrichtung und Slider-Verhalten drehen sich mit der Leserichtung.
- Ein Sprachumschalter – stelle die
directiondes Providers zusammen mitdirauf<html>um, wenn die Sprache gewechselt wird. - Seiten mit gemischter Richtung – verschachtle einen Provider um einen RTL-Block (ein eingebettetes Formular, zitierte Inhalte) innerhalb einer ansonsten LTR-App.
Installation#
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
Installiere die folgenden Abhängigkeiten:
pnpm add @base-ui/reactnpm install @base-ui/reactyarn add @base-ui/reactbun add @base-ui/react
Kopiere den folgenden Code und füge ihn in dein Projekt ein.
"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 }
Passe die Importpfade an deine Projektkonfiguration an.
Verwendung#
import { DirectionProvider } from "@/components/ui/direction"<html dir="rtl">
<body>
<DirectionProvider direction="rtl">
{/* Your app content */}
</DirectionProvider>
</body>
</html>useDirection#
Der useDirection-Hook wird verwendet, um die aktuelle Richtung der Anwendung abzurufen.
import { useDirection } from "@/components/ui/direction"
function MyComponent() {
const direction = useDirection()
return <div>Current direction: {direction}</div>
}Barrierefreiheit#
DirectionProvider steuert ausschließlich die Komponentenlogik – das dir-Attribut setzt er nie. Setze dir deshalb immer zusätzlich auf <html> (oder dem umschließenden Element): Browser, Screenreader und logische CSS-Eigenschaften leiten die Richtung aus dem DOM-Attribut ab, nicht aus dem React-Context. Erst wenn beide synchron bleiben, wird eine RTL-Seite korrekt gerendert und korrekt vorgelesen.