@visactor/vrender-components 0.21.2-vstory.3 → 0.21.3-alpha.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/cjs/axis/overlap/util.d.ts +2 -2
- package/cjs/axis/overlap/util.js +4 -4
- package/cjs/axis/overlap/util.js.map +1 -1
- package/cjs/axis/util.js +6 -3
- package/cjs/axis/util.js.map +1 -1
- package/cjs/core/base.d.ts +0 -1
- package/cjs/core/base.js +3 -3
- package/cjs/core/base.js.map +1 -1
- package/cjs/index.d.ts +1 -3
- package/cjs/index.js +2 -3
- package/cjs/index.js.map +1 -1
- package/cjs/interface.d.ts +1 -2
- package/cjs/interface.js.map +1 -1
- package/cjs/legend/discrete/discrete.js +15 -5
- package/cjs/legend/discrete/discrete.js.map +1 -1
- package/cjs/poptip/poptip.d.ts +2 -14
- package/cjs/poptip/poptip.js +51 -137
- package/cjs/poptip/poptip.js.map +1 -1
- package/cjs/poptip/type.d.ts +0 -6
- package/cjs/poptip/type.js.map +1 -1
- package/dist/index.es.js +5062 -5828
- package/es/axis/overlap/util.d.ts +2 -2
- package/es/axis/overlap/util.js +4 -4
- package/es/axis/overlap/util.js.map +1 -1
- package/es/axis/util.js +7 -2
- package/es/axis/util.js.map +1 -1
- package/es/core/base.d.ts +0 -1
- package/es/core/base.js +3 -4
- package/es/core/base.js.map +1 -1
- package/es/index.d.ts +1 -3
- package/es/index.js +1 -5
- package/es/index.js.map +1 -1
- package/es/interface.d.ts +1 -2
- package/es/interface.js.map +1 -1
- package/es/legend/discrete/discrete.js +15 -5
- package/es/legend/discrete/discrete.js.map +1 -1
- package/es/poptip/poptip.d.ts +2 -14
- package/es/poptip/poptip.js +49 -136
- package/es/poptip/poptip.js.map +1 -1
- package/es/poptip/type.d.ts +0 -6
- package/es/poptip/type.js.map +1 -1
- package/package.json +5 -5
- package/cjs/label-item/index.d.ts +0 -2
- package/cjs/label-item/index.js +0 -21
- package/cjs/label-item/index.js.map +0 -1
- package/cjs/label-item/label-item.d.ts +0 -29
- package/cjs/label-item/label-item.js +0 -265
- package/cjs/label-item/label-item.js.map +0 -1
- package/cjs/label-item/register.d.ts +0 -1
- package/cjs/label-item/register.js +0 -15
- package/cjs/label-item/register.js.map +0 -1
- package/cjs/label-item/type.d.ts +0 -31
- package/cjs/label-item/type.js +0 -6
- package/cjs/label-item/type.js.map +0 -1
- package/cjs/weather/index.d.ts +0 -1
- package/cjs/weather/index.js +0 -21
- package/cjs/weather/index.js.map +0 -1
- package/cjs/weather/register.d.ts +0 -1
- package/cjs/weather/register.js +0 -14
- package/cjs/weather/register.js.map +0 -1
- package/cjs/weather/type.d.ts +0 -24
- package/cjs/weather/type.js +0 -6
- package/cjs/weather/type.js.map +0 -1
- package/cjs/weather/weather-box.d.ts +0 -13
- package/cjs/weather/weather-box.js +0 -129
- package/cjs/weather/weather-box.js.map +0 -1
- package/es/label-item/index.d.ts +0 -2
- package/es/label-item/index.js +0 -4
- package/es/label-item/index.js.map +0 -1
- package/es/label-item/label-item.d.ts +0 -29
- package/es/label-item/label-item.js +0 -263
- package/es/label-item/label-item.js.map +0 -1
- package/es/label-item/register.d.ts +0 -1
- package/es/label-item/register.js +0 -6
- package/es/label-item/register.js.map +0 -1
- package/es/label-item/type.d.ts +0 -31
- package/es/label-item/type.js +0 -2
- package/es/label-item/type.js.map +0 -1
- package/es/weather/index.d.ts +0 -1
- package/es/weather/index.js +0 -2
- package/es/weather/index.js.map +0 -1
- package/es/weather/register.d.ts +0 -1
- package/es/weather/register.js +0 -6
- package/es/weather/register.js.map +0 -1
- package/es/weather/type.d.ts +0 -24
- package/es/weather/type.js +0 -2
- package/es/weather/type.js.map +0 -1
- package/es/weather/weather-box.d.ts +0 -13
- package/es/weather/weather-box.js +0 -127
- package/es/weather/weather-box.js.map +0 -1
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type { IText } from '@visactor/vrender-core';
|
|
2
2
|
export declare function genRotateBounds(items: IText[]): void;
|
|
3
3
|
export declare function itemIntersect(item1: IText, item2: IText): boolean;
|
|
4
|
-
export declare function isAngleVertical(angle: number): boolean;
|
|
5
|
-
export declare function isAngleHorizontal(angle: number): boolean;
|
|
4
|
+
export declare function isAngleVertical(angle: number, delta?: number): boolean;
|
|
5
|
+
export declare function isAngleHorizontal(angle: number, delta?: number): boolean;
|
package/cjs/axis/overlap/util.js
CHANGED
|
@@ -45,14 +45,14 @@ exports.genRotateBounds = genRotateBounds, exports.itemIntersect = itemIntersect
|
|
|
45
45
|
|
|
46
46
|
const DELTA_ANGLE = Math.sin(Math.PI / 10);
|
|
47
47
|
|
|
48
|
-
function isAngleVertical(angle) {
|
|
48
|
+
function isAngleVertical(angle, delta = DELTA_ANGLE) {
|
|
49
49
|
const hasAngle = !(0, vutils_1.isNil)(angle) && 0 !== angle, cos = hasAngle ? Math.cos(angle) : 1;
|
|
50
|
-
return hasAngle && Math.abs(cos) <=
|
|
50
|
+
return hasAngle && Math.abs(cos) <= delta;
|
|
51
51
|
}
|
|
52
52
|
|
|
53
|
-
function isAngleHorizontal(angle) {
|
|
53
|
+
function isAngleHorizontal(angle, delta = DELTA_ANGLE) {
|
|
54
54
|
const hasAngle = !(0, vutils_1.isNil)(angle) && 0 !== angle, sin = hasAngle ? Math.sin(angle) : 0;
|
|
55
|
-
return !hasAngle || Math.abs(sin) <=
|
|
55
|
+
return !hasAngle || Math.abs(sin) <= delta;
|
|
56
56
|
}
|
|
57
57
|
|
|
58
58
|
exports.isAngleVertical = isAngleVertical, exports.isAngleHorizontal = isAngleHorizontal;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/axis/overlap/util.ts"],"names":[],"mappings":";;;AACA,6CAA8F;AAG9F,SAAS,eAAe,CAAC,IAAW;IAClC,MAAM,MAAM,GAAG,IAAI,CAAC,UAAU,CAAC;IAE/B,OAAO;QACL,EAAE,EAAE,MAAM,CAAC,EAAE;QACb,EAAE,EAAE,MAAM,CAAC,EAAE;QACb,EAAE,EAAE,MAAM,CAAC,EAAE;QACb,EAAE,EAAE,MAAM,CAAC,EAAE;QACb,OAAO,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;QACzB,OAAO,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;QACzB,KAAK,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK;KAC5B,CAAC;AACJ,CAAC;AAED,SAAgB,eAAe,CAAC,KAAc;IAC5C,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;QACnB,IAAI,IAAI,CAAC,aAAa,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE;YAC/C,OAAO;SACR;QAED,MAAM,MAAM,GAAG,eAAe,CAAC,IAAI,CAAC,CAAC;QACrC,MAAM,aAAa,GAAG,IAAA,oBAAW,EAAC,EAAE,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,EAAE,MAAM,CAAC,KAAK,EAAE;YAC5F,CAAC,EAAE,MAAM,CAAC,OAAO;YACjB,CAAC,EAAE,MAAM,CAAC,OAAO;SAClB,CAAC,CAAC;QAEH,MAAM,MAAM,GAAG,aAAa,CAAC,CAAC,GAAG,MAAM,CAAC,OAAO,CAAC;QAChD,MAAM,MAAM,GAAG,aAAa,CAAC,CAAC,GAAG,MAAM,CAAC,OAAO,CAAC;QAChD,MAAM,CAAC,EAAE,IAAI,MAAM,CAAC;QACpB,MAAM,CAAC,EAAE,IAAI,MAAM,CAAC;QACpB,MAAM,CAAC,EAAE,IAAI,MAAM,CAAC;QACpB,MAAM,CAAC,EAAE,IAAI,MAAM,CAAC;QACpB,MAAM,CAAC,OAAO,IAAI,MAAM,CAAC;QACzB,MAAM,CAAC,OAAO,IAAI,MAAM,CAAC;QACzB,IAAI,CAAC,aAAa,GAAG,MAAM,CAAC;IAC9B,CAAC,CAAC,CAAC;AACL,CAAC;AAtBD,0CAsBC;AAED,SAAgB,aAAa,CAAC,KAAY,EAAE,KAAY;;IACtD,IAAI,CAAC,CAAA,MAAA,KAAK,CAAC,SAAS,0CAAE,KAAK,EAAE,CAAA,IAAI,CAAC,CAAA,MAAA,KAAK,CAAC,SAAS,0CAAE,KAAK,EAAE,CAAA,EAAE;QAC1D,OAAO,KAAK,CAAC,SAAS,CAAC,UAAU,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;KACpD;IACD,OAAO,CACL,IAAA,wBAAe,EAAC,KAAK,CAAC,UAAU,EAAE,KAAK,CAAC,UAAU,EAAE,KAAK,CAAC;QAC1D,CAAC,KAAK,CAAC,aAAa,IAAI,KAAK,CAAC,aAAa;YACzC,CAAC,CAAC,IAAA,8BAAqB,EAAC,KAAK,CAAC,aAAa,EAAE,KAAK,CAAC,aAAa,EAAE,IAAI,CAAC;YACvE,CAAC,CAAC,IAAI,CAAC,CACV,CAAC;AACJ,CAAC;AAVD,sCAUC;AAED,MAAM,WAAW,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC;AAC3C,SAAgB,eAAe,CAAC,KAAa;
|
|
1
|
+
{"version":3,"sources":["../src/axis/overlap/util.ts"],"names":[],"mappings":"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","file":"util.js","sourcesContent":["import type { IText } from '@visactor/vrender-core';\nimport { isNil, isRectIntersect, isRotateAABBIntersect, rotatePoint } from '@visactor/vutils';\n\n// 计算水平情况下的包围盒\nfunction genNormalBounds(item: IText) {\n const bounds = item.AABBBounds;\n\n return {\n x1: bounds.x1,\n x2: bounds.x2,\n y1: bounds.y1,\n y2: bounds.y2,\n centerX: item.attribute.x,\n centerY: item.attribute.y,\n angle: item.attribute.angle\n };\n}\n\nexport function genRotateBounds(items: IText[]) {\n items.forEach(item => {\n if (item.rotatedBounds || !item.attribute.angle) {\n return;\n }\n // 计算水平情况下的包围盒\n const bounds = genNormalBounds(item);\n const rotatedCenter = rotatePoint({ x: item.attribute.x, y: item.attribute.y }, bounds.angle, {\n x: bounds.centerX,\n y: bounds.centerY\n });\n\n const deltaX = rotatedCenter.x - bounds.centerX;\n const deltaY = rotatedCenter.y - bounds.centerY;\n bounds.x1 += deltaX;\n bounds.x2 += deltaX;\n bounds.y1 += deltaY;\n bounds.y2 += deltaY;\n bounds.centerX += deltaX;\n bounds.centerY += deltaY;\n item.rotatedBounds = bounds;\n });\n}\n\nexport function itemIntersect(item1: IText, item2: IText) {\n if (!item1.OBBBounds?.empty() && !item2.OBBBounds?.empty()) {\n return item1.OBBBounds.intersects(item2.OBBBounds);\n }\n return (\n isRectIntersect(item1.AABBBounds, item2.AABBBounds, false) &&\n (item1.rotatedBounds && item2.rotatedBounds\n ? isRotateAABBIntersect(item1.rotatedBounds, item2.rotatedBounds, true)\n : true)\n );\n}\n\nconst DELTA_ANGLE = Math.sin(Math.PI / 10);\nexport function isAngleVertical(angle: number, delta = DELTA_ANGLE) {\n const hasAngle = !isNil(angle) && angle !== 0;\n const cos = hasAngle ? Math.cos(angle) : 1;\n return hasAngle && Math.abs(cos) <= delta;\n}\n\nexport function isAngleHorizontal(angle: number, delta = DELTA_ANGLE) {\n const hasAngle = !isNil(angle) && angle !== 0;\n const sin = hasAngle ? Math.sin(angle) : 0;\n return !hasAngle || Math.abs(sin) <= delta;\n}\n"]}
|
package/cjs/axis/util.js
CHANGED
|
@@ -4,7 +4,7 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
4
4
|
value: !0
|
|
5
5
|
}), exports.hasOverlap = exports.textIntersect = exports.getPolygonPath = exports.getCirclePoints = exports.getPolarAngleLabelPosition = exports.angleLabelOrientAttribute = exports.getCircleVerticalVector = exports.getVerticalCoord = exports.getElMap = exports.getAxisBreakSymbolAttrs = exports.getCircleLabelPosition = exports.isInRange = exports.clampRadian = void 0;
|
|
6
6
|
|
|
7
|
-
const vutils_1 = require("@visactor/vutils"), common_1 = require("../util/common"), util_1 = require("../util"), config_1 = require("./config"), clampRadian = (angle = 0) => {
|
|
7
|
+
const vutils_1 = require("@visactor/vutils"), common_1 = require("../util/common"), util_1 = require("../util"), config_1 = require("./config"), util_2 = require("./overlap/util"), clampRadian = (angle = 0) => {
|
|
8
8
|
if (angle < 0) for (;angle < 0; ) angle += vutils_1.tau; else if (angle > 0) for (;angle > vutils_1.tau; ) angle -= vutils_1.tau;
|
|
9
9
|
return angle;
|
|
10
10
|
};
|
|
@@ -85,9 +85,12 @@ function getPolygonPath(points, closed) {
|
|
|
85
85
|
}
|
|
86
86
|
|
|
87
87
|
function textIntersect(textA, textB, sep) {
|
|
88
|
-
|
|
89
|
-
|
|
88
|
+
var _a;
|
|
89
|
+
let a, b;
|
|
90
|
+
const angle = null === (_a = textA.attribute) || void 0 === _a ? void 0 : _a.angle, isAABBIntersects = (textA, textB, sep) => (a = textA.AABBBounds,
|
|
90
91
|
b = textB.AABBBounds, sep > Math.max(b.x1 - a.x2, a.x1 - b.x2, b.y1 - a.y2, a.y1 - b.y2));
|
|
92
|
+
return (0, util_2.isAngleHorizontal)(angle, Number.EPSILON) ? isAABBIntersects(textA, textB, sep) : (a = textA.OBBBounds,
|
|
93
|
+
b = textB.OBBBounds, !a || !b || a.empty() || b.empty() ? isAABBIntersects(textA, textB, sep) : a.intersects(b));
|
|
91
94
|
}
|
|
92
95
|
|
|
93
96
|
function hasOverlap(items, pad) {
|
package/cjs/axis/util.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/axis/util.ts"],"names":[],"mappings":";;;AAIA,6CAAmG;AACnG,2CAA+C;AAG/C,kCAAwC;AAExC,qCAA2D;AAIpD,MAAM,WAAW,GAAG,CAAC,QAAgB,CAAC,EAAE,EAAE;IAC/C,IAAI,KAAK,GAAG,CAAC,EAAE;QACb,OAAO,KAAK,GAAG,CAAC,EAAE;YAChB,KAAK,IAAI,YAAG,CAAC;SACd;KACF;SAAM,IAAI,KAAK,GAAG,CAAC,EAAE;QACpB,OAAO,KAAK,GAAG,YAAG,EAAE;YAClB,KAAK,IAAI,YAAG,CAAC;SACd;KACF;IACD,OAAO,KAAK,CAAC;AACf,CAAC,CAAC;AAXW,QAAA,WAAW,eAWtB;AAGF,SAAgB,SAAS,CAAC,CAAS,EAAE,GAAW,EAAE,GAAW;IAC3D,OAAO,CAAC,IAAA,eAAM,EAAC,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,IAAA,kBAAS,EAAC,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC;AACjE,CAAC;AAFD,8BAEC;AAED,SAAgB,sBAAsB,CAAC,YAAmB,EAAE,UAA4B;IACtF,OAAO;QACL,CAAC,EAAE,YAAY,CAAC,CAAC,GAAG,UAAU,CAAC,CAAC,CAAC;QACjC,CAAC,EAAE,YAAY,CAAC,CAAC,GAAG,UAAU,CAAC,CAAC,CAAC;KAClC,CAAC;AACJ,CAAC;AALD,wDAKC;AAED,SAAgB,uBAAuB,CAAC,QAAqB,EAAE;;IAC7D,MAAM,EAAE,KAAK,GAAG,EAAE,EAAE,KAAK,GAAG,IAAI,CAAC,EAAE,GAAG,GAAG,EAAE,GAAG,KAAK,CAAC;IACpD,MAAM,WAAW,GAAG,IAAA,cAAK,EAAC,EAAE,EAAE,wCAA+B,EAAE,KAAK,CAAC,CAAC;IACtE,MAAM,UAAU,GAAG,MAAA,WAAW,CAAC,IAAI,mCAAI,wCAA+B,CAAC,IAAI,CAAC;IAC5E,uCACK,WAAW,KACd,UAAU,EACR,MAAA,WAAW,CAAC,UAAU,mCACtB,KAAK,CAAC,UAAU,GAAG,CAAC,IAAI,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,UAAU,GAAG,CAAC,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,EAC7G,UAAU,IACV;AACJ,CAAC;AAXD,0DAWC;AACD,SAAgB,QAAQ,CAAC,CAAS;IAChC,MAAM,KAAK,GAAmB,EAAE,CAAC;IACjC,IAAA,sBAAa,EAAC,CAAC,EAAE,CAAC,EAAY,EAAE,EAAE;QAChC,IAAK,EAAe,CAAC,IAAI,KAAK,OAAO,IAAI,EAAE,CAAC,EAAE,EAAE;YAC9C,KAAK,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC;SACnB;IACH,CAAC,CAAC,CAAC;IACH,OAAO,KAAK,CAAC;AACf,CAAC;AARD,4BAQC;AAED,SAAgB,gBAAgB,CAAC,KAAY,EAAE,MAAe;IAC5D,OAAO;QACL,CAAC,EAAE,KAAK,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC;QACtB,CAAC,EAAE,KAAK,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC;KACvB,CAAC;AACJ,CAAC;AALD,4CAKC;AAED,SAAgB,uBAAuB,CACrC,MAAc,EACd,KAAY,EACZ,MAAa,EACb,MAAM,GAAG,KAAK,EACd,UAAU,GAAG,KAAK;IAElB,MAAM,MAAM,GAAqB,CAAC,KAAK,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;IAC1E,OAAO,IAAA,YAAK,EAAC,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,GAAG,IAAA,aAAM,EAAC,MAAM,CAAC,CAAC,CAAC;AAC9F,CAAC;AATD,0DASC;AAOD,SAAgB,yBAAyB,CAAC,KAAa;IACrD,IAAI,KAAK,GAAkB,QAAQ,CAAC;IACpC,IAAI,QAAQ,GAAqB,QAAQ,CAAC;IAE1C,KAAK,GAAG,IAAA,uBAAc,EAAC,KAAK,CAAC,CAAC;IAG9B,IAAI,KAAK,IAAI,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,KAAK,IAAI,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE;QAC5D,KAAK,GAAG,MAAM,CAAC;KAChB;SAAM,IAAI,KAAK,IAAI,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,KAAK,IAAI,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE;QACnE,KAAK,GAAG,OAAO,CAAC;KACjB;SAAM;QACL,KAAK,GAAG,QAAQ,CAAC;KAClB;IAGD,IAAI,KAAK,IAAI,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,KAAK,IAAI,IAAI,CAAC,EAAE,GAAG,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE;QAC7D,QAAQ,GAAG,QAAQ,CAAC;KACrB;SAAM,IAAI,KAAK,IAAI,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,KAAK,IAAI,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE;QACnE,QAAQ,GAAG,KAAK,CAAC;KAClB;SAAM;QACL,QAAQ,GAAG,QAAQ,CAAC;KACrB;IAED,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC;AAC7B,CAAC;AAzBD,8DAyBC;AAED,SAAgB,0BAA0B,CACxC,KAAa,EACb,MAAgC,EAChC,MAAc,EACd,WAAmB,EACnB,MAAe;IAEf,MAAM,KAAK,GAAG,IAAA,yBAAgB,EAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC;IAC9D,MAAM,UAAU,GAAG,gBAAgB,CAAC,KAAK,EAAE,uBAAuB,CAAC,WAAW,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;IACxG,MAAM,MAAM,GAAG,uBAAuB,CAAC,WAAW,IAAI,CAAC,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;IACrF,OAAO,sBAAsB,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;AACpD,CAAC;AAXD,gEAWC;AAED,SAAgB,eAAe,CAAC,MAAa,EAAE,KAAa,EAAE,MAAc,EAAE,UAAkB,EAAE,QAAgB;IAChH,MAAM,MAAM,GAAY,EAAE,CAAC;IAC3B,MAAM,KAAK,GAAG,QAAQ,GAAG,UAAU,CAAC;IACpC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,EAAE,CAAC,EAAE,EAAE;QAC9B,MAAM,KAAK,GAAG,UAAU,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC,GAAG,KAAK,CAAC;QAC/C,MAAM,CAAC,IAAI,CAAC,IAAA,yBAAgB,EAAC,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC,CAAC;KACtD;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AARD,0CAQC;AAED,SAAgB,cAAc,CAAC,MAAe,EAAE,MAAe;IAC7D,IAAI,IAAI,GAAG,EAAE,CAAC;IACd,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE;QACvB,OAAO,IAAI,CAAC;KACb;IACD,MAAM,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE;QAC9B,IAAI,KAAK,KAAK,CAAC,EAAE;YACf,IAAI,GAAG,IAAI,KAAK,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,EAAE,CAAC;SACjC;aAAM;YACL,IAAI,IAAI,IAAI,KAAK,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,EAAE,CAAC;SAClC;IACH,CAAC,CAAC,CAAC;IACH,IAAI,MAAM,EAAE;QACV,IAAI,IAAI,GAAG,CAAC;KACb;IAED,OAAO,IAAI,CAAC;AACd,CAAC;AAjBD,wCAiBC;AAED,SAAgB,aAAa,CAAC,KAAY,EAAE,KAAY,EAAE,GAAW;IACnE,IAAI,CAAC,GAAY,KAAK,CAAC,SAAS,CAAC;IACjC,IAAI,CAAC,GAAY,KAAK,CAAC,SAAS,CAAC;IACjC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC,KAAK,EAAE,EAAE;QACtC,OAAO,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;KACxB;IACD,CAAC,GAAG,KAAK,CAAC,UAAU,CAAC;IACrB,CAAC,GAAG,KAAK,CAAC,UAAU,CAAC;IACrB,OAAO,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC;AAC5E,CAAC;AATD,sCASC;AAED,SAAgB,UAAU,CAAI,KAAc,EAAE,GAAW;IACvD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,EAAE;QACpE,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;QACb,IAAI,aAAa,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,EAAE;YAC5B,OAAO,IAAI,CAAC;SACb;KACF;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AARD,gCAQC","file":"util.js","sourcesContent":["// eslint-disable-next-line no-duplicate-imports\nimport type { IGraphic, IGroup, IText, TextAlignType, TextBaselineType } from '@visactor/vrender-core';\nimport type { Dict, IBounds } from '@visactor/vutils';\n// eslint-disable-next-line no-duplicate-imports\nimport { isGreater, isLess, tau, normalizeAngle, polarToCartesian, merge } from '@visactor/vutils';\nimport { traverseGroup } from '../util/common';\nimport type { Vector2 } from '../util';\n// eslint-disable-next-line no-duplicate-imports\nimport { scale, length } from '../util';\nimport type { BreakSymbol } from './type';\nimport { DEFAULT_AXIS_BREAK_SYMBOL_STYLE } from './config';\nimport type { Point } from '../core/type';\n\n// 和 vutils 版本不同\nexport const clampRadian = (angle: number = 0) => {\n if (angle < 0) {\n while (angle < 0) {\n angle += tau;\n }\n } else if (angle > 0) {\n while (angle > tau) {\n angle -= tau;\n }\n }\n return angle;\n};\n\n// 判断数值是否在制定范围内,包含误差\nexport function isInRange(a: number, min: number, max: number) {\n return !isLess(a, min, 0, 1e-6) && !isGreater(a, max, 0, 1e-6);\n}\n\nexport function getCircleLabelPosition(tickPosition: Point, tickVector: [number, number]) {\n return {\n x: tickPosition.x + tickVector[0],\n y: tickPosition.y + tickVector[1]\n };\n}\n\nexport function getAxisBreakSymbolAttrs(props: BreakSymbol = {}) {\n const { style = {}, angle = Math.PI * 0.5 } = props;\n const symbolStyle = merge({}, DEFAULT_AXIS_BREAK_SYMBOL_STYLE, style);\n const symbolSize = symbolStyle.size ?? DEFAULT_AXIS_BREAK_SYMBOL_STYLE.size;\n return {\n ...symbolStyle,\n symbolType:\n symbolStyle.symbolType ??\n `M ${-symbolSize / 2} ${symbolSize * Math.sin(angle)} L ${symbolSize / 2} ${-symbolSize * Math.sin(angle)}`,\n symbolSize\n };\n}\nexport function getElMap(g: IGroup) {\n const elMap: Dict<IGraphic> = {};\n traverseGroup(g, (el: IGraphic) => {\n if ((el as IGraphic).type !== 'group' && el.id) {\n elMap[el.id] = el;\n }\n });\n return elMap;\n}\n\nexport function getVerticalCoord(point: Point, vector: Vector2): Point {\n return {\n x: point.x + vector[0],\n y: point.y + vector[1]\n };\n}\n\nexport function getCircleVerticalVector(\n offset: number,\n point: Point,\n center: Point,\n inside = false,\n axisInside = false\n): Vector2 {\n const vector: [number, number] = [point.x - center.x, point.y - center.y];\n return scale(vector, ((inside ? -1 : 1) * (axisInside ? -1 : 1) * offset) / length(vector));\n}\n\n/**\n * 计算对应角度下的角度轴标签定位属性\n * @param angle 弧度角,需要注意是逆时针计算的\n * @returns\n */\nexport function angleLabelOrientAttribute(angle: number) {\n let align: TextAlignType = 'center';\n let baseline: TextBaselineType = 'middle';\n\n angle = normalizeAngle(angle);\n\n // left: 5/3 - 1/3; right: 2/3 - 4/3; center: 5/3 - 1/3 & 2/3 - 4/3\n if (angle >= Math.PI * (5 / 3) || angle <= Math.PI * (1 / 3)) {\n align = 'left';\n } else if (angle >= Math.PI * (2 / 3) && angle <= Math.PI * (4 / 3)) {\n align = 'right';\n } else {\n align = 'center';\n }\n\n // bottom: 7/6 - 11/6; top: 1/6 - 5/6; middle: 11/6 - 1/6 & 5/6 - 7/6\n if (angle >= Math.PI * (7 / 6) && angle <= Math.PI * (11 / 6)) {\n baseline = 'bottom';\n } else if (angle >= Math.PI * (1 / 6) && angle <= Math.PI * (5 / 6)) {\n baseline = 'top';\n } else {\n baseline = 'middle';\n }\n\n return { align, baseline };\n}\n\nexport function getPolarAngleLabelPosition(\n angle: number,\n center: { x: number; y: number },\n radius: number,\n labelOffset: number,\n inside: boolean\n) {\n const point = polarToCartesian({ x: 0, y: 0 }, radius, angle);\n const labelPoint = getVerticalCoord(point, getCircleVerticalVector(labelOffset, point, center, inside));\n const vector = getCircleVerticalVector(labelOffset || 1, labelPoint, center, inside);\n return getCircleLabelPosition(labelPoint, vector);\n}\n\nexport function getCirclePoints(center: Point, count: number, radius: number, startAngle: number, endAngle: number) {\n const points: Point[] = [];\n const range = endAngle - startAngle;\n for (let i = 0; i < count; i++) {\n const angle = startAngle + (i * range) / count;\n points.push(polarToCartesian(center, radius, angle));\n }\n return points;\n}\n\nexport function getPolygonPath(points: Point[], closed: boolean) {\n let path = '';\n if (points.length === 0) {\n return path;\n }\n points.forEach((point, index) => {\n if (index === 0) {\n path = `M${point.x},${point.y}`;\n } else {\n path += `L${point.x},${point.y}`;\n }\n });\n if (closed) {\n path += 'Z';\n }\n\n return path;\n}\n\nexport function textIntersect(textA: IText, textB: IText, sep: number) {\n let a: IBounds = textA.OBBBounds;\n let b: IBounds = textB.OBBBounds;\n if (a && b && !a.empty() && !b.empty()) {\n return a.intersects(b);\n }\n a = textA.AABBBounds;\n b = textB.AABBBounds;\n return sep > Math.max(b.x1 - a.x2, a.x1 - b.x2, b.y1 - a.y2, a.y1 - b.y2);\n}\n\nexport function hasOverlap<T>(items: IText[], pad: number): boolean {\n for (let i = 1, n = items.length, a = items[0], b; i < n; a = b, ++i) {\n b = items[i];\n if (textIntersect(a, b, pad)) {\n return true;\n }\n }\n return false;\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/axis/util.ts"],"names":[],"mappings":"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","file":"util.js","sourcesContent":["// eslint-disable-next-line no-duplicate-imports\nimport type { IGraphic, IGroup, IText, TextAlignType, TextBaselineType } from '@visactor/vrender-core';\nimport type { Dict, IBounds } from '@visactor/vutils';\n// eslint-disable-next-line no-duplicate-imports\nimport { isGreater, isLess, tau, normalizeAngle, polarToCartesian, merge } from '@visactor/vutils';\nimport { traverseGroup } from '../util/common';\nimport type { Vector2 } from '../util';\n// eslint-disable-next-line no-duplicate-imports\nimport { scale, length } from '../util';\nimport type { BreakSymbol } from './type';\nimport { DEFAULT_AXIS_BREAK_SYMBOL_STYLE } from './config';\nimport type { Point } from '../core/type';\nimport { isAngleHorizontal } from './overlap/util';\n\n// 和 vutils 版本不同\nexport const clampRadian = (angle: number = 0) => {\n if (angle < 0) {\n while (angle < 0) {\n angle += tau;\n }\n } else if (angle > 0) {\n while (angle > tau) {\n angle -= tau;\n }\n }\n return angle;\n};\n\n// 判断数值是否在制定范围内,包含误差\nexport function isInRange(a: number, min: number, max: number) {\n return !isLess(a, min, 0, 1e-6) && !isGreater(a, max, 0, 1e-6);\n}\n\nexport function getCircleLabelPosition(tickPosition: Point, tickVector: [number, number]) {\n return {\n x: tickPosition.x + tickVector[0],\n y: tickPosition.y + tickVector[1]\n };\n}\n\nexport function getAxisBreakSymbolAttrs(props: BreakSymbol = {}) {\n const { style = {}, angle = Math.PI * 0.5 } = props;\n const symbolStyle = merge({}, DEFAULT_AXIS_BREAK_SYMBOL_STYLE, style);\n const symbolSize = symbolStyle.size ?? DEFAULT_AXIS_BREAK_SYMBOL_STYLE.size;\n return {\n ...symbolStyle,\n symbolType:\n symbolStyle.symbolType ??\n `M ${-symbolSize / 2} ${symbolSize * Math.sin(angle)} L ${symbolSize / 2} ${-symbolSize * Math.sin(angle)}`,\n symbolSize\n };\n}\nexport function getElMap(g: IGroup) {\n const elMap: Dict<IGraphic> = {};\n traverseGroup(g, (el: IGraphic) => {\n if ((el as IGraphic).type !== 'group' && el.id) {\n elMap[el.id] = el;\n }\n });\n return elMap;\n}\n\nexport function getVerticalCoord(point: Point, vector: Vector2): Point {\n return {\n x: point.x + vector[0],\n y: point.y + vector[1]\n };\n}\n\nexport function getCircleVerticalVector(\n offset: number,\n point: Point,\n center: Point,\n inside = false,\n axisInside = false\n): Vector2 {\n const vector: [number, number] = [point.x - center.x, point.y - center.y];\n return scale(vector, ((inside ? -1 : 1) * (axisInside ? -1 : 1) * offset) / length(vector));\n}\n\n/**\n * 计算对应角度下的角度轴标签定位属性\n * @param angle 弧度角,需要注意是逆时针计算的\n * @returns\n */\nexport function angleLabelOrientAttribute(angle: number) {\n let align: TextAlignType = 'center';\n let baseline: TextBaselineType = 'middle';\n\n angle = normalizeAngle(angle);\n\n // left: 5/3 - 1/3; right: 2/3 - 4/3; center: 5/3 - 1/3 & 2/3 - 4/3\n if (angle >= Math.PI * (5 / 3) || angle <= Math.PI * (1 / 3)) {\n align = 'left';\n } else if (angle >= Math.PI * (2 / 3) && angle <= Math.PI * (4 / 3)) {\n align = 'right';\n } else {\n align = 'center';\n }\n\n // bottom: 7/6 - 11/6; top: 1/6 - 5/6; middle: 11/6 - 1/6 & 5/6 - 7/6\n if (angle >= Math.PI * (7 / 6) && angle <= Math.PI * (11 / 6)) {\n baseline = 'bottom';\n } else if (angle >= Math.PI * (1 / 6) && angle <= Math.PI * (5 / 6)) {\n baseline = 'top';\n } else {\n baseline = 'middle';\n }\n\n return { align, baseline };\n}\n\nexport function getPolarAngleLabelPosition(\n angle: number,\n center: { x: number; y: number },\n radius: number,\n labelOffset: number,\n inside: boolean\n) {\n const point = polarToCartesian({ x: 0, y: 0 }, radius, angle);\n const labelPoint = getVerticalCoord(point, getCircleVerticalVector(labelOffset, point, center, inside));\n const vector = getCircleVerticalVector(labelOffset || 1, labelPoint, center, inside);\n return getCircleLabelPosition(labelPoint, vector);\n}\n\nexport function getCirclePoints(center: Point, count: number, radius: number, startAngle: number, endAngle: number) {\n const points: Point[] = [];\n const range = endAngle - startAngle;\n for (let i = 0; i < count; i++) {\n const angle = startAngle + (i * range) / count;\n points.push(polarToCartesian(center, radius, angle));\n }\n return points;\n}\n\nexport function getPolygonPath(points: Point[], closed: boolean) {\n let path = '';\n if (points.length === 0) {\n return path;\n }\n points.forEach((point, index) => {\n if (index === 0) {\n path = `M${point.x},${point.y}`;\n } else {\n path += `L${point.x},${point.y}`;\n }\n });\n if (closed) {\n path += 'Z';\n }\n\n return path;\n}\n\nexport function textIntersect(textA: IText, textB: IText, sep: number) {\n let a: IBounds;\n let b: IBounds;\n // 注意:默认旋转角度一样\n const angle = textA.attribute?.angle;\n const isHorizontal = isAngleHorizontal(angle, Number.EPSILON);\n const isAABBIntersects = (textA: IText, textB: IText, sep: number) => {\n a = textA.AABBBounds;\n b = textB.AABBBounds;\n return sep > Math.max(b.x1 - a.x2, a.x1 - b.x2, b.y1 - a.y2, a.y1 - b.y2);\n };\n\n // 水平文字可以直接用 AABB 包围盒计算\n if (isHorizontal) {\n return isAABBIntersects(textA, textB, sep);\n }\n\n a = textA.OBBBounds;\n b = textB.OBBBounds;\n\n // 没有 OBB bounds 则用 AABB 包围盒计算\n if (!a || !b || a.empty() || b.empty()) {\n return isAABBIntersects(textA, textB, sep);\n }\n\n // 非水平文字且有 OBB 包围盒\n // TODO: 待支持有旋转角度下的 sep 计算逻辑\n return a.intersects(b);\n // const expandedTextA = textA.clone();\n // const boundsPaddingA = textA.attribute.boundsPadding ?? 0;\n // expandedTextA.setAttributes({\n // boundsPadding: isNumber(boundsPaddingA) ? boundsPaddingA + sep / 2 : boundsPaddingA.map(v => v + sep / 2)\n // });\n // const expandTextB = textB.clone();\n // const boundsPaddingB = textB.attribute.boundsPadding ?? 0;\n\n // expandTextB.setAttributes({\n // boundsPadding: isNumber(boundsPaddingB) ? boundsPaddingB + sep / 2 : boundsPaddingB.map(v => v + sep / 2)\n // });\n\n // return expandedTextA.OBBBounds.intersects(expandTextB.OBBBounds);\n}\n\nexport function hasOverlap<T>(items: IText[], pad: number): boolean {\n for (let i = 1, n = items.length, a = items[0], b; i < n; a = b, ++i) {\n b = items[i];\n if (textIntersect(a, b, pad)) {\n return true;\n }\n }\n return false;\n}\n"]}
|
package/cjs/core/base.d.ts
CHANGED
|
@@ -6,7 +6,6 @@ export declare abstract class AbstractComponent<T extends IGroupGraphicAttribute
|
|
|
6
6
|
attribute: Partial<T>;
|
|
7
7
|
protected mode?: '2d' | '3d';
|
|
8
8
|
protected skipDefault?: boolean;
|
|
9
|
-
protected _skipRenderAttributes: string[];
|
|
10
9
|
constructor(attributes: T, options?: ComponentOptions);
|
|
11
10
|
setAttribute(key: string, value: any, forceUpdateTag?: boolean | undefined): void;
|
|
12
11
|
setAttributes(params: Partial<T>, forceUpdateTag?: boolean | undefined): void;
|
package/cjs/core/base.js
CHANGED
|
@@ -8,7 +8,7 @@ const vrender_core_1 = require("@visactor/vrender-core"), vutils_1 = require("@v
|
|
|
8
8
|
|
|
9
9
|
class AbstractComponent extends vrender_core_1.Group {
|
|
10
10
|
constructor(attributes, options) {
|
|
11
|
-
super(attributes),
|
|
11
|
+
super(attributes), (null == options ? void 0 : options.mode) && (this.mode = options.mode,
|
|
12
12
|
this.setMode(options.mode)), (null == options ? void 0 : options.skipDefault) && (this.skipDefault = !0),
|
|
13
13
|
this.setTheme({
|
|
14
14
|
common: {
|
|
@@ -21,13 +21,13 @@ class AbstractComponent extends vrender_core_1.Group {
|
|
|
21
21
|
setAttribute(key, value, forceUpdateTag) {
|
|
22
22
|
(0, vutils_1.isPlainObject)(this.attribute[key]) && (0, vutils_1.isPlainObject)(value) && !(0,
|
|
23
23
|
vutils_1.isFunction)(this.attribute[key]) && !(0, vutils_1.isFunction)(value) ? (0,
|
|
24
|
-
vutils_1.merge)(this.attribute[key], value) : this.attribute[key] = value,
|
|
24
|
+
vutils_1.merge)(this.attribute[key], value) : this.attribute[key] = value, GROUP_ATTRIBUTES.includes(key) || this.render(),
|
|
25
25
|
this.valid = this.isValid(), this.updateShapeAndBoundsTagSetted() || !forceUpdateTag && !this.needUpdateTag(key) ? this.addUpdateBoundTag() : this.addUpdateShapeAndBoundsTag(),
|
|
26
26
|
this.addUpdatePositionTag(), this.onAttributeUpdate();
|
|
27
27
|
}
|
|
28
28
|
setAttributes(params, forceUpdateTag) {
|
|
29
29
|
const keys = Object.keys(params);
|
|
30
|
-
this._mergeAttributes(params, keys), keys.every((key =>
|
|
30
|
+
this._mergeAttributes(params, keys), keys.every((key => GROUP_ATTRIBUTES.includes(key))) || this.render(),
|
|
31
31
|
this.valid = this.isValid(), this.updateShapeAndBoundsTagSetted() || !forceUpdateTag && !this.needUpdateTags(keys) ? this.addUpdateBoundTag() : this.addUpdateShapeAndBoundsTag(),
|
|
32
32
|
this.addUpdatePositionTag(), this.onAttributeUpdate();
|
|
33
33
|
}
|
package/cjs/core/base.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/core/base.ts"],"names":[],"mappings":";;;AAIA,yDAA4D;AAE5D,6CAA2E;AAG3E,MAAM,gBAAgB,GAAG;IACvB,GAAG;IACH,GAAG;IACH,IAAI;IACJ,IAAI;IACJ,QAAQ;IACR,QAAQ;IACR,OAAO;IACP,QAAQ;IACR,YAAY;IACZ,SAAS;IACT,MAAM;IACN,UAAU;IACV,kBAAkB;IAClB,QAAQ;IACR,QAAQ;CACT,CAAC;AAEF,MAAsB,iBAA6E,SAAQ,oBAAK;
|
|
1
|
+
{"version":3,"sources":["../src/core/base.ts"],"names":[],"mappings":"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","file":"base.js","sourcesContent":["/**\n * @description 组件基类\n */\nimport type { IGroupGraphicAttribute } from '@visactor/vrender-core';\nimport { Group, CustomEvent } from '@visactor/vrender-core';\nimport type { Dict } from '@visactor/vutils';\nimport { merge, isFunction, isPlainObject, isNil } from '@visactor/vutils';\nimport type { ComponentOptions } from '../interface';\n\nconst GROUP_ATTRIBUTES = [\n 'x',\n 'y',\n 'dx',\n 'dy',\n 'scaleX',\n 'scaleY',\n 'angle',\n 'anchor',\n 'postMatrix',\n 'visible',\n 'clip',\n 'pickable',\n 'childrenPickable',\n 'zIndex',\n 'cursor'\n];\n\nexport abstract class AbstractComponent<T extends IGroupGraphicAttribute = IGroupGraphicAttribute> extends Group {\n declare attribute: Partial<T>;\n\n protected mode?: '2d' | '3d';\n\n protected skipDefault?: boolean;\n\n constructor(attributes: T, options?: ComponentOptions) {\n super(attributes);\n\n if (options?.mode) {\n this.mode = options.mode;\n\n this.setMode(options.mode);\n }\n\n if (options?.skipDefault) {\n this.skipDefault = true;\n }\n // 组件需要精准 bounds,所以将这个 strokeBoundsBuffer 设置为 0,否则会影响包围盒的获取\n this.setTheme({\n common: {\n strokeBoundsBuffer: 0\n }\n });\n this.attribute = attributes;\n // 这里调用渲染和事件绑定逻辑\n this.onSetStage(() => {\n this.render();\n this.bindEvents();\n });\n }\n\n /**\n * @override\n * 更新单个属性值\n * @param key\n * @param value\n * @param forceUpdateTag\n */\n setAttribute(key: string, value: any, forceUpdateTag?: boolean | undefined): void {\n // overwrite when previous or next attribute is function\n if (\n isPlainObject(this.attribute[key]) &&\n isPlainObject(value) &&\n !isFunction(this.attribute[key]) &&\n !isFunction(value)\n ) {\n merge(this.attribute[key], value);\n } else {\n this.attribute[key] = value;\n }\n\n // HACK: 待优化\n if (!GROUP_ATTRIBUTES.includes(key as string)) {\n this.render();\n }\n\n this.valid = this.isValid();\n if (!this.updateShapeAndBoundsTagSetted() && (forceUpdateTag || this.needUpdateTag(key as string))) {\n this.addUpdateShapeAndBoundsTag();\n } else {\n this.addUpdateBoundTag();\n }\n this.addUpdatePositionTag();\n this.onAttributeUpdate();\n }\n\n // @ts-ignore\n setAttributes(params: Partial<T>, forceUpdateTag?: boolean | undefined): void {\n const keys = Object.keys(params) as (keyof T)[];\n this._mergeAttributes(params, keys);\n\n // HACK: 待优化\n if (!keys.every(key => GROUP_ATTRIBUTES.includes(key as string))) {\n this.render();\n }\n\n this.valid = this.isValid();\n // 没有设置shape&bounds的tag\n if (!this.updateShapeAndBoundsTagSetted() && (forceUpdateTag || this.needUpdateTags(keys as string[]))) {\n this.addUpdateShapeAndBoundsTag();\n } else {\n this.addUpdateBoundTag();\n }\n this.addUpdatePositionTag();\n this.onAttributeUpdate();\n }\n\n protected _mergeAttributes(params: Partial<T>, keys?: (keyof T)[]) {\n if (isNil(keys)) {\n keys = Object.keys(params) as (keyof T)[];\n }\n for (let i = 0; i < keys.length; i++) {\n const key = keys[i] as keyof Partial<T>;\n // overwrite when previous or next attribute is function\n if (isPlainObject(this.attribute[key]) && !isFunction(this.attribute[key]) && !isFunction(params[key])) {\n merge(this.attribute[key], params[key]);\n } else {\n this.attribute[key] = params[key];\n }\n }\n }\n\n protected bindEvents() {\n // please override\n }\n\n protected abstract render(): void;\n\n // 图形元素 id\n protected _getNodeId(id: string) {\n return `${this.id ?? this._uid}-${this.name}-${id}`;\n }\n\n // 用于 emit 组件自己的事件\n protected _dispatchEvent(eventName: string, details?: Dict<any>) {\n // 封装事件\n const changeEvent = new CustomEvent(eventName, details);\n // FIXME: 需要在 vrender 的事件系统支持\n // @ts-ignore\n changeEvent.manager = this.stage?.eventSystem.manager;\n\n this.dispatchEvent(changeEvent);\n }\n}\n"]}
|
package/cjs/index.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export declare const version = "0.21.
|
|
1
|
+
export declare const version = "0.21.3-alpha.0";
|
|
2
2
|
export * from './core/base';
|
|
3
3
|
export * from './core/type';
|
|
4
4
|
export * from './scrollbar';
|
|
@@ -26,6 +26,4 @@ export * from './jsx';
|
|
|
26
26
|
export * from './checkbox';
|
|
27
27
|
export * from './radio';
|
|
28
28
|
export * from './empty-tip';
|
|
29
|
-
export * from './weather';
|
|
30
29
|
export * from './util';
|
|
31
|
-
export * from './label-item';
|
package/cjs/index.js
CHANGED
|
@@ -17,7 +17,7 @@ var __createBinding = this && this.__createBinding || (Object.create ? function(
|
|
|
17
17
|
|
|
18
18
|
Object.defineProperty(exports, "__esModule", {
|
|
19
19
|
value: !0
|
|
20
|
-
}), exports.version = void 0, exports.version = "0.21.
|
|
20
|
+
}), exports.version = void 0, exports.version = "0.21.3-alpha.0", __exportStar(require("./core/base"), exports),
|
|
21
21
|
__exportStar(require("./core/type"), exports), __exportStar(require("./scrollbar"), exports),
|
|
22
22
|
__exportStar(require("./tag"), exports), __exportStar(require("./poptip"), exports),
|
|
23
23
|
__exportStar(require("./crosshair"), exports), __exportStar(require("./label"), exports),
|
|
@@ -31,6 +31,5 @@ __exportStar(require("./brush"), exports), __exportStar(require("./tooltip"), ex
|
|
|
31
31
|
__exportStar(require("./timeline"), exports), __exportStar(require("./interface"), exports),
|
|
32
32
|
__exportStar(require("./jsx"), exports), __exportStar(require("./checkbox"), exports),
|
|
33
33
|
__exportStar(require("./radio"), exports), __exportStar(require("./empty-tip"), exports),
|
|
34
|
-
__exportStar(require("./
|
|
35
|
-
__exportStar(require("./label-item"), exports);
|
|
34
|
+
__exportStar(require("./util"), exports);
|
|
36
35
|
//# sourceMappingURL=index.js.map
|
package/cjs/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;AACa,QAAA,OAAO,GAAG,
|
|
1
|
+
{"version":3,"sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;AACa,QAAA,OAAO,GAAG,gBAAgB,CAAC;AAExC,8CAA4B;AAC5B,8CAA4B;AAC5B,8CAA4B;AAC5B,wCAAsB;AACtB,2CAAyB;AACzB,8CAA4B;AAC5B,0CAAwB;AACxB,yCAAuB;AACvB,8CAA4B;AAC5B,4CAA0B;AAC1B,8CAA4B;AAC5B,2CAAyB;AACzB,0CAAwB;AACxB,2CAAyB;AACzB,0CAAwB;AACxB,8CAA4B;AAC5B,2CAAyB;AACzB,8CAA4B;AAC5B,2CAAyB;AACzB,0CAAwB;AACxB,4CAA0B;AAC1B,6CAA2B;AAC3B,8CAA4B;AAC5B,wCAAsB;AACtB,6CAA2B;AAC3B,0CAAwB;AACxB,8CAA4B;AAC5B,yCAAuB","file":"index.js","sourcesContent":["// 导出版本号\nexport const version = \"0.21.3-alpha.0\";\n\nexport * from './core/base';\nexport * from './core/type';\nexport * from './scrollbar';\nexport * from './tag';\nexport * from './poptip';\nexport * from './crosshair';\nexport * from './label';\nexport * from './axis';\nexport * from './axis/grid';\nexport * from './segment';\nexport * from './data-zoom';\nexport * from './marker';\nexport * from './pager';\nexport * from './legend';\nexport * from './title';\nexport * from './indicator';\nexport * from './slider';\nexport * from './link-path';\nexport * from './player';\nexport * from './brush';\nexport * from './tooltip';\nexport * from './timeline';\nexport * from './interface';\nexport * from './jsx';\nexport * from './checkbox';\nexport * from './radio';\nexport * from './empty-tip';\nexport * from './util';\n"]}
|
package/cjs/interface.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { ICustomPath2D, IGraphicAttribute, IGroup, IRectGraphicAttribute
|
|
1
|
+
import type { ICustomPath2D, IGraphicAttribute, IGroup, IRectGraphicAttribute } from '@visactor/vrender-core';
|
|
2
2
|
export type Direction = 'horizontal' | 'vertical';
|
|
3
3
|
export type OrientType = 'top' | 'right' | 'bottom' | 'left';
|
|
4
4
|
export type BackgroundAttributes = {
|
|
@@ -9,5 +9,4 @@ export type IDelayType = 'debounce' | 'throttle';
|
|
|
9
9
|
export interface ComponentOptions {
|
|
10
10
|
skipDefault?: boolean;
|
|
11
11
|
mode?: '2d' | '3d';
|
|
12
|
-
timeline?: ITimeline;
|
|
13
12
|
}
|
package/cjs/interface.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/interface.ts"],"names":[],"mappings":"","file":"interface.js","sourcesContent":["import type {
|
|
1
|
+
{"version":3,"sources":["../src/interface.ts"],"names":[],"mappings":"","file":"interface.js","sourcesContent":["import type { ICustomPath2D, IGraphicAttribute, IGroup, IRectGraphicAttribute } from '@visactor/vrender-core';\n\nexport type Direction = 'horizontal' | 'vertical';\n\nexport type OrientType = 'top' | 'right' | 'bottom' | 'left';\n\nexport type BackgroundAttributes = {\n /**\n * 是否绘制背景层\n */\n visible: boolean;\n /**\n * 自定义路径\n * @since 0.19.19\n */\n customShape?: (container: IGroup, attrs: Partial<IGraphicAttribute>, path: ICustomPath2D) => ICustomPath2D;\n} & Partial<IRectGraphicAttribute>;\n\nexport type IDelayType = 'debounce' | 'throttle';\n\nexport interface ComponentOptions {\n /** skip default attributes of component */\n skipDefault?: boolean;\n /** the mode of component, only axis support 3d mode now */\n mode?: '2d' | '3d';\n}\n"]}
|
|
@@ -91,7 +91,8 @@ class DiscreteLegend extends base_1.LegendBase {
|
|
|
91
91
|
}
|
|
92
92
|
_renderItems() {
|
|
93
93
|
const {item: itemAttrs = {}, maxCol: maxCol = 1, maxRow: maxRow = 2, maxWidth: maxWidth, defaultSelected: defaultSelected, lazyload: lazyload, autoPage: autoPage} = this.attribute, {spaceCol: spaceCol = constant_1.DEFAULT_ITEM_SPACE_COL, spaceRow: spaceRow = constant_1.DEFAULT_ITEM_SPACE_ROW} = itemAttrs, itemsContainer = this._itemsContainer, {items: legendItems, isHorizontal: isHorizontal, startIndex: startIndex, isScrollbar: isScrollbar} = this._itemContext, maxPages = isScrollbar ? 1 : isHorizontal ? maxRow : maxCol, maxHeight = this._contentMaxHeight;
|
|
94
|
-
let item, {doWrap: doWrap, maxWidthInCol: maxWidthInCol, startX: startX, startY: startY, pages: pages} = this._itemContext, lastItemWidth = 0;
|
|
94
|
+
let item, {doWrap: doWrap, maxWidthInCol: maxWidthInCol, startX: startX, startY: startY, pages: pages} = this._itemContext, lastItemWidth = 0, lastLineHeight = 0;
|
|
95
|
+
const lastLineItemGroup = [];
|
|
95
96
|
for (let index = startIndex, len = legendItems.length; index < len && !(lazyload && pages > this._itemContext.currentPage * maxPages); index++) {
|
|
96
97
|
lazyload && (this._itemContext.startIndex = index + 1), item = legendItems[index],
|
|
97
98
|
item.id || (item.id = item.label), item.index = index;
|
|
@@ -101,11 +102,16 @@ class DiscreteLegend extends base_1.LegendBase {
|
|
|
101
102
|
this._itemHeight = Math.max(this._itemHeight, itemHeight), maxWidthInCol = Math.max(itemWidth, maxWidthInCol),
|
|
102
103
|
this._itemMaxWidth = Math.max(itemWidth, this._itemMaxWidth), isHorizontal ? ((0,
|
|
103
104
|
vutils_1.isValid)(maxWidth) && (isScrollbar && autoPage ? (pages = Math.ceil((startX + itemWidth) / maxWidth),
|
|
104
|
-
doWrap = pages > 1) : startX + itemWidth > maxWidth && (doWrap = !0, startX > 0 && (
|
|
105
|
-
|
|
105
|
+
doWrap = pages > 1) : startX + itemWidth > maxWidth && (doWrap = !0, startX > 0 && (lastLineItemGroup.forEach((i => {
|
|
106
|
+
i.setAttributes({
|
|
107
|
+
y: i.attribute.y + (lastLineHeight - i.attribute.height) / 2
|
|
108
|
+
});
|
|
109
|
+
})), pages += 1, startX = 0, startY += lastLineHeight + spaceRow, lastLineHeight = 0,
|
|
110
|
+
lastLineItemGroup.length = 0))), 0 === startX && 0 === startY || itemGroup.setAttributes({
|
|
106
111
|
x: startX,
|
|
107
112
|
y: startY
|
|
108
|
-
}), startX += spaceCol + itemWidth
|
|
113
|
+
}), startX += spaceCol + itemWidth, lastLineHeight = Math.max(lastLineHeight, itemHeight),
|
|
114
|
+
lastLineItemGroup.push(itemGroup)) : ((0, vutils_1.isValid)(maxHeight) && (isScrollbar && autoPage ? (pages = Math.ceil((startY + itemHeight) / maxHeight),
|
|
109
115
|
doWrap = pages > 1) : maxHeight <= itemHeight ? (pages += 1, doWrap = !0, startY = 0,
|
|
110
116
|
index > 0 && (startX += lastItemWidth + spaceCol)) : maxHeight < startY + itemHeight && (pages += 1,
|
|
111
117
|
doWrap = !0, startY = 0, startX += maxWidthInCol + spaceCol, maxWidthInCol = 0)),
|
|
@@ -114,7 +120,11 @@ class DiscreteLegend extends base_1.LegendBase {
|
|
|
114
120
|
y: startY
|
|
115
121
|
}), startY += spaceRow + itemHeight), itemsContainer.add(itemGroup), lastItemWidth = itemWidth;
|
|
116
122
|
}
|
|
117
|
-
return
|
|
123
|
+
return isHorizontal && lastLineItemGroup.forEach((i => {
|
|
124
|
+
i.setAttributes({
|
|
125
|
+
y: i.attribute.y + (lastLineHeight - i.attribute.height) / 2
|
|
126
|
+
});
|
|
127
|
+
})), this._itemContext.doWrap = doWrap, this._itemContext.startX = startX, this._itemContext.startY = startY,
|
|
118
128
|
this._itemContext.maxWidthInCol = maxWidthInCol, this._itemContext.pages = pages,
|
|
119
129
|
this._itemContext.maxPages = maxPages, isScrollbar && (this._itemContext.totalPage = pages),
|
|
120
130
|
lazyload || (this._itemContext.startIndex = legendItems.length), this._itemContext;
|