{
const svg = html`<svg></svg>`
const svgSelection = d3.select(svg).attr('width', config.width).attr('height', config.height);
const bgCircle = d3.arc()
.startAngle(config.startAngle * Math.PI / 180)
.endAngle(config.endAngle * Math.PI/180)
.innerRadius(config.radius - config.bgCircleStroke / 2)
.outerRadius(config.radius + config.bgCircleStroke / 2)
.cornerRadius(config.bgCircleStroke);
svgSelection.append('path').attr('d', bgCircle).style("fill", "#DBE8E4").attr('transform', `translate(100, 100)`);
const valueCirleGroup = svgSelection.append('g');
const valueCircle = d3.arc()
.startAngle(valueScale(0))
.endAngle(valueScale(realValue))
.innerRadius(config.radius - config.valueCircleStroke / 2)
.outerRadius(config.radius + config.valueCircleStroke / 2)
.cornerRadius(config.valueCircleStroke);
const circleGradient = appendGradient(svg);
valueCirleGroup
.append('path')
.attr('d', valueCircle)
.style('filter', 'drop-shadow( 3px 3px 2px rgba(0, 0, 0, .2))')
.attr('fill', `url(#${circleGradient.attr('id')})`)
.attr('stroke', "none")
.attr('transform', `translate(100, 100)`)
// .endAngle(2*Math.PI)
// .innerRadius(0)
// .outerRadius(config.centerRadius)
const centerPoint = svgSelection.append('circle');
centerPoint
.attr('id', 'center-point')
.attr('cx', config.radius + config.margin)
.attr('cy', config.radius + config.margin)
.attr('r', config.centerRadius)
// .attr('filter', "url(#filterCenter)")
.style('filter', 'drop-shadow( 3px 3px 2px rgba(0, 0, 0, 0.2))')
.attr('fill', '#333');
// const degree = valueScale(realValue) * 180/ Math.PI;
// const degree = - 135
mutable pointer = svgSelection
.insert('g', "#center-point")
.selectAll('path')
.data([realValue])
.join("path")
.attr('d', pointerString)
.attr('fill', '#ff4242')
.attr('transform', d => `rotate(${valueScale(d) * 180/ Math.PI}, 100, 100) translate(61, 40)`)
const innerRadius = config.radius - config.valueCircleStroke / 2 - 2
const TICK_LEN =4 ;
const BIG_TICK_LEN = 10;
svgSelection.append('g')
.attr('id', 'tick-group')
.attr('transform', `translate(100, 100)`)
.selectAll()
.data(ticks)
.join('line')
.attr("x1", angle => innerRadius * Math.cos(angle))
.attr("y1", angle => innerRadius * Math.sin(angle))
.attr("x2", angle => (innerRadius - TICK_LEN) * Math.cos(angle))
.attr("y2", angle => (innerRadius - TICK_LEN) * Math.sin(angle))
.attr('stroke', '#00C1B2')
.attr('stroke-width', 1)
svgSelection.append('g')
.attr('id', 'big-tick-group')
.attr('transform', `translate(100, 100)`)
.selectAll()
.data(bigTicks)
.join('line')
.attr("x1", angle => (innerRadius) * Math.cos(angle))
.attr("y1", angle => (innerRadius) * Math.sin(angle))
.attr("x2", angle => (innerRadius - 10) * Math.cos(angle))
.attr("y2", angle => (innerRadius - 10) * Math.sin(angle))
.attr('stroke-width', 2)
.attr('stroke', '#00C1B2')
const filterDefsGroup = svgSelection.append('defs')
filterDefsGroup.node().appendChild(filterRing)
filterDefsGroup.node().appendChild(filterCenter)
return svg
}