plotboilerplate 1.24.0 → 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 +13 -1
- package/dist/index.esm.js +294 -129
- 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 +12084 -11919
- package/dist/plotboilerplate.min.js +1 -1
- package/package.json +9 -5
- package/src/cjs/PlotBoilerplate.d.ts +37 -6
- package/src/cjs/PlotBoilerplate.js +222 -116
- package/src/cjs/PlotBoilerplate.js.map +1 -1
- package/src/cjs/Polygon.d.ts +26 -7
- package/src/cjs/Polygon.js +56 -10
- package/src/cjs/Polygon.js.map +1 -1
- package/src/cjs/Triangle.js +2 -2
- package/src/cjs/Triangle.js.map +1 -1
- package/src/cjs/Vertex.d.ts +15 -3
- package/src/cjs/Vertex.js +18 -1
- package/src/cjs/Vertex.js.map +1 -1
- package/src/cjs/interfaces/core.d.ts +28 -0
- package/src/cjs/interfaces/core.js +2 -0
- package/src/cjs/interfaces/core.js.map +1 -1
- 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 +9 -3
- package/src/cjs/utils/helpers/BezierPathInteractionHelper.js +20 -13
- 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 +2 -2
- package/src/cjs/utils/helpers/CircleSectorHelper.js +1 -0
- 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 +6 -4
- package/src/cjs/utils/helpers/VEllipseHelper.js +4 -2
- package/src/cjs/utils/helpers/VEllipseHelper.js.map +1 -1
- package/src/cjs/utils/helpers/VEllipseSectorHelper.d.ts +3 -2
- package/src/cjs/utils/helpers/VEllipseSectorHelper.js +1 -0
- 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 +1 -0
- package/src/esm/PlotBoilerplate.d.ts +37 -6
- package/src/esm/PlotBoilerplate.js +222 -116
- package/src/esm/PlotBoilerplate.js.map +1 -1
- package/src/esm/Polygon.d.ts +26 -7
- package/src/esm/Polygon.js +53 -10
- package/src/esm/Polygon.js.map +1 -1
- package/src/esm/Triangle.js +2 -2
- package/src/esm/Triangle.js.map +1 -1
- package/src/esm/Vertex.d.ts +15 -3
- package/src/esm/Vertex.js +18 -1
- package/src/esm/Vertex.js.map +1 -1
- package/src/esm/interfaces/core.d.ts +28 -0
- package/src/esm/interfaces/core.js +2 -0
- package/src/esm/interfaces/core.js.map +1 -1
- 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 +9 -3
- package/src/esm/utils/helpers/BezierPathInteractionHelper.js +20 -13
- 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 +2 -2
- package/src/esm/utils/helpers/CircleSectorHelper.js +1 -0
- 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 +6 -4
- package/src/esm/utils/helpers/VEllipseHelper.js +4 -2
- package/src/esm/utils/helpers/VEllipseHelper.js.map +1 -1
- package/src/esm/utils/helpers/VEllipseSectorHelper.d.ts +3 -2
- package/src/esm/utils/helpers/VEllipseSectorHelper.js +1 -0
- 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/PlotBoilerplate.ts +233 -105
- package/src/ts/Polygon.ts +68 -14
- package/src/ts/Triangle.ts +2 -2
- package/src/ts/Vertex.ts +21 -3
- package/src/ts/interfaces/core.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 +25 -15
- package/src/ts/utils/helpers/CircleHelper.ts +17 -3
- package/src/ts/utils/helpers/CircleSectorHelper.ts +4 -2
- package/src/ts/utils/helpers/TriangleHelper.ts +102 -0
- package/src/ts/utils/helpers/VEllipseHelper.ts +6 -4
- package/src/ts/utils/helpers/VEllipseSectorHelper.ts +3 -2
- package/src/ts/utils/parsers/LinearColorGradientParser.ts +297 -0
|
@@ -0,0 +1,582 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Approach for a 'simple' color gradient picker for my PlotBoilerplate library.
|
|
3
|
+
*
|
|
4
|
+
* @author Ikaros Kappler
|
|
5
|
+
* @date 2025-06-27
|
|
6
|
+
* @version 1.0.0
|
|
7
|
+
*/
|
|
8
|
+
import * as NoReact from "noreact";
|
|
9
|
+
import { Color } from "../../datastructures/Color";
|
|
10
|
+
export class ColorGradientPicker {
|
|
11
|
+
/**
|
|
12
|
+
* The constructor: creates a new color gradient picker in the given container.
|
|
13
|
+
* If no container or ID is given then a new unbound `container` will be created (DIV).
|
|
14
|
+
*
|
|
15
|
+
* Pass a container ID or nothing – in the latter case the constructor will create
|
|
16
|
+
* a new DIV element.
|
|
17
|
+
*
|
|
18
|
+
* @param {string?} containerID - (optional) If you want to use an existing container (should be a DIV).
|
|
19
|
+
*/
|
|
20
|
+
constructor(containerID) {
|
|
21
|
+
this._sliderElementRefs = [];
|
|
22
|
+
this.sliderMin = 0;
|
|
23
|
+
this.sliderMax = 100;
|
|
24
|
+
this.indicatorWidth_num = 1.0;
|
|
25
|
+
this.indicatorWidth = "1em";
|
|
26
|
+
this.indicatorWidth_half = "0.5em";
|
|
27
|
+
this.indicatorHeight = "1em";
|
|
28
|
+
this.COLORSET = ["#ff0000", "#ff8800", "#ffff00", "#00ff00", "#0000ff", "#8800ff"];
|
|
29
|
+
/**
|
|
30
|
+
* Creates a callback function for range slider.
|
|
31
|
+
*
|
|
32
|
+
* @returns
|
|
33
|
+
*/
|
|
34
|
+
this.__createSliderChangeHandler = () => {
|
|
35
|
+
const _self = this;
|
|
36
|
+
return (e) => {
|
|
37
|
+
const targetSlider = e.target;
|
|
38
|
+
console.log("Clicked", targetSlider ? targetSlider.getAttribute("id") : null);
|
|
39
|
+
if (!targetSlider) {
|
|
40
|
+
return false;
|
|
41
|
+
}
|
|
42
|
+
const currentSliderValue = Number.parseFloat(targetSlider.value);
|
|
43
|
+
const rangeSliderIndexRaw = targetSlider.dataset["rangeSliderIndex"];
|
|
44
|
+
console.log("rangeSliderIndexRaw", rangeSliderIndexRaw);
|
|
45
|
+
if (!rangeSliderIndexRaw) {
|
|
46
|
+
return false;
|
|
47
|
+
}
|
|
48
|
+
const rangeSliderIndex = Number.parseInt(rangeSliderIndexRaw);
|
|
49
|
+
var leftSliderValue = this.__getSliderValue(rangeSliderIndex - 1, _self.sliderMin);
|
|
50
|
+
var rightSliderValue = this.__getSliderValue(rangeSliderIndex + 1, _self.sliderMax);
|
|
51
|
+
if (leftSliderValue >= currentSliderValue) {
|
|
52
|
+
targetSlider.value = `${leftSliderValue}`;
|
|
53
|
+
_self.__updateBackgroundGradient();
|
|
54
|
+
_self.__updateColorIndicator(rangeSliderIndex);
|
|
55
|
+
return false;
|
|
56
|
+
}
|
|
57
|
+
else if (rightSliderValue <= currentSliderValue) {
|
|
58
|
+
targetSlider.value = `${rightSliderValue}`;
|
|
59
|
+
_self.__updateBackgroundGradient();
|
|
60
|
+
_self.__updateColorIndicator(rangeSliderIndex);
|
|
61
|
+
return false;
|
|
62
|
+
}
|
|
63
|
+
else {
|
|
64
|
+
_self.__updateBackgroundGradient();
|
|
65
|
+
_self.__updateColorIndicator(rangeSliderIndex);
|
|
66
|
+
return true;
|
|
67
|
+
}
|
|
68
|
+
};
|
|
69
|
+
};
|
|
70
|
+
if (containerID) {
|
|
71
|
+
const cont = document.getElementById(containerID);
|
|
72
|
+
if (!cont) {
|
|
73
|
+
throw "Cannot create ColorGradientPicker. Component ID does not exist.";
|
|
74
|
+
}
|
|
75
|
+
this.container = cont;
|
|
76
|
+
}
|
|
77
|
+
else {
|
|
78
|
+
this.container = document.createElement("div");
|
|
79
|
+
}
|
|
80
|
+
this.baseID = Math.floor(Math.random() * 65535);
|
|
81
|
+
this.container.append(this._render("test"));
|
|
82
|
+
this.__updateColorIndicator(0);
|
|
83
|
+
this.__updateBackgroundGradient();
|
|
84
|
+
} // END constructor
|
|
85
|
+
/**
|
|
86
|
+
* Creates a new color range input element.
|
|
87
|
+
*
|
|
88
|
+
* @private
|
|
89
|
+
* @param {number} baseID
|
|
90
|
+
* @param index
|
|
91
|
+
* @param sliderMin
|
|
92
|
+
* @param sliderMax
|
|
93
|
+
* @param initialValue
|
|
94
|
+
* @param initialColor
|
|
95
|
+
* @returns
|
|
96
|
+
*/
|
|
97
|
+
__createColorRangeInput(index, sliderMin, sliderMax, initialValue, initialColor) {
|
|
98
|
+
const sliderHandler = this.__createSliderChangeHandler();
|
|
99
|
+
const ref = NoReact.useRef();
|
|
100
|
+
// this._sliderElementRefs.push(ref);
|
|
101
|
+
this._sliderElementRefs.splice(index, 0, ref);
|
|
102
|
+
console.log("new _sliderElementRefs", this._sliderElementRefs);
|
|
103
|
+
// Update all elements to the right of the new elelemt
|
|
104
|
+
// for (var i = index + 1; i < this._sliderElementRefs.length; i++) {
|
|
105
|
+
// this._sliderElementRefs[i].current.setAttribute("data-range-slider-index", `${i}`);
|
|
106
|
+
// this._sliderElementRefs[i].current.setAttribute("id", `rage-slider-${this.baseID}-${i}`);
|
|
107
|
+
// }
|
|
108
|
+
this.__updateSliderDataSetIndices(index + 1);
|
|
109
|
+
return (NoReact.createElement("input", { id: `rage-slider-${this.baseID}-${index}`, type: "range", min: sliderMin, max: sliderMax, value: initialValue, style: { position: "absolute", left: "0px", top: "0px", width: "100%" }, "data-range-slider-index": index, "data-color-value": initialColor, onChange: sliderHandler, onClick: sliderHandler,
|
|
110
|
+
// onMouseDown={mouseDownHandler}
|
|
111
|
+
// onMouseUp={mouseUpHandler}
|
|
112
|
+
ref: ref }));
|
|
113
|
+
}
|
|
114
|
+
getRangeLength() {
|
|
115
|
+
return this.sliderMax - this.sliderMin;
|
|
116
|
+
}
|
|
117
|
+
__colorChangeHandler() {
|
|
118
|
+
const _self = this;
|
|
119
|
+
return (_evt) => {
|
|
120
|
+
// const colorInput : HTMLInputElement | null = evt.target;
|
|
121
|
+
console.log("__colorChangeHandler");
|
|
122
|
+
const activeSliderIndex_raw = this.colorInputRef.current.dataset["activeSliderIndex"];
|
|
123
|
+
if (!activeSliderIndex_raw) {
|
|
124
|
+
console.warn("Cannot update color indicator; no active range slider set.");
|
|
125
|
+
return false;
|
|
126
|
+
}
|
|
127
|
+
const activeSliderIndex = Number.parseInt(activeSliderIndex_raw);
|
|
128
|
+
if (Number.isNaN(activeSliderIndex) || activeSliderIndex < 0 || activeSliderIndex >= _self._sliderElementRefs.length) {
|
|
129
|
+
console.warn("Cannot update color indicator; active index invalid or out of bounds.", activeSliderIndex);
|
|
130
|
+
return false;
|
|
131
|
+
}
|
|
132
|
+
const newColor = _self.colorInputRef.current.value;
|
|
133
|
+
const rangeSlider = _self._sliderElementRefs[activeSliderIndex].current;
|
|
134
|
+
rangeSlider.dataset["colorValue"] = newColor;
|
|
135
|
+
// rangeSlider.dataset["colorValue"] = newColor;
|
|
136
|
+
this.colorIndicatorColorButtonRef.current.style["background-color"] = newColor;
|
|
137
|
+
_self.__updateBackgroundGradient();
|
|
138
|
+
return true;
|
|
139
|
+
};
|
|
140
|
+
}
|
|
141
|
+
/**
|
|
142
|
+
* Removed the current color slider from the DOM and highlights the left neighbour.
|
|
143
|
+
* @returns
|
|
144
|
+
*/
|
|
145
|
+
__handleRemoveColor() {
|
|
146
|
+
// const colorInput : HTMLInputElement | null = evt.target;
|
|
147
|
+
console.log("__colorChangeHandler");
|
|
148
|
+
const activeSliderIndex_raw = this.colorInputRef.current.dataset["activeSliderIndex"];
|
|
149
|
+
if (!activeSliderIndex_raw) {
|
|
150
|
+
console.warn("Cannot remove color indicator; no active range slider set.");
|
|
151
|
+
return false;
|
|
152
|
+
}
|
|
153
|
+
const activeSliderIndex = Number.parseInt(activeSliderIndex_raw);
|
|
154
|
+
if (Number.isNaN(activeSliderIndex) || activeSliderIndex < 0 || activeSliderIndex >= this._sliderElementRefs.length) {
|
|
155
|
+
console.warn("Cannot remove color indicator; active index invalid or out of bounds.", activeSliderIndex);
|
|
156
|
+
return false;
|
|
157
|
+
}
|
|
158
|
+
if (activeSliderIndex === 0 || activeSliderIndex + 1 === this.getRangeLength()) {
|
|
159
|
+
console.warn("Cannot remove color indicator; leftmost and rightmost slider must not be removed.", activeSliderIndex);
|
|
160
|
+
return false;
|
|
161
|
+
}
|
|
162
|
+
const sliderElementRef = this._sliderElementRefs[activeSliderIndex];
|
|
163
|
+
sliderElementRef.current.remove();
|
|
164
|
+
this._sliderElementRefs.splice(activeSliderIndex, 1);
|
|
165
|
+
// Update all elements to the right of the removed elelemt
|
|
166
|
+
this.__updateSliderDataSetIndices(activeSliderIndex);
|
|
167
|
+
// Set left element active
|
|
168
|
+
this.__updateColorIndicator(activeSliderIndex - 1);
|
|
169
|
+
this.__updateBackgroundGradient();
|
|
170
|
+
return true;
|
|
171
|
+
}
|
|
172
|
+
__updateSliderDataSetIndices(startIndex) {
|
|
173
|
+
// Update all elements to the right of the new elelemt
|
|
174
|
+
for (var i = startIndex; i < this._sliderElementRefs.length; i++) {
|
|
175
|
+
this._sliderElementRefs[i].current.setAttribute("data-range-slider-index", `${i}`);
|
|
176
|
+
this._sliderElementRefs[i].current.setAttribute("id", `rage-slider-${this.baseID}-${i}`);
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
__containerClickHandler() {
|
|
180
|
+
const _self = this;
|
|
181
|
+
const maxDifference = _self.getRangeLength() * 0.01;
|
|
182
|
+
return (evt) => {
|
|
183
|
+
const relativeValue = this.__clickEventToRelativeValue(evt);
|
|
184
|
+
if (relativeValue < 0 || relativeValue > 1.0) {
|
|
185
|
+
// Clicked somewhere outside the range
|
|
186
|
+
return;
|
|
187
|
+
}
|
|
188
|
+
const absoluteValue = this.__relativeToAbsolute(relativeValue);
|
|
189
|
+
console.log("click", "relativeValue", relativeValue, "absoluteValue", absoluteValue);
|
|
190
|
+
// Check if click position (ratio) is far enough away from any slider
|
|
191
|
+
const [leftSliderIndex, closestSliderValue] = _self.__locateClosestSliderValue(absoluteValue);
|
|
192
|
+
const diff = Math.abs(closestSliderValue - absoluteValue);
|
|
193
|
+
// console.log(
|
|
194
|
+
// "[__containerClickHandler] closestSliderValue",
|
|
195
|
+
// closestSliderValue,
|
|
196
|
+
// "leftSliderIndex",
|
|
197
|
+
// leftSliderIndex,
|
|
198
|
+
// "relativeValue",
|
|
199
|
+
// relativeValue,
|
|
200
|
+
// "difference",
|
|
201
|
+
// diff
|
|
202
|
+
// );
|
|
203
|
+
if (diff >= maxDifference) {
|
|
204
|
+
console.log("Add slider here");
|
|
205
|
+
_self.__addSliderAt(absoluteValue, leftSliderIndex);
|
|
206
|
+
}
|
|
207
|
+
else {
|
|
208
|
+
console.debug("Don't add slider here.");
|
|
209
|
+
}
|
|
210
|
+
};
|
|
211
|
+
}
|
|
212
|
+
__locateClosestSliderValue(absoluteValue) {
|
|
213
|
+
const allSliderValues = this.__getAllSliderValues();
|
|
214
|
+
console.log("allSliderValues", allSliderValues);
|
|
215
|
+
if (allSliderValues.length === 0) {
|
|
216
|
+
console.warn("[Warn] All slider values array is empty. This should not happen, cannot proceed.");
|
|
217
|
+
return [NaN, NaN]; // This should not happen: at least two values must be present in a gradient
|
|
218
|
+
}
|
|
219
|
+
console.log("__locateClosestSliderValue", "allSliderValues", allSliderValues);
|
|
220
|
+
// Todo: Find closest ratio value
|
|
221
|
+
// let closestSliderValue = Number.MAX_VALUE;
|
|
222
|
+
let leftSliderIndex = 0;
|
|
223
|
+
let closestSliderValue = allSliderValues[leftSliderIndex];
|
|
224
|
+
for (var i = 1; i < allSliderValues.length; i++) {
|
|
225
|
+
const curVal = allSliderValues[i];
|
|
226
|
+
if (Math.abs(curVal - absoluteValue) < Math.abs(closestSliderValue - absoluteValue)) {
|
|
227
|
+
closestSliderValue = curVal;
|
|
228
|
+
if (curVal > absoluteValue) {
|
|
229
|
+
leftSliderIndex = i - 1;
|
|
230
|
+
}
|
|
231
|
+
else {
|
|
232
|
+
leftSliderIndex = i;
|
|
233
|
+
}
|
|
234
|
+
}
|
|
235
|
+
}
|
|
236
|
+
return [leftSliderIndex, closestSliderValue];
|
|
237
|
+
}
|
|
238
|
+
__clickEventToRelativeValue(evt) {
|
|
239
|
+
const target = evt.target;
|
|
240
|
+
const rect = target.getBoundingClientRect();
|
|
241
|
+
const x = evt.clientX - rect.left; //x position within the element.
|
|
242
|
+
const width = rect.width; // target.clientWidth;
|
|
243
|
+
const relativeValue = x / width;
|
|
244
|
+
console.log("width", width, "x", x, "relativeValue", relativeValue);
|
|
245
|
+
return relativeValue;
|
|
246
|
+
}
|
|
247
|
+
__addSliderAt(absoluteValue, leftSliderIndex) {
|
|
248
|
+
console.log("__addSliderAt", "absoluteValue", absoluteValue, "leftSliderIndex", leftSliderIndex);
|
|
249
|
+
const leftSlider = this._sliderElementRefs[leftSliderIndex].current;
|
|
250
|
+
// const colorAtPosition = this.__getSliderColorAt(relativeValue);
|
|
251
|
+
const newColor = this.__getSliderColorAt(absoluteValue);
|
|
252
|
+
const newSliderIndex = leftSliderIndex + 1;
|
|
253
|
+
const _newSlider = this.__createColorRangeInput(newSliderIndex, this.sliderMin, this.sliderMax, absoluteValue, newColor.cssRGB() // initialColor: string
|
|
254
|
+
);
|
|
255
|
+
const sliderRef = this._sliderElementRefs[newSliderIndex];
|
|
256
|
+
leftSlider.after(sliderRef.current);
|
|
257
|
+
// No visible change, but let's reflect this in the output gradient anyway
|
|
258
|
+
this.__updateBackgroundGradient();
|
|
259
|
+
// Highlight the newly added range slider
|
|
260
|
+
this.__updateColorIndicator(newSliderIndex);
|
|
261
|
+
}
|
|
262
|
+
/**
|
|
263
|
+
* Get the slider color at the given absolute value. That value must be inside the [MIN_VALUE, MAX_VALUE] interval.
|
|
264
|
+
* @param absoluteValue
|
|
265
|
+
* @returns
|
|
266
|
+
*/
|
|
267
|
+
__getSliderColorAt(absoluteValue) {
|
|
268
|
+
console.log("__getSliderColorAt", "absoluteValue", absoluteValue);
|
|
269
|
+
// Locate interval
|
|
270
|
+
const leftIndex = this.__locateIntervalAt(absoluteValue);
|
|
271
|
+
const leftSliderValue = this.__getSliderValue(leftIndex, NaN);
|
|
272
|
+
const rightSliderValue = this.__getSliderValue(leftIndex + 1, NaN);
|
|
273
|
+
if (Number.isNaN(leftSliderValue) || Number.isNaN(rightSliderValue)) {
|
|
274
|
+
console.warn(`[Warn] Failed to determine left/right slider values at indices ${leftIndex} or ${rightSliderValue}. Cannot proceed for absolute value ${absoluteValue}.`);
|
|
275
|
+
return null;
|
|
276
|
+
}
|
|
277
|
+
const leftColorString = this.__getSliderColor(leftIndex, null);
|
|
278
|
+
const rightColorString = this.__getSliderColor(leftIndex + 1, null);
|
|
279
|
+
if (!leftColorString || !rightColorString) {
|
|
280
|
+
console.warn(`[Warn] Failed to determine left/right color string values at indices ${leftIndex} or ${rightSliderValue}. Cannot proceed for absolute value ${absoluteValue}.`);
|
|
281
|
+
return null;
|
|
282
|
+
}
|
|
283
|
+
const positionInsideInterval = (absoluteValue - leftSliderValue) / (rightSliderValue - leftSliderValue);
|
|
284
|
+
console.log("leftColorString", leftColorString, "rightColorString", rightColorString);
|
|
285
|
+
const leftColorObject = Color.parse(leftColorString);
|
|
286
|
+
const rightColorObject = Color.parse(rightColorString);
|
|
287
|
+
const newColor = leftColorObject.interpolate(rightColorObject, positionInsideInterval);
|
|
288
|
+
// console.log(
|
|
289
|
+
// "absoluteValue",
|
|
290
|
+
// absoluteValue,
|
|
291
|
+
// "leftIndex",
|
|
292
|
+
// leftIndex,
|
|
293
|
+
// "leftSliderValue",
|
|
294
|
+
// leftSliderValue,
|
|
295
|
+
// "leftColorObject",
|
|
296
|
+
// leftColorObject.cssRGB(),
|
|
297
|
+
// "rightSliderValue",
|
|
298
|
+
// rightSliderValue,
|
|
299
|
+
// "rightColorObject",
|
|
300
|
+
// rightColorObject.cssRGB(),
|
|
301
|
+
// "positionInsideInterval",
|
|
302
|
+
// positionInsideInterval,
|
|
303
|
+
// "newColor",
|
|
304
|
+
// newColor.cssRGB()
|
|
305
|
+
// );
|
|
306
|
+
return newColor;
|
|
307
|
+
}
|
|
308
|
+
/**
|
|
309
|
+
* Locate the slider interval that contains the given (absolute) slider value. The given value must be
|
|
310
|
+
* somewhere between MIN_VALUE and MAX_VALUE (usually between 0 and 100 in the default configuraion.).
|
|
311
|
+
*
|
|
312
|
+
* @param {number} absoluteValue - The absolute value to search for.
|
|
313
|
+
* @returns {number} The left slider inder the containing interval is starting with – or -1 if out of bounds.
|
|
314
|
+
*/
|
|
315
|
+
__locateIntervalAt(absoluteValue) {
|
|
316
|
+
for (var i = 0; i + 1 < this._sliderElementRefs.length; i++) {
|
|
317
|
+
if (this.__getSliderValue(i, this.sliderMin) <= absoluteValue &&
|
|
318
|
+
absoluteValue < this.__getSliderValue(i + 1, this.sliderMax)) {
|
|
319
|
+
return i;
|
|
320
|
+
}
|
|
321
|
+
}
|
|
322
|
+
return -1;
|
|
323
|
+
}
|
|
324
|
+
/**
|
|
325
|
+
* Converts a relative value in [0..1] to [min..max].
|
|
326
|
+
* @param relativeValue
|
|
327
|
+
*/
|
|
328
|
+
__relativeToAbsolute(relativeValue) {
|
|
329
|
+
return this.sliderMin + (this.sliderMax - this.sliderMin) * relativeValue;
|
|
330
|
+
}
|
|
331
|
+
/**
|
|
332
|
+
* Get the value of the n-th rangel slider.
|
|
333
|
+
*
|
|
334
|
+
* @param {number} sliderIndex
|
|
335
|
+
* @param {number} fallback
|
|
336
|
+
* @returns
|
|
337
|
+
*/
|
|
338
|
+
__getSliderValue(sliderIndex, fallback) {
|
|
339
|
+
if (sliderIndex < 0 || sliderIndex >= this._sliderElementRefs.length) {
|
|
340
|
+
return fallback;
|
|
341
|
+
}
|
|
342
|
+
return Number.parseFloat(this._sliderElementRefs[sliderIndex].current.value);
|
|
343
|
+
}
|
|
344
|
+
__getAllSliderValues() {
|
|
345
|
+
// return this._sliderElementRefs.map((ref, index: number) => this.__getSliderPercentage(index));
|
|
346
|
+
return this._sliderElementRefs.map((ref, index) => this.__getSliderValue(index, NaN));
|
|
347
|
+
}
|
|
348
|
+
/**
|
|
349
|
+
* Updates the container's background to display the configured color gradient.
|
|
350
|
+
*
|
|
351
|
+
* @private
|
|
352
|
+
*/
|
|
353
|
+
__updateBackgroundGradient() {
|
|
354
|
+
const colorGradient = this.getColorGradient();
|
|
355
|
+
this.containerRef.current.style["background"] = colorGradient;
|
|
356
|
+
}
|
|
357
|
+
__updateColorIndicator(rangeSliderIndex) {
|
|
358
|
+
const colorValue = this.__getSliderColor(rangeSliderIndex, "grey");
|
|
359
|
+
const ratio = this.__getSliderPercentage(rangeSliderIndex);
|
|
360
|
+
// console.log("__updateColorIndicator", colorValue, ratio);
|
|
361
|
+
// this.colorIndicatorButtonRef.current.style["left"] = `calc( ${ratio * 100}% + ${
|
|
362
|
+
// (1.0 - ratio) * this.indicatorWidth_num * 0.5
|
|
363
|
+
// }em - ${ratio * this.indicatorWidth_num * 0.5}em)`;
|
|
364
|
+
this.colorInputContainerRef.current.style["left"] = `calc( ${ratio * 100}% + ${(1.0 - ratio) * this.indicatorWidth_num * 0.5}em - ${ratio * this.indicatorWidth_num * 0.5}em)`;
|
|
365
|
+
this.colorIndicatorColorButtonRef.current.style["background-color"] = colorValue;
|
|
366
|
+
this.colorInputRef.current.value = colorValue;
|
|
367
|
+
this.colorInputRef.current.dataset["activeSliderIndex"] = `${rangeSliderIndex}`;
|
|
368
|
+
if (rangeSliderIndex <= 0 || rangeSliderIndex + 1 >= this.getRangeLength()) {
|
|
369
|
+
this.colorIndicatorRemoveButtonRef.current.style["visibility"] = "hidden";
|
|
370
|
+
}
|
|
371
|
+
else {
|
|
372
|
+
this.colorIndicatorRemoveButtonRef.current.style["visibility"] = "visible";
|
|
373
|
+
}
|
|
374
|
+
}
|
|
375
|
+
/**
|
|
376
|
+
* Get a color gradient CSS value string from the current editor settings.
|
|
377
|
+
*
|
|
378
|
+
* @instance
|
|
379
|
+
* @memberof ColorGradientPicker
|
|
380
|
+
* @returns {string}
|
|
381
|
+
*/
|
|
382
|
+
getColorGradient() {
|
|
383
|
+
// Example:
|
|
384
|
+
// 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%)
|
|
385
|
+
const buffer = ["linear-gradient( 90deg, "];
|
|
386
|
+
for (var i = 0; i < this._sliderElementRefs.length; i++) {
|
|
387
|
+
if (i > 0) {
|
|
388
|
+
buffer.push(",");
|
|
389
|
+
}
|
|
390
|
+
const colorValue = this.__getSliderColor(i, "black");
|
|
391
|
+
buffer.push(colorValue);
|
|
392
|
+
// const sliderValue: number = this.__getSliderValue(i, 0.0);
|
|
393
|
+
// const percentage: number = (this.sliderMin + sliderValue) / (this.sliderMax - this.sliderMin);
|
|
394
|
+
const percentage = this.__getSliderPercentage(i);
|
|
395
|
+
buffer.push(`${percentage * 100}%`);
|
|
396
|
+
}
|
|
397
|
+
buffer.push(")");
|
|
398
|
+
return buffer.join(" ");
|
|
399
|
+
}
|
|
400
|
+
/**
|
|
401
|
+
* Get the configured color value of the n-th rangel slider.
|
|
402
|
+
*
|
|
403
|
+
* @param {number} sliderIndex
|
|
404
|
+
* @param {string} fallback
|
|
405
|
+
* @returns
|
|
406
|
+
*/
|
|
407
|
+
__getSliderColor(sliderIndex, fallback) {
|
|
408
|
+
if (sliderIndex < 0 || sliderIndex >= this._sliderElementRefs.length) {
|
|
409
|
+
return fallback;
|
|
410
|
+
}
|
|
411
|
+
const colorValue = this._sliderElementRefs[sliderIndex].current.dataset["colorValue"];
|
|
412
|
+
return colorValue ? colorValue : fallback;
|
|
413
|
+
}
|
|
414
|
+
/**
|
|
415
|
+
* Get the slider's value in a mapped range of 0.0 ... 1.0.
|
|
416
|
+
*
|
|
417
|
+
* @param sliderIndex
|
|
418
|
+
* @returns
|
|
419
|
+
*/
|
|
420
|
+
__getSliderPercentage(sliderIndex) {
|
|
421
|
+
const sliderValue = this.__getSliderValue(sliderIndex, 0.0);
|
|
422
|
+
const percentage = (this.sliderMin + sliderValue) / (this.sliderMax - this.sliderMin);
|
|
423
|
+
return percentage;
|
|
424
|
+
}
|
|
425
|
+
/**
|
|
426
|
+
* Init the container contents.
|
|
427
|
+
*
|
|
428
|
+
* @private
|
|
429
|
+
*/
|
|
430
|
+
_render(name) {
|
|
431
|
+
const _self = this;
|
|
432
|
+
console.log("Rendering ...", NoReact);
|
|
433
|
+
this.colorIndicatorColorButtonRef = NoReact.useRef();
|
|
434
|
+
this.colorIndicatorRemoveButtonRef = NoReact.useRef();
|
|
435
|
+
this.colorInputRef = NoReact.useRef();
|
|
436
|
+
this.colorInputContainerRef = NoReact.useRef();
|
|
437
|
+
this.containerRef = NoReact.useRef();
|
|
438
|
+
const handleIndicatorButtonClick = (evt) => {
|
|
439
|
+
evt.preventDefault(); // Prevent other inputs to react to this event.
|
|
440
|
+
evt.stopPropagation();
|
|
441
|
+
// But fake a click on the input element
|
|
442
|
+
_self.colorInputRef.current.click();
|
|
443
|
+
};
|
|
444
|
+
const handleRemoveColorButtonClick = (evt) => {
|
|
445
|
+
evt.preventDefault(); // Prevent other inputs to react to this event.
|
|
446
|
+
evt.stopPropagation();
|
|
447
|
+
console.log("Todo: remove color");
|
|
448
|
+
// TODO
|
|
449
|
+
_self.__handleRemoveColor();
|
|
450
|
+
};
|
|
451
|
+
const currentColors = [0, 1, 2, 3, 4, 5];
|
|
452
|
+
const stepCount = currentColors.length;
|
|
453
|
+
const elementId = `color-gradient-container-${this.baseID}`;
|
|
454
|
+
return (NoReact.createElement("div", { id: elementId, style: {
|
|
455
|
+
display: "flex",
|
|
456
|
+
flexDirection: "column",
|
|
457
|
+
width: "100%",
|
|
458
|
+
height: "32px",
|
|
459
|
+
position: "relative"
|
|
460
|
+
}, ref: this.containerRef, onClick: this.__containerClickHandler() },
|
|
461
|
+
createCustomStylesElement(elementId),
|
|
462
|
+
currentColors.map((index) => {
|
|
463
|
+
const initialColor = this.COLORSET[index % this.COLORSET.length];
|
|
464
|
+
const initialValue = (100 / (stepCount - 1)) * index;
|
|
465
|
+
return this.__createColorRangeInput(index, this.sliderMin, this.sliderMax, initialValue, initialColor);
|
|
466
|
+
}),
|
|
467
|
+
NoReact.createElement("div", { style: { width: "100%" } },
|
|
468
|
+
NoReact.createElement("input", { id: `color-indicator-input-${this.baseID}`, type: "color", style: { visibility: "hidden" }, "data-active-slider-index": "", ref: this.colorInputRef, onInput: this.__colorChangeHandler() }),
|
|
469
|
+
NoReact.createElement("div", { ref: this.colorInputContainerRef, style: {
|
|
470
|
+
position: "absolute",
|
|
471
|
+
bottom: "0px",
|
|
472
|
+
left: "0%",
|
|
473
|
+
display: "flex",
|
|
474
|
+
flexDirection: "column",
|
|
475
|
+
transform: "translate(0%, 100%)"
|
|
476
|
+
} },
|
|
477
|
+
NoReact.createElement("button", { id: `color-indicator-button-${this.baseID}`, style: {
|
|
478
|
+
backgroundColor: "grey",
|
|
479
|
+
borderRadius: "3px",
|
|
480
|
+
border: "1px solid grey",
|
|
481
|
+
width: this.indicatorWidth, // "1em",
|
|
482
|
+
height: this.indicatorHeight, // "1em",
|
|
483
|
+
transform: "translate(-50%, 0%)"
|
|
484
|
+
}, onClick: handleIndicatorButtonClick, ref: this.colorIndicatorColorButtonRef }),
|
|
485
|
+
NoReact.createElement("button", { id: `color-remove-button-${this.baseID}`, className: "color-remove-button", style: {
|
|
486
|
+
backgroundColor: "grey",
|
|
487
|
+
borderRadius: "3px",
|
|
488
|
+
border: "1px solid grey",
|
|
489
|
+
width: this.indicatorWidth, // "1em",
|
|
490
|
+
height: this.indicatorHeight, // "1em",
|
|
491
|
+
transform: "translate(-50%, 50%)",
|
|
492
|
+
lineHeight: "0.5em",
|
|
493
|
+
padding: 0
|
|
494
|
+
}, onClick: handleRemoveColorButtonClick, ref: this.colorIndicatorRemoveButtonRef },
|
|
495
|
+
NoReact.createElement("span", { style: { fontSize: "0.5em" } }, "\uD83D\uDDD1"))))));
|
|
496
|
+
}
|
|
497
|
+
}
|
|
498
|
+
/**
|
|
499
|
+
* Adds custom styles (global STYLE tag).
|
|
500
|
+
*
|
|
501
|
+
* @private
|
|
502
|
+
*/
|
|
503
|
+
const createCustomStylesElement = (elementId) => {
|
|
504
|
+
const thumbWidth = "0.5em";
|
|
505
|
+
const thumbHeight = "1.333em";
|
|
506
|
+
// Thanks to Ana Tudor
|
|
507
|
+
// https://css-tricks.com/multi-thumb-sliders-particular-two-thumb-case/
|
|
508
|
+
return (NoReact.createElement("style", null, `
|
|
509
|
+
#${elementId} input[type='range'] {
|
|
510
|
+
|
|
511
|
+
-webkit-appearance: none;
|
|
512
|
+
|
|
513
|
+
grid-column: 1;
|
|
514
|
+
grid-row: 2;
|
|
515
|
+
|
|
516
|
+
/* same as before */
|
|
517
|
+
background: none; /* get rid of white Chrome background */
|
|
518
|
+
color: #000;
|
|
519
|
+
font: inherit; /* fix too small font-size in both Chrome & Firefox */
|
|
520
|
+
margin: 0;
|
|
521
|
+
pointer-events: none; /* let clicks pass through */
|
|
522
|
+
}
|
|
523
|
+
|
|
524
|
+
#${elementId} input[type='range']::-webkit-slider-runnable-track {
|
|
525
|
+
-webkit-appearance: none;
|
|
526
|
+
|
|
527
|
+
background: none; /* get rid of Firefox track background */
|
|
528
|
+
height: 100%;
|
|
529
|
+
width: 100%;
|
|
530
|
+
|
|
531
|
+
pointer-events: none;
|
|
532
|
+
}
|
|
533
|
+
|
|
534
|
+
#${elementId} input[type='range']::-webkit-slider-thumb {
|
|
535
|
+
-webkit-appearance: none;
|
|
536
|
+
background: currentcolor;
|
|
537
|
+
border: none; /* get rid of Firefox thumb border */
|
|
538
|
+
border-radius: 6px; /* get rid of Firefox corner rounding */
|
|
539
|
+
pointer-events: auto; /* catch clicks */
|
|
540
|
+
width: ${thumbWidth};
|
|
541
|
+
height: ${thumbHeight};
|
|
542
|
+
}
|
|
543
|
+
|
|
544
|
+
#${elementId} input[type='range']:focus::-webkit-slider-thumb {
|
|
545
|
+
border: 2px solid white;
|
|
546
|
+
}
|
|
547
|
+
|
|
548
|
+
#${elementId} input[type='range']::-moz-range-track {
|
|
549
|
+
-webkit-appearance: none;
|
|
550
|
+
background: none; /* get rid of Firefox track background */
|
|
551
|
+
height: 100%;
|
|
552
|
+
width: 100%;
|
|
553
|
+
pointer-events: none;
|
|
554
|
+
}
|
|
555
|
+
|
|
556
|
+
#${elementId} input[type='range']::-moz-range-thumb {
|
|
557
|
+
/* -webkit-appearance: none; */
|
|
558
|
+
background: currentcolor;
|
|
559
|
+
border: none; /* get rid of Firefox thumb border */
|
|
560
|
+
border-radius: 6px; /* get rid of Firefox corner rounding */
|
|
561
|
+
pointer-events: auto; /* catch clicks */
|
|
562
|
+
width: ${thumbWidth};
|
|
563
|
+
height: ${thumbHeight};
|
|
564
|
+
}
|
|
565
|
+
|
|
566
|
+
#${elementId} input[type='range']:focus::-moz-range-thumb {
|
|
567
|
+
border: 2px solid white;
|
|
568
|
+
}
|
|
569
|
+
|
|
570
|
+
#${elementId} input[type='range'] {
|
|
571
|
+
/* same as before */
|
|
572
|
+
z-index: 1;
|
|
573
|
+
}
|
|
574
|
+
|
|
575
|
+
#${elementId} input[type='range']:focus {
|
|
576
|
+
z-index: 2;
|
|
577
|
+
/* outline: dotted 1px orange; */
|
|
578
|
+
color: darkorange;
|
|
579
|
+
}
|
|
580
|
+
`));
|
|
581
|
+
};
|
|
582
|
+
//# sourceMappingURL=ColorGradientPickerJSX.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ColorGradientPickerJSX.js","sourceRoot":"","sources":["../../../../ts/utils/dom/components/ColorGradientPickerJSX.tsx"],"names":[],"mappings":"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"}
|