import { forwardRef, isValidElement, type HTMLAttributes } from "react"; import { Slot } from "@radix-ui/react-slot"; import { cn } from "@/lib/utils"; type ProseProps = HTMLAttributes & { asChild?: boolean; }; const Prose = forwardRef( ({ asChild = false, className, children, ...otherProps }, ref) => { const useAsChild = asChild && isValidElement(children); const Component = useAsChild ? Slot : "div"; return ( a]:duration-180 [&_[data-link]:hover>a]:opacity-100 [&_[data-link]:hover>a]:transition-opacity [&_[data-link]>a:hover]:text-primary [&_[data-link]>a>svg]:h-5 [&_[data-link]>a>svg]:w-5 [&_[data-link]>a]:translate-y-[2px] [&_[data-link]>a]:border-none [&_[data-link]>a]:text-surface-400 [&_[data-link]>a]:opacity-0 [&_[data-link]]:flex [&_[data-link]]:items-center [&_[data-link]]:gap-2", // lead "prose-lead:text-surface-500 dark:prose-lead:text-surface-400", // links "prose-a:border-b prose-a:border-current prose-a:font-normal prose-a:text-purple-500 hover:prose-a:text-gray-900 dark:prose-a:border-purple-400 dark:prose-a:text-purple-400 hover:dark:prose-a:text-white", // link underline "prose-a:no-underline", // hr "prose-hr:my-12 prose-hr:border-surface-100", // th "prose-th:font-sans prose-th:font-medium prose-th:p-3", // thead "prose-thead:border-surface-100 prose-thead:bg-surface-50/60", // td "prose-td:p-3 prose-td:border-surface", // p "prose-p:[text-wrap:pretty]", // figure "[&_[role=tabpanel]>[data-rehype-pretty-code-figure]]:mt-0" )} {...otherProps} > {children} ); } ); Prose.displayName = "Prose"; export { Prose };