)]}'
{
  "log": [
    {
      "commit": "26f3f34c25e21717001f0230d1abe7debbc5e0c0",
      "tree": "0ba518a643b4d165dd871b4a2cd28e5f096a017f",
      "parents": [
        "938d2dcde4aaea8119e1c09ffa453de48560dd57"
      ],
      "author": {
        "name": "David Crawshaw",
        "email": "david@zentus.com",
        "time": "Sat Jun 14 19:58:32 2025 +0000"
      },
      "committer": {
        "name": "David Crawshaw",
        "email": "david@zentus.com",
        "time": "Sat Jun 14 16:20:07 2025 -0700"
      },
      "message": "webui: implement multi-file diff view with continuous scrolling\n\nReplace file selector with GitHub PR-style continuous scrolling through\nmultiple files in a single view, improving diff navigation experience\nwhile maintaining all Monaco editor features.\n\nProblem Analysis:\nThe existing diff view required users to navigate between files using a\ndropdown selector and Previous/Next buttons. This created friction when\nreviewing multi-file changes and broke the natural scrolling flow that\nusers expect from GitHub PR views or other modern diff interfaces.\n\nThe limitation was that Monaco doesn\u0027t provide a built-in multi-file diff\nwidget, requiring custom implementation with multiple IStandaloneDiffEditor\ninstances properly configured for stacking and auto-sizing.\n\nImplementation Changes:\n\n1. Multi-File Layout (sketch-diff2-view.ts):\n   - Replaced sketch-diff-file-picker with simple file count display\n   - Implemented renderFileDiff() to create separate diff sections per file\n   - Added renderFileHeader() with status badges and path information\n   - Created multi-file-diff-container with vertical stacking layout\n   - Added loadAllFileContents() for parallel content loading\n   - Replaced single originalCode/modifiedCode with Map\u003cstring, FileContent\u003e\n\n2. Monaco Auto-Sizing (sketch-monaco-view.ts):\n   - Configured diff editors with hidden scrollbars per Monaco ≥0.49 pattern\n   - Added setupAutoSizing() with content height calculation\n   - Implemented fitEditorToContent() using getContentHeight() callbacks\n   - Set automaticLayout: false for manual size control\n   - Added scrollbar: { vertical: \u0027hidden\u0027, horizontal: \u0027hidden\u0027, handleMouseWheel: false }\n   - Enabled minimap: false and scrollBeyondLastLine: false\n\n3. CSS Styling (sketch-diff2-view.ts):\n   - Added file-diff-section with bottom borders for visual separation\n   - Implemented sticky file headers with proper z-index\n   - Created status badges (added, modified, deleted, renamed) with color coding\n   - Added file-count display replacing old file picker interface\n   - Configured diff-container with overflow: auto for outer scrolling\n\n4. Content Management:\n   - Parallel loading of all file contents with error handling\n   - Maintains editability detection per file based on commit range\n   - Preserves comment and save functionality for individual files\n   - Updated toggleHideUnchangedRegions to apply to all editors\n\nTechnical Details:\n- Uses Monaco\u0027s getContentHeight() and onDidContentSizeChange() for auto-sizing\n- Each diff editor sized to Math.max(originalHeight, modifiedHeight) + 18px padding\n- Outer container handles all scrolling while inner editors are sized to content\n- File headers show status (Added/Modified/Deleted/Renamed) with appropriate styling\n- Sticky positioning keeps file context visible during scrolling\n- Maintains all existing features: editing, commenting, expand/collapse toggles\n\nBenefits:\n- Natural scrolling workflow similar to GitHub PR reviews\n- Eliminates need for dropdown navigation between files\n- Better visual context with file headers and status indicators\n- Continuous viewing experience for multi-file changes\n- Preserves all advanced Monaco features (editing, commenting, etc.)\n- Improved performance with parallel content loading\n\nTesting:\n- Verified multi-file diff display with various commit ranges\n- Tested scrolling behavior between files works smoothly\n- Confirmed auto-sizing works correctly for different file sizes\n- Validated file headers show correct status and change counts\n- Ensured editing and commenting functionality preserved\n- Tested expand/collapse toggles apply to all editors\n\nThis implementation follows the Monaco ≥0.49 multi-file diff pattern with\ndisabled inner scrollbars, auto-sizing to content, and outer scroll container,\nproviding a modern diff experience while maintaining full editor functionality.\n\nCo-Authored-By: sketch \u003chello@sketch.dev\u003e\nChange-ID: s0724a00944669c80k\n"
    }
  ]
}
