uui-core/src/hooks/useDocumentDir.tsx (19 lines of code) (raw):
import { useState, useEffect } from 'react';
type Dir = 'rtl' | 'ltr';
export function useDocumentDir(): Dir {
const [dir, setDir] = useState<Dir>(window?.document.dir as Dir);
useEffect(() => {
const observer = new MutationObserver((mutations) => {
mutations.forEach((mutation) => {
if (mutation.type === 'attributes' && mutation.attributeName === 'dir') {
setDir(window?.document.dir as Dir);
}
});
});
observer.observe(document?.documentElement, { attributes: true });
return () => {
observer.disconnect();
};
}, []);
return dir;
}