@unovis/ts 1.6.1-pre.0 → 1.6.2-pre.0
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/axis/config.d.ts +2 -0
- package/components/axis/config.js +1 -1
- package/components/axis/config.js.map +1 -1
- package/components/axis/index.d.ts +1 -0
- package/components/axis/index.js +80 -21
- package/components/axis/index.js.map +1 -1
- package/components/axis/style.d.ts +1 -0
- package/components/axis/style.js +4 -1
- package/components/axis/style.js.map +1 -1
- package/components/crosshair/config.d.ts +2 -2
- package/components/crosshair/config.js.map +1 -1
- package/components/crosshair/index.js +1 -1
- package/components/crosshair/index.js.map +1 -1
- package/components/timeline/config.d.ts +6 -1
- package/components/timeline/config.js +1 -1
- package/components/timeline/config.js.map +1 -1
- package/components/timeline/index.js +7 -5
- package/components/timeline/index.js.map +1 -1
- package/package.json +1 -1
- package/utils/misc.js +78 -0
- package/utils/misc.js.map +1 -1
package/utils/misc.js
CHANGED
|
@@ -45,11 +45,89 @@ function getHref(d, identifier) {
|
|
|
45
45
|
const id = getString(d, identifier);
|
|
46
46
|
return id ? `url(#${id})` : null;
|
|
47
47
|
}
|
|
48
|
+
function evaluateSimpleExpression(expr) {
|
|
49
|
+
// Handle multiplication and division first (higher precedence)
|
|
50
|
+
// Keep applying until no more operations are found
|
|
51
|
+
while (/(-?\d+(?:\.\d+)?)\s*([*/])\s*(-?\d+(?:\.\d+)?)/.test(expr)) {
|
|
52
|
+
expr = expr.replace(/(-?\d+(?:\.\d+)?)\s*([*/])\s*(-?\d+(?:\.\d+)?)/, (_, a, op, b) => {
|
|
53
|
+
const numA = parseFloat(a);
|
|
54
|
+
const numB = parseFloat(b);
|
|
55
|
+
return String(op === '*' ? numA * numB : numA / numB);
|
|
56
|
+
});
|
|
57
|
+
}
|
|
58
|
+
// Handle addition and subtraction (lower precedence)
|
|
59
|
+
// Keep applying until no more operations are found
|
|
60
|
+
while (/(-?\d+(?:\.\d+)?)\s*([+-])\s*(-?\d+(?:\.\d+)?)/.test(expr)) {
|
|
61
|
+
expr = expr.replace(/(-?\d+(?:\.\d+)?)\s*([+-])\s*(-?\d+(?:\.\d+)?)/, (_, a, op, b) => {
|
|
62
|
+
const numA = parseFloat(a);
|
|
63
|
+
const numB = parseFloat(b);
|
|
64
|
+
return String(op === '+' ? numA + numB : numA - numB);
|
|
65
|
+
});
|
|
66
|
+
}
|
|
67
|
+
const result = parseFloat(expr);
|
|
68
|
+
if (isNaN(result))
|
|
69
|
+
throw new Error(`Invalid expression: ${expr}`);
|
|
70
|
+
return result;
|
|
71
|
+
}
|
|
72
|
+
function evaluateCalcExpression(expression, basis) {
|
|
73
|
+
try {
|
|
74
|
+
// Replace percentages and pixels with resolved values
|
|
75
|
+
let expr = expression
|
|
76
|
+
.replace(/(\d+(?:\.\d+)?)%/g, (_, num) => String((basis * parseFloat(num)) / 100))
|
|
77
|
+
.replace(/(\d+(?:\.\d+)?)px/g, '$1')
|
|
78
|
+
.replace(/\s+/g, '');
|
|
79
|
+
// Validate parentheses pairs before processing
|
|
80
|
+
let parenCount = 0;
|
|
81
|
+
for (const char of expr) {
|
|
82
|
+
if (char === '(')
|
|
83
|
+
parenCount++;
|
|
84
|
+
else if (char === ')')
|
|
85
|
+
parenCount--;
|
|
86
|
+
if (parenCount < 0)
|
|
87
|
+
throw new Error('Mismatched parentheses: closing parenthesis without opening');
|
|
88
|
+
}
|
|
89
|
+
if (parenCount !== 0)
|
|
90
|
+
throw new Error('Mismatched parentheses: unclosed opening parenthesis');
|
|
91
|
+
// Check for invalid characters (only allow numbers, operators, decimal points, and parentheses)
|
|
92
|
+
if (!/^[0-9+\-*/.() ]+$/.test(expr))
|
|
93
|
+
throw new Error('Invalid characters in expression');
|
|
94
|
+
// Check for empty parentheses
|
|
95
|
+
if (/\(\s*\)/.test(expr))
|
|
96
|
+
throw new Error('Empty parentheses not allowed');
|
|
97
|
+
// Simple regex-based evaluation for basic expressions
|
|
98
|
+
// Handles: number, number+number, number-number, number*number, number/number
|
|
99
|
+
// And simple parentheses: (expression)
|
|
100
|
+
// Evaluate parentheses first
|
|
101
|
+
let iterations = 0;
|
|
102
|
+
const maxIterations = 100; // Prevent infinite loops
|
|
103
|
+
while (expr.includes('(') && iterations < maxIterations) {
|
|
104
|
+
const prevExpr = expr;
|
|
105
|
+
expr = expr.replace(/\(([^()]+)\)/g, (_, inner) => String(evaluateSimpleExpression(inner)));
|
|
106
|
+
if (expr === prevExpr)
|
|
107
|
+
throw new Error('Unable to resolve parentheses');
|
|
108
|
+
iterations++;
|
|
109
|
+
}
|
|
110
|
+
if (iterations >= maxIterations)
|
|
111
|
+
throw new Error('Expression too complex or contains infinite recursion');
|
|
112
|
+
if (expr.includes('(') || expr.includes(')'))
|
|
113
|
+
throw new Error('Unresolved parentheses remain');
|
|
114
|
+
return evaluateSimpleExpression(expr);
|
|
115
|
+
}
|
|
116
|
+
catch (error) {
|
|
117
|
+
console.warn(`Failed to evaluate calc() expression: ${expression}`, error);
|
|
118
|
+
return 0;
|
|
119
|
+
}
|
|
120
|
+
}
|
|
48
121
|
function parseUnit(value, basis = 0) {
|
|
49
122
|
if (!value)
|
|
50
123
|
return 0;
|
|
51
124
|
else if (typeof value === 'number')
|
|
52
125
|
return value;
|
|
126
|
+
else if (typeof value === 'string' && value.startsWith('calc(') && value.endsWith(')')) {
|
|
127
|
+
// Parse calc() expression
|
|
128
|
+
const expression = value.slice(5, -1).trim(); // Remove 'calc(' and ')'
|
|
129
|
+
return evaluateCalcExpression(expression, basis);
|
|
130
|
+
}
|
|
53
131
|
else if (value.endsWith('%'))
|
|
54
132
|
return basis * parseFloat(value) / 100;
|
|
55
133
|
else if (value.endsWith('px'))
|
package/utils/misc.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"misc.js","sources":["../../src/utils/misc.ts"],"sourcesContent":["import { StringAccessor } from 'types/accessor'\nimport { LengthUnit, Rect } from 'types/misc'\nimport { getString, isString } from 'utils/data'\nimport toPx from 'to-px'\n\nexport function guid (): string {\n const s4 = (): string =>\n Math.floor((1 + crypto.getRandomValues(new Uint32Array(1))[0]) * 0x10000)\n .toString(16)\n .substring(1)\n\n return `${s4() + s4()}-${s4()}-${s4()}-${s4()}-${s4()}${s4()}${s4()}`\n}\n\nexport function stringToHtmlId (str: string): string {\n return (str || '').replace(/\\W/g, '_')\n}\n\nexport function isStringCSSVariable (s: string): boolean {\n return isString(s) ? (s.substring(0, 6) === 'var(--') : false\n}\n\nexport function getCSSVariableValue (s: string, context: HTMLElement | SVGElement): string {\n if (!isString(s)) return ''\n const variableName = s.substr(4, s.length - 5)\n return getComputedStyle(context).getPropertyValue(variableName)\n}\n\nexport function getCSSVariableValueInPixels (s: string, context: HTMLElement | SVGElement): number {\n const val = getCSSVariableValue(s, context)\n return toPx(val)\n}\n\nexport function getPixelValue (v: string | number): number | null {\n return typeof v === 'number' ? v : toPx(v)\n}\n\nexport function rectIntersect (rect1: Rect, rect2: Rect, tolerancePx = 0): boolean {\n const [left1, top1, right1, bottom1] = [\n rect1.x + tolerancePx,\n rect1.y + rect1.height - 2 * tolerancePx,\n rect1.x + rect1.width - 2 * tolerancePx,\n rect1.y + tolerancePx,\n ]\n const [left2, top2, right2, bottom2] = [\n rect2.x + tolerancePx,\n rect2.y + rect2.height - 2 * tolerancePx,\n rect2.x + rect2.width - 2 * tolerancePx,\n rect2.y + tolerancePx,\n ]\n\n return !(top1 < bottom2 || top2 < bottom1 || right1 < left2 || right2 < left1)\n}\n\nexport function getHref<T> (d: T, identifier: StringAccessor<T>): string {\n const id = getString(d, identifier)\n return id ? `url(#${id})` : null\n}\n\nexport function parseUnit (value: LengthUnit, basis = 0): number {\n if (!value) return 0\n else if (typeof value === 'number') return value\n else if (value.endsWith('%')) return basis * parseFloat(value) / 100\n else if (value.endsWith('px')) return parseFloat(value)\n else return parseFloat(value) || 0\n}\n"],"names":[],"mappings":";;;SAKgB,IAAI,GAAA;AAClB,IAAA,MAAM,EAAE,GAAG,MACT,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,eAAe,CAAC,IAAI,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,OAAO,CAAC;SACtE,QAAQ,CAAC,EAAE,CAAC;SACZ,SAAS,CAAC,CAAC,CAAC,CAAA;IAEjB,OAAO,CAAA,EAAG,EAAE,EAAE,GAAG,EAAE,EAAE,CAAI,CAAA,EAAA,EAAE,EAAE,CAAA,CAAA,EAAI,EAAE,EAAE,IAAI,EAAE,EAAE,CAAI,CAAA,EAAA,EAAE,EAAE,CAAA,EAAG,EAAE,EAAE,CAAG,EAAA,EAAE,EAAE,CAAA,CAAE,CAAA;AACvE,CAAC;AAEK,SAAU,cAAc,CAAE,GAAW,EAAA;AACzC,IAAA,OAAO,CAAC,GAAG,IAAI,EAAE,EAAE,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAA;AACxC,CAAC;AAEK,SAAU,mBAAmB,CAAE,CAAS,EAAA;IAC5C,OAAO,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,QAAQ,IAAI,KAAK,CAAA;AAC/D,CAAC;AAEe,SAAA,mBAAmB,CAAE,CAAS,EAAE,OAAiC,EAAA;AAC/E,IAAA,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC;AAAE,QAAA,OAAO,EAAE,CAAA;AAC3B,IAAA,MAAM,YAAY,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAA;IAC9C,OAAO,gBAAgB,CAAC,OAAO,CAAC,CAAC,gBAAgB,CAAC,YAAY,CAAC,CAAA;AACjE,CAAC;AAEe,SAAA,2BAA2B,CAAE,CAAS,EAAE,OAAiC,EAAA;IACvF,MAAM,GAAG,GAAG,mBAAmB,CAAC,CAAC,EAAE,OAAO,CAAC,CAAA;AAC3C,IAAA,OAAO,IAAI,CAAC,GAAG,CAAC,CAAA;AAClB,CAAC;AAEK,SAAU,aAAa,CAAE,CAAkB,EAAA;AAC/C,IAAA,OAAO,OAAO,CAAC,KAAK,QAAQ,GAAG,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,CAAA;AAC5C,CAAC;AAEK,SAAU,aAAa,CAAE,KAAW,EAAE,KAAW,EAAE,WAAW,GAAG,CAAC,EAAA;IACtE,MAAM,CAAC,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,GAAG;QACrC,KAAK,CAAC,CAAC,GAAG,WAAW;QACrB,KAAK,CAAC,CAAC,GAAG,KAAK,CAAC,MAAM,GAAG,CAAC,GAAG,WAAW;QACxC,KAAK,CAAC,CAAC,GAAG,KAAK,CAAC,KAAK,GAAG,CAAC,GAAG,WAAW;QACvC,KAAK,CAAC,CAAC,GAAG,WAAW;KACtB,CAAA;IACD,MAAM,CAAC,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,GAAG;QACrC,KAAK,CAAC,CAAC,GAAG,WAAW;QACrB,KAAK,CAAC,CAAC,GAAG,KAAK,CAAC,MAAM,GAAG,CAAC,GAAG,WAAW;QACxC,KAAK,CAAC,CAAC,GAAG,KAAK,CAAC,KAAK,GAAG,CAAC,GAAG,WAAW;QACvC,KAAK,CAAC,CAAC,GAAG,WAAW;KACtB,CAAA;AAED,IAAA,OAAO,EAAE,IAAI,GAAG,OAAO,IAAI,IAAI,GAAG,OAAO,IAAI,MAAM,GAAG,KAAK,IAAI,MAAM,GAAG,KAAK,CAAC,CAAA;AAChF,CAAC;AAEe,SAAA,OAAO,CAAK,CAAI,EAAE,UAA6B,EAAA;IAC7D,MAAM,EAAE,GAAG,SAAS,CAAC,CAAC,EAAE,UAAU,CAAC,CAAA;IACnC,OAAO,EAAE,GAAG,CAAA,KAAA,EAAQ,EAAE,CAAA,CAAA,CAAG,GAAG,IAAI,CAAA;AAClC,CAAC;SAEe,SAAS,CAAE,KAAiB,EAAE,KAAK,GAAG,CAAC,EAAA;AACrD,IAAA,IAAI,CAAC,KAAK;AAAE,QAAA,OAAO,CAAC,CAAA;SACf,IAAI,OAAO,KAAK,KAAK,QAAQ;AAAE,QAAA,OAAO,KAAK,CAAA;AAC3C,SAAA,IAAI,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC;QAAE,OAAO,KAAK,GAAG,UAAU,CAAC,KAAK,CAAC,GAAG,GAAG,CAAA;AAC/D,SAAA,IAAI,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC;AAAE,QAAA,OAAO,UAAU,CAAC,KAAK,CAAC,CAAA;;AAClD,QAAA,OAAO,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;AACpC;;;;"}
|
|
1
|
+
{"version":3,"file":"misc.js","sources":["../../src/utils/misc.ts"],"sourcesContent":["import { StringAccessor } from 'types/accessor'\nimport { LengthUnit, Rect } from 'types/misc'\nimport { getString, isString } from 'utils/data'\nimport toPx from 'to-px'\n\nexport function guid (): string {\n const s4 = (): string =>\n Math.floor((1 + crypto.getRandomValues(new Uint32Array(1))[0]) * 0x10000)\n .toString(16)\n .substring(1)\n\n return `${s4() + s4()}-${s4()}-${s4()}-${s4()}-${s4()}${s4()}${s4()}`\n}\n\nexport function stringToHtmlId (str: string): string {\n return (str || '').replace(/\\W/g, '_')\n}\n\nexport function isStringCSSVariable (s: string): boolean {\n return isString(s) ? (s.substring(0, 6) === 'var(--') : false\n}\n\nexport function getCSSVariableValue (s: string, context: HTMLElement | SVGElement): string {\n if (!isString(s)) return ''\n const variableName = s.substr(4, s.length - 5)\n return getComputedStyle(context).getPropertyValue(variableName)\n}\n\nexport function getCSSVariableValueInPixels (s: string, context: HTMLElement | SVGElement): number {\n const val = getCSSVariableValue(s, context)\n return toPx(val)\n}\n\nexport function getPixelValue (v: string | number): number | null {\n return typeof v === 'number' ? v : toPx(v)\n}\n\nexport function rectIntersect (rect1: Rect, rect2: Rect, tolerancePx = 0): boolean {\n const [left1, top1, right1, bottom1] = [\n rect1.x + tolerancePx,\n rect1.y + rect1.height - 2 * tolerancePx,\n rect1.x + rect1.width - 2 * tolerancePx,\n rect1.y + tolerancePx,\n ]\n const [left2, top2, right2, bottom2] = [\n rect2.x + tolerancePx,\n rect2.y + rect2.height - 2 * tolerancePx,\n rect2.x + rect2.width - 2 * tolerancePx,\n rect2.y + tolerancePx,\n ]\n\n return !(top1 < bottom2 || top2 < bottom1 || right1 < left2 || right2 < left1)\n}\n\nexport function getHref<T> (d: T, identifier: StringAccessor<T>): string {\n const id = getString(d, identifier)\n return id ? `url(#${id})` : null\n}\n\nfunction evaluateSimpleExpression (expr: string): number {\n // Handle multiplication and division first (higher precedence)\n // Keep applying until no more operations are found\n while (/(-?\\d+(?:\\.\\d+)?)\\s*([*/])\\s*(-?\\d+(?:\\.\\d+)?)/.test(expr)) {\n expr = expr.replace(/(-?\\d+(?:\\.\\d+)?)\\s*([*/])\\s*(-?\\d+(?:\\.\\d+)?)/, (_, a, op, b) => {\n const numA = parseFloat(a)\n const numB = parseFloat(b)\n return String(op === '*' ? numA * numB : numA / numB)\n })\n }\n\n // Handle addition and subtraction (lower precedence)\n // Keep applying until no more operations are found\n while (/(-?\\d+(?:\\.\\d+)?)\\s*([+-])\\s*(-?\\d+(?:\\.\\d+)?)/.test(expr)) {\n expr = expr.replace(/(-?\\d+(?:\\.\\d+)?)\\s*([+-])\\s*(-?\\d+(?:\\.\\d+)?)/, (_, a, op, b) => {\n const numA = parseFloat(a)\n const numB = parseFloat(b)\n return String(op === '+' ? numA + numB : numA - numB)\n })\n }\n\n const result = parseFloat(expr)\n if (isNaN(result)) throw new Error(`Invalid expression: ${expr}`)\n return result\n}\n\nfunction evaluateCalcExpression (expression: string, basis: number): number {\n try {\n // Replace percentages and pixels with resolved values\n let expr = expression\n .replace(/(\\d+(?:\\.\\d+)?)%/g, (_, num) => String((basis * parseFloat(num)) / 100))\n .replace(/(\\d+(?:\\.\\d+)?)px/g, '$1')\n .replace(/\\s+/g, '')\n\n // Validate parentheses pairs before processing\n let parenCount = 0\n for (const char of expr) {\n if (char === '(') parenCount++\n else if (char === ')') parenCount--\n if (parenCount < 0) throw new Error('Mismatched parentheses: closing parenthesis without opening')\n }\n if (parenCount !== 0) throw new Error('Mismatched parentheses: unclosed opening parenthesis')\n\n // Check for invalid characters (only allow numbers, operators, decimal points, and parentheses)\n if (!/^[0-9+\\-*/.() ]+$/.test(expr)) throw new Error('Invalid characters in expression')\n\n // Check for empty parentheses\n if (/\\(\\s*\\)/.test(expr)) throw new Error('Empty parentheses not allowed')\n\n // Simple regex-based evaluation for basic expressions\n // Handles: number, number+number, number-number, number*number, number/number\n // And simple parentheses: (expression)\n\n // Evaluate parentheses first\n let iterations = 0\n const maxIterations = 100 // Prevent infinite loops\n while (expr.includes('(') && iterations < maxIterations) {\n const prevExpr = expr\n expr = expr.replace(/\\(([^()]+)\\)/g, (_, inner) => String(evaluateSimpleExpression(inner)))\n if (expr === prevExpr) throw new Error('Unable to resolve parentheses')\n iterations++\n }\n\n if (iterations >= maxIterations) throw new Error('Expression too complex or contains infinite recursion')\n if (expr.includes('(') || expr.includes(')')) throw new Error('Unresolved parentheses remain')\n\n return evaluateSimpleExpression(expr)\n } catch (error) {\n console.warn(`Failed to evaluate calc() expression: ${expression}`, error)\n return 0\n }\n}\n\nexport function parseUnit (value: LengthUnit, basis = 0): number {\n if (!value) return 0\n else if (typeof value === 'number') return value\n else if (typeof value === 'string' && value.startsWith('calc(') && value.endsWith(')')) {\n // Parse calc() expression\n const expression = value.slice(5, -1).trim() // Remove 'calc(' and ')'\n return evaluateCalcExpression(expression, basis)\n } else if (value.endsWith('%')) return basis * parseFloat(value) / 100\n else if (value.endsWith('px')) return parseFloat(value)\n else return parseFloat(value) || 0\n}\n"],"names":[],"mappings":"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"}
|