{
const svgD3Node = d3.select(svg`<svg width=${width} height=400></svg>`);
const sourceData = {
x: width/2-100,
y: 50
};
const targetData = {
x: width/2+100,
y: 200
};
const drag = d3.drag().on('drag', dragged)
const link = svgD3Node.append('path')
.attr('d', diagonal(sourceData, targetData))
.attr('fill', 'none')
.attr('stroke', 'steelblue')
const source = svgD3Node.append('circle')
.datum(sourceData)
.attr('r', 10)
.attr('cx', sourceData.x)
.attr('cy', sourceData.y)
.attr('fill', 'steelblue')
.attr('cursor', 'move')
.call(drag)
const target = svgD3Node.append('circle')
.datum(targetData)
.attr('r', 10)
.attr('cx', targetData.x)
.attr('cy', targetData.y)
.attr('fill', 'steelblue')
.attr('cursor', 'move')
.call(drag)
function dragged(d3Event,d) {
console.log('d',d,'d3Event',d3Event)
d.x = d3Event.x;
d.y = d3Event.y;
update();
}
function update() {
source.attr('cx', sourceData.x).attr('cy', sourceData.y);
target.attr('cx', targetData.x).attr('cy', targetData.y);
link.attr('d', diagonal(sourceData, targetData))
}
yield svgD3Node.node();
}