)]}'
{
  "commit": "11199315dd5b2839ae392df4191c21e8304dd81e",
  "tree": "e491ae04bf0091addf87cb97ed2ccac8da9f71d6",
  "parents": [
    "1f512c9800ce50e8aa7f12aa0961aa2f8569a4ea"
  ],
  "author": {
    "name": "Zimuzo Ezeozue",
    "email": "zezeozue@google.com",
    "time": "Mon Feb 09 15:54:56 2026 +0000"
  },
  "committer": {
    "name": "Zimuzo Ezeozue",
    "email": "zezeozue@google.com",
    "time": "Tue Feb 10 10:19:14 2026 +0000"
  },
  "message": "ui: Declarative D3 charting components\n\nFeatures:\n- 4 chart types: histogram, bar (simple/grouped/stacked), CDF, scatter\n- Stateless, Mithril-native components with loader pattern\n- Interactive brush selection for data filtering\n- Cross-chart filtering with Filter coordination\n- In-memory data loaders with SQL support foundation\n- Configurable axis and legend rendering\n- Correlation coefficient display for scatter plots\n\nArchitecture:\n- Loaders handle data preparation and transformation\n- Chart components remain stateless for Mithril compatibility\n- BrushHandler provides reusable brush interaction logic\n- AxisRenderer and LegendRenderer provide shared rendering utilities\n- FilterUtils enables cross-chart filter synchronization\n- ChartUtils provides color schemes and layout calculations\n\nComponents:\n- Histogram with configurable bucket count and brush selection\n- SimpleBarChart for basic categorical data visualization\n- GroupedBarChart for side-by-side category comparisons\n- StackedBarChart for cumulative category visualization\n- CDFChart with multi-series support and color grouping\n- ScatterPlot with correlation analysis and interactive selection\n\nPlugin:\n- DeclarativeChartsPage for exploring chart components\n- WidgetsPage integration with d3_decl_charts_demo\n- Interactive demo with filter synchronization between charts and tables\n\nTest: Manual\nChange-Id: I144b0763c66eb49322f656321499cf221b83d230\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "453a5af98f65e355105a1334980c2e17c4e1c76f",
      "old_mode": 33188,
      "old_path": "ui/src/assets/widgets/charts.scss",
      "new_id": "a0cc87946450daf2039d4782bd704a38eba169e9",
      "new_mode": 33188,
      "new_path": "ui/src/assets/widgets/charts.scss"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "a604755c7808ff1776f0fcf2248898035d1fe964",
      "new_mode": 33188,
      "new_path": "ui/src/components/charts/d3-decl/README.md"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "ceae4f88a120a5f908b3401fe6c95017cc8b5e04",
      "new_mode": 33188,
      "new_path": "ui/src/components/charts/d3-decl/bar.scss"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "01ccd55523ace6253fca999445ad5243d0d1afb4",
      "new_mode": 33188,
      "new_path": "ui/src/components/charts/d3-decl/bar/bar_loader.ts"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "6aa423833f8b94cc88ee9e1fdaefdb6de0eb2078",
      "new_mode": 33188,
      "new_path": "ui/src/components/charts/d3-decl/bar/bar_types.ts"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "9a845b0399e08b1996b4a2a4803df5b5b6ad9957",
      "new_mode": 33188,
      "new_path": "ui/src/components/charts/d3-decl/bar/bar_utils.ts"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "928b918a10910956d31644381068d9fecbf836d1",
      "new_mode": 33188,
      "new_path": "ui/src/components/charts/d3-decl/bar/grouped_bar_chart.ts"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "3c2ddcec7d36f2fcce869ee7236ac77ce3ce0cb5",
      "new_mode": 33188,
      "new_path": "ui/src/components/charts/d3-decl/bar/index.ts"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "5337b29b7afeb9894edbfad69716226bdd5a3eee",
      "new_mode": 33188,
      "new_path": "ui/src/components/charts/d3-decl/bar/simple_bar_chart.ts"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "4f92600acae202978c6ff65270b580c97e044d7e",
      "new_mode": 33188,
      "new_path": "ui/src/components/charts/d3-decl/bar/stacked_bar_chart.ts"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "e40e064828babd36a6edf41d14c67f3c5f908ce1",
      "new_mode": 33188,
      "new_path": "ui/src/components/charts/d3-decl/cdf.scss"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "b1331e709e48b4548e68f8b4e17fc7e1d538175d",
      "new_mode": 33188,
      "new_path": "ui/src/components/charts/d3-decl/cdf/cdf.ts"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "1d47fae3f2db945101f7487ab3cb42718bae00a8",
      "new_mode": 33188,
      "new_path": "ui/src/components/charts/d3-decl/cdf/cdf_loader.ts"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "55c8993b455a453ef3ae18f253a9497d01a586f4",
      "new_mode": 33188,
      "new_path": "ui/src/components/charts/d3-decl/cdf/index.ts"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "7928b32d4607c7c9832122b903a1d6de1711000f",
      "new_mode": 33188,
      "new_path": "ui/src/components/charts/d3-decl/chart_utils.ts"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "b642ee2f515146fa65878d05ea088c1f63d91970",
      "new_mode": 33188,
      "new_path": "ui/src/components/charts/d3-decl/filter_utils.ts"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "3b04845bdda086aa20e05a211c63ff2e4cb79f48",
      "new_mode": 33188,
      "new_path": "ui/src/components/charts/d3-decl/histogram.scss"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "71c15d12df2ec5a66e8d0996a28a07443388041c",
      "new_mode": 33188,
      "new_path": "ui/src/components/charts/d3-decl/histogram/histogram.ts"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "298f0341bb35033fca903815ea540c67ca4bdda3",
      "new_mode": 33188,
      "new_path": "ui/src/components/charts/d3-decl/histogram/histogram_loader.ts"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "7b1b8435c0fca314df9add8970200a3787207f2f",
      "new_mode": 33188,
      "new_path": "ui/src/components/charts/d3-decl/histogram/index.ts"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "f389c7672a83d8322b3a4792dfb91c8db5d8f7dd",
      "new_mode": 33188,
      "new_path": "ui/src/components/charts/d3-decl/index.ts"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "d47935f9f34c6236c2490abc87d77598e317f6f9",
      "new_mode": 33188,
      "new_path": "ui/src/components/charts/d3-decl/interactions/brush_handler.ts"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "ef7d0ef25b1c1979fbcc553d131d92d010a536ba",
      "new_mode": 33188,
      "new_path": "ui/src/components/charts/d3-decl/renderers/axis.scss"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "50749427509411ecc84e03d79338d9796cfd3bd8",
      "new_mode": 33188,
      "new_path": "ui/src/components/charts/d3-decl/renderers/axis_renderer.ts"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "195a6b26a3bcbc83f31e9cf97ca4f02edc8c5c29",
      "new_mode": 33188,
      "new_path": "ui/src/components/charts/d3-decl/renderers/legend_renderer.ts"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "20a1a3296556c367c5bbb3e5686fb365e3b7fa84",
      "new_mode": 33188,
      "new_path": "ui/src/components/charts/d3-decl/scatter.scss"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "ca7230f3b4966c62a175915532a811804d9c5233",
      "new_mode": 33188,
      "new_path": "ui/src/components/charts/d3-decl/scatter/index.ts"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "e3dc27e7da93d8e876d40a95b983da9ea1a167b4",
      "new_mode": 33188,
      "new_path": "ui/src/components/charts/d3-decl/scatter/scatter.ts"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "e903d32f952f3d391343c2c868da3d8e34c0e492",
      "new_mode": 33188,
      "new_path": "ui/src/components/charts/d3-decl/scatter/scatter_loader.ts"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "53273fc26057a107ab961289db9fe8119d16c13c",
      "new_mode": 33188,
      "new_path": "ui/src/plugins/dev.perfetto.DeclarativeChartsPage/declarative_charts_page.ts"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "05b3f1959f0d9e73184a61f3bf44b021efe7bc82",
      "new_mode": 33188,
      "new_path": "ui/src/plugins/dev.perfetto.DeclarativeChartsPage/index.ts"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "5140f1830cbe27d0d490754bcef9251c28ce8de4",
      "new_mode": 33188,
      "new_path": "ui/src/plugins/dev.perfetto.DeclarativeChartsPage/styles.scss"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "03c2b43dd6c6361659d03efc4928b858b79460a2",
      "new_mode": 33188,
      "new_path": "ui/src/plugins/dev.perfetto.WidgetsPage/demos/d3_decl_charts_demo.ts"
    },
    {
      "type": "modify",
      "old_id": "c039f497a1ec37c531646613420e765212b13e52",
      "old_mode": 33188,
      "old_path": "ui/src/plugins/dev.perfetto.WidgetsPage/styles.scss",
      "new_id": "bf422292fe5718936783e121d3d1ea1177b7eeed",
      "new_mode": 33188,
      "new_path": "ui/src/plugins/dev.perfetto.WidgetsPage/styles.scss"
    },
    {
      "type": "modify",
      "old_id": "bcf7aab37a1b920c4bc944bfd53ff3969dff1dc7",
      "old_mode": 33188,
      "old_path": "ui/src/plugins/dev.perfetto.WidgetsPage/widgets_page.ts",
      "new_id": "7f25b73856f41baf1769fc43a44c579e7ec2b4ca",
      "new_mode": 33188,
      "new_path": "ui/src/plugins/dev.perfetto.WidgetsPage/widgets_page.ts"
    }
  ]
}
