import * as React from 'react'; import { Direction, getElement } from '../../utils'; export interface AttributeProxyTypes extends React.HTMLProps { direction: Direction; component?: React.ComponentType | string; }; export const AttributeProxy = React.memo(function Attr({ component: Component = 'div', direction, children, ...props }: React.PropsWithChildren>) { const ref = React.useRef(null); React.useEffect(() => { if (!ref.current || typeof window === 'undefined') { return () => undefined; } const element = getElement(ref.current, direction) as T; if (!element) { return () => undefined; } const { className, style, ...rest } = props; if (className && !element.classList.contains(className)) { element.classList.add(className); } if (style) { Object.assign(element.style, style); } Object.entries(rest).forEach(([attr, value]) => { element.setAttribute(attr, value); }); return () => { if (className) { element.classList.remove(className); } }; }, [props, direction]); return {children}; });