)]}'
{
  "commit": "e89b3080f934a4bc70a0cfa85ffff49ac78d6f2b",
  "tree": "f3bcf44b2907c5c18f555b31df923488bb5efdc7",
  "parents": [
    "7ad1c7a4b759f4ba110d092a0fbbed0b95fc80a9"
  ],
  "author": {
    "name": "Philip Zeyliger",
    "email": "philip@bold.dev",
    "time": "Thu May 29 03:16:06 2025 +0000"
  },
  "committer": {
    "name": "Autoformatter",
    "email": "bot@sketch.dev",
    "time": "Thu May 29 03:20:15 2025 +0000"
  },
  "message": "webui: comprehensive diff view improvements\n\nImplement multiple enhancements to the diff view interface for better\nusability and visual consistency with file change statistics and\nimproved navigation controls.\n\nBackend Changes:\n1. Enhanced git diff endpoint with --numstat support:\n   - Modified GitRawDiff to execute both --raw and --numstat commands\n   - Added Additions/Deletions fields to DiffFile struct\n   - Parse numstat output to show line change statistics (+X, -Y)\n   - Handle binary files and edge cases properly\n\nFrontend UI Improvements:\n2. File picker enhancements:\n   - Display (+X, -Y) change indicators next to file names\n   - Move file position indicator (\"X of Y\") between navigation buttons\n   - Simplified file info to show only status (Modified/Added/Deleted)\n   - Better visual grouping of navigation-related information\n\n3. Commit range picker refresh functionality:\n   - Added refresh button with subtle styling (gray background)\n   - 🔄 icon with \"Refresh commit list\" tooltip\n   - Reloads git log to get updated branch and commit information\n   - Proper disabled state during loading operations\n\n4. Editable file indicator improvements:\n   - Moved \"Editable\" indicator to Monaco editor save indicator area\n   - Shows \"Editable\" when file is editable but unchanged\n   - Consistent styling with \"Modified\", \"Saving\", \"Saved\" states\n   - Added proper CSS styling with gray background for idle state\n\n5. Expand/collapse button redesign:\n   - Custom SVG icons replacing text buttons\n   - Expand All: dotted line with arrows pointing away (outward)\n   - Collapse: dotted line with arrows pointing inward (toward line)\n   - Intuitive visual metaphor for show/hide functionality\n   - Enhanced tooltips with full action descriptions\n   - Renamed \"Hide Unchanged\" to \"Collapse Expanded Lines\"\n\nTechnical Improvements:\n6. TypeScript compatibility fixes:\n   - Updated mock data service with new DiffFile fields\n   - Fixed MSW handler type compatibility with proper type assertion\n   - Maintained full TypeScript checking without exclusions\n   - Added realistic mock data for testing change indicators\n\nInterface Consistency:\n- All buttons use consistent styling and hover effects\n- Better separation between navigation controls and file information\n- Improved logical grouping of related UI elements\n- Enhanced accessibility with descriptive tooltips\n\nThese changes significantly improve the diff view experience by providing\nclear visual indicators of file changes, intuitive navigation controls,\nand better organization of interface elements according to their function.\n\nCo-Authored-By: sketch \u003chello@sketch.dev\u003e\n\nChange-ID: s738289d132773bc3k\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "fc59e0dfaa4a93de25275ef6824b94df30405ca4",
      "old_mode": 33188,
      "old_path": "git_tools/git_tools.go",
      "new_id": "fa53e8de1cc0b6f17d826cddb3162569972b9aa4",
      "new_mode": 33188,
      "new_path": "git_tools/git_tools.go"
    },
    {
      "type": "modify",
      "old_id": "37e724e483eee0ecffb4f95bced6605872ac35fe",
      "old_mode": 33188,
      "old_path": "webui/src/types.ts",
      "new_id": "0e668ce79a35e4d1f43a7673f23bf1f815f533b7",
      "new_mode": 33188,
      "new_path": "webui/src/types.ts"
    },
    {
      "type": "modify",
      "old_id": "3ca50981b383f381d03a14bac4bf34c77dc8cce7",
      "old_mode": 33188,
      "old_path": "webui/src/web-components/demo/mock-git-data-service.ts",
      "new_id": "648ca652d13ffed80ace469b2549fda16c461a5b",
      "new_mode": 33188,
      "new_path": "webui/src/web-components/demo/mock-git-data-service.ts"
    },
    {
      "type": "modify",
      "old_id": "bcd82e48b4c5279eeec71dec7f10446037543f53",
      "old_mode": 33188,
      "old_path": "webui/src/web-components/demo/mocks/browser.ts",
      "new_id": "0e0573073360a5cb30ab8fe901f2af5123c48f47",
      "new_mode": 33188,
      "new_path": "webui/src/web-components/demo/mocks/browser.ts"
    },
    {
      "type": "modify",
      "old_id": "c834f129e8d786eedffc4094198a7ed7a3df099a",
      "old_mode": 33188,
      "old_path": "webui/src/web-components/sketch-diff-file-picker.ts",
      "new_id": "eb94a5f8107729bb8e67bd5ac1d3d44404b908bc",
      "new_mode": 33188,
      "new_path": "webui/src/web-components/sketch-diff-file-picker.ts"
    },
    {
      "type": "modify",
      "old_id": "70b09f72037b3fc795b78841b5d01642cbee6f1e",
      "old_mode": 33188,
      "old_path": "webui/src/web-components/sketch-diff-range-picker.ts",
      "new_id": "ca839dfc5ad6f20beda190d36c9b24d0cf7983c8",
      "new_mode": 33188,
      "new_path": "webui/src/web-components/sketch-diff-range-picker.ts"
    },
    {
      "type": "modify",
      "old_id": "1b673cd5971909ec1a020b3f726a08010efe521d",
      "old_mode": 33188,
      "old_path": "webui/src/web-components/sketch-diff2-view.ts",
      "new_id": "7ca33b3e41bd0c5f748a8ad6ba92acd131c59da4",
      "new_mode": 33188,
      "new_path": "webui/src/web-components/sketch-diff2-view.ts"
    },
    {
      "type": "modify",
      "old_id": "48fd66e9f7a3060fa4c97731195d7fbe371ac5d0",
      "old_mode": 33188,
      "old_path": "webui/src/web-components/sketch-monaco-view.ts",
      "new_id": "40b1200c85c6489e182e57f9b2f9ba975396d5c0",
      "new_mode": 33188,
      "new_path": "webui/src/web-components/sketch-monaco-view.ts"
    }
  ]
}
