@pstdio/ui 0.21.0 → 0.22.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (111) hide show
  1. package/dist/{MermaidComponent-BVMyKttu.js → MermaidComponent-D92GMhht.js} +3 -3
  2. package/dist/{MermaidComponent-BVMyKttu.js.map → MermaidComponent-D92GMhht.js.map} +1 -1
  3. package/dist/chat-ui.d.ts +2 -0
  4. package/dist/chat-ui.js +2 -2
  5. package/dist/components/data-table/build-columns.d.ts +1 -0
  6. package/dist/components/data-table/data-table-column-menu.d.ts +2 -0
  7. package/dist/components/data-table/data-table-row-display.d.ts +11 -0
  8. package/dist/components/data-table/data-table-table-parts.d.ts +1 -0
  9. package/dist/components/data-table/edit-mode-data-table-body.d.ts +1 -0
  10. package/dist/components/data-table/edit-mode-data-table-cell.d.ts +1 -0
  11. package/dist/components/data-table/edit-mode-data-table-header.d.ts +1 -0
  12. package/dist/components/diff-viewer/code-editor.d.ts +8 -2
  13. package/dist/components/kanban-renderer/collection-badge.d.ts +7 -0
  14. package/dist/components/kanban-renderer/index.d.ts +1 -1
  15. package/dist/components/kanban-renderer/kanban-renderer-helpers.d.ts +2 -1
  16. package/dist/components/kanban-renderer/types.d.ts +20 -1
  17. package/dist/components/list-row/list-row-content.d.ts +1 -0
  18. package/dist/components/param-editor/param-editor-presentation.d.ts +1 -1
  19. package/dist/components/param-editor/param-editor.types.d.ts +5 -193
  20. package/dist/components/rich-text/shared/markdown-ast.d.ts +1 -0
  21. package/dist/components/rich-text/shared/markdown-source-document.d.ts +7 -0
  22. package/dist/components/rich-text/shared/markdown-source-links.d.ts +11 -0
  23. package/dist/components/rich-text/shared/markdown-source-map.d.ts +10 -0
  24. package/dist/components/rich-text/utils/inferResourceType.d.ts +1 -1
  25. package/dist/components/tag-editor/tag-editor-row.d.ts +1 -1
  26. package/dist/components/tag-editor/tag-editor.types.d.ts +12 -0
  27. package/dist/components/tag-editor/tag-settings-panel.d.ts +1 -1
  28. package/dist/components/tree-list/tree-list-drag-provider.d.ts +13 -0
  29. package/dist/components/tree-list/tree-list-order.store.d.ts +4 -1
  30. package/dist/components/tree-list/tree-list-reorder.d.ts +14 -3
  31. package/dist/components/tree-list/tree-list-sortable.d.ts +2 -0
  32. package/dist/components/tree-list/tree-list-visibility-filter.d.ts +2 -2
  33. package/dist/components/tree-list/tree-list.d.ts +3 -0
  34. package/dist/components/tree-list/tree-list.types.d.ts +4 -0
  35. package/dist/data-table.d.ts +2 -0
  36. package/dist/data-table.js +806 -793
  37. package/dist/data-table.js.map +1 -1
  38. package/dist/diff.d.ts +2 -0
  39. package/dist/diff.js +529 -533
  40. package/dist/diff.js.map +1 -1
  41. package/dist/edit-mode-data-table-DGgRuSW3.js +846 -0
  42. package/dist/edit-mode-data-table-DGgRuSW3.js.map +1 -0
  43. package/dist/index.d.ts +2 -0
  44. package/dist/index.js +1516 -1413
  45. package/dist/index.js.map +1 -1
  46. package/dist/{kanban-renderer-toolbar-CpegGbwq.js → kanban-renderer-toolbar-Bl8xXdwU.js} +527 -469
  47. package/dist/kanban-renderer-toolbar-Bl8xXdwU.js.map +1 -0
  48. package/dist/kanban-renderer.d.ts +2 -0
  49. package/dist/kanban-renderer.js +21 -21
  50. package/dist/kanban-renderer.js.map +1 -1
  51. package/dist/lazy-markdown-editor-CCOchoJX.js +235 -0
  52. package/dist/lazy-markdown-editor-CCOchoJX.js.map +1 -0
  53. package/dist/list-row-DCgdza1i.js +812 -0
  54. package/dist/list-row-DCgdza1i.js.map +1 -0
  55. package/dist/markdown-CASvn1Z2.js +1643 -0
  56. package/dist/markdown-CASvn1Z2.js.map +1 -0
  57. package/dist/markdown-editor-C4GCyebp.js +1019 -0
  58. package/dist/markdown-editor-C4GCyebp.js.map +1 -0
  59. package/dist/{mermaid-renderer-H3IhLqnQ.js → mermaid-renderer-CVnuKs-A.js} +2 -2
  60. package/dist/{mermaid-renderer-H3IhLqnQ.js.map → mermaid-renderer-CVnuKs-A.js.map} +1 -1
  61. package/dist/mermaid.d.ts +2 -0
  62. package/dist/mermaid.js +1 -1
  63. package/dist/monaco-browser-CgvlArN7.js +21 -0
  64. package/dist/monaco-browser-CgvlArN7.js.map +1 -0
  65. package/dist/{param-editor-B8Ff9Nm8.js → param-editor-CkDq623X.js} +2 -2
  66. package/dist/{param-editor-B8Ff9Nm8.js.map → param-editor-CkDq623X.js.map} +1 -1
  67. package/dist/param-editor-field-DRgbnL7-.js +2809 -0
  68. package/dist/param-editor-field-DRgbnL7-.js.map +1 -0
  69. package/dist/rich-message-DARuDVOX.js +628 -0
  70. package/dist/{rich-message-DdFYRzTo.js.map → rich-message-DARuDVOX.js.map} +1 -1
  71. package/dist/rich-text.d.ts +2 -0
  72. package/dist/rich-text.js +48 -47
  73. package/dist/rich-text.js.map +1 -1
  74. package/dist/style.css +1 -1
  75. package/dist/terminal.d.ts +2 -0
  76. package/dist/theme/primitives/sizes.d.ts +9 -0
  77. package/dist/{theme-BH4fSst9.js → theme-B-l5_a6F.js} +69 -50
  78. package/dist/theme-B-l5_a6F.js.map +1 -0
  79. package/dist/theme-preference-Bpobguh4.js +114 -0
  80. package/dist/theme-preference-Bpobguh4.js.map +1 -0
  81. package/dist/theme.d.ts +2 -0
  82. package/dist/theme.js +1 -1
  83. package/dist/tree-list-AlO5ZmxQ.js +1262 -0
  84. package/dist/tree-list-AlO5ZmxQ.js.map +1 -0
  85. package/dist/utils/theme-preference.d.ts +4 -1
  86. package/dist/workspace-badge-BR_GgsAG.js +175 -0
  87. package/dist/workspace-badge-BR_GgsAG.js.map +1 -0
  88. package/package.json +5 -42
  89. package/dist/dialog-accept-shortcut-DAEBsoWW.js +0 -7
  90. package/dist/dialog-accept-shortcut-DAEBsoWW.js.map +0 -1
  91. package/dist/edit-mode-data-table-D6NeiDJx.js +0 -775
  92. package/dist/edit-mode-data-table-D6NeiDJx.js.map +0 -1
  93. package/dist/editor-config-D9OksZ93.js +0 -2416
  94. package/dist/editor-config-D9OksZ93.js.map +0 -1
  95. package/dist/kanban-renderer-toolbar-CpegGbwq.js.map +0 -1
  96. package/dist/lazy-markdown-editor-B7uP2ALS.js +0 -26
  97. package/dist/lazy-markdown-editor-B7uP2ALS.js.map +0 -1
  98. package/dist/list-row-9oxy-F0v.js +0 -796
  99. package/dist/list-row-9oxy-F0v.js.map +0 -1
  100. package/dist/monaco-browser-CO0NxK_Z.js +0 -19
  101. package/dist/monaco-browser-CO0NxK_Z.js.map +0 -1
  102. package/dist/number-input-WUfejtNx.js +0 -343
  103. package/dist/number-input-WUfejtNx.js.map +0 -1
  104. package/dist/param-editor-field-Cu4pto_a.js +0 -2845
  105. package/dist/param-editor-field-Cu4pto_a.js.map +0 -1
  106. package/dist/rich-message-DdFYRzTo.js +0 -658
  107. package/dist/theme-BH4fSst9.js.map +0 -1
  108. package/dist/theme-preference-DyymrYpR.js +0 -123
  109. package/dist/theme-preference-DyymrYpR.js.map +0 -1
  110. package/dist/tree-list-uV4UFj0x.js +0 -1116
  111. package/dist/tree-list-uV4UFj0x.js.map +0 -1
package/dist/diff.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"diff.js","sources":["../src/components/diff-viewer/code-editor.tsx","../../pstdio-file-types/src/index.ts","../src/components/diff-viewer/diff-size.ts","../src/components/diff-viewer/diff-card-body.tsx","../src/components/diff-viewer/diff-card-load-state.tsx","../src/components/diff-viewer/diff-card-content.tsx","../src/components/diff-viewer/diff-card.tsx","../src/components/diff-viewer/diff-drawer-empty-state.tsx","../src/components/diff-viewer/diff-drawer-height.ts","../src/components/diff-viewer/diff-drawer-scroll.ts","../src/components/diff-viewer/use-selected-diff-scroll.ts","../src/components/diff-viewer/diff-drawer.tsx","../src/components/diff-viewer/build-changed-files-tree.ts","../src/components/diff-viewer/diff-viewer.store.ts","../src/components/diff-viewer/diff-viewer-options-menu.tsx","../src/components/diff-viewer/file-change-badge.tsx","../src/components/diff-viewer/file-list-panel.tsx","../src/components/diff-viewer/diff-viewer.tsx"],"sourcesContent":["import { DiffEditor, Editor, type OnMount } from \"@monaco-editor/react\";\nimport { useEffect, useRef } from \"react\";\nimport type { MonacoThemeData } from \"../../theme\";\nimport { useThemePreference } from \"../../utils/theme-preference\";\n\nexport const createCodeEditorPreloader = (initialize: () => Promise<unknown>) => {\n let initialization: Promise<unknown> | undefined;\n\n return () => {\n initialization ??= initialize();\n return initialization;\n };\n};\n\nexport const preloadCodeEditor = createCodeEditorPreloader(() =>\n import(\"./monaco-browser\").then((module) => module.initializeMonaco()),\n);\n\nexport const customTheme = {\n base: \"vs-dark\" as const,\n inherit: true,\n rules: [],\n colors: {\n \"editor.background\": \"#0a0d15\",\n \"editor.foreground\": \"#f5f5f5\",\n \"editor.lineHighlightBackground\": \"#22252C\",\n \"editorCursor.foreground\": \"#A7A7A7\",\n \"editorWhitespace.foreground\": \"#3B3B3B\",\n \"editorIndentGuide.background\": \"#404040\",\n \"editorIndentGuide.activeBackground\": \"#707070\",\n },\n} satisfies MonacoThemeData;\n\nconst isMonacoTheme = (value: unknown): value is MonacoThemeData =>\n typeof value === \"object\" && value !== null && \"base\" in value && \"colors\" in value;\n\ntype MonacoApi = {\n editor: {\n defineTheme: (name: string, data: MonacoThemeData) => void;\n setTheme: (name: string) => void;\n };\n};\n\nconst EDITOR_THEME_NAME = \"ps-theme\";\n\nconst useEditorTheme = () => {\n const { themePreference, themePreferences } = useThemePreference();\n const preference = themePreferences.find((theme) => theme.id === themePreference);\n return isMonacoTheme(preference?.monacoTheme) ? preference.monacoTheme : customTheme;\n};\n\nconst useApplyEditorTheme = (editorTheme: MonacoThemeData) => {\n const monacoRef = useRef<MonacoApi | null>(null);\n\n useEffect(() => {\n const monaco = monacoRef.current;\n if (!monaco) return;\n\n monaco.editor.defineTheme(EDITOR_THEME_NAME, editorTheme);\n monaco.editor.setTheme(EDITOR_THEME_NAME);\n }, [editorTheme]);\n\n return (monaco: MonacoApi) => {\n monacoRef.current = monaco;\n monaco.editor.defineTheme(EDITOR_THEME_NAME, editorTheme);\n monaco.editor.setTheme(EDITOR_THEME_NAME);\n };\n};\n\nexport const configureCodeEditor = (editor: Parameters<OnMount>[0], monaco: Parameters<OnMount>[1]) => {\n monaco.languages.typescript.typescriptDefaults.setCompilerOptions({\n jsx: monaco.languages.typescript.JsxEmit.React,\n });\n\n editor.addCommand(monaco.KeyMod.CtrlCmd | monaco.KeyCode.KeyS, async () => {\n await editor.getAction(\"editor.action.formatDocument\")?.run();\n });\n};\n\ninterface CodeEditorProps {\n language: string;\n defaultCode?: string;\n code?: string;\n isEditable: boolean;\n showLineNumbers?: boolean;\n onChange?: (code: string) => void;\n disableScroll?: boolean;\n}\n\nexport const CodeEditor = (props: CodeEditorProps) => {\n const { defaultCode, code, showLineNumbers, isEditable, language = \"javascript\", onChange, disableScroll } = props;\n const editorTheme = useEditorTheme();\n const applyEditorTheme = useApplyEditorTheme(editorTheme);\n\n const options = {\n tabSize: 2,\n minimap: {\n enabled: false,\n },\n fontSize: 12,\n readOnly: !isEditable,\n lineNumbers: showLineNumbers ? \"on\" : \"off\",\n ...(disableScroll\n ? {\n scrollbar: {\n vertical: \"hidden\" as const,\n horizontal: \"hidden\" as const,\n useShadows: false,\n alwaysConsumeMouseWheel: false,\n },\n scrollBeyondLastLine: false,\n mouseWheelScrollSensitivity: 0,\n overviewRulerLanes: 0,\n }\n : {}),\n } as const;\n\n return (\n <Editor\n width=\"100%\"\n height=\"100%\"\n language={language}\n defaultValue={defaultCode}\n value={code}\n theme={EDITOR_THEME_NAME}\n options={options}\n onChange={(value) => {\n onChange?.(value || \"\");\n }}\n beforeMount={(monaco) => {\n applyEditorTheme(monaco);\n }}\n onMount={(editor, monaco) => {\n applyEditorTheme(monaco);\n configureCodeEditor(editor, monaco);\n }}\n />\n );\n};\n\ninterface CodeDiffEditorProps {\n language: string;\n original: string;\n modified: string;\n showLineNumbers?: boolean;\n disableScroll?: boolean;\n}\n\nexport const CodeDiffEditor = (props: CodeDiffEditorProps) => {\n const { original, modified, showLineNumbers, language = \"javascript\", disableScroll } = props;\n const editorTheme = useEditorTheme();\n const applyEditorTheme = useApplyEditorTheme(editorTheme);\n\n const options = {\n tabSize: 2,\n minimap: {\n enabled: false,\n },\n fontSize: 12,\n readOnly: true,\n originalEditable: false,\n renderSideBySide: true,\n useInlineViewWhenSpaceIsTooSmall: true,\n lineNumbers: showLineNumbers ? \"on\" : \"off\",\n ...(disableScroll\n ? {\n scrollbar: {\n vertical: \"hidden\" as const,\n horizontal: \"hidden\" as const,\n useShadows: false,\n alwaysConsumeMouseWheel: false,\n },\n scrollBeyondLastLine: false,\n mouseWheelScrollSensitivity: 0,\n overviewRulerLanes: 0,\n }\n : {}),\n } as const;\n\n return (\n <DiffEditor\n width=\"100%\"\n height=\"100%\"\n language={language}\n original={original}\n modified={modified}\n theme={EDITOR_THEME_NAME}\n options={options}\n beforeMount={(monaco) => {\n applyEditorTheme(monaco);\n }}\n onMount={(_, monaco) => {\n applyEditorTheme(monaco);\n\n monaco.languages.typescript.typescriptDefaults.setCompilerOptions({\n jsx: monaco.languages.typescript.JsxEmit.React,\n });\n }}\n />\n );\n};\n","export const imagePreviewMimeTypes = {\n avif: \"image/avif\",\n bmp: \"image/bmp\",\n gif: \"image/gif\",\n heic: \"image/heic\",\n ico: \"image/x-icon\",\n jpeg: \"image/jpeg\",\n jpg: \"image/jpeg\",\n png: \"image/png\",\n tif: \"image/tiff\",\n tiff: \"image/tiff\",\n webp: \"image/webp\",\n} as const;\n\nexport const imagePreviewExtensions = Object.keys(imagePreviewMimeTypes);\n\nexport const getFileExtension = (filePath: string) => {\n const fileName = filePath.split(/[\\\\/]/).pop() ?? filePath;\n const extension = fileName.split(\".\").pop();\n return extension ? extension.toLowerCase() : \"\";\n};\n\nexport const getImagePreviewMimeType = (filePath: string) => {\n const extension = getFileExtension(filePath);\n return imagePreviewMimeTypes[extension as keyof typeof imagePreviewMimeTypes] ?? null;\n};\n\nexport const isImagePreviewPath = (filePath: string) => getImagePreviewMimeType(filePath) !== null;\n","import { getFileExtension, imagePreviewExtensions, isImagePreviewPath } from \"pstdio-file-types\";\n\nexport const LARGE_DIFF_LINE_THRESHOLD = 1000;\n\nconst generatedDiffFileNames = new Set([\"bun.lock\", \"bun.lockb\", \"package-lock.json\", \"pnpm-lock.yaml\", \"yarn.lock\"]);\n\n// Extensions whose byte content cannot be meaningfully shown as a unified diff.\n// SVG is intentionally excluded — it is text-based XML and benefits from a line diff.\nconst binaryDiffExtensions = new Set([\n ...imagePreviewExtensions,\n \"pdf\",\n \"zip\",\n \"tar\",\n \"gz\",\n \"tgz\",\n \"rar\",\n \"7z\",\n \"exe\",\n \"dll\",\n \"so\",\n \"dylib\",\n \"wasm\",\n \"class\",\n \"jar\",\n \"mp3\",\n \"mp4\",\n \"mov\",\n \"ogg\",\n \"wav\",\n \"webm\",\n \"flac\",\n \"ttf\",\n \"otf\",\n \"woff\",\n \"woff2\",\n \"eot\",\n]);\n\nexport const getDiffLineCount = (input: {\n additions?: number;\n deletions?: number;\n oldContent?: string;\n newContent?: string;\n}) => {\n return (input.additions ?? 0) + (input.deletions ?? 0);\n};\n\nexport const isLargeDiffContent = (input: {\n additions?: number;\n deletions?: number;\n oldContent?: string;\n newContent?: string;\n}) => {\n return getDiffLineCount(input) > LARGE_DIFF_LINE_THRESHOLD;\n};\n\nexport const isGeneratedDiffPath = (path: string) => {\n const fileName = path.split(/[\\\\/]/).pop() ?? path;\n\n return generatedDiffFileNames.has(fileName) || fileName.endsWith(\".min.js\") || fileName.endsWith(\".generated.ts\");\n};\n\nexport const isBinaryDiffPath = (path: string) => {\n const ext = getFileExtension(path);\n return ext.length > 0 && binaryDiffExtensions.has(ext);\n};\n\nexport const isImageDiffPath = isImagePreviewPath;\n","import { Box, Button, Grid, Image, Text } from \"@chakra-ui/react\";\nimport { EmptyState } from \"@/components/primitives/empty-state\";\nimport type { Diff } from \"./diff-card\";\nimport { DiffEditor } from \"./diff-editor\";\nimport { getDiffLineCount, isBinaryDiffPath, isImageDiffPath } from \"./diff-size\";\nimport { type BuiltDiffViewData, buildDiffViewData } from \"./diff-view-adapter\";\nimport type { DiffViewMode } from \"./types\";\n\ninterface DiffCardBodyProps {\n diff: Diff;\n filePath: string;\n oldContent: string;\n newContent: string;\n isLargeDiff: boolean;\n hasOptedIntoLargeDiff: boolean;\n onShowFullDiff?: () => void;\n diffViewMode?: DiffViewMode;\n}\n\ninterface DiffCardBodyModelInput extends DiffCardBodyProps {\n buildViewData?: typeof buildDiffViewData;\n}\n\nexport const createDiffCardBodyModel = (input: DiffCardBodyModelInput) => {\n const {\n diff,\n filePath,\n oldContent,\n newContent,\n isLargeDiff,\n hasOptedIntoLargeDiff,\n onShowFullDiff,\n diffViewMode = \"unified\",\n buildViewData,\n } = input;\n\n if (isBinaryDiffPath(filePath)) {\n const oldImageSrc = getImagePreviewSource(oldContent);\n const newImageSrc = getImagePreviewSource(newContent);\n if (isImageDiffPath(filePath) && (oldImageSrc || newImageSrc)) {\n return {\n kind: \"image\" as const,\n filePath,\n oldSrc: oldImageSrc,\n newSrc: newImageSrc,\n };\n }\n\n return {\n kind: \"binary\" as const,\n filePath,\n isImage: isImageDiffPath(filePath),\n };\n }\n\n if (isLargeDiff && !hasOptedIntoLargeDiff) {\n return {\n kind: \"placeholder\" as const,\n filePath,\n renderedLineCount: getDiffLineCount(diff),\n onShowFullDiff,\n };\n }\n\n const diffViewData = (buildViewData ?? buildDiffViewData)({\n original: oldContent,\n modified: newContent,\n oldPath: diff.oldPath,\n newPath: diff.newPath,\n });\n return {\n kind: \"editor\" as const,\n diffViewData,\n sideBySide: diffViewMode === \"split\",\n };\n};\n\nconst getImagePreviewSource = (content: string) => (content.startsWith(\"data:image/\") ? content : \"\");\n\nexport const DiffCardBody = (props: DiffCardBodyProps) => {\n const {\n diff,\n filePath,\n oldContent,\n newContent,\n isLargeDiff,\n hasOptedIntoLargeDiff,\n onShowFullDiff,\n diffViewMode = \"unified\",\n } = props;\n const model = createDiffCardBodyModel({\n diff,\n filePath,\n oldContent,\n newContent,\n isLargeDiff,\n hasOptedIntoLargeDiff,\n onShowFullDiff,\n diffViewMode,\n });\n\n return (\n <Box bg=\"bg\" borderBottomRadius=\"xs\" overflow=\"hidden\">\n {model.kind === \"editor\" ? (\n <DiffEditor\n original={oldContent}\n modified={newContent}\n oldPath={diff.oldPath}\n newPath={diff.newPath}\n sideBySide={model.sideBySide}\n data={model.diffViewData}\n />\n ) : model.kind === \"image\" ? (\n <ImageDiffPreview oldSrc={model.oldSrc} newSrc={model.newSrc} />\n ) : model.kind === \"binary\" ? (\n <BinaryDiffPlaceholder isImage={model.isImage} />\n ) : (\n <LargeDiffPlaceholder\n filePath={model.filePath}\n renderedLineCount={model.renderedLineCount}\n onShowFullDiff={model.onShowFullDiff}\n />\n )}\n </Box>\n );\n};\n\ninterface ImageDiffPreviewProps {\n oldSrc: string;\n newSrc: string;\n}\n\nconst ImageDiffPreview = (props: ImageDiffPreviewProps) => {\n const { oldSrc, newSrc } = props;\n\n return (\n <Grid\n templateColumns={{ base: \"1fr\", md: \"1fr 1fr\" }}\n gap=\"sm\"\n p=\"sm\"\n borderTop=\"1px solid\"\n borderColor=\"border.subtle\"\n bg=\"bg\"\n >\n <ImageDiffPanel label=\"Old\" src={oldSrc} fallback=\"No old image\" />\n <ImageDiffPanel label=\"New\" src={newSrc} fallback=\"No new image\" />\n </Grid>\n );\n};\n\ninterface ImageDiffPanelProps {\n label: string;\n src: string;\n fallback: string;\n}\n\nconst ImageDiffPanel = (props: ImageDiffPanelProps) => {\n const { label, src, fallback } = props;\n\n return (\n <Box border=\"1px solid\" borderColor=\"border.subtle\" borderRadius=\"xs\" overflow=\"hidden\" bg=\"bg.subtle\" minW=\"0\">\n <Text\n px=\"xs\"\n py=\"2xs\"\n textStyle=\"label/S/medium\"\n color=\"fg.muted\"\n borderBottom=\"1px solid\"\n borderColor=\"border.subtle\"\n >\n {label}\n </Text>\n <Box display=\"grid\" placeItems=\"center\" minH=\"180px\" p=\"sm\">\n {src ? (\n <Image src={src} alt={`${label} image diff`} maxH=\"260px\" maxW=\"100%\" objectFit=\"contain\" />\n ) : (\n <Text color=\"fg.muted\" textStyle=\"body/S/regular\">\n {fallback}\n </Text>\n )}\n </Box>\n </Box>\n );\n};\n\ninterface LargeDiffPlaceholderProps {\n filePath: string;\n renderedLineCount: number;\n onShowFullDiff?: () => void;\n}\n\nconst LargeDiffPlaceholder = (props: LargeDiffPlaceholderProps) => {\n const { filePath, onShowFullDiff } = props;\n\n return (\n <Box p=\"md\" borderTop=\"1px solid\" borderColor=\"border.subtle\" bg=\"bg\">\n <EmptyState title=\"Large diffs are hidden by default\" paddingY=\"sm\">\n {onShowFullDiff ? (\n <Button size=\"xs\" variant=\"outline\" aria-label={`Render full diff for ${filePath}`} onClick={onShowFullDiff}>\n Show full diff\n </Button>\n ) : null}\n </EmptyState>\n </Box>\n );\n};\n\ninterface BinaryDiffPlaceholderProps {\n isImage: boolean;\n}\n\nconst BinaryDiffPlaceholder = (props: BinaryDiffPlaceholderProps) => {\n const { isImage } = props;\n const title = isImage ? \"Image diffs are not shown\" : \"Binary diffs are not shown\";\n\n return (\n <Box p=\"md\" borderTop=\"1px solid\" borderColor=\"border.subtle\" bg=\"bg\">\n <EmptyState title={title} paddingY=\"sm\" />\n </Box>\n );\n};\n\nexport type TestDiffViewData = BuiltDiffViewData;\n","import { Box, Button, Skeleton, Stack } from \"@chakra-ui/react\";\nimport { EmptyState } from \"@/components/primitives/empty-state\";\n\ninterface DeferredDiffLoadProps {\n title: string;\n actionLabel?: string;\n isLoadingDiff: boolean;\n onAction?: () => void;\n}\n\nexport const DeferredDiffLoad = (props: DeferredDiffLoadProps) => {\n const { title, actionLabel, isLoadingDiff, onAction } = props;\n\n return (\n <Box bg=\"bg\" p=\"md\" borderTop=\"1px solid\" borderColor=\"border.subtle\">\n <EmptyState title={title} paddingY=\"sm\">\n {actionLabel ? (\n <Button size=\"xs\" variant=\"outline\" loading={isLoadingDiff} onClick={onAction}>\n {actionLabel}\n </Button>\n ) : null}\n </EmptyState>\n </Box>\n );\n};\n\nconst loadingDiffContentRows = [\"first\", \"second\", \"third\"] as const;\n\nexport const LoadingDiffContent = () => (\n <Stack\n h=\"280px\"\n bg=\"bg\"\n borderTop=\"1px solid\"\n borderColor=\"border.subtle\"\n p=\"xs\"\n gap=\"2xs\"\n role=\"status\"\n aria-busy=\"true\"\n aria-label=\"Loading diff\"\n >\n {loadingDiffContentRows.map((row) => (\n <Skeleton key={row} h=\"20px\" w=\"full\" borderRadius=\"xs\" />\n ))}\n </Stack>\n);\n","import type { Diff } from \"./diff-card\";\nimport { DiffCardBody } from \"./diff-card-body\";\nimport { DeferredDiffLoad, LoadingDiffContent } from \"./diff-card-load-state\";\nimport type { DiffViewMode } from \"./types\";\n\ninterface DiffCardContentProps {\n diff: Diff;\n filePath: string;\n oldContent: string;\n newContent: string;\n isExpanded: boolean;\n isLargeDiff: boolean;\n isGeneratedDiff: boolean;\n isBinaryDiff: boolean;\n hasDiffContent: boolean;\n canLoadDiff: boolean;\n shouldAutoLoadDiff: boolean;\n loadError: boolean;\n isLoadingDiff: boolean;\n onLoadDiff: () => Promise<void>;\n hasOptedIntoLargeDiff: boolean;\n onShowFullDiff?: () => void;\n diffViewMode?: DiffViewMode;\n}\n\ninterface DeferredDiffLoadStateInput {\n isLargeDiff: boolean;\n isGeneratedDiff: boolean;\n loadError: boolean;\n canLoadDiff: boolean;\n onLoadDiff: () => Promise<void>;\n onShowFullDiff?: () => void;\n}\n\nconst buildDeferredDiffLoadState = (input: DeferredDiffLoadStateInput) => {\n const { isLargeDiff, isGeneratedDiff, loadError, canLoadDiff, onLoadDiff, onShowFullDiff } = input;\n let title = \"Diff content is not loaded yet.\";\n let actionLabel = canLoadDiff ? \"Load diff\" : undefined;\n let onAction: (() => void) | undefined = canLoadDiff ? () => void onLoadDiff() : undefined;\n\n if (isLargeDiff) {\n title = \"Large diffs are hidden by default\";\n actionLabel = canLoadDiff ? \"Show full diff\" : undefined;\n onAction = () => {\n onShowFullDiff?.();\n void onLoadDiff();\n };\n }\n\n if (isGeneratedDiff) {\n title = \"Generated diffs are hidden by default\";\n actionLabel = canLoadDiff ? \"Load diff\" : undefined;\n onAction = canLoadDiff ? () => void onLoadDiff() : undefined;\n }\n\n if (loadError) {\n title = \"Diff failed to load. Try again.\";\n actionLabel = canLoadDiff ? \"Load diff\" : undefined;\n onAction = canLoadDiff ? () => void onLoadDiff() : undefined;\n }\n\n return { title, actionLabel, onAction };\n};\n\nexport const DiffCardContent = (props: DiffCardContentProps) => {\n const {\n diff,\n filePath,\n oldContent,\n newContent,\n isExpanded,\n isLargeDiff,\n isGeneratedDiff,\n isBinaryDiff,\n hasDiffContent,\n canLoadDiff,\n shouldAutoLoadDiff,\n loadError,\n isLoadingDiff,\n onLoadDiff,\n hasOptedIntoLargeDiff,\n onShowFullDiff,\n diffViewMode = \"unified\",\n } = props;\n\n if (!isExpanded) return null;\n\n if (isBinaryDiff) {\n return (\n <DiffCardBody\n diff={diff}\n filePath={filePath}\n oldContent={oldContent}\n newContent={newContent}\n isLargeDiff={false}\n hasOptedIntoLargeDiff={hasOptedIntoLargeDiff}\n onShowFullDiff={onShowFullDiff}\n diffViewMode={diffViewMode}\n />\n );\n }\n\n if (!hasDiffContent && !shouldAutoLoadDiff) {\n const { title, actionLabel, onAction } = buildDeferredDiffLoadState({\n isLargeDiff,\n isGeneratedDiff,\n loadError,\n canLoadDiff,\n onLoadDiff,\n onShowFullDiff,\n });\n\n return (\n <DeferredDiffLoad title={title} actionLabel={actionLabel} isLoadingDiff={isLoadingDiff} onAction={onAction} />\n );\n }\n\n if (shouldAutoLoadDiff) {\n return <LoadingDiffContent />;\n }\n\n return (\n <DiffCardBody\n diff={diff}\n filePath={filePath}\n oldContent={oldContent}\n newContent={newContent}\n isLargeDiff={isLargeDiff}\n hasOptedIntoLargeDiff={hasOptedIntoLargeDiff}\n onShowFullDiff={onShowFullDiff}\n diffViewMode={diffViewMode}\n />\n );\n};\n","import { Box, Grid, IconButton, Text } from \"@chakra-ui/react\";\nimport { Check, ChevronDown, ChevronRight, Copy } from \"lucide-react\";\nimport { useEffect, useRef, useState } from \"react\";\nimport { Tooltip } from \"@/components/primitives/tooltip\";\nimport { DiffBubble } from \"./diff-bubble\";\nimport { DiffCardContent } from \"./diff-card-content\";\nimport { isBinaryDiffPath, isGeneratedDiffPath, isImageDiffPath, isLargeDiffContent } from \"./diff-size\";\nimport type { DiffViewMode } from \"./types\";\n\nexport interface Diff {\n change: \"added\" | \"deleted\" | \"modified\" | \"renamed\" | \"copied\" | \"permissionChange\";\n oldPath?: string;\n newPath?: string;\n oldContent?: string;\n newContent?: string;\n additions?: number;\n deletions?: number;\n}\n\ninterface DiffCardProps {\n diff: Diff;\n isSelected?: boolean;\n isExpanded?: boolean;\n onToggleExpanded?: () => void;\n onSelect?: () => void;\n onLoadDiff?: (path: string) => Promise<void>;\n hasOptedIntoLargeDiff?: boolean;\n onShowFullDiff?: () => void;\n diffViewMode?: DiffViewMode;\n}\n\ninterface DiffCardHeaderProps {\n diff: Diff;\n isExpanded?: boolean;\n onToggleExpanded?: () => void;\n}\n\nexport const shouldAutoLoadDiffContent = (input: {\n isExpanded: boolean;\n isSelected: boolean;\n hasDiffContent: boolean;\n isLargeDiff: boolean;\n isGeneratedDiff: boolean;\n isBinaryDiff: boolean;\n requestedPath: string | null;\n filePath: string;\n}) => {\n const {\n isExpanded,\n isSelected,\n hasDiffContent,\n isLargeDiff,\n isGeneratedDiff,\n isBinaryDiff,\n requestedPath,\n filePath,\n } = input;\n\n return (\n isExpanded &&\n isSelected &&\n !hasDiffContent &&\n !isLargeDiff &&\n !isGeneratedDiff &&\n !isBinaryDiff &&\n requestedPath !== filePath\n );\n};\n\nexport const resolveRequestedDiffPath = (input: {\n requestedPath: string | null;\n filePath: string;\n hasDiffContent: boolean;\n}) => {\n const { requestedPath, filePath, hasDiffContent } = input;\n\n if (requestedPath === filePath && hasDiffContent) {\n return null;\n }\n\n return requestedPath;\n};\n\nexport const shouldShowDiffStats = (filePath: string) => !isImageDiffPath(filePath);\n\nexport const resolveDiffFilePath = (diff: Diff) => diff.newPath || diff.oldPath || \"unknown\";\n\nconst useDiffContentLoader = (input: {\n filePath: string;\n isExpanded: boolean;\n isSelected: boolean;\n hasDiffContent: boolean;\n isLargeDiff: boolean;\n isGeneratedDiff: boolean;\n isBinaryDiff: boolean;\n onLoadDiff?: (path: string) => Promise<void>;\n}) => {\n const { filePath, isExpanded, isSelected, hasDiffContent, isLargeDiff, isGeneratedDiff, isBinaryDiff, onLoadDiff } =\n input;\n const [isLoadingDiff, setLoadingDiff] = useState(false);\n const [requestedPath, setRequestedPath] = useState<string | null>(null);\n const [loadError, setLoadError] = useState(false);\n\n const loadDiff = async () => {\n if (!onLoadDiff || isLoadingDiff) return;\n\n setRequestedPath(filePath);\n setLoadError(false);\n setLoadingDiff(true);\n try {\n await onLoadDiff(filePath);\n } catch {\n setRequestedPath(null);\n setLoadError(true);\n } finally {\n setLoadingDiff(false);\n }\n };\n\n const shouldAutoLoadDiff = shouldAutoLoadDiffContent({\n isExpanded,\n isSelected,\n hasDiffContent,\n isLargeDiff,\n isGeneratedDiff,\n isBinaryDiff,\n requestedPath,\n filePath,\n });\n\n useEffect(() => {\n setRequestedPath((current) => resolveRequestedDiffPath({ requestedPath: current, filePath, hasDiffContent }));\n }, [filePath, hasDiffContent]);\n\n useEffect(() => {\n if (!onLoadDiff || !shouldAutoLoadDiff || loadError) {\n return;\n }\n\n void loadDiff();\n });\n\n return {\n isLoadingDiff,\n loadError,\n shouldAutoLoadDiff: Boolean(onLoadDiff) && shouldAutoLoadDiff && !loadError,\n loadDiff,\n };\n};\n\nexport const DiffCard = (props: DiffCardProps) => {\n const {\n diff,\n isSelected = false,\n isExpanded = true,\n onToggleExpanded,\n onSelect,\n onLoadDiff,\n hasOptedIntoLargeDiff = false,\n onShowFullDiff,\n diffViewMode = \"unified\",\n } = props;\n\n const filePath = resolveDiffFilePath(diff);\n const oldContent = diff.oldContent || \"\";\n const newContent = diff.newContent || \"\";\n const isLargeDiff = isLargeDiffContent(diff);\n const isGeneratedDiff = isGeneratedDiffPath(filePath);\n const isBinaryDiff = isBinaryDiffPath(filePath);\n const blocksDiffContentLoad = isBinaryDiff && !isImageDiffPath(filePath);\n const hasDiffContent = diff.oldContent !== undefined || diff.newContent !== undefined;\n const { isLoadingDiff, loadError, shouldAutoLoadDiff, loadDiff } = useDiffContentLoader({\n filePath,\n isExpanded,\n isSelected,\n hasDiffContent,\n isLargeDiff: isLargeDiff && !hasOptedIntoLargeDiff,\n isGeneratedDiff,\n isBinaryDiff: blocksDiffContentLoad,\n onLoadDiff,\n });\n\n return (\n <Box\n data-testid=\"diff-card\"\n border=\"1px solid\"\n borderColor={isSelected ? \"border.accent\" : \"border.subtle\"}\n borderRadius=\"xs\"\n overflow=\"visible\"\n bg=\"bg\"\n width=\"100%\"\n maxW=\"100%\"\n transition=\"border-color 0.14s ease\"\n _hover={{ borderColor: \"border.accent\" }}\n onClick={onSelect}\n >\n <DiffCardHeader diff={diff} isExpanded={isExpanded} onToggleExpanded={onToggleExpanded} />\n\n <DiffCardContent\n diff={diff}\n filePath={filePath}\n oldContent={oldContent}\n newContent={newContent}\n isExpanded={isExpanded}\n isLargeDiff={isLargeDiff}\n isGeneratedDiff={isGeneratedDiff}\n isBinaryDiff={blocksDiffContentLoad}\n hasDiffContent={hasDiffContent}\n canLoadDiff={Boolean(onLoadDiff)}\n shouldAutoLoadDiff={shouldAutoLoadDiff}\n loadError={loadError}\n isLoadingDiff={isLoadingDiff}\n onLoadDiff={loadDiff}\n hasOptedIntoLargeDiff={hasOptedIntoLargeDiff}\n onShowFullDiff={onShowFullDiff}\n diffViewMode={diffViewMode}\n />\n </Box>\n );\n};\n\nexport const DiffCardHeader = (props: DiffCardHeaderProps) => {\n const { diff, isExpanded = true, onToggleExpanded } = props;\n const filePath = resolveDiffFilePath(diff);\n const additions = diff.additions ?? 0;\n const deletions = diff.deletions ?? 0;\n const showStats = shouldShowDiffStats(filePath);\n const [isCopied, setIsCopied] = useState(false);\n const copyResetTimeoutRef = useRef<number | null>(null);\n\n useEffect(() => {\n return () => {\n if (copyResetTimeoutRef.current !== null) {\n window.clearTimeout(copyResetTimeoutRef.current);\n }\n };\n }, []);\n\n const copyFilePath = async () => {\n try {\n await navigator.clipboard.writeText(filePath);\n setIsCopied(true);\n if (copyResetTimeoutRef.current !== null) {\n window.clearTimeout(copyResetTimeoutRef.current);\n }\n copyResetTimeoutRef.current = window.setTimeout(() => setIsCopied(false), 1200);\n } catch {\n setIsCopied(false);\n }\n };\n\n return (\n <Grid\n data-testid=\"diff-card-header\"\n templateColumns=\"auto minmax(0, 1fr) auto\"\n px=\"xs\"\n py=\"2xs\"\n alignItems=\"center\"\n justifyContent=\"space-between\"\n borderBottom={isExpanded ? \"1px solid\" : \"none\"}\n borderColor=\"border.subtle\"\n borderTopRadius=\"xs\"\n borderBottomRadius={isExpanded ? \"0\" : \"xs\"}\n position=\"sticky\"\n top=\"0\"\n zIndex=\"1\"\n bg=\"bg\"\n cursor=\"pointer\"\n transition=\"background 0.14s ease\"\n _hover={{ bg: \"bg\" }}\n onClick={() => onToggleExpanded?.()}\n gap=\"sm\"\n >\n <IconButton\n aria-label={isExpanded ? \"Collapse\" : \"Expand\"}\n variant=\"ghost\"\n size=\"2xs\"\n onClick={(event) => {\n event.stopPropagation();\n onToggleExpanded?.();\n }}\n flexShrink={0}\n >\n {isExpanded ? <ChevronDown size={16} /> : <ChevronRight size={16} />}\n </IconButton>\n\n <Grid templateColumns=\"minmax(0, max-content) auto\" alignItems=\"center\" justifyContent=\"start\" gap=\"2xs\" minW={0}>\n <Box minW={0} overflow=\"hidden\" textOverflow=\"ellipsis\" whiteSpace=\"nowrap\" title={filePath}>\n {diff.change === \"renamed\" ? (\n <Text as=\"span\" textStyle=\"sm\">\n <Text as=\"span\" color=\"fg.muted\" textDecoration=\"line-through\" mr=\"xs\">\n {diff.oldPath}\n </Text>\n <Box as=\"span\" display=\"inline-flex\" alignItems=\"center\" verticalAlign=\"middle\" mr=\"xs\">\n <ChevronRight size={12} />\n </Box>\n {diff.newPath}\n </Text>\n ) : diff.change === \"deleted\" ? (\n <Text as=\"span\" color=\"fg.muted\" textDecoration=\"line-through\" textStyle=\"sm\">\n {filePath}\n </Text>\n ) : (\n <Text as=\"span\" textStyle=\"sm\">\n {filePath}\n </Text>\n )}\n </Box>\n\n <Box\n opacity={isCopied ? \"1\" : \"0\"}\n pointerEvents={isCopied ? \"auto\" : \"none\"}\n transition=\"opacity 120ms ease\"\n css={{\n \"[data-testid='diff-card-header']:hover &, [data-testid='diff-card-header']:focus-within &\": {\n opacity: 1,\n pointerEvents: \"auto\",\n },\n }}\n >\n <Tooltip content={isCopied ? \"Copied\" : \"Copy file path\"}>\n <IconButton\n aria-label={isCopied ? \"Copied\" : \"Copy file path\"}\n variant=\"ghost\"\n size=\"2xs\"\n onClick={(event) => {\n event.stopPropagation();\n void copyFilePath();\n }}\n flexShrink={0}\n >\n {isCopied ? <Check size={12} /> : <Copy size={12} />}\n </IconButton>\n </Tooltip>\n </Box>\n </Grid>\n\n {showStats ? (\n <Box flexShrink={0}>\n <DiffBubble variant=\"ghost\" additions={additions} deletions={deletions} />\n </Box>\n ) : null}\n </Grid>\n );\n};\n","import { Stack } from \"@chakra-ui/react\";\nimport { EmptyState } from \"@/components/primitives/empty-state\";\nimport { ScrollArea } from \"@/components/primitives/scroll-area\";\n\nexport const DiffDrawerEmptyState = () => (\n <Stack h=\"full\" minH=\"0\" gap=\"0\" bg=\"bg\">\n <ScrollArea flex=\"1\" minH=\"0\" contentProps={{ p: \"xs\", spaceY: \"xs\" }}>\n <EmptyState title=\"No changes detected\" description=\"Make some changes to see the diff here.\" paddingY=\"sm\" />\n </ScrollArea>\n </Stack>\n);\n","import type { Diff } from \"./diff-card\";\nimport { isBinaryDiffPath, isImageDiffPath, isLargeDiffContent } from \"./diff-size\";\nimport { buildDiffViewData } from \"./diff-view-adapter\";\nimport type { DiffViewMode } from \"./types\";\n\nconst CARD_HEADER_HEIGHT = 34;\nconst CARD_BODY_LINE_HEIGHT = 18;\nconst HUNK_ROW_HEIGHT = 28;\nconst COLLAPSED_CARD_HEIGHT = 34;\nconst DEFERRED_BODY_HEIGHT = 88;\nconst IMAGE_BODY_HEIGHT = 338;\nconst ITEM_GAP_HEIGHT = 8;\n\ninterface EstimateDiffCardHeightInput {\n diff: Diff;\n isCollapsed: boolean;\n hasOptedIntoLargeDiff?: boolean;\n diffViewMode?: DiffViewMode;\n}\n\nconst deferredCardHeight = () => CARD_HEADER_HEIGHT + DEFERRED_BODY_HEIGHT + ITEM_GAP_HEIGHT;\n\n// Mirrors the branches DiffCardContent renders, so the virtualizer's estimate matches the DOM\n// before measureElement gets a chance to refine it.\nexport const estimateDiffCardHeight = (input: EstimateDiffCardHeightInput) => {\n const { diff, isCollapsed, hasOptedIntoLargeDiff = false, diffViewMode = \"unified\" } = input;\n\n if (isCollapsed) return COLLAPSED_CARD_HEIGHT + ITEM_GAP_HEIGHT;\n\n const hasDiffContent = diff.oldContent !== undefined || diff.newContent !== undefined;\n const filePath = diff.newPath ?? diff.oldPath ?? \"\";\n if (isImageDiffPath(filePath) && (diff.oldContent || diff.newContent)) {\n return CARD_HEADER_HEIGHT + IMAGE_BODY_HEIGHT + ITEM_GAP_HEIGHT;\n }\n if (isBinaryDiffPath(filePath)) return deferredCardHeight();\n if (!hasDiffContent) return deferredCardHeight();\n if (isLargeDiffContent(diff) && !hasOptedIntoLargeDiff) return deferredCardHeight();\n\n const { unifiedContentRows, splitContentRows, hunkRows } = buildDiffViewData({\n original: diff.oldContent ?? \"\",\n modified: diff.newContent ?? \"\",\n oldPath: diff.oldPath,\n newPath: diff.newPath,\n });\n const contentRows = diffViewMode === \"split\" ? splitContentRows : unifiedContentRows;\n if (contentRows === 0 && hunkRows === 0) return deferredCardHeight();\n\n const bodyHeight = contentRows * CARD_BODY_LINE_HEIGHT + hunkRows * HUNK_ROW_HEIGHT;\n return CARD_HEADER_HEIGHT + bodyHeight + ITEM_GAP_HEIGHT;\n};\n","import type { Diff } from \"./diff-card\";\n\ninterface SelectedExpansionCommand {\n action: string;\n id: number;\n path?: string;\n direction?: \"up\" | \"down\";\n}\n\ninterface ResolveSelectedScrollStateInput {\n diffs: Diff[];\n selectedDiffPath: string | null;\n collapsedPaths: Set<string>;\n expansionCommand: SelectedExpansionCommand | null;\n completedScrollCommandId: number | null;\n}\n\nconst getDiffPath = (diff: Diff) => diff.newPath ?? diff.oldPath ?? \"unknown\";\nconst PINNED_DIFF_LOOKBEHIND_COUNT = 24;\n\nexport const resolveSelectedScrollState = (input: ResolveSelectedScrollStateInput) => {\n const { diffs, selectedDiffPath, collapsedPaths, expansionCommand, completedScrollCommandId } = input;\n let selectedScrollPath = selectedDiffPath;\n let selectedScrollSourceKey = selectedDiffPath ? `selected:${selectedDiffPath}` : null;\n const selectedScrollCommandId = expansionCommand?.action === \"expand-selected\" ? expansionCommand.id : null;\n const hasCompletedSelectedScroll =\n selectedScrollCommandId !== null && completedScrollCommandId === selectedScrollCommandId;\n\n if (expansionCommand?.action === \"expand-selected\" && expansionCommand.path) {\n selectedScrollPath = expansionCommand.path;\n selectedScrollSourceKey = `command:${expansionCommand.id}:${expansionCommand.path}`;\n }\n\n let selectedScrollKey = selectedScrollSourceKey;\n if (selectedScrollPath && selectedScrollSourceKey) {\n const selectedScrollExpansionState = collapsedPaths.has(selectedScrollPath) ? \"collapsed\" : \"expanded\";\n selectedScrollKey = `${selectedScrollSourceKey}:${selectedScrollExpansionState}`;\n }\n\n const selectedScrollIndex = selectedScrollPath\n ? diffs.findIndex((diff) => getDiffPath(diff) === selectedScrollPath)\n : -1;\n const shouldPinSelectedScrollIndex =\n selectedScrollIndex >= 0 &&\n expansionCommand?.action === \"expand-selected\" &&\n expansionCommand.direction === \"up\" &&\n !hasCompletedSelectedScroll;\n\n return {\n selectedScrollPath,\n selectedScrollKey,\n selectedScrollCommandId,\n selectedScrollIndex,\n shouldPinSelectedScrollIndex,\n hasCompletedSelectedScroll,\n };\n};\n\nexport const includePinnedDiffIndexes = (input: {\n indexes: number[];\n selectedScrollIndex: number;\n shouldPinSelectedScrollIndex: boolean;\n}) => {\n const { indexes, selectedScrollIndex, shouldPinSelectedScrollIndex } = input;\n if (!shouldPinSelectedScrollIndex || indexes.includes(selectedScrollIndex)) return indexes;\n\n const pinnedStartIndex = Math.max(0, selectedScrollIndex - PINNED_DIFF_LOOKBEHIND_COUNT);\n const pinnedIndexes = Array.from(\n { length: selectedScrollIndex - pinnedStartIndex + 1 },\n (_, index) => pinnedStartIndex + index,\n );\n\n return Array.from(new Set([...indexes, ...pinnedIndexes])).sort((a, b) => a - b);\n};\n","import type { Virtualizer } from \"@tanstack/react-virtual\";\nimport { useLayoutEffect, useState } from \"react\";\nimport type { Diff } from \"./diff-card\";\nimport type { DiffExpansionCommand } from \"./diff-drawer\";\nimport { resolveSelectedScrollState } from \"./diff-drawer-scroll\";\n\ninterface UseSelectedDiffScrollInput {\n diffs: Diff[];\n selectedDiffPath: string | null;\n collapsedPaths: Set<string>;\n expansionCommand: DiffExpansionCommand | null;\n scrollRef: { current: HTMLDivElement | null };\n virtualizerRef: { current: Virtualizer<HTMLDivElement, Element> | null };\n suppressScrollAdjustRef: { current: boolean };\n}\n\n// Re-align for a few frames so the target settles as it and its neighbours measure, then latch the\n// command as done. Capped so a diff that never settles can't spin the animation loop.\nconst SETTLE_FRAME_COUNT = 3;\nconst MAX_ALIGNMENT_FRAMES = 12;\n\nconst getDiffPath = (diff: Diff) => diff.newPath ?? diff.oldPath ?? \"unknown\";\n\nexport const useSelectedDiffScroll = (input: UseSelectedDiffScrollInput) => {\n const {\n diffs,\n selectedDiffPath,\n collapsedPaths,\n expansionCommand,\n scrollRef,\n virtualizerRef,\n suppressScrollAdjustRef,\n } = input;\n const [completedScrollCommandId, setCompletedScrollCommandId] = useState<number | null>(null);\n const {\n selectedScrollPath,\n selectedScrollKey,\n selectedScrollCommandId,\n selectedScrollIndex,\n shouldPinSelectedScrollIndex,\n hasCompletedSelectedScroll,\n } = resolveSelectedScrollState({\n diffs,\n selectedDiffPath,\n collapsedPaths,\n expansionCommand,\n completedScrollCommandId,\n });\n\n useLayoutEffect(() => {\n if (!selectedScrollPath || !selectedScrollKey) return;\n if (hasCompletedSelectedScroll) return;\n // Selecting a collapsed diff expands it first (a sibling layout effect updates collapsedPaths and\n // re-runs this one). Wait for that: scrolling to a card that is about to grow lands on a stale\n // offset and snaps once it expands. Once expanded, its measured offset is stable.\n if (collapsedPaths.has(selectedScrollPath)) return;\n\n const index = diffs.findIndex((diff) => getDiffPath(diff) === selectedScrollPath);\n if (index < 0) return;\n\n const virtualizer = virtualizerRef.current;\n const scrollElement = scrollRef.current;\n if (!virtualizer || !scrollElement) return;\n\n const frameIds: number[] = [];\n let cancelledByUserScroll = false;\n // Drive the scroll from the virtualizer's measured card heights (not per-diff estimates) and hold\n // its keep-in-place adjustments off while we do, so a mid-list target lands where it actually is\n // instead of overshooting and snapping back — the \"wild jump\" when opening files further down.\n suppressScrollAdjustRef.current = true;\n const stopAligning = () => {\n suppressScrollAdjustRef.current = false;\n };\n const cancelSelectedScroll = () => {\n cancelledByUserScroll = true;\n stopAligning();\n if (selectedScrollCommandId !== null) {\n setCompletedScrollCommandId(selectedScrollCommandId);\n }\n };\n\n let alignmentFrames = 0;\n const alignSelectedDiff = () => {\n if (cancelledByUserScroll) return;\n virtualizer.scrollToIndex(index, { align: \"start\" });\n alignmentFrames += 1;\n if (alignmentFrames >= SETTLE_FRAME_COUNT && selectedScrollCommandId !== null) {\n stopAligning();\n setCompletedScrollCommandId(selectedScrollCommandId);\n return;\n }\n if (alignmentFrames < MAX_ALIGNMENT_FRAMES) {\n frameIds.push(requestAnimationFrame(alignSelectedDiff));\n return;\n }\n stopAligning();\n };\n\n scrollElement.addEventListener(\"wheel\", cancelSelectedScroll, { passive: true });\n scrollElement.addEventListener(\"touchmove\", cancelSelectedScroll, { passive: true });\n alignSelectedDiff();\n\n return () => {\n stopAligning();\n scrollElement.removeEventListener(\"wheel\", cancelSelectedScroll);\n scrollElement.removeEventListener(\"touchmove\", cancelSelectedScroll);\n for (const frameId of frameIds) {\n cancelAnimationFrame(frameId);\n }\n };\n }, [\n selectedScrollKey,\n selectedScrollPath,\n selectedScrollCommandId,\n hasCompletedSelectedScroll,\n diffs,\n collapsedPaths,\n scrollRef,\n virtualizerRef,\n suppressScrollAdjustRef,\n ]);\n\n return { selectedScrollIndex, shouldPinSelectedScrollIndex };\n};\n","import { Box, Stack } from \"@chakra-ui/react\";\nimport { defaultRangeExtractor, useVirtualizer, type Virtualizer } from \"@tanstack/react-virtual\";\nimport { useEffect, useLayoutEffect, useRef, useState } from \"react\";\nimport { ScrollArea } from \"@/components/primitives/scroll-area\";\nimport { type Diff, DiffCard } from \"./diff-card\";\nimport { DiffDrawerEmptyState } from \"./diff-drawer-empty-state\";\nimport { estimateDiffCardHeight } from \"./diff-drawer-height\";\nimport { includePinnedDiffIndexes } from \"./diff-drawer-scroll\";\nimport type { DiffViewMode } from \"./types\";\nimport { useSelectedDiffScroll } from \"./use-selected-diff-scroll\";\n\ninterface DiffDrawerProps {\n diffs: Diff[];\n selectedDiffPath?: string | null;\n onLoadDiff?: (path: string) => Promise<void>;\n onSelectDiffPath?: (path: string) => void;\n onExpansionStateChange?: (state: DiffDrawerExpansionState) => void;\n expansionCommand?: DiffExpansionCommand | null;\n diffViewMode?: DiffViewMode;\n}\n\nexport interface DiffExpansionCommand {\n action: \"expand\" | \"collapse\" | \"expand-selected\";\n id: number;\n path?: string;\n direction?: \"up\" | \"down\";\n}\n\nexport interface DiffDrawerExpansionState {\n allExpanded: boolean;\n allCollapsed: boolean;\n}\n\nexport { estimateDiffCardHeight } from \"./diff-drawer-height\";\nexport type { Diff };\n\nconst getDiffPath = (diff: Diff) => diff.newPath ?? diff.oldPath ?? \"unknown\";\n\nconst INITIAL_EXPANDED_DIFF_COUNT = 10;\nconst INITIAL_COLLAPSED_LINE_THRESHOLD = 100;\n\nexport const buildInitialCollapsedPaths = (diffs: Diff[]) => {\n if (diffs.length <= INITIAL_EXPANDED_DIFF_COUNT) return new Set<string>();\n\n return new Set(\n diffs\n .filter((diff, index) => {\n const lineCount = (diff.additions ?? 0) + (diff.deletions ?? 0);\n return index >= INITIAL_EXPANDED_DIFF_COUNT || lineCount > INITIAL_COLLAPSED_LINE_THRESHOLD;\n })\n .map((diff) => getDiffPath(diff)),\n );\n};\n\nexport const buildAllCollapsedPaths = (diffs: Diff[]) => new Set(diffs.map((diff) => getDiffPath(diff)));\n\nexport const toggleCollapsedPath = (collapsedPaths: Set<string>, path: string) => {\n const next = new Set(collapsedPaths);\n if (next.has(path)) {\n next.delete(path);\n } else {\n next.add(path);\n }\n return next;\n};\n\nexport const resolveCollapsedPathsForSelectedDiff = (\n diffs: Diff[],\n collapsedPaths: Set<string>,\n selectedDiffPath: string | null,\n) => {\n if (!selectedDiffPath) return collapsedPaths;\n if (!collapsedPaths.has(selectedDiffPath)) return collapsedPaths;\n if (!diffs.some((diff) => getDiffPath(diff) === selectedDiffPath)) return collapsedPaths;\n\n const next = new Set(collapsedPaths);\n next.delete(selectedDiffPath);\n return next;\n};\n\n// Expand the newly navigated-to diff and re-collapse the one the previous tree navigation expanded.\n// Clicking through the tree otherwise leaves a growing wall of expanded diffs; their measured heights\n// drift ever further from the scroll estimates, which is what makes the panel overshoot and jump.\n// Manual chevron toggles don't flow through here, so diffs the user opens by hand stay open.\nexport const resolveCollapsedPathsForNavigation = (\n diffs: Diff[],\n collapsedPaths: Set<string>,\n selectedDiffPath: string,\n previousNavigatedPath: string | null,\n) => {\n const expanded = resolveCollapsedPathsForSelectedDiff(diffs, collapsedPaths, selectedDiffPath);\n if (\n !previousNavigatedPath ||\n previousNavigatedPath === selectedDiffPath ||\n expanded.has(previousNavigatedPath) ||\n !diffs.some((diff) => getDiffPath(diff) === previousNavigatedPath)\n ) {\n return expanded;\n }\n\n const next = expanded === collapsedPaths ? new Set(collapsedPaths) : expanded;\n next.add(previousNavigatedPath);\n return next;\n};\n\nexport function DiffDrawer(props: DiffDrawerProps) {\n const {\n diffs,\n selectedDiffPath = null,\n onLoadDiff,\n onSelectDiffPath,\n onExpansionStateChange,\n expansionCommand = null,\n diffViewMode = \"unified\",\n } = props;\n const scrollRef = useRef<HTMLDivElement>(null);\n const reportedExpansionStateRef = useRef<DiffDrawerExpansionState | null>(null);\n // Populated after the virtualizer is created below so the scroll hook (which runs first) can drive\n // it from a layout effect. `suppressScrollAdjustRef` lets the hook freeze the virtualizer's\n // keep-in-place adjustments while it aligns the selected diff, so re-measuring off-screen cards\n // can't shove the scroll around mid-align.\n const virtualizerRef = useRef<Virtualizer<HTMLDivElement, Element> | null>(null);\n const suppressScrollAdjustRef = useRef(false);\n const lastNavigatedPathRef = useRef<string | null>(null);\n const [collapsedPaths, setCollapsedPaths] = useState<Set<string>>(() => buildInitialCollapsedPaths(diffs));\n const [largeDiffOptInPaths, setLargeDiffOptInPaths] = useState<Set<string>>(() => new Set());\n const { selectedScrollIndex, shouldPinSelectedScrollIndex } = useSelectedDiffScroll({\n diffs,\n selectedDiffPath,\n collapsedPaths,\n expansionCommand,\n scrollRef,\n virtualizerRef,\n suppressScrollAdjustRef,\n });\n\n const virtualizer = useVirtualizer({\n count: diffs.length,\n getScrollElement: () => scrollRef.current,\n estimateSize: (index) => {\n const diff = diffs[index];\n const path = getDiffPath(diff);\n return estimateDiffCardHeight({\n diff,\n isCollapsed: collapsedPaths.has(path),\n hasOptedIntoLargeDiff: largeDiffOptInPaths.has(path),\n diffViewMode,\n });\n },\n getItemKey: (index) => getDiffPath(diffs[index]),\n overscan: 3,\n rangeExtractor: (range) => {\n const indexes = defaultRangeExtractor(range);\n return includePinnedDiffIndexes({ indexes, selectedScrollIndex, shouldPinSelectedScrollIndex });\n },\n });\n virtualizer.shouldAdjustScrollPositionOnItemSizeChange = (_item, _delta, instance) =>\n !instance.isScrolling && !suppressScrollAdjustRef.current;\n virtualizerRef.current = virtualizer;\n\n useLayoutEffect(() => {\n if (!selectedDiffPath) return;\n\n setCollapsedPaths((prev) => resolveCollapsedPathsForSelectedDiff(diffs, prev, selectedDiffPath));\n }, [diffs, selectedDiffPath]);\n\n useLayoutEffect(() => {\n if (!expansionCommand) return;\n\n if (expansionCommand.action === \"expand-selected\") {\n const navigatedPath = expansionCommand.path;\n if (navigatedPath) {\n const previousNavigatedPath = lastNavigatedPathRef.current;\n lastNavigatedPathRef.current = navigatedPath;\n setCollapsedPaths((prev) =>\n resolveCollapsedPathsForNavigation(diffs, prev, navigatedPath, previousNavigatedPath),\n );\n }\n return;\n }\n\n // Expand/collapse all is an explicit user choice; don't let it re-collapse on the next navigation.\n lastNavigatedPathRef.current = null;\n setCollapsedPaths(expansionCommand.action === \"collapse\" ? buildAllCollapsedPaths(diffs) : new Set());\n }, [diffs, expansionCommand]);\n\n useEffect(() => {\n const expansionState = {\n allExpanded: collapsedPaths.size === 0,\n allCollapsed: diffs.length > 0 && diffs.every((diff) => collapsedPaths.has(getDiffPath(diff))),\n };\n const reportedExpansionState = reportedExpansionStateRef.current;\n if (\n reportedExpansionState?.allExpanded === expansionState.allExpanded &&\n reportedExpansionState.allCollapsed === expansionState.allCollapsed\n ) {\n return;\n }\n\n reportedExpansionStateRef.current = expansionState;\n onExpansionStateChange?.(expansionState);\n }, [collapsedPaths, diffs, onExpansionStateChange]);\n\n if (diffs.length === 0) return <DiffDrawerEmptyState />;\n\n const toggleExpanded = (path: string) => {\n setCollapsedPaths((prev) => toggleCollapsedPath(prev, path));\n };\n\n const showFullDiff = (path: string) => {\n setLargeDiffOptInPaths((prev) => {\n const next = new Set(prev);\n next.add(path);\n return next;\n });\n };\n\n const virtualItems = virtualizer.getVirtualItems();\n\n return (\n <Stack h=\"full\" minH=\"0\" gap=\"0\" bg=\"bg\">\n <Box position=\"relative\" flex=\"1\" minH=\"0\" bg=\"bg\">\n <ScrollArea\n position=\"absolute\"\n inset=\"0\"\n viewportRef={scrollRef}\n viewportProps={{ style: { overflowAnchor: \"none\" } }}\n contentProps={{ p: \"xs\" }}\n >\n <Box position=\"relative\" width=\"100%\" style={{ height: virtualizer.getTotalSize() }}>\n {virtualItems.map((virtualItem) => {\n const diff = diffs[virtualItem.index];\n const path = getDiffPath(diff);\n\n return (\n <Box\n key={virtualItem.key}\n data-index={virtualItem.index}\n ref={virtualizer.measureElement}\n position=\"absolute\"\n left=\"0\"\n width=\"100%\"\n pb=\"xs\"\n style={{ top: `${virtualItem.start}px` }}\n >\n <DiffCard\n key={path}\n diff={diff}\n isSelected={selectedDiffPath === path}\n isExpanded={!collapsedPaths.has(path)}\n onToggleExpanded={() => toggleExpanded(path)}\n onSelect={() => onSelectDiffPath?.(path)}\n onLoadDiff={onLoadDiff}\n hasOptedIntoLargeDiff={largeDiffOptInPaths.has(path)}\n onShowFullDiff={() => showFullDiff(path)}\n diffViewMode={diffViewMode}\n />\n </Box>\n );\n })}\n </Box>\n </ScrollArea>\n </Box>\n </Stack>\n );\n}\n","import type { ChangedFilesViewMode, ChangedFileTreeNode } from \"./types\";\n\nconst normalizeChangedFilePath = (path: string) =>\n path\n .split(\"/\")\n .map((segment) => segment.trim())\n .filter(Boolean)\n .join(\"/\");\n\nconst sortNodes = (nodes: ChangedFileTreeNode[]) => {\n nodes.sort((left, right) => {\n if (left.type !== right.type) return left.type === \"folder\" ? -1 : 1;\n return left.name.localeCompare(right.name);\n });\n\n nodes.forEach((node) => {\n if (node.children) sortNodes(node.children);\n });\n\n return nodes;\n};\n\nconst dedupePaths = (paths: string[]) => Array.from(new Set(paths.map(normalizeChangedFilePath).filter(Boolean)));\n\nconst buildFlatTree = (paths: string[]) =>\n dedupePaths(paths)\n .map((path) => ({ id: `file:${path}`, name: path, type: \"file\" }) satisfies ChangedFileTreeNode)\n .sort((left, right) => left.name.localeCompare(right.name));\n\nexport const buildChangedFilesTree = (paths: string[], mode: ChangedFilesViewMode): ChangedFileTreeNode[] => {\n if (mode === \"flat\") return buildFlatTree(paths);\n\n const treeById = new Map<string, ChangedFileTreeNode>();\n const rootNodes: ChangedFileTreeNode[] = [];\n\n dedupePaths(paths).forEach((path) => {\n const segments = path.split(\"/\");\n let parentPath = \"\";\n let parentNode: ChangedFileTreeNode | null = null;\n\n segments.forEach((segment, index) => {\n const currentPath = parentPath ? `${parentPath}/${segment}` : segment;\n const isFile = index === segments.length - 1;\n const nodeId = `${isFile ? \"file\" : \"folder\"}:${currentPath}`;\n const existingNode = treeById.get(nodeId);\n\n if (existingNode) {\n parentNode = existingNode;\n parentPath = currentPath;\n return;\n }\n\n const nextNode: ChangedFileTreeNode = {\n id: nodeId,\n name: segment,\n type: isFile ? \"file\" : \"folder\",\n ...(isFile ? {} : { children: [] }),\n };\n\n treeById.set(nodeId, nextNode);\n\n if (!parentNode) rootNodes.push(nextNode);\n else parentNode.children?.push(nextNode);\n\n parentNode = nextNode;\n parentPath = currentPath;\n });\n });\n\n return sortNodes(rootNodes);\n};\n\nexport const collectExpandedFolderIds = (nodes: ChangedFileTreeNode[]) => {\n const folderIds: string[] = [];\n\n const visit = (items: ChangedFileTreeNode[]) => {\n items.forEach((item) => {\n if (item.type !== \"folder\") return;\n folderIds.push(item.id);\n visit(item.children ?? []);\n });\n };\n\n visit(nodes);\n return folderIds;\n};\n\nconst collectNestedFileOrder = (nodes: ChangedFileTreeNode[]) => {\n const orderedPaths: string[] = [];\n\n const visit = (treeNodes: ChangedFileTreeNode[]) => {\n treeNodes.forEach((node) => {\n if (node.type === \"file\") {\n orderedPaths.push(node.id.replace(/^file:/, \"\"));\n return;\n }\n\n visit(node.children ?? []);\n });\n };\n\n visit(nodes);\n return orderedPaths;\n};\n\nexport const sortPathsByViewMode = (paths: string[], mode: ChangedFilesViewMode) => {\n if (mode === \"flat\") return [...paths].sort((left, right) => left.localeCompare(right));\n return collectNestedFileOrder(buildChangedFilesTree(paths, \"nested\"));\n};\n","import { create } from \"zustand\";\nimport type { ChangedFilesViewMode, DiffViewMode } from \"./types\";\n\ninterface DiffViewerState {\n isTreePanelOpen: boolean;\n viewMode: ChangedFilesViewMode;\n diffViewMode: DiffViewMode;\n searchQuery: string;\n selectedPath: string | null;\n expandedFolderIds: Set<string>;\n setTreePanelOpen: (open: boolean) => void;\n toggleTreePanel: () => void;\n setViewMode: (viewMode: ChangedFilesViewMode) => void;\n setDiffViewMode: (diffViewMode: DiffViewMode) => void;\n setSearchQuery: (searchQuery: string) => void;\n setSelectedPath: (selectedPath: string | null) => void;\n setExpandedFolderIds: (folderIds: string[]) => void;\n toggleFolder: (folderId: string) => void;\n expandAll: (folderIds: string[]) => void;\n collapseAll: () => void;\n}\n\nexport const useDiffViewerStore = create<DiffViewerState>((set) => ({\n isTreePanelOpen: true,\n viewMode: \"nested\",\n diffViewMode: \"unified\",\n searchQuery: \"\",\n selectedPath: null,\n expandedFolderIds: new Set(),\n setTreePanelOpen: (isTreePanelOpen) => set({ isTreePanelOpen }),\n toggleTreePanel: () => set((state) => ({ isTreePanelOpen: !state.isTreePanelOpen })),\n setViewMode: (viewMode) => set({ viewMode }),\n setDiffViewMode: (diffViewMode) => set({ diffViewMode }),\n setSearchQuery: (searchQuery) => set({ searchQuery }),\n setSelectedPath: (selectedPath) => set({ selectedPath }),\n setExpandedFolderIds: (folderIds) => set({ expandedFolderIds: new Set(folderIds) }),\n toggleFolder: (folderId) =>\n set((state) => {\n const expandedFolderIds = new Set(state.expandedFolderIds);\n if (expandedFolderIds.has(folderId)) expandedFolderIds.delete(folderId);\n else expandedFolderIds.add(folderId);\n return { expandedFolderIds };\n }),\n expandAll: (folderIds) => set({ expandedFolderIds: new Set(folderIds) }),\n collapseAll: () => set({ expandedFolderIds: new Set() }),\n}));\n","import { Box, IconButton, Menu } from \"@chakra-ui/react\";\nimport {\n Check,\n ChevronsDownUp,\n ChevronsUpDown,\n List,\n ListTree,\n PanelLeftClose,\n PanelLeftOpen,\n Rows2,\n Settings2,\n SquareSplitHorizontal,\n} from \"lucide-react\";\nimport type { ReactNode } from \"react\";\nimport { ListRow } from \"../list-row/list-row\";\nimport type { ChangedFilesViewMode, DiffViewMode } from \"./types\";\n\ninterface DiffViewerOptionsMenuProps {\n isTreePanelOpen: boolean;\n hasFilePaths: boolean;\n viewMode: ChangedFilesViewMode;\n diffViewMode: DiffViewMode;\n isExpandAllDisabled: boolean;\n isCollapseAllDisabled: boolean;\n onToggleTreePanel: () => void;\n onViewModeChange: (viewMode: ChangedFilesViewMode) => void;\n onDiffViewModeChange: (diffViewMode: DiffViewMode) => void;\n onExpandAll: () => void;\n onCollapseAll: () => void;\n}\n\ninterface DiffViewerMenuItemProps {\n id: string;\n label: string;\n icon: ReactNode;\n selected?: boolean;\n disabled?: boolean;\n onActivate: () => void;\n}\n\nconst SelectionIndicator = (props: { selected: boolean }) => (\n <Box w=\"14px\" flexShrink={0} display=\"flex\" justifyContent=\"center\">\n {props.selected ? <Check size={14} /> : null}\n </Box>\n);\n\nconst DiffViewerMenuItem = (props: DiffViewerMenuItemProps) => {\n const { id, label, icon, selected, disabled, onActivate } = props;\n\n return (\n <Menu.Item value={id} disabled={disabled} asChild>\n <ListRow\n asChild\n role={selected === undefined ? undefined : \"menuitemradio\"}\n aria-checked={selected}\n variant=\"full-width\"\n id={id}\n icon={icon}\n label={label}\n disabled={disabled}\n isSelected={selected}\n endContent={selected === undefined ? undefined : <SelectionIndicator selected={selected} />}\n onActivate={onActivate}\n />\n </Menu.Item>\n );\n};\n\nexport const DiffViewerOptionsMenu = (props: DiffViewerOptionsMenuProps) => {\n const {\n isTreePanelOpen,\n hasFilePaths,\n viewMode,\n diffViewMode,\n isExpandAllDisabled,\n isCollapseAllDisabled,\n onToggleTreePanel,\n onViewModeChange,\n onDiffViewModeChange,\n onExpandAll,\n onCollapseAll,\n } = props;\n\n return (\n <Menu.Root>\n <Menu.Trigger asChild>\n <IconButton aria-label=\"Diff view options\" variant=\"ghost\" size=\"sm\">\n <Settings2 size={14} />\n </IconButton>\n </Menu.Trigger>\n <Menu.Positioner>\n <Menu.Content minW=\"190px\" bg=\"bg\" p=\"0\" gap=\"0\">\n <DiffViewerMenuItem\n id=\"toggle-file-tree\"\n icon={isTreePanelOpen ? <PanelLeftClose size={14} /> : <PanelLeftOpen size={14} />}\n label={isTreePanelOpen ? \"Hide file tree\" : \"Show file tree\"}\n onActivate={onToggleTreePanel}\n />\n <Menu.Separator />\n {hasFilePaths ? (\n <>\n <DiffViewerMenuItem\n id=\"nested\"\n icon={<ListTree size={14} />}\n label=\"Nested\"\n selected={viewMode === \"nested\"}\n onActivate={() => onViewModeChange(\"nested\")}\n />\n <DiffViewerMenuItem\n id=\"flat\"\n icon={<List size={14} />}\n label=\"Flat\"\n selected={viewMode === \"flat\"}\n onActivate={() => onViewModeChange(\"flat\")}\n />\n <Menu.Separator />\n </>\n ) : null}\n <DiffViewerMenuItem\n id=\"unified\"\n icon={<Rows2 size={14} />}\n label=\"Unified\"\n selected={diffViewMode === \"unified\"}\n onActivate={() => onDiffViewModeChange(\"unified\")}\n />\n <DiffViewerMenuItem\n id=\"split\"\n icon={<SquareSplitHorizontal size={14} />}\n label=\"Split\"\n selected={diffViewMode === \"split\"}\n onActivate={() => onDiffViewModeChange(\"split\")}\n />\n <Menu.Separator />\n <DiffViewerMenuItem\n id=\"expand-all\"\n icon={<ChevronsUpDown size={14} />}\n label=\"Expand all\"\n disabled={isExpandAllDisabled}\n onActivate={onExpandAll}\n />\n <DiffViewerMenuItem\n id=\"collapse-all\"\n icon={<ChevronsDownUp size={14} />}\n label=\"Collapse all\"\n disabled={isCollapseAllDisabled}\n onActivate={onCollapseAll}\n />\n </Menu.Content>\n </Menu.Positioner>\n </Menu.Root>\n );\n};\n","import { Badge } from \"@chakra-ui/react\";\n\nconst changeLabels: Record<string, string> = {\n added: \"A\",\n copied: \"C\",\n deleted: \"D\",\n modified: \"M\",\n permissionChange: \"M\",\n renamed: \"R\",\n};\n\nconst changeColors: Record<string, string> = {\n added: \"green\",\n copied: \"purple\",\n deleted: \"red\",\n modified: \"blue\",\n permissionChange: \"yellow\",\n renamed: \"orange\",\n};\n\nconst changeSemanticStyles: Record<string, { color: string; backgroundColor: string }> = {\n added: { color: \"fg.success\", backgroundColor: \"bg.success\" },\n deleted: { color: \"fg.error\", backgroundColor: \"bg.error\" },\n};\n\nexport const FileChangeBadge = (props: { change: string }) => {\n const { change } = props;\n const colorProps = changeSemanticStyles[change] ?? { colorPalette: changeColors[change] ?? \"gray\" };\n\n return (\n <Badge size=\"xs\" variant=\"subtle\" flexShrink={0} {...colorProps}>\n {changeLabels[change] ?? change}\n </Badge>\n );\n};\n","import { Box, Icon, Input, InputGroup, Stack, Text } from \"@chakra-ui/react\";\nimport { FileText, Search } from \"lucide-react\";\nimport { useRef } from \"react\";\nimport { Header } from \"@/components/layout/header\";\nimport { EmptyState } from \"@/components/primitives/empty-state\";\nimport { ScrollArea } from \"@/components/primitives/scroll-area\";\nimport { TreeList } from \"../tree-list/tree-list\";\nimport type { TreeListNode } from \"../tree-list/tree-list.types\";\nimport { buildChangedFilesTree } from \"./build-changed-files-tree\";\nimport { FileChangeBadge } from \"./file-change-badge\";\nimport type { ChangedFilesViewMode, ChangedFileTreeNode, FileIconInfo } from \"./types\";\n\ninterface FileListPanelProps {\n paths: string[];\n selectedPath: string | null;\n viewMode: ChangedFilesViewMode;\n searchQuery: string;\n expandedFolderIds: Set<string>;\n onSelectPath: (path: string) => void;\n onSearchQueryChange: (value: string) => void;\n onToggleFolder: (id: string) => void;\n resolveFileIcon?: (path: string, options?: { isFolder?: boolean; isExpanded?: boolean }) => FileIconInfo | undefined;\n changeByPath?: Map<string, string>;\n}\n\nconst getFilePathParts = (filePath: string) => {\n const lastSlashIndex = filePath.lastIndexOf(\"/\");\n if (lastSlashIndex < 0) return { fileName: filePath, dirPath: \"\" };\n return { fileName: filePath.slice(lastSlashIndex + 1), dirPath: filePath.slice(0, lastSlashIndex) };\n};\n\nconst renderFileLabel = (node: ChangedFileTreeNode, viewMode: ChangedFilesViewMode, filePath: string) => {\n const { fileName, dirPath } = getFilePathParts(filePath);\n if (viewMode !== \"flat\" || !dirPath) return node.name;\n\n return (\n <Text textStyle=\"label/S/regular\" truncate>\n <Text as=\"span\" color=\"fg.default\">\n {fileName}\n </Text>{\" \"}\n <Text as=\"span\" color=\"fg.muted\">\n {dirPath}\n </Text>\n </Text>\n );\n};\n\nconst toTreeListNodes = (input: {\n nodes: ChangedFileTreeNode[];\n viewMode: ChangedFilesViewMode;\n onSelectPath: (path: string) => void;\n resolveFileIcon?: (path: string, options?: { isFolder?: boolean; isExpanded?: boolean }) => FileIconInfo | undefined;\n changeByPath?: Map<string, string>;\n}): TreeListNode[] => {\n const { nodes, viewMode, onSelectPath, resolveFileIcon, changeByPath } = input;\n\n return nodes.map((node) => {\n if (node.type === \"folder\") {\n return {\n id: node.id,\n label: node.name,\n isContainer: true,\n children: toTreeListNodes({\n nodes: node.children ?? [],\n viewMode,\n onSelectPath,\n resolveFileIcon,\n changeByPath,\n }),\n };\n }\n\n const filePath = node.id.replace(/^file:/, \"\");\n const fileIcon = resolveFileIcon?.(filePath) ?? { icon: <Icon as={FileText} boxSize=\"16px\" />, color: \"fg.subtle\" };\n const change = changeByPath?.get(filePath);\n return {\n id: node.id,\n label: renderFileLabel(node, viewMode, filePath),\n icon: fileIcon.icon,\n iconColor: fileIcon.color,\n endContent: change ? <FileChangeBadge change={change} /> : undefined,\n onActivate: () => onSelectPath(filePath),\n };\n });\n};\n\nexport const FileListPanel = (props: FileListPanelProps) => {\n const {\n paths,\n selectedPath,\n viewMode,\n searchQuery,\n expandedFolderIds,\n onSelectPath,\n onSearchQueryChange,\n onToggleFolder,\n resolveFileIcon,\n changeByPath,\n } = props;\n const scrollRef = useRef<HTMLDivElement>(null);\n const fileTree = buildChangedFilesTree(paths, viewMode);\n const treeNodes = toTreeListNodes({ nodes: fileTree, viewMode, onSelectPath, resolveFileIcon, changeByPath });\n const emptyTitle = searchQuery.trim() ? \"No matching files\" : \"No changed files\";\n\n return (\n <Stack h=\"full\" minH=\"0\" minW=\"0\" w=\"full\" gap=\"0\" overflow=\"hidden\" bg=\"bg\">\n <Header flexShrink={0} borderBottomWidth=\"1px\" borderColor=\"border.subtle\" bg=\"bg\">\n <InputGroup startElement={<Search size={14} />}>\n <Input\n size=\"sm\"\n variant=\"borderless\"\n aria-label=\"Search files\"\n placeholder=\"Search files\"\n value={searchQuery}\n onChange={(event) => onSearchQueryChange(event.target.value)}\n />\n </InputGroup>\n </Header>\n <ScrollArea\n flex=\"1\"\n minH=\"0\"\n minW=\"0\"\n bg=\"bg\"\n viewportRef={scrollRef}\n viewportProps={{ style: { overflowX: \"hidden\" } }}\n >\n {paths.length > 0 ? (\n <TreeList\n sections={[{ id: \"files\", nodes: treeNodes }]}\n expandedNodeIds={[...expandedFolderIds]}\n activeNodeId={selectedPath ? `file:${selectedPath}` : null}\n rowVariant=\"tree\"\n onToggleNode={onToggleFolder}\n virtualize\n scrollRef={scrollRef}\n />\n ) : (\n <Box px=\"xs\" py=\"xs\">\n <EmptyState title={emptyTitle} size=\"sm\" textAlign=\"left\" alignItems=\"flex-start\" />\n </Box>\n )}\n </ScrollArea>\n </Stack>\n );\n};\n","import { Box, Flex, HStack, Skeleton, Stack, Text } from \"@chakra-ui/react\";\nimport { useEffect, useState } from \"react\";\nimport { Header } from \"@/components/layout/header\";\nimport { ResizableSplitLayout } from \"@/components/layout/resizable-split-layout\";\nimport { EmptyState } from \"@/components/primitives/empty-state\";\nimport { buildChangedFilesTree, collectExpandedFolderIds, sortPathsByViewMode } from \"./build-changed-files-tree\";\nimport { DiffBubble } from \"./diff-bubble\";\nimport type { Diff } from \"./diff-card\";\nimport { DiffDrawer, type DiffDrawerExpansionState, type DiffExpansionCommand } from \"./diff-drawer\";\nimport { useDiffViewerStore } from \"./diff-viewer.store\";\nimport { DiffViewerOptionsMenu } from \"./diff-viewer-options-menu\";\nimport { FileListPanel } from \"./file-list-panel\";\nimport type { ChangedFilesViewMode, FileIconInfo } from \"./types\";\n\nexport interface DiffViewerProps {\n diffs: Diff[];\n changedFilePaths?: string[];\n defaultSelectedPath?: string | null;\n loading?: boolean;\n onLoadDiff?: (path: string) => Promise<void>;\n resolveFileIcon?: (path: string, options?: { isFolder?: boolean; isExpanded?: boolean }) => FileIconInfo | undefined;\n}\n\nconst getDiffPath = (diff: Diff) => diff.newPath ?? diff.oldPath ?? \"unknown\";\nconst buildChangeByPath = (diffs: Diff[]) => new Map(diffs.map((diff) => [getDiffPath(diff), diff.change]));\nconst sumDiffStats = (diffs: Diff[]) =>\n diffs.reduce(\n (total, diff) => ({\n additions: total.additions + (diff.additions ?? 0),\n deletions: total.deletions + (diff.deletions ?? 0),\n }),\n { additions: 0, deletions: 0 },\n );\n\nconst buildFilteredDiffs = (input: {\n diffs: Diff[];\n normalizedSearchQuery: string;\n viewMode: ChangedFilesViewMode;\n}) => {\n const { diffs, normalizedSearchQuery, viewMode } = input;\n const matchingDiffs = normalizedSearchQuery\n ? diffs.filter((diff) => getDiffPath(diff).toLowerCase().includes(normalizedSearchQuery))\n : diffs;\n const orderedPaths = sortPathsByViewMode(matchingDiffs.map(getDiffPath), viewMode);\n const orderByPath = new Map(orderedPaths.map((path, index) => [path, index]));\n\n return [...matchingDiffs].sort((left, right) => {\n const leftOrder = orderByPath.get(getDiffPath(left)) ?? Number.MAX_SAFE_INTEGER;\n const rightOrder = orderByPath.get(getDiffPath(right)) ?? Number.MAX_SAFE_INTEGER;\n return leftOrder - rightOrder;\n });\n};\n\nconst resolveSelectedPath = (preferredPaths: string[], fallbackPaths: string[]) =>\n preferredPaths[0] ?? fallbackPaths[0] ?? null;\n\nconst loadingDiffItems = [\"first\", \"second\", \"third\"] as const;\n\nconst DiffViewerLoading = () => (\n <Stack flex=\"1\" minH=\"0\" bg=\"bg\" p=\"xs\" gap=\"xs\" role=\"status\" aria-busy=\"true\" aria-label=\"Loading diff panel\">\n {loadingDiffItems.map((item) => (\n <Skeleton key={item} h=\"72px\" w=\"full\" flexShrink=\"0\" borderRadius=\"xs\" />\n ))}\n </Stack>\n);\n\nexport const DiffViewer = (props: DiffViewerProps) => {\n const { diffs, changedFilePaths, defaultSelectedPath = null, loading = false, onLoadDiff, resolveFileIcon } = props;\n const [diffExpansionCommand, setDiffExpansionCommand] = useState<DiffExpansionCommand | null>(null);\n const [diffExpansionState, setDiffExpansionState] = useState<DiffDrawerExpansionState>({\n allExpanded: false,\n allCollapsed: false,\n });\n const {\n isTreePanelOpen,\n viewMode,\n diffViewMode,\n searchQuery,\n selectedPath,\n expandedFolderIds,\n setTreePanelOpen,\n setViewMode,\n setDiffViewMode,\n setSearchQuery,\n setSelectedPath,\n setExpandedFolderIds,\n toggleFolder,\n expandAll,\n collapseAll,\n } = useDiffViewerStore();\n\n const diffPaths = diffs.map(getDiffPath);\n const filePaths = changedFilePaths ?? diffPaths;\n const normalizedSearchQuery = searchQuery.trim().toLowerCase();\n const filteredFilePaths = normalizedSearchQuery\n ? filePaths.filter((path) => path.toLowerCase().includes(normalizedSearchQuery))\n : filePaths;\n const filteredDiffs = buildFilteredDiffs({ diffs, normalizedSearchQuery, viewMode });\n const changeByPath = buildChangeByPath(diffs);\n const filteredDiffPaths = filteredDiffs.map(getDiffPath);\n const fileTree = buildChangedFilesTree(filteredFilePaths, viewMode);\n const folderIds = viewMode === \"nested\" ? collectExpandedFolderIds(fileTree) : [];\n const filteredFilePathKey = filteredFilePaths.join(\"\\0\");\n const filteredDiffPathKey = filteredDiffPaths.join(\"\\0\");\n const resolvedSelectedPath =\n selectedPath ?? defaultSelectedPath ?? resolveSelectedPath(filteredDiffPaths, filteredFilePaths);\n const hasDiffs = filteredDiffs.length > 0;\n const emptyDiffTitle = normalizedSearchQuery ? \"No matching changes\" : \"No changes\";\n const showDiffEmptyState = !loading && !hasDiffs;\n const totalDiff = sumDiffStats(filteredDiffs);\n const hasExpandableItems = folderIds.length > 0 || filteredDiffs.length > 0;\n const allFilesExpanded = folderIds.every((folderId) => expandedFolderIds.has(folderId));\n const allFilesCollapsed = folderIds.every((folderId) => !expandedFolderIds.has(folderId));\n const allDiffsExpanded = filteredDiffs.length === 0 || diffExpansionState.allExpanded;\n const allDiffsCollapsed = filteredDiffs.length === 0 || diffExpansionState.allCollapsed;\n const isExpandAllDisabled = !hasExpandableItems || (allFilesExpanded && allDiffsExpanded);\n const isCollapseAllDisabled = !hasExpandableItems || (allFilesCollapsed && allDiffsCollapsed);\n\n useEffect(() => {\n const filePaths = filteredFilePathKey ? filteredFilePathKey.split(\"\\0\") : [];\n const tree = buildChangedFilesTree(filePaths, viewMode);\n setExpandedFolderIds(viewMode === \"nested\" ? collectExpandedFolderIds(tree) : []);\n }, [filteredFilePathKey, setExpandedFolderIds, viewMode]);\n\n useEffect(() => {\n const diffPaths = filteredDiffPathKey ? filteredDiffPathKey.split(\"\\0\") : [];\n const filePaths = filteredFilePathKey ? filteredFilePathKey.split(\"\\0\") : [];\n if (resolvedSelectedPath && diffPaths.includes(resolvedSelectedPath)) return;\n setSelectedPath(resolveSelectedPath(diffPaths, filePaths));\n }, [filteredDiffPathKey, filteredFilePathKey, resolvedSelectedPath, setSelectedPath]);\n\n const expandAllFilesAndDiffs = () => {\n expandAll(folderIds);\n setDiffExpansionCommand((current) => ({ action: \"expand\", id: (current?.id ?? 0) + 1 }));\n };\n\n const collapseAllFilesAndDiffs = () => {\n collapseAll();\n setDiffExpansionCommand((current) => ({ action: \"collapse\", id: (current?.id ?? 0) + 1 }));\n };\n\n const selectChangedFilePath = (path: string) => {\n const currentIndex = resolvedSelectedPath ? filteredDiffPaths.indexOf(resolvedSelectedPath) : -1;\n const nextIndex = filteredDiffPaths.indexOf(path);\n const direction = currentIndex >= 0 && nextIndex >= 0 && nextIndex < currentIndex ? \"up\" : \"down\";\n\n setSelectedPath(path);\n setDiffExpansionCommand((current) => ({ action: \"expand-selected\", direction, id: (current?.id ?? 0) + 1, path }));\n };\n\n const diffPanel = (\n <Stack h=\"full\" minH=\"0\" minW=\"0\" flex=\"1\" bg=\"bg\" gap=\"0\">\n <Header variant=\"main\" borderBottomWidth=\"1px\" borderColor=\"border.subtle\" bg=\"bg\" justifyContent=\"space-between\">\n <HStack gap=\"xs\" minW=\"0\">\n <DiffViewerOptionsMenu\n isTreePanelOpen={isTreePanelOpen}\n hasFilePaths={filePaths.length > 0}\n viewMode={viewMode}\n diffViewMode={diffViewMode}\n isExpandAllDisabled={isExpandAllDisabled}\n isCollapseAllDisabled={isCollapseAllDisabled}\n onToggleTreePanel={() => setTreePanelOpen(!isTreePanelOpen)}\n onViewModeChange={setViewMode}\n onDiffViewModeChange={setDiffViewMode}\n onExpandAll={expandAllFilesAndDiffs}\n onCollapseAll={collapseAllFilesAndDiffs}\n />\n {showDiffEmptyState ? (\n <Text textStyle=\"label/S/regular\" color=\"fg.muted\" truncate>\n {emptyDiffTitle}\n </Text>\n ) : null}\n </HStack>\n <DiffBubble variant=\"ghost\" size=\"small\" additions={totalDiff.additions} deletions={totalDiff.deletions} />\n </Header>\n {loading ? (\n <DiffViewerLoading />\n ) : hasDiffs ? (\n <Box flex=\"1\" minH=\"0\">\n <DiffDrawer\n diffs={filteredDiffs}\n selectedDiffPath={resolvedSelectedPath}\n onLoadDiff={onLoadDiff}\n onSelectDiffPath={setSelectedPath}\n onExpansionStateChange={setDiffExpansionState}\n expansionCommand={diffExpansionCommand}\n diffViewMode={diffViewMode}\n />\n </Box>\n ) : (\n <Box flex=\"1\" minH=\"0\" px=\"md\" py=\"lg\" display=\"flex\" alignItems=\"center\" justifyContent=\"center\" bg=\"bg\">\n <EmptyState title={emptyDiffTitle} />\n </Box>\n )}\n </Stack>\n );\n\n return (\n <Flex flex=\"1\" minH=\"0\" minW=\"0\" bg=\"bg\" gap=\"0\" data-testid=\"diff-viewer\">\n <ResizableSplitLayout\n flex=\"1\"\n minH=\"0\"\n minW=\"0\"\n resizablePanel={\n <FileListPanel\n paths={filteredFilePaths}\n selectedPath={resolvedSelectedPath}\n viewMode={viewMode}\n searchQuery={searchQuery}\n expandedFolderIds={expandedFolderIds}\n onSelectPath={selectChangedFilePath}\n onSearchQueryChange={setSearchQuery}\n onToggleFolder={toggleFolder}\n resolveFileIcon={resolveFileIcon}\n changeByPath={changeByPath}\n />\n }\n contentPanel={diffPanel}\n collapsed={!isTreePanelOpen}\n defaultSizePx={288}\n minSizePx={224}\n contentMinSizePx={320}\n resizeLabel=\"Resize file list panel\"\n onCollapsedChange={(collapsed) => setTreePanelOpen(!collapsed)}\n />\n </Flex>\n );\n};\n"],"names":["createCodeEditorPreloader","initialize","initialization","preloadCodeEditor","then","module","initializeMonaco","customTheme","base","inherit","rules","colors","isMonacoTheme","value","EDITOR_THEME_NAME","useEditorTheme","$","_c","themePreference","themePreferences","useThemePreference","t0","t1","theme","id","preference","find","monacoTheme","useApplyEditorTheme","editorTheme","monacoRef","useRef","monaco","current","editor","defineTheme","setTheme","useEffect","t2","monaco_0","configureCodeEditor","languages","typescript","typescriptDefaults","setCompilerOptions","jsx","JsxEmit","React","addCommand","KeyMod","CtrlCmd","KeyCode","KeyS","getAction","run","CodeEditor","props","defaultCode","code","showLineNumbers","isEditable","language","onChange","disableScroll","undefined","applyEditorTheme","Symbol","for","enabled","t3","t4","scrollbar","vertical","horizontal","useShadows","alwaysConsumeMouseWheel","scrollBeyondLastLine","mouseWheelScrollSensitivity","overviewRulerLanes","t5","tabSize","minimap","fontSize","readOnly","lineNumbers","options","t6","t7","t8","t9","Editor","CodeDiffEditor","original","modified","originalEditable","renderSideBySide","useInlineViewWhenSpaceIsTooSmall","_","DiffEditor","imagePreviewMimeTypes","avif","bmp","gif","heic","ico","jpeg","jpg","png","tif","tiff","webp","imagePreviewExtensions","Object","keys","getFileExtension","filePath","extension","split","pop","toLowerCase","getImagePreviewMimeType","isImagePreviewPath","LARGE_DIFF_LINE_THRESHOLD","generatedDiffFileNames","Set","binaryDiffExtensions","getDiffLineCount","input","additions","deletions","isLargeDiffContent","isGeneratedDiffPath","path","fileName","has","endsWith","isBinaryDiffPath","ext","length","isImageDiffPath","createDiffCardBodyModel","diff","oldContent","newContent","isLargeDiff","hasOptedIntoLargeDiff","onShowFullDiff","diffViewMode","buildViewData","oldImageSrc","getImagePreviewSource","newImageSrc","kind","oldSrc","newSrc","isImage","renderedLineCount","diffViewData","buildDiffViewData","oldPath","newPath","sideBySide","content","startsWith","DiffCardBody","model","Box","ImageDiffPreview","BinaryDiffPlaceholder","LargeDiffPlaceholder","md","ImageDiffPanel","Grid","label","src","fallback","Text","Image","jsxs","Button","EmptyState","title","DeferredDiffLoad","actionLabel","isLoadingDiff","onAction","loadingDiffContentRows","LoadingDiffContent","Stack","map","_temp","row","Skeleton","buildDeferredDiffLoadState","isGeneratedDiff","loadError","canLoadDiff","onLoadDiff","DiffCardContent","isExpanded","isBinaryDiff","hasDiffContent","shouldAutoLoadDiff","shouldAutoLoadDiffContent","isSelected","requestedPath","resolveRequestedDiffPath","shouldShowDiffStats","resolveDiffFilePath","useDiffContentLoader","setLoadingDiff","useState","setRequestedPath","setLoadError","loadDiff","Boolean","DiffCard","onToggleExpanded","onSelect","blocksDiffContentLoad","borderColor","DiffCardHeader","t10","t11","t12","showStats","isCopied","setIsCopied","copyResetTimeoutRef","window","clearTimeout","navigator","clipboard","writeText","setTimeout","copyFilePath","bg","event","stopPropagation","ChevronDown","ChevronRight","IconButton","t13","change","t14","t15","t16","t17","opacity","pointerEvents","t18","t19","t20","event_0","t21","Check","Copy","t22","t23","Tooltip","t24","t25","t26","DiffBubble","t27","DiffDrawerEmptyState","ScrollArea","p","spaceY","CARD_HEADER_HEIGHT","CARD_BODY_LINE_HEIGHT","HUNK_ROW_HEIGHT","COLLAPSED_CARD_HEIGHT","DEFERRED_BODY_HEIGHT","IMAGE_BODY_HEIGHT","ITEM_GAP_HEIGHT","deferredCardHeight","estimateDiffCardHeight","isCollapsed","unifiedContentRows","splitContentRows","hunkRows","contentRows","bodyHeight","getDiffPath","PINNED_DIFF_LOOKBEHIND_COUNT","resolveSelectedScrollState","diffs","selectedDiffPath","collapsedPaths","expansionCommand","completedScrollCommandId","selectedScrollPath","selectedScrollSourceKey","selectedScrollCommandId","action","hasCompletedSelectedScroll","selectedScrollKey","selectedScrollExpansionState","selectedScrollIndex","findIndex","shouldPinSelectedScrollIndex","direction","includePinnedDiffIndexes","indexes","includes","pinnedStartIndex","Math","max","pinnedIndexes","Array","from","index","sort","a","b","SETTLE_FRAME_COUNT","MAX_ALIGNMENT_FRAMES","useSelectedDiffScroll","scrollRef","virtualizerRef","suppressScrollAdjustRef","setCompletedScrollCommandId","virtualizer","scrollElement","frameIds","cancelledByUserScroll","stopAligning","cancelSelectedScroll","alignmentFrames","alignSelectedDiff","scrollToIndex","align","push","requestAnimationFrame","addEventListener","passive","removeEventListener","frameId","cancelAnimationFrame","useLayoutEffect","INITIAL_EXPANDED_DIFF_COUNT","INITIAL_COLLAPSED_LINE_THRESHOLD","buildInitialCollapsedPaths","filter","lineCount","buildAllCollapsedPaths","toggleCollapsedPath","next","delete","add","resolveCollapsedPathsForSelectedDiff","some","resolveCollapsedPathsForNavigation","previousNavigatedPath","expanded","DiffDrawer","onSelectDiffPath","onExpansionStateChange","reportedExpansionStateRef","lastNavigatedPathRef","setCollapsedPaths","largeDiffOptInPaths","setLargeDiffOptInPaths","useVirtualizer","count","getScrollElement","estimateSize","getItemKey","overscan","rangeExtractor","range","defaultRangeExtractor","shouldAdjustScrollPositionOnItemSizeChange","_item","_delta","instance","isScrolling","prev","navigatedPath","expansionState","allExpanded","size","allCollapsed","every","reportedExpansionState","toggleExpanded","showFullDiff","virtualItems","getVirtualItems","style","overflowAnchor","height","getTotalSize","virtualItem","measureElement","top","start","key","normalizeChangedFilePath","segment","trim","join","sortNodes","nodes","left","right","type","name","localeCompare","forEach","node","children","dedupePaths","paths","buildFlatTree","buildChangedFilesTree","mode","treeById","Map","rootNodes","segments","parentPath","parentNode","currentPath","isFile","nodeId","existingNode","get","nextNode","set","collectExpandedFolderIds","folderIds","visit","items","item","collectNestedFileOrder","orderedPaths","treeNodes","replace","sortPathsByViewMode","useDiffViewerStore","create","isTreePanelOpen","viewMode","searchQuery","selectedPath","expandedFolderIds","setTreePanelOpen","toggleTreePanel","state","setViewMode","setDiffViewMode","setSearchQuery","setSelectedPath","setExpandedFolderIds","toggleFolder","folderId","expandAll","collapseAll","SelectionIndicator","selected","DiffViewerMenuItem","icon","disabled","onActivate","ListRow","DiffViewerOptionsMenu","hasFilePaths","isExpandAllDisabled","isCollapseAllDisabled","onToggleTreePanel","onViewModeChange","onDiffViewModeChange","onExpandAll","onCollapseAll","Menu","Settings2","PanelLeftClose","PanelLeftOpen","Fragment","ListTree","List","Rows2","SquareSplitHorizontal","ChevronsUpDown","ChevronsDownUp","changeLabels","added","copied","deleted","permissionChange","renamed","changeColors","changeSemanticStyles","color","backgroundColor","FileChangeBadge","colorPalette","colorProps","Badge","getFilePathParts","lastSlashIndex","lastIndexOf","dirPath","slice","renderFileLabel","toTreeListNodes","onSelectPath","resolveFileIcon","changeByPath","isContainer","fileIcon","Icon","FileText","iconColor","endContent","FileListPanel","onSearchQueryChange","onToggleFolder","fileTree","emptyTitle","Search","target","Header","InputGroup","Input","overflowX","TreeList","buildChangeByPath","sumDiffStats","reduce","total","buildFilteredDiffs","normalizedSearchQuery","matchingDiffs","orderByPath","leftOrder","Number","MAX_SAFE_INTEGER","rightOrder","resolveSelectedPath","preferredPaths","fallbackPaths","loadingDiffItems","DiffViewerLoading","DiffViewer","changedFilePaths","defaultSelectedPath","loading","diffExpansionCommand","setDiffExpansionCommand","diffExpansionState","setDiffExpansionState","allFilesExpanded","emptyDiffTitle","filePaths","filteredDiffPathKey","filteredDiffPaths","filteredDiffs","filteredFilePathKey","filteredFilePaths","hasDiffs","hasExpandableItems","resolvedSelectedPath","showDiffEmptyState","totalDiff","diffPaths","folderId_0","allFilesCollapsed","allDiffsExpanded","allDiffsCollapsed","filePaths_0","tree","diffPaths_0","filePaths_1","_temp2","expandAllFilesAndDiffs","_temp3","collapseAllFilesAndDiffs","path_0","currentIndex","indexOf","nextIndex","current_1","selectChangedFilePath","HStack","diffPanel","collapsed","Flex","ResizableSplitLayout","current_0"],"mappings":"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"}
1
+ {"version":3,"file":"diff.js","sources":["../src/components/diff-viewer/code-editor.tsx","../../pstdio-file-types/src/index.ts","../src/components/diff-viewer/diff-size.ts","../src/components/diff-viewer/diff-card-body.tsx","../src/components/diff-viewer/diff-card-load-state.tsx","../src/components/diff-viewer/diff-card-content.tsx","../src/components/diff-viewer/diff-card.tsx","../src/components/diff-viewer/diff-drawer-empty-state.tsx","../src/components/diff-viewer/diff-drawer-height.ts","../src/components/diff-viewer/diff-drawer-scroll.ts","../src/components/diff-viewer/use-selected-diff-scroll.ts","../src/components/diff-viewer/diff-drawer.tsx","../src/components/diff-viewer/build-changed-files-tree.ts","../src/components/diff-viewer/diff-viewer.store.ts","../src/components/diff-viewer/diff-viewer-options-menu.tsx","../src/components/diff-viewer/file-change-badge.tsx","../src/components/diff-viewer/file-list-panel.tsx","../src/components/diff-viewer/diff-viewer.tsx"],"sourcesContent":["import { DiffEditor, Editor } from \"@monaco-editor/react\";\nimport type * as Monaco from \"monaco-editor\";\nimport { useEffect, useRef } from \"react\";\nimport type { MonacoThemeData } from \"../../theme\";\nimport { useThemePreference } from \"../../utils/theme-preference\";\n\nexport const createCodeEditorPreloader = (initialize: () => Promise<unknown>) => {\n let initialization: Promise<unknown> | undefined;\n\n return () => {\n initialization ??= initialize();\n return initialization;\n };\n};\n\nexport const preloadCodeEditor = createCodeEditorPreloader(() =>\n import(\"./monaco-browser\").then((module) => module.initializeMonaco()),\n);\n\nexport const customTheme = {\n base: \"vs-dark\" as const,\n inherit: true,\n rules: [],\n colors: {\n \"editor.background\": \"#0a0d15\",\n \"editor.foreground\": \"#f5f5f5\",\n \"editor.lineHighlightBackground\": \"#22252C\",\n \"editorCursor.foreground\": \"#A7A7A7\",\n \"editorWhitespace.foreground\": \"#3B3B3B\",\n \"editorIndentGuide.background\": \"#404040\",\n \"editorIndentGuide.activeBackground\": \"#707070\",\n },\n} satisfies MonacoThemeData;\n\nconst isMonacoTheme = (value: unknown): value is MonacoThemeData =>\n typeof value === \"object\" && value !== null && \"base\" in value && \"colors\" in value;\n\ntype MonacoApi = {\n editor: {\n defineTheme: (name: string, data: MonacoThemeData) => void;\n setTheme: (name: string) => void;\n };\n};\n\nconst EDITOR_THEME_NAME = \"ps-theme\";\n\nconst useEditorTheme = () => {\n const { themePreference, themePreferences } = useThemePreference();\n const preference = themePreferences.find((theme) => theme.id === themePreference);\n return isMonacoTheme(preference?.monacoTheme) ? preference.monacoTheme : customTheme;\n};\n\nconst useApplyEditorTheme = (editorTheme: MonacoThemeData) => {\n const monacoRef = useRef<MonacoApi | null>(null);\n\n useEffect(() => {\n const monaco = monacoRef.current;\n if (!monaco) return;\n\n monaco.editor.defineTheme(EDITOR_THEME_NAME, editorTheme);\n monaco.editor.setTheme(EDITOR_THEME_NAME);\n }, [editorTheme]);\n\n return (monaco: MonacoApi) => {\n monacoRef.current = monaco;\n monaco.editor.defineTheme(EDITOR_THEME_NAME, editorTheme);\n monaco.editor.setTheme(EDITOR_THEME_NAME);\n };\n};\n\nexport const configureCodeEditor = (\n editor: {\n addCommand: (key: number, handler: () => Promise<void>) => unknown;\n getAction: (id: string) => Pick<Monaco.editor.IEditorAction, \"run\"> | null;\n },\n monaco: { KeyMod: Pick<typeof Monaco.KeyMod, \"CtrlCmd\">; KeyCode: Pick<typeof Monaco.KeyCode, \"KeyS\"> },\n) => {\n editor.addCommand(monaco.KeyMod.CtrlCmd | monaco.KeyCode.KeyS, async () => {\n await editor.getAction(\"editor.action.formatDocument\")?.run();\n });\n};\n\ninterface CodeEditorProps {\n language: string;\n defaultCode?: string;\n code?: string;\n isEditable: boolean;\n showLineNumbers?: boolean;\n onChange?: (code: string) => void;\n disableScroll?: boolean;\n}\n\nexport const CodeEditor = (props: CodeEditorProps) => {\n const { defaultCode, code, showLineNumbers, isEditable, language = \"javascript\", onChange, disableScroll } = props;\n const editorTheme = useEditorTheme();\n const applyEditorTheme = useApplyEditorTheme(editorTheme);\n\n const options = {\n tabSize: 2,\n minimap: {\n enabled: false,\n },\n fontSize: 12,\n readOnly: !isEditable,\n lineNumbers: showLineNumbers ? \"on\" : \"off\",\n ...(disableScroll\n ? {\n scrollbar: {\n vertical: \"hidden\" as const,\n horizontal: \"hidden\" as const,\n useShadows: false,\n alwaysConsumeMouseWheel: false,\n },\n scrollBeyondLastLine: false,\n mouseWheelScrollSensitivity: 0,\n overviewRulerLanes: 0,\n }\n : {}),\n } as const;\n\n return (\n <Editor\n width=\"100%\"\n height=\"100%\"\n language={language}\n defaultValue={defaultCode}\n value={code}\n theme={EDITOR_THEME_NAME}\n options={options}\n onChange={(value) => {\n onChange?.(value || \"\");\n }}\n beforeMount={(monaco) => {\n applyEditorTheme(monaco);\n }}\n onMount={(editor, monaco) => {\n applyEditorTheme(monaco);\n configureCodeEditor(editor, monaco);\n }}\n />\n );\n};\n\ninterface CodeDiffEditorProps {\n language: string;\n original: string;\n modified: string;\n showLineNumbers?: boolean;\n disableScroll?: boolean;\n}\n\nexport const CodeDiffEditor = (props: CodeDiffEditorProps) => {\n const { original, modified, showLineNumbers, language = \"javascript\", disableScroll } = props;\n const editorTheme = useEditorTheme();\n const applyEditorTheme = useApplyEditorTheme(editorTheme);\n\n const options = {\n tabSize: 2,\n minimap: {\n enabled: false,\n },\n fontSize: 12,\n readOnly: true,\n originalEditable: false,\n renderSideBySide: true,\n useInlineViewWhenSpaceIsTooSmall: true,\n lineNumbers: showLineNumbers ? \"on\" : \"off\",\n ...(disableScroll\n ? {\n scrollbar: {\n vertical: \"hidden\" as const,\n horizontal: \"hidden\" as const,\n useShadows: false,\n alwaysConsumeMouseWheel: false,\n },\n scrollBeyondLastLine: false,\n mouseWheelScrollSensitivity: 0,\n overviewRulerLanes: 0,\n }\n : {}),\n } as const;\n\n return (\n <DiffEditor\n width=\"100%\"\n height=\"100%\"\n language={language}\n original={original}\n modified={modified}\n theme={EDITOR_THEME_NAME}\n options={options}\n beforeMount={(monaco) => {\n applyEditorTheme(monaco);\n }}\n onMount={(_, monaco) => {\n applyEditorTheme(monaco);\n }}\n />\n );\n};\n","export const imagePreviewMimeTypes = {\n avif: \"image/avif\",\n bmp: \"image/bmp\",\n gif: \"image/gif\",\n heic: \"image/heic\",\n ico: \"image/x-icon\",\n jpeg: \"image/jpeg\",\n jpg: \"image/jpeg\",\n png: \"image/png\",\n tif: \"image/tiff\",\n tiff: \"image/tiff\",\n webp: \"image/webp\",\n} as const;\n\nexport const imagePreviewExtensions = Object.keys(imagePreviewMimeTypes);\n\nexport const getFileExtension = (filePath: string) => {\n const fileName = filePath.split(/[\\\\/]/).pop() ?? filePath;\n const extension = fileName.split(\".\").pop();\n return extension ? extension.toLowerCase() : \"\";\n};\n\nexport const getImagePreviewMimeType = (filePath: string) => {\n const extension = getFileExtension(filePath);\n return imagePreviewMimeTypes[extension as keyof typeof imagePreviewMimeTypes] ?? null;\n};\n\nexport const isImagePreviewPath = (filePath: string) => getImagePreviewMimeType(filePath) !== null;\n","import { getFileExtension, imagePreviewExtensions, isImagePreviewPath } from \"pstdio-file-types\";\n\nexport const LARGE_DIFF_LINE_THRESHOLD = 1000;\n\nconst generatedDiffFileNames = new Set([\"bun.lock\", \"bun.lockb\", \"package-lock.json\", \"pnpm-lock.yaml\", \"yarn.lock\"]);\n\n// Extensions whose byte content cannot be meaningfully shown as a unified diff.\n// SVG is intentionally excluded — it is text-based XML and benefits from a line diff.\nconst binaryDiffExtensions = new Set([\n ...imagePreviewExtensions,\n \"pdf\",\n \"zip\",\n \"tar\",\n \"gz\",\n \"tgz\",\n \"rar\",\n \"7z\",\n \"exe\",\n \"dll\",\n \"so\",\n \"dylib\",\n \"wasm\",\n \"class\",\n \"jar\",\n \"mp3\",\n \"mp4\",\n \"mov\",\n \"ogg\",\n \"wav\",\n \"webm\",\n \"flac\",\n \"ttf\",\n \"otf\",\n \"woff\",\n \"woff2\",\n \"eot\",\n]);\n\nexport const getDiffLineCount = (input: {\n additions?: number;\n deletions?: number;\n oldContent?: string;\n newContent?: string;\n}) => {\n return (input.additions ?? 0) + (input.deletions ?? 0);\n};\n\nexport const isLargeDiffContent = (input: {\n additions?: number;\n deletions?: number;\n oldContent?: string;\n newContent?: string;\n}) => {\n return getDiffLineCount(input) > LARGE_DIFF_LINE_THRESHOLD;\n};\n\nexport const isGeneratedDiffPath = (path: string) => {\n const fileName = path.split(/[\\\\/]/).pop() ?? path;\n\n return generatedDiffFileNames.has(fileName) || fileName.endsWith(\".min.js\") || fileName.endsWith(\".generated.ts\");\n};\n\nexport const isBinaryDiffPath = (path: string) => {\n const ext = getFileExtension(path);\n return ext.length > 0 && binaryDiffExtensions.has(ext);\n};\n\nexport const isImageDiffPath = isImagePreviewPath;\n","import { Box, Button, Grid, Image, Text } from \"@chakra-ui/react\";\nimport { EmptyState } from \"@/components/primitives/empty-state\";\nimport type { Diff } from \"./diff-card\";\nimport { DiffEditor } from \"./diff-editor\";\nimport { getDiffLineCount, isBinaryDiffPath, isImageDiffPath } from \"./diff-size\";\nimport { type BuiltDiffViewData, buildDiffViewData } from \"./diff-view-adapter\";\nimport type { DiffViewMode } from \"./types\";\n\ninterface DiffCardBodyProps {\n diff: Diff;\n filePath: string;\n oldContent: string;\n newContent: string;\n isLargeDiff: boolean;\n hasOptedIntoLargeDiff: boolean;\n onShowFullDiff?: () => void;\n diffViewMode?: DiffViewMode;\n}\n\ninterface DiffCardBodyModelInput extends DiffCardBodyProps {\n buildViewData?: typeof buildDiffViewData;\n}\n\nexport const createDiffCardBodyModel = (input: DiffCardBodyModelInput) => {\n const {\n diff,\n filePath,\n oldContent,\n newContent,\n isLargeDiff,\n hasOptedIntoLargeDiff,\n onShowFullDiff,\n diffViewMode = \"unified\",\n buildViewData,\n } = input;\n\n if (isBinaryDiffPath(filePath)) {\n const oldImageSrc = getImagePreviewSource(oldContent);\n const newImageSrc = getImagePreviewSource(newContent);\n if (isImageDiffPath(filePath) && (oldImageSrc || newImageSrc)) {\n return {\n kind: \"image\" as const,\n filePath,\n oldSrc: oldImageSrc,\n newSrc: newImageSrc,\n };\n }\n\n return {\n kind: \"binary\" as const,\n filePath,\n isImage: isImageDiffPath(filePath),\n };\n }\n\n if (isLargeDiff && !hasOptedIntoLargeDiff) {\n return {\n kind: \"placeholder\" as const,\n filePath,\n renderedLineCount: getDiffLineCount(diff),\n onShowFullDiff,\n };\n }\n\n const diffViewData = (buildViewData ?? buildDiffViewData)({\n original: oldContent,\n modified: newContent,\n oldPath: diff.oldPath,\n newPath: diff.newPath,\n });\n return {\n kind: \"editor\" as const,\n diffViewData,\n sideBySide: diffViewMode === \"split\",\n };\n};\n\nconst getImagePreviewSource = (content: string) => (content.startsWith(\"data:image/\") ? content : \"\");\n\nexport const DiffCardBody = (props: DiffCardBodyProps) => {\n const {\n diff,\n filePath,\n oldContent,\n newContent,\n isLargeDiff,\n hasOptedIntoLargeDiff,\n onShowFullDiff,\n diffViewMode = \"unified\",\n } = props;\n const model = createDiffCardBodyModel({\n diff,\n filePath,\n oldContent,\n newContent,\n isLargeDiff,\n hasOptedIntoLargeDiff,\n onShowFullDiff,\n diffViewMode,\n });\n\n return (\n <Box bg=\"bg\" borderBottomRadius=\"xs\" overflow=\"hidden\">\n {model.kind === \"editor\" ? (\n <DiffEditor\n original={oldContent}\n modified={newContent}\n oldPath={diff.oldPath}\n newPath={diff.newPath}\n sideBySide={model.sideBySide}\n data={model.diffViewData}\n />\n ) : model.kind === \"image\" ? (\n <ImageDiffPreview oldSrc={model.oldSrc} newSrc={model.newSrc} />\n ) : model.kind === \"binary\" ? (\n <BinaryDiffPlaceholder isImage={model.isImage} />\n ) : (\n <LargeDiffPlaceholder\n filePath={model.filePath}\n renderedLineCount={model.renderedLineCount}\n onShowFullDiff={model.onShowFullDiff}\n />\n )}\n </Box>\n );\n};\n\ninterface ImageDiffPreviewProps {\n oldSrc: string;\n newSrc: string;\n}\n\nconst ImageDiffPreview = (props: ImageDiffPreviewProps) => {\n const { oldSrc, newSrc } = props;\n\n return (\n <Grid\n templateColumns={{ base: \"1fr\", md: \"1fr 1fr\" }}\n gap=\"sm\"\n p=\"sm\"\n borderTop=\"1px solid\"\n borderColor=\"border.subtle\"\n bg=\"bg\"\n >\n <ImageDiffPanel label=\"Old\" src={oldSrc} fallback=\"No old image\" />\n <ImageDiffPanel label=\"New\" src={newSrc} fallback=\"No new image\" />\n </Grid>\n );\n};\n\ninterface ImageDiffPanelProps {\n label: string;\n src: string;\n fallback: string;\n}\n\nconst ImageDiffPanel = (props: ImageDiffPanelProps) => {\n const { label, src, fallback } = props;\n\n return (\n <Box border=\"1px solid\" borderColor=\"border.subtle\" borderRadius=\"xs\" overflow=\"hidden\" bg=\"bg.subtle\" minW=\"0\">\n <Text\n px=\"xs\"\n py=\"2xs\"\n textStyle=\"label/S/medium\"\n color=\"fg.muted\"\n borderBottom=\"1px solid\"\n borderColor=\"border.subtle\"\n >\n {label}\n </Text>\n <Box display=\"grid\" placeItems=\"center\" minH=\"180px\" p=\"sm\">\n {src ? (\n <Image src={src} alt={`${label} image diff`} maxH=\"260px\" maxW=\"100%\" objectFit=\"contain\" />\n ) : (\n <Text color=\"fg.muted\" textStyle=\"body/S/regular\">\n {fallback}\n </Text>\n )}\n </Box>\n </Box>\n );\n};\n\ninterface LargeDiffPlaceholderProps {\n filePath: string;\n renderedLineCount: number;\n onShowFullDiff?: () => void;\n}\n\nconst LargeDiffPlaceholder = (props: LargeDiffPlaceholderProps) => {\n const { filePath, onShowFullDiff } = props;\n\n return (\n <Box p=\"md\" borderTop=\"1px solid\" borderColor=\"border.subtle\" bg=\"bg\">\n <EmptyState title=\"Large diffs are hidden by default\" paddingY=\"sm\">\n {onShowFullDiff ? (\n <Button size=\"xs\" variant=\"outline\" aria-label={`Render full diff for ${filePath}`} onClick={onShowFullDiff}>\n Show full diff\n </Button>\n ) : null}\n </EmptyState>\n </Box>\n );\n};\n\ninterface BinaryDiffPlaceholderProps {\n isImage: boolean;\n}\n\nconst BinaryDiffPlaceholder = (props: BinaryDiffPlaceholderProps) => {\n const { isImage } = props;\n const title = isImage ? \"Image diffs are not shown\" : \"Binary diffs are not shown\";\n\n return (\n <Box p=\"md\" borderTop=\"1px solid\" borderColor=\"border.subtle\" bg=\"bg\">\n <EmptyState title={title} paddingY=\"sm\" />\n </Box>\n );\n};\n\nexport type TestDiffViewData = BuiltDiffViewData;\n","import { Box, Button, Skeleton, Stack } from \"@chakra-ui/react\";\nimport { EmptyState } from \"@/components/primitives/empty-state\";\n\ninterface DeferredDiffLoadProps {\n title: string;\n actionLabel?: string;\n isLoadingDiff: boolean;\n onAction?: () => void;\n}\n\nexport const DeferredDiffLoad = (props: DeferredDiffLoadProps) => {\n const { title, actionLabel, isLoadingDiff, onAction } = props;\n\n return (\n <Box bg=\"bg\" p=\"md\" borderTop=\"1px solid\" borderColor=\"border.subtle\">\n <EmptyState title={title} paddingY=\"sm\">\n {actionLabel ? (\n <Button size=\"xs\" variant=\"outline\" loading={isLoadingDiff} onClick={onAction}>\n {actionLabel}\n </Button>\n ) : null}\n </EmptyState>\n </Box>\n );\n};\n\nconst loadingDiffContentRows = [\"first\", \"second\", \"third\"] as const;\n\nexport const LoadingDiffContent = () => (\n <Stack\n h=\"280px\"\n bg=\"bg\"\n borderTop=\"1px solid\"\n borderColor=\"border.subtle\"\n p=\"xs\"\n gap=\"2xs\"\n role=\"status\"\n aria-busy=\"true\"\n aria-label=\"Loading diff\"\n >\n {loadingDiffContentRows.map((row) => (\n <Skeleton key={row} h=\"20px\" w=\"full\" borderRadius=\"xs\" />\n ))}\n </Stack>\n);\n","import type { Diff } from \"./diff-card\";\nimport { DiffCardBody } from \"./diff-card-body\";\nimport { DeferredDiffLoad, LoadingDiffContent } from \"./diff-card-load-state\";\nimport type { DiffViewMode } from \"./types\";\n\ninterface DiffCardContentProps {\n diff: Diff;\n filePath: string;\n oldContent: string;\n newContent: string;\n isExpanded: boolean;\n isLargeDiff: boolean;\n isGeneratedDiff: boolean;\n isBinaryDiff: boolean;\n hasDiffContent: boolean;\n canLoadDiff: boolean;\n shouldAutoLoadDiff: boolean;\n loadError: boolean;\n isLoadingDiff: boolean;\n onLoadDiff: () => Promise<void>;\n hasOptedIntoLargeDiff: boolean;\n onShowFullDiff?: () => void;\n diffViewMode?: DiffViewMode;\n}\n\ninterface DeferredDiffLoadStateInput {\n isLargeDiff: boolean;\n isGeneratedDiff: boolean;\n loadError: boolean;\n canLoadDiff: boolean;\n onLoadDiff: () => Promise<void>;\n onShowFullDiff?: () => void;\n}\n\nconst buildDeferredDiffLoadState = (input: DeferredDiffLoadStateInput) => {\n const { isLargeDiff, isGeneratedDiff, loadError, canLoadDiff, onLoadDiff, onShowFullDiff } = input;\n let title = \"Diff content is not loaded yet.\";\n let actionLabel = canLoadDiff ? \"Load diff\" : undefined;\n let onAction: (() => void) | undefined = canLoadDiff ? () => void onLoadDiff() : undefined;\n\n if (isLargeDiff) {\n title = \"Large diffs are hidden by default\";\n actionLabel = canLoadDiff ? \"Show full diff\" : undefined;\n onAction = () => {\n onShowFullDiff?.();\n void onLoadDiff();\n };\n }\n\n if (isGeneratedDiff) {\n title = \"Generated diffs are hidden by default\";\n actionLabel = canLoadDiff ? \"Load diff\" : undefined;\n onAction = canLoadDiff ? () => void onLoadDiff() : undefined;\n }\n\n if (loadError) {\n title = \"Diff failed to load. Try again.\";\n actionLabel = canLoadDiff ? \"Load diff\" : undefined;\n onAction = canLoadDiff ? () => void onLoadDiff() : undefined;\n }\n\n return { title, actionLabel, onAction };\n};\n\nexport const DiffCardContent = (props: DiffCardContentProps) => {\n const {\n diff,\n filePath,\n oldContent,\n newContent,\n isExpanded,\n isLargeDiff,\n isGeneratedDiff,\n isBinaryDiff,\n hasDiffContent,\n canLoadDiff,\n shouldAutoLoadDiff,\n loadError,\n isLoadingDiff,\n onLoadDiff,\n hasOptedIntoLargeDiff,\n onShowFullDiff,\n diffViewMode = \"unified\",\n } = props;\n\n if (!isExpanded) return null;\n\n if (isBinaryDiff) {\n return (\n <DiffCardBody\n diff={diff}\n filePath={filePath}\n oldContent={oldContent}\n newContent={newContent}\n isLargeDiff={false}\n hasOptedIntoLargeDiff={hasOptedIntoLargeDiff}\n onShowFullDiff={onShowFullDiff}\n diffViewMode={diffViewMode}\n />\n );\n }\n\n if (!hasDiffContent && !shouldAutoLoadDiff) {\n const { title, actionLabel, onAction } = buildDeferredDiffLoadState({\n isLargeDiff,\n isGeneratedDiff,\n loadError,\n canLoadDiff,\n onLoadDiff,\n onShowFullDiff,\n });\n\n return (\n <DeferredDiffLoad title={title} actionLabel={actionLabel} isLoadingDiff={isLoadingDiff} onAction={onAction} />\n );\n }\n\n if (shouldAutoLoadDiff) {\n return <LoadingDiffContent />;\n }\n\n return (\n <DiffCardBody\n diff={diff}\n filePath={filePath}\n oldContent={oldContent}\n newContent={newContent}\n isLargeDiff={isLargeDiff}\n hasOptedIntoLargeDiff={hasOptedIntoLargeDiff}\n onShowFullDiff={onShowFullDiff}\n diffViewMode={diffViewMode}\n />\n );\n};\n","import { Box, Grid, IconButton, Text } from \"@chakra-ui/react\";\nimport { Check, ChevronDown, ChevronRight, Copy } from \"lucide-react\";\nimport { useEffect, useRef, useState } from \"react\";\nimport { Tooltip } from \"@/components/primitives/tooltip\";\nimport { DiffBubble } from \"./diff-bubble\";\nimport { DiffCardContent } from \"./diff-card-content\";\nimport { isBinaryDiffPath, isGeneratedDiffPath, isImageDiffPath, isLargeDiffContent } from \"./diff-size\";\nimport type { DiffViewMode } from \"./types\";\n\nexport interface Diff {\n change: \"added\" | \"deleted\" | \"modified\" | \"renamed\" | \"copied\" | \"permissionChange\";\n oldPath?: string;\n newPath?: string;\n oldContent?: string;\n newContent?: string;\n additions?: number;\n deletions?: number;\n}\n\ninterface DiffCardProps {\n diff: Diff;\n isSelected?: boolean;\n isExpanded?: boolean;\n onToggleExpanded?: () => void;\n onSelect?: () => void;\n onLoadDiff?: (path: string) => Promise<void>;\n hasOptedIntoLargeDiff?: boolean;\n onShowFullDiff?: () => void;\n diffViewMode?: DiffViewMode;\n}\n\ninterface DiffCardHeaderProps {\n diff: Diff;\n isExpanded?: boolean;\n onToggleExpanded?: () => void;\n}\n\nexport const shouldAutoLoadDiffContent = (input: {\n isExpanded: boolean;\n isSelected: boolean;\n hasDiffContent: boolean;\n isLargeDiff: boolean;\n isGeneratedDiff: boolean;\n isBinaryDiff: boolean;\n requestedPath: string | null;\n filePath: string;\n}) => {\n const {\n isExpanded,\n isSelected,\n hasDiffContent,\n isLargeDiff,\n isGeneratedDiff,\n isBinaryDiff,\n requestedPath,\n filePath,\n } = input;\n\n return (\n isExpanded &&\n isSelected &&\n !hasDiffContent &&\n !isLargeDiff &&\n !isGeneratedDiff &&\n !isBinaryDiff &&\n requestedPath !== filePath\n );\n};\n\nexport const resolveRequestedDiffPath = (input: {\n requestedPath: string | null;\n filePath: string;\n hasDiffContent: boolean;\n}) => {\n const { requestedPath, filePath, hasDiffContent } = input;\n\n if (requestedPath === filePath && hasDiffContent) {\n return null;\n }\n\n return requestedPath;\n};\n\nexport const shouldShowDiffStats = (filePath: string) => !isImageDiffPath(filePath);\n\nexport const resolveDiffFilePath = (diff: Diff) => diff.newPath || diff.oldPath || \"unknown\";\n\nconst useDiffContentLoader = (input: {\n filePath: string;\n isExpanded: boolean;\n isSelected: boolean;\n hasDiffContent: boolean;\n isLargeDiff: boolean;\n isGeneratedDiff: boolean;\n isBinaryDiff: boolean;\n onLoadDiff?: (path: string) => Promise<void>;\n}) => {\n const { filePath, isExpanded, isSelected, hasDiffContent, isLargeDiff, isGeneratedDiff, isBinaryDiff, onLoadDiff } =\n input;\n const [isLoadingDiff, setLoadingDiff] = useState(false);\n const [requestedPath, setRequestedPath] = useState<string | null>(null);\n const [loadError, setLoadError] = useState(false);\n\n const loadDiff = async () => {\n if (!onLoadDiff || isLoadingDiff) return;\n\n setRequestedPath(filePath);\n setLoadError(false);\n setLoadingDiff(true);\n try {\n await onLoadDiff(filePath);\n } catch {\n setRequestedPath(null);\n setLoadError(true);\n } finally {\n setLoadingDiff(false);\n }\n };\n\n const shouldAutoLoadDiff = shouldAutoLoadDiffContent({\n isExpanded,\n isSelected,\n hasDiffContent,\n isLargeDiff,\n isGeneratedDiff,\n isBinaryDiff,\n requestedPath,\n filePath,\n });\n\n useEffect(() => {\n setRequestedPath((current) => resolveRequestedDiffPath({ requestedPath: current, filePath, hasDiffContent }));\n }, [filePath, hasDiffContent]);\n\n useEffect(() => {\n if (!onLoadDiff || !shouldAutoLoadDiff || loadError) {\n return;\n }\n\n void loadDiff();\n });\n\n return {\n isLoadingDiff,\n loadError,\n shouldAutoLoadDiff: Boolean(onLoadDiff) && shouldAutoLoadDiff && !loadError,\n loadDiff,\n };\n};\n\nexport const DiffCard = (props: DiffCardProps) => {\n const {\n diff,\n isSelected = false,\n isExpanded = true,\n onToggleExpanded,\n onSelect,\n onLoadDiff,\n hasOptedIntoLargeDiff = false,\n onShowFullDiff,\n diffViewMode = \"unified\",\n } = props;\n\n const filePath = resolveDiffFilePath(diff);\n const oldContent = diff.oldContent || \"\";\n const newContent = diff.newContent || \"\";\n const isLargeDiff = isLargeDiffContent(diff);\n const isGeneratedDiff = isGeneratedDiffPath(filePath);\n const isBinaryDiff = isBinaryDiffPath(filePath);\n const blocksDiffContentLoad = isBinaryDiff && !isImageDiffPath(filePath);\n const hasDiffContent = diff.oldContent !== undefined || diff.newContent !== undefined;\n const { isLoadingDiff, loadError, shouldAutoLoadDiff, loadDiff } = useDiffContentLoader({\n filePath,\n isExpanded,\n isSelected,\n hasDiffContent,\n isLargeDiff: isLargeDiff && !hasOptedIntoLargeDiff,\n isGeneratedDiff,\n isBinaryDiff: blocksDiffContentLoad,\n onLoadDiff,\n });\n\n return (\n <Box\n data-testid=\"diff-card\"\n border=\"1px solid\"\n borderColor={isSelected ? \"border.accent\" : \"border.subtle\"}\n borderRadius=\"xs\"\n overflow=\"visible\"\n bg=\"bg\"\n width=\"100%\"\n maxW=\"100%\"\n transition=\"border-color 0.14s ease\"\n _hover={{ borderColor: \"border.accent\" }}\n onClick={onSelect}\n >\n <DiffCardHeader diff={diff} isExpanded={isExpanded} onToggleExpanded={onToggleExpanded} />\n\n <DiffCardContent\n diff={diff}\n filePath={filePath}\n oldContent={oldContent}\n newContent={newContent}\n isExpanded={isExpanded}\n isLargeDiff={isLargeDiff}\n isGeneratedDiff={isGeneratedDiff}\n isBinaryDiff={blocksDiffContentLoad}\n hasDiffContent={hasDiffContent}\n canLoadDiff={Boolean(onLoadDiff)}\n shouldAutoLoadDiff={shouldAutoLoadDiff}\n loadError={loadError}\n isLoadingDiff={isLoadingDiff}\n onLoadDiff={loadDiff}\n hasOptedIntoLargeDiff={hasOptedIntoLargeDiff}\n onShowFullDiff={onShowFullDiff}\n diffViewMode={diffViewMode}\n />\n </Box>\n );\n};\n\nexport const DiffCardHeader = (props: DiffCardHeaderProps) => {\n const { diff, isExpanded = true, onToggleExpanded } = props;\n const filePath = resolveDiffFilePath(diff);\n const additions = diff.additions ?? 0;\n const deletions = diff.deletions ?? 0;\n const showStats = shouldShowDiffStats(filePath);\n const [isCopied, setIsCopied] = useState(false);\n const copyResetTimeoutRef = useRef<number | null>(null);\n\n useEffect(() => {\n return () => {\n if (copyResetTimeoutRef.current !== null) {\n window.clearTimeout(copyResetTimeoutRef.current);\n }\n };\n }, []);\n\n const copyFilePath = async () => {\n try {\n await navigator.clipboard.writeText(filePath);\n setIsCopied(true);\n if (copyResetTimeoutRef.current !== null) {\n window.clearTimeout(copyResetTimeoutRef.current);\n }\n copyResetTimeoutRef.current = window.setTimeout(() => setIsCopied(false), 1200);\n } catch {\n setIsCopied(false);\n }\n };\n\n return (\n <Grid\n data-testid=\"diff-card-header\"\n templateColumns=\"auto minmax(0, 1fr) auto\"\n px=\"xs\"\n py=\"2xs\"\n alignItems=\"center\"\n justifyContent=\"space-between\"\n borderBottom={isExpanded ? \"1px solid\" : \"none\"}\n borderColor=\"border.subtle\"\n borderTopRadius=\"xs\"\n borderBottomRadius={isExpanded ? \"0\" : \"xs\"}\n position=\"sticky\"\n top=\"0\"\n zIndex=\"1\"\n bg=\"bg\"\n cursor=\"pointer\"\n transition=\"background 0.14s ease\"\n _hover={{ bg: \"bg\" }}\n onClick={() => onToggleExpanded?.()}\n gap=\"sm\"\n >\n <IconButton\n aria-label={isExpanded ? \"Collapse\" : \"Expand\"}\n variant=\"ghost\"\n size=\"2xs\"\n onClick={(event) => {\n event.stopPropagation();\n onToggleExpanded?.();\n }}\n flexShrink={0}\n >\n {isExpanded ? <ChevronDown size={16} /> : <ChevronRight size={16} />}\n </IconButton>\n\n <Grid templateColumns=\"minmax(0, max-content) auto\" alignItems=\"center\" justifyContent=\"start\" gap=\"2xs\" minW={0}>\n <Box minW={0} overflow=\"hidden\" textOverflow=\"ellipsis\" whiteSpace=\"nowrap\" title={filePath}>\n {diff.change === \"renamed\" ? (\n <Text as=\"span\" textStyle=\"sm\">\n <Text as=\"span\" color=\"fg.muted\" textDecoration=\"line-through\" mr=\"xs\">\n {diff.oldPath}\n </Text>\n <Box as=\"span\" display=\"inline-flex\" alignItems=\"center\" verticalAlign=\"middle\" mr=\"xs\">\n <ChevronRight size={12} />\n </Box>\n {diff.newPath}\n </Text>\n ) : diff.change === \"deleted\" ? (\n <Text as=\"span\" color=\"fg.muted\" textDecoration=\"line-through\" textStyle=\"sm\">\n {filePath}\n </Text>\n ) : (\n <Text as=\"span\" textStyle=\"sm\">\n {filePath}\n </Text>\n )}\n </Box>\n\n <Box\n opacity={isCopied ? \"1\" : \"0\"}\n pointerEvents={isCopied ? \"auto\" : \"none\"}\n transition=\"opacity 120ms ease\"\n css={{\n \"[data-testid='diff-card-header']:hover &, [data-testid='diff-card-header']:focus-within &\": {\n opacity: 1,\n pointerEvents: \"auto\",\n },\n }}\n >\n <Tooltip content={isCopied ? \"Copied\" : \"Copy file path\"}>\n <IconButton\n aria-label={isCopied ? \"Copied\" : \"Copy file path\"}\n variant=\"ghost\"\n size=\"2xs\"\n onClick={(event) => {\n event.stopPropagation();\n void copyFilePath();\n }}\n flexShrink={0}\n >\n {isCopied ? <Check size={12} /> : <Copy size={12} />}\n </IconButton>\n </Tooltip>\n </Box>\n </Grid>\n\n {showStats ? (\n <Box flexShrink={0}>\n <DiffBubble variant=\"ghost\" additions={additions} deletions={deletions} />\n </Box>\n ) : null}\n </Grid>\n );\n};\n","import { Stack } from \"@chakra-ui/react\";\nimport { EmptyState } from \"@/components/primitives/empty-state\";\nimport { ScrollArea } from \"@/components/primitives/scroll-area\";\n\nexport const DiffDrawerEmptyState = () => (\n <Stack h=\"full\" minH=\"0\" gap=\"0\" bg=\"bg\">\n <ScrollArea flex=\"1\" minH=\"0\" contentProps={{ p: \"xs\", spaceY: \"xs\" }}>\n <EmptyState title=\"No changes detected\" description=\"Make some changes to see the diff here.\" paddingY=\"sm\" />\n </ScrollArea>\n </Stack>\n);\n","import type { Diff } from \"./diff-card\";\nimport { isBinaryDiffPath, isImageDiffPath, isLargeDiffContent } from \"./diff-size\";\nimport { buildDiffViewData } from \"./diff-view-adapter\";\nimport type { DiffViewMode } from \"./types\";\n\nconst CARD_HEADER_HEIGHT = 34;\nconst CARD_BODY_LINE_HEIGHT = 18;\nconst HUNK_ROW_HEIGHT = 28;\nconst COLLAPSED_CARD_HEIGHT = 34;\nconst DEFERRED_BODY_HEIGHT = 88;\nconst IMAGE_BODY_HEIGHT = 338;\nconst ITEM_GAP_HEIGHT = 8;\n\ninterface EstimateDiffCardHeightInput {\n diff: Diff;\n isCollapsed: boolean;\n hasOptedIntoLargeDiff?: boolean;\n diffViewMode?: DiffViewMode;\n}\n\nconst deferredCardHeight = () => CARD_HEADER_HEIGHT + DEFERRED_BODY_HEIGHT + ITEM_GAP_HEIGHT;\n\n// Mirrors the branches DiffCardContent renders, so the virtualizer's estimate matches the DOM\n// before measureElement gets a chance to refine it.\nexport const estimateDiffCardHeight = (input: EstimateDiffCardHeightInput) => {\n const { diff, isCollapsed, hasOptedIntoLargeDiff = false, diffViewMode = \"unified\" } = input;\n\n if (isCollapsed) return COLLAPSED_CARD_HEIGHT + ITEM_GAP_HEIGHT;\n\n const hasDiffContent = diff.oldContent !== undefined || diff.newContent !== undefined;\n const filePath = diff.newPath ?? diff.oldPath ?? \"\";\n if (isImageDiffPath(filePath) && (diff.oldContent || diff.newContent)) {\n return CARD_HEADER_HEIGHT + IMAGE_BODY_HEIGHT + ITEM_GAP_HEIGHT;\n }\n if (isBinaryDiffPath(filePath)) return deferredCardHeight();\n if (!hasDiffContent) return deferredCardHeight();\n if (isLargeDiffContent(diff) && !hasOptedIntoLargeDiff) return deferredCardHeight();\n\n const { unifiedContentRows, splitContentRows, hunkRows } = buildDiffViewData({\n original: diff.oldContent ?? \"\",\n modified: diff.newContent ?? \"\",\n oldPath: diff.oldPath,\n newPath: diff.newPath,\n });\n const contentRows = diffViewMode === \"split\" ? splitContentRows : unifiedContentRows;\n if (contentRows === 0 && hunkRows === 0) return deferredCardHeight();\n\n const bodyHeight = contentRows * CARD_BODY_LINE_HEIGHT + hunkRows * HUNK_ROW_HEIGHT;\n return CARD_HEADER_HEIGHT + bodyHeight + ITEM_GAP_HEIGHT;\n};\n","import type { Diff } from \"./diff-card\";\n\ninterface SelectedExpansionCommand {\n action: string;\n id: number;\n path?: string;\n direction?: \"up\" | \"down\";\n}\n\ninterface ResolveSelectedScrollStateInput {\n diffs: Diff[];\n selectedDiffPath: string | null;\n collapsedPaths: Set<string>;\n expansionCommand: SelectedExpansionCommand | null;\n completedScrollCommandId: number | null;\n}\n\nconst getDiffPath = (diff: Diff) => diff.newPath ?? diff.oldPath ?? \"unknown\";\nconst PINNED_DIFF_LOOKBEHIND_COUNT = 24;\n\nexport const resolveSelectedScrollState = (input: ResolveSelectedScrollStateInput) => {\n const { diffs, selectedDiffPath, collapsedPaths, expansionCommand, completedScrollCommandId } = input;\n let selectedScrollPath = selectedDiffPath;\n let selectedScrollSourceKey = selectedDiffPath ? `selected:${selectedDiffPath}` : null;\n const selectedScrollCommandId = expansionCommand?.action === \"expand-selected\" ? expansionCommand.id : null;\n const hasCompletedSelectedScroll =\n selectedScrollCommandId !== null && completedScrollCommandId === selectedScrollCommandId;\n\n if (expansionCommand?.action === \"expand-selected\" && expansionCommand.path) {\n selectedScrollPath = expansionCommand.path;\n selectedScrollSourceKey = `command:${expansionCommand.id}:${expansionCommand.path}`;\n }\n\n let selectedScrollKey = selectedScrollSourceKey;\n if (selectedScrollPath && selectedScrollSourceKey) {\n const selectedScrollExpansionState = collapsedPaths.has(selectedScrollPath) ? \"collapsed\" : \"expanded\";\n selectedScrollKey = `${selectedScrollSourceKey}:${selectedScrollExpansionState}`;\n }\n\n const selectedScrollIndex = selectedScrollPath\n ? diffs.findIndex((diff) => getDiffPath(diff) === selectedScrollPath)\n : -1;\n const shouldPinSelectedScrollIndex =\n selectedScrollIndex >= 0 &&\n expansionCommand?.action === \"expand-selected\" &&\n expansionCommand.direction === \"up\" &&\n !hasCompletedSelectedScroll;\n\n return {\n selectedScrollPath,\n selectedScrollKey,\n selectedScrollCommandId,\n selectedScrollIndex,\n shouldPinSelectedScrollIndex,\n hasCompletedSelectedScroll,\n };\n};\n\nexport const includePinnedDiffIndexes = (input: {\n indexes: number[];\n selectedScrollIndex: number;\n shouldPinSelectedScrollIndex: boolean;\n}) => {\n const { indexes, selectedScrollIndex, shouldPinSelectedScrollIndex } = input;\n if (!shouldPinSelectedScrollIndex || indexes.includes(selectedScrollIndex)) return indexes;\n\n const pinnedStartIndex = Math.max(0, selectedScrollIndex - PINNED_DIFF_LOOKBEHIND_COUNT);\n const pinnedIndexes = Array.from(\n { length: selectedScrollIndex - pinnedStartIndex + 1 },\n (_, index) => pinnedStartIndex + index,\n );\n\n return Array.from(new Set([...indexes, ...pinnedIndexes])).sort((a, b) => a - b);\n};\n","import type { Virtualizer } from \"@tanstack/react-virtual\";\nimport { useLayoutEffect, useState } from \"react\";\nimport type { Diff } from \"./diff-card\";\nimport type { DiffExpansionCommand } from \"./diff-drawer\";\nimport { resolveSelectedScrollState } from \"./diff-drawer-scroll\";\n\ninterface UseSelectedDiffScrollInput {\n diffs: Diff[];\n selectedDiffPath: string | null;\n collapsedPaths: Set<string>;\n expansionCommand: DiffExpansionCommand | null;\n scrollRef: { current: HTMLDivElement | null };\n virtualizerRef: { current: Virtualizer<HTMLDivElement, Element> | null };\n suppressScrollAdjustRef: { current: boolean };\n}\n\n// Re-align for a few frames so the target settles as it and its neighbours measure, then latch the\n// command as done. Capped so a diff that never settles can't spin the animation loop.\nconst SETTLE_FRAME_COUNT = 3;\nconst MAX_ALIGNMENT_FRAMES = 12;\n\nconst getDiffPath = (diff: Diff) => diff.newPath ?? diff.oldPath ?? \"unknown\";\n\nexport const useSelectedDiffScroll = (input: UseSelectedDiffScrollInput) => {\n const {\n diffs,\n selectedDiffPath,\n collapsedPaths,\n expansionCommand,\n scrollRef,\n virtualizerRef,\n suppressScrollAdjustRef,\n } = input;\n const [completedScrollCommandId, setCompletedScrollCommandId] = useState<number | null>(null);\n const {\n selectedScrollPath,\n selectedScrollKey,\n selectedScrollCommandId,\n selectedScrollIndex,\n shouldPinSelectedScrollIndex,\n hasCompletedSelectedScroll,\n } = resolveSelectedScrollState({\n diffs,\n selectedDiffPath,\n collapsedPaths,\n expansionCommand,\n completedScrollCommandId,\n });\n\n useLayoutEffect(() => {\n if (!selectedScrollPath || !selectedScrollKey) return;\n if (hasCompletedSelectedScroll) return;\n // Selecting a collapsed diff expands it first (a sibling layout effect updates collapsedPaths and\n // re-runs this one). Wait for that: scrolling to a card that is about to grow lands on a stale\n // offset and snaps once it expands. Once expanded, its measured offset is stable.\n if (collapsedPaths.has(selectedScrollPath)) return;\n\n const index = diffs.findIndex((diff) => getDiffPath(diff) === selectedScrollPath);\n if (index < 0) return;\n\n const virtualizer = virtualizerRef.current;\n const scrollElement = scrollRef.current;\n if (!virtualizer || !scrollElement) return;\n\n const frameIds: number[] = [];\n let cancelledByUserScroll = false;\n // Drive the scroll from the virtualizer's measured card heights (not per-diff estimates) and hold\n // its keep-in-place adjustments off while we do, so a mid-list target lands where it actually is\n // instead of overshooting and snapping back — the \"wild jump\" when opening files further down.\n suppressScrollAdjustRef.current = true;\n const stopAligning = () => {\n suppressScrollAdjustRef.current = false;\n };\n const cancelSelectedScroll = () => {\n cancelledByUserScroll = true;\n stopAligning();\n if (selectedScrollCommandId !== null) {\n setCompletedScrollCommandId(selectedScrollCommandId);\n }\n };\n\n let alignmentFrames = 0;\n const alignSelectedDiff = () => {\n if (cancelledByUserScroll) return;\n virtualizer.scrollToIndex(index, { align: \"start\" });\n alignmentFrames += 1;\n if (alignmentFrames >= SETTLE_FRAME_COUNT && selectedScrollCommandId !== null) {\n stopAligning();\n setCompletedScrollCommandId(selectedScrollCommandId);\n return;\n }\n if (alignmentFrames < MAX_ALIGNMENT_FRAMES) {\n frameIds.push(requestAnimationFrame(alignSelectedDiff));\n return;\n }\n stopAligning();\n };\n\n scrollElement.addEventListener(\"wheel\", cancelSelectedScroll, { passive: true });\n scrollElement.addEventListener(\"touchmove\", cancelSelectedScroll, { passive: true });\n alignSelectedDiff();\n\n return () => {\n stopAligning();\n scrollElement.removeEventListener(\"wheel\", cancelSelectedScroll);\n scrollElement.removeEventListener(\"touchmove\", cancelSelectedScroll);\n for (const frameId of frameIds) {\n cancelAnimationFrame(frameId);\n }\n };\n }, [\n selectedScrollKey,\n selectedScrollPath,\n selectedScrollCommandId,\n hasCompletedSelectedScroll,\n diffs,\n collapsedPaths,\n scrollRef,\n virtualizerRef,\n suppressScrollAdjustRef,\n ]);\n\n return { selectedScrollIndex, shouldPinSelectedScrollIndex };\n};\n","import { Box, Stack } from \"@chakra-ui/react\";\nimport { defaultRangeExtractor, useVirtualizer, type Virtualizer } from \"@tanstack/react-virtual\";\nimport { useEffect, useLayoutEffect, useRef, useState } from \"react\";\nimport { ScrollArea } from \"@/components/primitives/scroll-area\";\nimport { type Diff, DiffCard } from \"./diff-card\";\nimport { DiffDrawerEmptyState } from \"./diff-drawer-empty-state\";\nimport { estimateDiffCardHeight } from \"./diff-drawer-height\";\nimport { includePinnedDiffIndexes } from \"./diff-drawer-scroll\";\nimport type { DiffViewMode } from \"./types\";\nimport { useSelectedDiffScroll } from \"./use-selected-diff-scroll\";\n\ninterface DiffDrawerProps {\n diffs: Diff[];\n selectedDiffPath?: string | null;\n onLoadDiff?: (path: string) => Promise<void>;\n onSelectDiffPath?: (path: string) => void;\n onExpansionStateChange?: (state: DiffDrawerExpansionState) => void;\n expansionCommand?: DiffExpansionCommand | null;\n diffViewMode?: DiffViewMode;\n}\n\nexport interface DiffExpansionCommand {\n action: \"expand\" | \"collapse\" | \"expand-selected\";\n id: number;\n path?: string;\n direction?: \"up\" | \"down\";\n}\n\nexport interface DiffDrawerExpansionState {\n allExpanded: boolean;\n allCollapsed: boolean;\n}\n\nexport { estimateDiffCardHeight } from \"./diff-drawer-height\";\nexport type { Diff };\n\nconst getDiffPath = (diff: Diff) => diff.newPath ?? diff.oldPath ?? \"unknown\";\n\nconst INITIAL_EXPANDED_DIFF_COUNT = 10;\nconst INITIAL_COLLAPSED_LINE_THRESHOLD = 100;\n\nexport const buildInitialCollapsedPaths = (diffs: Diff[]) => {\n if (diffs.length <= INITIAL_EXPANDED_DIFF_COUNT) return new Set<string>();\n\n return new Set(\n diffs\n .filter((diff, index) => {\n const lineCount = (diff.additions ?? 0) + (diff.deletions ?? 0);\n return index >= INITIAL_EXPANDED_DIFF_COUNT || lineCount > INITIAL_COLLAPSED_LINE_THRESHOLD;\n })\n .map((diff) => getDiffPath(diff)),\n );\n};\n\nexport const buildAllCollapsedPaths = (diffs: Diff[]) => new Set(diffs.map((diff) => getDiffPath(diff)));\n\nexport const toggleCollapsedPath = (collapsedPaths: Set<string>, path: string) => {\n const next = new Set(collapsedPaths);\n if (next.has(path)) {\n next.delete(path);\n } else {\n next.add(path);\n }\n return next;\n};\n\nexport const resolveCollapsedPathsForSelectedDiff = (\n diffs: Diff[],\n collapsedPaths: Set<string>,\n selectedDiffPath: string | null,\n) => {\n if (!selectedDiffPath) return collapsedPaths;\n if (!collapsedPaths.has(selectedDiffPath)) return collapsedPaths;\n if (!diffs.some((diff) => getDiffPath(diff) === selectedDiffPath)) return collapsedPaths;\n\n const next = new Set(collapsedPaths);\n next.delete(selectedDiffPath);\n return next;\n};\n\n// Expand the newly navigated-to diff and re-collapse the one the previous tree navigation expanded.\n// Clicking through the tree otherwise leaves a growing wall of expanded diffs; their measured heights\n// drift ever further from the scroll estimates, which is what makes the panel overshoot and jump.\n// Manual chevron toggles don't flow through here, so diffs the user opens by hand stay open.\nexport const resolveCollapsedPathsForNavigation = (\n diffs: Diff[],\n collapsedPaths: Set<string>,\n selectedDiffPath: string,\n previousNavigatedPath: string | null,\n) => {\n const expanded = resolveCollapsedPathsForSelectedDiff(diffs, collapsedPaths, selectedDiffPath);\n if (\n !previousNavigatedPath ||\n previousNavigatedPath === selectedDiffPath ||\n expanded.has(previousNavigatedPath) ||\n !diffs.some((diff) => getDiffPath(diff) === previousNavigatedPath)\n ) {\n return expanded;\n }\n\n const next = expanded === collapsedPaths ? new Set(collapsedPaths) : expanded;\n next.add(previousNavigatedPath);\n return next;\n};\n\nexport function DiffDrawer(props: DiffDrawerProps) {\n const {\n diffs,\n selectedDiffPath = null,\n onLoadDiff,\n onSelectDiffPath,\n onExpansionStateChange,\n expansionCommand = null,\n diffViewMode = \"unified\",\n } = props;\n const scrollRef = useRef<HTMLDivElement>(null);\n const reportedExpansionStateRef = useRef<DiffDrawerExpansionState | null>(null);\n // Populated after the virtualizer is created below so the scroll hook (which runs first) can drive\n // it from a layout effect. `suppressScrollAdjustRef` lets the hook freeze the virtualizer's\n // keep-in-place adjustments while it aligns the selected diff, so re-measuring off-screen cards\n // can't shove the scroll around mid-align.\n const virtualizerRef = useRef<Virtualizer<HTMLDivElement, Element> | null>(null);\n const suppressScrollAdjustRef = useRef(false);\n const lastNavigatedPathRef = useRef<string | null>(null);\n const [collapsedPaths, setCollapsedPaths] = useState<Set<string>>(() => buildInitialCollapsedPaths(diffs));\n const [largeDiffOptInPaths, setLargeDiffOptInPaths] = useState<Set<string>>(() => new Set());\n const { selectedScrollIndex, shouldPinSelectedScrollIndex } = useSelectedDiffScroll({\n diffs,\n selectedDiffPath,\n collapsedPaths,\n expansionCommand,\n scrollRef,\n virtualizerRef,\n suppressScrollAdjustRef,\n });\n\n const virtualizer = useVirtualizer({\n count: diffs.length,\n getScrollElement: () => scrollRef.current,\n estimateSize: (index) => {\n const diff = diffs[index];\n const path = getDiffPath(diff);\n return estimateDiffCardHeight({\n diff,\n isCollapsed: collapsedPaths.has(path),\n hasOptedIntoLargeDiff: largeDiffOptInPaths.has(path),\n diffViewMode,\n });\n },\n getItemKey: (index) => getDiffPath(diffs[index]),\n overscan: 3,\n rangeExtractor: (range) => {\n const indexes = defaultRangeExtractor(range);\n return includePinnedDiffIndexes({ indexes, selectedScrollIndex, shouldPinSelectedScrollIndex });\n },\n });\n virtualizer.shouldAdjustScrollPositionOnItemSizeChange = (_item, _delta, instance) =>\n !instance.isScrolling && !suppressScrollAdjustRef.current;\n virtualizerRef.current = virtualizer;\n\n useLayoutEffect(() => {\n if (!selectedDiffPath) return;\n\n setCollapsedPaths((prev) => resolveCollapsedPathsForSelectedDiff(diffs, prev, selectedDiffPath));\n }, [diffs, selectedDiffPath]);\n\n useLayoutEffect(() => {\n if (!expansionCommand) return;\n\n if (expansionCommand.action === \"expand-selected\") {\n const navigatedPath = expansionCommand.path;\n if (navigatedPath) {\n const previousNavigatedPath = lastNavigatedPathRef.current;\n lastNavigatedPathRef.current = navigatedPath;\n setCollapsedPaths((prev) =>\n resolveCollapsedPathsForNavigation(diffs, prev, navigatedPath, previousNavigatedPath),\n );\n }\n return;\n }\n\n // Expand/collapse all is an explicit user choice; don't let it re-collapse on the next navigation.\n lastNavigatedPathRef.current = null;\n setCollapsedPaths(expansionCommand.action === \"collapse\" ? buildAllCollapsedPaths(diffs) : new Set());\n }, [diffs, expansionCommand]);\n\n useEffect(() => {\n const expansionState = {\n allExpanded: collapsedPaths.size === 0,\n allCollapsed: diffs.length > 0 && diffs.every((diff) => collapsedPaths.has(getDiffPath(diff))),\n };\n const reportedExpansionState = reportedExpansionStateRef.current;\n if (\n reportedExpansionState?.allExpanded === expansionState.allExpanded &&\n reportedExpansionState.allCollapsed === expansionState.allCollapsed\n ) {\n return;\n }\n\n reportedExpansionStateRef.current = expansionState;\n onExpansionStateChange?.(expansionState);\n }, [collapsedPaths, diffs, onExpansionStateChange]);\n\n if (diffs.length === 0) return <DiffDrawerEmptyState />;\n\n const toggleExpanded = (path: string) => {\n setCollapsedPaths((prev) => toggleCollapsedPath(prev, path));\n };\n\n const showFullDiff = (path: string) => {\n setLargeDiffOptInPaths((prev) => {\n const next = new Set(prev);\n next.add(path);\n return next;\n });\n };\n\n const virtualItems = virtualizer.getVirtualItems();\n\n return (\n <Stack h=\"full\" minH=\"0\" gap=\"0\" bg=\"bg\">\n <Box position=\"relative\" flex=\"1\" minH=\"0\" bg=\"bg\">\n <ScrollArea\n position=\"absolute\"\n inset=\"0\"\n viewportRef={scrollRef}\n viewportProps={{ style: { overflowAnchor: \"none\" } }}\n contentProps={{ p: \"xs\" }}\n >\n <Box position=\"relative\" width=\"100%\" style={{ height: virtualizer.getTotalSize() }}>\n {virtualItems.map((virtualItem) => {\n const diff = diffs[virtualItem.index];\n const path = getDiffPath(diff);\n\n return (\n <Box\n key={virtualItem.key}\n data-index={virtualItem.index}\n ref={virtualizer.measureElement}\n position=\"absolute\"\n left=\"0\"\n width=\"100%\"\n pb=\"xs\"\n style={{ top: `${virtualItem.start}px` }}\n >\n <DiffCard\n key={path}\n diff={diff}\n isSelected={selectedDiffPath === path}\n isExpanded={!collapsedPaths.has(path)}\n onToggleExpanded={() => toggleExpanded(path)}\n onSelect={() => onSelectDiffPath?.(path)}\n onLoadDiff={onLoadDiff}\n hasOptedIntoLargeDiff={largeDiffOptInPaths.has(path)}\n onShowFullDiff={() => showFullDiff(path)}\n diffViewMode={diffViewMode}\n />\n </Box>\n );\n })}\n </Box>\n </ScrollArea>\n </Box>\n </Stack>\n );\n}\n","import type { ChangedFilesViewMode, ChangedFileTreeNode } from \"./types\";\n\nconst normalizeChangedFilePath = (path: string) =>\n path\n .split(\"/\")\n .map((segment) => segment.trim())\n .filter(Boolean)\n .join(\"/\");\n\nconst sortNodes = (nodes: ChangedFileTreeNode[]) => {\n nodes.sort((left, right) => {\n if (left.type !== right.type) return left.type === \"folder\" ? -1 : 1;\n return left.name.localeCompare(right.name);\n });\n\n nodes.forEach((node) => {\n if (node.children) sortNodes(node.children);\n });\n\n return nodes;\n};\n\nconst dedupePaths = (paths: string[]) => Array.from(new Set(paths.map(normalizeChangedFilePath).filter(Boolean)));\n\nconst buildFlatTree = (paths: string[]) =>\n dedupePaths(paths)\n .map((path) => ({ id: `file:${path}`, name: path, type: \"file\" }) satisfies ChangedFileTreeNode)\n .sort((left, right) => left.name.localeCompare(right.name));\n\nexport const buildChangedFilesTree = (paths: string[], mode: ChangedFilesViewMode): ChangedFileTreeNode[] => {\n if (mode === \"flat\") return buildFlatTree(paths);\n\n const treeById = new Map<string, ChangedFileTreeNode>();\n const rootNodes: ChangedFileTreeNode[] = [];\n\n dedupePaths(paths).forEach((path) => {\n const segments = path.split(\"/\");\n let parentPath = \"\";\n let parentNode: ChangedFileTreeNode | null = null;\n\n segments.forEach((segment, index) => {\n const currentPath = parentPath ? `${parentPath}/${segment}` : segment;\n const isFile = index === segments.length - 1;\n const nodeId = `${isFile ? \"file\" : \"folder\"}:${currentPath}`;\n const existingNode = treeById.get(nodeId);\n\n if (existingNode) {\n parentNode = existingNode;\n parentPath = currentPath;\n return;\n }\n\n const nextNode: ChangedFileTreeNode = {\n id: nodeId,\n name: segment,\n type: isFile ? \"file\" : \"folder\",\n ...(isFile ? {} : { children: [] }),\n };\n\n treeById.set(nodeId, nextNode);\n\n if (!parentNode) rootNodes.push(nextNode);\n else parentNode.children?.push(nextNode);\n\n parentNode = nextNode;\n parentPath = currentPath;\n });\n });\n\n return sortNodes(rootNodes);\n};\n\nexport const collectExpandedFolderIds = (nodes: ChangedFileTreeNode[]) => {\n const folderIds: string[] = [];\n\n const visit = (items: ChangedFileTreeNode[]) => {\n items.forEach((item) => {\n if (item.type !== \"folder\") return;\n folderIds.push(item.id);\n visit(item.children ?? []);\n });\n };\n\n visit(nodes);\n return folderIds;\n};\n\nconst collectNestedFileOrder = (nodes: ChangedFileTreeNode[]) => {\n const orderedPaths: string[] = [];\n\n const visit = (treeNodes: ChangedFileTreeNode[]) => {\n treeNodes.forEach((node) => {\n if (node.type === \"file\") {\n orderedPaths.push(node.id.replace(/^file:/, \"\"));\n return;\n }\n\n visit(node.children ?? []);\n });\n };\n\n visit(nodes);\n return orderedPaths;\n};\n\nexport const sortPathsByViewMode = (paths: string[], mode: ChangedFilesViewMode) => {\n if (mode === \"flat\") return [...paths].sort((left, right) => left.localeCompare(right));\n return collectNestedFileOrder(buildChangedFilesTree(paths, \"nested\"));\n};\n","import { create } from \"zustand\";\nimport type { ChangedFilesViewMode, DiffViewMode } from \"./types\";\n\ninterface DiffViewerState {\n isTreePanelOpen: boolean;\n viewMode: ChangedFilesViewMode;\n diffViewMode: DiffViewMode;\n searchQuery: string;\n selectedPath: string | null;\n expandedFolderIds: Set<string>;\n setTreePanelOpen: (open: boolean) => void;\n toggleTreePanel: () => void;\n setViewMode: (viewMode: ChangedFilesViewMode) => void;\n setDiffViewMode: (diffViewMode: DiffViewMode) => void;\n setSearchQuery: (searchQuery: string) => void;\n setSelectedPath: (selectedPath: string | null) => void;\n setExpandedFolderIds: (folderIds: string[]) => void;\n toggleFolder: (folderId: string) => void;\n expandAll: (folderIds: string[]) => void;\n collapseAll: () => void;\n}\n\nexport const useDiffViewerStore = create<DiffViewerState>((set) => ({\n isTreePanelOpen: true,\n viewMode: \"nested\",\n diffViewMode: \"unified\",\n searchQuery: \"\",\n selectedPath: null,\n expandedFolderIds: new Set(),\n setTreePanelOpen: (isTreePanelOpen) => set({ isTreePanelOpen }),\n toggleTreePanel: () => set((state) => ({ isTreePanelOpen: !state.isTreePanelOpen })),\n setViewMode: (viewMode) => set({ viewMode }),\n setDiffViewMode: (diffViewMode) => set({ diffViewMode }),\n setSearchQuery: (searchQuery) => set({ searchQuery }),\n setSelectedPath: (selectedPath) => set({ selectedPath }),\n setExpandedFolderIds: (folderIds) => set({ expandedFolderIds: new Set(folderIds) }),\n toggleFolder: (folderId) =>\n set((state) => {\n const expandedFolderIds = new Set(state.expandedFolderIds);\n if (expandedFolderIds.has(folderId)) expandedFolderIds.delete(folderId);\n else expandedFolderIds.add(folderId);\n return { expandedFolderIds };\n }),\n expandAll: (folderIds) => set({ expandedFolderIds: new Set(folderIds) }),\n collapseAll: () => set({ expandedFolderIds: new Set() }),\n}));\n","import { Box, IconButton, Menu } from \"@chakra-ui/react\";\nimport {\n Check,\n ChevronsDownUp,\n ChevronsUpDown,\n List,\n ListTree,\n PanelLeftClose,\n PanelLeftOpen,\n Rows2,\n Settings2,\n SquareSplitHorizontal,\n} from \"lucide-react\";\nimport type { ReactNode } from \"react\";\nimport { ListRow } from \"../list-row/list-row\";\nimport type { ChangedFilesViewMode, DiffViewMode } from \"./types\";\n\ninterface DiffViewerOptionsMenuProps {\n isTreePanelOpen: boolean;\n hasFilePaths: boolean;\n viewMode: ChangedFilesViewMode;\n diffViewMode: DiffViewMode;\n isExpandAllDisabled: boolean;\n isCollapseAllDisabled: boolean;\n onToggleTreePanel: () => void;\n onViewModeChange: (viewMode: ChangedFilesViewMode) => void;\n onDiffViewModeChange: (diffViewMode: DiffViewMode) => void;\n onExpandAll: () => void;\n onCollapseAll: () => void;\n}\n\ninterface DiffViewerMenuItemProps {\n id: string;\n label: string;\n icon: ReactNode;\n selected?: boolean;\n disabled?: boolean;\n onActivate: () => void;\n}\n\nconst SelectionIndicator = (props: { selected: boolean }) => (\n <Box w=\"14px\" flexShrink={0} display=\"flex\" justifyContent=\"center\">\n {props.selected ? <Check size={14} /> : null}\n </Box>\n);\n\nconst DiffViewerMenuItem = (props: DiffViewerMenuItemProps) => {\n const { id, label, icon, selected, disabled, onActivate } = props;\n\n return (\n <Menu.Item value={id} disabled={disabled} asChild>\n <ListRow\n asChild\n role={selected === undefined ? undefined : \"menuitemradio\"}\n aria-checked={selected}\n variant=\"full-width\"\n id={id}\n icon={icon}\n label={label}\n disabled={disabled}\n isSelected={selected}\n endContent={selected === undefined ? undefined : <SelectionIndicator selected={selected} />}\n onActivate={onActivate}\n />\n </Menu.Item>\n );\n};\n\nexport const DiffViewerOptionsMenu = (props: DiffViewerOptionsMenuProps) => {\n const {\n isTreePanelOpen,\n hasFilePaths,\n viewMode,\n diffViewMode,\n isExpandAllDisabled,\n isCollapseAllDisabled,\n onToggleTreePanel,\n onViewModeChange,\n onDiffViewModeChange,\n onExpandAll,\n onCollapseAll,\n } = props;\n\n return (\n <Menu.Root>\n <Menu.Trigger asChild>\n <IconButton aria-label=\"Diff view options\" variant=\"ghost\" size=\"sm\">\n <Settings2 size={14} />\n </IconButton>\n </Menu.Trigger>\n <Menu.Positioner>\n <Menu.Content minW=\"190px\" bg=\"bg\" p=\"0\" gap=\"0\">\n <DiffViewerMenuItem\n id=\"toggle-file-tree\"\n icon={isTreePanelOpen ? <PanelLeftClose size={14} /> : <PanelLeftOpen size={14} />}\n label={isTreePanelOpen ? \"Hide file tree\" : \"Show file tree\"}\n onActivate={onToggleTreePanel}\n />\n <Menu.Separator />\n {hasFilePaths ? (\n <>\n <DiffViewerMenuItem\n id=\"nested\"\n icon={<ListTree size={14} />}\n label=\"Nested\"\n selected={viewMode === \"nested\"}\n onActivate={() => onViewModeChange(\"nested\")}\n />\n <DiffViewerMenuItem\n id=\"flat\"\n icon={<List size={14} />}\n label=\"Flat\"\n selected={viewMode === \"flat\"}\n onActivate={() => onViewModeChange(\"flat\")}\n />\n <Menu.Separator />\n </>\n ) : null}\n <DiffViewerMenuItem\n id=\"unified\"\n icon={<Rows2 size={14} />}\n label=\"Unified\"\n selected={diffViewMode === \"unified\"}\n onActivate={() => onDiffViewModeChange(\"unified\")}\n />\n <DiffViewerMenuItem\n id=\"split\"\n icon={<SquareSplitHorizontal size={14} />}\n label=\"Split\"\n selected={diffViewMode === \"split\"}\n onActivate={() => onDiffViewModeChange(\"split\")}\n />\n <Menu.Separator />\n <DiffViewerMenuItem\n id=\"expand-all\"\n icon={<ChevronsUpDown size={14} />}\n label=\"Expand all\"\n disabled={isExpandAllDisabled}\n onActivate={onExpandAll}\n />\n <DiffViewerMenuItem\n id=\"collapse-all\"\n icon={<ChevronsDownUp size={14} />}\n label=\"Collapse all\"\n disabled={isCollapseAllDisabled}\n onActivate={onCollapseAll}\n />\n </Menu.Content>\n </Menu.Positioner>\n </Menu.Root>\n );\n};\n","import { Badge } from \"@chakra-ui/react\";\n\nconst changeLabels: Record<string, string> = {\n added: \"A\",\n copied: \"C\",\n deleted: \"D\",\n modified: \"M\",\n permissionChange: \"M\",\n renamed: \"R\",\n};\n\nconst changeColors: Record<string, string> = {\n added: \"green\",\n copied: \"purple\",\n deleted: \"red\",\n modified: \"blue\",\n permissionChange: \"yellow\",\n renamed: \"orange\",\n};\n\nconst changeSemanticStyles: Record<string, { color: string; backgroundColor: string }> = {\n added: { color: \"fg.success\", backgroundColor: \"bg.success\" },\n deleted: { color: \"fg.error\", backgroundColor: \"bg.error\" },\n};\n\nexport const FileChangeBadge = (props: { change: string }) => {\n const { change } = props;\n const colorProps = changeSemanticStyles[change] ?? { colorPalette: changeColors[change] ?? \"gray\" };\n\n return (\n <Badge size=\"xs\" variant=\"subtle\" flexShrink={0} {...colorProps}>\n {changeLabels[change] ?? change}\n </Badge>\n );\n};\n","import { Box, Icon, Input, InputGroup, Stack, Text } from \"@chakra-ui/react\";\nimport { FileText, Search } from \"lucide-react\";\nimport { useRef } from \"react\";\nimport { Header } from \"@/components/layout/header\";\nimport { EmptyState } from \"@/components/primitives/empty-state\";\nimport { ScrollArea } from \"@/components/primitives/scroll-area\";\nimport { TreeList } from \"../tree-list/tree-list\";\nimport type { TreeListNode } from \"../tree-list/tree-list.types\";\nimport { buildChangedFilesTree } from \"./build-changed-files-tree\";\nimport { FileChangeBadge } from \"./file-change-badge\";\nimport type { ChangedFilesViewMode, ChangedFileTreeNode, FileIconInfo } from \"./types\";\n\ninterface FileListPanelProps {\n paths: string[];\n selectedPath: string | null;\n viewMode: ChangedFilesViewMode;\n searchQuery: string;\n expandedFolderIds: Set<string>;\n onSelectPath: (path: string) => void;\n onSearchQueryChange: (value: string) => void;\n onToggleFolder: (id: string) => void;\n resolveFileIcon?: (path: string, options?: { isFolder?: boolean; isExpanded?: boolean }) => FileIconInfo | undefined;\n changeByPath?: Map<string, string>;\n}\n\nconst getFilePathParts = (filePath: string) => {\n const lastSlashIndex = filePath.lastIndexOf(\"/\");\n if (lastSlashIndex < 0) return { fileName: filePath, dirPath: \"\" };\n return { fileName: filePath.slice(lastSlashIndex + 1), dirPath: filePath.slice(0, lastSlashIndex) };\n};\n\nconst renderFileLabel = (node: ChangedFileTreeNode, viewMode: ChangedFilesViewMode, filePath: string) => {\n const { fileName, dirPath } = getFilePathParts(filePath);\n if (viewMode !== \"flat\" || !dirPath) return node.name;\n\n return (\n <Text textStyle=\"label/S/regular\" truncate>\n <Text as=\"span\" color=\"fg.default\">\n {fileName}\n </Text>{\" \"}\n <Text as=\"span\" color=\"fg.muted\">\n {dirPath}\n </Text>\n </Text>\n );\n};\n\nconst toTreeListNodes = (input: {\n nodes: ChangedFileTreeNode[];\n viewMode: ChangedFilesViewMode;\n onSelectPath: (path: string) => void;\n resolveFileIcon?: (path: string, options?: { isFolder?: boolean; isExpanded?: boolean }) => FileIconInfo | undefined;\n changeByPath?: Map<string, string>;\n}): TreeListNode[] => {\n const { nodes, viewMode, onSelectPath, resolveFileIcon, changeByPath } = input;\n\n return nodes.map((node) => {\n if (node.type === \"folder\") {\n return {\n id: node.id,\n label: node.name,\n isContainer: true,\n children: toTreeListNodes({\n nodes: node.children ?? [],\n viewMode,\n onSelectPath,\n resolveFileIcon,\n changeByPath,\n }),\n };\n }\n\n const filePath = node.id.replace(/^file:/, \"\");\n const fileIcon = resolveFileIcon?.(filePath) ?? { icon: <Icon as={FileText} boxSize=\"16px\" />, color: \"fg.subtle\" };\n const change = changeByPath?.get(filePath);\n return {\n id: node.id,\n label: renderFileLabel(node, viewMode, filePath),\n icon: fileIcon.icon,\n iconColor: fileIcon.color,\n endContent: change ? <FileChangeBadge change={change} /> : undefined,\n onActivate: () => onSelectPath(filePath),\n };\n });\n};\n\nexport const FileListPanel = (props: FileListPanelProps) => {\n const {\n paths,\n selectedPath,\n viewMode,\n searchQuery,\n expandedFolderIds,\n onSelectPath,\n onSearchQueryChange,\n onToggleFolder,\n resolveFileIcon,\n changeByPath,\n } = props;\n const scrollRef = useRef<HTMLDivElement>(null);\n const fileTree = buildChangedFilesTree(paths, viewMode);\n const treeNodes = toTreeListNodes({ nodes: fileTree, viewMode, onSelectPath, resolveFileIcon, changeByPath });\n const emptyTitle = searchQuery.trim() ? \"No matching files\" : \"No changed files\";\n\n return (\n <Stack h=\"full\" minH=\"0\" minW=\"0\" w=\"full\" gap=\"0\" overflow=\"hidden\" bg=\"bg\">\n <Header flexShrink={0} borderBottomWidth=\"1px\" borderColor=\"border.subtle\" bg=\"bg\">\n <InputGroup startElement={<Search size={14} />}>\n <Input\n size=\"sm\"\n variant=\"borderless\"\n aria-label=\"Search files\"\n placeholder=\"Search files\"\n value={searchQuery}\n onChange={(event) => onSearchQueryChange(event.target.value)}\n />\n </InputGroup>\n </Header>\n <ScrollArea\n flex=\"1\"\n minH=\"0\"\n minW=\"0\"\n bg=\"bg\"\n viewportRef={scrollRef}\n viewportProps={{ style: { overflowX: \"hidden\" } }}\n >\n {paths.length > 0 ? (\n <TreeList\n sections={[{ id: \"files\", nodes: treeNodes }]}\n expandedNodeIds={[...expandedFolderIds]}\n activeNodeId={selectedPath ? `file:${selectedPath}` : null}\n rowVariant=\"tree\"\n onToggleNode={onToggleFolder}\n virtualize\n scrollRef={scrollRef}\n />\n ) : (\n <Box px=\"xs\" py=\"xs\">\n <EmptyState title={emptyTitle} size=\"sm\" textAlign=\"left\" alignItems=\"flex-start\" />\n </Box>\n )}\n </ScrollArea>\n </Stack>\n );\n};\n","import { Box, Flex, HStack, Skeleton, Stack, Text } from \"@chakra-ui/react\";\nimport { useEffect, useState } from \"react\";\nimport { Header } from \"@/components/layout/header\";\nimport { ResizableSplitLayout } from \"@/components/layout/resizable-split-layout\";\nimport { EmptyState } from \"@/components/primitives/empty-state\";\nimport { buildChangedFilesTree, collectExpandedFolderIds, sortPathsByViewMode } from \"./build-changed-files-tree\";\nimport { DiffBubble } from \"./diff-bubble\";\nimport type { Diff } from \"./diff-card\";\nimport { DiffDrawer, type DiffDrawerExpansionState, type DiffExpansionCommand } from \"./diff-drawer\";\nimport { useDiffViewerStore } from \"./diff-viewer.store\";\nimport { DiffViewerOptionsMenu } from \"./diff-viewer-options-menu\";\nimport { FileListPanel } from \"./file-list-panel\";\nimport type { ChangedFilesViewMode, FileIconInfo } from \"./types\";\n\nexport interface DiffViewerProps {\n diffs: Diff[];\n changedFilePaths?: string[];\n defaultSelectedPath?: string | null;\n loading?: boolean;\n onLoadDiff?: (path: string) => Promise<void>;\n resolveFileIcon?: (path: string, options?: { isFolder?: boolean; isExpanded?: boolean }) => FileIconInfo | undefined;\n}\n\nconst getDiffPath = (diff: Diff) => diff.newPath ?? diff.oldPath ?? \"unknown\";\nconst buildChangeByPath = (diffs: Diff[]) => new Map(diffs.map((diff) => [getDiffPath(diff), diff.change]));\nconst sumDiffStats = (diffs: Diff[]) =>\n diffs.reduce(\n (total, diff) => ({\n additions: total.additions + (diff.additions ?? 0),\n deletions: total.deletions + (diff.deletions ?? 0),\n }),\n { additions: 0, deletions: 0 },\n );\n\nconst buildFilteredDiffs = (input: {\n diffs: Diff[];\n normalizedSearchQuery: string;\n viewMode: ChangedFilesViewMode;\n}) => {\n const { diffs, normalizedSearchQuery, viewMode } = input;\n const matchingDiffs = normalizedSearchQuery\n ? diffs.filter((diff) => getDiffPath(diff).toLowerCase().includes(normalizedSearchQuery))\n : diffs;\n const orderedPaths = sortPathsByViewMode(matchingDiffs.map(getDiffPath), viewMode);\n const orderByPath = new Map(orderedPaths.map((path, index) => [path, index]));\n\n return [...matchingDiffs].sort((left, right) => {\n const leftOrder = orderByPath.get(getDiffPath(left)) ?? Number.MAX_SAFE_INTEGER;\n const rightOrder = orderByPath.get(getDiffPath(right)) ?? Number.MAX_SAFE_INTEGER;\n return leftOrder - rightOrder;\n });\n};\n\nconst resolveSelectedPath = (preferredPaths: string[], fallbackPaths: string[]) =>\n preferredPaths[0] ?? fallbackPaths[0] ?? null;\n\nconst loadingDiffItems = [\"first\", \"second\", \"third\"] as const;\n\nconst DiffViewerLoading = () => (\n <Stack flex=\"1\" minH=\"0\" bg=\"bg\" p=\"xs\" gap=\"xs\" role=\"status\" aria-busy=\"true\" aria-label=\"Loading diff panel\">\n {loadingDiffItems.map((item) => (\n <Skeleton key={item} h=\"72px\" w=\"full\" flexShrink=\"0\" borderRadius=\"xs\" />\n ))}\n </Stack>\n);\n\nexport const DiffViewer = (props: DiffViewerProps) => {\n const { diffs, changedFilePaths, defaultSelectedPath = null, loading = false, onLoadDiff, resolveFileIcon } = props;\n const [diffExpansionCommand, setDiffExpansionCommand] = useState<DiffExpansionCommand | null>(null);\n const [diffExpansionState, setDiffExpansionState] = useState<DiffDrawerExpansionState>({\n allExpanded: false,\n allCollapsed: false,\n });\n const {\n isTreePanelOpen,\n viewMode,\n diffViewMode,\n searchQuery,\n selectedPath,\n expandedFolderIds,\n setTreePanelOpen,\n setViewMode,\n setDiffViewMode,\n setSearchQuery,\n setSelectedPath,\n setExpandedFolderIds,\n toggleFolder,\n expandAll,\n collapseAll,\n } = useDiffViewerStore();\n\n const diffPaths = diffs.map(getDiffPath);\n const filePaths = changedFilePaths ?? diffPaths;\n const normalizedSearchQuery = searchQuery.trim().toLowerCase();\n const filteredFilePaths = normalizedSearchQuery\n ? filePaths.filter((path) => path.toLowerCase().includes(normalizedSearchQuery))\n : filePaths;\n const filteredDiffs = buildFilteredDiffs({ diffs, normalizedSearchQuery, viewMode });\n const changeByPath = buildChangeByPath(diffs);\n const filteredDiffPaths = filteredDiffs.map(getDiffPath);\n const fileTree = buildChangedFilesTree(filteredFilePaths, viewMode);\n const folderIds = viewMode === \"nested\" ? collectExpandedFolderIds(fileTree) : [];\n const filteredFilePathKey = filteredFilePaths.join(\"\\0\");\n const filteredDiffPathKey = filteredDiffPaths.join(\"\\0\");\n const resolvedSelectedPath =\n selectedPath ?? defaultSelectedPath ?? resolveSelectedPath(filteredDiffPaths, filteredFilePaths);\n const hasDiffs = filteredDiffs.length > 0;\n const emptyDiffTitle = normalizedSearchQuery ? \"No matching changes\" : \"No changes\";\n const showDiffEmptyState = !loading && !hasDiffs;\n const totalDiff = sumDiffStats(filteredDiffs);\n const hasExpandableItems = folderIds.length > 0 || filteredDiffs.length > 0;\n const allFilesExpanded = folderIds.every((folderId) => expandedFolderIds.has(folderId));\n const allFilesCollapsed = folderIds.every((folderId) => !expandedFolderIds.has(folderId));\n const allDiffsExpanded = filteredDiffs.length === 0 || diffExpansionState.allExpanded;\n const allDiffsCollapsed = filteredDiffs.length === 0 || diffExpansionState.allCollapsed;\n const isExpandAllDisabled = !hasExpandableItems || (allFilesExpanded && allDiffsExpanded);\n const isCollapseAllDisabled = !hasExpandableItems || (allFilesCollapsed && allDiffsCollapsed);\n\n useEffect(() => {\n const filePaths = filteredFilePathKey ? filteredFilePathKey.split(\"\\0\") : [];\n const tree = buildChangedFilesTree(filePaths, viewMode);\n setExpandedFolderIds(viewMode === \"nested\" ? collectExpandedFolderIds(tree) : []);\n }, [filteredFilePathKey, setExpandedFolderIds, viewMode]);\n\n useEffect(() => {\n const diffPaths = filteredDiffPathKey ? filteredDiffPathKey.split(\"\\0\") : [];\n const filePaths = filteredFilePathKey ? filteredFilePathKey.split(\"\\0\") : [];\n if (resolvedSelectedPath && diffPaths.includes(resolvedSelectedPath)) return;\n setSelectedPath(resolveSelectedPath(diffPaths, filePaths));\n }, [filteredDiffPathKey, filteredFilePathKey, resolvedSelectedPath, setSelectedPath]);\n\n const expandAllFilesAndDiffs = () => {\n expandAll(folderIds);\n setDiffExpansionCommand((current) => ({ action: \"expand\", id: (current?.id ?? 0) + 1 }));\n };\n\n const collapseAllFilesAndDiffs = () => {\n collapseAll();\n setDiffExpansionCommand((current) => ({ action: \"collapse\", id: (current?.id ?? 0) + 1 }));\n };\n\n const selectChangedFilePath = (path: string) => {\n const currentIndex = resolvedSelectedPath ? filteredDiffPaths.indexOf(resolvedSelectedPath) : -1;\n const nextIndex = filteredDiffPaths.indexOf(path);\n const direction = currentIndex >= 0 && nextIndex >= 0 && nextIndex < currentIndex ? \"up\" : \"down\";\n\n setSelectedPath(path);\n setDiffExpansionCommand((current) => ({ action: \"expand-selected\", direction, id: (current?.id ?? 0) + 1, path }));\n };\n\n const diffPanel = (\n <Stack h=\"full\" minH=\"0\" minW=\"0\" flex=\"1\" bg=\"bg\" gap=\"0\">\n <Header variant=\"main\" borderBottomWidth=\"1px\" borderColor=\"border.subtle\" bg=\"bg\" justifyContent=\"space-between\">\n <HStack gap=\"xs\" minW=\"0\">\n <DiffViewerOptionsMenu\n isTreePanelOpen={isTreePanelOpen}\n hasFilePaths={filePaths.length > 0}\n viewMode={viewMode}\n diffViewMode={diffViewMode}\n isExpandAllDisabled={isExpandAllDisabled}\n isCollapseAllDisabled={isCollapseAllDisabled}\n onToggleTreePanel={() => setTreePanelOpen(!isTreePanelOpen)}\n onViewModeChange={setViewMode}\n onDiffViewModeChange={setDiffViewMode}\n onExpandAll={expandAllFilesAndDiffs}\n onCollapseAll={collapseAllFilesAndDiffs}\n />\n {showDiffEmptyState ? (\n <Text textStyle=\"label/S/regular\" color=\"fg.muted\" truncate>\n {emptyDiffTitle}\n </Text>\n ) : null}\n </HStack>\n <DiffBubble variant=\"ghost\" size=\"small\" additions={totalDiff.additions} deletions={totalDiff.deletions} />\n </Header>\n {loading ? (\n <DiffViewerLoading />\n ) : hasDiffs ? (\n <Box flex=\"1\" minH=\"0\">\n <DiffDrawer\n diffs={filteredDiffs}\n selectedDiffPath={resolvedSelectedPath}\n onLoadDiff={onLoadDiff}\n onSelectDiffPath={setSelectedPath}\n onExpansionStateChange={setDiffExpansionState}\n expansionCommand={diffExpansionCommand}\n diffViewMode={diffViewMode}\n />\n </Box>\n ) : (\n <Box flex=\"1\" minH=\"0\" px=\"md\" py=\"lg\" display=\"flex\" alignItems=\"center\" justifyContent=\"center\" bg=\"bg\">\n <EmptyState title={emptyDiffTitle} />\n </Box>\n )}\n </Stack>\n );\n\n return (\n <Flex flex=\"1\" minH=\"0\" minW=\"0\" bg=\"bg\" gap=\"0\" data-testid=\"diff-viewer\">\n <ResizableSplitLayout\n flex=\"1\"\n minH=\"0\"\n minW=\"0\"\n resizablePanel={\n <FileListPanel\n paths={filteredFilePaths}\n selectedPath={resolvedSelectedPath}\n viewMode={viewMode}\n searchQuery={searchQuery}\n expandedFolderIds={expandedFolderIds}\n onSelectPath={selectChangedFilePath}\n onSearchQueryChange={setSearchQuery}\n onToggleFolder={toggleFolder}\n resolveFileIcon={resolveFileIcon}\n changeByPath={changeByPath}\n />\n }\n contentPanel={diffPanel}\n collapsed={!isTreePanelOpen}\n defaultSizePx={288}\n minSizePx={224}\n contentMinSizePx={320}\n resizeLabel=\"Resize file list panel\"\n onCollapsedChange={(collapsed) => setTreePanelOpen(!collapsed)}\n />\n </Flex>\n );\n};\n"],"names":["createCodeEditorPreloader","initialize","initialization","preloadCodeEditor","then","module","initializeMonaco","customTheme","base","inherit","rules","colors","isMonacoTheme","value","EDITOR_THEME_NAME","useEditorTheme","$","_c","themePreference","themePreferences","useThemePreference","t0","t1","theme","id","preference","find","monacoTheme","useApplyEditorTheme","editorTheme","monacoRef","useRef","monaco","current","editor","defineTheme","setTheme","useEffect","t2","monaco_0","configureCodeEditor","addCommand","KeyMod","CtrlCmd","KeyCode","KeyS","getAction","run","CodeEditor","props","defaultCode","code","showLineNumbers","isEditable","language","onChange","disableScroll","undefined","applyEditorTheme","Symbol","for","enabled","t3","t4","scrollbar","vertical","horizontal","useShadows","alwaysConsumeMouseWheel","scrollBeyondLastLine","mouseWheelScrollSensitivity","overviewRulerLanes","t5","tabSize","minimap","fontSize","readOnly","lineNumbers","options","t6","t7","t8","t9","Editor","CodeDiffEditor","original","modified","originalEditable","renderSideBySide","useInlineViewWhenSpaceIsTooSmall","_","jsx","DiffEditor","imagePreviewMimeTypes","avif","bmp","gif","heic","ico","jpeg","jpg","png","tif","tiff","webp","imagePreviewExtensions","Object","keys","getFileExtension","filePath","extension","split","pop","toLowerCase","getImagePreviewMimeType","isImagePreviewPath","LARGE_DIFF_LINE_THRESHOLD","generatedDiffFileNames","Set","binaryDiffExtensions","getDiffLineCount","input","additions","deletions","isLargeDiffContent","isGeneratedDiffPath","path","fileName","has","endsWith","isBinaryDiffPath","ext","length","isImageDiffPath","createDiffCardBodyModel","diff","oldContent","newContent","isLargeDiff","hasOptedIntoLargeDiff","onShowFullDiff","diffViewMode","buildViewData","oldImageSrc","getImagePreviewSource","newImageSrc","kind","oldSrc","newSrc","isImage","renderedLineCount","diffViewData","buildDiffViewData","oldPath","newPath","sideBySide","content","startsWith","DiffCardBody","model","Box","ImageDiffPreview","BinaryDiffPlaceholder","LargeDiffPlaceholder","md","ImageDiffPanel","Grid","label","src","fallback","Text","Image","jsxs","Button","EmptyState","title","DeferredDiffLoad","actionLabel","isLoadingDiff","onAction","loadingDiffContentRows","LoadingDiffContent","Stack","map","_temp","row","Skeleton","buildDeferredDiffLoadState","isGeneratedDiff","loadError","canLoadDiff","onLoadDiff","DiffCardContent","isExpanded","isBinaryDiff","hasDiffContent","shouldAutoLoadDiff","shouldAutoLoadDiffContent","isSelected","requestedPath","resolveRequestedDiffPath","shouldShowDiffStats","resolveDiffFilePath","useDiffContentLoader","setLoadingDiff","useState","setRequestedPath","setLoadError","loadDiff","Boolean","DiffCard","onToggleExpanded","onSelect","blocksDiffContentLoad","borderColor","DiffCardHeader","t10","t11","t12","showStats","isCopied","setIsCopied","copyResetTimeoutRef","window","clearTimeout","navigator","clipboard","writeText","setTimeout","copyFilePath","bg","event","stopPropagation","ChevronDown","ChevronRight","IconButton","t13","change","t14","t15","t16","t17","opacity","pointerEvents","t18","t19","t20","event_0","t21","Check","Copy","t22","t23","Tooltip","t24","t25","t26","DiffBubble","t27","DiffDrawerEmptyState","ScrollArea","p","spaceY","CARD_HEADER_HEIGHT","CARD_BODY_LINE_HEIGHT","HUNK_ROW_HEIGHT","COLLAPSED_CARD_HEIGHT","DEFERRED_BODY_HEIGHT","IMAGE_BODY_HEIGHT","ITEM_GAP_HEIGHT","deferredCardHeight","estimateDiffCardHeight","isCollapsed","unifiedContentRows","splitContentRows","hunkRows","contentRows","bodyHeight","getDiffPath","PINNED_DIFF_LOOKBEHIND_COUNT","resolveSelectedScrollState","diffs","selectedDiffPath","collapsedPaths","expansionCommand","completedScrollCommandId","selectedScrollPath","selectedScrollSourceKey","selectedScrollCommandId","action","hasCompletedSelectedScroll","selectedScrollKey","selectedScrollExpansionState","selectedScrollIndex","findIndex","shouldPinSelectedScrollIndex","direction","includePinnedDiffIndexes","indexes","includes","pinnedStartIndex","Math","max","pinnedIndexes","Array","from","index","sort","a","b","SETTLE_FRAME_COUNT","MAX_ALIGNMENT_FRAMES","useSelectedDiffScroll","scrollRef","virtualizerRef","suppressScrollAdjustRef","setCompletedScrollCommandId","virtualizer","scrollElement","frameIds","cancelledByUserScroll","stopAligning","cancelSelectedScroll","alignmentFrames","alignSelectedDiff","scrollToIndex","align","push","requestAnimationFrame","addEventListener","passive","removeEventListener","frameId","cancelAnimationFrame","useLayoutEffect","INITIAL_EXPANDED_DIFF_COUNT","INITIAL_COLLAPSED_LINE_THRESHOLD","buildInitialCollapsedPaths","filter","lineCount","buildAllCollapsedPaths","toggleCollapsedPath","next","delete","add","resolveCollapsedPathsForSelectedDiff","some","resolveCollapsedPathsForNavigation","previousNavigatedPath","expanded","DiffDrawer","onSelectDiffPath","onExpansionStateChange","reportedExpansionStateRef","lastNavigatedPathRef","setCollapsedPaths","largeDiffOptInPaths","setLargeDiffOptInPaths","useVirtualizer","count","getScrollElement","estimateSize","getItemKey","overscan","rangeExtractor","range","defaultRangeExtractor","shouldAdjustScrollPositionOnItemSizeChange","_item","_delta","instance","isScrolling","prev","navigatedPath","expansionState","allExpanded","size","allCollapsed","every","reportedExpansionState","toggleExpanded","showFullDiff","virtualItems","getVirtualItems","style","overflowAnchor","height","getTotalSize","virtualItem","measureElement","top","start","key","normalizeChangedFilePath","segment","trim","join","sortNodes","nodes","left","right","type","name","localeCompare","forEach","node","children","dedupePaths","paths","buildFlatTree","buildChangedFilesTree","mode","treeById","Map","rootNodes","segments","parentPath","parentNode","currentPath","isFile","nodeId","existingNode","get","nextNode","set","collectExpandedFolderIds","folderIds","visit","items","item","collectNestedFileOrder","orderedPaths","treeNodes","replace","sortPathsByViewMode","useDiffViewerStore","create","isTreePanelOpen","viewMode","searchQuery","selectedPath","expandedFolderIds","setTreePanelOpen","toggleTreePanel","state","setViewMode","setDiffViewMode","setSearchQuery","setSelectedPath","setExpandedFolderIds","toggleFolder","folderId","expandAll","collapseAll","SelectionIndicator","selected","DiffViewerMenuItem","icon","disabled","onActivate","ListRow","DiffViewerOptionsMenu","hasFilePaths","isExpandAllDisabled","isCollapseAllDisabled","onToggleTreePanel","onViewModeChange","onDiffViewModeChange","onExpandAll","onCollapseAll","Menu","Settings2","PanelLeftClose","PanelLeftOpen","Fragment","ListTree","List","Rows2","SquareSplitHorizontal","ChevronsUpDown","ChevronsDownUp","changeLabels","added","copied","deleted","permissionChange","renamed","changeColors","changeSemanticStyles","color","backgroundColor","FileChangeBadge","colorPalette","colorProps","Badge","getFilePathParts","lastSlashIndex","lastIndexOf","dirPath","slice","renderFileLabel","toTreeListNodes","onSelectPath","resolveFileIcon","changeByPath","isContainer","fileIcon","Icon","FileText","iconColor","endContent","FileListPanel","onSearchQueryChange","onToggleFolder","fileTree","emptyTitle","Search","target","Header","InputGroup","Input","overflowX","TreeList","buildChangeByPath","sumDiffStats","reduce","total","buildFilteredDiffs","normalizedSearchQuery","matchingDiffs","orderByPath","leftOrder","Number","MAX_SAFE_INTEGER","rightOrder","resolveSelectedPath","preferredPaths","fallbackPaths","loadingDiffItems","DiffViewerLoading","DiffViewer","changedFilePaths","defaultSelectedPath","loading","diffExpansionCommand","setDiffExpansionCommand","diffExpansionState","setDiffExpansionState","allFilesExpanded","emptyDiffTitle","filePaths","filteredDiffPathKey","filteredDiffPaths","filteredDiffs","filteredFilePathKey","filteredFilePaths","hasDiffs","hasExpandableItems","resolvedSelectedPath","showDiffEmptyState","totalDiff","diffPaths","folderId_0","allFilesCollapsed","allDiffsExpanded","allDiffsCollapsed","filePaths_0","tree","diffPaths_0","filePaths_1","_temp2","expandAllFilesAndDiffs","_temp3","collapseAllFilesAndDiffs","path_0","currentIndex","indexOf","nextIndex","current_1","selectChangedFilePath","HStack","diffPanel","collapsed","Flex","ResizableSplitLayout","current_0"],"mappings":"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"}