{"version":3,"file":"components/base/DiffViewer/index.mjs","sources":["../../../../src/components/base/DiffViewer/index.tsx"],"sourcesContent":["import { DiffEditor, MonacoDiffEditor } from '@monaco-editor/react';\nimport { Checkbox } from 'antd';\nimport clsx from 'clsx';\nimport { useCallback, useEffect, useMemo, useRef, useState } from 'react';\nimport { getFileName, getFilePathFormat } from '../CodeViewer/utils';\nimport styles from './index.module.scss';\nimport { DiffViewerProps } from './interface';\nimport { defineMonacoDiffOptions } from './utils';\nimport { useTheme } from '../../../utils';\n\nexport function DiffViewer({\n  className,\n  style,\n  original = '',\n  modified = '',\n  originalFilePath = '',\n  modifiedFilePath = '',\n  originalLang,\n  modifiedLang,\n  isEmbed = false,\n  isLightTheme: isLightThemeProp,\n  headerVisible = true,\n}: DiffViewerProps) {\n  const { isLight: isLightMode } = useTheme();\n  const isLightTheme: boolean = isLightThemeProp ?? isLightMode;\n  const [isSideBySide, setIsSideBySide] = useState(true);\n  const editor = useRef<MonacoDiffEditor>(undefined);\n  const originalLanguage = useMemo(\n    () => originalLang || getFilePathFormat(originalFilePath) || 'plaintext',\n    [originalLang, originalFilePath],\n  );\n  const modifiedLanguage = useMemo(\n    () => modifiedLang || getFilePathFormat(modifiedFilePath) || 'plaintext',\n    [modifiedLang, modifiedFilePath],\n  );\n  const options = useMemo(\n    () => defineMonacoDiffOptions({ renderSideBySide: isSideBySide }),\n    [isSideBySide],\n  );\n  const onEditorMount = useCallback((editorInstance: MonacoDiffEditor) => {\n    editor.current = editorInstance;\n  }, []);\n  const theme = isLightTheme ? 'vs-light' : 'vs-dark';\n\n  useEffect(\n    () => () => {\n      editor.current?.setModel(null);\n    },\n    [],\n  );\n\n  return (\n    <div\n      className={clsx(\n        'monaco-component',\n        'diff-viewer',\n        styles['diff-viewer'],\n        isEmbed && styles['embed'],\n        className,\n      )}\n      style={style}\n    >\n      {headerVisible && (\n        <div className={styles['header']}>\n          <div>{getFileName(originalFilePath)}</div>\n          <div style={{ flex: 1 }} />\n          <div>\n            <Checkbox\n              className={styles['text']}\n              title=\"side-by-side\"\n              checked={isSideBySide}\n              onChange={(evt) => {\n                setIsSideBySide(evt.target.checked);\n              }}\n            >\n              side-by-side\n            </Checkbox>\n          </div>\n        </div>\n      )}\n      <div className={clsx(styles['content'], 'editor-wrap')}>\n        <DiffEditor\n          theme={theme}\n          originalLanguage={originalLanguage}\n          modifiedLanguage={modifiedLanguage}\n          original={original}\n          modified={modified}\n          width=\"100%\"\n          options={options}\n          onMount={onEditorMount}\n        />\n      </div>\n    </div>\n  );\n}\n\nexport type { DiffViewerProps } from './interface';\nexport { useDiffDrawer } from './useDiffDrawer';\nexport { defineMonacoDiffOptions } from './utils';\n"],"names":["DiffViewer","className","style","original","modified","originalFilePath","modifiedFilePath","originalLang","modifiedLang","isEmbed","isLightThemeProp","headerVisible","isLightMode","useTheme","isLightTheme","isSideBySide","setIsSideBySide","useState","editor","useRef","undefined","originalLanguage","useMemo","getFilePathFormat","modifiedLanguage","options","defineMonacoDiffOptions","onEditorMount","useCallback","editorInstance","theme","useEffect","clsx","styles","getFileName","Checkbox","evt","DiffEditor"],"mappings":";;;;;;;;;AAUO,SAASA,WAAW,EACzBC,SAAS,EACTC,KAAK,EACLC,WAAW,EAAE,EACbC,WAAW,EAAE,EACbC,mBAAmB,EAAE,EACrBC,mBAAmB,EAAE,EACrBC,YAAY,EACZC,YAAY,EACZC,UAAU,KAAK,EACf,cAAcC,gBAAgB,EAC9BC,gBAAgB,IAAI,EACJ;IAChB,MAAM,EAAE,SAASC,WAAW,EAAE,GAAGC;IACjC,MAAMC,eAAwBJ,oBAAoBE;IAClD,MAAM,CAACG,cAAcC,gBAAgB,GAAGC,SAAS;IACjD,MAAMC,SAASC,OAAyBC;IACxC,MAAMC,mBAAmBC,QACvB,IAAMf,gBAAgBgB,kBAAkBlB,qBAAqB,aAC7D;QAACE;QAAcF;KAAiB;IAElC,MAAMmB,mBAAmBF,QACvB,IAAMd,gBAAgBe,kBAAkBjB,qBAAqB,aAC7D;QAACE;QAAcF;KAAiB;IAElC,MAAMmB,UAAUH,QACd,IAAMI,wBAAwB;YAAE,kBAAkBX;QAAa,IAC/D;QAACA;KAAa;IAEhB,MAAMY,gBAAgBC,YAAY,CAACC;QACjCX,OAAO,OAAO,GAAGW;IACnB,GAAG,EAAE;IACL,MAAMC,QAAQhB,eAAe,aAAa;IAE1CiB,UACE,IAAM;YACJb,OAAO,OAAO,EAAE,SAAS;QAC3B,GACA,EAAE;IAGJ,OAAO,WAAP,GACE,KAAC;QACC,WAAWc,KACT,oBACA,eACAC,YAAAA,CAAAA,cAAqB,EACrBxB,WAAWwB,aAAAA,KAAe,EAC1BhC;QAEF,OAAOC;;YAENS,iBAAiB,WAAjBA,GACC,KAAC;gBAAI,WAAWsB,aAAAA,MAAgB;;kCAC9B,IAAC;kCAAKC,YAAY7B;;kCAClB,IAAC;wBAAI,OAAO;4BAAE,MAAM;wBAAE;;kCACtB,IAAC;kCACC,kBAAC8B,UAAQA;4BACP,WAAWF,aAAAA,IAAc;4BACzB,OAAM;4BACN,SAASlB;4BACT,UAAU,CAACqB;gCACTpB,gBAAgBoB,IAAI,MAAM,CAAC,OAAO;4BACpC;sCACD;;;;;0BAMP,IAAC;gBAAI,WAAWJ,KAAKC,aAAAA,OAAiB,EAAE;0BACtC,kBAACI,YAAUA;oBACT,OAAOP;oBACP,kBAAkBT;oBAClB,kBAAkBG;oBAClB,UAAUrB;oBACV,UAAUC;oBACV,OAAM;oBACN,SAASqB;oBACT,SAASE;;;;;AAKnB"}