function wrapAndMinimiseWidth(text, width, dyAdjust, options) {
const NUM_ITERS = 8;
text.each(function () {
const thisText = d3.select(this);
const textString = thisText.text();
wrapOne(thisText, width, dyAdjust, options);
const tspanCount = thisText.selectAll("tspan").size();
let maxTspanWidth = getMaxTspanWidth(thisText);
let lo = width / 5,
hi = width;
for (let i = 0; i < NUM_ITERS; i++) {
thisText.text(textString);
let midpoint = (lo + hi) / 2;
wrapOne(thisText, midpoint, dyAdjust, options);
if (thisText.selectAll("tspan").size() === tspanCount) {
hi = midpoint;
} else {
lo = midpoint;
}
}
thisText.text(textString);
wrapOne(thisText, hi, dyAdjust, options);
});
}