1 | export class UnitToPx {
|
2 | // cache this.con, el for reused
|
3 | static con = undefined;
|
4 | static el = undefined;
|
5 | // high sample will more accurate?
|
6 | static sample = 100;
|
7 | static pxPerUnitCache = {};
|
8 | static initElements() {
|
9 | if (!document) {
|
10 | return;
|
11 | }
|
12 | if (!this.con || !this.el) {
|
13 | this.con = document.createElement('div');
|
14 | this.el = document.createElement('div');
|
15 | }
|
16 | this.con.style.position = 'absolute';
|
17 | this.con.style.width = '0';
|
18 | this.con.style.height = '0';
|
19 | this.con.style.visibility = 'hidden';
|
20 | this.con.style.overflow = 'hidden';
|
21 | this.con.appendChild(this.el);
|
22 | }
|
23 | static pxPerUnit(unit) {
|
24 | if (!this.pxPerUnitCache[unit]) {
|
25 | if (!this.con || !this.el) {
|
26 | this.initElements();
|
27 | }
|
28 | if (!this.con || !this.el) {
|
29 | // dummy implementation for server-side rendering
|
30 | return 1;
|
31 | }
|
32 | this.el.style.width = this.sample + unit;
|
33 | document.body.appendChild(this.con);
|
34 | const dimension = this.el.getBoundingClientRect();
|
35 | this.con.parentNode.removeChild(this.con);
|
36 | this.pxPerUnitCache[unit] = dimension.width / this.sample;
|
37 | }
|
38 | return this.pxPerUnitCache[unit];
|
39 | }
|
40 | static toPx(length) {
|
41 | const unitRe = /^\s*([+-]?[\d\.]*)\s*(.*)\s*$/i; // NOSONAR
|
42 | const match = unitRe.exec(length);
|
43 | if (match != null && match.length > 2) {
|
44 | const bare = match[1] === '';
|
45 | const val = bare ? 1 : Number(match[1]);
|
46 | const unit = match[2];
|
47 | const valid = !isNaN(val) && unit;
|
48 | if (valid) {
|
49 | return unit === 'px' ? val : this.pxPerUnit(unit) * val;
|
50 | }
|
51 | }
|
52 | throw new TypeError('Error parsing length');
|
53 | }
|
54 | }
|
55 | //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidW5pdC10by1weC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1leHRlbmRlZC1wZGYtdmlld2VyL3NyYy9saWIvdW5pdC10by1weC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxNQUFNLE9BQU8sUUFBUTtJQUNuQixnQ0FBZ0M7SUFDeEIsTUFBTSxDQUFDLEdBQUcsR0FBK0IsU0FBUyxDQUFDO0lBQ25ELE1BQU0sQ0FBQyxFQUFFLEdBQStCLFNBQVMsQ0FBQztJQUUxRCxrQ0FBa0M7SUFDMUIsTUFBTSxDQUFVLE1BQU0sR0FBRyxHQUFHLENBQUM7SUFFN0IsTUFBTSxDQUFDLGNBQWMsR0FBOEIsRUFBRSxDQUFDO0lBRXRELE1BQU0sQ0FBQyxZQUFZO1FBQ3pCLElBQUksQ0FBQyxRQUFRLEVBQUU7WUFDYixPQUFPO1NBQ1I7UUFDRCxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLEVBQUU7WUFDekIsSUFBSSxDQUFDLEdBQUcsR0FBRyxRQUFRLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ3pDLElBQUksQ0FBQyxFQUFFLEdBQUcsUUFBUSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsQ0FBQztTQUN6QztRQUNELElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLFFBQVEsR0FBRyxVQUFVLENBQUM7UUFDckMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsS0FBSyxHQUFHLEdBQUcsQ0FBQztRQUMzQixJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUcsR0FBRyxDQUFDO1FBQzVCLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLFVBQVUsR0FBRyxRQUFRLENBQUM7UUFDckMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsUUFBUSxHQUFHLFFBQVEsQ0FBQztRQUNuQyxJQUFJLENBQUMsR0FBRyxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDaEMsQ0FBQztJQUVPLE1BQU0sQ0FBQyxTQUFTLENBQUMsSUFBWTtRQUNuQyxJQUFJLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsRUFBRTtZQUM5QixJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLEVBQUU7Z0JBQ3pCLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQzthQUNyQjtZQUNELElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsRUFBRTtnQkFDekIsaURBQWlEO2dCQUNqRCxPQUFPLENBQUMsQ0FBQzthQUNWO1lBQ0QsSUFBSSxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDO1lBQ3pDLFFBQVEsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUNwQyxNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDLHFCQUFxQixFQUFFLENBQUM7WUFDbEQsSUFBSSxDQUFDLEdBQUcsQ0FBQyxVQUFXLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUMzQyxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxHQUFHLFNBQVMsQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQztTQUMzRDtRQUNELE9BQU8sSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNuQyxDQUFDO0lBRU0sTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNO1FBQ3ZCLE1BQU0sTUFBTSxHQUFHLGdDQUFnQyxDQUFDLENBQUMsVUFBVTtRQUMzRCxNQUFNLEtBQUssR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ2xDLElBQUksS0FBSyxJQUFJLElBQUksSUFBSSxLQUFLLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtZQUNyQyxNQUFNLElBQUksR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLEtBQUssRUFBRSxDQUFDO1lBQzdCLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDeEMsTUFBTSxJQUFJLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ3RCLE1BQU0sS0FBSyxHQUFHLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxJQUFJLElBQUksQ0FBQztZQUNsQyxJQUFJLEtBQUssRUFBRTtnQkFDVCxPQUFPLElBQUksS0FBSyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUM7YUFDekQ7U0FDRjtRQUNELE1BQU0sSUFBSSxTQUFTLENBQUMsc0JBQXNCLENBQUMsQ0FBQztJQUM5QyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGNsYXNzIFVuaXRUb1B4IHtcbiAgLy8gY2FjaGUgdGhpcy5jb24sIGVsIGZvciByZXVzZWRcbiAgcHJpdmF0ZSBzdGF0aWMgY29uOiBIVE1MRGl2RWxlbWVudCB8IHVuZGVmaW5lZCA9IHVuZGVmaW5lZDtcbiAgcHJpdmF0ZSBzdGF0aWMgZWw6IEhUTUxEaXZFbGVtZW50IHwgdW5kZWZpbmVkID0gdW5kZWZpbmVkO1xuXG4gIC8vIGhpZ2ggc2FtcGxlIHdpbGwgbW9yZSBhY2N1cmF0ZT9cbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgc2FtcGxlID0gMTAwO1xuXG4gIHByaXZhdGUgc3RhdGljIHB4UGVyVW5pdENhY2hlOiB7IFtrZXk6IHN0cmluZ106IG51bWJlciB9ID0ge307XG5cbiAgcHJpdmF0ZSBzdGF0aWMgaW5pdEVsZW1lbnRzKCk6IHZvaWQge1xuICAgIGlmICghZG9jdW1lbnQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKCF0aGlzLmNvbiB8fCAhdGhpcy5lbCkge1xuICAgICAgdGhpcy5jb24gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgIHRoaXMuZWwgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICB9XG4gICAgdGhpcy5jb24uc3R5bGUucG9zaXRpb24gPSAnYWJzb2x1dGUnO1xuICAgIHRoaXMuY29uLnN0eWxlLndpZHRoID0gJzAnO1xuICAgIHRoaXMuY29uLnN0eWxlLmhlaWdodCA9ICcwJztcbiAgICB0aGlzLmNvbi5zdHlsZS52aXNpYmlsaXR5ID0gJ2hpZGRlbic7XG4gICAgdGhpcy5jb24uc3R5bGUub3ZlcmZsb3cgPSAnaGlkZGVuJztcbiAgICB0aGlzLmNvbi5hcHBlbmRDaGlsZCh0aGlzLmVsKTtcbiAgfVxuXG4gIHByaXZhdGUgc3RhdGljIHB4UGVyVW5pdCh1bml0OiBzdHJpbmcpOiBudW1iZXIge1xuICAgIGlmICghdGhpcy5weFBlclVuaXRDYWNoZVt1bml0XSkge1xuICAgICAgaWYgKCF0aGlzLmNvbiB8fCAhdGhpcy5lbCkge1xuICAgICAgICB0aGlzLmluaXRFbGVtZW50cygpO1xuICAgICAgfVxuICAgICAgaWYgKCF0aGlzLmNvbiB8fCAhdGhpcy5lbCkge1xuICAgICAgICAvLyBkdW1teSBpbXBsZW1lbnRhdGlvbiBmb3Igc2VydmVyLXNpZGUgcmVuZGVyaW5nXG4gICAgICAgIHJldHVybiAxO1xuICAgICAgfVxuICAgICAgdGhpcy5lbC5zdHlsZS53aWR0aCA9IHRoaXMuc2FtcGxlICsgdW5pdDtcbiAgICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQodGhpcy5jb24pO1xuICAgICAgY29uc3QgZGltZW5zaW9uID0gdGhpcy5lbC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICAgIHRoaXMuY29uLnBhcmVudE5vZGUhLnJlbW92ZUNoaWxkKHRoaXMuY29uKTtcbiAgICAgIHRoaXMucHhQZXJVbml0Q2FjaGVbdW5pdF0gPSBkaW1lbnNpb24ud2lkdGggLyB0aGlzLnNhbXBsZTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMucHhQZXJVbml0Q2FjaGVbdW5pdF07XG4gIH1cblxuICBwdWJsaWMgc3RhdGljIHRvUHgobGVuZ3RoKTogbnVtYmVyIHtcbiAgICBjb25zdCB1bml0UmUgPSAvXlxccyooWystXT9bXFxkXFwuXSopXFxzKiguKilcXHMqJC9pOyAvLyBOT1NPTkFSXG4gICAgY29uc3QgbWF0Y2ggPSB1bml0UmUuZXhlYyhsZW5ndGgpO1xuICAgIGlmIChtYXRjaCAhPSBudWxsICYmIG1hdGNoLmxlbmd0aCA+IDIpIHtcbiAgICAgIGNvbnN0IGJhcmUgPSBtYXRjaFsxXSA9PT0gJyc7XG4gICAgICBjb25zdCB2YWwgPSBiYXJlID8gMSA6IE51bWJlcihtYXRjaFsxXSk7XG4gICAgICBjb25zdCB1bml0ID0gbWF0Y2hbMl07XG4gICAgICBjb25zdCB2YWxpZCA9ICFpc05hTih2YWwpICYmIHVuaXQ7XG4gICAgICBpZiAodmFsaWQpIHtcbiAgICAgICAgcmV0dXJuIHVuaXQgPT09ICdweCcgPyB2YWwgOiB0aGlzLnB4UGVyVW5pdCh1bml0KSAqIHZhbDtcbiAgICAgIH1cbiAgICB9XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignRXJyb3IgcGFyc2luZyBsZW5ndGgnKTtcbiAgfVxufVxuIl19 |
\ | No newline at end of file |