import BaseFoundation, { DefaultAdapter } from '../base/foundation'; import Prism from 'prismjs'; import cls from "classnames"; import "prismjs/plugins/line-numbers/prism-line-numbers.min.js"; Prism.manual = true; export interface CodeHighlightBaseProps { code: string; language: string; lineNumber: boolean } export interface CodeHighlightBaseState { } export interface CodeHighlightAdapter

, S = Record> extends DefaultAdapter { } class CodeHighlightFoundation

, S = Record> extends BaseFoundation, P, S> { constructor(adapter: CodeHighlightAdapter) { super({ ...adapter }); } highlightCode = (ele: HTMLElement, language: string) => { let className = ele.className; const languageClassName = `language-${language}`; if (!className.includes(languageClassName)) { className = cls(className, languageClassName); } if (this.getProp("lineNumber")) { className = cls(className, "line-numbers"); } ele.className = className; Prism.highlightElement(ele, false); } } export default CodeHighlightFoundation;