UNPKG

@taiga-ui/cdk

Version:

Base library for creating Angular components and applications using Taiga UI principles regarding of actual visual appearance

30 lines 5.19 kB
const IFRAME = 'position: fixed; visibility: hidden; pointer-events: none'; const BODY = 'height: fit-content; line-height: 1em;'; const CLASS = 'tui-font-size-watcher'; export function tuiFontSizeWatcher(callback, win = window) { if (win.document.querySelector(`.${CLASS}`)) { return () => { }; } const iframe = win.document.createElement('iframe'); const resize = () => { const { innerWidth, outerWidth, devicePixelRatio } = win; iframe.width = `${innerWidth === outerWidth ? innerWidth : innerWidth / devicePixelRatio}`; }; win.document.body.append(iframe); win.addEventListener('resize', resize); const doc = iframe.contentWindow?.document; const observer = new ResizeObserver(() => callback(doc?.body.offsetHeight || 0)); iframe.setAttribute('class', CLASS); iframe.setAttribute('style', IFRAME); doc?.documentElement.style.setProperty('font', '-apple-system-body'); doc?.body.setAttribute('style', BODY); doc?.body.insertAdjacentText('beforeend', '.'.repeat(1000)); observer.observe(doc?.body || iframe); resize(); return () => { observer.disconnect(); iframe.remove(); win.removeEventListener('resize', resize); }; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9udC1zaXplLXdhdGNoZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jZGsvdXRpbHMvbWlzY2VsbGFuZW91cy9mb250LXNpemUtd2F0Y2hlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxNQUFNLE1BQU0sR0FBRywyREFBMkQsQ0FBQztBQUMzRSxNQUFNLElBQUksR0FBRyx3Q0FBd0MsQ0FBQztBQUN0RCxNQUFNLEtBQUssR0FBRyx1QkFBdUIsQ0FBQztBQUV0QyxNQUFNLFVBQVUsa0JBQWtCLENBQzlCLFFBQW9DLEVBQ3BDLE1BQWMsTUFBTTtJQUVwQixJQUFJLEdBQUcsQ0FBQyxRQUFRLENBQUMsYUFBYSxDQUFDLElBQUksS0FBSyxFQUFFLENBQUMsRUFBRTtRQUN6QyxPQUFPLEdBQUcsRUFBRSxHQUFFLENBQUMsQ0FBQztLQUNuQjtJQUVELE1BQU0sTUFBTSxHQUFHLEdBQUcsQ0FBQyxRQUFRLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQ3BELE1BQU0sTUFBTSxHQUFHLEdBQVMsRUFBRTtRQUN0QixNQUFNLEVBQUMsVUFBVSxFQUFFLFVBQVUsRUFBRSxnQkFBZ0IsRUFBQyxHQUFHLEdBQUcsQ0FBQztRQUV2RCxNQUFNLENBQUMsS0FBSyxHQUFHLEdBQUcsVUFBVSxLQUFLLFVBQVUsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxVQUFVLEdBQUcsZ0JBQWdCLEVBQUUsQ0FBQztJQUMvRixDQUFDLENBQUM7SUFFRixHQUFHLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDakMsR0FBRyxDQUFDLGdCQUFnQixDQUFDLFFBQVEsRUFBRSxNQUFNLENBQUMsQ0FBQztJQUV2QyxNQUFNLEdBQUcsR0FBRyxNQUFNLENBQUMsYUFBYSxFQUFFLFFBQVEsQ0FBQztJQUMzQyxNQUFNLFFBQVEsR0FBRyxJQUFJLGNBQWMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxRQUFRLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxZQUFZLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUVqRixNQUFNLENBQUMsWUFBWSxDQUFDLE9BQU8sRUFBRSxLQUFLLENBQUMsQ0FBQztJQUNwQyxNQUFNLENBQUMsWUFBWSxDQUFDLE9BQU8sRUFBRSxNQUFNLENBQUMsQ0FBQztJQUNyQyxHQUFHLEVBQUUsZUFBZSxDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUMsTUFBTSxFQUFFLG9CQUFvQixDQUFDLENBQUM7SUFDckUsR0FBRyxFQUFFLElBQUksQ0FBQyxZQUFZLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQ3RDLEdBQUcsRUFBRSxJQUFJLENBQUMsa0JBQWtCLENBQUMsV0FBVyxFQUFFLEdBQUcsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztJQUM1RCxRQUFRLENBQUMsT0FBTyxDQUFDLEdBQUcsRUFBRSxJQUFJLElBQUksTUFBTSxDQUFDLENBQUM7SUFDdEMsTUFBTSxFQUFFLENBQUM7SUFFVCxPQUFPLEdBQUcsRUFBRTtRQUNSLFFBQVEsQ0FBQyxVQUFVLEVBQUUsQ0FBQztRQUN0QixNQUFNLENBQUMsTUFBTSxFQUFFLENBQUM7UUFDaEIsR0FBRyxDQUFDLG1CQUFtQixDQUFDLFFBQVEsRUFBRSxNQUFNLENBQUMsQ0FBQztJQUM5QyxDQUFDLENBQUM7QUFDTixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiY29uc3QgSUZSQU1FID0gJ3Bvc2l0aW9uOiBmaXhlZDsgdmlzaWJpbGl0eTogaGlkZGVuOyBwb2ludGVyLWV2ZW50czogbm9uZSc7XG5jb25zdCBCT0RZID0gJ2hlaWdodDogZml0LWNvbnRlbnQ7IGxpbmUtaGVpZ2h0OiAxZW07JztcbmNvbnN0IENMQVNTID0gJ3R1aS1mb250LXNpemUtd2F0Y2hlcic7XG5cbmV4cG9ydCBmdW5jdGlvbiB0dWlGb250U2l6ZVdhdGNoZXIoXG4gICAgY2FsbGJhY2s6IChmb250U2l6ZTogbnVtYmVyKSA9PiB2b2lkLFxuICAgIHdpbjogV2luZG93ID0gd2luZG93LFxuKTogKCkgPT4gdm9pZCB7XG4gICAgaWYgKHdpbi5kb2N1bWVudC5xdWVyeVNlbGVjdG9yKGAuJHtDTEFTU31gKSkge1xuICAgICAgICByZXR1cm4gKCkgPT4ge307XG4gICAgfVxuXG4gICAgY29uc3QgaWZyYW1lID0gd2luLmRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2lmcmFtZScpO1xuICAgIGNvbnN0IHJlc2l6ZSA9ICgpOiB2b2lkID0+IHtcbiAgICAgICAgY29uc3Qge2lubmVyV2lkdGgsIG91dGVyV2lkdGgsIGRldmljZVBpeGVsUmF0aW99ID0gd2luO1xuXG4gICAgICAgIGlmcmFtZS53aWR0aCA9IGAke2lubmVyV2lkdGggPT09IG91dGVyV2lkdGggPyBpbm5lcldpZHRoIDogaW5uZXJXaWR0aCAvIGRldmljZVBpeGVsUmF0aW99YDtcbiAgICB9O1xuXG4gICAgd2luLmRvY3VtZW50LmJvZHkuYXBwZW5kKGlmcmFtZSk7XG4gICAgd2luLmFkZEV2ZW50TGlzdGVuZXIoJ3Jlc2l6ZScsIHJlc2l6ZSk7XG5cbiAgICBjb25zdCBkb2MgPSBpZnJhbWUuY29udGVudFdpbmRvdz8uZG9jdW1lbnQ7XG4gICAgY29uc3Qgb2JzZXJ2ZXIgPSBuZXcgUmVzaXplT2JzZXJ2ZXIoKCkgPT4gY2FsbGJhY2soZG9jPy5ib2R5Lm9mZnNldEhlaWdodCB8fCAwKSk7XG5cbiAgICBpZnJhbWUuc2V0QXR0cmlidXRlKCdjbGFzcycsIENMQVNTKTtcbiAgICBpZnJhbWUuc2V0QXR0cmlidXRlKCdzdHlsZScsIElGUkFNRSk7XG4gICAgZG9jPy5kb2N1bWVudEVsZW1lbnQuc3R5bGUuc2V0UHJvcGVydHkoJ2ZvbnQnLCAnLWFwcGxlLXN5c3RlbS1ib2R5Jyk7XG4gICAgZG9jPy5ib2R5LnNldEF0dHJpYnV0ZSgnc3R5bGUnLCBCT0RZKTtcbiAgICBkb2M/LmJvZHkuaW5zZXJ0QWRqYWNlbnRUZXh0KCdiZWZvcmVlbmQnLCAnLicucmVwZWF0KDEwMDApKTtcbiAgICBvYnNlcnZlci5vYnNlcnZlKGRvYz8uYm9keSB8fCBpZnJhbWUpO1xuICAgIHJlc2l6ZSgpO1xuXG4gICAgcmV0dXJuICgpID0+IHtcbiAgICAgICAgb2JzZXJ2ZXIuZGlzY29ubmVjdCgpO1xuICAgICAgICBpZnJhbWUucmVtb3ZlKCk7XG4gICAgICAgIHdpbi5yZW1vdmVFdmVudExpc3RlbmVyKCdyZXNpemUnLCByZXNpemUpO1xuICAgIH07XG59XG4iXX0=