feat(web): add markdown preview mode and PR screenshot capture (#461)

This commit is contained in:
Carlos Florêncio
2026-03-24 23:38:02 +00:00
committed by GitHub
parent df70eee749
commit fb5886600a
26 changed files with 986 additions and 53 deletions
@@ -13,6 +13,7 @@ import {
IconArrowBackUp,
IconFoldDown,
IconFold,
IconEye,
} from "@tabler/icons-react";
import type { RenderHeaderMetadataProps } from "@pierre/diffs";
import type { ViewMode } from "@/hooks/use-global-view-mode";
@@ -56,6 +57,7 @@ interface DiffHeaderToolbarOptions {
viewMode: ViewMode;
onToggleViewMode: () => void;
onOpenFile?: (filePath: string) => void;
onPreviewMarkdown?: (filePath: string) => void;
onRevert?: (filePath: string) => void;
expandUnchanged?: boolean;
onToggleExpandUnchanged?: () => void;
@@ -64,6 +66,7 @@ interface DiffHeaderToolbarOptions {
type ToolbarButtonsProps = Omit<DiffHeaderToolbarOptions, "filePath" | "diff"> & {
resolvedPath: string;
onCopyDiff: () => void;
isMarkdownFile: boolean;
};
function DiffHeaderToolbarButtons({
@@ -77,6 +80,8 @@ function DiffHeaderToolbarButtons({
viewMode,
onToggleViewMode,
onOpenFile,
onPreviewMarkdown,
isMarkdownFile,
}: ToolbarButtonsProps) {
return (
<div className="flex items-center gap-1">
@@ -123,6 +128,16 @@ function DiffHeaderToolbarButtons({
)}
</ToolbarBtn>
{isMarkdownFile && onPreviewMarkdown && (
<ToolbarBtn
onClick={() => onPreviewMarkdown(resolvedPath)}
tooltip="Preview markdown"
className={iconBtn}
>
<IconEye className="h-3.5 w-3.5" />
</ToolbarBtn>
)}
{onOpenFile && (
<ToolbarBtn onClick={() => onOpenFile(resolvedPath)} tooltip="Edit">
<IconPencil className="h-3.5 w-3.5" />
@@ -132,6 +147,11 @@ function DiffHeaderToolbarButtons({
);
}
function checkIsMarkdown(filePath: string): boolean {
const ext = filePath.split(".").pop()?.toLowerCase();
return ext === "md" || ext === "mdx";
}
export function useDiffHeaderToolbar(opts: DiffHeaderToolbarOptions) {
const {
filePath,
@@ -141,6 +161,7 @@ export function useDiffHeaderToolbar(opts: DiffHeaderToolbarOptions) {
viewMode,
onToggleViewMode,
onOpenFile,
onPreviewMarkdown,
onRevert,
expandUnchanged,
onToggleExpandUnchanged,
@@ -152,12 +173,14 @@ export function useDiffHeaderToolbar(opts: DiffHeaderToolbarOptions) {
return (
<DiffHeaderToolbarButtons
resolvedPath={resolvedPath}
isMarkdownFile={checkIsMarkdown(resolvedPath)}
onCopyDiff={() => navigator.clipboard.writeText(diff || "")}
wordWrap={wordWrap}
onToggleWordWrap={onToggleWordWrap}
viewMode={viewMode}
onToggleViewMode={onToggleViewMode}
onOpenFile={onOpenFile}
onPreviewMarkdown={onPreviewMarkdown}
onRevert={onRevert}
expandUnchanged={expandUnchanged}
onToggleExpandUnchanged={onToggleExpandUnchanged}
@@ -172,6 +195,7 @@ export function useDiffHeaderToolbar(opts: DiffHeaderToolbarOptions) {
viewMode,
onToggleViewMode,
onOpenFile,
onPreviewMarkdown,
onRevert,
expandUnchanged,
onToggleExpandUnchanged,