This commit is contained in:
darenhsu
2022-07-17 13:16:16 +08:00
parent 84759556ff
commit befd344ab0
28070 changed files with 4008428 additions and 1 deletions
+46
View File
@@ -0,0 +1,46 @@
export function genPoints(values, boundary) {
const {
minX,
maxX,
minY,
maxY
} = boundary;
const totalValues = values.length;
const maxValue = Math.max(...values);
const minValue = Math.min(...values);
const gridX = (maxX - minX) / (totalValues - 1);
const gridY = (maxY - minY) / (maxValue - minValue || 1);
return values.map((value, index) => {
return {
x: minX + index * gridX,
y: maxY - (value - minValue) * gridY + +(index === totalValues - 1) * 0.00001 - +(index === 0) * 0.00001,
value
};
});
}
export function genBars(values, boundary) {
const {
minX,
maxX,
minY,
maxY
} = boundary;
const totalValues = values.length;
let maxValue = Math.max(...values);
let minValue = Math.min(...values);
if (minValue > 0) minValue = 0;
if (maxValue < 0) maxValue = 0;
const gridX = maxX / totalValues;
const gridY = (maxY - minY) / (maxValue - minValue || 1);
const horizonY = maxY - Math.abs(minValue * gridY);
return values.map((value, index) => {
const height = Math.abs(gridY * value);
return {
x: minX + index * gridX,
y: horizonY - height + +(value < 0) * height,
height,
value
};
});
}
//# sourceMappingURL=core.js.map
+1
View File
@@ -0,0 +1 @@
{"version":3,"sources":["../../../../src/components/VSparkline/helpers/core.ts"],"names":[],"mappings":"AAEA,OAAM,SAAU,SAAV,CACJ,MADI,EAEJ,QAFI,EAEc;AAElB,QAAM;AAAE,IAAA,IAAF;AAAQ,IAAA,IAAR;AAAc,IAAA,IAAd;AAAoB,IAAA;AAApB,MAA6B,QAAnC;AACA,QAAM,WAAW,GAAG,MAAM,CAAC,MAA3B;AACA,QAAM,QAAQ,GAAG,IAAI,CAAC,GAAL,CAAS,GAAG,MAAZ,CAAjB;AACA,QAAM,QAAQ,GAAG,IAAI,CAAC,GAAL,CAAS,GAAG,MAAZ,CAAjB;AAEA,QAAM,KAAK,GAAG,CAAC,IAAI,GAAG,IAAR,KAAiB,WAAW,GAAG,CAA/B,CAAd;AACA,QAAM,KAAK,GAAG,CAAC,IAAI,GAAG,IAAR,KAAkB,QAAQ,GAAG,QAAZ,IAAyB,CAA1C,CAAd;AAEA,SAAO,MAAM,CAAC,GAAP,CAAW,CAAC,KAAD,EAAQ,KAAR,KAAiB;AACjC,WAAO;AACL,MAAA,CAAC,EAAE,IAAI,GAAG,KAAK,GAAG,KADb;AAEL,MAAA,CAAC,EACC,IAAI,GACJ,CAAC,KAAK,GAAG,QAAT,IAAqB,KADrB,GAEA,EAAE,KAAK,KAAK,WAAW,GAAG,CAA1B,IAA+B,OAF/B,GAGA,EAAE,KAAK,KAAK,CAAZ,IAAiB,OANd;AAOL,MAAA;AAPK,KAAP;AASD,GAVM,CAAP;AAWD;AAED,OAAM,SAAU,OAAV,CACJ,MADI,EAEJ,QAFI,EAEc;AAElB,QAAM;AAAE,IAAA,IAAF;AAAQ,IAAA,IAAR;AAAc,IAAA,IAAd;AAAoB,IAAA;AAApB,MAA6B,QAAnC;AACA,QAAM,WAAW,GAAG,MAAM,CAAC,MAA3B;AACA,MAAI,QAAQ,GAAG,IAAI,CAAC,GAAL,CAAS,GAAG,MAAZ,CAAf;AACA,MAAI,QAAQ,GAAG,IAAI,CAAC,GAAL,CAAS,GAAG,MAAZ,CAAf;AAEA,MAAI,QAAQ,GAAG,CAAf,EAAkB,QAAQ,GAAG,CAAX;AAClB,MAAI,QAAQ,GAAG,CAAf,EAAkB,QAAQ,GAAG,CAAX;AAElB,QAAM,KAAK,GAAG,IAAI,GAAG,WAArB;AACA,QAAM,KAAK,GAAG,CAAC,IAAI,GAAG,IAAR,KAAkB,QAAQ,GAAG,QAAZ,IAAyB,CAA1C,CAAd;AACA,QAAM,QAAQ,GAAG,IAAI,GAAG,IAAI,CAAC,GAAL,CAAS,QAAQ,GAAG,KAApB,CAAxB;AAEA,SAAO,MAAM,CAAC,GAAP,CAAW,CAAC,KAAD,EAAQ,KAAR,KAAiB;AACjC,UAAM,MAAM,GAAG,IAAI,CAAC,GAAL,CAAS,KAAK,GAAG,KAAjB,CAAf;AAEA,WAAO;AACL,MAAA,CAAC,EAAE,IAAI,GAAG,KAAK,GAAG,KADb;AAEL,MAAA,CAAC,EAAE,QAAQ,GAAG,MAAX,GACD,EAAE,KAAK,GAAG,CAAV,IAAe,MAHZ;AAIL,MAAA,MAJK;AAKL,MAAA;AALK,KAAP;AAOD,GAVM,CAAP;AAWD","sourcesContent":["import { Point, Boundary, Bar } from '../VSparkline'\n\nexport function genPoints (\n values: number[],\n boundary: Boundary\n): Point[] {\n const { minX, maxX, minY, maxY } = boundary\n const totalValues = values.length\n const maxValue = Math.max(...values)\n const minValue = Math.min(...values)\n\n const gridX = (maxX - minX) / (totalValues - 1)\n const gridY = (maxY - minY) / ((maxValue - minValue) || 1)\n\n return values.map((value, index) => {\n return {\n x: minX + index * gridX,\n y:\n maxY -\n (value - minValue) * gridY +\n +(index === totalValues - 1) * 0.00001 -\n +(index === 0) * 0.00001,\n value,\n }\n })\n}\n\nexport function genBars (\n values: number[],\n boundary: Boundary\n): Bar[] {\n const { minX, maxX, minY, maxY } = boundary\n const totalValues = values.length\n let maxValue = Math.max(...values)\n let minValue = Math.min(...values)\n\n if (minValue > 0) minValue = 0\n if (maxValue < 0) maxValue = 0\n\n const gridX = maxX / totalValues\n const gridY = (maxY - minY) / ((maxValue - minValue) || 1)\n const horizonY = maxY - Math.abs(minValue * gridY)\n\n return values.map((value, index) => {\n const height = Math.abs(gridY * value)\n\n return {\n x: minX + index * gridX,\n y: horizonY - height +\n +(value < 0) * height,\n height,\n value,\n }\n })\n}\n"],"sourceRoot":"","file":"core.js"}
+32
View File
@@ -0,0 +1,32 @@
function int(value) {
return parseInt(value, 10);
}
/**
* https://en.wikipedia.org/wiki/Collinearity
* x=(x1+x2)/2
* y=(y1+y2)/2
*/
export function checkCollinear(p0, p1, p2) {
return int(p0.x + p2.x) === int(2 * p1.x) && int(p0.y + p2.y) === int(2 * p1.y);
}
export function getDistance(p1, p2) {
return Math.sqrt(Math.pow(p2.x - p1.x, 2) + Math.pow(p2.y - p1.y, 2));
}
export function moveTo(to, from, radius) {
const vector = {
x: to.x - from.x,
y: to.y - from.y
};
const length = Math.sqrt(vector.x * vector.x + vector.y * vector.y);
const unitVector = {
x: vector.x / length,
y: vector.y / length
};
return {
x: from.x + unitVector.x * radius,
y: from.y + unitVector.y * radius
};
}
//# sourceMappingURL=math.js.map
+1
View File
@@ -0,0 +1 @@
{"version":3,"sources":["../../../../src/components/VSparkline/helpers/math.ts"],"names":[],"mappings":"AAEA,SAAS,GAAT,CAAc,KAAd,EAAoC;AAClC,SAAO,QAAQ,CAAC,KAAD,EAAQ,EAAR,CAAf;AACD;AAED;;;;;;;AAKA,OAAM,SAAU,cAAV,CAA0B,EAA1B,EAAqC,EAArC,EAAgD,EAAhD,EAAyD;AAC7D,SAAO,GAAG,CAAC,EAAE,CAAC,CAAH,GAAO,EAAE,CAAC,CAAX,CAAH,KAAqB,GAAG,CAAC,IAAI,EAAE,CAAC,CAAR,CAAxB,IAAsC,GAAG,CAAC,EAAE,CAAC,CAAH,GAAO,EAAE,CAAC,CAAX,CAAH,KAAqB,GAAG,CAAC,IAAI,EAAE,CAAC,CAAR,CAArE;AACD;AAED,OAAM,SAAU,WAAV,CAAuB,EAAvB,EAAkC,EAAlC,EAA2C;AAC/C,SAAO,IAAI,CAAC,IAAL,CACL,IAAI,CAAC,GAAL,CAAS,EAAE,CAAC,CAAH,GAAO,EAAE,CAAC,CAAnB,EAAsB,CAAtB,IAA2B,IAAI,CAAC,GAAL,CAAS,EAAE,CAAC,CAAH,GAAO,EAAE,CAAC,CAAnB,EAAsB,CAAtB,CADtB,CAAP;AAGD;AAED,OAAM,SAAU,MAAV,CAAkB,EAAlB,EAA6B,IAA7B,EAA0C,MAA1C,EAAwD;AAC5D,QAAM,MAAM,GAAG;AAAE,IAAA,CAAC,EAAE,EAAE,CAAC,CAAH,GAAO,IAAI,CAAC,CAAjB;AAAoB,IAAA,CAAC,EAAE,EAAE,CAAC,CAAH,GAAO,IAAI,CAAC;AAAnC,GAAf;AACA,QAAM,MAAM,GAAG,IAAI,CAAC,IAAL,CAAW,MAAM,CAAC,CAAP,GAAW,MAAM,CAAC,CAAnB,GAAyB,MAAM,CAAC,CAAP,GAAW,MAAM,CAAC,CAArD,CAAf;AACA,QAAM,UAAU,GAAG;AAAE,IAAA,CAAC,EAAE,MAAM,CAAC,CAAP,GAAW,MAAhB;AAAwB,IAAA,CAAC,EAAE,MAAM,CAAC,CAAP,GAAW;AAAtC,GAAnB;AAEA,SAAO;AACL,IAAA,CAAC,EAAE,IAAI,CAAC,CAAL,GAAS,UAAU,CAAC,CAAX,GAAe,MADtB;AAEL,IAAA,CAAC,EAAE,IAAI,CAAC,CAAL,GAAS,UAAU,CAAC,CAAX,GAAe;AAFtB,GAAP;AAID","sourcesContent":["import { Point } from '../VSparkline'\n\nfunction int (value: string | number): number {\n return parseInt(value, 10)\n}\n\n/**\n * https://en.wikipedia.org/wiki/Collinearity\n * x=(x1+x2)/2\n * y=(y1+y2)/2\n */\nexport function checkCollinear (p0: Point, p1: Point, p2: Point): boolean {\n return int(p0.x + p2.x) === int(2 * p1.x) && int(p0.y + p2.y) === int(2 * p1.y)\n}\n\nexport function getDistance (p1: Point, p2: Point): number {\n return Math.sqrt(\n Math.pow(p2.x - p1.x, 2) + Math.pow(p2.y - p1.y, 2)\n )\n}\n\nexport function moveTo (to: Point, from: Point, radius: number) {\n const vector = { x: to.x - from.x, y: to.y - from.y }\n const length = Math.sqrt((vector.x * vector.x) + (vector.y * vector.y))\n const unitVector = { x: vector.x / length, y: vector.y / length }\n\n return {\n x: from.x + unitVector.x * radius,\n y: from.y + unitVector.y * radius,\n }\n}\n"],"sourceRoot":"","file":"math.js"}
+26
View File
@@ -0,0 +1,26 @@
import { checkCollinear, getDistance, moveTo } from './math';
/**
* From https://github.com/unsplash/react-trend/blob/master/src/helpers/DOM.helpers.js#L18
*/
export function genPath(points, radius, fill = false, height = 75) {
const start = points.shift();
const end = points[points.length - 1];
return (fill ? `M${start.x} ${height - start.x + 2} L${start.x} ${start.y}` : `M${start.x} ${start.y}`) + points.map((point, index) => {
const next = points[index + 1];
const prev = points[index - 1] || start;
const isCollinear = next && checkCollinear(next, point, prev);
if (!next || isCollinear) {
return `L${point.x} ${point.y}`;
}
const threshold = Math.min(getDistance(prev, point), getDistance(next, point));
const isTooCloseForRadius = threshold / 2 < radius;
const radiusForPoint = isTooCloseForRadius ? threshold / 2 : radius;
const before = moveTo(prev, point, radiusForPoint);
const after = moveTo(next, point, radiusForPoint);
return `L${before.x} ${before.y}S${point.x} ${point.y} ${after.x} ${after.y}`;
}).join('') + (fill ? `L${end.x} ${height - start.x + 2} Z` : '');
}
//# sourceMappingURL=path.js.map
+1
View File
@@ -0,0 +1 @@
{"version":3,"sources":["../../../../src/components/VSparkline/helpers/path.ts"],"names":[],"mappings":"AACA,SAAS,cAAT,EAAyB,WAAzB,EAAsC,MAAtC,QAAoD,QAApD;AAEA;;;;AAGA,OAAM,SAAU,OAAV,CAAmB,MAAnB,EAAoC,MAApC,EAAoD,IAAI,GAAG,KAA3D,EAAkE,MAAM,GAAG,EAA3E,EAA6E;AACjF,QAAM,KAAK,GAAG,MAAM,CAAC,KAAP,EAAd;AACA,QAAM,GAAG,GAAG,MAAM,CAAC,MAAM,CAAC,MAAP,GAAgB,CAAjB,CAAlB;AAEA,SACE,CAAC,IAAI,GAAG,IAAI,KAAK,CAAC,CAAC,IAAI,MAAM,GAAG,KAAK,CAAC,CAAf,GAAmB,CAAC,KAAK,KAAK,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,EAA7D,GAAkE,IAAI,KAAK,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,EAA7F,IACA,MAAM,CACH,GADH,CACO,CAAC,KAAD,EAAQ,KAAR,KAAiB;AACpB,UAAM,IAAI,GAAG,MAAM,CAAC,KAAK,GAAG,CAAT,CAAnB;AACA,UAAM,IAAI,GAAG,MAAM,CAAC,KAAK,GAAG,CAAT,CAAN,IAAqB,KAAlC;AACA,UAAM,WAAW,GAAG,IAAI,IAAI,cAAc,CAAC,IAAD,EAAO,KAAP,EAAc,IAAd,CAA1C;;AAEA,QAAI,CAAC,IAAD,IAAS,WAAb,EAA0B;AACxB,aAAO,IAAI,KAAK,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,EAA7B;AACD;;AAED,UAAM,SAAS,GAAG,IAAI,CAAC,GAAL,CAChB,WAAW,CAAC,IAAD,EAAO,KAAP,CADK,EAEhB,WAAW,CAAC,IAAD,EAAO,KAAP,CAFK,CAAlB;AAIA,UAAM,mBAAmB,GAAG,SAAS,GAAG,CAAZ,GAAgB,MAA5C;AACA,UAAM,cAAc,GAAG,mBAAmB,GAAG,SAAS,GAAG,CAAf,GAAmB,MAA7D;AAEA,UAAM,MAAM,GAAG,MAAM,CAAC,IAAD,EAAO,KAAP,EAAc,cAAd,CAArB;AACA,UAAM,KAAK,GAAG,MAAM,CAAC,IAAD,EAAO,KAAP,EAAc,cAAd,CAApB;AAEA,WAAO,IAAI,MAAM,CAAC,CAAC,IAAI,MAAM,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,EAA3E;AACD,GArBH,EAsBG,IAtBH,CAsBQ,EAtBR,CADA,IAwBC,IAAI,GAAG,IAAI,GAAG,CAAC,CAAC,IAAI,MAAM,GAAG,KAAK,CAAC,CAAf,GAAmB,CAAC,IAApC,GAA2C,EAxBhD,CADF;AA2BD","sourcesContent":["import { Point } from '../VSparkline'\nimport { checkCollinear, getDistance, moveTo } from './math'\n\n/**\n * From https://github.com/unsplash/react-trend/blob/master/src/helpers/DOM.helpers.js#L18\n */\nexport function genPath (points: Point[], radius: number, fill = false, height = 75) {\n const start = points.shift()!\n const end = points[points.length - 1]\n\n return (\n (fill ? `M${start.x} ${height - start.x + 2} L${start.x} ${start.y}` : `M${start.x} ${start.y}`) +\n points\n .map((point, index) => {\n const next = points[index + 1]\n const prev = points[index - 1] || start\n const isCollinear = next && checkCollinear(next, point, prev)\n\n if (!next || isCollinear) {\n return `L${point.x} ${point.y}`\n }\n\n const threshold = Math.min(\n getDistance(prev, point),\n getDistance(next, point)\n )\n const isTooCloseForRadius = threshold / 2 < radius\n const radiusForPoint = isTooCloseForRadius ? threshold / 2 : radius\n\n const before = moveTo(prev, point, radiusForPoint)\n const after = moveTo(next, point, radiusForPoint)\n\n return `L${before.x} ${before.y}S${point.x} ${point.y} ${after.x} ${after.y}`\n })\n .join('') +\n (fill ? `L${end.x} ${height - start.x + 2} Z` : '')\n )\n}\n"],"sourceRoot":"","file":"path.js"}