Skip to content

Commit 51c69c8

Browse files
committed
fix: foreignobject blocking all interactions; fixes #5168
1 parent 7283a1f commit 51c69c8

1 file changed

Lines changed: 19 additions & 16 deletions

File tree

src/modules/Core.js

Lines changed: 19 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -102,6 +102,22 @@ export default class Core {
102102

103103
this.setSVGDimensions()
104104

105+
// foreignObject must be added first (at the back in z-order) to prevent blocking interactions
106+
gl.dom.elLegendForeign = document.createElementNS(gl.SVGNS, 'foreignObject')
107+
Graphics.setAttrs(gl.dom.elLegendForeign, {
108+
x: 0,
109+
y: 0,
110+
width: gl.svgWidth,
111+
height: gl.svgHeight,
112+
})
113+
114+
gl.dom.elLegendWrap = document.createElement('div')
115+
gl.dom.elLegendWrap.classList.add('apexcharts-legend')
116+
117+
gl.dom.elWrap.appendChild(gl.dom.elLegendWrap)
118+
gl.dom.Paper.node.appendChild(gl.dom.elLegendForeign)
119+
120+
// Add accessibility elements after foreignObject to maintain proper z-order
105121
if (cnf.chart.accessibility.enabled) {
106122
const ariaLabel = this.getAccessibleChartLabel()
107123

@@ -110,10 +126,11 @@ export default class Core {
110126
'aria-label': ariaLabel,
111127
})
112128

113-
// Add title element for screen readers
129+
// Add title element for screen readers (after foreignObject)
114130
const titleEl = document.createElementNS(gl.SVGNS, 'title')
115131
titleEl.textContent = cnf.title.text || 'Chart'
116-
gl.dom.Paper.node.insertBefore(titleEl, gl.dom.Paper.node.firstChild)
132+
// Insert after foreignObject but before other elements
133+
gl.dom.Paper.node.insertBefore(titleEl, gl.dom.elLegendForeign.nextSibling)
117134

118135
// Add desc element when description is provided
119136
if (cnf.chart.accessibility.description) {
@@ -123,20 +140,6 @@ export default class Core {
123140
}
124141
}
125142

126-
gl.dom.elLegendForeign = document.createElementNS(gl.SVGNS, 'foreignObject')
127-
Graphics.setAttrs(gl.dom.elLegendForeign, {
128-
x: 0,
129-
y: 0,
130-
width: gl.svgWidth,
131-
height: gl.svgHeight,
132-
})
133-
134-
gl.dom.elLegendWrap = document.createElement('div')
135-
gl.dom.elLegendWrap.classList.add('apexcharts-legend')
136-
137-
gl.dom.elWrap.appendChild(gl.dom.elLegendWrap)
138-
gl.dom.Paper.node.appendChild(gl.dom.elLegendForeign)
139-
140143
gl.dom.elGraphical = gl.dom.Paper.group().attr({
141144
class: 'apexcharts-inner apexcharts-graphical',
142145
})

0 commit comments

Comments
 (0)