@lobehub/ui
Version:
Lobe UI is an open-source UI component library for building AIGC web apps
1 lines • 5.24 kB
Source Map (JSON)
{"version":3,"file":"PatchDiff.mjs","names":["PatchDiff","Flexbox","MaterialFileTypeIcon","PierrePatchDiff"],"sources":["../../src/CodeDiff/PatchDiff.tsx"],"sourcesContent":["'use client';\n\nimport type { FileDiffOptions } from '@pierre/diffs';\nimport { PatchDiff as PierrePatchDiff } from '@pierre/diffs/react';\nimport { cx } from 'antd-style';\nimport { memo, useMemo } from 'react';\n\nimport { Flexbox } from '@/Flex';\nimport MaterialFileTypeIcon from '@/MaterialFileTypeIcon';\n\nimport { headerVariants, prefix, styles, variants } from './style';\nimport type { PatchDiffProps } from './type';\n\nconst countPatchChanges = (patch: string): { additions: number; deletions: number } => {\n const lines = patch.split('\\n');\n let additions = 0;\n let deletions = 0;\n\n for (const line of lines) {\n if (line.startsWith('+') && !line.startsWith('+++')) {\n additions++;\n } else if (line.startsWith('-') && !line.startsWith('---')) {\n deletions++;\n }\n }\n\n return { additions, deletions };\n};\n\nexport const PatchDiff = memo<PatchDiffProps>(\n ({\n patch,\n language,\n fileName,\n viewMode = 'split',\n showHeader = true,\n variant = 'filled',\n className,\n classNames,\n styles: customStyles,\n actionsRender,\n diffOptions,\n ...rest\n }) => {\n const displayName = useMemo(() => {\n if (fileName) return fileName;\n // Try to extract filename from patch header\n const match = patch.match(/^(?:-{3}|\\+{3})\\s+(?:a\\/|b\\/)?(.+?)(?:\\t|$)/m);\n if (match?.[1]) return match[1];\n if (language) return language;\n return 'patch';\n }, [fileName, patch, language]);\n\n const { additions, deletions } = useMemo(() => countPatchChanges(patch), [patch]);\n\n const actions = useMemo(() => {\n if (!actionsRender) return null;\n return actionsRender({\n originalNode: null,\n patch,\n });\n }, [actionsRender, patch]);\n\n const options = useMemo<FileDiffOptions<string>>(\n () => ({\n diffStyle: viewMode,\n disableFileHeader: true,\n ...diffOptions,\n }),\n [viewMode, diffOptions],\n );\n\n return (\n <Flexbox\n className={cx(variants({ variant }), className)}\n data-code-type=\"patch-diff\"\n {...rest}\n >\n {showHeader && (\n <div\n className={cx(headerVariants({ variant }), classNames?.header)}\n style={customStyles?.header}\n >\n <Flexbox align=\"center\" gap={8} horizontal>\n <MaterialFileTypeIcon filename={fileName || displayName} size={18} type=\"file\" />\n <span>{displayName}</span>\n </Flexbox>\n <Flexbox align=\"center\" gap={8} horizontal>\n {(deletions > 0 || additions > 0) && (\n <Flexbox className={styles.stats} gap={8} horizontal>\n {deletions > 0 && <span className={styles.deletions}>-{deletions}</span>}\n {additions > 0 && <span className={styles.additions}>+{additions}</span>}\n </Flexbox>\n )}\n {actions && (\n <Flexbox align=\"center\" className={cx(`${prefix}-actions`, styles.actions)} gap={4}>\n {actions}\n </Flexbox>\n )}\n </Flexbox>\n </div>\n )}\n <div className={cx(styles.body, classNames?.body)} style={customStyles?.body}>\n <PierrePatchDiff options={options} patch={patch} />\n </div>\n </Flexbox>\n );\n },\n);\n\nPatchDiff.displayName = 'PatchDiff';\n\nexport default PatchDiff;\n"],"mappings":";;;;;;;;;;;AAaA,MAAM,qBAAqB,UAA4D;CACrF,MAAM,QAAQ,MAAM,MAAM,KAAK;CAC/B,IAAI,YAAY;CAChB,IAAI,YAAY;AAEhB,MAAK,MAAM,QAAQ,MACjB,KAAI,KAAK,WAAW,IAAI,IAAI,CAAC,KAAK,WAAW,MAAM,CACjD;UACS,KAAK,WAAW,IAAI,IAAI,CAAC,KAAK,WAAW,MAAM,CACxD;AAIJ,QAAO;EAAE;EAAW;EAAW;;AAGjC,MAAaA,cAAY,MACtB,EACC,OACA,UACA,UACA,WAAW,SACX,aAAa,MACb,UAAU,UACV,WACA,YACA,QAAQ,cACR,eACA,aACA,GAAG,WACC;CACJ,MAAM,cAAc,cAAc;AAChC,MAAI,SAAU,QAAO;EAErB,MAAM,QAAQ,MAAM,MAAM,+CAA+C;AACzE,MAAI,QAAQ,GAAI,QAAO,MAAM;AAC7B,MAAI,SAAU,QAAO;AACrB,SAAO;IACN;EAAC;EAAU;EAAO;EAAS,CAAC;CAE/B,MAAM,EAAE,WAAW,cAAc,cAAc,kBAAkB,MAAM,EAAE,CAAC,MAAM,CAAC;CAEjF,MAAM,UAAU,cAAc;AAC5B,MAAI,CAAC,cAAe,QAAO;AAC3B,SAAO,cAAc;GACnB,cAAc;GACd;GACD,CAAC;IACD,CAAC,eAAe,MAAM,CAAC;CAE1B,MAAM,UAAU,eACP;EACL,WAAW;EACX,mBAAmB;EACnB,GAAG;EACJ,GACD,CAAC,UAAU,YAAY,CACxB;AAED,QACE,qBAACC;EACC,WAAW,GAAG,SAAS,EAAE,SAAS,CAAC,EAAE,UAAU;EAC/C,kBAAe;EACf,GAAI;aAEH,cACC,qBAAC;GACC,WAAW,GAAG,eAAe,EAAE,SAAS,CAAC,EAAE,YAAY,OAAO;GAC9D,OAAO,cAAc;cAErB,qBAACA;IAAQ,OAAM;IAAS,KAAK;IAAG;eAC9B,oBAACC;KAAqB,UAAU,YAAY;KAAa,MAAM;KAAI,MAAK;MAAS,EACjF,oBAAC,oBAAM,cAAmB;KAClB,EACV,qBAACD;IAAQ,OAAM;IAAS,KAAK;IAAG;gBAC5B,YAAY,KAAK,YAAY,MAC7B,qBAACA;KAAQ,WAAW,OAAO;KAAO,KAAK;KAAG;gBACvC,YAAY,KAAK,qBAAC;MAAK,WAAW,OAAO;iBAAW,KAAE;OAAiB,EACvE,YAAY,KAAK,qBAAC;MAAK,WAAW,OAAO;iBAAW,KAAE;OAAiB;MAChE,EAEX,WACC,oBAACA;KAAQ,OAAM;KAAS,WAAW,GAAG,GAAG,OAAO,WAAW,OAAO,QAAQ;KAAE,KAAK;eAC9E;MACO;KAEJ;IACN,EAER,oBAAC;GAAI,WAAW,GAAG,OAAO,MAAM,YAAY,KAAK;GAAE,OAAO,cAAc;aACtE,oBAACE;IAAyB;IAAgB;KAAS;IAC/C;GACE;EAGf;AAED,YAAU,cAAc;AAExB,wBAAeH"}