feat(dashboard): support RTL in dashboard (#11252)

* fix: add direction attribute to components and adjust styles for RTL support

* fix(data-grid): comment it out

* Added useDocumentDirection hook

* refactor: Integrate useDocumentDirection hook

* refactor: Standardize direction prop usage across components

* resolve

* fix: resolve build errors

* fix : remove unused useDocument

* Apply RTL styles for some components

* Create smooth-gorillas-hide.md

* refactor: update some styles for RTL support

---------

Co-authored-by: William Bouchard <46496014+willbouch@users.noreply.github.com>
This commit is contained in:
Ayman Mustafa
2025-09-23 16:11:30 +01:00
committed by GitHub
parent a501364b2d
commit a75cf7fb36
70 changed files with 407 additions and 142 deletions

View File

@@ -0,0 +1,54 @@
import { useEffect, useState } from "react"
/**
* Hook to get the current document direction (ltr/rtl) and listen for changes
* @returns The current document direction as "ltr" | "rtl" | undefined
*/
export const useDocumentDirection = (): "ltr" | "rtl" | undefined => {
const [direction, setDirection] = useState<"ltr" | "rtl" | undefined>(() => {
// Initialize with current value
if (typeof document !== "undefined") {
return (
(document.documentElement.getAttribute("dir") as "ltr" | "rtl") ||
undefined
)
}
return undefined
})
useEffect(() => {
// Only run on client side
if (typeof document === "undefined") {
return
}
// Create a MutationObserver to watch for changes to the dir attribute
const observer = new MutationObserver((mutations) => {
mutations.forEach((mutation) => {
if (
mutation.type === "attributes" &&
mutation.attributeName === "dir" &&
mutation.target === document.documentElement
) {
const newDirection = document.documentElement.getAttribute("dir") as
| "ltr"
| "rtl"
setDirection(newDirection || undefined)
}
})
})
// Start observing the document element for attribute changes
observer.observe(document.documentElement, {
attributes: true,
attributeFilter: ["dir"],
})
// Cleanup observer on unmount
return () => {
observer.disconnect()
}
}, [])
return direction
}