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.
Files changed (230) hide show
  1. package/README.md +19 -1
  2. package/dist/index.esm.js +1684 -394
  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 +12450 -11120
  9. package/dist/plotboilerplate.min.js +1 -1
  10. package/package.json +9 -5
  11. package/src/cjs/BezierPath.d.ts +41 -5
  12. package/src/cjs/BezierPath.js +52 -2
  13. package/src/cjs/BezierPath.js.map +1 -1
  14. package/src/cjs/Bounds.d.ts +67 -3
  15. package/src/cjs/Bounds.js +101 -3
  16. package/src/cjs/Bounds.js.map +1 -1
  17. package/src/cjs/Circle.d.ts +46 -4
  18. package/src/cjs/Circle.js +82 -3
  19. package/src/cjs/Circle.js.map +1 -1
  20. package/src/cjs/CircleSector.d.ts +51 -2
  21. package/src/cjs/CircleSector.js +112 -3
  22. package/src/cjs/CircleSector.js.map +1 -1
  23. package/src/cjs/CubicBezierCurve.d.ts +113 -7
  24. package/src/cjs/CubicBezierCurve.js +281 -33
  25. package/src/cjs/CubicBezierCurve.js.map +1 -1
  26. package/src/cjs/Line.d.ts +38 -3
  27. package/src/cjs/Line.js +64 -1
  28. package/src/cjs/Line.js.map +1 -1
  29. package/src/cjs/PlotBoilerplate.d.ts +37 -6
  30. package/src/cjs/PlotBoilerplate.js +224 -125
  31. package/src/cjs/PlotBoilerplate.js.map +1 -1
  32. package/src/cjs/Polygon.d.ts +68 -5
  33. package/src/cjs/Polygon.js +143 -22
  34. package/src/cjs/Polygon.js.map +1 -1
  35. package/src/cjs/Triangle.d.ts +52 -3
  36. package/src/cjs/Triangle.js +80 -1
  37. package/src/cjs/Triangle.js.map +1 -1
  38. package/src/cjs/VEllipse.d.ts +62 -3
  39. package/src/cjs/VEllipse.js +181 -17
  40. package/src/cjs/VEllipse.js.map +1 -1
  41. package/src/cjs/VEllipseSector.d.ts +86 -2
  42. package/src/cjs/VEllipseSector.js +148 -4
  43. package/src/cjs/VEllipseSector.js.map +1 -1
  44. package/src/cjs/Vector.d.ts +12 -2
  45. package/src/cjs/Vector.js +15 -2
  46. package/src/cjs/Vector.js.map +1 -1
  47. package/src/cjs/VertTuple.d.ts +28 -4
  48. package/src/cjs/VertTuple.js +36 -3
  49. package/src/cjs/VertTuple.js.map +1 -1
  50. package/src/cjs/Vertex.d.ts +31 -4
  51. package/src/cjs/Vertex.js +35 -1
  52. package/src/cjs/Vertex.js.map +1 -1
  53. package/src/cjs/interfaces/core.d.ts +67 -0
  54. package/src/cjs/interfaces/core.js +4 -0
  55. package/src/cjs/interfaces/core.js.map +1 -1
  56. package/src/cjs/utils/algorithms/convexPolygonIncircle.d.ts +2 -1
  57. package/src/cjs/utils/algorithms/convexPolygonIncircle.js +14 -6
  58. package/src/cjs/utils/algorithms/convexPolygonIncircle.js.map +1 -1
  59. package/src/cjs/utils/createRandomizedPolygon.d.ts +14 -0
  60. package/src/cjs/utils/createRandomizedPolygon.js +32 -0
  61. package/src/cjs/utils/createRandomizedPolygon.js.map +1 -0
  62. package/src/cjs/utils/datastructures/Color.d.ts +147 -1
  63. package/src/cjs/utils/datastructures/Color.js +385 -41
  64. package/src/cjs/utils/datastructures/Color.js.map +1 -1
  65. package/src/cjs/utils/datastructures/ColorGradient.d.ts +79 -0
  66. package/src/cjs/utils/datastructures/ColorGradient.js +171 -0
  67. package/src/cjs/utils/datastructures/ColorGradient.js.map +1 -0
  68. package/src/cjs/utils/dom/components/ColorGradientPicker.d.ts +245 -0
  69. package/src/cjs/utils/dom/components/ColorGradientPicker.js +667 -0
  70. package/src/cjs/utils/dom/components/ColorGradientPicker.js.map +1 -0
  71. package/src/cjs/utils/dom/components/ColorGradientPickerJSX.d.ts +129 -0
  72. package/src/cjs/utils/dom/components/ColorGradientPickerJSX.js +520 -0
  73. package/src/cjs/utils/dom/components/ColorGradientPickerJSX.js.map +1 -0
  74. package/src/cjs/utils/dom/components/ColorGradientSelector.d.ts +117 -0
  75. package/src/cjs/utils/dom/components/ColorGradientSelector.js +325 -0
  76. package/src/cjs/utils/dom/components/ColorGradientSelector.js.map +1 -0
  77. package/src/cjs/utils/dom/components/Test.d.ts +7 -0
  78. package/src/cjs/utils/dom/components/Test.js +30 -0
  79. package/src/cjs/utils/dom/components/Test.js.map +1 -0
  80. package/src/cjs/utils/dom/guiSizeToggler.js +1 -1
  81. package/src/cjs/utils/dom/guiSizeToggler.js.map +1 -1
  82. package/src/cjs/utils/helpers/BezierPathInteractionHelper.d.ts +16 -8
  83. package/src/cjs/utils/helpers/BezierPathInteractionHelper.js +49 -28
  84. package/src/cjs/utils/helpers/BezierPathInteractionHelper.js.map +1 -1
  85. package/src/cjs/utils/helpers/CircleHelper.d.ts +10 -1
  86. package/src/cjs/utils/helpers/CircleHelper.js +13 -2
  87. package/src/cjs/utils/helpers/CircleHelper.js.map +1 -1
  88. package/src/cjs/utils/helpers/CircleSectorHelper.d.ts +11 -2
  89. package/src/cjs/utils/helpers/CircleSectorHelper.js +20 -20
  90. package/src/cjs/utils/helpers/CircleSectorHelper.js.map +1 -1
  91. package/src/cjs/utils/helpers/TriangleHelper.d.ts +57 -0
  92. package/src/cjs/utils/helpers/TriangleHelper.js +83 -0
  93. package/src/cjs/utils/helpers/TriangleHelper.js.map +1 -0
  94. package/src/cjs/utils/helpers/VEllipseHelper.d.ts +32 -0
  95. package/src/cjs/utils/helpers/VEllipseHelper.js +88 -0
  96. package/src/cjs/utils/helpers/VEllipseHelper.js.map +1 -0
  97. package/src/cjs/utils/helpers/VEllipseSectorHelper.d.ts +44 -4
  98. package/src/cjs/utils/helpers/VEllipseSectorHelper.js +108 -25
  99. package/src/cjs/utils/helpers/VEllipseSectorHelper.js.map +1 -1
  100. package/src/cjs/utils/parsers/LinearColorGradientParser.d.ts +78 -0
  101. package/src/cjs/utils/parsers/LinearColorGradientParser.js +224 -0
  102. package/src/cjs/utils/parsers/LinearColorGradientParser.js.map +1 -0
  103. package/src/createDemoDrawables.js +4 -1
  104. package/src/esm/BezierPath.d.ts +41 -5
  105. package/src/esm/BezierPath.js +50 -2
  106. package/src/esm/BezierPath.js.map +1 -1
  107. package/src/esm/Bounds.d.ts +67 -3
  108. package/src/esm/Bounds.js +101 -3
  109. package/src/esm/Bounds.js.map +1 -1
  110. package/src/esm/Circle.d.ts +46 -4
  111. package/src/esm/Circle.js +79 -3
  112. package/src/esm/Circle.js.map +1 -1
  113. package/src/esm/CircleSector.d.ts +51 -2
  114. package/src/esm/CircleSector.js +108 -3
  115. package/src/esm/CircleSector.js.map +1 -1
  116. package/src/esm/CubicBezierCurve.d.ts +113 -7
  117. package/src/esm/CubicBezierCurve.js +277 -33
  118. package/src/esm/CubicBezierCurve.js.map +1 -1
  119. package/src/esm/Line.d.ts +38 -3
  120. package/src/esm/Line.js +62 -1
  121. package/src/esm/Line.js.map +1 -1
  122. package/src/esm/PlotBoilerplate.d.ts +37 -6
  123. package/src/esm/PlotBoilerplate.js +224 -125
  124. package/src/esm/PlotBoilerplate.js.map +1 -1
  125. package/src/esm/Polygon.d.ts +68 -5
  126. package/src/esm/Polygon.js +138 -22
  127. package/src/esm/Polygon.js.map +1 -1
  128. package/src/esm/Triangle.d.ts +52 -3
  129. package/src/esm/Triangle.js +77 -1
  130. package/src/esm/Triangle.js.map +1 -1
  131. package/src/esm/VEllipse.d.ts +62 -3
  132. package/src/esm/VEllipse.js +178 -17
  133. package/src/esm/VEllipse.js.map +1 -1
  134. package/src/esm/VEllipseSector.d.ts +86 -2
  135. package/src/esm/VEllipseSector.js +146 -7
  136. package/src/esm/VEllipseSector.js.map +1 -1
  137. package/src/esm/Vector.d.ts +12 -2
  138. package/src/esm/Vector.js +15 -2
  139. package/src/esm/Vector.js.map +1 -1
  140. package/src/esm/VertTuple.d.ts +28 -4
  141. package/src/esm/VertTuple.js +36 -3
  142. package/src/esm/VertTuple.js.map +1 -1
  143. package/src/esm/Vertex.d.ts +31 -4
  144. package/src/esm/Vertex.js +35 -1
  145. package/src/esm/Vertex.js.map +1 -1
  146. package/src/esm/interfaces/core.d.ts +67 -0
  147. package/src/esm/interfaces/core.js +4 -0
  148. package/src/esm/interfaces/core.js.map +1 -1
  149. package/src/esm/utils/algorithms/convexPolygonIncircle.d.ts +2 -1
  150. package/src/esm/utils/algorithms/convexPolygonIncircle.js +15 -7
  151. package/src/esm/utils/algorithms/convexPolygonIncircle.js.map +1 -1
  152. package/src/esm/utils/algorithms/createRandomizedPolygon.d.ts +14 -0
  153. package/src/esm/utils/algorithms/createRandomizedPolygon.js +28 -0
  154. package/src/esm/utils/algorithms/createRandomizedPolygon.js.map +1 -0
  155. package/src/esm/utils/createRandomizedPolygon.d.ts +14 -0
  156. package/src/esm/utils/createRandomizedPolygon.js +28 -0
  157. package/src/esm/utils/createRandomizedPolygon.js.map +1 -0
  158. package/src/esm/utils/datastructures/Color.d.ts +147 -1
  159. package/src/esm/utils/datastructures/Color.js +386 -42
  160. package/src/esm/utils/datastructures/Color.js.map +1 -1
  161. package/src/esm/utils/datastructures/ColorGradient.d.ts +79 -0
  162. package/src/esm/utils/datastructures/ColorGradient.js +166 -0
  163. package/src/esm/utils/datastructures/ColorGradient.js.map +1 -0
  164. package/src/esm/utils/dom/components/ColorGradientPicker.d.ts +245 -0
  165. package/src/esm/utils/dom/components/ColorGradientPicker.js +732 -0
  166. package/src/esm/utils/dom/components/ColorGradientPicker.js.map +1 -0
  167. package/src/esm/utils/dom/components/ColorGradientPickerJSX.d.ts +129 -0
  168. package/src/esm/utils/dom/components/ColorGradientPickerJSX.js +582 -0
  169. package/src/esm/utils/dom/components/ColorGradientPickerJSX.js.map +1 -0
  170. package/src/esm/utils/dom/components/ColorGradientSelector.d.ts +117 -0
  171. package/src/esm/utils/dom/components/ColorGradientSelector.js +332 -0
  172. package/src/esm/utils/dom/components/ColorGradientSelector.js.map +1 -0
  173. package/src/esm/utils/dom/components/Test.d.ts +7 -0
  174. package/src/esm/utils/dom/components/Test.js +26 -0
  175. package/src/esm/utils/dom/components/Test.js.map +1 -0
  176. package/src/esm/utils/dom/guiSizeToggler.js +1 -1
  177. package/src/esm/utils/dom/guiSizeToggler.js.map +1 -1
  178. package/src/esm/utils/helpers/BezierPathInteractionHelper.d.ts +16 -8
  179. package/src/esm/utils/helpers/BezierPathInteractionHelper.js +47 -27
  180. package/src/esm/utils/helpers/BezierPathInteractionHelper.js.map +1 -1
  181. package/src/esm/utils/helpers/CircleHelper.d.ts +10 -1
  182. package/src/esm/utils/helpers/CircleHelper.js +13 -2
  183. package/src/esm/utils/helpers/CircleHelper.js.map +1 -1
  184. package/src/esm/utils/helpers/CircleSectorHelper.d.ts +11 -2
  185. package/src/esm/utils/helpers/CircleSectorHelper.js +20 -20
  186. package/src/esm/utils/helpers/CircleSectorHelper.js.map +1 -1
  187. package/src/esm/utils/helpers/TriangleHelper.d.ts +57 -0
  188. package/src/esm/utils/helpers/TriangleHelper.js +78 -0
  189. package/src/esm/utils/helpers/TriangleHelper.js.map +1 -0
  190. package/src/esm/utils/helpers/VEllipseHelper.d.ts +32 -0
  191. package/src/esm/utils/helpers/VEllipseHelper.js +83 -0
  192. package/src/esm/utils/helpers/VEllipseHelper.js.map +1 -0
  193. package/src/esm/utils/helpers/VEllipseSectorHelper.d.ts +44 -4
  194. package/src/esm/utils/helpers/VEllipseSectorHelper.js +107 -24
  195. package/src/esm/utils/helpers/VEllipseSectorHelper.js.map +1 -1
  196. package/src/esm/utils/parsers/LinearColorGradientParser.d.ts +78 -0
  197. package/src/esm/utils/parsers/LinearColorGradientParser.js +217 -0
  198. package/src/esm/utils/parsers/LinearColorGradientParser.js.map +1 -0
  199. package/src/external.d.ts +9 -0
  200. package/src/ts/BezierPath.ts +58 -5
  201. package/src/ts/Bounds.ts +110 -6
  202. package/src/ts/Circle.ts +87 -5
  203. package/src/ts/CircleSector.ts +115 -5
  204. package/src/ts/CubicBezierCurve.ts +332 -42
  205. package/src/ts/Line.ts +66 -3
  206. package/src/ts/PlotBoilerplate.ts +236 -114
  207. package/src/ts/Polygon.ts +164 -29
  208. package/src/ts/Triangle.ts +85 -3
  209. package/src/ts/VEllipse.ts +214 -19
  210. package/src/ts/VEllipseSector.ts +154 -8
  211. package/src/ts/Vector.ts +16 -2
  212. package/src/ts/VertTuple.ts +39 -4
  213. package/src/ts/Vertex.ts +40 -4
  214. package/src/ts/interfaces/core.ts +73 -0
  215. package/src/ts/utils/algorithms/convexPolygonIncircle.ts +82 -78
  216. package/src/ts/utils/createRandomizedPolygon.ts +31 -0
  217. package/src/ts/utils/datastructures/Color.ts +423 -44
  218. package/src/ts/utils/datastructures/ColorGradient.ts +196 -0
  219. package/src/ts/utils/dom/components/ColorGradientPicker.tsx +877 -0
  220. package/src/ts/utils/dom/components/ColorGradientSelector.tsx +445 -0
  221. package/src/ts/utils/dom/components/Test.tsx +44 -0
  222. package/src/ts/utils/dom/components/_ColorGradientPicker_raw.ts_ +392 -0
  223. package/src/ts/utils/dom/guiSizeToggler.ts +1 -1
  224. package/src/ts/utils/helpers/BezierPathInteractionHelper.ts +61 -35
  225. package/src/ts/utils/helpers/CircleHelper.ts +17 -3
  226. package/src/ts/utils/helpers/CircleSectorHelper.ts +118 -126
  227. package/src/ts/utils/helpers/TriangleHelper.ts +102 -0
  228. package/src/ts/utils/helpers/VEllipseHelper.ts +115 -0
  229. package/src/ts/utils/helpers/VEllipseSectorHelper.ts +144 -26
  230. package/src/ts/utils/parsers/LinearColorGradientParser.ts +297 -0
@@ -87,8 +87,13 @@
87
87
  * @modified 2024-07-08 Adding `PlotBoilerplate.getGUI()` to retrieve the GUI instance.
88
88
  * @modified 2024-08-25 Extending main class `PlotBoilerplate` optional param `isBackdropFiltersEnabled`.
89
89
  * @modified 2024-12-02 Adding the `triggerRedraw` to the `removeAll` method.
90
+ * @modified 2025-05-07 Changing the return type of `removeVertex` from `void` to `boolean`.
91
+ * @modified 2025-05-07 Handling content changes now with `contentChangeListeners`.
92
+ * @modified 2025-05-07 Added `PlogBoilerplate.addContentChangeListener` and `.removeContentChangeListener`.
93
+ * @modified 2025-05-07 Moving full vectors now by default when vector point a is moved.
94
+ * @modified 2025-05-20 Applying `lineWith` parameter in the draw routine for vectors (had been missing).
90
95
  *
91
- * @version 1.20.0
96
+ * @version 1.21.1
92
97
  *
93
98
  * @file PlotBoilerplate
94
99
  * @fileoverview The main class.
@@ -213,6 +218,10 @@ var PlotBoilerplate = /** @class */ (function () {
213
218
  */
214
219
  function PlotBoilerplate(config, drawConfig) {
215
220
  var _b, _c;
221
+ /**
222
+ * A list of content change listeners.
223
+ */
224
+ this.contentChangeListeners = [];
216
225
  /**
217
226
  * A discrete timestamp to identify single render cycles.
218
227
  * Note that using system time milliseconds is not a safe way to identify render frames, as on modern powerful machines
@@ -600,6 +609,52 @@ var PlotBoilerplate = /** @class */ (function () {
600
609
  PlotBoilerplate.utils.setCSSscale(this.canvas, (_d = this.config.cssScaleX) !== null && _d !== void 0 ? _d : 1.0, (_e = this.config.cssScaleY) !== null && _e !== void 0 ? _e : 1.0);
601
610
  }
602
611
  };
612
+ /**
613
+ * Adds a new content change listener to this instance. Adding duplicates is not possible.
614
+ *
615
+ * @param {PBContentChangeListener} listener - The listenre to add.
616
+ * @method addContentChangeListener
617
+ * @instance
618
+ * @memberof PlotBoilerplate
619
+ * @returns {void}
620
+ */
621
+ PlotBoilerplate.prototype.addContentChangeListener = function (listener) {
622
+ for (var i in this.contentChangeListeners) {
623
+ if (this.contentChangeListeners[i] === listener) {
624
+ return;
625
+ }
626
+ }
627
+ this.contentChangeListeners.push(listener);
628
+ };
629
+ /**
630
+ * Removes an existing content change listener from this instance.
631
+ *
632
+ * @param {PBContentChangeListener} listener - The listenre to add.
633
+ * @method removeContentChangeListener
634
+ * @instance
635
+ * @memberof PlotBoilerplate
636
+ * @returns {void}
637
+ */
638
+ PlotBoilerplate.prototype.removeContentChangeListener = function (listener) {
639
+ for (var i = 0; i < this.contentChangeListeners.length; i++) {
640
+ if (this.contentChangeListeners[i] === listener) {
641
+ this.contentChangeListeners.splice(i, 1);
642
+ return;
643
+ }
644
+ }
645
+ };
646
+ PlotBoilerplate.prototype._fireContentChanged = function (addedDrawables, removedDrawables) {
647
+ for (var i in this.contentChangeListeners) {
648
+ var listener = this.contentChangeListeners[i];
649
+ if (listener && typeof listener === "function") {
650
+ listener({
651
+ type: addedDrawables.length > 0 ? "DRAWABLES_ADDED" : "DRAWABLES_REMOVED",
652
+ addedDrawables: addedDrawables,
653
+ removedDrawables: removedDrawables
654
+ });
655
+ }
656
+ }
657
+ };
603
658
  /**
604
659
  * Add a drawable object.<br>
605
660
  * <br>
@@ -624,100 +679,121 @@ var PlotBoilerplate = /** @class */ (function () {
624
679
  * @memberof PlotBoilerplate
625
680
  * @return {void}
626
681
  **/
627
- PlotBoilerplate.prototype.add = function (drawable, redraw) {
682
+ PlotBoilerplate.prototype.add = function (drawable, redraw, doNotFireEvent) {
628
683
  if (Array.isArray(drawable)) {
629
684
  var arr = drawable;
630
685
  for (var i = 0; i < arr.length; i++) {
631
- this.add(arr[i], false);
686
+ this.add(arr[i], false, doNotFireEvent);
632
687
  }
688
+ // !doNotFireEvent && this._fireContentChanged(arr, []);
633
689
  }
634
- else if (drawable instanceof Vertex_1.Vertex) {
635
- this.drawables.push(drawable);
636
- this.vertices.push(drawable);
637
- }
638
- else if (drawable instanceof Line_1.Line) {
639
- // Add some lines
640
- this.drawables.push(drawable);
641
- this.vertices.push(drawable.a);
642
- this.vertices.push(drawable.b);
643
- }
644
- else if (drawable instanceof Vector_1.Vector) {
645
- this.drawables.push(drawable);
646
- this.vertices.push(drawable.a);
647
- this.vertices.push(drawable.b);
648
- }
649
- else if (drawable instanceof VEllipse_1.VEllipse) {
650
- this.vertices.push(drawable.center);
651
- this.vertices.push(drawable.axis);
652
- this.drawables.push(drawable);
653
- drawable.center.listeners.addDragListener(function (event) {
654
- drawable.axis.add(event.params.dragAmount);
655
- });
656
- }
657
- else if (drawable instanceof VEllipseSector_1.VEllipseSector) {
658
- this.vertices.push(drawable.ellipse.center);
659
- this.vertices.push(drawable.ellipse.axis);
660
- this.drawables.push(drawable);
661
- drawable.ellipse.center.listeners.addDragListener(function (event) {
662
- drawable.ellipse.axis.add(event.params.dragAmount);
663
- });
664
- }
665
- else if (drawable instanceof Circle_1.Circle) {
666
- this.vertices.push(drawable.center);
667
- this.drawables.push(drawable);
668
- }
669
- else if (drawable instanceof CircleSector_1.CircleSector) {
670
- this.vertices.push(drawable.circle.center);
671
- this.drawables.push(drawable);
672
- }
673
- else if (drawable instanceof Polygon_1.Polygon) {
674
- this.drawables.push(drawable);
675
- for (var i = 0; i < drawable.vertices.length; i++) {
676
- this.vertices.push(drawable.vertices[i]);
690
+ else {
691
+ var addedDrawables = [drawable];
692
+ if (drawable instanceof Vertex_1.Vertex) {
693
+ this.drawables.push(drawable);
694
+ this.vertices.push(drawable);
677
695
  }
678
- }
679
- else if (drawable instanceof Triangle_1.Triangle) {
680
- this.drawables.push(drawable);
681
- this.vertices.push(drawable.a);
682
- this.vertices.push(drawable.b);
683
- this.vertices.push(drawable.c);
684
- }
685
- else if (drawable instanceof BezierPath_1.BezierPath) {
686
- this.drawables.push(drawable);
687
- var bezierPath = drawable;
688
- for (var i = 0; i < bezierPath.bezierCurves.length; i++) {
689
- if (!drawable.adjustCircular && i == 0) {
690
- this.vertices.push(bezierPath.bezierCurves[i].startPoint);
696
+ else if (drawable instanceof Line_1.Line) {
697
+ // Add some lines
698
+ this.drawables.push(drawable);
699
+ this.vertices.push(drawable.a);
700
+ this.vertices.push(drawable.b);
701
+ addedDrawables.push(drawable.a, drawable.b);
702
+ }
703
+ else if (drawable instanceof Vector_1.Vector) {
704
+ this.drawables.push(drawable);
705
+ this.vertices.push(drawable.a);
706
+ this.vertices.push(drawable.b);
707
+ addedDrawables.push(drawable.a, drawable.b);
708
+ drawable.a.listeners.addDragListener(function (event) {
709
+ drawable.b.add(event.params.dragAmount);
710
+ });
711
+ }
712
+ else if (drawable instanceof VEllipse_1.VEllipse) {
713
+ this.vertices.push(drawable.center);
714
+ this.vertices.push(drawable.axis);
715
+ addedDrawables.push(drawable.center, drawable.axis);
716
+ this.drawables.push(drawable);
717
+ drawable.center.listeners.addDragListener(function (event) {
718
+ drawable.axis.add(event.params.dragAmount);
719
+ });
720
+ }
721
+ else if (drawable instanceof VEllipseSector_1.VEllipseSector) {
722
+ this.vertices.push(drawable.ellipse.center);
723
+ this.vertices.push(drawable.ellipse.axis);
724
+ addedDrawables.push(drawable.ellipse.center, drawable.ellipse.axis);
725
+ this.drawables.push(drawable);
726
+ drawable.ellipse.center.listeners.addDragListener(function (event) {
727
+ drawable.ellipse.axis.add(event.params.dragAmount);
728
+ });
729
+ }
730
+ else if (drawable instanceof Circle_1.Circle) {
731
+ this.vertices.push(drawable.center);
732
+ addedDrawables.push(drawable.center);
733
+ this.drawables.push(drawable);
734
+ }
735
+ else if (drawable instanceof CircleSector_1.CircleSector) {
736
+ this.vertices.push(drawable.circle.center);
737
+ addedDrawables.push(drawable.circle.center);
738
+ this.drawables.push(drawable);
739
+ }
740
+ else if (drawable instanceof Polygon_1.Polygon) {
741
+ this.drawables.push(drawable);
742
+ for (var i = 0; i < drawable.vertices.length; i++) {
743
+ this.vertices.push(drawable.vertices[i]);
744
+ addedDrawables.push(drawable.vertices[i]);
691
745
  }
692
- this.vertices.push(bezierPath.bezierCurves[i].endPoint);
693
- this.vertices.push(bezierPath.bezierCurves[i].startControlPoint);
694
- this.vertices.push(bezierPath.bezierCurves[i].endControlPoint);
695
- bezierPath.bezierCurves[i].startControlPoint.attr.selectable = false;
696
- bezierPath.bezierCurves[i].endControlPoint.attr.selectable = false;
697
746
  }
698
- PlotBoilerplate.utils.enableBezierPathAutoAdjust(drawable);
699
- }
700
- else if (drawable instanceof PBImage_1.PBImage) {
701
- this.vertices.push(drawable.upperLeft);
702
- this.vertices.push(drawable.lowerRight);
703
- this.drawables.push(drawable);
704
- // Todo: think about a IDragEvent interface
705
- drawable.upperLeft.listeners.addDragListener(function (e) {
706
- drawable.lowerRight.add(e.params.dragAmount);
707
- });
708
- drawable.lowerRight.attr.selectable = false;
709
- }
710
- else if (drawable instanceof PBText_1.PBText) {
711
- this.vertices.push(drawable.anchor);
712
- this.drawables.push(drawable);
713
- drawable.anchor.attr.selectable = false;
714
- }
715
- else {
716
- throw "Cannot add drawable of unrecognized type: " + typeof drawable + ".";
747
+ else if (drawable instanceof Triangle_1.Triangle) {
748
+ this.drawables.push(drawable);
749
+ this.vertices.push(drawable.a);
750
+ this.vertices.push(drawable.b);
751
+ this.vertices.push(drawable.c);
752
+ addedDrawables.push(drawable.a, drawable.b, drawable.c);
753
+ }
754
+ else if (drawable instanceof BezierPath_1.BezierPath) {
755
+ this.drawables.push(drawable);
756
+ var bezierPath = drawable;
757
+ for (var i = 0; i < bezierPath.bezierCurves.length; i++) {
758
+ if (!drawable.adjustCircular && i == 0) {
759
+ this.vertices.push(bezierPath.bezierCurves[i].startPoint);
760
+ addedDrawables.push(bezierPath.bezierCurves[i].startPoint);
761
+ }
762
+ this.vertices.push(bezierPath.bezierCurves[i].endPoint);
763
+ this.vertices.push(bezierPath.bezierCurves[i].startControlPoint);
764
+ this.vertices.push(bezierPath.bezierCurves[i].endControlPoint);
765
+ addedDrawables.push(bezierPath.bezierCurves[i].endPoint, bezierPath.bezierCurves[i].startControlPoint, bezierPath.bezierCurves[i].endControlPoint);
766
+ bezierPath.bezierCurves[i].startControlPoint.attr.selectable = false;
767
+ bezierPath.bezierCurves[i].endControlPoint.attr.selectable = false;
768
+ }
769
+ PlotBoilerplate.utils.enableBezierPathAutoAdjust(drawable);
770
+ }
771
+ else if (drawable instanceof PBImage_1.PBImage) {
772
+ this.vertices.push(drawable.upperLeft);
773
+ this.vertices.push(drawable.lowerRight);
774
+ addedDrawables.push(drawable.upperLeft, drawable.lowerRight);
775
+ this.drawables.push(drawable);
776
+ // Todo: think about a IDragEvent interface
777
+ drawable.upperLeft.listeners.addDragListener(function (e) {
778
+ drawable.lowerRight.add(e.params.dragAmount);
779
+ });
780
+ drawable.lowerRight.attr.selectable = false;
781
+ }
782
+ else if (drawable instanceof PBText_1.PBText) {
783
+ this.vertices.push(drawable.anchor);
784
+ addedDrawables.push(drawable.anchor);
785
+ this.drawables.push(drawable);
786
+ drawable.anchor.attr.selectable = false;
787
+ }
788
+ else {
789
+ throw "Cannot add drawable of unrecognized type: " + typeof drawable + ".";
790
+ }
791
+ !doNotFireEvent && this._fireContentChanged(addedDrawables, []);
717
792
  }
718
793
  // This is a workaround for backwards compatibility when the 'redraw' param was not yet present.
719
- if (redraw || typeof redraw == "undefined")
794
+ if (redraw || typeof redraw == "undefined") {
720
795
  this.redraw();
796
+ }
721
797
  };
722
798
  /**
723
799
  * Remove a drawable object.<br>
@@ -737,88 +813,113 @@ var PlotBoilerplate = /** @class */ (function () {
737
813
  *
738
814
  * @param {Drawable|Array<Drawable>} drawable - The drawable (of one of the allowed class instance) to remove.
739
815
  * @param {boolean} [redraw=false]
816
+ * @param {removeWidth}
740
817
  * @method remove
741
818
  * @instance
742
819
  * @memberof PlotBoilerplate
743
820
  * @return {void}
744
821
  **/
745
- PlotBoilerplate.prototype.remove = function (drawable, redraw, removeWithVertices) {
822
+ PlotBoilerplate.prototype.remove = function (drawable, redraw, removeWithVertices, doNotFireEvent) {
746
823
  if (Array.isArray(drawable)) {
824
+ var removedDrawables_1 = [];
747
825
  for (var i = 0; i < drawable.length; i++) {
748
- this.remove(drawable[i], false, removeWithVertices);
826
+ if (this.remove(drawable[i], false, removeWithVertices, true)) {
827
+ removedDrawables_1.push(drawable[i]);
828
+ }
749
829
  }
750
830
  if (redraw) {
751
831
  this.redraw();
752
832
  }
753
- return;
833
+ !doNotFireEvent && this._fireContentChanged([], removedDrawables_1);
834
+ return removedDrawables_1.length > 0;
754
835
  }
755
836
  if (drawable instanceof Vertex_1.Vertex) {
756
- this.removeVertex(drawable, false);
837
+ var wasRemoved_1 = this.removeVertex(drawable, false, false);
757
838
  if (redraw) {
758
839
  this.redraw();
759
840
  }
841
+ !doNotFireEvent && this._fireContentChanged([], [drawable]);
842
+ return wasRemoved_1;
760
843
  }
844
+ var wasRemoved = false;
845
+ var removedDrawables = [];
761
846
  for (var i = 0; i < this.drawables.length; i++) {
762
847
  if (this.drawables[i] === drawable || this.drawables[i].uid === drawable.uid) {
763
848
  this.drawables.splice(i, 1);
849
+ removedDrawables.push(drawable);
764
850
  if (removeWithVertices) {
765
851
  // Check if some listeners need to be removed
766
852
  if (drawable instanceof Line_1.Line) {
767
853
  // Add some lines
768
- this.removeVertex(drawable.a, false);
769
- this.removeVertex(drawable.b, false);
854
+ this.removeVertex(drawable.a, false, true);
855
+ this.removeVertex(drawable.b, false, true);
856
+ removedDrawables.push(drawable.a, drawable.b);
770
857
  }
771
858
  else if (drawable instanceof Vector_1.Vector) {
772
- this.removeVertex(drawable.a, false);
773
- this.removeVertex(drawable.b, false);
859
+ this.removeVertex(drawable.a, false, true);
860
+ this.removeVertex(drawable.b, false, true);
861
+ removedDrawables.push(drawable.a, drawable.b);
774
862
  }
775
863
  else if (drawable instanceof VEllipse_1.VEllipse) {
776
- this.removeVertex(drawable.center, false);
777
- this.removeVertex(drawable.axis, false);
864
+ this.removeVertex(drawable.center, false, true);
865
+ this.removeVertex(drawable.axis, false, true);
866
+ removedDrawables.push(drawable.center, drawable.axis);
778
867
  }
779
868
  else if (drawable instanceof VEllipseSector_1.VEllipseSector) {
780
- this.removeVertex(drawable.ellipse.center);
781
- this.removeVertex(drawable.ellipse.axis);
869
+ this.removeVertex(drawable.ellipse.center, false, true);
870
+ this.removeVertex(drawable.ellipse.axis, false, true);
871
+ removedDrawables.push(drawable.ellipse.center, drawable.ellipse.axis);
782
872
  }
783
873
  else if (drawable instanceof Circle_1.Circle) {
784
- this.removeVertex(drawable.center, false);
874
+ this.removeVertex(drawable.center, false, true);
785
875
  }
786
876
  else if (drawable instanceof CircleSector_1.CircleSector) {
787
- this.removeVertex(drawable.circle.center, false);
877
+ this.removeVertex(drawable.circle.center, false, true);
878
+ removedDrawables.push(drawable.circle.center);
788
879
  }
789
880
  else if (drawable instanceof Polygon_1.Polygon) {
790
881
  // for( var i in drawable.vertices )
791
- for (var i = 0; i < drawable.vertices.length; i++)
792
- this.removeVertex(drawable.vertices[i], false);
882
+ for (var i = 0; i < drawable.vertices.length; i++) {
883
+ this.removeVertex(drawable.vertices[i], false, true);
884
+ removedDrawables.push(drawable.vertices[i]);
885
+ }
793
886
  }
794
887
  else if (drawable instanceof Triangle_1.Triangle) {
795
- this.removeVertex(drawable.a, false);
796
- this.removeVertex(drawable.b, false);
797
- this.removeVertex(drawable.c, false);
888
+ this.removeVertex(drawable.a, false, true);
889
+ this.removeVertex(drawable.b, false, true);
890
+ this.removeVertex(drawable.c, false, true);
891
+ removedDrawables.push(drawable.a, drawable.b, drawable.c);
798
892
  }
799
893
  else if (drawable instanceof BezierPath_1.BezierPath) {
800
894
  for (var i = 0; i < drawable.bezierCurves.length; i++) {
801
- this.removeVertex(drawable.bezierCurves[i].startPoint, false);
802
- this.removeVertex(drawable.bezierCurves[i].startControlPoint, false);
803
- this.removeVertex(drawable.bezierCurves[i].endControlPoint, false);
895
+ this.removeVertex(drawable.bezierCurves[i].startPoint, false, true);
896
+ this.removeVertex(drawable.bezierCurves[i].startControlPoint, false, true);
897
+ this.removeVertex(drawable.bezierCurves[i].endControlPoint, false, true);
898
+ removedDrawables.push(drawable.bezierCurves[i].startPoint, drawable.bezierCurves[i].startControlPoint, drawable.bezierCurves[i].endControlPoint);
804
899
  if (i + 1 == drawable.bezierCurves.length) {
805
- this.removeVertex(drawable.bezierCurves[i].endPoint, false);
900
+ this.removeVertex(drawable.bezierCurves[i].endPoint, false, true);
901
+ removedDrawables.push(drawable.bezierCurves[i].endPoint);
806
902
  }
807
903
  }
808
904
  }
809
905
  else if (drawable instanceof PBImage_1.PBImage) {
810
- this.removeVertex(drawable.upperLeft, false);
811
- this.removeVertex(drawable.lowerRight, false);
906
+ this.removeVertex(drawable.upperLeft, false, true);
907
+ this.removeVertex(drawable.lowerRight, false, true);
908
+ removedDrawables.push(drawable.upperLeft, drawable.lowerRight);
812
909
  }
813
910
  else if (drawable instanceof PBText_1.PBText) {
814
- this.removeVertex(drawable.anchor, false);
911
+ this.removeVertex(drawable.anchor, false, true);
912
+ removedDrawables.push(drawable.anchor);
815
913
  }
816
914
  } // END removeWithVertices
817
915
  if (redraw) {
818
916
  this.redraw();
819
917
  }
820
- }
821
- }
918
+ !doNotFireEvent && this._fireContentChanged([], removedDrawables);
919
+ wasRemoved = true;
920
+ } // END if
921
+ } // END for
922
+ return wasRemoved;
822
923
  };
823
924
  /**
824
925
  * Remove a vertex from the vertex list.<br>
@@ -828,18 +929,20 @@ var PlotBoilerplate = /** @class */ (function () {
828
929
  * @method removeVertex
829
930
  * @instance
830
931
  * @memberof PlotBoilerplate
831
- * @return {void}
932
+ * @return {boolean}
832
933
  **/
833
- PlotBoilerplate.prototype.removeVertex = function (vert, redraw) {
934
+ PlotBoilerplate.prototype.removeVertex = function (vert, redraw, doNotFireEvent) {
834
935
  for (var i = 0; i < this.vertices.length; i++) {
835
936
  if (this.vertices[i] === vert) {
836
937
  this.vertices.splice(i, 1);
837
938
  if (redraw) {
838
939
  this.redraw();
839
940
  }
840
- return;
941
+ !doNotFireEvent && this._fireContentChanged([], [vert]);
942
+ return true;
841
943
  }
842
944
  }
945
+ return false;
843
946
  };
844
947
  /**
845
948
  * Remove all elements.
@@ -854,13 +957,16 @@ var PlotBoilerplate = /** @class */ (function () {
854
957
  * @return {void}
855
958
  */
856
959
  PlotBoilerplate.prototype.removeAll = function (keepVertices, triggerRedraw) {
960
+ var removedDrawables = this.drawables;
857
961
  this.drawables = [];
858
962
  if (!Boolean(keepVertices)) {
963
+ removedDrawables = removedDrawables.concat(this.vertices);
859
964
  this.vertices = [];
860
965
  }
861
966
  if (triggerRedraw || typeof triggerRedraw === "undefined") {
862
967
  this.redraw();
863
968
  }
969
+ removedDrawables.length > 0 && this._fireContentChanged([], removedDrawables);
864
970
  };
865
971
  /**
866
972
  * Find the vertex near the given position.
@@ -1065,18 +1171,17 @@ var PlotBoilerplate = /** @class */ (function () {
1065
1171
  }
1066
1172
  else if (d instanceof Triangle_1.Triangle) {
1067
1173
  draw.polyline([d.a, d.b, d.c], false, this.drawConfig.triangle.color, this.drawConfig.triangle.lineWidth);
1068
- if (!this.drawConfig.drawHandlePoints)
1174
+ if (!this.drawConfig.drawHandlePoints) {
1069
1175
  d.a.attr.renderTime = d.b.attr.renderTime = d.c.attr.renderTime = renderTime;
1176
+ }
1070
1177
  }
1071
1178
  else if (d instanceof VEllipse_1.VEllipse) {
1072
1179
  if (this.drawConfig.drawHandleLines) {
1073
1180
  draw.setCurrentId("".concat(d.uid, "_e0"));
1074
1181
  draw.setCurrentClassName("".concat(d.className, "-v-line"));
1075
- // draw.line( d.center.clone().add(0,d.axis.y-d.center.y), d.axis, '#c8c8c8' );
1076
1182
  draw.handleLine(d.center.clone().add(0, d.signedRadiusV()).rotate(d.rotation, d.center), d.axis); // , "#c8c8c8");
1077
1183
  draw.setCurrentId("".concat(d.uid, "_e1"));
1078
1184
  draw.setCurrentClassName("".concat(d.className, "-h-line"));
1079
- // draw.line( d.center.clone().add(d.axis.x-d.center.x,0), d.axis, '#c8c8c8' );
1080
1185
  draw.handleLine(d.center.clone().add(d.signedRadiusH(), 0).rotate(d.rotation, d.center), d.axis); // , "#c8c8c8");
1081
1186
  }
1082
1187
  draw.setCurrentId(d.uid);
@@ -1092,12 +1197,6 @@ var PlotBoilerplate = /** @class */ (function () {
1092
1197
  else if (d instanceof VEllipseSector_1.VEllipseSector) {
1093
1198
  draw.setCurrentId(d.uid);
1094
1199
  draw.setCurrentClassName("".concat(d.className));
1095
- /* draw.ellipse( d.center,
1096
- // Math.abs(d.axis.x-d.center.x), Math.abs(d.axis.y-d.center.y),
1097
- d.radiusH(), d.radiusV(),
1098
- this.drawConfig.ellipse.color,
1099
- this.drawConfig.ellipse.lineWidth,
1100
- d.rotation ); */
1101
1200
  var data = VEllipseSector_1.VEllipseSector.ellipseSectorUtils.describeSVGArc(d.ellipse.center.x, d.ellipse.center.y, d.ellipse.radiusH(), d.ellipse.radiusV(), d.startAngle, d.endAngle, d.ellipse.rotation, { moveToStart: true });
1102
1201
  draw.path(data, this.drawConfig.ellipseSector.color, this.drawConfig.ellipseSector.lineWidth);
1103
1202
  }
@@ -1122,7 +1221,7 @@ var PlotBoilerplate = /** @class */ (function () {
1122
1221
  d.b.attr.renderTime = renderTime;
1123
1222
  }
1124
1223
  else if (d instanceof Vector_1.Vector) {
1125
- draw.arrow(d.a, d.b, this.drawConfig.vector.color);
1224
+ draw.arrow(d.a, d.b, this.drawConfig.vector.color, this.drawConfig.vector.lineWidth);
1126
1225
  if (this.drawConfig.drawHandlePoints && d.b.attr.selectable && d.b.attr.visible) {
1127
1226
  draw.setCurrentId("".concat(d.uid, "_h0"));
1128
1227
  draw.setCurrentClassName("".concat(d.className, "-handle"));