)]}'
{
  "commit": "17c5ca16e746a8d25958307d2f17976a61218e9e",
  "tree": "6ad6e05c2e2cc8614263e046e4b1e02cc50ad093",
  "parents": [
    "55ae6fe26429135b70854500773cca3cf897e282"
  ],
  "author": {
    "name": "Steve Golton",
    "email": "stevegolton@google.com",
    "time": "Wed Apr 08 13:19:35 2026"
  },
  "committer": {
    "name": "Steve Golton",
    "email": "stevegolton@google.com",
    "time": "Fri Apr 24 11:53:58 2026"
  },
  "message": "ui: NodeGraph improvements\n\n- Can insert node anywhere in a stack of nodes.\n- Ghost node showing where the node will land if dropped.\n- Snap to grid.\n- Edge pan while dragging a node.\n- Complete refactor of NodeGraph.\n- Ports are addressed using unique IDs.\n- Remove labels - just use styled nodes. This solves a whole host of\n  inconsistencies around how lables are handled vs nodes.\n- Remove hotkeys - wrap NodeGraph in HotkeyContext instead.\n\nA few tweaks\n\nChange-Id: I8f421b29dbcbac2837bf4cd7fb7385954645532a\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "5418079c55528a7f39324046280467bc39228d98",
      "old_mode": 33188,
      "old_path": "ui/src/assets/widgets/nodegraph.scss",
      "new_id": "6ace75dbb737adc737edd7e92d15ea7c348fe018",
      "new_mode": 33188,
      "new_path": "ui/src/assets/widgets/nodegraph.scss"
    },
    {
      "type": "modify",
      "old_id": "f418b1f659745c41a69cd86d4c39005a844876dc",
      "old_mode": 33188,
      "old_path": "ui/src/base/dom_utils.ts",
      "new_id": "f26c110404a82c13cf8ff6b9141a1246cb5bb86b",
      "new_mode": 33188,
      "new_path": "ui/src/base/dom_utils.ts"
    },
    {
      "type": "modify",
      "old_id": "625f475fe1cebe092d7da5cca4022a7d8bfb6827",
      "old_mode": 33188,
      "old_path": "ui/src/plugins/dev.perfetto.DataExplorer/query_builder/graph/graph.ts",
      "new_id": "a61c2089eb397df995190b7fa521d6f1d2de0d5c",
      "new_mode": 33188,
      "new_path": "ui/src/plugins/dev.perfetto.DataExplorer/query_builder/graph/graph.ts"
    },
    {
      "type": "modify",
      "old_id": "d76ea0474a4a721da7e5d3dfff880f1a184cd8a8",
      "old_mode": 33188,
      "old_path": "ui/src/plugins/dev.perfetto.DataExplorer/query_builder/graph/node_config.ts",
      "new_id": "928ae8f0a459b07af213d6d17e24230ea5c5f8d5",
      "new_mode": 33188,
      "new_path": "ui/src/plugins/dev.perfetto.DataExplorer/query_builder/graph/node_config.ts"
    },
    {
      "type": "modify",
      "old_id": "14cf4f4bfb2c44464dc74c4a5affed078dacee3a",
      "old_mode": 33188,
      "old_path": "ui/src/plugins/dev.perfetto.DataExplorer/query_builder/graph/text_label.ts",
      "new_id": "76126b5538610c920f6ceac86a26be20085a0773",
      "new_mode": 33188,
      "new_path": "ui/src/plugins/dev.perfetto.DataExplorer/query_builder/graph/text_label.ts"
    },
    {
      "type": "modify",
      "old_id": "eb3478042d200c4e5d3253a5af1f48cf0d9a37c3",
      "old_mode": 33188,
      "old_path": "ui/src/plugins/dev.perfetto.DataExplorer/query_builder/nodes/group_node/inner_graph_preview.ts",
      "new_id": "8a5feda44c02949a0b0b96295a34253990ec428a",
      "new_mode": 33188,
      "new_path": "ui/src/plugins/dev.perfetto.DataExplorer/query_builder/nodes/group_node/inner_graph_preview.ts"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "62a11bb14e01e10e9d093806f9c41a95cf5b9454",
      "new_mode": 33188,
      "new_path": "ui/src/plugins/dev.perfetto.WidgetsPage/demos/nodegraph_demo.scss"
    },
    {
      "type": "modify",
      "old_id": "86ab29061d6496ac20968252c776a6f39391db1d",
      "old_mode": 33188,
      "old_path": "ui/src/plugins/dev.perfetto.WidgetsPage/demos/nodegraph_demo.ts",
      "new_id": "7e9f207ec62f7400f87c70daede09d985ca5fdb5",
      "new_mode": 33188,
      "new_path": "ui/src/plugins/dev.perfetto.WidgetsPage/demos/nodegraph_demo.ts"
    },
    {
      "type": "modify",
      "old_id": "c039f497a1ec37c531646613420e765212b13e52",
      "old_mode": 33188,
      "old_path": "ui/src/plugins/dev.perfetto.WidgetsPage/styles.scss",
      "new_id": "5d7427264bf2492bb03093f4d41fe6233a4edbc0",
      "new_mode": 33188,
      "new_path": "ui/src/plugins/dev.perfetto.WidgetsPage/styles.scss"
    },
    {
      "type": "delete",
      "old_id": "f4099d9a29a66c730f6bbd8104f6b5a5b8a599b7",
      "old_mode": 33188,
      "old_path": "ui/src/widgets/nodegraph.ts",
      "new_id": "0000000000000000000000000000000000000000",
      "new_mode": 0,
      "new_path": "/dev/null"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "9210a0cbcd8abf20e3f90a347cd5d79f0c9a6aff",
      "new_mode": 33188,
      "new_path": "ui/src/widgets/nodegraph/index.ts"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "ec0bd0f53cda9daf6d9811e84805f937eeaf74f8",
      "new_mode": 33188,
      "new_path": "ui/src/widgets/nodegraph/model.ts"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "057777e71d9ea7d34cb6557c867d64abbab8344b",
      "new_mode": 33188,
      "new_path": "ui/src/widgets/nodegraph/svg.ts"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "2ee0cadf6e5ed72e6285328b90a838e5edab9fe6",
      "new_mode": 33188,
      "new_path": "ui/src/widgets/nodegraph/views/node.ts"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "866e546ae247e4420ff154a05a1c6c2f3c5bfba9",
      "new_mode": 33188,
      "new_path": "ui/src/widgets/nodegraph/views/nodegraph.ts"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "a36490cb6439a152097df5f2a9434e11ef193e75",
      "new_mode": 33188,
      "new_path": "ui/src/widgets/nodegraph/views/toolbar.ts"
    }
  ]
}
