feat: add proxyWidgetSelector support to SubgraphNode#10840
feat: add proxyWidgetSelector support to SubgraphNode#10840
Conversation
🎭 Playwright: ✅ 939 passed, 0 failed · 3 flaky📊 Browser Reports
|
📝 WalkthroughWalkthroughThe changes introduce selector-driven widget filtering to subgraph nodes. A new Changes
Sequence DiagramsequenceDiagram
actor User
participant SubgraphNode
participant SelectorWidget
participant PromotedViews
participant Canvas
Note over SubgraphNode: Node Initialization
SubgraphNode->>SubgraphNode: _internalConfigureAfterSlots()
SubgraphNode->>SelectorWidget: _initSelectorWidget()<br/>(from proxyWidgetSelector config)
SelectorWidget->>SubgraphNode: Register selection callback
SubgraphNode->>Canvas: Mark dirty (initial setup)
Note over User,Canvas: User Interaction
User->>SelectorWidget: Select widget option
SelectorWidget->>SubgraphNode: Callback triggered
SubgraphNode->>SubgraphNode: Update selector.selected
SubgraphNode->>SubgraphNode: Invalidate promoted views cache
SubgraphNode->>SubgraphNode: Recompute widgets getter<br/>(filter by selection)
SubgraphNode->>SubgraphNode: Recompute node size
SubgraphNode->>Canvas: Mark dirty
Canvas->>PromotedViews: Re-render filtered widgets
Estimated code review effort🎯 3 (Moderate) | ⏱️ ~25 minutes Poem
Important Pre-merge checks failedPlease resolve all errors before merging. Addressing warnings is optional. ❌ Failed checks (3 warnings, 1 inconclusive)
✅ Passed checks (1 passed)
✨ Finishing Touches📝 Generate docstrings
🧪 Generate unit tests (beta)
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
🎨 Storybook: ✅ Built — View Storybook |
📦 Bundle: 5.11 MB gzip 🔴 +539 BDetailsSummary
Category Glance App Entry Points — 22.3 kB (baseline 22.3 kB) • ⚪ 0 BMain entry bundles and manifests
Status: 1 added / 1 removed Graph Workspace — 1.2 MB (baseline 1.2 MB) • ⚪ 0 BGraph editor runtime, canvas, workflow orchestration
Status: 1 added / 1 removed Views & Navigation — 76.6 kB (baseline 76.6 kB) • ⚪ 0 BTop-level views, pages, and routed surfaces
Status: 9 added / 9 removed / 2 unchanged Panels & Settings — 484 kB (baseline 484 kB) • ⚪ 0 BConfiguration panels, inspectors, and settings screens
Status: 10 added / 10 removed / 12 unchanged User & Accounts — 17.1 kB (baseline 17.1 kB) • ⚪ 0 BAuthentication, profile, and account management bundles
Status: 5 added / 5 removed / 2 unchanged Editors & Dialogs — 109 kB (baseline 109 kB) • ⚪ 0 BModals, dialogs, drawers, and in-app editors
Status: 2 added / 2 removed UI Components — 60.3 kB (baseline 60.3 kB) • ⚪ 0 BReusable component library chunks
Status: 5 added / 5 removed / 8 unchanged Data & Services — 2.97 MB (baseline 2.97 MB) • 🔴 +1.71 kBStores, services, APIs, and repositories
Status: 13 added / 13 removed / 4 unchanged Utilities & Hooks — 338 kB (baseline 338 kB) • ⚪ 0 BHelpers, composables, and utility bundles
Status: 13 added / 13 removed / 13 unchanged Vendor & Third-Party — 9.8 MB (baseline 9.8 MB) • ⚪ 0 BExternal libraries and shared vendor chunks Status: 16 unchanged Other — 8.44 MB (baseline 8.44 MB) • ⚪ 0 BBundles that do not match a named category
Status: 55 added / 55 removed / 79 unchanged ⚡ Performance Report
No regressions detected. All metrics
Historical variance (last 15 runs)
Trend (last 15 commits on main)
Raw data{
"timestamp": "2026-04-03T23:04:39.535Z",
"gitSha": "66678b6acf4e10cbf4e29a28d763113c64e52340",
"branch": "proxy-widget-selector",
"measurements": [
{
"name": "canvas-idle",
"durationMs": 2037.8029999999967,
"styleRecalcs": 11,
"styleRecalcDurationMs": 8.396999999999998,
"layouts": 0,
"layoutDurationMs": 0,
"taskDurationMs": 334.812,
"heapDeltaBytes": 21077396,
"heapUsedBytes": 63829504,
"domNodes": 21,
"jsHeapTotalBytes": 22806528,
"scriptDurationMs": 24.009000000000004,
"eventListeners": 6,
"totalBlockingTimeMs": 0,
"frameDurationMs": 16.66333333333335,
"p95FrameDurationMs": 16.699999999999818
},
{
"name": "canvas-idle",
"durationMs": 2021.4280000000144,
"styleRecalcs": 12,
"styleRecalcDurationMs": 9.440999999999999,
"layouts": 0,
"layoutDurationMs": 0,
"taskDurationMs": 338.842,
"heapDeltaBytes": -4667472,
"heapUsedBytes": 44282448,
"domNodes": 23,
"jsHeapTotalBytes": 24641536,
"scriptDurationMs": 21.996000000000002,
"eventListeners": 6,
"totalBlockingTimeMs": 0,
"frameDurationMs": 16.66333333333332,
"p95FrameDurationMs": 16.700000000000728
},
{
"name": "canvas-idle",
"durationMs": 2016.8270000000348,
"styleRecalcs": 10,
"styleRecalcDurationMs": 8.461000000000002,
"layouts": 0,
"layoutDurationMs": 0,
"taskDurationMs": 329.615,
"heapDeltaBytes": 20342868,
"heapUsedBytes": 63171056,
"domNodes": 20,
"jsHeapTotalBytes": 23068672,
"scriptDurationMs": 19.022000000000006,
"eventListeners": 6,
"totalBlockingTimeMs": 0,
"frameDurationMs": 16.66333333333335,
"p95FrameDurationMs": 16.799999999999272
},
{
"name": "canvas-mouse-sweep",
"durationMs": 1997.163999999998,
"styleRecalcs": 84,
"styleRecalcDurationMs": 40.583,
"layouts": 12,
"layoutDurationMs": 3.4599999999999995,
"taskDurationMs": 919.465,
"heapDeltaBytes": 6999252,
"heapUsedBytes": 58930880,
"domNodes": 68,
"jsHeapTotalBytes": 25690112,
"scriptDurationMs": 126.14999999999998,
"eventListeners": 6,
"totalBlockingTimeMs": 0,
"frameDurationMs": 16.666666666666668,
"p95FrameDurationMs": 16.800000000000182
},
{
"name": "canvas-mouse-sweep",
"durationMs": 1984.6000000000004,
"styleRecalcs": 81,
"styleRecalcDurationMs": 38.605000000000004,
"layouts": 12,
"layoutDurationMs": 3.1799999999999997,
"taskDurationMs": 893.061,
"heapDeltaBytes": 16347152,
"heapUsedBytes": 58812688,
"domNodes": 66,
"jsHeapTotalBytes": 23592960,
"scriptDurationMs": 124.38199999999999,
"eventListeners": 6,
"totalBlockingTimeMs": 0,
"frameDurationMs": 16.666666666666668,
"p95FrameDurationMs": 16.699999999999818
},
{
"name": "canvas-mouse-sweep",
"durationMs": 2010.3430000000344,
"styleRecalcs": 84,
"styleRecalcDurationMs": 39.484,
"layouts": 12,
"layoutDurationMs": 3.4290000000000003,
"taskDurationMs": 915.3639999999999,
"heapDeltaBytes": 16036992,
"heapUsedBytes": 58846492,
"domNodes": 67,
"jsHeapTotalBytes": 23330816,
"scriptDurationMs": 128.53,
"eventListeners": 6,
"totalBlockingTimeMs": 0,
"frameDurationMs": 16.666666666666668,
"p95FrameDurationMs": 16.800000000000182
},
{
"name": "canvas-zoom-sweep",
"durationMs": 1749.5620000000258,
"styleRecalcs": 29,
"styleRecalcDurationMs": 15.301,
"layouts": 6,
"layoutDurationMs": 0.6460000000000001,
"taskDurationMs": 291.14,
"heapDeltaBytes": 15450196,
"heapUsedBytes": 67189348,
"domNodes": 77,
"jsHeapTotalBytes": 23068672,
"scriptDurationMs": 24.495,
"eventListeners": 19,
"totalBlockingTimeMs": 0,
"frameDurationMs": 16.666666666666668,
"p95FrameDurationMs": 16.800000000000182
},
{
"name": "canvas-zoom-sweep",
"durationMs": 1751.7090000000053,
"styleRecalcs": 31,
"styleRecalcDurationMs": 18.791,
"layouts": 6,
"layoutDurationMs": 0.5499999999999999,
"taskDurationMs": 288.42,
"heapDeltaBytes": 24688804,
"heapUsedBytes": 67123576,
"domNodes": 79,
"jsHeapTotalBytes": 20447232,
"scriptDurationMs": 22.236,
"eventListeners": 19,
"totalBlockingTimeMs": 0,
"frameDurationMs": 16.666666666666668,
"p95FrameDurationMs": 16.700000000000728
},
{
"name": "canvas-zoom-sweep",
"durationMs": 1748.5799999999472,
"styleRecalcs": 30,
"styleRecalcDurationMs": 15.642,
"layouts": 6,
"layoutDurationMs": 0.6229999999999999,
"taskDurationMs": 280.498,
"heapDeltaBytes": 24711096,
"heapUsedBytes": 67498168,
"domNodes": 77,
"jsHeapTotalBytes": 20709376,
"scriptDurationMs": 22.452000000000005,
"eventListeners": 19,
"totalBlockingTimeMs": 0,
"frameDurationMs": 16.666666666666668,
"p95FrameDurationMs": 16.700000000000728
},
{
"name": "dom-widget-clipping",
"durationMs": 635.563000000019,
"styleRecalcs": 13,
"styleRecalcDurationMs": 9.144999999999998,
"layouts": 0,
"layoutDurationMs": 0,
"taskDurationMs": 393.78000000000003,
"heapDeltaBytes": -2558912,
"heapUsedBytes": 49283224,
"domNodes": 22,
"jsHeapTotalBytes": 16252928,
"scriptDurationMs": 73.837,
"eventListeners": 2,
"totalBlockingTimeMs": 0,
"frameDurationMs": 16.666666666666668,
"p95FrameDurationMs": 16.700000000000273
},
{
"name": "dom-widget-clipping",
"durationMs": 531.2270000000012,
"styleRecalcs": 13,
"styleRecalcDurationMs": 8.854,
"layouts": 0,
"layoutDurationMs": 0,
"taskDurationMs": 321.2200000000001,
"heapDeltaBytes": 6210300,
"heapUsedBytes": 49041032,
"domNodes": 22,
"jsHeapTotalBytes": 14155776,
"scriptDurationMs": 62.910999999999994,
"eventListeners": 2,
"totalBlockingTimeMs": 0,
"frameDurationMs": 16.666666666666668,
"p95FrameDurationMs": 16.700000000000273
},
{
"name": "dom-widget-clipping",
"durationMs": 534.4929999999977,
"styleRecalcs": 12,
"styleRecalcDurationMs": 8.232999999999999,
"layouts": 0,
"layoutDurationMs": 0,
"taskDurationMs": 320.679,
"heapDeltaBytes": 6463476,
"heapUsedBytes": 49339064,
"domNodes": 19,
"jsHeapTotalBytes": 13631488,
"scriptDurationMs": 63.38399999999999,
"eventListeners": 2,
"totalBlockingTimeMs": 0,
"frameDurationMs": 16.663333333333338,
"p95FrameDurationMs": 16.700000000000273
},
{
"name": "large-graph-idle",
"durationMs": 1999.1520000000094,
"styleRecalcs": 11,
"styleRecalcDurationMs": 9.968000000000002,
"layouts": 0,
"layoutDurationMs": 0,
"taskDurationMs": 518.965,
"heapDeltaBytes": 15646592,
"heapUsedBytes": 67135448,
"domNodes": -256,
"jsHeapTotalBytes": 14929920,
"scriptDurationMs": 93.583,
"eventListeners": -127,
"totalBlockingTimeMs": 0,
"frameDurationMs": 16.66333333333335,
"p95FrameDurationMs": 16.800000000000182
},
{
"name": "large-graph-idle",
"durationMs": 2037.7269999999612,
"styleRecalcs": 10,
"styleRecalcDurationMs": 8.884,
"layouts": 0,
"layoutDurationMs": 0,
"taskDurationMs": 507.283,
"heapDeltaBytes": 3242176,
"heapUsedBytes": 55870368,
"domNodes": -258,
"jsHeapTotalBytes": 16969728,
"scriptDurationMs": 89.861,
"eventListeners": -125,
"totalBlockingTimeMs": 0,
"frameDurationMs": 16.66333333333335,
"p95FrameDurationMs": 16.799999999999272
},
{
"name": "large-graph-idle",
"durationMs": 2044.3070000000034,
"styleRecalcs": 10,
"styleRecalcDurationMs": 8.846,
"layouts": 0,
"layoutDurationMs": 0,
"taskDurationMs": 511.17999999999995,
"heapDeltaBytes": 5088744,
"heapUsedBytes": 55861368,
"domNodes": -259,
"jsHeapTotalBytes": 16969728,
"scriptDurationMs": 95.59700000000001,
"eventListeners": -125,
"totalBlockingTimeMs": 0,
"frameDurationMs": 16.66333333333332,
"p95FrameDurationMs": 16.700000000000728
},
{
"name": "large-graph-pan",
"durationMs": 2134.2940000000112,
"styleRecalcs": 70,
"styleRecalcDurationMs": 16.8,
"layouts": 0,
"layoutDurationMs": 0,
"taskDurationMs": 1011.311,
"heapDeltaBytes": 18157672,
"heapUsedBytes": 70352568,
"domNodes": -259,
"jsHeapTotalBytes": 17698816,
"scriptDurationMs": 392.484,
"eventListeners": -125,
"totalBlockingTimeMs": 0,
"frameDurationMs": 16.666666666666668,
"p95FrameDurationMs": 16.699999999999818
},
{
"name": "large-graph-pan",
"durationMs": 2115.4050000000097,
"styleRecalcs": 68,
"styleRecalcDurationMs": 14.432,
"layouts": 0,
"layoutDurationMs": 0,
"taskDurationMs": 1012.264,
"heapDeltaBytes": 17090328,
"heapUsedBytes": 70665772,
"domNodes": -262,
"jsHeapTotalBytes": 19271680,
"scriptDurationMs": 377.619,
"eventListeners": -125,
"totalBlockingTimeMs": 0,
"frameDurationMs": 16.670000000000012,
"p95FrameDurationMs": 16.700000000000728
},
{
"name": "large-graph-pan",
"durationMs": 2133.560999999986,
"styleRecalcs": 71,
"styleRecalcDurationMs": 16.409999999999997,
"layouts": 0,
"layoutDurationMs": 0,
"taskDurationMs": 1021.0839999999998,
"heapDeltaBytes": 21399272,
"heapUsedBytes": 72888692,
"domNodes": -257,
"jsHeapTotalBytes": 17436672,
"scriptDurationMs": 383.262,
"eventListeners": -127,
"totalBlockingTimeMs": 0,
"frameDurationMs": 16.666666666666668,
"p95FrameDurationMs": 16.700000000000728
},
{
"name": "large-graph-zoom",
"durationMs": 3117.741999999993,
"styleRecalcs": 64,
"styleRecalcDurationMs": 13.744000000000003,
"layouts": 60,
"layoutDurationMs": 6.831,
"taskDurationMs": 1237.952,
"heapDeltaBytes": 6656504,
"heapUsedBytes": 61517332,
"domNodes": -264,
"jsHeapTotalBytes": 17231872,
"scriptDurationMs": 469.77399999999994,
"eventListeners": -125,
"totalBlockingTimeMs": 0,
"frameDurationMs": 16.666666666666668,
"p95FrameDurationMs": 16.800000000000182
},
{
"name": "large-graph-zoom",
"durationMs": 3154.487999999958,
"styleRecalcs": 67,
"styleRecalcDurationMs": 16.502,
"layouts": 60,
"layoutDurationMs": 7.123000000000001,
"taskDurationMs": 1237.2510000000002,
"heapDeltaBytes": 7964168,
"heapUsedBytes": 63778012,
"domNodes": -261,
"jsHeapTotalBytes": 16240640,
"scriptDurationMs": 472.346,
"eventListeners": -127,
"totalBlockingTimeMs": 0,
"frameDurationMs": 16.666666666666668,
"p95FrameDurationMs": 16.799999999999272
},
{
"name": "large-graph-zoom",
"durationMs": 3147.809000000052,
"styleRecalcs": 66,
"styleRecalcDurationMs": 15.108,
"layouts": 60,
"layoutDurationMs": 6.819999999999999,
"taskDurationMs": 1253.7069999999999,
"heapDeltaBytes": 7451904,
"heapUsedBytes": 62186812,
"domNodes": -264,
"jsHeapTotalBytes": 18018304,
"scriptDurationMs": 483.257,
"eventListeners": -125,
"totalBlockingTimeMs": 0,
"frameDurationMs": 16.666666666666668,
"p95FrameDurationMs": 16.800000000000182
},
{
"name": "minimap-idle",
"durationMs": 2032.2570000000155,
"styleRecalcs": 11,
"styleRecalcDurationMs": 9.868000000000002,
"layouts": 0,
"layoutDurationMs": 0,
"taskDurationMs": 504.42999999999995,
"heapDeltaBytes": 3949248,
"heapUsedBytes": 56440284,
"domNodes": -259,
"jsHeapTotalBytes": 16445440,
"scriptDurationMs": 91.39999999999999,
"eventListeners": -125,
"totalBlockingTimeMs": 0,
"frameDurationMs": 16.666666666666668,
"p95FrameDurationMs": 16.699999999999818
},
{
"name": "minimap-idle",
"durationMs": 2033.3969999999795,
"styleRecalcs": 10,
"styleRecalcDurationMs": 7.664000000000001,
"layouts": 0,
"layoutDurationMs": 0,
"taskDurationMs": 512.499,
"heapDeltaBytes": 4270304,
"heapUsedBytes": 57092812,
"domNodes": -259,
"jsHeapTotalBytes": 15921152,
"scriptDurationMs": 95.15300000000002,
"eventListeners": -125,
"totalBlockingTimeMs": 0,
"frameDurationMs": 16.666666666666668,
"p95FrameDurationMs": 16.699999999999818
},
{
"name": "minimap-idle",
"durationMs": 2016.2780000000566,
"styleRecalcs": 11,
"styleRecalcDurationMs": 9.62,
"layouts": 0,
"layoutDurationMs": 0,
"taskDurationMs": 504.89099999999996,
"heapDeltaBytes": 3287452,
"heapUsedBytes": 56578968,
"domNodes": -258,
"jsHeapTotalBytes": 16445440,
"scriptDurationMs": 90.787,
"eventListeners": -127,
"totalBlockingTimeMs": 0,
"frameDurationMs": 16.66333333333332,
"p95FrameDurationMs": 16.800000000000182
},
{
"name": "subgraph-dom-widget-clipping",
"durationMs": 525.779,
"styleRecalcs": 48,
"styleRecalcDurationMs": 11.699,
"layouts": 0,
"layoutDurationMs": 0,
"taskDurationMs": 339.916,
"heapDeltaBytes": 6148208,
"heapUsedBytes": 49278468,
"domNodes": 22,
"jsHeapTotalBytes": 13893632,
"scriptDurationMs": 122.58300000000001,
"eventListeners": 8,
"totalBlockingTimeMs": 0,
"frameDurationMs": 16.666666666666668,
"p95FrameDurationMs": 16.700000000000273
},
{
"name": "subgraph-dom-widget-clipping",
"durationMs": 506.0940000000187,
"styleRecalcs": 48,
"styleRecalcDurationMs": 11.297,
"layouts": 0,
"layoutDurationMs": 0,
"taskDurationMs": 331.658,
"heapDeltaBytes": 6074296,
"heapUsedBytes": 50580620,
"domNodes": 22,
"jsHeapTotalBytes": 13893632,
"scriptDurationMs": 116.697,
"eventListeners": 8,
"totalBlockingTimeMs": 0,
"frameDurationMs": 16.663333333333338,
"p95FrameDurationMs": 16.700000000000273
},
{
"name": "subgraph-dom-widget-clipping",
"durationMs": 578.6570000000211,
"styleRecalcs": 49,
"styleRecalcDurationMs": 11.689,
"layouts": 0,
"layoutDurationMs": 0,
"taskDurationMs": 351.371,
"heapDeltaBytes": 6738512,
"heapUsedBytes": 49528172,
"domNodes": 22,
"jsHeapTotalBytes": 12582912,
"scriptDurationMs": 122.70900000000002,
"eventListeners": 8,
"totalBlockingTimeMs": 0,
"frameDurationMs": 16.666666666666668,
"p95FrameDurationMs": 16.799999999999727
},
{
"name": "subgraph-idle",
"durationMs": 2030.2050000000236,
"styleRecalcs": 10,
"styleRecalcDurationMs": 8.896999999999998,
"layouts": 0,
"layoutDurationMs": 0,
"taskDurationMs": 327.33299999999997,
"heapDeltaBytes": 19883328,
"heapUsedBytes": 63091804,
"domNodes": 20,
"jsHeapTotalBytes": 23068672,
"scriptDurationMs": 14.536,
"eventListeners": 4,
"totalBlockingTimeMs": 0,
"frameDurationMs": 16.666666666666668,
"p95FrameDurationMs": 16.799999999999272
},
{
"name": "subgraph-idle",
"durationMs": 2005.9160000000134,
"styleRecalcs": 12,
"styleRecalcDurationMs": 9.857999999999999,
"layouts": 0,
"layoutDurationMs": 0,
"taskDurationMs": 338.507,
"heapDeltaBytes": 20001740,
"heapUsedBytes": 62676800,
"domNodes": 23,
"jsHeapTotalBytes": 23068672,
"scriptDurationMs": 19.830000000000002,
"eventListeners": 6,
"totalBlockingTimeMs": 0,
"frameDurationMs": 16.666666666666668,
"p95FrameDurationMs": 16.700000000000728
},
{
"name": "subgraph-idle",
"durationMs": 1990.3759999999693,
"styleRecalcs": 11,
"styleRecalcDurationMs": 8.968,
"layouts": 0,
"layoutDurationMs": 0,
"taskDurationMs": 326.65299999999996,
"heapDeltaBytes": 19933768,
"heapUsedBytes": 63027188,
"domNodes": 22,
"jsHeapTotalBytes": 22806528,
"scriptDurationMs": 18.061,
"eventListeners": 6,
"totalBlockingTimeMs": 0,
"frameDurationMs": 16.666666666666668,
"p95FrameDurationMs": 16.699999999999818
},
{
"name": "subgraph-mouse-sweep",
"durationMs": 1963.6619999999994,
"styleRecalcs": 83,
"styleRecalcDurationMs": 43.881,
"layouts": 16,
"layoutDurationMs": 3.987,
"taskDurationMs": 859.941,
"heapDeltaBytes": 11910920,
"heapUsedBytes": 55040744,
"domNodes": 72,
"jsHeapTotalBytes": 23068672,
"scriptDurationMs": 97.748,
"eventListeners": 6,
"totalBlockingTimeMs": 0,
"frameDurationMs": 16.666666666666668,
"p95FrameDurationMs": 16.800000000000182
},
{
"name": "subgraph-mouse-sweep",
"durationMs": 1676.0529999999676,
"styleRecalcs": 76,
"styleRecalcDurationMs": 36.111999999999995,
"layouts": 16,
"layoutDurationMs": 4.7059999999999995,
"taskDurationMs": 622.392,
"heapDeltaBytes": 12019796,
"heapUsedBytes": 56307456,
"domNodes": 62,
"jsHeapTotalBytes": 23855104,
"scriptDurationMs": 91.925,
"eventListeners": 4,
"totalBlockingTimeMs": 0,
"frameDurationMs": 16.66333333333335,
"p95FrameDurationMs": 16.799999999999272
},
{
"name": "subgraph-mouse-sweep",
"durationMs": 1972.171000000003,
"styleRecalcs": 87,
"styleRecalcDurationMs": 48.458,
"layouts": 16,
"layoutDurationMs": 4.119000000000001,
"taskDurationMs": 896.405,
"heapDeltaBytes": 11848460,
"heapUsedBytes": 55059280,
"domNodes": 73,
"jsHeapTotalBytes": 22544384,
"scriptDurationMs": 93.58500000000001,
"eventListeners": 6,
"totalBlockingTimeMs": 0,
"frameDurationMs": 16.66333333333332,
"p95FrameDurationMs": 16.700000000000728
},
{
"name": "viewport-pan-sweep",
"durationMs": 8184.762000000006,
"styleRecalcs": 251,
"styleRecalcDurationMs": 42.287000000000006,
"layouts": 0,
"layoutDurationMs": 0,
"taskDurationMs": 3418.523,
"heapDeltaBytes": 27694264,
"heapUsedBytes": 78252080,
"domNodes": -255,
"jsHeapTotalBytes": 18485248,
"scriptDurationMs": 1217.786,
"eventListeners": -109,
"totalBlockingTimeMs": 0,
"frameDurationMs": 16.666666666666668,
"p95FrameDurationMs": 16.700000000000728
},
{
"name": "viewport-pan-sweep",
"durationMs": 8165.05699999999,
"styleRecalcs": 251,
"styleRecalcDurationMs": 42.102000000000004,
"layouts": 0,
"layoutDurationMs": 0,
"taskDurationMs": 3679.7329999999997,
"heapDeltaBytes": 25139272,
"heapUsedBytes": 75940564,
"domNodes": -258,
"jsHeapTotalBytes": 24776704,
"scriptDurationMs": 1368.9520000000002,
"eventListeners": -111,
"totalBlockingTimeMs": 0,
"frameDurationMs": 16.66333333333332,
"p95FrameDurationMs": 16.799999999999272
},
{
"name": "viewport-pan-sweep",
"durationMs": 8144.426000000067,
"styleRecalcs": 251,
"styleRecalcDurationMs": 41.717000000000006,
"layouts": 0,
"layoutDurationMs": 0,
"taskDurationMs": 3378.5380000000005,
"heapDeltaBytes": 24718636,
"heapUsedBytes": 75587420,
"domNodes": -257,
"jsHeapTotalBytes": 18747392,
"scriptDurationMs": 1187.2600000000002,
"eventListeners": -111,
"totalBlockingTimeMs": 0,
"frameDurationMs": 16.666666666666668,
"p95FrameDurationMs": 16.700000000000728
},
{
"name": "vue-large-graph-idle",
"durationMs": 10688.437000000022,
"styleRecalcs": 0,
"styleRecalcDurationMs": 0,
"layouts": 0,
"layoutDurationMs": 0,
"taskDurationMs": 10680.216,
"heapDeltaBytes": -33980944,
"heapUsedBytes": 163279804,
"domNodes": -8331,
"jsHeapTotalBytes": 23158784,
"scriptDurationMs": 549.225,
"eventListeners": -16466,
"totalBlockingTimeMs": 0,
"frameDurationMs": 17.223333333333358,
"p95FrameDurationMs": 16.799999999999272
},
{
"name": "vue-large-graph-idle",
"durationMs": 10751.192000000003,
"styleRecalcs": 0,
"styleRecalcDurationMs": 0,
"layouts": 0,
"layoutDurationMs": 0,
"taskDurationMs": 10742.264000000001,
"heapDeltaBytes": -31276680,
"heapUsedBytes": 159591632,
"domNodes": -8330,
"jsHeapTotalBytes": 18178048,
"scriptDurationMs": 526.297,
"eventListeners": -16470,
"totalBlockingTimeMs": 0,
"frameDurationMs": 16.666666666666668,
"p95FrameDurationMs": 16.700000000000728
},
{
"name": "vue-large-graph-idle",
"durationMs": 10587.341000000037,
"styleRecalcs": 0,
"styleRecalcDurationMs": 0,
"layouts": 0,
"layoutDurationMs": 0,
"taskDurationMs": 10574.504,
"heapDeltaBytes": -27698280,
"heapUsedBytes": 159473592,
"domNodes": -8333,
"jsHeapTotalBytes": 18178048,
"scriptDurationMs": 524.51,
"eventListeners": -16472,
"totalBlockingTimeMs": 0,
"frameDurationMs": 17.219999999999953,
"p95FrameDurationMs": 16.799999999999272
},
{
"name": "vue-large-graph-pan",
"durationMs": 14059.285999999986,
"styleRecalcs": 67,
"styleRecalcDurationMs": 12.766,
"layouts": 0,
"layoutDurationMs": 0,
"taskDurationMs": 14036.945,
"heapDeltaBytes": -34326556,
"heapUsedBytes": 160377996,
"domNodes": -8333,
"jsHeapTotalBytes": -3141632,
"scriptDurationMs": 804.732,
"eventListeners": -16458,
"totalBlockingTimeMs": 0,
"frameDurationMs": 17.223333333333358,
"p95FrameDurationMs": 16.799999999999272
},
{
"name": "vue-large-graph-pan",
"durationMs": 13655.123000000003,
"styleRecalcs": 67,
"styleRecalcDurationMs": 12.545,
"layouts": 0,
"layoutDurationMs": 0,
"taskDurationMs": 13635.347,
"heapDeltaBytes": -53366084,
"heapUsedBytes": 147866684,
"domNodes": -8331,
"jsHeapTotalBytes": 614400,
"scriptDurationMs": 829.7159999999999,
"eventListeners": -16490,
"totalBlockingTimeMs": 49,
"frameDurationMs": 16.666666666666668,
"p95FrameDurationMs": 16.799999999999272
},
{
"name": "vue-large-graph-pan",
"durationMs": 13763.344999999958,
"styleRecalcs": 67,
"styleRecalcDurationMs": 12.437000000000003,
"layouts": 0,
"layoutDurationMs": 0,
"taskDurationMs": 13743.765,
"heapDeltaBytes": -34098208,
"heapUsedBytes": 159712328,
"domNodes": -8331,
"jsHeapTotalBytes": 90112,
"scriptDurationMs": 802.0229999999999,
"eventListeners": -16458,
"totalBlockingTimeMs": 0,
"frameDurationMs": 17.776666666666642,
"p95FrameDurationMs": 16.700000000000728
},
{
"name": "workflow-execution",
"durationMs": 137.46000000003278,
"styleRecalcs": 11,
"styleRecalcDurationMs": 21.697000000000003,
"layouts": 5,
"layoutDurationMs": 1.5530000000000002,
"taskDurationMs": 100.906,
"heapDeltaBytes": 2946888,
"heapUsedBytes": 46989320,
"domNodes": 150,
"jsHeapTotalBytes": 262144,
"scriptDurationMs": 27.493999999999996,
"eventListeners": 37,
"totalBlockingTimeMs": 0,
"frameDurationMs": 16.666666666666668,
"p95FrameDurationMs": 16.700000000000273
},
{
"name": "workflow-execution",
"durationMs": 446.59200000000965,
"styleRecalcs": 17,
"styleRecalcDurationMs": 21.894999999999996,
"layouts": 5,
"layoutDurationMs": 1.2590000000000001,
"taskDurationMs": 115.52999999999999,
"heapDeltaBytes": 4497820,
"heapUsedBytes": 49763448,
"domNodes": 158,
"jsHeapTotalBytes": 0,
"scriptDurationMs": 27.740000000000002,
"eventListeners": 71,
"totalBlockingTimeMs": 0,
"frameDurationMs": 16.663333333333338,
"p95FrameDurationMs": 16.700000000000273
},
{
"name": "workflow-execution",
"durationMs": 443.93800000000283,
"styleRecalcs": 18,
"styleRecalcDurationMs": 22.751,
"layouts": 4,
"layoutDurationMs": 1.017,
"taskDurationMs": 110.72300000000001,
"heapDeltaBytes": 4453488,
"heapUsedBytes": 49154296,
"domNodes": 158,
"jsHeapTotalBytes": 0,
"scriptDurationMs": 23.951,
"eventListeners": 71,
"totalBlockingTimeMs": 0,
"frameDurationMs": 16.663333333333338,
"p95FrameDurationMs": 16.700000000000273
}
]
} |
There was a problem hiding this comment.
🧹 Nitpick comments (1)
src/lib/litegraph/src/subgraph/SubgraphNode.ts (1)
354-361: Consider usingsetPropertyfor property mutation.The callback directly mutates
selector.selected. While this works becauseselectoris a reference tothis.properties.proxyWidgetSelector, using the node's property change mechanism would ensure consistency with the trigger system and undo/redo if applicable.♻️ Optional: Use setProperty for consistency
callback: (value: unknown) => { - selector.selected = String(value) + this.setProperty('proxyWidgetSelector', { + ...selector, + selected: String(value) + }) this._selectorWidget!.value = String(value) this._invalidatePromotedViewsCache() const minSize = this.computeSize() this.setSize([this.size[0], minSize[1]]) this.graph?.setDirtyCanvas(true, true) }🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@src/lib/litegraph/src/subgraph/SubgraphNode.ts` around lines 354 - 361, The callback currently mutates selector.selected directly (selector is this.properties.proxyWidgetSelector); change it to use the node property API by calling this.setProperty('proxyWidgetSelector', <new object with selected set to String(value)>) instead of direct assignment, then update this._selectorWidget!.value, call this._invalidatePromotedViewsCache(), recompute size via this.computeSize(), call this.setSize([this.size[0], minSize[1]]), and mark the graph dirty with this.graph?.setDirtyCanvas(true, true) so property change hooks/undo-redo are honored.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.
Nitpick comments:
In `@src/lib/litegraph/src/subgraph/SubgraphNode.ts`:
- Around line 354-361: The callback currently mutates selector.selected directly
(selector is this.properties.proxyWidgetSelector); change it to use the node
property API by calling this.setProperty('proxyWidgetSelector', <new object with
selected set to String(value)>) instead of direct assignment, then update
this._selectorWidget!.value, call this._invalidatePromotedViewsCache(),
recompute size via this.computeSize(), call this.setSize([this.size[0],
minSize[1]]), and mark the graph dirty with this.graph?.setDirtyCanvas(true,
true) so property change hooks/undo-redo are honored.
ℹ️ Review info
⚙️ Run configuration
Configuration used: Path: .coderabbit.yaml
Review profile: CHILL
Plan: Pro
Run ID: 4d671434-2a8a-48cb-bdc8-03411ea61503
📒 Files selected for processing (3)
src/composables/graph/useGraphNodeManager.tssrc/core/schemas/promotionSchema.tssrc/lib/litegraph/src/subgraph/SubgraphNode.ts
Summary
Need BE changes for blueprints Comfy-Org/ComfyUI#13275
Allow subgraph nodes to conditionally show/hide groups of promoted widgets via a combo dropdown selector. Configured through the proxyWidgetSelector property in node properties.
Screenshots (if applicable)
before

after
https://github.com/user-attachments/assets/18e11041-7ef3-47cb-9617-b00a252ba3cb
┆Issue is synchronized with this Notion page by Unito