@unovis/ts 1.7.0-Phoenix.0 → 1.7.0-pre.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/components/annotations/config.d.ts +2 -0
- package/components/annotations/config.js +1 -1
- package/components/annotations/config.js.map +1 -1
- package/components/annotations/index.d.ts +1 -0
- package/components/annotations/index.js +25 -10
- package/components/annotations/index.js.map +1 -1
- package/components/annotations/style.d.ts +2 -0
- package/components/annotations/style.js +8 -1
- package/components/annotations/style.js.map +1 -1
- package/components/area/config.d.ts +11 -1
- package/components/area/config.js +1 -1
- package/components/area/config.js.map +1 -1
- package/components/area/index.d.ts +6 -0
- package/components/area/index.js +80 -7
- package/components/area/index.js.map +1 -1
- package/components/area/style.d.ts +1 -0
- package/components/area/style.js +7 -1
- package/components/area/style.js.map +1 -1
- package/components/axis/index.d.ts +2 -0
- package/components/axis/index.js +45 -7
- package/components/axis/index.js.map +1 -1
- package/components/bullet-legend/index.d.ts +2 -0
- package/components/bullet-legend/index.js +9 -5
- package/components/bullet-legend/index.js.map +1 -1
- package/components/bullet-legend/modules/shape.js +3 -2
- package/components/bullet-legend/modules/shape.js.map +1 -1
- package/components/crosshair/config.d.ts +1 -1
- package/components/crosshair/config.js.map +1 -1
- package/components/crosshair/index.d.ts +1 -1
- package/components/crosshair/index.js +3 -2
- package/components/crosshair/index.js.map +1 -1
- package/components/flow-legend/config.d.ts +10 -0
- package/components/flow-legend/config.js +4 -0
- package/components/flow-legend/config.js.map +1 -1
- package/components/flow-legend/index.d.ts +6 -2
- package/components/flow-legend/index.js +34 -16
- package/components/flow-legend/index.js.map +1 -1
- package/components/flow-legend/style.d.ts +3 -3
- package/components/flow-legend/style.js +30 -26
- package/components/flow-legend/style.js.map +1 -1
- package/components/free-brush/types.js +1 -0
- package/components/free-brush/types.js.map +1 -1
- package/components/graph/index.d.ts +1 -0
- package/components/graph/index.js +35 -14
- package/components/graph/index.js.map +1 -1
- package/components/graph/modules/link/index.js +2 -2
- package/components/graph/modules/link/index.js.map +1 -1
- package/components/graph/modules/node/index.js +2 -1
- package/components/graph/modules/node/index.js.map +1 -1
- package/components/leaflet-map/modules/map.js +2 -2
- package/components/leaflet-map/modules/map.js.map +1 -1
- package/components/leaflet-map/renderer/mapboxgl-utils.d.ts +0 -1
- package/components/leaflet-map/renderer/mapboxgl-utils.js +1 -2
- package/components/leaflet-map/renderer/mapboxgl-utils.js.map +1 -1
- package/components/sankey/config.d.ts +25 -10
- package/components/sankey/config.js +2 -2
- package/components/sankey/config.js.map +1 -1
- package/components/sankey/index.d.ts +26 -31
- package/components/sankey/index.js +340 -115
- package/components/sankey/index.js.map +1 -1
- package/components/sankey/modules/label.d.ts +8 -5
- package/components/sankey/modules/label.js +70 -32
- package/components/sankey/modules/label.js.map +1 -1
- package/components/sankey/modules/link.d.ts +1 -0
- package/components/sankey/modules/link.js +23 -41
- package/components/sankey/modules/link.js.map +1 -1
- package/components/sankey/modules/node.d.ts +5 -4
- package/components/sankey/modules/node.js +65 -16
- package/components/sankey/modules/node.js.map +1 -1
- package/components/sankey/style.d.ts +67 -1
- package/components/sankey/style.js +77 -77
- package/components/sankey/style.js.map +1 -1
- package/components/sankey/types.d.ts +5 -2
- package/components/sankey/types.js +9 -2
- package/components/sankey/types.js.map +1 -1
- package/components/tooltip/index.js +2 -2
- package/components/tooltip/index.js.map +1 -1
- package/components/treemap/index.d.ts +5 -2
- package/components/treemap/index.js +53 -49
- package/components/treemap/index.js.map +1 -1
- package/containers/single-container/config.d.ts +3 -0
- package/containers/single-container/config.js.map +1 -1
- package/containers/single-container/index.js +2 -1
- package/containers/single-container/index.js.map +1 -1
- package/containers/xy-container/config.d.ts +3 -0
- package/containers/xy-container/config.js.map +1 -1
- package/containers/xy-container/index.d.ts +1 -0
- package/containers/xy-container/index.js +13 -9
- package/containers/xy-container/index.js.map +1 -1
- package/index.js +1 -1
- package/package.json +2 -4
- package/types.js +1 -1
- package/utils/misc.js +13 -2
- package/utils/misc.js.map +1 -1
- package/utils/text.d.ts +1 -1
- package/utils/text.js +13 -15
- package/utils/text.js.map +1 -1
- package/utils/to-px.d.ts +1 -0
- package/utils/to-px.js +110 -0
- package/utils/to-px.js.map +1 -0
package/utils/to-px.js
ADDED
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
// SSR-safe port of https://github.com/mikolalysenko/to-px
|
|
2
|
+
function parseUnit(str) {
|
|
3
|
+
var _a;
|
|
4
|
+
str = String(str);
|
|
5
|
+
const num = parseFloat(str);
|
|
6
|
+
const unit = ((_a = str.match(/[\d.\-+]*\s*(.*)/)) === null || _a === void 0 ? void 0 : _a[1]) || '';
|
|
7
|
+
return [num, unit];
|
|
8
|
+
}
|
|
9
|
+
function isBrowser() {
|
|
10
|
+
return typeof window !== 'undefined' && typeof document !== 'undefined';
|
|
11
|
+
}
|
|
12
|
+
function getPropertyInPX(element, prop) {
|
|
13
|
+
var _a;
|
|
14
|
+
const parts = parseUnit(getComputedStyle(element).getPropertyValue(prop));
|
|
15
|
+
// eslint-disable-next-line @typescript-eslint/no-use-before-define
|
|
16
|
+
return parts[0] * ((_a = toPx(parts[1], element)) !== null && _a !== void 0 ? _a : 1);
|
|
17
|
+
}
|
|
18
|
+
function getSizeBrutal(unit, element) {
|
|
19
|
+
const testDIV = document.createElement('div');
|
|
20
|
+
testDIV.style.height = `128${unit}`;
|
|
21
|
+
element.appendChild(testDIV);
|
|
22
|
+
const size = getPropertyInPX(testDIV, 'height') / 128;
|
|
23
|
+
element.removeChild(testDIV);
|
|
24
|
+
return size;
|
|
25
|
+
}
|
|
26
|
+
let cachedPPI = null;
|
|
27
|
+
function getPixelsPerInch() {
|
|
28
|
+
if (!isBrowser())
|
|
29
|
+
return 96; // Standard default
|
|
30
|
+
if (cachedPPI === null)
|
|
31
|
+
cachedPPI = getSizeBrutal('in', document.body);
|
|
32
|
+
return cachedPPI;
|
|
33
|
+
}
|
|
34
|
+
function toPx(str, element) {
|
|
35
|
+
var _a;
|
|
36
|
+
if (!str && str !== 0)
|
|
37
|
+
return null;
|
|
38
|
+
// SSR guard
|
|
39
|
+
if (!isBrowser()) {
|
|
40
|
+
// Return sensible defaults for SSR
|
|
41
|
+
const parts = parseUnit(String(str));
|
|
42
|
+
if (!isNaN(parts[0])) {
|
|
43
|
+
const unit = ((_a = parts[1]) === null || _a === void 0 ? void 0 : _a.toLowerCase()) || 'px';
|
|
44
|
+
if (unit === 'px' || unit === '')
|
|
45
|
+
return parts[0];
|
|
46
|
+
if (unit === 'em' || unit === 'rem')
|
|
47
|
+
return parts[0] * 16; // Assume 16px base
|
|
48
|
+
if (unit === 'in')
|
|
49
|
+
return parts[0] * 96;
|
|
50
|
+
if (unit === 'cm')
|
|
51
|
+
return parts[0] * (96 / 2.54);
|
|
52
|
+
if (unit === 'mm')
|
|
53
|
+
return parts[0] * (96 / 25.4);
|
|
54
|
+
if (unit === 'pt')
|
|
55
|
+
return parts[0] * (96 / 72);
|
|
56
|
+
if (unit === 'pc')
|
|
57
|
+
return parts[0] * (96 / 6);
|
|
58
|
+
}
|
|
59
|
+
return null;
|
|
60
|
+
}
|
|
61
|
+
let el = document.body;
|
|
62
|
+
if (element && element !== window && element !== document) {
|
|
63
|
+
el = element;
|
|
64
|
+
}
|
|
65
|
+
const s = (String(str) || 'px').trim().toLowerCase();
|
|
66
|
+
switch (s) {
|
|
67
|
+
case '%':
|
|
68
|
+
return el.clientHeight / 100.0;
|
|
69
|
+
case 'ch':
|
|
70
|
+
case 'ex':
|
|
71
|
+
return getSizeBrutal(s, el);
|
|
72
|
+
case 'em':
|
|
73
|
+
return getPropertyInPX(el, 'font-size');
|
|
74
|
+
case 'rem':
|
|
75
|
+
return getPropertyInPX(document.body, 'font-size');
|
|
76
|
+
case 'vw':
|
|
77
|
+
return window.innerWidth / 100;
|
|
78
|
+
case 'vh':
|
|
79
|
+
return window.innerHeight / 100;
|
|
80
|
+
case 'vmin':
|
|
81
|
+
return Math.min(window.innerWidth, window.innerHeight) / 100;
|
|
82
|
+
case 'vmax':
|
|
83
|
+
return Math.max(window.innerWidth, window.innerHeight) / 100;
|
|
84
|
+
case 'in':
|
|
85
|
+
return getPixelsPerInch();
|
|
86
|
+
case 'cm':
|
|
87
|
+
return getPixelsPerInch() / 2.54;
|
|
88
|
+
case 'mm':
|
|
89
|
+
return getPixelsPerInch() / 25.4;
|
|
90
|
+
case 'pt':
|
|
91
|
+
return getPixelsPerInch() / 72;
|
|
92
|
+
case 'pc':
|
|
93
|
+
return getPixelsPerInch() / 6;
|
|
94
|
+
case 'px':
|
|
95
|
+
return 1;
|
|
96
|
+
}
|
|
97
|
+
// Detect number + units (e.g., "12px", "2em")
|
|
98
|
+
const parts = parseUnit(s);
|
|
99
|
+
if (!isNaN(parts[0])) {
|
|
100
|
+
if (parts[1]) {
|
|
101
|
+
const px = toPx(parts[1], el);
|
|
102
|
+
return typeof px === 'number' ? parts[0] * px : null;
|
|
103
|
+
}
|
|
104
|
+
return parts[0];
|
|
105
|
+
}
|
|
106
|
+
return null;
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
export { toPx };
|
|
110
|
+
//# sourceMappingURL=to-px.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"to-px.js","sources":["../../src/utils/to-px.ts"],"sourcesContent":["// SSR-safe port of https://github.com/mikolalysenko/to-px\n\nfunction parseUnit (str: string): [number, string] {\n str = String(str)\n const num = parseFloat(str)\n const unit = str.match(/[\\d.\\-+]*\\s*(.*)/)?.[1] || ''\n return [num, unit]\n}\n\nfunction isBrowser (): boolean {\n return typeof window !== 'undefined' && typeof document !== 'undefined'\n}\n\nfunction getPropertyInPX (element: Element, prop: string): number {\n const parts = parseUnit(getComputedStyle(element).getPropertyValue(prop))\n // eslint-disable-next-line @typescript-eslint/no-use-before-define\n return parts[0] * (toPx(parts[1], element) ?? 1)\n}\n\nfunction getSizeBrutal (unit: string, element: Element): number {\n const testDIV = document.createElement('div')\n testDIV.style.height = `128${unit}`\n element.appendChild(testDIV)\n const size = getPropertyInPX(testDIV, 'height') / 128\n element.removeChild(testDIV)\n return size\n}\n\nlet cachedPPI: number | null = null\nfunction getPixelsPerInch (): number {\n if (!isBrowser()) return 96 // Standard default\n if (cachedPPI === null) cachedPPI = getSizeBrutal('in', document.body)\n return cachedPPI\n}\n\nexport function toPx (str: string | number | null | undefined, element?: Element | Window | Document | null): number | null {\n if (!str && str !== 0) return null\n\n // SSR guard\n if (!isBrowser()) {\n // Return sensible defaults for SSR\n const parts = parseUnit(String(str))\n if (!isNaN(parts[0])) {\n const unit = parts[1]?.toLowerCase() || 'px'\n if (unit === 'px' || unit === '') return parts[0]\n if (unit === 'em' || unit === 'rem') return parts[0] * 16 // Assume 16px base\n if (unit === 'in') return parts[0] * 96\n if (unit === 'cm') return parts[0] * (96 / 2.54)\n if (unit === 'mm') return parts[0] * (96 / 25.4)\n if (unit === 'pt') return parts[0] * (96 / 72)\n if (unit === 'pc') return parts[0] * (96 / 6)\n }\n return null\n }\n\n let el: Element = document.body\n if (element && element !== window && element !== document) {\n el = element as Element\n }\n\n const s = (String(str) || 'px').trim().toLowerCase()\n\n switch (s) {\n case '%':\n return el.clientHeight / 100.0\n case 'ch':\n case 'ex':\n return getSizeBrutal(s, el)\n case 'em':\n return getPropertyInPX(el, 'font-size')\n case 'rem':\n return getPropertyInPX(document.body, 'font-size')\n case 'vw':\n return window.innerWidth / 100\n case 'vh':\n return window.innerHeight / 100\n case 'vmin':\n return Math.min(window.innerWidth, window.innerHeight) / 100\n case 'vmax':\n return Math.max(window.innerWidth, window.innerHeight) / 100\n case 'in':\n return getPixelsPerInch()\n case 'cm':\n return getPixelsPerInch() / 2.54\n case 'mm':\n return getPixelsPerInch() / 25.4\n case 'pt':\n return getPixelsPerInch() / 72\n case 'pc':\n return getPixelsPerInch() / 6\n case 'px':\n return 1\n }\n\n // Detect number + units (e.g., \"12px\", \"2em\")\n const parts = parseUnit(s)\n if (!isNaN(parts[0])) {\n if (parts[1]) {\n const px = toPx(parts[1], el)\n return typeof px === 'number' ? parts[0] * px : null\n }\n return parts[0]\n }\n\n return null\n}\n"],"names":[],"mappings":"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"}
|