From 2e0440fe0daf841b3921ad2eebdc4126470a9a3a Mon Sep 17 00:00:00 2001
From: Mojtaba Samimi <arch.mojtaba.samimi@gmail.com>
Date: Thu, 14 Mar 2024 11:35:25 -0400
Subject: [PATCH 1/3] fix centering multi-line headers in treemap

---
 src/traces/treemap/draw_descendants.js | 8 ++++++--
 1 file changed, 6 insertions(+), 2 deletions(-)

diff --git a/src/traces/treemap/draw_descendants.js b/src/traces/treemap/draw_descendants.js
index 32c20344a62..dc37f2e0ceb 100644
--- a/src/traces/treemap/draw_descendants.js
+++ b/src/traces/treemap/draw_descendants.js
@@ -184,9 +184,13 @@ module.exports = function drawDescendants(gd, cd, entry, slices, opts) {
 
         var font = Lib.ensureUniformFontSize(gd, helpers.determineTextFont(trace, pt, fullLayout.font));
 
-        sliceText.text(pt._text || ' ') // use one space character instead of a blank string to avoid jumps during transition
+
+        var text = pt._text || ' '; // use one space character instead of a blank string to avoid jumps during transition
+        var singleLineHeader = isHeader && text.indexOf('<br>') === -1;
+
+        sliceText.text(text)
             .classed('slicetext', true)
-            .attr('text-anchor', hasRight ? 'end' : (hasLeft || isHeader) ? 'start' : 'middle')
+            .attr('text-anchor', hasRight ? 'end' : (hasLeft || singleLineHeader) ? 'start' : 'middle')
             .call(Drawing.font, font)
             .call(svgTextUtils.convertToTspans, gd);
 

From 9075d94c16718b139a9de0ec21c6d1c43e5240cf Mon Sep 17 00:00:00 2001
From: Mojtaba Samimi <arch.mojtaba.samimi@gmail.com>
Date: Thu, 14 Mar 2024 12:00:02 -0400
Subject: [PATCH 2/3] add test

---
 .../zz-treemap_multi-line_headers.png         | Bin 0 -> 10530 bytes
 .../mocks/zz-treemap_multi-line_headers.json  |  41 ++++++++++++++++++
 2 files changed, 41 insertions(+)
 create mode 100644 test/image/baselines/zz-treemap_multi-line_headers.png
 create mode 100644 test/image/mocks/zz-treemap_multi-line_headers.json

diff --git a/test/image/baselines/zz-treemap_multi-line_headers.png b/test/image/baselines/zz-treemap_multi-line_headers.png
new file mode 100644
index 0000000000000000000000000000000000000000..58afe6c819f67217beec881dc081892e650b6748
GIT binary patch
literal 10530
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
YL8GY(KxOkl?IX^k2l^V7YBsO`2cIeI5C8xG

literal 0
HcmV?d00001

diff --git a/test/image/mocks/zz-treemap_multi-line_headers.json b/test/image/mocks/zz-treemap_multi-line_headers.json
new file mode 100644
index 00000000000..7119fff7852
--- /dev/null
+++ b/test/image/mocks/zz-treemap_multi-line_headers.json
@@ -0,0 +1,41 @@
+{
+    "data": [
+        {
+            "labels": [
+                "parent2",
+                "parent1<br>Long text on second line",
+                "item2",
+                "item1"
+            ],
+            "name": "",
+            "parents": [
+                "",
+                "",
+                "parent2",
+                "parent1<br>Long text on second line"
+            ],
+            "values": [
+                0,
+                0,
+                200,
+                500
+            ],
+            "type": "treemap",
+            "textposition": "middle center",
+            "texttemplate": "<b>%{label}</b>",
+            "textfont": {
+                "size": 20
+            }
+        }
+    ],
+    "layout": {
+        "margin": {
+            "t": 50,
+            "b": 10,
+            "l": 10,
+            "r": 10
+        },
+        "height": 200,
+        "width": 500
+    }
+}

From c5455f0a9a5682c5dad74215a3e9dd85c5101820 Mon Sep 17 00:00:00 2001
From: Mojtaba Samimi <arch.mojtaba.samimi@gmail.com>
Date: Thu, 14 Mar 2024 12:13:59 -0400
Subject: [PATCH 3/3] draft log

---
 draftlogs/6923_fix.md | 1 +
 1 file changed, 1 insertion(+)
 create mode 100644 draftlogs/6923_fix.md

diff --git a/draftlogs/6923_fix.md b/draftlogs/6923_fix.md
new file mode 100644
index 00000000000..2dc85b084b7
--- /dev/null
+++ b/draftlogs/6923_fix.md
@@ -0,0 +1 @@
+ - Fix centering multi-line headers for treemap traces [[#6923](https://github.com/plotly/plotly.js/pull/6923)]