plotboilerplate 1.23.3 → 1.25.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/README.md +19 -1
- package/dist/index.esm.js +1684 -394
- package/dist/index.esm.js.map +1 -1
- package/dist/index.esm.min.js +1 -1
- package/dist/index.esm.min.js.map +1 -1
- package/dist/plotboilerplate.browser.min.js +1 -1
- package/dist/plotboilerplate.browser.min.js.map +1 -1
- package/dist/plotboilerplate.js +12450 -11120
- package/dist/plotboilerplate.min.js +1 -1
- package/package.json +9 -5
- package/src/cjs/BezierPath.d.ts +41 -5
- package/src/cjs/BezierPath.js +52 -2
- package/src/cjs/BezierPath.js.map +1 -1
- package/src/cjs/Bounds.d.ts +67 -3
- package/src/cjs/Bounds.js +101 -3
- package/src/cjs/Bounds.js.map +1 -1
- package/src/cjs/Circle.d.ts +46 -4
- package/src/cjs/Circle.js +82 -3
- package/src/cjs/Circle.js.map +1 -1
- package/src/cjs/CircleSector.d.ts +51 -2
- package/src/cjs/CircleSector.js +112 -3
- package/src/cjs/CircleSector.js.map +1 -1
- package/src/cjs/CubicBezierCurve.d.ts +113 -7
- package/src/cjs/CubicBezierCurve.js +281 -33
- package/src/cjs/CubicBezierCurve.js.map +1 -1
- package/src/cjs/Line.d.ts +38 -3
- package/src/cjs/Line.js +64 -1
- package/src/cjs/Line.js.map +1 -1
- package/src/cjs/PlotBoilerplate.d.ts +37 -6
- package/src/cjs/PlotBoilerplate.js +224 -125
- package/src/cjs/PlotBoilerplate.js.map +1 -1
- package/src/cjs/Polygon.d.ts +68 -5
- package/src/cjs/Polygon.js +143 -22
- package/src/cjs/Polygon.js.map +1 -1
- package/src/cjs/Triangle.d.ts +52 -3
- package/src/cjs/Triangle.js +80 -1
- package/src/cjs/Triangle.js.map +1 -1
- package/src/cjs/VEllipse.d.ts +62 -3
- package/src/cjs/VEllipse.js +181 -17
- package/src/cjs/VEllipse.js.map +1 -1
- package/src/cjs/VEllipseSector.d.ts +86 -2
- package/src/cjs/VEllipseSector.js +148 -4
- package/src/cjs/VEllipseSector.js.map +1 -1
- package/src/cjs/Vector.d.ts +12 -2
- package/src/cjs/Vector.js +15 -2
- package/src/cjs/Vector.js.map +1 -1
- package/src/cjs/VertTuple.d.ts +28 -4
- package/src/cjs/VertTuple.js +36 -3
- package/src/cjs/VertTuple.js.map +1 -1
- package/src/cjs/Vertex.d.ts +31 -4
- package/src/cjs/Vertex.js +35 -1
- package/src/cjs/Vertex.js.map +1 -1
- package/src/cjs/interfaces/core.d.ts +67 -0
- package/src/cjs/interfaces/core.js +4 -0
- package/src/cjs/interfaces/core.js.map +1 -1
- package/src/cjs/utils/algorithms/convexPolygonIncircle.d.ts +2 -1
- package/src/cjs/utils/algorithms/convexPolygonIncircle.js +14 -6
- package/src/cjs/utils/algorithms/convexPolygonIncircle.js.map +1 -1
- package/src/cjs/utils/createRandomizedPolygon.d.ts +14 -0
- package/src/cjs/utils/createRandomizedPolygon.js +32 -0
- package/src/cjs/utils/createRandomizedPolygon.js.map +1 -0
- package/src/cjs/utils/datastructures/Color.d.ts +147 -1
- package/src/cjs/utils/datastructures/Color.js +385 -41
- package/src/cjs/utils/datastructures/Color.js.map +1 -1
- package/src/cjs/utils/datastructures/ColorGradient.d.ts +79 -0
- package/src/cjs/utils/datastructures/ColorGradient.js +171 -0
- package/src/cjs/utils/datastructures/ColorGradient.js.map +1 -0
- package/src/cjs/utils/dom/components/ColorGradientPicker.d.ts +245 -0
- package/src/cjs/utils/dom/components/ColorGradientPicker.js +667 -0
- package/src/cjs/utils/dom/components/ColorGradientPicker.js.map +1 -0
- package/src/cjs/utils/dom/components/ColorGradientPickerJSX.d.ts +129 -0
- package/src/cjs/utils/dom/components/ColorGradientPickerJSX.js +520 -0
- package/src/cjs/utils/dom/components/ColorGradientPickerJSX.js.map +1 -0
- package/src/cjs/utils/dom/components/ColorGradientSelector.d.ts +117 -0
- package/src/cjs/utils/dom/components/ColorGradientSelector.js +325 -0
- package/src/cjs/utils/dom/components/ColorGradientSelector.js.map +1 -0
- package/src/cjs/utils/dom/components/Test.d.ts +7 -0
- package/src/cjs/utils/dom/components/Test.js +30 -0
- package/src/cjs/utils/dom/components/Test.js.map +1 -0
- package/src/cjs/utils/dom/guiSizeToggler.js +1 -1
- package/src/cjs/utils/dom/guiSizeToggler.js.map +1 -1
- package/src/cjs/utils/helpers/BezierPathInteractionHelper.d.ts +16 -8
- package/src/cjs/utils/helpers/BezierPathInteractionHelper.js +49 -28
- package/src/cjs/utils/helpers/BezierPathInteractionHelper.js.map +1 -1
- package/src/cjs/utils/helpers/CircleHelper.d.ts +10 -1
- package/src/cjs/utils/helpers/CircleHelper.js +13 -2
- package/src/cjs/utils/helpers/CircleHelper.js.map +1 -1
- package/src/cjs/utils/helpers/CircleSectorHelper.d.ts +11 -2
- package/src/cjs/utils/helpers/CircleSectorHelper.js +20 -20
- package/src/cjs/utils/helpers/CircleSectorHelper.js.map +1 -1
- package/src/cjs/utils/helpers/TriangleHelper.d.ts +57 -0
- package/src/cjs/utils/helpers/TriangleHelper.js +83 -0
- package/src/cjs/utils/helpers/TriangleHelper.js.map +1 -0
- package/src/cjs/utils/helpers/VEllipseHelper.d.ts +32 -0
- package/src/cjs/utils/helpers/VEllipseHelper.js +88 -0
- package/src/cjs/utils/helpers/VEllipseHelper.js.map +1 -0
- package/src/cjs/utils/helpers/VEllipseSectorHelper.d.ts +44 -4
- package/src/cjs/utils/helpers/VEllipseSectorHelper.js +108 -25
- package/src/cjs/utils/helpers/VEllipseSectorHelper.js.map +1 -1
- package/src/cjs/utils/parsers/LinearColorGradientParser.d.ts +78 -0
- package/src/cjs/utils/parsers/LinearColorGradientParser.js +224 -0
- package/src/cjs/utils/parsers/LinearColorGradientParser.js.map +1 -0
- package/src/createDemoDrawables.js +4 -1
- package/src/esm/BezierPath.d.ts +41 -5
- package/src/esm/BezierPath.js +50 -2
- package/src/esm/BezierPath.js.map +1 -1
- package/src/esm/Bounds.d.ts +67 -3
- package/src/esm/Bounds.js +101 -3
- package/src/esm/Bounds.js.map +1 -1
- package/src/esm/Circle.d.ts +46 -4
- package/src/esm/Circle.js +79 -3
- package/src/esm/Circle.js.map +1 -1
- package/src/esm/CircleSector.d.ts +51 -2
- package/src/esm/CircleSector.js +108 -3
- package/src/esm/CircleSector.js.map +1 -1
- package/src/esm/CubicBezierCurve.d.ts +113 -7
- package/src/esm/CubicBezierCurve.js +277 -33
- package/src/esm/CubicBezierCurve.js.map +1 -1
- package/src/esm/Line.d.ts +38 -3
- package/src/esm/Line.js +62 -1
- package/src/esm/Line.js.map +1 -1
- package/src/esm/PlotBoilerplate.d.ts +37 -6
- package/src/esm/PlotBoilerplate.js +224 -125
- package/src/esm/PlotBoilerplate.js.map +1 -1
- package/src/esm/Polygon.d.ts +68 -5
- package/src/esm/Polygon.js +138 -22
- package/src/esm/Polygon.js.map +1 -1
- package/src/esm/Triangle.d.ts +52 -3
- package/src/esm/Triangle.js +77 -1
- package/src/esm/Triangle.js.map +1 -1
- package/src/esm/VEllipse.d.ts +62 -3
- package/src/esm/VEllipse.js +178 -17
- package/src/esm/VEllipse.js.map +1 -1
- package/src/esm/VEllipseSector.d.ts +86 -2
- package/src/esm/VEllipseSector.js +146 -7
- package/src/esm/VEllipseSector.js.map +1 -1
- package/src/esm/Vector.d.ts +12 -2
- package/src/esm/Vector.js +15 -2
- package/src/esm/Vector.js.map +1 -1
- package/src/esm/VertTuple.d.ts +28 -4
- package/src/esm/VertTuple.js +36 -3
- package/src/esm/VertTuple.js.map +1 -1
- package/src/esm/Vertex.d.ts +31 -4
- package/src/esm/Vertex.js +35 -1
- package/src/esm/Vertex.js.map +1 -1
- package/src/esm/interfaces/core.d.ts +67 -0
- package/src/esm/interfaces/core.js +4 -0
- package/src/esm/interfaces/core.js.map +1 -1
- package/src/esm/utils/algorithms/convexPolygonIncircle.d.ts +2 -1
- package/src/esm/utils/algorithms/convexPolygonIncircle.js +15 -7
- package/src/esm/utils/algorithms/convexPolygonIncircle.js.map +1 -1
- package/src/esm/utils/algorithms/createRandomizedPolygon.d.ts +14 -0
- package/src/esm/utils/algorithms/createRandomizedPolygon.js +28 -0
- package/src/esm/utils/algorithms/createRandomizedPolygon.js.map +1 -0
- package/src/esm/utils/createRandomizedPolygon.d.ts +14 -0
- package/src/esm/utils/createRandomizedPolygon.js +28 -0
- package/src/esm/utils/createRandomizedPolygon.js.map +1 -0
- package/src/esm/utils/datastructures/Color.d.ts +147 -1
- package/src/esm/utils/datastructures/Color.js +386 -42
- package/src/esm/utils/datastructures/Color.js.map +1 -1
- package/src/esm/utils/datastructures/ColorGradient.d.ts +79 -0
- package/src/esm/utils/datastructures/ColorGradient.js +166 -0
- package/src/esm/utils/datastructures/ColorGradient.js.map +1 -0
- package/src/esm/utils/dom/components/ColorGradientPicker.d.ts +245 -0
- package/src/esm/utils/dom/components/ColorGradientPicker.js +732 -0
- package/src/esm/utils/dom/components/ColorGradientPicker.js.map +1 -0
- package/src/esm/utils/dom/components/ColorGradientPickerJSX.d.ts +129 -0
- package/src/esm/utils/dom/components/ColorGradientPickerJSX.js +582 -0
- package/src/esm/utils/dom/components/ColorGradientPickerJSX.js.map +1 -0
- package/src/esm/utils/dom/components/ColorGradientSelector.d.ts +117 -0
- package/src/esm/utils/dom/components/ColorGradientSelector.js +332 -0
- package/src/esm/utils/dom/components/ColorGradientSelector.js.map +1 -0
- package/src/esm/utils/dom/components/Test.d.ts +7 -0
- package/src/esm/utils/dom/components/Test.js +26 -0
- package/src/esm/utils/dom/components/Test.js.map +1 -0
- package/src/esm/utils/dom/guiSizeToggler.js +1 -1
- package/src/esm/utils/dom/guiSizeToggler.js.map +1 -1
- package/src/esm/utils/helpers/BezierPathInteractionHelper.d.ts +16 -8
- package/src/esm/utils/helpers/BezierPathInteractionHelper.js +47 -27
- package/src/esm/utils/helpers/BezierPathInteractionHelper.js.map +1 -1
- package/src/esm/utils/helpers/CircleHelper.d.ts +10 -1
- package/src/esm/utils/helpers/CircleHelper.js +13 -2
- package/src/esm/utils/helpers/CircleHelper.js.map +1 -1
- package/src/esm/utils/helpers/CircleSectorHelper.d.ts +11 -2
- package/src/esm/utils/helpers/CircleSectorHelper.js +20 -20
- package/src/esm/utils/helpers/CircleSectorHelper.js.map +1 -1
- package/src/esm/utils/helpers/TriangleHelper.d.ts +57 -0
- package/src/esm/utils/helpers/TriangleHelper.js +78 -0
- package/src/esm/utils/helpers/TriangleHelper.js.map +1 -0
- package/src/esm/utils/helpers/VEllipseHelper.d.ts +32 -0
- package/src/esm/utils/helpers/VEllipseHelper.js +83 -0
- package/src/esm/utils/helpers/VEllipseHelper.js.map +1 -0
- package/src/esm/utils/helpers/VEllipseSectorHelper.d.ts +44 -4
- package/src/esm/utils/helpers/VEllipseSectorHelper.js +107 -24
- package/src/esm/utils/helpers/VEllipseSectorHelper.js.map +1 -1
- package/src/esm/utils/parsers/LinearColorGradientParser.d.ts +78 -0
- package/src/esm/utils/parsers/LinearColorGradientParser.js +217 -0
- package/src/esm/utils/parsers/LinearColorGradientParser.js.map +1 -0
- package/src/external.d.ts +9 -0
- package/src/ts/BezierPath.ts +58 -5
- package/src/ts/Bounds.ts +110 -6
- package/src/ts/Circle.ts +87 -5
- package/src/ts/CircleSector.ts +115 -5
- package/src/ts/CubicBezierCurve.ts +332 -42
- package/src/ts/Line.ts +66 -3
- package/src/ts/PlotBoilerplate.ts +236 -114
- package/src/ts/Polygon.ts +164 -29
- package/src/ts/Triangle.ts +85 -3
- package/src/ts/VEllipse.ts +214 -19
- package/src/ts/VEllipseSector.ts +154 -8
- package/src/ts/Vector.ts +16 -2
- package/src/ts/VertTuple.ts +39 -4
- package/src/ts/Vertex.ts +40 -4
- package/src/ts/interfaces/core.ts +73 -0
- package/src/ts/utils/algorithms/convexPolygonIncircle.ts +82 -78
- package/src/ts/utils/createRandomizedPolygon.ts +31 -0
- package/src/ts/utils/datastructures/Color.ts +423 -44
- package/src/ts/utils/datastructures/ColorGradient.ts +196 -0
- package/src/ts/utils/dom/components/ColorGradientPicker.tsx +877 -0
- package/src/ts/utils/dom/components/ColorGradientSelector.tsx +445 -0
- package/src/ts/utils/dom/components/Test.tsx +44 -0
- package/src/ts/utils/dom/components/_ColorGradientPicker_raw.ts_ +392 -0
- package/src/ts/utils/dom/guiSizeToggler.ts +1 -1
- package/src/ts/utils/helpers/BezierPathInteractionHelper.ts +61 -35
- package/src/ts/utils/helpers/CircleHelper.ts +17 -3
- package/src/ts/utils/helpers/CircleSectorHelper.ts +118 -126
- package/src/ts/utils/helpers/TriangleHelper.ts +102 -0
- package/src/ts/utils/helpers/VEllipseHelper.ts +115 -0
- package/src/ts/utils/helpers/VEllipseSectorHelper.ts +144 -26
- package/src/ts/utils/parsers/LinearColorGradientParser.ts +297 -0
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* A helper for VEllipses.
|
|
4
|
+
*
|
|
5
|
+
* @author Ikaros Kappler
|
|
6
|
+
* @date 2025-03-31
|
|
7
|
+
* @modified 2025-04-02 Adding `VEllipseHelper.drawHandleLines()`.
|
|
8
|
+
* @modified 2025-04-09 Adding `VEllipseHelper.destroy()`.
|
|
9
|
+
* @modified 2025-05-05 Fixed a typo in the `VEllipseHelper.destroy` method (was named `detroy`).
|
|
10
|
+
* @modified 2025-05-05 `VEllipseHelper` is now implementing `IShapeInteractionHelper`.
|
|
11
|
+
* @version 1.0.1
|
|
12
|
+
*/
|
|
13
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
14
|
+
exports.VEllipseHelper = void 0;
|
|
15
|
+
var Line_1 = require("../../Line");
|
|
16
|
+
var VEllipseHelper = /** @class */ (function () {
|
|
17
|
+
function VEllipseHelper(ellipse, rotationControlPoint) {
|
|
18
|
+
this.ellipse = ellipse;
|
|
19
|
+
this.rotationControlPoint = rotationControlPoint;
|
|
20
|
+
// const rotationControlLine: Line = new Line(ellipse.center, rotationControlPoint);
|
|
21
|
+
this._rotationControlLine = new Line_1.Line(ellipse.center, rotationControlPoint);
|
|
22
|
+
// +---------------------------------------------------------------------
|
|
23
|
+
// | Listen for the center to be moved.
|
|
24
|
+
// +-------------------------------------------
|
|
25
|
+
// ellipse.center.listeners.addDragListener((event: VertEvent) => {
|
|
26
|
+
// rotationControlPoint.add(event.params.dragAmount);
|
|
27
|
+
// });
|
|
28
|
+
ellipse.center.listeners.addDragListener((this._centerPointHandler = this._handleDragCenterPoint()));
|
|
29
|
+
// +---------------------------------------------------------------------
|
|
30
|
+
// | Listen for rotation changes.
|
|
31
|
+
// +-------------------------------------------
|
|
32
|
+
// rotationControlPoint.listeners.addDragListener((_event: VertEvent) => {
|
|
33
|
+
// var newRotation = rotationControlLine.angle();
|
|
34
|
+
// var rDiff = newRotation - ellipse.rotation;
|
|
35
|
+
// ellipse.rotation = newRotation;
|
|
36
|
+
// ellipse.axis.rotate(rDiff, ellipse.center);
|
|
37
|
+
// });
|
|
38
|
+
rotationControlPoint.listeners.addDragListener((this._rotationPointHandler = this._handleRotationCenterPoint()));
|
|
39
|
+
}
|
|
40
|
+
VEllipseHelper.prototype._handleDragCenterPoint = function () {
|
|
41
|
+
var _self = this;
|
|
42
|
+
return function (event) {
|
|
43
|
+
_self.rotationControlPoint.add(event.params.dragAmount);
|
|
44
|
+
};
|
|
45
|
+
};
|
|
46
|
+
VEllipseHelper.prototype._handleRotationCenterPoint = function () {
|
|
47
|
+
var _self = this;
|
|
48
|
+
return function (_event) {
|
|
49
|
+
var newRotation = _self._rotationControlLine.angle();
|
|
50
|
+
var rDiff = newRotation - _self.ellipse.rotation;
|
|
51
|
+
_self.ellipse.rotation = newRotation;
|
|
52
|
+
_self.ellipse.axis.rotate(rDiff, _self.ellipse.center);
|
|
53
|
+
};
|
|
54
|
+
};
|
|
55
|
+
/**
|
|
56
|
+
* Draw grey handle lines.
|
|
57
|
+
*
|
|
58
|
+
* @param {DrawLib<any>} draw - The draw library instance to use.
|
|
59
|
+
* @param {DrawLib<any>} fill - The fill library instance to use.
|
|
60
|
+
*/
|
|
61
|
+
VEllipseHelper.prototype.drawHandleLines = function (draw, fill) {
|
|
62
|
+
// Draw rotation handle line
|
|
63
|
+
draw.line(this.ellipse.center, this.rotationControlPoint, "rgba(192,64,128,0.333)", 1.0, {
|
|
64
|
+
dashOffset: 0.0,
|
|
65
|
+
dashArray: [4, 2]
|
|
66
|
+
});
|
|
67
|
+
// Draw helper box
|
|
68
|
+
draw.setCurrentId("".concat(this.ellipse.uid, "_e0"));
|
|
69
|
+
draw.setCurrentClassName("".concat(this.ellipse.className, "-v-line"));
|
|
70
|
+
draw.line(this.ellipse.center.clone().add(0, this.ellipse.signedRadiusV()).rotate(this.ellipse.rotation, this.ellipse.center), this.ellipse.axis, "rgba(64,128,192,0.333)", 1.0, {
|
|
71
|
+
dashOffset: 0.0,
|
|
72
|
+
dashArray: [4, 2]
|
|
73
|
+
});
|
|
74
|
+
draw.setCurrentId("".concat(this.ellipse.uid, "_e1"));
|
|
75
|
+
draw.setCurrentClassName("".concat(this.ellipse.className, "-h-line"));
|
|
76
|
+
draw.line(this.ellipse.center.clone().add(this.ellipse.signedRadiusH(), 0).rotate(this.ellipse.rotation, this.ellipse.center), this.ellipse.axis, "rgba(64,128,192,0.333)", 1.0, {
|
|
77
|
+
dashOffset: 0.0,
|
|
78
|
+
dashArray: [4, 2]
|
|
79
|
+
});
|
|
80
|
+
};
|
|
81
|
+
VEllipseHelper.prototype.destroy = function () {
|
|
82
|
+
this.ellipse.center.listeners.removeDragListener(this._centerPointHandler);
|
|
83
|
+
this.rotationControlPoint.listeners.removeDragListener(this._rotationPointHandler);
|
|
84
|
+
};
|
|
85
|
+
return VEllipseHelper;
|
|
86
|
+
}());
|
|
87
|
+
exports.VEllipseHelper = VEllipseHelper;
|
|
88
|
+
//# sourceMappingURL=VEllipseHelper.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"VEllipseHelper.js","sourceRoot":"","sources":["../../../ts/utils/helpers/VEllipseHelper.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,12 +1,52 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* A helper for VEllipseSectors.
|
|
3
3
|
*
|
|
4
|
-
* @author
|
|
5
|
-
* @date
|
|
6
|
-
* @
|
|
4
|
+
* @author Ikaros Kappler
|
|
5
|
+
* @date 2021-03-24
|
|
6
|
+
* @modified 2025-04-02 Adding `VEllipseSectorHelper.drawHandleLines`.
|
|
7
|
+
* @modified 2025-04-07 Modifying the calculation of `startAngle` and `endAngle` from the rotation control point: wrapping result into [0,TWO_PI).
|
|
8
|
+
* @modified 2025-04-09 Adding the `VEllipseSectorHelper.destroy` method.
|
|
9
|
+
* @modified 2025-05-05 `VEllipseSectorHelper` is now implementing `IShapeInteractionHelper`.
|
|
10
|
+
* @version 1.1.0
|
|
7
11
|
*/
|
|
8
12
|
import { VEllipseSector } from "../../VEllipseSector";
|
|
9
13
|
import { Vertex } from "../../Vertex";
|
|
10
|
-
|
|
14
|
+
import { DrawLib, IShapeInteractionHelper } from "../../interfaces";
|
|
15
|
+
export declare class VEllipseSectorHelper implements IShapeInteractionHelper {
|
|
16
|
+
private sector;
|
|
17
|
+
private startAngleControlPoint;
|
|
18
|
+
private endAngleControlPoint;
|
|
19
|
+
private rotationControlPoint;
|
|
20
|
+
private _rotationControlLine;
|
|
21
|
+
private _startAngleControlLine;
|
|
22
|
+
private _endAngleControlLine;
|
|
23
|
+
private _centerHandler;
|
|
24
|
+
private _rotationHandler;
|
|
25
|
+
private _startAngleHandler;
|
|
26
|
+
private _endAngleHandler;
|
|
11
27
|
constructor(sector: VEllipseSector, startAngleControlPoint: Vertex, endAngleControlPoint: Vertex, rotationControlPoint: Vertex);
|
|
28
|
+
/**
|
|
29
|
+
* Creates a new drag handler for the circle sector's start control point.
|
|
30
|
+
*
|
|
31
|
+
* @private
|
|
32
|
+
* @method _handleDragStartControlPoint
|
|
33
|
+
* @instance
|
|
34
|
+
* @memberof CircleSectorHelper
|
|
35
|
+
* @returns A new event handler.
|
|
36
|
+
*/
|
|
37
|
+
private _handleDragCenterPoint;
|
|
38
|
+
private _handleDragRotationControlPoint;
|
|
39
|
+
private _handleDragStartAngleControlPoint;
|
|
40
|
+
private _handleDragEndAngleControlPoint;
|
|
41
|
+
/**
|
|
42
|
+
* Draw grey handle lines.
|
|
43
|
+
*
|
|
44
|
+
* @param {DrawLib<any>} draw - The draw library instance to use.
|
|
45
|
+
* @param {DrawLib<any>} fill - The fill library instance to use.
|
|
46
|
+
*/
|
|
47
|
+
drawHandleLines(draw: DrawLib<any>, fill: DrawLib<any>): void;
|
|
48
|
+
/**
|
|
49
|
+
* Destroy this VEllipseHandler which means: all listeners are being removed.
|
|
50
|
+
*/
|
|
51
|
+
destroy(): void;
|
|
12
52
|
}
|
|
@@ -2,50 +2,133 @@
|
|
|
2
2
|
/**
|
|
3
3
|
* A helper for VEllipseSectors.
|
|
4
4
|
*
|
|
5
|
-
* @author
|
|
6
|
-
* @date
|
|
7
|
-
* @
|
|
5
|
+
* @author Ikaros Kappler
|
|
6
|
+
* @date 2021-03-24
|
|
7
|
+
* @modified 2025-04-02 Adding `VEllipseSectorHelper.drawHandleLines`.
|
|
8
|
+
* @modified 2025-04-07 Modifying the calculation of `startAngle` and `endAngle` from the rotation control point: wrapping result into [0,TWO_PI).
|
|
9
|
+
* @modified 2025-04-09 Adding the `VEllipseSectorHelper.destroy` method.
|
|
10
|
+
* @modified 2025-05-05 `VEllipseSectorHelper` is now implementing `IShapeInteractionHelper`.
|
|
11
|
+
* @version 1.1.0
|
|
8
12
|
*/
|
|
9
13
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
10
14
|
exports.VEllipseSectorHelper = void 0;
|
|
11
15
|
var Line_1 = require("../../Line");
|
|
16
|
+
var geomutils_1 = require("../../geomutils");
|
|
12
17
|
var VEllipseSectorHelper = /** @class */ (function () {
|
|
13
18
|
function VEllipseSectorHelper(sector, startAngleControlPoint, endAngleControlPoint, rotationControlPoint) {
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
19
|
+
this.sector = sector;
|
|
20
|
+
this.startAngleControlPoint = startAngleControlPoint;
|
|
21
|
+
this.endAngleControlPoint = endAngleControlPoint;
|
|
22
|
+
this.rotationControlPoint = rotationControlPoint;
|
|
23
|
+
// const rotationControlLine: Line = new Line(sector.ellipse.center, rotationControlPoint);
|
|
24
|
+
this._rotationControlLine = new Line_1.Line(sector.ellipse.center, rotationControlPoint);
|
|
25
|
+
// const startAngleControlLine: Line = new Line(sector.ellipse.center, startAngleControlPoint);
|
|
26
|
+
this._startAngleControlLine = new Line_1.Line(sector.ellipse.center, startAngleControlPoint);
|
|
27
|
+
// const endAngleControlLine: Line = new Line(sector.ellipse.center, endAngleControlPoint);
|
|
28
|
+
this._endAngleControlLine = new Line_1.Line(sector.ellipse.center, endAngleControlPoint);
|
|
17
29
|
// +---------------------------------------------------------------------
|
|
18
30
|
// | Listen for the center to be moved.
|
|
19
31
|
// +-------------------------------------------
|
|
20
|
-
sector.ellipse.center.listeners.addDragListener(
|
|
21
|
-
startAngleControlPoint.add(event.params.dragAmount);
|
|
22
|
-
endAngleControlPoint.add(event.params.dragAmount);
|
|
23
|
-
rotationControlPoint.add(event.params.dragAmount);
|
|
24
|
-
});
|
|
32
|
+
sector.ellipse.center.listeners.addDragListener((this._centerHandler = this._handleDragCenterPoint()));
|
|
25
33
|
// +---------------------------------------------------------------------
|
|
26
34
|
// | Listen for rotation changes.
|
|
27
35
|
// +-------------------------------------------
|
|
28
|
-
rotationControlPoint.listeners.addDragListener(
|
|
29
|
-
var newRotation = rotationControlLine.angle();
|
|
30
|
-
var rDiff = newRotation - sector.ellipse.rotation;
|
|
31
|
-
sector.ellipse.rotation = newRotation;
|
|
32
|
-
sector.ellipse.axis.rotate(rDiff, sector.ellipse.center);
|
|
33
|
-
startAngleControlPoint.rotate(rDiff, sector.ellipse.center);
|
|
34
|
-
endAngleControlPoint.rotate(rDiff, sector.ellipse.center);
|
|
35
|
-
});
|
|
36
|
+
rotationControlPoint.listeners.addDragListener((this._rotationHandler = this._handleDragRotationControlPoint()));
|
|
36
37
|
// +---------------------------------------------------------------------
|
|
37
38
|
// | Listen for start angle changes.
|
|
38
39
|
// +-------------------------------------------
|
|
39
|
-
startAngleControlPoint.listeners.addDragListener(
|
|
40
|
-
sector.startAngle = startAngleControlLine.angle() - sector.ellipse.rotation;
|
|
41
|
-
});
|
|
40
|
+
startAngleControlPoint.listeners.addDragListener((this._startAngleHandler = this._handleDragStartAngleControlPoint()));
|
|
42
41
|
// +---------------------------------------------------------------------
|
|
43
42
|
// | Listen for end angle changes.
|
|
44
43
|
// +-------------------------------------------
|
|
45
|
-
endAngleControlPoint.listeners.addDragListener(
|
|
46
|
-
sector.endAngle = endAngleControlLine.angle() - sector.ellipse.rotation;
|
|
47
|
-
});
|
|
44
|
+
endAngleControlPoint.listeners.addDragListener((this._endAngleHandler = this._handleDragEndAngleControlPoint()));
|
|
48
45
|
}
|
|
46
|
+
/**
|
|
47
|
+
* Creates a new drag handler for the circle sector's start control point.
|
|
48
|
+
*
|
|
49
|
+
* @private
|
|
50
|
+
* @method _handleDragStartControlPoint
|
|
51
|
+
* @instance
|
|
52
|
+
* @memberof CircleSectorHelper
|
|
53
|
+
* @returns A new event handler.
|
|
54
|
+
*/
|
|
55
|
+
VEllipseSectorHelper.prototype._handleDragCenterPoint = function () {
|
|
56
|
+
var _self = this;
|
|
57
|
+
return function (event) {
|
|
58
|
+
_self.startAngleControlPoint.add(event.params.dragAmount);
|
|
59
|
+
_self.endAngleControlPoint.add(event.params.dragAmount);
|
|
60
|
+
_self.rotationControlPoint.add(event.params.dragAmount);
|
|
61
|
+
};
|
|
62
|
+
};
|
|
63
|
+
VEllipseSectorHelper.prototype._handleDragRotationControlPoint = function () {
|
|
64
|
+
var _self = this;
|
|
65
|
+
return function (event) {
|
|
66
|
+
var newRotation = _self._rotationControlLine.angle();
|
|
67
|
+
var rDiff = newRotation - _self.sector.ellipse.rotation;
|
|
68
|
+
_self.sector.ellipse.rotation = newRotation;
|
|
69
|
+
_self.sector.ellipse.axis.rotate(rDiff, _self.sector.ellipse.center);
|
|
70
|
+
_self.startAngleControlPoint.rotate(rDiff, _self.sector.ellipse.center);
|
|
71
|
+
_self.endAngleControlPoint.rotate(rDiff, _self.sector.ellipse.center);
|
|
72
|
+
};
|
|
73
|
+
};
|
|
74
|
+
VEllipseSectorHelper.prototype._handleDragStartAngleControlPoint = function () {
|
|
75
|
+
var _self = this;
|
|
76
|
+
return function (_event) {
|
|
77
|
+
// sector.startAngle = startAngleControlLine.angle() - sector.ellipse.rotation;
|
|
78
|
+
_self.sector.startAngle = geomutils_1.geomutils.mapAngleTo2PI(_self._startAngleControlLine.angle() - _self.sector.ellipse.rotation);
|
|
79
|
+
};
|
|
80
|
+
};
|
|
81
|
+
VEllipseSectorHelper.prototype._handleDragEndAngleControlPoint = function () {
|
|
82
|
+
var _self = this;
|
|
83
|
+
return function (event) {
|
|
84
|
+
_self.sector.endAngle = geomutils_1.geomutils.mapAngleTo2PI(_self._endAngleControlLine.angle() - _self.sector.ellipse.rotation);
|
|
85
|
+
};
|
|
86
|
+
};
|
|
87
|
+
/**
|
|
88
|
+
* Draw grey handle lines.
|
|
89
|
+
*
|
|
90
|
+
* @param {DrawLib<any>} draw - The draw library instance to use.
|
|
91
|
+
* @param {DrawLib<any>} fill - The fill library instance to use.
|
|
92
|
+
*/
|
|
93
|
+
VEllipseSectorHelper.prototype.drawHandleLines = function (draw, fill) {
|
|
94
|
+
draw.line(this.sector.ellipse.center, this.startAngleControlPoint, "rgba(64,192,128,0.333)", 1.0, {
|
|
95
|
+
dashOffset: 0.0,
|
|
96
|
+
dashArray: [4, 2]
|
|
97
|
+
});
|
|
98
|
+
draw.line(this.sector.ellipse.center, this.endAngleControlPoint, "rgba(64,192,128,0.333)", 1.0, {
|
|
99
|
+
dashOffset: 0.0,
|
|
100
|
+
dashArray: [4, 2]
|
|
101
|
+
});
|
|
102
|
+
// Draw rotation handle line
|
|
103
|
+
draw.line(this.sector.ellipse.center, this.rotationControlPoint, "rgba(192,64,128,0.333)", 1.0, {
|
|
104
|
+
dashOffset: 0.0,
|
|
105
|
+
dashArray: [4, 2]
|
|
106
|
+
});
|
|
107
|
+
// Draw helper box
|
|
108
|
+
draw.line(this.sector.ellipse.center
|
|
109
|
+
.clone()
|
|
110
|
+
.add(0, this.sector.ellipse.signedRadiusV())
|
|
111
|
+
.rotate(this.sector.ellipse.rotation, this.sector.ellipse.center), this.sector.ellipse.axis, "rgba(64,128,192,0.333)", 1.0, {
|
|
112
|
+
dashOffset: 0.0,
|
|
113
|
+
dashArray: [4, 2]
|
|
114
|
+
});
|
|
115
|
+
draw.line(this.sector.ellipse.center
|
|
116
|
+
.clone()
|
|
117
|
+
.add(this.sector.ellipse.signedRadiusH(), 0)
|
|
118
|
+
.rotate(this.sector.ellipse.rotation, this.sector.ellipse.center), this.sector.ellipse.axis, "rgba(64,128,192,0.333)", 1.0, {
|
|
119
|
+
dashOffset: 0.0,
|
|
120
|
+
dashArray: [4, 2]
|
|
121
|
+
});
|
|
122
|
+
}; // END drawHandleLines
|
|
123
|
+
/**
|
|
124
|
+
* Destroy this VEllipseHandler which means: all listeners are being removed.
|
|
125
|
+
*/
|
|
126
|
+
VEllipseSectorHelper.prototype.destroy = function () {
|
|
127
|
+
this.sector.ellipse.center.listeners.removeDragListener(this._centerHandler);
|
|
128
|
+
this.rotationControlPoint.listeners.removeDragListener(this._rotationHandler);
|
|
129
|
+
this.startAngleControlPoint.listeners.removeDragListener(this._startAngleHandler);
|
|
130
|
+
this.endAngleControlPoint.listeners.removeDragListener(this._endAngleHandler);
|
|
131
|
+
};
|
|
49
132
|
return VEllipseSectorHelper;
|
|
50
133
|
}());
|
|
51
134
|
exports.VEllipseSectorHelper = VEllipseSectorHelper;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"VEllipseSectorHelper.js","sourceRoot":"","sources":["../../../ts/utils/helpers/VEllipseSectorHelper.ts"],"names":[],"mappings":";AAAA
|
|
1
|
+
{"version":3,"file":"VEllipseSectorHelper.js","sourceRoot":"","sources":["../../../ts/utils/helpers/VEllipseSectorHelper.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* A CSS gradient string parser.
|
|
3
|
+
*
|
|
4
|
+
* Source:
|
|
5
|
+
* https://stackoverflow.com/questions/20215440/parse-css-gradient-rule-with-javascript-regex
|
|
6
|
+
* Thanks to Dean Taylor
|
|
7
|
+
*
|
|
8
|
+
* @date 2025-09-04
|
|
9
|
+
* @OriginalAuthor Dean Taylor
|
|
10
|
+
* @RefactoredBy Ikaros Kappler, ported to Typescript.
|
|
11
|
+
* @version 1.0.0
|
|
12
|
+
*/
|
|
13
|
+
import { ColorGradient } from "../datastructures/ColorGradient";
|
|
14
|
+
/**
|
|
15
|
+
* A wrapper type for the regular expressions used to parsed gradient strings.
|
|
16
|
+
*/
|
|
17
|
+
export type ColorGradientParserRegExpLib = {
|
|
18
|
+
gradientSearch: RegExp;
|
|
19
|
+
colorStopSearch: RegExp;
|
|
20
|
+
};
|
|
21
|
+
/**
|
|
22
|
+
* The raw parse result.
|
|
23
|
+
*/
|
|
24
|
+
export type ColorGradientParseResult = {
|
|
25
|
+
original: string;
|
|
26
|
+
line: string;
|
|
27
|
+
angle: string;
|
|
28
|
+
colorStopList: ColorGradientStopResult[];
|
|
29
|
+
sideCorner: string;
|
|
30
|
+
gradientType?: string;
|
|
31
|
+
parseWarning?: boolean;
|
|
32
|
+
};
|
|
33
|
+
/**
|
|
34
|
+
* The position string can have two formats: as percent or as pixels.
|
|
35
|
+
* For conversion to LinearColorGradient only relative (percent) is supported.
|
|
36
|
+
*/
|
|
37
|
+
type PositionString = `${number}px` | `${number}%`;
|
|
38
|
+
/**
|
|
39
|
+
* A sub type of the result representing pairs of (color,position) elements.
|
|
40
|
+
*/
|
|
41
|
+
type ColorGradientStopResult = {
|
|
42
|
+
color: string;
|
|
43
|
+
position: PositionString;
|
|
44
|
+
};
|
|
45
|
+
/**
|
|
46
|
+
* This must convert positioning strings to ratio numbers (in [0..1]).
|
|
47
|
+
* Must throw error if not parsable.
|
|
48
|
+
*/
|
|
49
|
+
export type PositionToRatioConverter = (positionString: PositionString) => number;
|
|
50
|
+
/**
|
|
51
|
+
* The default implementation of `PositionToRatioConverter`.
|
|
52
|
+
* @param positionString
|
|
53
|
+
* @returns
|
|
54
|
+
*/
|
|
55
|
+
export declare const DefaultPositionConverter: PositionToRatioConverter;
|
|
56
|
+
/**
|
|
57
|
+
* Actually parse the input gradient parameters string into an object for reusability.
|
|
58
|
+
*
|
|
59
|
+
*
|
|
60
|
+
* @note Really this only supports the standard syntax not historical versions, see MDN for details
|
|
61
|
+
* https://developer.mozilla.org/en-US/docs/Web/CSS/linear-gradient
|
|
62
|
+
*
|
|
63
|
+
* @param {ColorGradientParserRegExpLib} regExpLib
|
|
64
|
+
* @param {string} input Input string in the form "to right bottom, #FF0 0%, red 20px, rgb(0, 0, 255) 100%"
|
|
65
|
+
* @returns {object|undefined} Object containing break down of input string including array of stop points.
|
|
66
|
+
*/
|
|
67
|
+
export declare var __parseGradient: (regExpLib: ColorGradientParserRegExpLib, input: string) => ColorGradientParseResult;
|
|
68
|
+
/**
|
|
69
|
+
* The actual parser class.
|
|
70
|
+
*/
|
|
71
|
+
export declare class LinearColorGradientParser {
|
|
72
|
+
private readonly regExpLib;
|
|
73
|
+
constructor(regExpLib?: ColorGradientParserRegExpLib);
|
|
74
|
+
parse(input: string, positionConverter?: PositionToRatioConverter): ColorGradient;
|
|
75
|
+
parseRaw(input: string): ColorGradientParseResult;
|
|
76
|
+
static parseResultToColorGradient(result: ColorGradientParseResult, positionConverter?: PositionToRatioConverter): ColorGradient;
|
|
77
|
+
}
|
|
78
|
+
export {};
|
|
@@ -0,0 +1,224 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* A CSS gradient string parser.
|
|
4
|
+
*
|
|
5
|
+
* Source:
|
|
6
|
+
* https://stackoverflow.com/questions/20215440/parse-css-gradient-rule-with-javascript-regex
|
|
7
|
+
* Thanks to Dean Taylor
|
|
8
|
+
*
|
|
9
|
+
* @date 2025-09-04
|
|
10
|
+
* @OriginalAuthor Dean Taylor
|
|
11
|
+
* @RefactoredBy Ikaros Kappler, ported to Typescript.
|
|
12
|
+
* @version 1.0.0
|
|
13
|
+
*/
|
|
14
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
15
|
+
exports.LinearColorGradientParser = exports.__parseGradient = exports.DefaultPositionConverter = void 0;
|
|
16
|
+
var Color_1 = require("../datastructures/Color");
|
|
17
|
+
var ColorGradient_1 = require("../datastructures/ColorGradient");
|
|
18
|
+
/**
|
|
19
|
+
* The default implementation of `PositionToRatioConverter`.
|
|
20
|
+
* @param positionString
|
|
21
|
+
* @returns
|
|
22
|
+
*/
|
|
23
|
+
var DefaultPositionConverter = function (positionString) {
|
|
24
|
+
if (typeof positionString === "undefined") {
|
|
25
|
+
throw new Error("Cannot parse positioning string `null`.");
|
|
26
|
+
}
|
|
27
|
+
var tmp = positionString.trim();
|
|
28
|
+
if (tmp.length === 0) {
|
|
29
|
+
throw new Error('Cannot parse empty positioning string "".');
|
|
30
|
+
}
|
|
31
|
+
if (!tmp.endsWith("%")) {
|
|
32
|
+
throw new Error("Cannot parse positioning string, must end with '%': '".concat(tmp, "'"));
|
|
33
|
+
}
|
|
34
|
+
return Number.parseFloat(tmp) / 100.0;
|
|
35
|
+
};
|
|
36
|
+
exports.DefaultPositionConverter = DefaultPositionConverter;
|
|
37
|
+
/**
|
|
38
|
+
* Utility combine multiple regular expressions.
|
|
39
|
+
*
|
|
40
|
+
* Source:
|
|
41
|
+
* https://stackoverflow.com/questions/20215440/parse-css-gradient-rule-with-javascript-regex
|
|
42
|
+
* Thanks to Dean Taylor
|
|
43
|
+
*
|
|
44
|
+
* @param {Array<RegExp | string>} regexpList List of regular expressions or strings.
|
|
45
|
+
* @param {string} flags Normal RegExp flags.
|
|
46
|
+
*/
|
|
47
|
+
var __combineRegExp = function (regexpList, flags) {
|
|
48
|
+
var source = "";
|
|
49
|
+
for (var i = 0; i < regexpList.length; i++) {
|
|
50
|
+
var regex = regexpList[i];
|
|
51
|
+
if (typeof regex === "string") {
|
|
52
|
+
source += regex;
|
|
53
|
+
}
|
|
54
|
+
else {
|
|
55
|
+
source += regex.source;
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
return new RegExp(source, flags);
|
|
59
|
+
};
|
|
60
|
+
/**
|
|
61
|
+
* Generate the required regular expressions once.
|
|
62
|
+
*
|
|
63
|
+
* Regular Expressions are easier to manage this way and can be well described.
|
|
64
|
+
*
|
|
65
|
+
* @result {object} Object containing regular expressions.
|
|
66
|
+
*/
|
|
67
|
+
var __generateDefaultRegExpLib = function () {
|
|
68
|
+
// Note any variables with "Capture" in name include capturing bracket set(s).
|
|
69
|
+
var searchFlags = "gi", // ignore case for angles, "rgb" etc
|
|
70
|
+
rAngle = /(?:[+-]?\d*\.?\d+)(?:deg|grad|rad|turn)/, // Angle +ive, -ive and angle types
|
|
71
|
+
rSideCornerCapture = /to\s+((?:(?:left|right)(?:\s+(?:top|bottom))?))/, // optional 2nd part
|
|
72
|
+
rComma = /\s*,\s*/, // Allow space around comma.
|
|
73
|
+
rColorHex = /\#(?:[a-f0-9]{6}|[a-f0-9]{3})/, // 3 or 6 character form
|
|
74
|
+
rDigits3 = /\(\s*(?:\d{1,3}\s*,\s*){2}\d{1,3}\s*\)/, // "(1, 2, 3)"
|
|
75
|
+
rDigits4 = /\(\s*(?:\d{1,3}\s*,\s*){2}\d{1,3}\s*,\s*\d*\.?\d+\)/, // "(1, 2, 3, 4)"
|
|
76
|
+
rValue = /(?:[+-]?\d*\.?\d+)(?:%|[a-z]+)?/, // ".9", "-5px", "100%".
|
|
77
|
+
rKeyword = /[_a-z-][_a-z0-9-]*/, // "red", "transparent", "border-collapse".
|
|
78
|
+
rColor = __combineRegExp(["(?:", rColorHex, "|", "(?:rgb|hsl)", rDigits3, "|", "(?:rgba|hsla)", rDigits4, "|", rKeyword, ")"], ""), rColorStop = __combineRegExp([rColor, "(?:\\s+", rValue, "(?:\\s+", rValue, ")?)?"], ""), // Single Color Stop, optional %, optional length.
|
|
79
|
+
rColorStopList = __combineRegExp(["(?:", rColorStop, rComma, ")*", rColorStop], ""), // List of color stops min 1.
|
|
80
|
+
rLineCapture = __combineRegExp(["(?:(", rAngle, ")|", rSideCornerCapture, ")"], ""), // Angle or SideCorner
|
|
81
|
+
rGradientSearch = __combineRegExp(["(?:(", rLineCapture, ")", rComma, ")?(", rColorStopList, ")"], searchFlags), // Capture 1:"line", 2:"angle" (optional), 3:"side corner" (optional) and 4:"stop list".
|
|
82
|
+
rColorStopSearch = __combineRegExp(["\\s*(", rColor, ")", "(?:\\s+", "(", rValue, "))?", "(?:", rComma, "\\s*)?"], searchFlags); // Capture 1:"color" and 2:"position" (optional).
|
|
83
|
+
return {
|
|
84
|
+
gradientSearch: rGradientSearch,
|
|
85
|
+
colorStopSearch: rColorStopSearch
|
|
86
|
+
};
|
|
87
|
+
};
|
|
88
|
+
/**
|
|
89
|
+
* Actually parse the input gradient parameters string into an object for reusability.
|
|
90
|
+
*
|
|
91
|
+
*
|
|
92
|
+
* @note Really this only supports the standard syntax not historical versions, see MDN for details
|
|
93
|
+
* https://developer.mozilla.org/en-US/docs/Web/CSS/linear-gradient
|
|
94
|
+
*
|
|
95
|
+
* @param {ColorGradientParserRegExpLib} regExpLib
|
|
96
|
+
* @param {string} input Input string in the form "to right bottom, #FF0 0%, red 20px, rgb(0, 0, 255) 100%"
|
|
97
|
+
* @returns {object|undefined} Object containing break down of input string including array of stop points.
|
|
98
|
+
*/
|
|
99
|
+
var __parseGradient = function (regExpLib, input) {
|
|
100
|
+
var result;
|
|
101
|
+
var matchGradient, matchColorStop, stopResult;
|
|
102
|
+
// reset search position, because we reuse regex.
|
|
103
|
+
regExpLib.gradientSearch.lastIndex = 0;
|
|
104
|
+
matchGradient = regExpLib.gradientSearch.exec(input);
|
|
105
|
+
if (matchGradient !== null) {
|
|
106
|
+
result = {
|
|
107
|
+
original: matchGradient[0],
|
|
108
|
+
colorStopList: [],
|
|
109
|
+
line: null,
|
|
110
|
+
angle: null,
|
|
111
|
+
sideCorner: null
|
|
112
|
+
};
|
|
113
|
+
// Line (Angle or Side-Corner).
|
|
114
|
+
if (!!matchGradient[1]) {
|
|
115
|
+
result.line = matchGradient[1];
|
|
116
|
+
}
|
|
117
|
+
// Angle or undefined if side-corner.
|
|
118
|
+
if (!!matchGradient[2]) {
|
|
119
|
+
result.angle = matchGradient[2];
|
|
120
|
+
}
|
|
121
|
+
// Side-corner or undefined if angle.
|
|
122
|
+
if (!!matchGradient[3]) {
|
|
123
|
+
result.sideCorner = matchGradient[3];
|
|
124
|
+
}
|
|
125
|
+
// reset search position, because we reuse regex.
|
|
126
|
+
regExpLib.colorStopSearch.lastIndex = 0;
|
|
127
|
+
// Loop though all the color-stops.
|
|
128
|
+
matchColorStop = regExpLib.colorStopSearch.exec(matchGradient[4]);
|
|
129
|
+
while (matchColorStop !== null) {
|
|
130
|
+
stopResult = {
|
|
131
|
+
color: matchColorStop[1],
|
|
132
|
+
position: null
|
|
133
|
+
};
|
|
134
|
+
// Position (optional).
|
|
135
|
+
if (!!matchColorStop[2]) {
|
|
136
|
+
stopResult.position = matchColorStop[2];
|
|
137
|
+
}
|
|
138
|
+
result.colorStopList.push(stopResult);
|
|
139
|
+
// Continue searching from previous position.
|
|
140
|
+
matchColorStop = regExpLib.colorStopSearch.exec(matchGradient[4]);
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
// Can be undefined if match not found.
|
|
144
|
+
return result;
|
|
145
|
+
};
|
|
146
|
+
exports.__parseGradient = __parseGradient;
|
|
147
|
+
/**
|
|
148
|
+
* The actual parser class.
|
|
149
|
+
*/
|
|
150
|
+
var LinearColorGradientParser = /** @class */ (function () {
|
|
151
|
+
function LinearColorGradientParser(regExpLib) {
|
|
152
|
+
this.regExpLib = regExpLib || __generateDefaultRegExpLib();
|
|
153
|
+
}
|
|
154
|
+
LinearColorGradientParser.prototype.parse = function (input, positionConverter) {
|
|
155
|
+
var result = this.parseRaw(input);
|
|
156
|
+
return LinearColorGradientParser.parseResultToColorGradient(result, positionConverter);
|
|
157
|
+
};
|
|
158
|
+
LinearColorGradientParser.prototype.parseRaw = function (input) {
|
|
159
|
+
var result;
|
|
160
|
+
var rGradientEnclosedInBrackets = /.*gradient\s*\(((?:\([^\)]*\)|[^\)\(]*)*)\)/; // Captures inside brackets - max one additional inner set.
|
|
161
|
+
var match = rGradientEnclosedInBrackets.exec(input);
|
|
162
|
+
var bracketPos = input.indexOf("(");
|
|
163
|
+
var gradientType = bracketPos === -1 ? null : input.substring(0, bracketPos).toLowerCase();
|
|
164
|
+
if (match !== null) {
|
|
165
|
+
// Get the parameters for the gradient
|
|
166
|
+
result = (0, exports.__parseGradient)(this.regExpLib, match[1]);
|
|
167
|
+
result.gradientType = gradientType;
|
|
168
|
+
if (result.original.trim() !== match[1].trim()) {
|
|
169
|
+
// Did not match the input exactly - possible parsing error.
|
|
170
|
+
result.parseWarning = true;
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
else {
|
|
174
|
+
// result = new Error("Failed to find gradient");
|
|
175
|
+
throw new Error("Failed to find gradient");
|
|
176
|
+
}
|
|
177
|
+
return result;
|
|
178
|
+
};
|
|
179
|
+
LinearColorGradientParser.parseResultToColorGradient = function (result, positionConverter) {
|
|
180
|
+
if (!result.gradientType || result.gradientType.toLowerCase() != "linear-gradient") {
|
|
181
|
+
throw new Error("Cannot create linear gradient from type '".concat(result.gradientType, "'."));
|
|
182
|
+
}
|
|
183
|
+
if (!result.colorStopList || result.colorStopList.length <= 1) {
|
|
184
|
+
throw new Error("Cannot create linear gradient from color stop list of length '".concat(result.colorStopList.length, "'. Too few elements."));
|
|
185
|
+
}
|
|
186
|
+
var colorStops = [];
|
|
187
|
+
var converter = positionConverter !== null && positionConverter !== void 0 ? positionConverter : exports.DefaultPositionConverter;
|
|
188
|
+
for (var i = 0; i < result.colorStopList.length; i++) {
|
|
189
|
+
var stopListItem = result.colorStopList[i];
|
|
190
|
+
console.log(stopListItem);
|
|
191
|
+
var color = Color_1.Color.parse(stopListItem.color);
|
|
192
|
+
// var position: number = LinearColorGradientParser.parsePosition(stopListItem.position);
|
|
193
|
+
var ratio;
|
|
194
|
+
if (typeof stopListItem.position === "undefined") {
|
|
195
|
+
// Try to auto-fill undefined positions by their index in the list.
|
|
196
|
+
ratio = i / (result.colorStopList.length - 1);
|
|
197
|
+
}
|
|
198
|
+
else {
|
|
199
|
+
ratio = converter(stopListItem.position);
|
|
200
|
+
}
|
|
201
|
+
colorStops.push({ color: color, ratio: ratio });
|
|
202
|
+
}
|
|
203
|
+
return new ColorGradient_1.ColorGradient(colorStops, result.line);
|
|
204
|
+
};
|
|
205
|
+
return LinearColorGradientParser;
|
|
206
|
+
}()); // END class
|
|
207
|
+
exports.LinearColorGradientParser = LinearColorGradientParser;
|
|
208
|
+
// var test_this_one = function (regExpLib, input) {
|
|
209
|
+
// var result,
|
|
210
|
+
// rGradientEnclosedInBrackets = /.*gradient\s*\(((?:\([^\)]*\)|[^\)\(]*)*)\)/, // Captures inside brackets - max one additional inner set.
|
|
211
|
+
// match = rGradientEnclosedInBrackets.exec(input);
|
|
212
|
+
// if (match !== null) {
|
|
213
|
+
// // Get the parameters for the gradient
|
|
214
|
+
// result = parseGradient(regExpLib, match[1]);
|
|
215
|
+
// if (result.original.trim() !== match[1].trim()) {
|
|
216
|
+
// // Did not match the input exactly - possible parsing error.
|
|
217
|
+
// result.parseWarning = true;
|
|
218
|
+
// }
|
|
219
|
+
// } else {
|
|
220
|
+
// result = "Failed to find gradient";
|
|
221
|
+
// }
|
|
222
|
+
// return result;
|
|
223
|
+
// };
|
|
224
|
+
//# sourceMappingURL=LinearColorGradientParser.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"LinearColorGradientParser.js","sourceRoot":"","sources":["../../../ts/utils/parsers/LinearColorGradientParser.ts"],"names":[],"mappings":"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"}
|