import React, {ReactElement, useState} from 'react'; import CodeBlock from '@theme/CodeBlock'; export type Snippet = { label: string; // visible tab label (e.g. "Shell", "Helm", "Go") language: string; // language prop for CodeBlock (e.g. "sh", "yaml", "go") code: string; // the snippet to display }; type Props = { snippets: Snippet[]; defaultIndex?: number; className?: string; }; export function MultiLangCodeBlock({snippets, defaultIndex = 0, className}: Props): ReactElement | null { const safeDefault = Math.max(0, Math.min(defaultIndex, snippets.length - 1)); const [active, setActive] = useState(snippets.length > 0 ? safeDefault : -1); if (snippets.length === 0) return null; const tabStyle: React.CSSProperties = { padding: '0.3rem 0.5rem', cursor: 'pointer', border: '0', borderRadius: 'var(--ifm-code-border-radius)', margin: '0 0 0 0', fontSize: '0.8125rem', color: 'inherit', }; const activeTabStyle: React.CSSProperties = { ...tabStyle, fontWeight: 700, }; const tabsContainerStyle: React.CSSProperties = { display: 'flex', alignItems: 'flex-end', justifyContent: 'flex-end', gap: '0.25rem', margin: '0 0 -0.5rem', padding: '0.5rem 0.5rem 1rem', flexWrap: 'wrap', }; const wrapperStyle: React.CSSProperties = { overflow: 'hidden', padding: '0', }; return (
{snippets.map((ex, idx) => ( ))}
{snippets[active].code}
); } export default MultiLangCodeBlock;