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,196 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* A simple linear color gradient implementation.
|
|
3
|
+
*
|
|
4
|
+
* A color gradient is just an array of color objects paired with position values on the gradient.
|
|
5
|
+
*
|
|
6
|
+
* TODO: add `angle`
|
|
7
|
+
*
|
|
8
|
+
* @author Ikaros Kappler
|
|
9
|
+
* @version 1.0.0
|
|
10
|
+
* @date 2025-08-05
|
|
11
|
+
*/
|
|
12
|
+
|
|
13
|
+
import { Color } from "./Color";
|
|
14
|
+
|
|
15
|
+
const RAD_TO_DEG: number = 180.0 / Math.PI;
|
|
16
|
+
|
|
17
|
+
export type ColorGradientRotation = number | `${number}deg` | `${number}turn` | `to top` | "to bottom" | "to left" | "to right";
|
|
18
|
+
|
|
19
|
+
const DEFAULT_COLORSET: Array<ColorGradientItem> = [
|
|
20
|
+
{ color: Color.Red, ratio: 0.0 },
|
|
21
|
+
{ color: Color.Gold, ratio: 0.2 },
|
|
22
|
+
{ color: Color.Yellow, ratio: 0.4 },
|
|
23
|
+
{ color: Color.LimeGreen, ratio: 0.6 },
|
|
24
|
+
{ color: Color.MediumBlue, ratio: 0.8 },
|
|
25
|
+
{ color: Color.Purple, ratio: 1.0 }
|
|
26
|
+
];
|
|
27
|
+
|
|
28
|
+
export interface ColorGradientItem {
|
|
29
|
+
color: Color;
|
|
30
|
+
ratio: number; // Ideally a percentage value in [0.0 .. 1.0]
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
export class ColorGradient {
|
|
34
|
+
values: Array<ColorGradientItem>;
|
|
35
|
+
angle: ColorGradientRotation;
|
|
36
|
+
|
|
37
|
+
/**
|
|
38
|
+
* Creates a new ColorGradient with the given values. Please be sure that the values appear in the correct
|
|
39
|
+
* order regarding the `ratio` information. This will not be validated.
|
|
40
|
+
*
|
|
41
|
+
* @param {Array<ColorGradientItem>} values - The values to use.
|
|
42
|
+
* @param {number?} angle - (optional) An optional angle for the gradient; if no specified `PI/2.0` will be used (vertical from left to right).
|
|
43
|
+
*/
|
|
44
|
+
constructor(values: Array<ColorGradientItem>, angle?: ColorGradientRotation) {
|
|
45
|
+
this.values = values;
|
|
46
|
+
// Default: left to right
|
|
47
|
+
this.angle = typeof angle === "undefined" ? Math.PI / 2.0 : angle;
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
/**
|
|
51
|
+
* Get a color gradient CSS value string from these gradient settings.
|
|
52
|
+
*
|
|
53
|
+
* @instance
|
|
54
|
+
* @memberof ColorGradientPicker
|
|
55
|
+
* @returns {string}
|
|
56
|
+
*/
|
|
57
|
+
public toColorGradientString(): string {
|
|
58
|
+
// Example:
|
|
59
|
+
// linear-gradient(90deg,rgba(42, 123, 155, 1) 0%, rgba(87, 199, 133, 1) 38%, rgba(161, 210, 108, 1) 68%, rgba(237, 221, 83, 1) 100%)
|
|
60
|
+
|
|
61
|
+
// const buffer: Array<string | undefined> = [`linear-gradient( ${RAD_TO_DEG * this.angle}deg, `];
|
|
62
|
+
const buffer: Array<string | undefined> = [
|
|
63
|
+
`linear-gradient( ${typeof this.angle === "number" ? `${this.angle * RAD_TO_DEG}deg` : this.angle}, `
|
|
64
|
+
];
|
|
65
|
+
|
|
66
|
+
for (var i = 0; i < this.values.length; i++) {
|
|
67
|
+
if (i > 0) {
|
|
68
|
+
buffer.push(",");
|
|
69
|
+
}
|
|
70
|
+
const colorValue: string = this.values[i] ? this.values[i].color.cssRGBA() : null;
|
|
71
|
+
buffer.push(colorValue);
|
|
72
|
+
const percentage = this.values[i].ratio;
|
|
73
|
+
buffer.push(`${typeof percentage === "number" ? `${percentage * 100}%` : percentage}`);
|
|
74
|
+
}
|
|
75
|
+
buffer.push(")");
|
|
76
|
+
|
|
77
|
+
return buffer.join(" ");
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
/**
|
|
81
|
+
* Get the color at the specific relative position.
|
|
82
|
+
*
|
|
83
|
+
* @param {number} ratio - Any value between 0.0 and 1.0.
|
|
84
|
+
*/
|
|
85
|
+
getColorAt(ratio: number): Color {
|
|
86
|
+
// Locate interval first
|
|
87
|
+
const intervalLocation: [number, ColorGradientItem] = this.locateClosestRatio(ratio);
|
|
88
|
+
const leftItem: ColorGradientItem = this.values[intervalLocation[0]];
|
|
89
|
+
const rightItem: ColorGradientItem = this.values[intervalLocation[0] + 1];
|
|
90
|
+
const relativeInnerIntervalPosition: number = (ratio - leftItem.ratio) / (rightItem.ratio - leftItem.ratio);
|
|
91
|
+
return leftItem.color.clone().interpolate(rightItem.color, relativeInnerIntervalPosition);
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
/**
|
|
95
|
+
* Find that gradient record (index) that's value is closest to the given relative value. The function will return
|
|
96
|
+
* the closest value and the left index, indicating the containing interval index.
|
|
97
|
+
*
|
|
98
|
+
* @param {number} ratio - The value to look for.
|
|
99
|
+
* @returns {[number,number]} A pair of left interval boundary index and closest value.
|
|
100
|
+
*/
|
|
101
|
+
locateClosestRatio(ratio: number): [number, ColorGradientItem] {
|
|
102
|
+
if (this.values.length === 0) {
|
|
103
|
+
console.warn("[Warn] All slider values array is empty. This should not happen, cannot proceed.");
|
|
104
|
+
return [NaN, null]; // This should not happen: at least two values must be present in a gradient
|
|
105
|
+
}
|
|
106
|
+
// console.log("__locateClosestSliderValue", "allSliderValues", allSliderValues);
|
|
107
|
+
let leftSliderIndex: number = 0;
|
|
108
|
+
let closestSliderValue: ColorGradientItem = this.values[leftSliderIndex];
|
|
109
|
+
for (var i = 1; i < this.values.length; i++) {
|
|
110
|
+
const curVal: ColorGradientItem = this.values[i];
|
|
111
|
+
if (Math.abs(curVal.ratio - ratio) < Math.abs(closestSliderValue.ratio - ratio)) {
|
|
112
|
+
closestSliderValue = curVal;
|
|
113
|
+
if (curVal.ratio > ratio) {
|
|
114
|
+
leftSliderIndex = i - 1;
|
|
115
|
+
} else {
|
|
116
|
+
leftSliderIndex = i;
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
return [leftSliderIndex, closestSliderValue];
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
/**
|
|
124
|
+
* Try to convert the given anonymous item (usually and object) to a ColorGradient. This method should be used
|
|
125
|
+
* to restore items from JSON parse results to convert them into proper ColorGradient instances.
|
|
126
|
+
*
|
|
127
|
+
* @param {any} item
|
|
128
|
+
* @returns {ColorGradient}
|
|
129
|
+
*/
|
|
130
|
+
public static fromObject(item: any): ColorGradient {
|
|
131
|
+
if (typeof item !== "object") {
|
|
132
|
+
throw new Error(`Cannot instantiate ColorGradient from item: must be an object. (${typeof item})`);
|
|
133
|
+
}
|
|
134
|
+
if (!item.hasOwnProperty("values")) {
|
|
135
|
+
throw new Error("Cannot instantiate ColorGradient from object: missing property 'values'.");
|
|
136
|
+
}
|
|
137
|
+
const valuesObj: Array<object> = item.values;
|
|
138
|
+
if (!Array.isArray(valuesObj)) {
|
|
139
|
+
throw new Error("Cannot instantiate ColorGradient from object: property 'values' is not an array.");
|
|
140
|
+
}
|
|
141
|
+
const values: Array<ColorGradientItem> = valuesObj.map((element: object, index: number) => {
|
|
142
|
+
if (typeof element !== "object") {
|
|
143
|
+
throw new Error(`Cannot instantiate ColorGradient from object: item at index ${index} is not an object.`);
|
|
144
|
+
}
|
|
145
|
+
if (!element.hasOwnProperty("color") || !element.hasOwnProperty("ratio")) {
|
|
146
|
+
throw new Error(
|
|
147
|
+
`Cannot instantiate ColorGradient from object: item at index ${index} is missing 'color' or 'ratio' property.`
|
|
148
|
+
);
|
|
149
|
+
}
|
|
150
|
+
const tmpElement = element as ColorGradientItem;
|
|
151
|
+
return { color: Color.makeRGB(tmpElement.color.r, tmpElement.color.g, tmpElement.color.b), ratio: tmpElement.ratio };
|
|
152
|
+
});
|
|
153
|
+
// More checks possible here ...
|
|
154
|
+
return new ColorGradient(values, item.angle);
|
|
155
|
+
}
|
|
156
|
+
|
|
157
|
+
/**
|
|
158
|
+
* Clone this linear color gradient. Returns a deep clone.
|
|
159
|
+
*
|
|
160
|
+
* @returns {ColorGradient}
|
|
161
|
+
*/
|
|
162
|
+
public clone(): ColorGradient {
|
|
163
|
+
return new ColorGradient(
|
|
164
|
+
this.values.map((item: ColorGradientItem) => {
|
|
165
|
+
return { color: item.color, ratio: item.ratio };
|
|
166
|
+
}),
|
|
167
|
+
this.angle
|
|
168
|
+
);
|
|
169
|
+
}
|
|
170
|
+
|
|
171
|
+
/**
|
|
172
|
+
* Create a default color gradient with six color: red, orange, yellow, green, blue, purple.
|
|
173
|
+
* @returns
|
|
174
|
+
*/
|
|
175
|
+
public static createDefault(): ColorGradient {
|
|
176
|
+
return new ColorGradient(DEFAULT_COLORSET.map((item: ColorGradientItem) => ({ color: item.color, ratio: item.ratio })));
|
|
177
|
+
}
|
|
178
|
+
|
|
179
|
+
/**
|
|
180
|
+
* Create a basic color gradient from only two colors.
|
|
181
|
+
*
|
|
182
|
+
* @param {Color} startColor - The leftmost color.
|
|
183
|
+
* @param {Color} endColor - The rightmost color.
|
|
184
|
+
* @param {number?} angleInRadians - (optional) An optional angle for the gradient; if no specified `PI/2.0` will be used (vertical from left to right).
|
|
185
|
+
* @returns
|
|
186
|
+
*/
|
|
187
|
+
public static createFrom(startColor: Color, endColor: Color, angleInRadians?: number): ColorGradient {
|
|
188
|
+
return new ColorGradient(
|
|
189
|
+
[
|
|
190
|
+
{ ratio: 0.0, color: startColor },
|
|
191
|
+
{ ratio: 1.0, color: endColor }
|
|
192
|
+
],
|
|
193
|
+
angleInRadians
|
|
194
|
+
);
|
|
195
|
+
}
|
|
196
|
+
}
|