Dirección
Un proveedor de contexto que cambia la orientación de los componentes de izquierda a derecha (LTR) a derecha a izquierda (RTL), para que los menús, los controles deslizantes y las pestañas se muestren correctamente en árabe, hebreo y persa.
El componente DirectionProvider se usa para definir la dirección del texto (ltr o rtl) de tu aplicación. Es imprescindible para admitir idiomas que se escriben de derecha a izquierda, como el árabe, el hebreo y el persa.
Aquí tienes una vista previa del componente en modo RTL. Usa el selector de idioma para cambiar de idioma. Para ver más ejemplos, busca la sección RTL en las páginas de los componentes.
Envuélvelo una sola vez alrededor de tu árbol y todos los componentes sensibles a la dirección —menús desplegables, sliders, pestañas, tooltips— leerán la dirección desde el contexto de React en lugar de inspeccionar el DOM. Está construido sobre la utilidad Base UI Direction Provider; no renderiza nada ni aporta estilos propios: los bordes y las sombras neobrutalistas viven en los componentes que gobierna.
Recurre a este componente cuando:
- Apps en árabe, hebreo o persa — la navegación con las flechas, la alineación de los popups y el comportamiento de los sliders se invierten con la dirección de lectura.
- Un selector de idioma — cambia la prop
directiondel proveedor junto condiren<html>cuando el usuario cambia de idioma. - Páginas con direcciones mixtas — anida un proveedor alrededor de un bloque RTL (un formulario incrustado, contenido citado) dentro de una app que por lo demás es LTR.
Instalación#
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
Instala las siguientes dependencias:
pnpm add @base-ui/reactnpm install @base-ui/reactyarn add @base-ui/reactbun add @base-ui/react
Copia y pega el siguiente código en tu proyecto.
"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 }
Actualiza las rutas de importación según la configuración de tu proyecto.
Uso#
import { DirectionProvider } from "@/components/ui/direction"<html dir="rtl">
<body>
<DirectionProvider direction="rtl">
{/* Your app content */}
</DirectionProvider>
</body>
</html>useDirection#
El hook useDirection se usa para obtener la dirección actual de la aplicación.
import { useDirection } from "@/components/ui/direction"
function MyComponent() {
const direction = useDirection()
return <div>Current direction: {direction}</div>
}Accesibilidad#
DirectionProvider solo gobierna la lógica de los componentes: nunca establece el atributo dir. Establece siempre dir también en <html> (o en el elemento contenedor): los navegadores, los lectores de pantalla y las propiedades lógicas de CSS resuelven la dirección a partir del atributo del DOM, no del contexto de React. Mantener ambos sincronizados es lo que hace que una página RTL se renderice y se lea correctamente.