feat: support histogram display in curve widget#10365
Conversation
🎨 Storybook: ✅ Built — View Storybook |
|
Note Reviews pausedIt looks like this branch is under active development. To avoid overwhelming you with review comments due to an influx of new commits, CodeRabbit has automatically paused this review. You can configure this behavior by changing the Use the following commands to manage reviews:
Use the checkboxes below for quick actions:
📝 WalkthroughWalkthroughWidgets now carry a Changes
Sequence DiagramsequenceDiagram
participant NW as NodeWidgets.vue
participant WC as WidgetCurve.vue
participant Store as nodeOutputStore
participant CE as CurveEditor
participant Utils as curveUtils
NW->>NW: compute nodeLocatorId (widget.nodeId or getLocatorIdFromNodeData)
NW->>WC: pass simplified widget (includes nodeLocatorId)
WC->>Store: read nodeOutputs[nodeLocatorId]?.histogram
Store-->>WC: histogram data (or null)
WC->>CE: bind :histogram prop
CE->>Utils: call histogramToPath(histogram)
Utils-->>CE: return SVG path (uses actual bin count & percentile)
CE->>CE: render histogram curve
WC->>WC: watch upstreamValue
WC-->>WC: override modelValue when widget disabled and upstreamValue present
Estimated Code Review Effort🎯 3 (Moderate) | ⏱️ ~20 minutes Poem
🚥 Pre-merge checks | ✅ 2 | ❌ 2❌ Failed checks (2 warnings)
✅ Passed checks (2 passed)
✏️ Tip: You can configure your own custom pre-merge checks in the settings. ✨ Finishing Touches🧪 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 |
🎭 Playwright: ✅ 699 passed, 0 failed · 4 flaky📊 Browser Reports
|
📦 Bundle: 5.08 MB gzip 🔴 +440 BDetailsSummary
Category Glance App Entry Points — 23 kB (baseline 23 kB) • ⚪ 0 BMain entry bundles and manifests
Status: 1 added / 1 removed Graph Workspace — 1.13 MB (baseline 1.13 MB) • ⚪ 0 BGraph editor runtime, canvas, workflow orchestration
Status: 1 added / 1 removed Views & Navigation — 76.7 kB (baseline 76.7 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.9 kB (baseline 60.9 kB) • ⚪ 0 BReusable component library chunks
Status: 5 added / 5 removed / 8 unchanged Data & Services — 2.95 MB (baseline 2.95 MB) • 🔴 +182 BStores, services, APIs, and repositories
Status: 13 added / 13 removed / 4 unchanged Utilities & Hooks — 334 kB (baseline 334 kB) • ⚪ 0 BHelpers, composables, and utility bundles
Status: 13 added / 13 removed / 12 unchanged Vendor & Third-Party — 9.8 MB (baseline 9.8 MB) • ⚪ 0 BExternal libraries and shared vendor chunks Status: 16 unchanged Other — 8.41 MB (baseline 8.41 MB) • 🔴 +793 BBundles that do not match a named category
Status: 55 added / 55 removed / 79 unchanged ⚡ Performance Report
All metrics
Historical variance (last 10 runs)
Trend (last 10 commits on main)
Raw data{
"timestamp": "2026-03-25T13:52:39.972Z",
"gitSha": "fa6591ca9a0323ca8be49a48f0a3fb31ca0be5a2",
"branch": "feat/curve-histogram-support",
"measurements": [
{
"name": "canvas-idle",
"durationMs": 2013.056999999975,
"styleRecalcs": 11,
"styleRecalcDurationMs": 11.184,
"layouts": 0,
"layoutDurationMs": 0,
"taskDurationMs": 354.282,
"heapDeltaBytes": 20270588,
"domNodes": 23,
"jsHeapTotalBytes": 23068672,
"scriptDurationMs": 20.610999999999997,
"eventListeners": 30,
"totalBlockingTimeMs": 0,
"frameDurationMs": 16.66999999999998
},
{
"name": "canvas-idle",
"durationMs": 2024.628000000007,
"styleRecalcs": 10,
"styleRecalcDurationMs": 9.402000000000001,
"layouts": 0,
"layoutDurationMs": 0,
"taskDurationMs": 350.75800000000004,
"heapDeltaBytes": 20314964,
"domNodes": 20,
"jsHeapTotalBytes": 22544384,
"scriptDurationMs": 20.857999999999997,
"eventListeners": 6,
"totalBlockingTimeMs": 0,
"frameDurationMs": 16.680000000000017
},
{
"name": "canvas-idle",
"durationMs": 2010.3560000000016,
"styleRecalcs": 10,
"styleRecalcDurationMs": 9.097000000000001,
"layouts": 0,
"layoutDurationMs": 0,
"taskDurationMs": 335.442,
"heapDeltaBytes": 19794552,
"domNodes": 19,
"jsHeapTotalBytes": 22806528,
"scriptDurationMs": 14.292,
"eventListeners": 6,
"totalBlockingTimeMs": 0,
"frameDurationMs": 16.660000000000036
},
{
"name": "canvas-mouse-sweep",
"durationMs": 2007.6210000000003,
"styleRecalcs": 80,
"styleRecalcDurationMs": 41.756,
"layouts": 12,
"layoutDurationMs": 3.5889999999999995,
"taskDurationMs": 934.2969999999999,
"heapDeltaBytes": 16077200,
"domNodes": 64,
"jsHeapTotalBytes": 23330816,
"scriptDurationMs": 131.234,
"eventListeners": 6,
"totalBlockingTimeMs": 0,
"frameDurationMs": 16.66999999999998
},
{
"name": "canvas-mouse-sweep",
"durationMs": 1814.875000000029,
"styleRecalcs": 75,
"styleRecalcDurationMs": 35.471000000000004,
"layouts": 12,
"layoutDurationMs": 3.4469999999999996,
"taskDurationMs": 731.8929999999999,
"heapDeltaBytes": 16436080,
"domNodes": 58,
"jsHeapTotalBytes": 24117248,
"scriptDurationMs": 130.496,
"eventListeners": 4,
"totalBlockingTimeMs": 0,
"frameDurationMs": 16.66999999999998
},
{
"name": "canvas-mouse-sweep",
"durationMs": 2041.8560000000525,
"styleRecalcs": 84,
"styleRecalcDurationMs": 42.456,
"layouts": 12,
"layoutDurationMs": 3.2169999999999996,
"taskDurationMs": 944.3529999999998,
"heapDeltaBytes": 15572324,
"domNodes": 66,
"jsHeapTotalBytes": 23855104,
"scriptDurationMs": 132.835,
"eventListeners": 6,
"totalBlockingTimeMs": 0,
"frameDurationMs": 16.670000000000073
},
{
"name": "canvas-zoom-sweep",
"durationMs": 1729.974999999996,
"styleRecalcs": 31,
"styleRecalcDurationMs": 18.012,
"layouts": 6,
"layoutDurationMs": 0.7599999999999998,
"taskDurationMs": 300.30400000000003,
"heapDeltaBytes": 15704300,
"domNodes": 77,
"jsHeapTotalBytes": 23068672,
"scriptDurationMs": 22.555999999999997,
"eventListeners": 19,
"totalBlockingTimeMs": 0,
"frameDurationMs": 16.660000000000036
},
{
"name": "canvas-zoom-sweep",
"durationMs": 1720.2279999999632,
"styleRecalcs": 32,
"styleRecalcDurationMs": 16.227,
"layouts": 6,
"layoutDurationMs": 0.624,
"taskDurationMs": 289.05099999999993,
"heapDeltaBytes": 24732856,
"domNodes": 79,
"jsHeapTotalBytes": 20447232,
"scriptDurationMs": 24.514000000000003,
"eventListeners": 21,
"totalBlockingTimeMs": 0,
"frameDurationMs": 16.66999999999998
},
{
"name": "canvas-zoom-sweep",
"durationMs": 1714.8509999999533,
"styleRecalcs": 31,
"styleRecalcDurationMs": 18.8,
"layouts": 6,
"layoutDurationMs": 0.6829999999999998,
"taskDurationMs": 295.748,
"heapDeltaBytes": 24912632,
"domNodes": 84,
"jsHeapTotalBytes": 21233664,
"scriptDurationMs": 23.044,
"eventListeners": 49,
"totalBlockingTimeMs": 0,
"frameDurationMs": 16.66999999999998
},
{
"name": "dom-widget-clipping",
"durationMs": 597.6640000000089,
"styleRecalcs": 13,
"styleRecalcDurationMs": 11.938999999999998,
"layouts": 0,
"layoutDurationMs": 0,
"taskDurationMs": 387.392,
"heapDeltaBytes": 7538012,
"domNodes": 22,
"jsHeapTotalBytes": 12320768,
"scriptDurationMs": 65.634,
"eventListeners": 2,
"totalBlockingTimeMs": 0,
"frameDurationMs": 16.65999999999999
},
{
"name": "dom-widget-clipping",
"durationMs": 540.8459999999877,
"styleRecalcs": 14,
"styleRecalcDurationMs": 11.560999999999998,
"layouts": 0,
"layoutDurationMs": 0,
"taskDurationMs": 330.8949999999999,
"heapDeltaBytes": 6558480,
"domNodes": 27,
"jsHeapTotalBytes": 13893632,
"scriptDurationMs": 63.865,
"eventListeners": 26,
"totalBlockingTimeMs": 0,
"frameDurationMs": 16.66999999999998
},
{
"name": "dom-widget-clipping",
"durationMs": 588.1990000000314,
"styleRecalcs": 13,
"styleRecalcDurationMs": 13.156,
"layouts": 0,
"layoutDurationMs": 0,
"taskDurationMs": 338.874,
"heapDeltaBytes": 7224372,
"domNodes": 22,
"jsHeapTotalBytes": 12845056,
"scriptDurationMs": 64.537,
"eventListeners": 2,
"totalBlockingTimeMs": 0,
"frameDurationMs": 16.660000000000036
},
{
"name": "large-graph-idle",
"durationMs": 2026.6479999999945,
"styleRecalcs": 12,
"styleRecalcDurationMs": 12.356,
"layouts": 0,
"layoutDurationMs": 0,
"taskDurationMs": 523.602,
"heapDeltaBytes": 4294292,
"domNodes": -261,
"jsHeapTotalBytes": 16453632,
"scriptDurationMs": 94.457,
"eventListeners": -146,
"totalBlockingTimeMs": 0,
"frameDurationMs": 16.66999999999998
},
{
"name": "large-graph-idle",
"durationMs": 2017.4319999999852,
"styleRecalcs": 13,
"styleRecalcDurationMs": 13.654,
"layouts": 0,
"layoutDurationMs": 0,
"taskDurationMs": 539.166,
"heapDeltaBytes": 18955412,
"domNodes": -260,
"jsHeapTotalBytes": 15200256,
"scriptDurationMs": 97.75699999999999,
"eventListeners": -148,
"totalBlockingTimeMs": 0,
"frameDurationMs": 16.660000000000036
},
{
"name": "large-graph-idle",
"durationMs": 2054.144000000065,
"styleRecalcs": 11,
"styleRecalcDurationMs": 11.607,
"layouts": 0,
"layoutDurationMs": 0,
"taskDurationMs": 525.504,
"heapDeltaBytes": 4935900,
"domNodes": -262,
"jsHeapTotalBytes": 16191488,
"scriptDurationMs": 93.38499999999999,
"eventListeners": -146,
"totalBlockingTimeMs": 0,
"frameDurationMs": 16.66999999999998
},
{
"name": "large-graph-pan",
"durationMs": 2139.1279999999997,
"styleRecalcs": 68,
"styleRecalcDurationMs": 14.807999999999998,
"layouts": 0,
"layoutDurationMs": 0,
"taskDurationMs": 1030.792,
"heapDeltaBytes": 17238244,
"domNodes": -271,
"jsHeapTotalBytes": 18755584,
"scriptDurationMs": 384.98299999999995,
"eventListeners": -170,
"totalBlockingTimeMs": 0,
"frameDurationMs": 16.66999999999998
},
{
"name": "large-graph-pan",
"durationMs": 2149.411999999984,
"styleRecalcs": 68,
"styleRecalcDurationMs": 15.834999999999999,
"layouts": 0,
"layoutDurationMs": 0,
"taskDurationMs": 1060.147,
"heapDeltaBytes": 21170352,
"domNodes": -270,
"jsHeapTotalBytes": 18522112,
"scriptDurationMs": 391.579,
"eventListeners": -170,
"totalBlockingTimeMs": 0,
"frameDurationMs": 16.66999999999998
},
{
"name": "large-graph-pan",
"durationMs": 2127.4329999999964,
"styleRecalcs": 67,
"styleRecalcDurationMs": 13.902000000000001,
"layouts": 0,
"layoutDurationMs": 0,
"taskDurationMs": 1082.97,
"heapDeltaBytes": -1874376,
"domNodes": -272,
"jsHeapTotalBytes": 18522112,
"scriptDurationMs": 405.66100000000006,
"eventListeners": -172,
"totalBlockingTimeMs": 0,
"frameDurationMs": 16.659999999999947
},
{
"name": "minimap-idle",
"durationMs": 2030.986999999982,
"styleRecalcs": 8,
"styleRecalcDurationMs": 7.276999999999998,
"layouts": 0,
"layoutDurationMs": 0,
"taskDurationMs": 509.803,
"heapDeltaBytes": 3120880,
"domNodes": -271,
"jsHeapTotalBytes": 17240064,
"scriptDurationMs": 90.91700000000002,
"eventListeners": -170,
"totalBlockingTimeMs": 0,
"frameDurationMs": 16.66999999999998
},
{
"name": "minimap-idle",
"durationMs": 1992.153999999971,
"styleRecalcs": 9,
"styleRecalcDurationMs": 8.719999999999999,
"layouts": 0,
"layoutDurationMs": 0,
"taskDurationMs": 511.182,
"heapDeltaBytes": 18598916,
"domNodes": -269,
"jsHeapTotalBytes": 15986688,
"scriptDurationMs": 91.71000000000001,
"eventListeners": -174,
"totalBlockingTimeMs": 0,
"frameDurationMs": 16.659999999999947
},
{
"name": "minimap-idle",
"durationMs": 2020.328999999947,
"styleRecalcs": 9,
"styleRecalcDurationMs": 8.349000000000002,
"layouts": 0,
"layoutDurationMs": 0,
"taskDurationMs": 511.077,
"heapDeltaBytes": -7253164,
"domNodes": -268,
"jsHeapTotalBytes": 15986688,
"scriptDurationMs": 85.55799999999999,
"eventListeners": -172,
"totalBlockingTimeMs": 0,
"frameDurationMs": 16.660000000000036
},
{
"name": "subgraph-dom-widget-clipping",
"durationMs": 532.8599999999994,
"styleRecalcs": 48,
"styleRecalcDurationMs": 11.867999999999999,
"layouts": 0,
"layoutDurationMs": 0,
"taskDurationMs": 342.994,
"heapDeltaBytes": 6376848,
"domNodes": 22,
"jsHeapTotalBytes": 12845056,
"scriptDurationMs": 119.415,
"eventListeners": 8,
"totalBlockingTimeMs": 0,
"frameDurationMs": 16.66999999999998
},
{
"name": "subgraph-dom-widget-clipping",
"durationMs": 531.5449999999942,
"styleRecalcs": 48,
"styleRecalcDurationMs": 12.559999999999999,
"layouts": 0,
"layoutDurationMs": 0,
"taskDurationMs": 350.619,
"heapDeltaBytes": 7405584,
"domNodes": 22,
"jsHeapTotalBytes": 12845056,
"scriptDurationMs": 125.62500000000001,
"eventListeners": 8,
"totalBlockingTimeMs": 0,
"frameDurationMs": 16.670000000000027
},
{
"name": "subgraph-dom-widget-clipping",
"durationMs": 546.510000000012,
"styleRecalcs": 47,
"styleRecalcDurationMs": 10.712,
"layouts": 0,
"layoutDurationMs": 0,
"taskDurationMs": 346.2609999999999,
"heapDeltaBytes": 7216936,
"domNodes": 20,
"jsHeapTotalBytes": 13369344,
"scriptDurationMs": 123.09299999999999,
"eventListeners": 8,
"totalBlockingTimeMs": 0,
"frameDurationMs": 16.670000000000027
},
{
"name": "subgraph-idle",
"durationMs": 1998.312999999996,
"styleRecalcs": 11,
"styleRecalcDurationMs": 12.328999999999999,
"layouts": 0,
"layoutDurationMs": 0,
"taskDurationMs": 392.369,
"heapDeltaBytes": 20122540,
"domNodes": 23,
"jsHeapTotalBytes": 22544384,
"scriptDurationMs": 22.05200000000001,
"eventListeners": 28,
"totalBlockingTimeMs": 0,
"frameDurationMs": 16.66999999999998
},
{
"name": "subgraph-idle",
"durationMs": 2014.1670000000431,
"styleRecalcs": 11,
"styleRecalcDurationMs": 10.51,
"layouts": 0,
"layoutDurationMs": 0,
"taskDurationMs": 322.468,
"heapDeltaBytes": 19812688,
"domNodes": 22,
"jsHeapTotalBytes": 22806528,
"scriptDurationMs": 13.676000000000004,
"eventListeners": 6,
"totalBlockingTimeMs": 0,
"frameDurationMs": 16.660000000000036
},
{
"name": "subgraph-idle",
"durationMs": 2010.485000000017,
"styleRecalcs": 11,
"styleRecalcDurationMs": 9.659999999999998,
"layouts": 0,
"layoutDurationMs": 0,
"taskDurationMs": 327.52799999999996,
"heapDeltaBytes": 19536032,
"domNodes": 22,
"jsHeapTotalBytes": 23068672,
"scriptDurationMs": 13.582000000000004,
"eventListeners": 6,
"totalBlockingTimeMs": 0,
"frameDurationMs": 16.660000000000036
},
{
"name": "subgraph-mouse-sweep",
"durationMs": 1999.5949999999993,
"styleRecalcs": 86,
"styleRecalcDurationMs": 47.00299999999999,
"layouts": 16,
"layoutDurationMs": 4.534,
"taskDurationMs": 908.9490000000001,
"heapDeltaBytes": 11292592,
"domNodes": 75,
"jsHeapTotalBytes": 22806528,
"scriptDurationMs": 97.96300000000001,
"eventListeners": 6,
"totalBlockingTimeMs": 0,
"frameDurationMs": 16.659999999999947
},
{
"name": "subgraph-mouse-sweep",
"durationMs": 1988.8259999999605,
"styleRecalcs": 88,
"styleRecalcDurationMs": 45.18900000000001,
"layouts": 16,
"layoutDurationMs": 4.3549999999999995,
"taskDurationMs": 916.458,
"heapDeltaBytes": 11914164,
"domNodes": 74,
"jsHeapTotalBytes": 23068672,
"scriptDurationMs": 105.738,
"eventListeners": 6,
"totalBlockingTimeMs": 0,
"frameDurationMs": 16.67999999999993
},
{
"name": "subgraph-mouse-sweep",
"durationMs": 1963.6749999999665,
"styleRecalcs": 84,
"styleRecalcDurationMs": 43.675,
"layouts": 16,
"layoutDurationMs": 4.6160000000000005,
"taskDurationMs": 873.564,
"heapDeltaBytes": 11370704,
"domNodes": 72,
"jsHeapTotalBytes": 23068672,
"scriptDurationMs": 95.79299999999999,
"eventListeners": 6,
"totalBlockingTimeMs": 0,
"frameDurationMs": 16.659999999999947
},
{
"name": "vue-large-graph-idle",
"durationMs": 11876.463000000002,
"styleRecalcs": 0,
"styleRecalcDurationMs": 0,
"layouts": 0,
"layoutDurationMs": 0,
"taskDurationMs": 11866.154,
"heapDeltaBytes": -39140040,
"domNodes": -8343,
"jsHeapTotalBytes": 16867328,
"scriptDurationMs": 618.716,
"eventListeners": -16479,
"totalBlockingTimeMs": 0,
"frameDurationMs": 20
},
{
"name": "vue-large-graph-idle",
"durationMs": 12652.814999999975,
"styleRecalcs": 2,
"styleRecalcDurationMs": 32.52200000000002,
"layouts": 2,
"layoutDurationMs": 9.949,
"taskDurationMs": 12635.715999999999,
"heapDeltaBytes": -25198592,
"domNodes": -5006,
"jsHeapTotalBytes": 47538176,
"scriptDurationMs": 582.488,
"eventListeners": 3535,
"totalBlockingTimeMs": 889,
"frameDurationMs": 18.329999999999927
},
{
"name": "vue-large-graph-idle",
"durationMs": 11862.122,
"styleRecalcs": 0,
"styleRecalcDurationMs": 0,
"layouts": 0,
"layoutDurationMs": 0,
"taskDurationMs": 11851.36,
"heapDeltaBytes": -31464908,
"domNodes": -8334,
"jsHeapTotalBytes": 27877376,
"scriptDurationMs": 587.8950000000001,
"eventListeners": -16483,
"totalBlockingTimeMs": 0,
"frameDurationMs": 18.31999999999971
},
{
"name": "vue-large-graph-pan",
"durationMs": 13785.562999999967,
"styleRecalcs": 66,
"styleRecalcDurationMs": 13.297999999999977,
"layouts": 0,
"layoutDurationMs": 0,
"taskDurationMs": 13760.418000000001,
"heapDeltaBytes": -34318912,
"domNodes": -8343,
"jsHeapTotalBytes": 25432064,
"scriptDurationMs": 831.201,
"eventListeners": -16473,
"totalBlockingTimeMs": 0,
"frameDurationMs": 18.329999999999927
},
{
"name": "vue-large-graph-pan",
"durationMs": 14177.81500000001,
"styleRecalcs": 67,
"styleRecalcDurationMs": 13.231999999999966,
"layouts": 0,
"layoutDurationMs": 0,
"taskDurationMs": 14158.427,
"heapDeltaBytes": -34132428,
"domNodes": -8343,
"jsHeapTotalBytes": -5763072,
"scriptDurationMs": 821.9,
"eventListeners": -16473,
"totalBlockingTimeMs": 37,
"frameDurationMs": 19.990000000000144
},
{
"name": "vue-large-graph-pan",
"durationMs": 13957.882999999925,
"styleRecalcs": 64,
"styleRecalcDurationMs": 13.400000000000023,
"layouts": 0,
"layoutDurationMs": 0,
"taskDurationMs": 13938.921,
"heapDeltaBytes": -21474056,
"domNodes": -8343,
"jsHeapTotalBytes": 26480640,
"scriptDurationMs": 862.4730000000001,
"eventListeners": -16477,
"totalBlockingTimeMs": 0,
"frameDurationMs": 20
},
{
"name": "workflow-execution",
"durationMs": 444.42900000001373,
"styleRecalcs": 17,
"styleRecalcDurationMs": 25.39,
"layouts": 5,
"layoutDurationMs": 1.487,
"taskDurationMs": 122.69499999999996,
"heapDeltaBytes": 4711112,
"domNodes": 164,
"jsHeapTotalBytes": 524288,
"scriptDurationMs": 29.255000000000003,
"eventListeners": 71,
"totalBlockingTimeMs": 0,
"frameDurationMs": 16.66999999999998
},
{
"name": "workflow-execution",
"durationMs": 446.85199999992165,
"styleRecalcs": 18,
"styleRecalcDurationMs": 22.156,
"layouts": 5,
"layoutDurationMs": 1.2679999999999998,
"taskDurationMs": 118.29500000000002,
"heapDeltaBytes": 4475432,
"domNodes": 158,
"jsHeapTotalBytes": 0,
"scriptDurationMs": 27.262,
"eventListeners": 71,
"totalBlockingTimeMs": 0,
"frameDurationMs": 16.65999999999999
},
{
"name": "workflow-execution",
"durationMs": 441.0060000000158,
"styleRecalcs": 17,
"styleRecalcDurationMs": 22.939000000000004,
"layouts": 5,
"layoutDurationMs": 1.36,
"taskDurationMs": 120.65299999999998,
"heapDeltaBytes": 4498088,
"domNodes": 155,
"jsHeapTotalBytes": 0,
"scriptDurationMs": 29.471,
"eventListeners": 71,
"totalBlockingTimeMs": 0,
"frameDurationMs": 16.66999999999998
}
]
} |
|
@jtydhr88 could you share the Image Histogram node please so I can give it a test, otherwise lgtm |
|
@pythongosssss @christian-byrne this is preparation for unmerged Comfy-Org/ComfyUI#12757 along with unpushed Image Histogram node, in general, we need to merge this FE change first. However If you want to try, you can checkout the core PR first, then use nodes_curve.py (I will send in slack) to replace your local file |
413e62a to
0870eed
Compare
There was a problem hiding this comment.
Actionable comments posted: 1
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.
Inline comments:
In `@src/composables/useUpstreamValue.ts`:
- Around line 43-46: The guard currently checks subgraphOutput?.linkIds.length
which can throw if linkIds is undefined; change the conditional to ensure
linkIds exists before reading .length and indexing: explicitly check
subgraphOutput?.linkIds (or use subgraphOutput?.linkIds?.length) and only call
node.subgraph.getLink(subgraphOutput.linkIds[0]) after verifying linkIds is
defined and has at least one element (referencing subgraphOutput and
node.subgraph.getLink to locate the code).
ℹ️ Review info
⚙️ Run configuration
Configuration used: Path: .coderabbit.yaml
Review profile: CHILL
Plan: Pro
Run ID: e30e3a69-65f1-452e-bcf9-ad8222d473ca
📒 Files selected for processing (5)
src/components/curve/WidgetCurve.vuesrc/components/curve/curveUtils.tssrc/composables/useUpstreamValue.tssrc/renderer/extensions/vueNodes/components/NodeWidgets.vuesrc/types/simplifiedWidget.ts
✅ Files skipped from review due to trivial changes (1)
- src/types/simplifiedWidget.ts
4796264 to
0b8a443
Compare
There was a problem hiding this comment.
Actionable comments posted: 1
🧹 Nitpick comments (1)
src/types/simplifiedWidget.ts (1)
79-80: Prefer the shared locator-id type over barestring.This key has to match the exact format produced by
getLocatorIdFromNodeData()/nodeIdToNodeLocatorId(). Keeping it as plainstringmakes it easy to pass a raw node id or unrelated key and only notice when the histogram lookup silently misses. If a sharedNodeLocatorIdalias is already available in a low-level types module, use that here.Based on learnings:
nodeIdToNodeLocatorId(nodeId, subgraph?)always returns a non-nullableNodeLocatorId(string).🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@src/types/simplifiedWidget.ts` around lines 79 - 80, Replace the bare string type for nodeLocatorId with the shared NodeLocatorId alias to ensure callers use the exact locator format produced by getLocatorIdFromNodeData() / nodeIdToNodeLocatorId(); specifically, import the NodeLocatorId type from the low-level types module and change the field signature from nodeLocatorId?: string to nodeLocatorId?: NodeLocatorId (keep optionality if callers can omit it).
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.
Inline comments:
In `@src/components/curve/curveUtils.ts`:
- Around line 164-166: The percentile index calculation underflows for small
arrays because it uses Math.floor((len - 1) * 0.995); update the index logic so
it derives from len and is clamped to valid bounds: compute const idx =
Math.min(Math.max(0, Math.floor(len * 0.995)), len - 1) (or equivalent) and then
use const max = sorted[idx]; keep the subsequent check if (max === 0) return ''
so small arrays like [0,100] won’t incorrectly pick 0 as the percentile. Ensure
you reference sqrtValues/ sorted/ len/ max in the updated code.
---
Nitpick comments:
In `@src/types/simplifiedWidget.ts`:
- Around line 79-80: Replace the bare string type for nodeLocatorId with the
shared NodeLocatorId alias to ensure callers use the exact locator format
produced by getLocatorIdFromNodeData() / nodeIdToNodeLocatorId(); specifically,
import the NodeLocatorId type from the low-level types module and change the
field signature from nodeLocatorId?: string to nodeLocatorId?: NodeLocatorId
(keep optionality if callers can omit it).
ℹ️ Review info
⚙️ Run configuration
Configuration used: Path: .coderabbit.yaml
Review profile: CHILL
Plan: Pro
Run ID: 271bf85a-f9e7-41b5-be08-1d61d5a5ea7e
📒 Files selected for processing (4)
src/components/curve/WidgetCurve.vuesrc/components/curve/curveUtils.tssrc/renderer/extensions/vueNodes/components/NodeWidgets.vuesrc/types/simplifiedWidget.ts
🚧 Files skipped from review as they are similar to previous changes (2)
- src/renderer/extensions/vueNodes/components/NodeWidgets.vue
- src/components/curve/WidgetCurve.vue
0b8a443 to
24831d9
Compare
24831d9 to
6a45714
Compare
I don’t see any action I can do
## Summary - WidgetCurve reads histogram data from nodeOutputStore (sent by backend CurveEditor node via ui output) and passes it to CurveEditor - histogramToPath now supports arbitrary-length bin arrays instead ofhardcoded 256 need BE changes ## Screenshots (if applicable) <img width="2431" height="1022" alt="image" src="https://github.com/user-attachments/assets/8421d4a7-1bff-4269-8b55-649838f9d619" /> <img width="2462" height="979" alt="image" src="https://github.com/user-attachments/assets/191c9163-82ab-4eb2-bb74-0037b3ccd383" /> ┆Issue is synchronized with this [Notion page](https://www.notion.so/PR-10365-feat-support-histogram-display-in-curve-widget-32a6d73d3650816b9852d73309a0b35f) by [Unito](https://www.unito.io)
## Summary - WidgetCurve reads histogram data from nodeOutputStore (sent by backend CurveEditor node via ui output) and passes it to CurveEditor - histogramToPath now supports arbitrary-length bin arrays instead ofhardcoded 256 need BE changes ## Screenshots (if applicable) <img width="2431" height="1022" alt="image" src="https://github.com/user-attachments/assets/8421d4a7-1bff-4269-8b55-649838f9d619" /> <img width="2462" height="979" alt="image" src="https://github.com/user-attachments/assets/191c9163-82ab-4eb2-bb74-0037b3ccd383" /> ┆Issue is synchronized with this [Notion page](https://www.notion.so/PR-10365-feat-support-histogram-display-in-curve-widget-32a6d73d3650816b9852d73309a0b35f) by [Unito](https://www.unito.io)
…#10562) Backport of #10365 to `cloud/1.42` Automatically created by backport workflow. ┆Issue is synchronized with this [Notion page](https://www.notion.so/PR-10562-backport-cloud-1-42-feat-support-histogram-display-in-curve-widget-32f6d73d365081efa3e7d6eaeb0f2eb1) by [Unito](https://www.unito.io) Co-authored-by: Terry Jia <terryjia88@gmail.com>
…10561) Backport of #10365 to `core/1.42` Automatically created by backport workflow. ┆Issue is synchronized with this [Notion page](https://www.notion.so/PR-10561-backport-core-1-42-feat-support-histogram-display-in-curve-widget-32f6d73d365081bfa21fd1d0ed01aa7a) by [Unito](https://www.unito.io) Co-authored-by: Terry Jia <terryjia88@gmail.com>
## Summary - WidgetCurve reads histogram data from nodeOutputStore (sent by backend CurveEditor node via ui output) and passes it to CurveEditor - histogramToPath now supports arbitrary-length bin arrays instead ofhardcoded 256 need BE changes ## Screenshots (if applicable) <img width="2431" height="1022" alt="image" src="https://github.com/user-attachments/assets/8421d4a7-1bff-4269-8b55-649838f9d619" /> <img width="2462" height="979" alt="image" src="https://github.com/user-attachments/assets/191c9163-82ab-4eb2-bb74-0037b3ccd383" /> ┆Issue is synchronized with this [Notion page](https://www.notion.so/PR-10365-feat-support-histogram-display-in-curve-widget-32a6d73d3650816b9852d73309a0b35f) by [Unito](https://www.unito.io)
Summary
need BE changes
Screenshots (if applicable)
┆Issue is synchronized with this Notion page by Unito