This is an automated email from the ASF dual-hosted git repository. vatsrahul1001 pushed a commit to branch backport-75076-v3-4-test in repository https://gitbox.apache.org/repos/asf/airflow.git
commit dd623354484197444f48ebb220ad14b5766a2970 Author: Rahul Vats <[email protected]> AuthorDate: Mon Oct 19 18:00:56 2026 +0530 Reserve graph header width for loop-group iteration badge (#75076) A looped Task Group renders an inline iteration badge (loop icon + count) in its graph-node header, but the node width was measured only from the label plus the "+ N tasks" button. The badge therefore overflowed into the button's space, overlapping it (e.g. rendering as "3 Tasks" for a single-task loop group). Add the badge width to the measured node width. (cherry picked from commit 27c8cd7059cf55a5e245a1d1bbee003d17112a21) --- airflow-core/src/airflow/ui/src/components/Graph/elkGraphUtils.ts | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/airflow-core/src/airflow/ui/src/components/Graph/elkGraphUtils.ts b/airflow-core/src/airflow/ui/src/components/Graph/elkGraphUtils.ts index 2d65750dd3f..36af06e7f16 100644 --- a/airflow-core/src/airflow/ui/src/components/Graph/elkGraphUtils.ts +++ b/airflow-core/src/airflow/ui/src/components/Graph/elkGraphUtils.ts @@ -375,6 +375,11 @@ export const generateElkGraph = ({ const label = `${node.label}${node.is_mapped ? "[1000]" : ""}${node.children ? ` + ${node.children.length} tasks` : ""}`; let width = getTextWidth(label, font) + 16; // 16 for icons + + // Budget the inline loop-iteration badge's width too, else it overlaps the "+ N tasks" button. + if (node.is_loop) { + width += getTextWidth(` ${node.loop_max_iterations ?? ""}`, font) + 20; // 20 for the loop icon + } const hasStateBar = Boolean(node.is_mapped) || Boolean(node.children); let height = hasStateBar ? 90 : 80;
