UNPKG

@visx/text

Version:
35 lines (34 loc) 1.36 kB
"use strict"; 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)}`);