@visx/text
Version:
visx text
35 lines (34 loc) • 1.36 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = void 0;
var _memoize = _interopRequireDefault(require("./memoize"));
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
const MEASUREMENT_ELEMENT_ID = '__react_svg_text_measurement_id';
function getStringWidth(str, style) {
if (typeof document === 'undefined') return null;
try {
// Calculate length of each word to be used to determine number of words per line
let textEl = document.getElementById(MEASUREMENT_ELEMENT_ID);
if (!textEl) {
const svg = document.createElementNS('http://www.w3.org/2000/svg', 'svg');
svg.setAttribute('aria-hidden', 'true');
svg.style.width = '0';
svg.style.height = '0';
svg.style.position = 'absolute';
svg.style.top = '-100%';
svg.style.left = '-100%';
textEl = document.createElementNS('http://www.w3.org/2000/svg', 'text');
textEl.setAttribute('id', MEASUREMENT_ELEMENT_ID);
svg.appendChild(textEl);
document.body.appendChild(svg);
}
Object.assign(textEl.style, style);
textEl.textContent = str;
return textEl.getComputedTextLength();
} catch {
return null;
}
}
var _default = exports.default = (0, _memoize.default)(getStringWidth, (str, style) => `${str}_${JSON.stringify(style)}`);