import { useI18n, useSite } from '@rspress/core/runtime'; import { IconWrap, IconWrapped, SvgWrapper } from '@rspress/core/theme'; import clsx from 'clsx'; import { useRef, useState } from 'react'; import './index.scss'; import { CopyCodeButton } from './CopyCodeButton'; export interface CodeButtonGroupProps { copyElementRef: React.RefObject; wrapCode: boolean; toggleWrapCode: () => void; /** * @default true */ showWrapCodeButton?: boolean; /** * @default true */ showCopyButton?: boolean; } export const useCodeButtonGroup = (initialWrapCode?: boolean) => { const { site } = useSite(); const { defaultWrapCode } = site.markdown; const [wrapCode, setWrapCode] = useState(initialWrapCode ?? defaultWrapCode); const copyElementRef = useRef(null); const toggleWrapCode = () => { setWrapCode(!wrapCode); }; return { copyElementRef, wrapCode, toggleWrapCode, }; }; export function CodeButtonGroup({ wrapCode, toggleWrapCode, copyElementRef, showWrapCodeButton = true, showCopyButton = true, }: CodeButtonGroupProps) { const t = useI18n(); return ( <>
{showWrapCodeButton && ( )} {showCopyButton && }
); }