@mantine/core
Version:
React components library focused on usability, accessibility and developer experience
47 lines (46 loc) • 1.77 kB
JavaScript
"use client";
import { createContext, use, useCallback, useState } from "react";
import { useIsomorphicEffect, useMutationObserverTarget } from "@mantine/hooks";
import { jsx } from "react/jsx-runtime";
//#region packages/@mantine/core/src/core/DirectionProvider/DirectionProvider.tsx
const DirectionContext = createContext({
dir: "ltr",
toggleDirection: () => {},
setDirection: () => {}
});
function useDirection() {
return use(DirectionContext);
}
function DirectionProvider({ children, initialDirection = "ltr", detectDirection = true }) {
const [dir, setDir] = useState(initialDirection);
const setDirection = useCallback((direction) => {
setDir(direction);
if (document.documentElement.getAttribute("dir") !== direction) document.documentElement.setAttribute("dir", direction);
}, []);
const toggleDirection = () => setDirection(dir === "ltr" ? "rtl" : "ltr");
useIsomorphicEffect(() => {
if (detectDirection) {
const direction = document.documentElement.getAttribute("dir");
if (direction === "rtl" || direction === "ltr") setDir(direction);
}
}, []);
useMutationObserverTarget(useCallback(() => {
if (typeof document === "undefined") return;
const direction = document.documentElement.getAttribute("dir");
if (direction === "rtl" || direction === "ltr") setDir((prev) => prev !== direction ? direction : prev);
}, []), detectDirection ? {
attributes: true,
attributeFilter: ["dir"]
} : {}, typeof document !== "undefined" && detectDirection ? document.documentElement : null);
return /* @__PURE__ */ jsx(DirectionContext, {
value: {
dir,
toggleDirection,
setDirection
},
children
});
}
//#endregion
export { DirectionContext, DirectionProvider, useDirection };
//# sourceMappingURL=DirectionProvider.mjs.map