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.
Files changed (141) hide show
  1. package/README.md +13 -1
  2. package/dist/index.esm.js +294 -129
  3. package/dist/index.esm.js.map +1 -1
  4. package/dist/index.esm.min.js +1 -1
  5. package/dist/index.esm.min.js.map +1 -1
  6. package/dist/plotboilerplate.browser.min.js +1 -1
  7. package/dist/plotboilerplate.browser.min.js.map +1 -1
  8. package/dist/plotboilerplate.js +12084 -11919
  9. package/dist/plotboilerplate.min.js +1 -1
  10. package/package.json +9 -5
  11. package/src/cjs/PlotBoilerplate.d.ts +37 -6
  12. package/src/cjs/PlotBoilerplate.js +222 -116
  13. package/src/cjs/PlotBoilerplate.js.map +1 -1
  14. package/src/cjs/Polygon.d.ts +26 -7
  15. package/src/cjs/Polygon.js +56 -10
  16. package/src/cjs/Polygon.js.map +1 -1
  17. package/src/cjs/Triangle.js +2 -2
  18. package/src/cjs/Triangle.js.map +1 -1
  19. package/src/cjs/Vertex.d.ts +15 -3
  20. package/src/cjs/Vertex.js +18 -1
  21. package/src/cjs/Vertex.js.map +1 -1
  22. package/src/cjs/interfaces/core.d.ts +28 -0
  23. package/src/cjs/interfaces/core.js +2 -0
  24. package/src/cjs/interfaces/core.js.map +1 -1
  25. package/src/cjs/utils/datastructures/Color.d.ts +147 -1
  26. package/src/cjs/utils/datastructures/Color.js +385 -41
  27. package/src/cjs/utils/datastructures/Color.js.map +1 -1
  28. package/src/cjs/utils/datastructures/ColorGradient.d.ts +79 -0
  29. package/src/cjs/utils/datastructures/ColorGradient.js +171 -0
  30. package/src/cjs/utils/datastructures/ColorGradient.js.map +1 -0
  31. package/src/cjs/utils/dom/components/ColorGradientPicker.d.ts +245 -0
  32. package/src/cjs/utils/dom/components/ColorGradientPicker.js +667 -0
  33. package/src/cjs/utils/dom/components/ColorGradientPicker.js.map +1 -0
  34. package/src/cjs/utils/dom/components/ColorGradientPickerJSX.d.ts +129 -0
  35. package/src/cjs/utils/dom/components/ColorGradientPickerJSX.js +520 -0
  36. package/src/cjs/utils/dom/components/ColorGradientPickerJSX.js.map +1 -0
  37. package/src/cjs/utils/dom/components/ColorGradientSelector.d.ts +117 -0
  38. package/src/cjs/utils/dom/components/ColorGradientSelector.js +325 -0
  39. package/src/cjs/utils/dom/components/ColorGradientSelector.js.map +1 -0
  40. package/src/cjs/utils/dom/components/Test.d.ts +7 -0
  41. package/src/cjs/utils/dom/components/Test.js +30 -0
  42. package/src/cjs/utils/dom/components/Test.js.map +1 -0
  43. package/src/cjs/utils/dom/guiSizeToggler.js +1 -1
  44. package/src/cjs/utils/dom/guiSizeToggler.js.map +1 -1
  45. package/src/cjs/utils/helpers/BezierPathInteractionHelper.d.ts +9 -3
  46. package/src/cjs/utils/helpers/BezierPathInteractionHelper.js +20 -13
  47. package/src/cjs/utils/helpers/BezierPathInteractionHelper.js.map +1 -1
  48. package/src/cjs/utils/helpers/CircleHelper.d.ts +10 -1
  49. package/src/cjs/utils/helpers/CircleHelper.js +13 -2
  50. package/src/cjs/utils/helpers/CircleHelper.js.map +1 -1
  51. package/src/cjs/utils/helpers/CircleSectorHelper.d.ts +2 -2
  52. package/src/cjs/utils/helpers/CircleSectorHelper.js +1 -0
  53. package/src/cjs/utils/helpers/CircleSectorHelper.js.map +1 -1
  54. package/src/cjs/utils/helpers/TriangleHelper.d.ts +57 -0
  55. package/src/cjs/utils/helpers/TriangleHelper.js +83 -0
  56. package/src/cjs/utils/helpers/TriangleHelper.js.map +1 -0
  57. package/src/cjs/utils/helpers/VEllipseHelper.d.ts +6 -4
  58. package/src/cjs/utils/helpers/VEllipseHelper.js +4 -2
  59. package/src/cjs/utils/helpers/VEllipseHelper.js.map +1 -1
  60. package/src/cjs/utils/helpers/VEllipseSectorHelper.d.ts +3 -2
  61. package/src/cjs/utils/helpers/VEllipseSectorHelper.js +1 -0
  62. package/src/cjs/utils/helpers/VEllipseSectorHelper.js.map +1 -1
  63. package/src/cjs/utils/parsers/LinearColorGradientParser.d.ts +78 -0
  64. package/src/cjs/utils/parsers/LinearColorGradientParser.js +224 -0
  65. package/src/cjs/utils/parsers/LinearColorGradientParser.js.map +1 -0
  66. package/src/createDemoDrawables.js +1 -0
  67. package/src/esm/PlotBoilerplate.d.ts +37 -6
  68. package/src/esm/PlotBoilerplate.js +222 -116
  69. package/src/esm/PlotBoilerplate.js.map +1 -1
  70. package/src/esm/Polygon.d.ts +26 -7
  71. package/src/esm/Polygon.js +53 -10
  72. package/src/esm/Polygon.js.map +1 -1
  73. package/src/esm/Triangle.js +2 -2
  74. package/src/esm/Triangle.js.map +1 -1
  75. package/src/esm/Vertex.d.ts +15 -3
  76. package/src/esm/Vertex.js +18 -1
  77. package/src/esm/Vertex.js.map +1 -1
  78. package/src/esm/interfaces/core.d.ts +28 -0
  79. package/src/esm/interfaces/core.js +2 -0
  80. package/src/esm/interfaces/core.js.map +1 -1
  81. package/src/esm/utils/datastructures/Color.d.ts +147 -1
  82. package/src/esm/utils/datastructures/Color.js +386 -42
  83. package/src/esm/utils/datastructures/Color.js.map +1 -1
  84. package/src/esm/utils/datastructures/ColorGradient.d.ts +79 -0
  85. package/src/esm/utils/datastructures/ColorGradient.js +166 -0
  86. package/src/esm/utils/datastructures/ColorGradient.js.map +1 -0
  87. package/src/esm/utils/dom/components/ColorGradientPicker.d.ts +245 -0
  88. package/src/esm/utils/dom/components/ColorGradientPicker.js +732 -0
  89. package/src/esm/utils/dom/components/ColorGradientPicker.js.map +1 -0
  90. package/src/esm/utils/dom/components/ColorGradientPickerJSX.d.ts +129 -0
  91. package/src/esm/utils/dom/components/ColorGradientPickerJSX.js +582 -0
  92. package/src/esm/utils/dom/components/ColorGradientPickerJSX.js.map +1 -0
  93. package/src/esm/utils/dom/components/ColorGradientSelector.d.ts +117 -0
  94. package/src/esm/utils/dom/components/ColorGradientSelector.js +332 -0
  95. package/src/esm/utils/dom/components/ColorGradientSelector.js.map +1 -0
  96. package/src/esm/utils/dom/components/Test.d.ts +7 -0
  97. package/src/esm/utils/dom/components/Test.js +26 -0
  98. package/src/esm/utils/dom/components/Test.js.map +1 -0
  99. package/src/esm/utils/dom/guiSizeToggler.js +1 -1
  100. package/src/esm/utils/dom/guiSizeToggler.js.map +1 -1
  101. package/src/esm/utils/helpers/BezierPathInteractionHelper.d.ts +9 -3
  102. package/src/esm/utils/helpers/BezierPathInteractionHelper.js +20 -13
  103. package/src/esm/utils/helpers/BezierPathInteractionHelper.js.map +1 -1
  104. package/src/esm/utils/helpers/CircleHelper.d.ts +10 -1
  105. package/src/esm/utils/helpers/CircleHelper.js +13 -2
  106. package/src/esm/utils/helpers/CircleHelper.js.map +1 -1
  107. package/src/esm/utils/helpers/CircleSectorHelper.d.ts +2 -2
  108. package/src/esm/utils/helpers/CircleSectorHelper.js +1 -0
  109. package/src/esm/utils/helpers/CircleSectorHelper.js.map +1 -1
  110. package/src/esm/utils/helpers/TriangleHelper.d.ts +57 -0
  111. package/src/esm/utils/helpers/TriangleHelper.js +78 -0
  112. package/src/esm/utils/helpers/TriangleHelper.js.map +1 -0
  113. package/src/esm/utils/helpers/VEllipseHelper.d.ts +6 -4
  114. package/src/esm/utils/helpers/VEllipseHelper.js +4 -2
  115. package/src/esm/utils/helpers/VEllipseHelper.js.map +1 -1
  116. package/src/esm/utils/helpers/VEllipseSectorHelper.d.ts +3 -2
  117. package/src/esm/utils/helpers/VEllipseSectorHelper.js +1 -0
  118. package/src/esm/utils/helpers/VEllipseSectorHelper.js.map +1 -1
  119. package/src/esm/utils/parsers/LinearColorGradientParser.d.ts +78 -0
  120. package/src/esm/utils/parsers/LinearColorGradientParser.js +217 -0
  121. package/src/esm/utils/parsers/LinearColorGradientParser.js.map +1 -0
  122. package/src/external.d.ts +9 -0
  123. package/src/ts/PlotBoilerplate.ts +233 -105
  124. package/src/ts/Polygon.ts +68 -14
  125. package/src/ts/Triangle.ts +2 -2
  126. package/src/ts/Vertex.ts +21 -3
  127. package/src/ts/interfaces/core.ts +31 -0
  128. package/src/ts/utils/datastructures/Color.ts +423 -44
  129. package/src/ts/utils/datastructures/ColorGradient.ts +196 -0
  130. package/src/ts/utils/dom/components/ColorGradientPicker.tsx +877 -0
  131. package/src/ts/utils/dom/components/ColorGradientSelector.tsx +445 -0
  132. package/src/ts/utils/dom/components/Test.tsx +44 -0
  133. package/src/ts/utils/dom/components/_ColorGradientPicker_raw.ts_ +392 -0
  134. package/src/ts/utils/dom/guiSizeToggler.ts +1 -1
  135. package/src/ts/utils/helpers/BezierPathInteractionHelper.ts +25 -15
  136. package/src/ts/utils/helpers/CircleHelper.ts +17 -3
  137. package/src/ts/utils/helpers/CircleSectorHelper.ts +4 -2
  138. package/src/ts/utils/helpers/TriangleHelper.ts +102 -0
  139. package/src/ts/utils/helpers/VEllipseHelper.ts +6 -4
  140. package/src/ts/utils/helpers/VEllipseSectorHelper.ts +3 -2
  141. 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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"}