@pstdio/ui 0.41.0 → 0.42.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 (85) hide show
  1. package/dist/{MermaidComponent-BCiI63_G.js → MermaidComponent-D7vhkpka.js} +2 -2
  2. package/dist/{MermaidComponent-BCiI63_G.js.map → MermaidComponent-D7vhkpka.js.map} +1 -1
  3. package/dist/alert-MQ47wy7f.js +388 -0
  4. package/dist/alert-MQ47wy7f.js.map +1 -0
  5. package/dist/chat-ui.d.ts +36 -5
  6. package/dist/chat-ui.js +1777 -1422
  7. package/dist/chat-ui.js.map +1 -1
  8. package/dist/collection-view-fields-D3cysHNT.d.ts +232 -0
  9. package/dist/collection-view-grouping-D4nZk8-3.js +90 -0
  10. package/dist/collection-view-grouping-D4nZk8-3.js.map +1 -0
  11. package/dist/collection-view-search-CpjJy76w.js +1973 -0
  12. package/dist/collection-view-search-CpjJy76w.js.map +1 -0
  13. package/dist/collection-view.d.ts +4 -0
  14. package/dist/collection-view.js +2 -0
  15. package/dist/{data-table-stats-row-EiTEONdY.js → data-table-stats-row-64magT2g.js} +2 -2
  16. package/dist/{data-table-stats-row-EiTEONdY.js.map → data-table-stats-row-64magT2g.js.map} +1 -1
  17. package/dist/data-table.d.ts +3 -1
  18. package/dist/data-table.js +279 -277
  19. package/dist/data-table.js.map +1 -1
  20. package/dist/{diff-drawer-BwZBOObe.js → diff-drawer-IYpQ-QQK.js} +192 -191
  21. package/dist/diff-drawer-IYpQ-QQK.js.map +1 -0
  22. package/dist/{diff-viewer-kOOd7C7h.js → diff-viewer-C-0VAt9P.js} +4 -4
  23. package/dist/{diff-viewer-kOOd7C7h.js.map → diff-viewer-C-0VAt9P.js.map} +1 -1
  24. package/dist/diff.js +2 -2
  25. package/dist/{display-sort-control-DPxc0e5z.js → display-sort-control-f3rbILsV.js} +87 -86
  26. package/dist/{display-sort-control-DPxc0e5z.js.map → display-sort-control-f3rbILsV.js.map} +1 -1
  27. package/dist/drop-indicator-HjlBSIeV.js +27 -0
  28. package/dist/drop-indicator-HjlBSIeV.js.map +1 -0
  29. package/dist/edit-mode-data-table-DnMB2jiy.js +1449 -0
  30. package/dist/edit-mode-data-table-DnMB2jiy.js.map +1 -0
  31. package/dist/host-storage-BIo5azql.js +31 -0
  32. package/dist/host-storage-BIo5azql.js.map +1 -0
  33. package/dist/host-storage-J0089Hyk.d.ts +17 -0
  34. package/dist/icon-options-Tt6Wzhtv.js +308 -0
  35. package/dist/icon-options-Tt6Wzhtv.js.map +1 -0
  36. package/dist/{index-C9mywhyX.d.ts → index-B79hwNcB.d.ts} +17 -1
  37. package/dist/index-CKsd23jv.d.ts +80 -0
  38. package/dist/{index-D3UJyWWh.d.ts → index-ICoad2I_.d.ts} +4 -223
  39. package/dist/index.d.ts +22 -6
  40. package/dist/index.js +1174 -1112
  41. package/dist/index.js.map +1 -1
  42. package/dist/kanban-renderer.d.ts +2 -1
  43. package/dist/kanban-renderer.js +531 -528
  44. package/dist/kanban-renderer.js.map +1 -1
  45. package/dist/list-row-Z4SHkseA.js +1195 -0
  46. package/dist/list-row-Z4SHkseA.js.map +1 -0
  47. package/dist/markdown-editor-Dd4mor7l.js +3236 -0
  48. package/dist/markdown-editor-Dd4mor7l.js.map +1 -0
  49. package/dist/number-input-7K66wnSC.js +63 -0
  50. package/dist/number-input-7K66wnSC.js.map +1 -0
  51. package/dist/param-editor-Dnix-fJo.js +225 -0
  52. package/dist/param-editor-Dnix-fJo.js.map +1 -0
  53. package/dist/param-editor-field-B3vLST-B.js +2394 -0
  54. package/dist/param-editor-field-B3vLST-B.js.map +1 -0
  55. package/dist/param-editor.js +4 -2
  56. package/dist/prism-OG4H7Hu4.js +334 -0
  57. package/dist/prism-OG4H7Hu4.js.map +1 -0
  58. package/dist/queued-follow-up-Bj_vtMgd.js +208 -0
  59. package/dist/queued-follow-up-Bj_vtMgd.js.map +1 -0
  60. package/dist/rich-text-BgEnAHr2.js +1160 -0
  61. package/dist/rich-text-BgEnAHr2.js.map +1 -0
  62. package/dist/rich-text.d.ts +1 -1
  63. package/dist/rich-text.js +4 -2
  64. package/dist/terminal.js +1 -1
  65. package/dist/{theme-at0rtSnX.js → theme-CMJdH59Z.js} +224 -90
  66. package/dist/theme-CMJdH59Z.js.map +1 -0
  67. package/dist/theme.js +1 -1
  68. package/dist/tree-list-jarhD31R.js +1652 -0
  69. package/dist/tree-list-jarhD31R.js.map +1 -0
  70. package/dist/use-virtualizer-uj43XjBp.js +10 -0
  71. package/dist/use-virtualizer-uj43XjBp.js.map +1 -0
  72. package/dist/{host-storage-DP0RLj4i.d.ts → workspace-badge-BKtB805G.d.ts} +6 -16
  73. package/package.json +6 -2
  74. package/dist/chat-question-bubble-w2vMbFsS.js +0 -68
  75. package/dist/chat-question-bubble-w2vMbFsS.js.map +0 -1
  76. package/dist/diff-drawer-BwZBOObe.js.map +0 -1
  77. package/dist/list-row-DM0DiIrN.js +0 -1167
  78. package/dist/list-row-DM0DiIrN.js.map +0 -1
  79. package/dist/prism-JVIsQMoJ.js +0 -1029
  80. package/dist/prism-JVIsQMoJ.js.map +0 -1
  81. package/dist/rich-text-DM24VNQZ.js +0 -10447
  82. package/dist/rich-text-DM24VNQZ.js.map +0 -1
  83. package/dist/theme-at0rtSnX.js.map +0 -1
  84. package/dist/tree-list-Cqgl8mnN.js +0 -1621
  85. package/dist/tree-list-Cqgl8mnN.js.map +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"diff-drawer-IYpQ-QQK.js","names":["Box","Button","Grid","Image","Text","EmptyState","Diff","DiffEditor","getDiffLineCount","isBinaryDiffPath","isImageDiffPath","BuiltDiffViewData","buildDiffViewData","DiffViewMode","DiffCardBodyProps","diff","filePath","oldContent","newContent","isLargeDiff","hasOptedIntoLargeDiff","onShowFullDiff","diffViewMode","DiffCardBodyModelInput","buildViewData","createDiffCardBodyModel","input","oldImageSrc","getImagePreviewSource","newImageSrc","kind","const","oldSrc","newSrc","isImage","renderedLineCount","diffViewData","original","modified","oldPath","newPath","sideBySide","content","startsWith","DiffCardBody","props","$","_c","t0","undefined","t1","model","t2","t3","t4","t5","t6","ImageDiffPreviewProps","ImageDiffPreview","Symbol","for","base","md","ImageDiffPanelProps","label","src","fallback","ImageDiffPanel","LargeDiffPlaceholderProps","LargeDiffPlaceholder","BinaryDiffPlaceholderProps","BinaryDiffPlaceholder","title","TestDiffViewData","_c","EmptyState","Box","Button","Skeleton","Stack","EmptyState","DeferredDiffLoadProps","title","actionLabel","isLoadingDiff","onAction","DeferredDiffLoad","props","$","_c","t0","t1","loadingDiffContentRows","const","LoadingDiffContent","Symbol","for","map","_temp","row","_c","EmptyState","Diff","DiffCardBody","DeferredDiffLoad","LoadingDiffContent","DiffViewMode","DiffCardContentProps","diff","filePath","oldContent","newContent","isExpanded","isLargeDiff","isGeneratedDiff","isBinaryDiff","hasDiffContent","canLoadDiff","shouldAutoLoadDiff","loadError","isLoadingDiff","onLoadDiff","Promise","hasOptedIntoLargeDiff","onShowFullDiff","diffViewMode","DeferredDiffLoadStateInput","buildDeferredDiffLoadState","input","title","actionLabel","undefined","onAction","DiffCardContent","props","$","_c","t0","t1","t2","Symbol","for","_c","Box","Grid","IconButton","Text","Check","ChevronDown","ChevronRight","Copy","useEffect","useRef","useState","Tooltip","DiffBubble","DiffCardContent","isBinaryDiffPath","isGeneratedDiffPath","isImageDiffPath","isLargeDiffContent","DiffViewMode","Diff","change","oldPath","newPath","oldContent","newContent","additions","deletions","DiffCardProps","diff","isSelected","isExpanded","onToggleExpanded","onSelect","onLoadDiff","path","Promise","hasOptedIntoLargeDiff","onShowFullDiff","diffViewMode","DiffCardHeaderProps","shouldAutoLoadDiffContent","input","hasDiffContent","isLargeDiff","isGeneratedDiff","isBinaryDiff","requestedPath","filePath","resolveRequestedDiffPath","shouldShowDiffStats","resolveDiffFilePath","useDiffContentLoader","isLoadingDiff","setLoadingDiff","setRequestedPath","loadError","setLoadError","loadDiff","shouldAutoLoadDiff","current","Boolean","DiffCard","props","$","_c","t0","t1","t2","t3","undefined","t4","blocksDiffContentLoad","t5","t6","t7","t8","Symbol","for","borderColor","t9","t10","t11","t12","DiffCardHeader","showStats","isCopied","setIsCopied","copyResetTimeoutRef","window","clearTimeout","navigator","clipboard","writeText","setTimeout","copyFilePath","bg","event","stopPropagation","t13","t14","t15","t16","t17","t18","t19","opacity","pointerEvents","t20","t21","t22","event_0","t23","t24","t25","t26","t27","t28","t29","_c","Tooltip","Stack","EmptyState","ScrollArea","DiffDrawerEmptyState","$","_c","t0","Symbol","for","p","spaceY","_c","ScrollArea","EmptyState","Diff","isBinaryDiffPath","isImageDiffPath","isLargeDiffContent","buildDiffViewData","DiffViewMode","CARD_HEADER_HEIGHT","CARD_BODY_LINE_HEIGHT","HUNK_ROW_HEIGHT","COLLAPSED_CARD_HEIGHT","DEFERRED_BODY_HEIGHT","IMAGE_BODY_HEIGHT","ITEM_GAP_HEIGHT","EstimateDiffCardHeightInput","diff","isCollapsed","hasOptedIntoLargeDiff","diffViewMode","deferredCardHeight","estimateDiffCardHeight","input","hasDiffContent","oldContent","undefined","newContent","filePath","newPath","oldPath","unifiedContentRows","splitContentRows","hunkRows","original","modified","contentRows","bodyHeight","Diff","SelectedExpansionCommand","action","id","path","direction","ResolveSelectedScrollStateInput","diffs","selectedDiffPath","collapsedPaths","Set","expansionCommand","completedScrollCommandId","getDiffPath","diff","newPath","oldPath","PINNED_DIFF_LOOKBEHIND_COUNT","resolveSelectedScrollState","input","selectedScrollPath","selectedScrollSourceKey","selectedScrollCommandId","hasCompletedSelectedScroll","selectedScrollKey","selectedScrollExpansionState","has","selectedScrollIndex","findIndex","shouldPinSelectedScrollIndex","includePinnedDiffIndexes","indexes","includes","pinnedStartIndex","Math","max","pinnedIndexes","Array","from","length","_","index","sort","a","b","getDiffPath","Virtualizer","useLayoutEffect","useState","Diff","DiffExpansionCommand","resolveSelectedScrollState","UseSelectedDiffScrollInput","diffs","selectedDiffPath","collapsedPaths","Set","expansionCommand","scrollRef","current","HTMLDivElement","virtualizerRef","Element","suppressScrollAdjustRef","SETTLE_FRAME_COUNT","MAX_ALIGNMENT_FRAMES","getDiffPath","diff","newPath","oldPath","useSelectedDiffScroll","input","$","_c","completedScrollCommandId","setCompletedScrollCommandId","t0","selectedScrollPath","selectedScrollKey","selectedScrollCommandId","selectedScrollIndex","shouldPinSelectedScrollIndex","hasCompletedSelectedScroll","t1","t2","has","index","findIndex","virtualizer","scrollElement","frameIds","cancelledByUserScroll","stopAligning","cancelSelectedScroll","alignmentFrames","alignSelectedDiff","scrollToIndex","align","push","requestAnimationFrame","addEventListener","passive","removeEventListener","frameId","cancelAnimationFrame","t3","getDiffPath","_c","Box","Stack","defaultRangeExtractor","Virtualizer","useEffect","useLayoutEffect","useRef","useState","ScrollArea","useVirtualizer","Diff","DiffCard","DiffDrawerEmptyState","estimateDiffCardHeight","includePinnedDiffIndexes","DiffViewMode","useSelectedDiffScroll","DiffDrawerProps","diffs","selectedDiffPath","onLoadDiff","path","Promise","onSelectDiffPath","onExpansionStateChange","state","DiffDrawerExpansionState","expansionCommand","DiffExpansionCommand","diffViewMode","action","id","direction","allExpanded","allCollapsed","getDiffPath","diff","newPath","oldPath","INITIAL_EXPANDED_DIFF_COUNT","INITIAL_COLLAPSED_LINE_THRESHOLD","buildInitialCollapsedPaths","length","Set","filter","index","lineCount","additions","deletions","map","buildAllCollapsedPaths","toggleCollapsedPath","collapsedPaths","next","has","delete","add","resolveCollapsedPathsForSelectedDiff","some","resolveCollapsedPathsForNavigation","previousNavigatedPath","expanded","DiffDrawer","props","scrollRef","HTMLDivElement","reportedExpansionStateRef","virtualizerRef","Element","suppressScrollAdjustRef","lastNavigatedPathRef","setCollapsedPaths","largeDiffOptInPaths","setLargeDiffOptInPaths","selectedScrollIndex","shouldPinSelectedScrollIndex","virtualizer","count","getScrollElement","current","estimateSize","isCollapsed","hasOptedIntoLargeDiff","getItemKey","overscan","rangeExtractor","range","indexes","shouldAdjustScrollPositionOnItemSizeChange","_item","_delta","instance","isScrolling","prev","navigatedPath","expansionState","size","every","reportedExpansionState","toggleExpanded","showFullDiff","virtualItems","getVirtualItems","style","overflowAnchor","p","height","getTotalSize","virtualItem","key","measureElement","top","start","useVirtualizer","ScrollArea","Tooltip$1","useVirtualizer$1","EmptyState$1","DiffBubble","isGeneratedDiffPath","getDiffLineCount","isLargeDiffContent","isBinaryDiffPath","buildDiffViewData","DiffEditor","createDiffCardBodyModel","input","filePath","oldImageSrc","getImagePreviewSource","oldContent","newImageSrc","newContent","isImageDiffPath","isLargeDiff","hasOptedIntoLargeDiff","diff","buildViewData","diffViewMode","content","DiffCardBody","$","c","t0","props","t1","onShowFullDiff","model","t2","t3","ImageDiffPreview","t4","BinaryDiffPlaceholder","t5","LargeDiffPlaceholder","t6","Box","oldSrc","ImageDiffPanel","newSrc","Grid","label","Text","fallback","src","Image","Button","title","isImage","DeferredDiffLoad","actionLabel","isLoadingDiff","onAction","loadingDiffContentRows","LoadingDiffContent","Stack","_temp","Skeleton","row","buildDeferredDiffLoadState","canLoadDiff","onLoadDiff","isGeneratedDiff","loadError","DiffCardContent","isExpanded","isBinaryDiff","hasDiffContent","shouldAutoLoadDiff","shouldAutoLoadDiffContent","isSelected","requestedPath","resolveRequestedDiffPath","shouldShowDiffStats","resolveDiffFilePath","useDiffContentLoader","setLoadingDiff","useState","setRequestedPath","setLoadError","loadDiff","useEffect","current","DiffCard","blocksDiffContentLoad","t7","t8","t9","onToggleExpanded","DiffCardHeader","t10","t11","t12","onSelect","additions","deletions","showStats","isCopied","setIsCopied","copyResetTimeoutRef","useRef","copyFilePath","event","jsx","ChevronDown","ChevronRight","IconButton","t13","t14","t15","t16","t17","t18","t19","t20","t21","t22","event_0","t23","Check","Copy","t24","t25","t26","t27","t28","t29","DiffDrawerEmptyState","ScrollArea$1","CARD_HEADER_HEIGHT","CARD_BODY_LINE_HEIGHT","HUNK_ROW_HEIGHT","ITEM_GAP_HEIGHT","deferredCardHeight","estimateDiffCardHeight","isCollapsed","contentRows","splitContentRows","unifiedContentRows","hunkRows","getDiffPath$2","PINNED_DIFF_LOOKBEHIND_COUNT","resolveSelectedScrollState","selectedScrollPath","selectedDiffPath","selectedScrollSourceKey","selectedScrollCommandId","expansionCommand","hasCompletedSelectedScroll","completedScrollCommandId","selectedScrollKey","selectedScrollExpansionState","collapsedPaths","selectedScrollIndex","diffs","shouldPinSelectedScrollIndex","includePinnedDiffIndexes","indexes","pinnedStartIndex","pinnedIndexes","index","a","b","SETTLE_FRAME_COUNT","MAX_ALIGNMENT_FRAMES","getDiffPath$1","useSelectedDiffScroll","setCompletedScrollCommandId","scrollRef","suppressScrollAdjustRef","virtualizerRef","virtualizer","scrollElement","frameIds","cancelledByUserScroll","stopAligning","cancelSelectedScroll","alignmentFrames","alignSelectedDiff","frameId","useLayoutEffect","getDiffPath","INITIAL_EXPANDED_DIFF_COUNT","INITIAL_COLLAPSED_LINE_THRESHOLD","buildInitialCollapsedPaths","lineCount","buildAllCollapsedPaths","toggleCollapsedPath","next","path","resolveCollapsedPathsForSelectedDiff","resolveCollapsedPathsForNavigation","expanded","previousNavigatedPath","DiffDrawer","reportedExpansionStateRef","lastNavigatedPathRef","setCollapsedPaths","largeDiffOptInPaths","setLargeDiffOptInPaths","index_0","defaultRangeExtractor","range","instance","prev","navigatedPath","prev_0","expansionState","diff_0","reportedExpansionState","onExpansionStateChange","toggleExpanded","prev_1","path_0","showFullDiff","prev_2","path_1","virtualItems","diff_1","virtualItem","path_2","onSelectDiffPath"],"sources":["../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"],"sourcesContent":["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 )}\n {model.kind === \"image\" && <ImageDiffPreview oldSrc={model.oldSrc} newSrc={model.newSrc} />}\n {model.kind === \"binary\" && <BinaryDiffPlaceholder isImage={model.isImage} />}\n {model.kind === \"placeholder\" && (\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 )}\n {diff.change === \"deleted\" && (\n <Text as=\"span\" color=\"fg.muted\" textDecoration=\"line-through\" textStyle=\"sm\">\n {filePath}\n </Text>\n )}\n {diff.change !== \"renamed\" && diff.change !== \"deleted\" && (\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, type Virtualizer } from \"@tanstack/react-virtual\";\nimport { useEffect, useLayoutEffect, useRef, useState } from \"react\";\nimport { ScrollArea } from \"@/components/primitives/scroll-area\";\nimport { useVirtualizer } from \"@/utils/use-virtualizer\";\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\nexport interface 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"],"mappings":"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"}
@@ -1,10 +1,10 @@
1
1
  import { t as e } from "./scroll-area-Cr1lNXAr.js";
2
- import { s as t, t as n } from "./list-row-DM0DiIrN.js";
3
- import { i as r, t as i } from "./tree-list-Cqgl8mnN.js";
2
+ import { s as t, t as n } from "./list-row-Z4SHkseA.js";
3
+ import { r, t as i } from "./tree-list-jarhD31R.js";
4
4
  import { t as a } from "./empty-state-3mVV_pV-.js";
5
5
  import { t as o } from "./diff-bubble-DewUd_2w.js";
6
6
  import { n as s, t as c } from "./file-change-badge-0QFNv82B.js";
7
- import { DiffDrawer as l } from "./diff-drawer-BwZBOObe.js";
7
+ import { DiffDrawer as l } from "./diff-drawer-IYpQ-QQK.js";
8
8
  import { Box as u, Flex as d, HStack as f, Icon as p, IconButton as ee, Input as m, InputGroup as h, Menu as g, Skeleton as _, Stack as te, Text as v } from "@chakra-ui/react";
9
9
  import { c as ne } from "react/compiler-runtime";
10
10
  import { Fragment as y, jsx as b, jsxs as x } from "react/jsx-runtime";
@@ -571,4 +571,4 @@ function ge(e) {
571
571
  //#endregion
572
572
  export { q as DiffViewer };
573
573
 
574
- //# sourceMappingURL=diff-viewer-kOOd7C7h.js.map
574
+ //# sourceMappingURL=diff-viewer-C-0VAt9P.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"diff-viewer-kOOd7C7h.js","names":["ChangedFilesViewMode","ChangedFileTreeNode","normalizeChangedFilePath","path","split","map","segment","trim","filter","Boolean","join","sortNodes","nodes","sort","left","right","type","name","localeCompare","forEach","node","children","dedupePaths","paths","Array","from","Set","buildFlatTree","id","buildChangedFilesTree","mode","treeById","Map","rootNodes","segments","parentPath","parentNode","index","currentPath","isFile","length","nodeId","existingNode","get","nextNode","set","push","collectExpandedFolderIds","folderIds","visit","items","item","collectNestedFileOrder","orderedPaths","treeNodes","replace","sortPathsByViewMode","Box","IconButton","Menu","Check","ChevronsDownUp","ChevronsUpDown","List","ListTree","PanelLeftClose","PanelLeftOpen","Rows2","Settings2","SquareSplitHorizontal","ReactNode","ListRow","ChangedFilesViewMode","DiffViewMode","DiffViewerOptionsMenuProps","isTreePanelOpen","hasFilePaths","viewMode","diffViewMode","isExpandAllDisabled","isCollapseAllDisabled","onToggleTreePanel","onViewModeChange","onDiffViewModeChange","onExpandAll","onCollapseAll","DiffViewerMenuItemProps","id","label","icon","selected","disabled","onActivate","SelectionIndicator","props","$","_c","t0","t1","DiffViewerMenuItem","undefined","t2","t3","DiffViewerOptionsMenu","Symbol","for","t4","t5","t6","t7","t8","t9","t10","t11","t12","t13","t14","t15","t16","t17","t18","t19","_c","_Fragment","Box","Icon","Input","InputGroup","Stack","Text","FileText","Search","useRef","Header","EmptyState","ScrollArea","TreeList","TreeListNode","buildChangedFilesTree","FileChangeBadge","ChangedFilesViewMode","ChangedFileTreeNode","FileIconInfo","FileListPanelProps","paths","selectedPath","viewMode","searchQuery","expandedFolderIds","Set","onSelectPath","path","onSearchQueryChange","value","onToggleFolder","id","resolveFileIcon","options","isFolder","isExpanded","changeByPath","Map","getFilePathParts","filePath","lastSlashIndex","lastIndexOf","fileName","dirPath","slice","FlatFileLabelProps","FlatFileLabel","props","$","_c","t0","t1","t2","toTreeListNodes","input","nodes","map","node","type","label","name","isContainer","children","replace","fileIcon","icon","color","change","get","iconColor","endContent","undefined","onActivate","FileListPanel","scrollRef","fileTree","treeNodes","emptyTitle","trim","Symbol","for","event","target","t3","t4","style","overflowX","t5","length","t6","_c","ScrollArea","EmptyState","Box","Flex","HStack","Skeleton","Stack","Text","useEffect","useState","Header","ResizableSplitLayout","EmptyState","buildChangedFilesTree","collectExpandedFolderIds","sortPathsByViewMode","DiffBubble","Diff","DiffDrawer","DiffDrawerExpansionState","DiffExpansionCommand","useDiffViewerStore","DiffViewerOptionsMenu","FileListPanel","ChangedFilesViewMode","FileIconInfo","DiffViewerProps","diffs","changedFilePaths","defaultSelectedPath","loading","onLoadDiff","path","Promise","resolveFileIcon","options","isFolder","isExpanded","getDiffPath","diff","newPath","oldPath","buildChangeByPath","Map","map","change","sumDiffStats","reduce","total","additions","deletions","buildFilteredDiffs","input","normalizedSearchQuery","viewMode","matchingDiffs","filter","toLowerCase","includes","orderedPaths","orderByPath","index","sort","left","right","leftOrder","get","Number","MAX_SAFE_INTEGER","rightOrder","resolveSelectedPath","preferredPaths","fallbackPaths","loadingDiffItems","const","DiffViewerLoading","$","_c","t0","Symbol","for","_temp","DiffViewer","props","t1","undefined","diffExpansionCommand","setDiffExpansionCommand","t2","allExpanded","allCollapsed","diffExpansionState","setDiffExpansionState","isTreePanelOpen","diffViewMode","searchQuery","selectedPath","expandedFolderIds","setTreePanelOpen","setViewMode","setDiffViewMode","setSearchQuery","setSelectedPath","setExpandedFolderIds","toggleFolder","expandAll","collapseAll","allFilesExpanded","changeByPath","emptyDiffTitle","filePaths","filteredDiffPathKey","filteredDiffPaths","filteredDiffs","filteredFilePathKey","filteredFilePaths","folderIds","hasDiffs","hasExpandableItems","resolvedSelectedPath","showDiffEmptyState","t3","totalDiff","diffPaths","trim","t4","fileTree","join","length","t5","folderId","has","every","t6","folderId_0","allFilesCollapsed","allDiffsExpanded","allDiffsCollapsed","isExpandAllDisabled","isCollapseAllDisabled","filePaths_0","split","tree","t7","diffPaths_0","filePaths_1","t8","_temp2","expandAllFilesAndDiffs","t9","_temp3","collapseAllFilesAndDiffs","t10","path_0","currentIndex","indexOf","nextIndex","direction","current_1","action","id","current","selectChangedFilePath","t11","t12","t13","t14","t15","t16","t17","t18","t19","t20","t21","diffPanel","t22","t23","t24","collapsed","t25","item","current_0","_c","EmptyState","ScrollArea$1","Header","ListRow","ResizableSplitLayout","TreeList","EmptyState$1","DiffBubble","useDiffViewerStore","FileChangeBadge","normalizeChangedFilePath","path","segment","sortNodes","nodes","left","right","node","dedupePaths","paths","buildFlatTree","buildChangedFilesTree","mode","treeById","rootNodes","segments","parentPath","parentNode","currentPath","isFile","index","nodeId","existingNode","nextNode","collectExpandedFolderIds","folderIds","visit","item","collectNestedFileOrder","orderedPaths","sortPathsByViewMode","SelectionIndicator","$","c","t0","props","Check","t1","Box","DiffViewerMenuItem","selected","t2","disabled","icon","id","label","onActivate","t3","Menu","DiffViewerOptionsMenu","IconButton","Settings2","isTreePanelOpen","jsx","PanelLeftClose","PanelLeftOpen","onToggleTreePanel","t4","t5","hasFilePaths","onViewModeChange","viewMode","Fragment","ListTree","List","t6","Rows2","t7","diffViewMode","t8","onDiffViewModeChange","t9","t10","SquareSplitHorizontal","t11","t12","t13","t14","t15","ChevronsUpDown","t16","isExpandAllDisabled","onExpandAll","t17","ChevronsDownUp","t18","isCollapseAllDisabled","onCollapseAll","t19","getFilePathParts","lastSlashIndex","filePath","FlatFileLabel","fileName","Text","dirPath","toTreeListNodes","input","fileIcon","resolveFileIcon","Icon","FileText","change","changeByPath","onSelectPath","FileListPanel","scrollRef","useRef","treeNodes","emptyTitle","searchQuery","Search","onSearchQueryChange","event","InputGroup","Input","expandedFolderIds","onToggleFolder","selectedPath","Stack","getDiffPath","diff","buildChangeByPath","diffs","sumDiffStats","total","buildFilteredDiffs","matchingDiffs","normalizedSearchQuery","orderByPath","resolveSelectedPath","preferredPaths","fallbackPaths","loadingDiffItems","DiffViewerLoading","_temp","DiffViewer","defaultSelectedPath","loading","diffExpansionCommand","setDiffExpansionCommand","useState","diffExpansionState","setDiffExpansionState","allFilesExpanded","emptyDiffTitle","filePaths","filteredDiffPathKey","filteredDiffPaths","filteredDiffs","filteredFilePathKey","filteredFilePaths","hasDiffs","hasExpandableItems","resolvedSelectedPath","showDiffEmptyState","totalDiff","changedFilePaths","diffPaths","fileTree","folderId","folderId_0","allFilesCollapsed","allDiffsExpanded","allDiffsCollapsed","setExpandedFolderIds","tree","useEffect","setSelectedPath","diffPaths_0","filePaths_1","expandAll","_temp2","expandAllFilesAndDiffs","collapseAll","_temp3","collapseAllFilesAndDiffs","currentIndex","nextIndex","path_0","direction","current_1","selectChangedFilePath","setTreePanelOpen","setDiffViewMode","setViewMode","HStack","onLoadDiff","DiffDrawer","t20","t21","diffPanel","t22","setSearchQuery","toggleFolder","t23","t24","collapsed","t25","Flex","Skeleton","current","current_0"],"sources":["../src/components/diff-viewer/build-changed-files-tree.ts","../src/components/diff-viewer/diff-viewer-options-menu.tsx","../src/components/diff-viewer/file-list-panel.tsx","../src/components/diff-viewer/diff-viewer.tsx"],"sourcesContent":["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 { 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 { 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\ninterface FlatFileLabelProps {\n fileName: string;\n dirPath: string;\n}\n\nconst FlatFileLabel = (props: FlatFileLabelProps) => {\n const { fileName, dirPath } = props;\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 { fileName, dirPath } = getFilePathParts(filePath);\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: viewMode === \"flat\" && dirPath ? <FlatFileLabel fileName={fileName} dirPath={dirPath} /> : node.name,\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 && <DiffViewerLoading />}\n {!loading && 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 {!loading && !hasDiffs && (\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 separator=\"line\"\n onCollapsedChange={(collapsed) => setTreePanelOpen(!collapsed)}\n />\n </Flex>\n );\n};\n"],"mappings":"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"}
1
+ {"version":3,"file":"diff-viewer-C-0VAt9P.js","names":["ChangedFilesViewMode","ChangedFileTreeNode","normalizeChangedFilePath","path","split","map","segment","trim","filter","Boolean","join","sortNodes","nodes","sort","left","right","type","name","localeCompare","forEach","node","children","dedupePaths","paths","Array","from","Set","buildFlatTree","id","buildChangedFilesTree","mode","treeById","Map","rootNodes","segments","parentPath","parentNode","index","currentPath","isFile","length","nodeId","existingNode","get","nextNode","set","push","collectExpandedFolderIds","folderIds","visit","items","item","collectNestedFileOrder","orderedPaths","treeNodes","replace","sortPathsByViewMode","Box","IconButton","Menu","Check","ChevronsDownUp","ChevronsUpDown","List","ListTree","PanelLeftClose","PanelLeftOpen","Rows2","Settings2","SquareSplitHorizontal","ReactNode","ListRow","ChangedFilesViewMode","DiffViewMode","DiffViewerOptionsMenuProps","isTreePanelOpen","hasFilePaths","viewMode","diffViewMode","isExpandAllDisabled","isCollapseAllDisabled","onToggleTreePanel","onViewModeChange","onDiffViewModeChange","onExpandAll","onCollapseAll","DiffViewerMenuItemProps","id","label","icon","selected","disabled","onActivate","SelectionIndicator","props","$","_c","t0","t1","DiffViewerMenuItem","undefined","t2","t3","DiffViewerOptionsMenu","Symbol","for","t4","t5","t6","t7","t8","t9","t10","t11","t12","t13","t14","t15","t16","t17","t18","t19","_c","_Fragment","Box","Icon","Input","InputGroup","Stack","Text","FileText","Search","useRef","Header","EmptyState","ScrollArea","TreeList","TreeListNode","buildChangedFilesTree","FileChangeBadge","ChangedFilesViewMode","ChangedFileTreeNode","FileIconInfo","FileListPanelProps","paths","selectedPath","viewMode","searchQuery","expandedFolderIds","Set","onSelectPath","path","onSearchQueryChange","value","onToggleFolder","id","resolveFileIcon","options","isFolder","isExpanded","changeByPath","Map","getFilePathParts","filePath","lastSlashIndex","lastIndexOf","fileName","dirPath","slice","FlatFileLabelProps","FlatFileLabel","props","$","_c","t0","t1","t2","toTreeListNodes","input","nodes","map","node","type","label","name","isContainer","children","replace","fileIcon","icon","color","change","get","iconColor","endContent","undefined","onActivate","FileListPanel","scrollRef","fileTree","treeNodes","emptyTitle","trim","Symbol","for","event","target","t3","t4","style","overflowX","t5","length","t6","_c","ScrollArea","EmptyState","Box","Flex","HStack","Skeleton","Stack","Text","useEffect","useState","Header","ResizableSplitLayout","EmptyState","buildChangedFilesTree","collectExpandedFolderIds","sortPathsByViewMode","DiffBubble","Diff","DiffDrawer","DiffDrawerExpansionState","DiffExpansionCommand","useDiffViewerStore","DiffViewerOptionsMenu","FileListPanel","ChangedFilesViewMode","FileIconInfo","DiffViewerProps","diffs","changedFilePaths","defaultSelectedPath","loading","onLoadDiff","path","Promise","resolveFileIcon","options","isFolder","isExpanded","getDiffPath","diff","newPath","oldPath","buildChangeByPath","Map","map","change","sumDiffStats","reduce","total","additions","deletions","buildFilteredDiffs","input","normalizedSearchQuery","viewMode","matchingDiffs","filter","toLowerCase","includes","orderedPaths","orderByPath","index","sort","left","right","leftOrder","get","Number","MAX_SAFE_INTEGER","rightOrder","resolveSelectedPath","preferredPaths","fallbackPaths","loadingDiffItems","const","DiffViewerLoading","$","_c","t0","Symbol","for","_temp","DiffViewer","props","t1","undefined","diffExpansionCommand","setDiffExpansionCommand","t2","allExpanded","allCollapsed","diffExpansionState","setDiffExpansionState","isTreePanelOpen","diffViewMode","searchQuery","selectedPath","expandedFolderIds","setTreePanelOpen","setViewMode","setDiffViewMode","setSearchQuery","setSelectedPath","setExpandedFolderIds","toggleFolder","expandAll","collapseAll","allFilesExpanded","changeByPath","emptyDiffTitle","filePaths","filteredDiffPathKey","filteredDiffPaths","filteredDiffs","filteredFilePathKey","filteredFilePaths","folderIds","hasDiffs","hasExpandableItems","resolvedSelectedPath","showDiffEmptyState","t3","totalDiff","diffPaths","trim","t4","fileTree","join","length","t5","folderId","has","every","t6","folderId_0","allFilesCollapsed","allDiffsExpanded","allDiffsCollapsed","isExpandAllDisabled","isCollapseAllDisabled","filePaths_0","split","tree","t7","diffPaths_0","filePaths_1","t8","_temp2","expandAllFilesAndDiffs","t9","_temp3","collapseAllFilesAndDiffs","t10","path_0","currentIndex","indexOf","nextIndex","direction","current_1","action","id","current","selectChangedFilePath","t11","t12","t13","t14","t15","t16","t17","t18","t19","t20","t21","diffPanel","t22","t23","t24","collapsed","t25","item","current_0","_c","EmptyState","ScrollArea$1","Header","ListRow","TreeList","EmptyState$1","DiffBubble","useDiffViewerStore","FileChangeBadge","normalizeChangedFilePath","path","segment","sortNodes","nodes","left","right","node","dedupePaths","paths","buildFlatTree","buildChangedFilesTree","mode","treeById","rootNodes","segments","parentPath","parentNode","currentPath","isFile","index","nodeId","existingNode","nextNode","collectExpandedFolderIds","folderIds","visit","item","collectNestedFileOrder","orderedPaths","sortPathsByViewMode","SelectionIndicator","$","c","t0","props","Check","t1","Box","DiffViewerMenuItem","selected","t2","disabled","icon","id","label","onActivate","t3","Menu","DiffViewerOptionsMenu","IconButton","Settings2","isTreePanelOpen","jsx","PanelLeftClose","PanelLeftOpen","onToggleTreePanel","t4","t5","hasFilePaths","onViewModeChange","viewMode","Fragment","ListTree","List","t6","Rows2","t7","diffViewMode","t8","onDiffViewModeChange","t9","t10","SquareSplitHorizontal","t11","t12","t13","t14","t15","ChevronsUpDown","t16","isExpandAllDisabled","onExpandAll","t17","ChevronsDownUp","t18","isCollapseAllDisabled","onCollapseAll","t19","getFilePathParts","lastSlashIndex","filePath","FlatFileLabel","fileName","Text","dirPath","toTreeListNodes","input","fileIcon","resolveFileIcon","Icon","FileText","change","changeByPath","onSelectPath","FileListPanel","scrollRef","useRef","treeNodes","emptyTitle","searchQuery","Search","onSearchQueryChange","event","InputGroup","Input","expandedFolderIds","onToggleFolder","selectedPath","Stack","getDiffPath","diff","buildChangeByPath","diffs","sumDiffStats","total","buildFilteredDiffs","matchingDiffs","normalizedSearchQuery","orderByPath","resolveSelectedPath","preferredPaths","fallbackPaths","loadingDiffItems","DiffViewerLoading","_temp","DiffViewer","defaultSelectedPath","loading","diffExpansionCommand","setDiffExpansionCommand","useState","diffExpansionState","setDiffExpansionState","allFilesExpanded","emptyDiffTitle","filePaths","filteredDiffPathKey","filteredDiffPaths","filteredDiffs","filteredFilePathKey","filteredFilePaths","hasDiffs","hasExpandableItems","resolvedSelectedPath","showDiffEmptyState","totalDiff","changedFilePaths","diffPaths","fileTree","folderId","folderId_0","allFilesCollapsed","allDiffsExpanded","allDiffsCollapsed","setExpandedFolderIds","tree","useEffect","setSelectedPath","diffPaths_0","filePaths_1","expandAll","_temp2","expandAllFilesAndDiffs","collapseAll","_temp3","collapseAllFilesAndDiffs","currentIndex","nextIndex","path_0","direction","current_1","selectChangedFilePath","setTreePanelOpen","setDiffViewMode","setViewMode","HStack","onLoadDiff","DiffDrawer","t20","t21","diffPanel","t22","setSearchQuery","toggleFolder","t23","t24","collapsed","t25","Flex","ResizableSplitLayout","Skeleton","current","current_0"],"sources":["../src/components/diff-viewer/build-changed-files-tree.ts","../src/components/diff-viewer/diff-viewer-options-menu.tsx","../src/components/diff-viewer/file-list-panel.tsx","../src/components/diff-viewer/diff-viewer.tsx"],"sourcesContent":["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 { 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 { 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\ninterface FlatFileLabelProps {\n fileName: string;\n dirPath: string;\n}\n\nconst FlatFileLabel = (props: FlatFileLabelProps) => {\n const { fileName, dirPath } = props;\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 { fileName, dirPath } = getFilePathParts(filePath);\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: viewMode === \"flat\" && dirPath ? <FlatFileLabel fileName={fileName} dirPath={dirPath} /> : node.name,\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 && <DiffViewerLoading />}\n {!loading && 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 {!loading && !hasDiffs && (\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 separator=\"line\"\n onCollapsedChange={(collapsed) => setTreePanelOpen(!collapsed)}\n />\n </Flex>\n );\n};\n"],"mappings":"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"}
package/dist/diff.js CHANGED
@@ -1,4 +1,4 @@
1
- import { t as e } from "./theme-at0rtSnX.js";
1
+ import { t as e } from "./theme-CMJdH59Z.js";
2
2
  import { r as t } from "./theme-preference-BV4cbJNB.js";
3
3
  import { t as n } from "./diff-bubble-DewUd_2w.js";
4
4
  import { i as r, r as i, t as a } from "./diff-size-Dydn_Uw5.js";
@@ -154,7 +154,7 @@ var _ = (e, t) => {
154
154
  onMount: v
155
155
  })
156
156
  }), t[9] = s, t[10] = r, t[11] = g, t[12] = n, t[13] = _, t[14] = v, t[15] = y) : y = t[15], y;
157
- }, A = d(() => import("./diff-drawer-BwZBOObe.js").then((e) => ({ default: e.DiffDrawer }))), j = d(() => import("./diff-viewer-kOOd7C7h.js").then((e) => ({ default: e.DiffViewer }))), M = (e) => {
157
+ }, A = d(() => import("./diff-drawer-IYpQ-QQK.js").then((e) => ({ default: e.DiffDrawer }))), j = d(() => import("./diff-viewer-C-0VAt9P.js").then((e) => ({ default: e.DiffViewer }))), M = (e) => {
158
158
  let t = c(2), n;
159
159
  return t[0] === e ? n = t[1] : (n = /* @__PURE__ */ l(u, {
160
160
  fallback: null,