)]}'
{
  "commit": "938d2dcde4aaea8119e1c09ffa453de48560dd57",
  "tree": "fe917e628d4ce1a671a15d1430668e92983289c4",
  "parents": [
    "7351cd9b711db0e828d22d995fe56c7f9f6ddb07"
  ],
  "author": {
    "name": "David Crawshaw",
    "email": "david@zentus.com",
    "time": "Sat Jun 14 22:17:33 2025 +0000"
  },
  "committer": {
    "name": "David Crawshaw",
    "email": "david@zentus.com",
    "time": "Sat Jun 14 16:20:07 2025 -0700"
  },
  "message": "webui: add URL parameters for diff view from/to commit selection\n\nEnable direct linking to specific diff ranges by adding URL parameters that\nsync with the diff range picker controls, allowing users to bookmark and\nshare specific diff views.\n\nProblem Analysis:\nUsers couldn\u0027t link directly to specific diff ranges in the sketch diff view.\nThe from/to commit selectors would reset to defaults on page load, making it\nimpossible to bookmark or share links to specific commit comparisons. This\ncreated friction when collaborating or returning to specific diff views.\n\nImplementation Changes:\n\n1. URL Parameter Synchronization (sketch-diff-range-picker.ts):\n   - Added updateUrlParams() to write from/to/commit parameters to URL\n   - Integrated URL updates into dispatchRangeEvent() for automatic sync\n   - Used history.replaceState() to update URL without page reload\n   - Clear unused parameters when switching between range/single modes\n\n2. URL Parameter Initialization:\n   - Added initializeFromUrlParams() to read URL parameters on load\n   - Parse \u0027from\u0027/\u0027to\u0027 parameters for range mode initialization\n   - Parse \u0027commit\u0027 parameter for single commit mode initialization\n   - Return flag indicating successful URL-based initialization\n\n3. Load Flow Enhancement:\n   - Modified loadCommits() to check URL parameters before setting defaults\n   - Skip default commit selection when URL parameters are present\n   - Always dispatch range event to ensure diff view updates correctly\n\n4. Browser Navigation Support:\n   - Added popstate event listener for browser back/forward navigation\n   - Implemented handlePopState() to re-initialize from URL parameters\n   - Force component re-render and event dispatch on navigation\n\n5. Mode Switching Improvements:\n   - Enhanced setRangeType() with better default handling\n   - Auto-populate missing commits when switching between modes\n   - Maintain proper URL state during mode transitions\n\nTechnical Details:\n- URL parameters: \u0027from\u0027, \u0027to\u0027 for range mode; \u0027commit\u0027 for single mode\n- Empty \u0027to\u0027 parameter represents uncommitted changes (working directory)\n- Parameters removed from URL when switching to incompatible modes\n- Browser history updated without triggering page reloads\n- Component lifecycle properly manages event listeners\n\nURL Format Examples:\n- Range mode: ?view\u003ddiff2\u0026from\u003dabc123\u0026to\u003ddef456\n- Uncommitted: ?view\u003ddiff2\u0026from\u003dabc123 (no \u0027to\u0027 parameter)\n- Single commit: ?view\u003ddiff2\u0026commit\u003dabc123\n\nBenefits:\n- Direct linking to specific diff ranges via URL\n- Bookmarkable diff views for easy return navigation\n- Shareable links for collaboration and code review\n- Browser back/forward navigation works correctly\n- URL reflects current diff state at all times\n- Seamless integration with existing diff view functionality\n\nTesting:\n- Verified URL updates when changing from/to commit selectors\n- Confirmed URL initialization on page load with parameters\n- Tested browser back/forward navigation updates UI correctly\n- Validated mode switching (range ↔ single) updates URL appropriately\n- Ensured uncommitted changes mode removes \u0027to\u0027 parameter\n- Confirmed sharing URLs loads correct diff view state\n\nThis enhancement enables direct linking and improved navigation for the\nsketch diff view while maintaining all existing functionality and providing\nseamless URL-based state management.\n\nCo-Authored-By: sketch \u003chello@sketch.dev\u003e\nChange-ID: sbf02a6a8bb4db673k\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "ca839dfc5ad6f20beda190d36c9b24d0cf7983c8",
      "old_mode": 33188,
      "old_path": "webui/src/web-components/sketch-diff-range-picker.ts",
      "new_id": "38d29b05cdc6c6bebb5c8cab85315e37a7b34f66",
      "new_mode": 33188,
      "new_path": "webui/src/web-components/sketch-diff-range-picker.ts"
    }
  ]
}
