@crystaldesign/web-planner-logic 26.11.0-beta.3 → 26.11.0-beta.31

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 (119) hide show
  1. package/build/cjs/{DivaBoxPlanner-68cc1bd1.js → DivaBoxPlanner-c57ed0e3.js} +134 -47
  2. package/build/cjs/{DivaStandardPlanner-d44ae0e7.js → DivaStandardPlanner-6e46651d.js} +586 -332
  3. package/build/cjs/{DoorPlanner-1719cbe1.js → DoorPlanner-f86e825b.js} +3 -1
  4. package/build/cjs/{Host3DSignalR-a456221e.js → Host3DSignalR-9ae7bc58.js} +41 -24
  5. package/build/cjs/{LiviqueWWSHandler-f2afb4eb.js → LiviqueWWSHandler-a4f6eaa0.js} +3 -1
  6. package/build/cjs/{PfisterWWSHandler-8f522ab6.js → PfisterWWSHandler-b85b5d9c.js} +3 -1
  7. package/build/cjs/PlannerHandler2D-bec57353.js +544 -0
  8. package/build/cjs/{SeriousBasketHandler-b39f0556.js → SeriousBasketHandler-0fd56d93.js} +3 -1
  9. package/build/cjs/{ShelfPlanner-1dde2d7c.js → ShelfPlanner-0efb6dda.js} +262 -148
  10. package/build/cjs/{StandardWWSHandler-62ec343d.js → StandardWWSHandler-e535e9ab.js} +3 -1
  11. package/build/cjs/{index-d63749e4.js → index-21cc42e9.js} +10715 -9129
  12. package/build/cjs/index.js +13 -2
  13. package/build/esm/{DivaBoxPlanner-a347ef5d.js → DivaBoxPlanner-9a2e33e5.js} +134 -47
  14. package/build/esm/{DivaStandardPlanner-a8f0d722.js → DivaStandardPlanner-d9cad991.js} +585 -332
  15. package/build/esm/{DoorPlanner-60c065e5.js → DoorPlanner-d430b797.js} +3 -1
  16. package/build/esm/{Host3DSignalR-0c7e84a7.js → Host3DSignalR-f16742ea.js} +41 -24
  17. package/build/esm/{LiviqueWWSHandler-3df03404.js → LiviqueWWSHandler-4ebe33ed.js} +3 -1
  18. package/build/esm/{PfisterWWSHandler-28b609ef.js → PfisterWWSHandler-04416bc8.js} +3 -1
  19. package/build/esm/PlannerHandler2D-2fc26200.js +526 -0
  20. package/build/esm/{SeriousBasketHandler-276a8035.js → SeriousBasketHandler-c802bd9b.js} +3 -1
  21. package/build/esm/{ShelfPlanner-7380b831.js → ShelfPlanner-557172d3.js} +262 -148
  22. package/build/esm/{StandardWWSHandler-1d13f6a3.js → StandardWWSHandler-bdd24590.js} +3 -1
  23. package/build/esm/{index-358c0a3c.js → index-024475bf.js} +10711 -9129
  24. package/build/esm/index.js +3 -1
  25. package/build/types/web-planner-logic/src/index.d.ts +8 -3
  26. package/build/types/web-planner-logic/src/index.d.ts.map +1 -1
  27. package/build/types/web-planner-logic/src/interface/ArticleOptionStateType.d.ts +1 -0
  28. package/build/types/web-planner-logic/src/interface/ArticleOptionStateType.d.ts.map +1 -1
  29. package/build/types/web-planner-logic/src/interface/Articles/ArticleDataType.d.ts +13 -0
  30. package/build/types/web-planner-logic/src/interface/Articles/ArticleDataType.d.ts.map +1 -1
  31. package/build/types/web-planner-logic/src/interface/Articles/ArticleInfoType.d.ts +13 -0
  32. package/build/types/web-planner-logic/src/interface/Articles/ArticleInfoType.d.ts.map +1 -1
  33. package/build/types/web-planner-logic/src/interface/Articles/CatalogArticleDataType.d.ts +3 -0
  34. package/build/types/web-planner-logic/src/interface/Articles/CatalogArticleDataType.d.ts.map +1 -1
  35. package/build/types/web-planner-logic/src/interface/DivaCatalogDataType.d.ts +6 -1
  36. package/build/types/web-planner-logic/src/interface/DivaCatalogDataType.d.ts.map +1 -1
  37. package/build/types/web-planner-logic/src/interface/IDM/ArticleApi.d.ts +19 -18
  38. package/build/types/web-planner-logic/src/interface/IDM/ArticleApi.d.ts.map +1 -1
  39. package/build/types/web-planner-logic/src/interface/IDM/Decision.d.ts +1 -0
  40. package/build/types/web-planner-logic/src/interface/IDM/Decision.d.ts.map +1 -1
  41. package/build/types/web-planner-logic/src/interface/Planner/ISaveSetPlanner.d.ts +37 -0
  42. package/build/types/web-planner-logic/src/interface/Planner/ISaveSetPlanner.d.ts.map +1 -1
  43. package/build/types/web-planner-logic/src/interface/ShelfPlanner/ShelfAccessoiresView.d.ts +5 -0
  44. package/build/types/web-planner-logic/src/interface/ShelfPlanner/ShelfAccessoiresView.d.ts.map +1 -1
  45. package/build/types/web-planner-logic/src/interface/webPlannerParams/WebPlannerParamsType.d.ts +46 -2
  46. package/build/types/web-planner-logic/src/interface/webPlannerParams/WebPlannerParamsType.d.ts.map +1 -1
  47. package/build/types/web-planner-logic/src/logic/Article/ArticleOptionState.d.ts +2 -0
  48. package/build/types/web-planner-logic/src/logic/Article/ArticleOptionState.d.ts.map +1 -1
  49. package/build/types/web-planner-logic/src/logic/Article/DivaArticle.d.ts.map +1 -1
  50. package/build/types/web-planner-logic/src/logic/Article/DivaArticleHandler.d.ts.map +1 -1
  51. package/build/types/web-planner-logic/src/logic/Article/Engine/ArticleEngine.d.ts +4 -0
  52. package/build/types/web-planner-logic/src/logic/Article/Engine/ArticleEngine.d.ts.map +1 -1
  53. package/build/types/web-planner-logic/src/logic/Article/Engine/DivaArticleEngine.d.ts +2 -0
  54. package/build/types/web-planner-logic/src/logic/Article/Engine/DivaArticleEngine.d.ts.map +1 -1
  55. package/build/types/web-planner-logic/src/logic/Article/Engine/IDMArticleEngine.d.ts +39 -2
  56. package/build/types/web-planner-logic/src/logic/Article/Engine/IDMArticleEngine.d.ts.map +1 -1
  57. package/build/types/web-planner-logic/src/logic/ConfigTree/Shelfplanner/ShelfPlanner.d.ts +20 -0
  58. package/build/types/web-planner-logic/src/logic/ConfigTree/Shelfplanner/ShelfPlanner.d.ts.map +1 -1
  59. package/build/types/web-planner-logic/src/logic/ConfigTree/Shelfplanner/ShelfPlannerGrid.d.ts +31 -1
  60. package/build/types/web-planner-logic/src/logic/ConfigTree/Shelfplanner/ShelfPlannerGrid.d.ts.map +1 -1
  61. package/build/types/web-planner-logic/src/logic/DivaApiHandler.d.ts +25 -0
  62. package/build/types/web-planner-logic/src/logic/DivaApiHandler.d.ts.map +1 -1
  63. package/build/types/web-planner-logic/src/logic/DivaCatalogHandler.d.ts +1 -0
  64. package/build/types/web-planner-logic/src/logic/DivaCatalogHandler.d.ts.map +1 -1
  65. package/build/types/web-planner-logic/src/logic/DivaWebPlanner.d.ts +149 -95
  66. package/build/types/web-planner-logic/src/logic/DivaWebPlanner.d.ts.map +1 -1
  67. package/build/types/web-planner-logic/src/logic/Planner/BoxPlanner/ConstructionRulesHandler.d.ts +19 -0
  68. package/build/types/web-planner-logic/src/logic/Planner/BoxPlanner/ConstructionRulesHandler.d.ts.map +1 -1
  69. package/build/types/web-planner-logic/src/logic/Planner/BoxPlanner/DivaBoxPlanner.d.ts +15 -1
  70. package/build/types/web-planner-logic/src/logic/Planner/BoxPlanner/DivaBoxPlanner.d.ts.map +1 -1
  71. package/build/types/web-planner-logic/src/logic/Planner/DivaPlannerHandler.d.ts +11 -1
  72. package/build/types/web-planner-logic/src/logic/Planner/DivaPlannerHandler.d.ts.map +1 -1
  73. package/build/types/web-planner-logic/src/logic/Planner/DivaStandardPlanner.d.ts +31 -1
  74. package/build/types/web-planner-logic/src/logic/Planner/DivaStandardPlanner.d.ts.map +1 -1
  75. package/build/types/web-planner-logic/src/logic/Planner/PlannerUtils/DockingPointHandler.d.ts +9 -114
  76. package/build/types/web-planner-logic/src/logic/Planner/PlannerUtils/DockingPointHandler.d.ts.map +1 -1
  77. package/build/types/web-planner-logic/src/logic/Planner/PlannerUtils/PlannerHandler2D.d.ts +5 -7
  78. package/build/types/web-planner-logic/src/logic/Planner/PlannerUtils/PlannerHandler2D.d.ts.map +1 -1
  79. package/build/types/web-planner-logic/src/logic/Planner/PlannerUtils/SVGUtils.d.ts +5 -6
  80. package/build/types/web-planner-logic/src/logic/Planner/PlannerUtils/SVGUtils.d.ts.map +1 -1
  81. package/build/types/web-planner-logic/src/logic/Planner/Rendering/Host3DSignalR.d.ts.map +1 -1
  82. package/build/types/web-planner-logic/src/logic/Planner/Rendering/PlannerHandler3D.d.ts +17 -1
  83. package/build/types/web-planner-logic/src/logic/Planner/Rendering/PlannerHandler3D.d.ts.map +1 -1
  84. package/build/types/web-planner-logic/src/logic/Set/DivaSet.d.ts +2 -2
  85. package/build/types/web-planner-logic/src/logic/Set/DivaSet.d.ts.map +1 -1
  86. package/build/types/web-planner-logic/src/logic/Set/DivaSetHandler.d.ts +31 -3
  87. package/build/types/web-planner-logic/src/logic/Set/DivaSetHandler.d.ts.map +1 -1
  88. package/build/types/web-planner-logic/src/logic/Set/catalogXml/articleGeo.d.ts +9 -0
  89. package/build/types/web-planner-logic/src/logic/Set/catalogXml/articleGeo.d.ts.map +1 -0
  90. package/build/types/web-planner-logic/src/logic/Set/catalogXml/parseCatalogXml.d.ts +12 -0
  91. package/build/types/web-planner-logic/src/logic/Set/catalogXml/parseCatalogXml.d.ts.map +1 -0
  92. package/build/types/web-planner-logic/src/logic/Set/catalogXml/types.d.ts +66 -0
  93. package/build/types/web-planner-logic/src/logic/Set/catalogXml/types.d.ts.map +1 -0
  94. package/build/types/web-planner-logic/src/logic/bootMark.d.ts +71 -0
  95. package/build/types/web-planner-logic/src/logic/bootMark.d.ts.map +1 -0
  96. package/build/types/web-planner-logic/src/model/Articles/Article/CatalogArticleData.d.ts +1 -0
  97. package/build/types/web-planner-logic/src/model/Articles/Article/CatalogArticleData.d.ts.map +1 -1
  98. package/build/types/web-planner-logic/src/model/Articles/Article/IDMCatalogArticle.d.ts +12 -0
  99. package/build/types/web-planner-logic/src/model/Articles/Article/IDMCatalogArticle.d.ts.map +1 -1
  100. package/build/types/web-planner-logic/src/model/Catalog/CatalogData.d.ts +13 -0
  101. package/build/types/web-planner-logic/src/model/Catalog/CatalogData.d.ts.map +1 -1
  102. package/build/types/web-planner-logic/src/model/Catalog/IDMCatalogData.d.ts.map +1 -1
  103. package/build/types/web-planner-logic/src/model/Planner/DockingPoint.d.ts +1 -44
  104. package/build/types/web-planner-logic/src/model/Planner/DockingPoint.d.ts.map +1 -1
  105. package/build/types/web-planner-logic/src/model/Planner/PlannerElementData.d.ts +6 -1
  106. package/build/types/web-planner-logic/src/model/Planner/PlannerElementData.d.ts.map +1 -1
  107. package/build/types/web-planner-logic/src/test/engineFeatureDefaults.test.d.ts +2 -0
  108. package/build/types/web-planner-logic/src/test/engineFeatureDefaults.test.d.ts.map +1 -0
  109. package/build/types/web-planner-logic/src/test/idmPlannerPaletteView.test.d.ts +2 -0
  110. package/build/types/web-planner-logic/src/test/idmPlannerPaletteView.test.d.ts.map +1 -0
  111. package/build/types/web-planner-logic/src/test/parseSvgOltGeometry.test.d.ts +2 -0
  112. package/build/types/web-planner-logic/src/test/parseSvgOltGeometry.test.d.ts.map +1 -0
  113. package/build/types/web-planner-logic/src/test/partlistPosCountDecision.test.d.ts +2 -0
  114. package/build/types/web-planner-logic/src/test/partlistPosCountDecision.test.d.ts.map +1 -0
  115. package/build/types/web-planner-logic/src/test/stretchGoldenMaster.test.d.ts +2 -0
  116. package/build/types/web-planner-logic/src/test/stretchGoldenMaster.test.d.ts.map +1 -0
  117. package/package.json +5 -5
  118. package/build/cjs/PlannerHandler2D-dbe1d858.js +0 -2470
  119. package/build/esm/PlannerHandler2D-f8657005.js +0 -2455
@@ -1,26 +1,47 @@
1
+ import _toConsumableArray from '@babel/runtime/helpers/toConsumableArray';
1
2
  import _asyncToGenerator from '@babel/runtime/helpers/asyncToGenerator';
2
3
  import _classCallCheck from '@babel/runtime/helpers/classCallCheck';
3
4
  import _createClass from '@babel/runtime/helpers/createClass';
4
5
  import _defineProperty from '@babel/runtime/helpers/defineProperty';
5
6
  import _regeneratorRuntime from '@babel/runtime/regenerator';
6
- import { V as Vector3, c as Vector2, P as PlannerElementData, B as BoundingBox } from './index-358c0a3c.js';
7
+ import { V as Vector3, P as PlannerElementData, B as BoundingBox } from './index-024475bf.js';
7
8
  import DivaUtils, { DivaError, md5 } from '@crystaldesign/diva-utils';
8
- import { d as dockingPointHandlerInst, h as handler2D } from './PlannerHandler2D-f8657005.js';
9
+ import { computeDockedTransform } from '@crystaldesign/planner-2d-core';
10
+ import { d as dockingPointHandlerInst, h as handler2D } from './PlannerHandler2D-2fc26200.js';
9
11
  import '@babel/runtime/helpers/slicedToArray';
10
12
  import '@babel/runtime/helpers/objectWithoutProperties';
11
- import '@babel/runtime/helpers/toConsumableArray';
12
13
  import 'axios';
13
14
  import '@crystaldesign/basket-model';
14
15
  import '@babel/runtime/helpers/typeof';
16
+ import 'fast-xml-parser';
15
17
  import '@babel/runtime/helpers/possibleConstructorReturn';
16
18
  import '@babel/runtime/helpers/getPrototypeOf';
17
19
  import '@babel/runtime/helpers/inherits';
18
20
  import '@babel/runtime/helpers/wrapNativeSuper';
19
21
  import '@crystaldesign/basket-handler';
20
22
  import 'socket.io-client';
21
- import 'fabric';
22
- import 'w3c-xmlserializer';
23
+ import '@babel/runtime/helpers/get';
23
24
 
25
+ /** Configurator 2.0 set planner payload (`SetPlanData` after base64 decode). */
26
+
27
+ /** Legacy planner 1.x payload (no `v: 2` wrapper). */
28
+
29
+ function parseSetPlanData(setPlanData) {
30
+ var planDataString = DivaUtils.decodeBase64(setPlanData);
31
+ return JSON.parse(planDataString);
32
+ }
33
+ function isSavePlannerV2(planData) {
34
+ return planData.v === 2;
35
+ }
36
+
37
+ /** Article codex from a V2 or legacy element record. */
38
+ function saveElementArticleCodex(element) {
39
+ return element.articleCodex || element.Codex;
40
+ }
41
+
42
+ function _createForOfIteratorHelper(r, e) { var t = "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (!t) { if (Array.isArray(r) || (t = _unsupportedIterableToArray(r)) || e && r && "number" == typeof r.length) { t && (r = t); var _n = 0, F = function F() {}; return { s: F, n: function n() { return _n >= r.length ? { done: !0 } : { done: !1, value: r[_n++] }; }, e: function e(r) { throw r; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var o, a = !0, u = !1; return { s: function s() { t = t.call(r); }, n: function n() { var r = t.next(); return a = r.done, r; }, e: function e(r) { u = !0, o = r; }, f: function f() { try { a || null == t["return"] || t["return"](); } finally { if (u) throw o; } } }; }
43
+ function _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }
44
+ function _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }
24
45
  var LOG = DivaUtils.initLog('Planner', 'WEB-PLANNER-LOGIC');
25
46
  var ACC_DOCK_TYPES = ['AVO', 'AVU', 'AVC', 'AVS', 'AVN'];
26
47
  var DivaStandardPlanner = /*#__PURE__*/function () {
@@ -50,7 +71,13 @@ var DivaStandardPlanner = /*#__PURE__*/function () {
50
71
  _defineProperty(this, "nextElementId", 1);
51
72
  _defineProperty(this, "collisionHandler", void 0);
52
73
  _defineProperty(this, "dockToAVUorAVOororAVNorAVSorAVC", function (plannerElement, targetElements) {
53
- if (plannerElement.HasAVU) {
74
+ // Capability comes from the SVG-parsed docking points, not the catalog metadata counts
75
+ // (countAV*): the parsed SVG is the same source the targeted dock (tryDockElementToDP) uses, so
76
+ // auto-dock stays consistent with it even when the catalog's SVG detail info misses the counts.
77
+ var hasFreeDP = function hasFreeDP(type) {
78
+ return plannerElement.getFreeDockingPointsByType(type).length > 0;
79
+ };
80
+ if (hasFreeDP('AVU')) {
54
81
  //Try to dock Element to free AVR
55
82
  var successDP = dockingPointHandlerInst.tryDockElement(plannerElement, 'AVU', targetElements);
56
83
  if (successDP) {
@@ -66,28 +93,28 @@ var DivaStandardPlanner = /*#__PURE__*/function () {
66
93
  if (_successDP) return true;
67
94
  }
68
95
  }
69
- if (plannerElement.HasAVO) {
96
+ if (hasFreeDP('AVO')) {
70
97
  var _successDP2 = dockingPointHandlerInst.tryDockElement(plannerElement, 'AVO', targetElements);
71
98
  if (_successDP2) {
72
99
  _this.updateWorldPos(plannerElement, _successDP2);
73
100
  return true;
74
101
  }
75
102
  }
76
- if (plannerElement.HasAVN) {
103
+ if (hasFreeDP('AVN')) {
77
104
  var _successDP3 = dockingPointHandlerInst.tryDockElement(plannerElement, 'AVN', targetElements);
78
105
  if (_successDP3) {
79
106
  _this.updateWorldPos(plannerElement, _successDP3);
80
107
  return true;
81
108
  }
82
109
  }
83
- if (plannerElement.HasAVS) {
110
+ if (hasFreeDP('AVS')) {
84
111
  var _successDP4 = dockingPointHandlerInst.tryDockElement(plannerElement, 'AVS', targetElements);
85
112
  if (_successDP4) {
86
113
  _this.updateWorldPos(plannerElement, _successDP4);
87
114
  return true;
88
115
  }
89
116
  }
90
- if (plannerElement.HasAVC) {
117
+ if (hasFreeDP('AVC')) {
91
118
  var _successDP5 = dockingPointHandlerInst.tryDockElement(plannerElement, 'AVC', targetElements);
92
119
  if (_successDP5) {
93
120
  _this.updateWorldPos(plannerElement, _successDP5);
@@ -220,30 +247,7 @@ var DivaStandardPlanner = /*#__PURE__*/function () {
220
247
  var refElement = this.plannerElements.get(dockingPoint.OnElementId);
221
248
  var refDockingPoint = refElement.getDockingPointById(dockingPoint.OnDP.DpId);
222
249
  if (refDockingPoint == undefined) return updateConfig;
223
- var worldPosNewElement = new Vector3(0, 0, 0);
224
- var worldPosNewElementIgnoreOLF = new Vector3(0, 0, 0);
225
-
226
- // DP LocalWorldPos is OLF-corner-relative when HasOLFPolygon (from SVG). Convert to OLT-corner-relative for WorldPosCornerIgnoreOLF.
227
- var refDPLocalOlt = refElement.HasOLFPolygon ? new Vector2(refDockingPoint.LocalWorldPos.x - refElement.getOltLeft(), refDockingPoint.LocalWorldPos.z - refElement.getOltTop()) : new Vector2(refDockingPoint.LocalWorldPos.x, refDockingPoint.LocalWorldPos.z);
228
- var newDPLocalOlt = plannerElement.HasOLFPolygon ? new Vector2(dockingPoint.LocalWorldPos.x - plannerElement.getOltLeft(), dockingPoint.LocalWorldPos.z - plannerElement.getOltTop()) : new Vector2(dockingPoint.LocalWorldPos.x, dockingPoint.LocalWorldPos.z);
229
- var rotatedLocalRefDP = new Vector2(refDockingPoint.LocalWorldPos.x, refDockingPoint.LocalWorldPos.z);
230
- rotatedLocalRefDP = Vector2.rotateOrigin(rotatedLocalRefDP, refElement.RotDeg);
231
- var angleToRot = refElement.RotDeg + refDockingPoint.RotDeg - dockingPoint.RotDeg;
232
- plannerElement.RotDeg = angleToRot;
233
- var refWorldPosCor = refElement.WorldPosCorner;
234
- // For ref without OLF: use same corner for both alignments (no OLF/OLT split; WorldPosCornerIgnoreOLF getter also does this).
235
- var refWorldPosCorIgnoreOLF = refElement.HasOLFPolygon ? refElement.WorldPosCornerIgnoreOLF : refWorldPosCor;
236
- var rotatedLocalDP2D = Vector2.rotateOrigin(new Vector2(dockingPoint.LocalWorldPos.x, dockingPoint.LocalWorldPos.z), angleToRot);
237
- worldPosNewElement.x = refWorldPosCor.x + rotatedLocalRefDP.x - rotatedLocalDP2D.x;
238
- worldPosNewElement.y = refWorldPosCor.y + refDockingPoint.LocalWorldPos.y - dockingPoint.LocalWorldPos.y;
239
- worldPosNewElement.z = refWorldPosCor.z + rotatedLocalRefDP.y - rotatedLocalDP2D.y;
240
- var rotatedRefDPOlt = Vector2.rotateOrigin(refDPLocalOlt, refElement.RotDeg);
241
- var rotatedNewDPOlt = Vector2.rotateOrigin(newDPLocalOlt, angleToRot);
242
- worldPosNewElementIgnoreOLF.x = refWorldPosCorIgnoreOLF.x + rotatedRefDPOlt.x - rotatedNewDPOlt.x;
243
- worldPosNewElementIgnoreOLF.z = refWorldPosCorIgnoreOLF.z + rotatedRefDPOlt.y - rotatedNewDPOlt.y;
244
- worldPosNewElementIgnoreOLF.y = refWorldPosCorIgnoreOLF.y + refDockingPoint.LocalWorldPos.y - dockingPoint.LocalWorldPos.y;
245
- plannerElement.WorldPosCorner = worldPosNewElement;
246
- plannerElement.WorldPosCornerIgnoreOLF = worldPosNewElementIgnoreOLF;
250
+ this.applyDockTransform(plannerElement, refElement, dockingPoint, refDockingPoint);
247
251
  updateConfig = this.set.onDockingChanged(plannerElement.ElementId, refElement.ElementId, 'DOCK', dockingPoint.Type);
248
252
  var data = this.set.getPlannerData(plannerElement.ElementId);
249
253
  plannerElement.updatePlannerData(data);
@@ -252,15 +256,81 @@ var DivaStandardPlanner = /*#__PURE__*/function () {
252
256
  return updateConfig;
253
257
  }
254
258
 
259
+ /**
260
+ * Positions `plannerElement` so its `dockingPoint` aligns to `refElement`'s `refDockingPoint`
261
+ * (rotation + OLF/OLT-aware translation). Mutates only the element's world position and rotation —
262
+ * NOT the docking relations — so it is reusable for a non-committing snap preview
263
+ * ({@link getDockSnapPreview}) as well as the real dock ({@link updateWorldPos}).
264
+ */
265
+ }, {
266
+ key: "applyDockTransform",
267
+ value: function applyDockTransform(plannerElement, refElement, dockingPoint, refDockingPoint) {
268
+ var dockedTransform = computeDockedTransform(refElement, refDockingPoint, plannerElement, dockingPoint);
269
+ plannerElement.RotDeg = dockedTransform.rotDeg;
270
+ plannerElement.WorldPosCorner = new Vector3(dockedTransform.worldPosCorner.x, dockedTransform.worldPosCorner.y, dockedTransform.worldPosCorner.z);
271
+ plannerElement.WorldPosCornerIgnoreOLF = new Vector3(dockedTransform.worldPosCornerIgnoreOLF.x, dockedTransform.worldPosCornerIgnoreOLF.y, dockedTransform.worldPosCornerIgnoreOLF.z);
272
+ }
273
+
274
+ /**
275
+ * Non-committing preview of where `elementId` would auto-snap if released now: runs the same
276
+ * dockable-pair search as END, and for the closest pair computes the docked transform via
277
+ * {@link applyDockTransform} (apply → read → restore, no docking relations touched). Returns the
278
+ * delta from the element's current transform (cm / deg), or null if nothing is in snapping range.
279
+ * `excludeElementIds` skips the element's own move-group so it doesn't "snap" to siblings that
280
+ * are translating with it.
281
+ */
282
+ }, {
283
+ key: "getDockSnapPreview",
284
+ value: function getDockSnapPreview(elementId, autoDockingDistance) {
285
+ var excludeElementIds = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : [];
286
+ var element = this.plannerElements.get(elementId);
287
+ if (!element) return null;
288
+ var targets = this.getAllPlannerElements().filter(function (e) {
289
+ return e.getElementId() !== elementId && !excludeElementIds.includes(e.getElementId());
290
+ });
291
+ var pairs = dockingPointHandlerInst.searchDockableElementsInArea(element, targets, autoDockingDistance);
292
+ if (!pairs || pairs.size === 0) return null;
293
+ var best;
294
+ pairs.forEach(function (p) {
295
+ if (best == undefined || p.distance < best.distance) best = p;
296
+ });
297
+ if (best == undefined) return null;
298
+ var targetElement = this.plannerElements.get(best.targetDP.ElementId);
299
+ if (!targetElement) return null;
300
+ var savedRot = element.RotDeg;
301
+ var savedCenter = element.WorldPosCenter;
302
+ var savedX = savedCenter.x,
303
+ savedY = savedCenter.y,
304
+ savedZ = savedCenter.z;
305
+ this.applyDockTransform(element, targetElement, best.sourceDP, best.targetDP);
306
+ var snapped = element.WorldPosCenter;
307
+ var result = {
308
+ dx: snapped.x - savedX,
309
+ dz: snapped.z - savedZ,
310
+ dRotDeg: element.RotDeg - savedRot
311
+ };
312
+ // Restore — the preview must leave the planner state untouched.
313
+ element.RotDeg = savedRot;
314
+ element.WorldPosCenter = new Vector3(savedX, savedY, savedZ);
315
+ return result;
316
+ }
317
+
255
318
  /**
256
319
  * This function updates the position information of all elements. It is called after updating the SVG of 1 element.
257
320
  * The position is updated based on the posNr.
258
321
  * At the end - the collision is calculated
322
+ * @param changedElementIds elements whose SVG was reloaded this cycle (their docking geometry may
323
+ * have moved, e.g. an AVC shifted by stretch areas). Elements docked - directly or transitively -
324
+ * to one of them are re-anchored to the moved partner after the PosNr walk, which on its own only
325
+ * propagates forward in PosNr order and prefers AVL over AVC anchors.
259
326
  */
260
327
  }, {
261
328
  key: "updateAllElementsWorldPos",
262
- value: function updateAllElementsWorldPos(checkCollisionSingleElementId) {
329
+ value: function updateAllElementsWorldPos(checkCollisionSingleElementId, changedElementIds) {
263
330
  if (this.doDisablePlanner2D) return false;
331
+ var getDockedDPsInPriorityOrder = function getDockedDPsInPriorityOrder(element) {
332
+ return element.getDockingDockingPointsByType('AVL').concat(element.getDockingDockingPointsByType('AVR')).concat(element.getDockingDockingPointsByType('AVU')).concat(element.getDockingDockingPointsByType('AVO')).concat(element.getDockingDockingPointsByType('AVN')).concat(element.getDockingDockingPointsByType('AVS')).concat(element.getDockingDockingPointsByType('AVC'));
333
+ };
264
334
  var updateConfig = false;
265
335
  var sortedPlannerElementsbyPosNr = [];
266
336
  var accElems = [];
@@ -281,7 +351,7 @@ var DivaStandardPlanner = /*#__PURE__*/function () {
281
351
  var element = sortedPlannerElementsbyPosNr[i];
282
352
  alreadyCorrectedId.push(element.ElementId);
283
353
  if (i > firstI) {
284
- var dockingPoints = element.getDockingDockingPointsByType('AVL').concat(element.getDockingDockingPointsByType('AVR')).concat(element.getDockingDockingPointsByType('AVU')).concat(element.getDockingDockingPointsByType('AVO')).concat(element.getDockingDockingPointsByType('AVN')).concat(element.getDockingDockingPointsByType('AVS')).concat(element.getDockingDockingPointsByType('AVC'));
354
+ var dockingPoints = getDockedDPsInPriorityOrder(element);
285
355
  for (var j = 0; j < dockingPoints.length; j++) {
286
356
  //Nur wenn er auf ein element schaut das schon gedockt ist korrigieren
287
357
  if (alreadyCorrectedId.indexOf(dockingPoints[j].OnElementId) >= 0) {
@@ -292,6 +362,38 @@ var DivaStandardPlanner = /*#__PURE__*/function () {
292
362
  }
293
363
  }
294
364
  }
365
+
366
+ // The walk above anchors each element to its FIRST docked partner in AVL-first priority and
367
+ // only propagates forward in PosNr order - both hide a geometry change in a reloaded partner
368
+ // (e.g. an AVC line shifted by stretch areas). Sweep outward from the reloaded elements:
369
+ // re-anchor every element docked - directly or transitively - to a moved partner, until stable.
370
+ if (changedElementIds && changedElementIds.length > 0) {
371
+ var moved = new Set(changedElementIds);
372
+ var progressed = true;
373
+ while (progressed) {
374
+ progressed = false;
375
+ var _iterator = _createForOfIteratorHelper(sortedPlannerElementsbyPosNr),
376
+ _step;
377
+ try {
378
+ for (_iterator.s(); !(_step = _iterator.n()).done;) {
379
+ var _element = _step.value;
380
+ if (!_element || moved.has(_element.ElementId)) continue;
381
+ var dpToMovedPartner = getDockedDPsInPriorityOrder(_element).find(function (dp) {
382
+ return moved.has(dp.OnElementId);
383
+ });
384
+ if (dpToMovedPartner) {
385
+ updateConfig = this.updateWorldPos(_element, dpToMovedPartner) || updateConfig;
386
+ moved.add(_element.ElementId);
387
+ progressed = true;
388
+ }
389
+ }
390
+ } catch (err) {
391
+ _iterator.e(err);
392
+ } finally {
393
+ _iterator.f();
394
+ }
395
+ }
396
+ }
295
397
  this.checkCollision(false, checkCollisionSingleElementId);
296
398
  return updateConfig;
297
399
  }
@@ -334,39 +436,39 @@ var DivaStandardPlanner = /*#__PURE__*/function () {
334
436
  plannerElement.WorldPosCenter = setToTransform.transform.worldPosCenter;
335
437
  plannerElement.RotDeg = setToTransform.transform.rotDeg;
336
438
  this.set.onDockingChanged(plannerElement.ElementId, -1, 'NOT_DOCKED');
337
- _context.next = 47;
439
+ _context.next = 48;
338
440
  break;
339
441
  case 8:
340
442
  //Nun unterscheidet man, ob man das Element zu einem bestimmten vorselektierten Element Docken will , zu einem vorselektierten DockingPoint oder an eine Freie Planung.
341
443
  dockingFound = false;
342
444
  if (!dockingPointInfos) {
343
- _context.next = 46;
445
+ _context.next = 47;
344
446
  break;
345
447
  }
346
448
  i = 0;
347
449
  case 11:
348
450
  if (!(i < dockingPointInfos.length)) {
349
- _context.next = 46;
451
+ _context.next = 47;
350
452
  break;
351
453
  }
352
454
  targetElemIdToDock = dockingPointInfos[i].targetElemIdToDock;
353
455
  targetDockingPointId = dockingPointInfos[i].targetDockingPointId;
354
456
  if (!(targetElemIdToDock && targetElemIdToDock > -1 && this.plannerElements.has(targetElemIdToDock))) {
355
- _context.next = 43;
457
+ _context.next = 44;
356
458
  break;
357
459
  }
358
460
  if (!(targetDockingPointId && targetDockingPointId != '')) {
359
- _context.next = 31;
461
+ _context.next = 32;
360
462
  break;
361
463
  }
362
464
  targetElem = this.plannerElements.get(targetElemIdToDock);
363
465
  if (!targetElem) {
364
- _context.next = 29;
466
+ _context.next = 30;
365
467
  break;
366
468
  }
367
469
  targetDP = targetElem.getDockingPointById(targetDockingPointId);
368
470
  if (!targetDP) {
369
- _context.next = 29;
471
+ _context.next = 30;
370
472
  break;
371
473
  }
372
474
  successDP = dockingPointHandlerInst.tryDockElementToDP(plannerElement, targetElem, targetDP);
@@ -376,17 +478,21 @@ var DivaStandardPlanner = /*#__PURE__*/function () {
376
478
  }
377
479
  this.updateWorldPos(plannerElement, successDP);
378
480
  dockingFound = true;
379
- _context.next = 29;
481
+ _context.next = 30;
380
482
  break;
381
483
  case 26:
382
484
  _context.next = 28;
383
485
  return this.tryToDockWithDifferentSVGWithFormula(plannerElement, targetElemIdToDock);
384
486
  case 28:
385
- success = _context.sent;
386
- case 29:
387
- _context.next = 43;
487
+ if (!_context.sent) {
488
+ _context.next = 30;
489
+ break;
490
+ }
491
+ dockingFound = true;
492
+ case 30:
493
+ _context.next = 44;
388
494
  break;
389
- case 31:
495
+ case 32:
390
496
  success = false;
391
497
  if (plannerElement.HasAVL || plannerElement.HasAVR) {
392
498
  success = this.dockToAVLorAVR(plannerElement, [this.plannerElements.get(targetElemIdToDock)]);
@@ -395,28 +501,28 @@ var DivaStandardPlanner = /*#__PURE__*/function () {
395
501
  success = this.dockToAVUorAVOororAVNorAVSorAVC(plannerElement, [this.plannerElements.get(targetElemIdToDock)]);
396
502
  }
397
503
  if (success) {
398
- _context.next = 42;
504
+ _context.next = 43;
399
505
  break;
400
506
  }
401
- _context.next = 37;
507
+ _context.next = 38;
402
508
  return this.tryToDockWithDifferentSVGWithFormula(plannerElement, targetElemIdToDock);
403
- case 37:
509
+ case 38:
404
510
  success = _context.sent;
405
511
  if (success) {
406
- _context.next = 42;
512
+ _context.next = 43;
407
513
  break;
408
514
  }
409
- _context.next = 41;
515
+ _context.next = 42;
410
516
  return this.addElementToWorld(plannerElement, undefined, undefined, undefined, 50);
411
- case 41:
412
- return _context.abrupt("return");
413
517
  case 42:
414
- if (success) dockingFound = true;
518
+ return _context.abrupt("return");
415
519
  case 43:
520
+ if (success) dockingFound = true;
521
+ case 44:
416
522
  i++;
417
523
  _context.next = 11;
418
524
  break;
419
- case 46:
525
+ case 47:
420
526
  if (!dockingFound) {
421
527
  allPlannerElements = this.getAllPlannerElements();
422
528
  _success = this.dockToAVLorAVR(plannerElement, allPlannerElements);
@@ -437,13 +543,13 @@ var DivaStandardPlanner = /*#__PURE__*/function () {
437
543
  }
438
544
  }
439
545
  }
440
- case 47:
546
+ case 48:
441
547
  this.updatePlannerPosNr();
442
548
  this.updateAllElementsWorldPos();
443
549
  this.updatePlannerPosNr();
444
550
  this.checkCollision(false, plannerElement.getElementId());
445
551
  this.updatePlannerBoundingBox();
446
- case 52:
552
+ case 53:
447
553
  case "end":
448
554
  return _context.stop();
449
555
  }
@@ -458,7 +564,7 @@ var DivaStandardPlanner = /*#__PURE__*/function () {
458
564
  key: "tryToDockWithDifferentSVGWithFormula",
459
565
  value: function () {
460
566
  var _tryToDockWithDifferentSVGWithFormula = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee2(plannerElement, targetElemIdToDock) {
461
- var success, article, origVariantValues, svgsWithFormula, i, elements, variantValues, vv, key, v, _i2, _vv, _elements, _variantValues, _key, _elements2, _variantValues2, _key2;
567
+ var success, article, origVariantValues, svgsWithFormula, i, vv, targetFilterCandidates, _i2, v, _i3, elements, variantValues, key;
462
568
  return _regeneratorRuntime.wrap(function _callee2$(_context2) {
463
569
  while (1) switch (_context2.prev = _context2.next) {
464
570
  case 0:
@@ -468,92 +574,107 @@ var DivaStandardPlanner = /*#__PURE__*/function () {
468
574
  origVariantValues = article === null || article === void 0 ? void 0 : article.VariantValues;
469
575
  svgsWithFormula = plannerElement.getSVGsWithFormula();
470
576
  if (!(plannerElement.FilterAVL.length || plannerElement.FilterAVR.length)) {
471
- _context2.next = 47;
577
+ _context2.next = 52;
472
578
  break;
473
579
  }
474
580
  if (!(svgsWithFormula !== null && svgsWithFormula !== void 0 && svgsWithFormula.length)) {
475
- _context2.next = 22;
581
+ _context2.next = 18;
476
582
  break;
477
583
  }
478
584
  i = 0;
479
585
  case 7:
480
586
  if (!(i < svgsWithFormula.length)) {
481
- _context2.next = 22;
587
+ _context2.next = 18;
482
588
  break;
483
589
  }
484
- elements = new Map();
485
- variantValues = new Map();
486
590
  vv = DivaUtils.getVariantValuesFromRule(svgsWithFormula[i].JsFormula, {});
487
- for (key in vv) {
488
- variantValues.set(key, vv[key]);
489
- }
490
- elements.set(plannerElement.ElementId, variantValues);
491
- _context2.next = 15;
492
- return this.set.updateCfgValuesByPlanner(elements, true);
493
- case 15:
494
- success = this.dockToAVLorAVR(plannerElement, [this.plannerElements.get(targetElemIdToDock)]);
591
+ _context2.next = 11;
592
+ return this.applyVariantValuesAndTryDock(plannerElement, targetElemIdToDock, vv);
593
+ case 11:
594
+ success = _context2.sent;
495
595
  if (!success) {
496
- _context2.next = 19;
596
+ _context2.next = 15;
497
597
  break;
498
598
  }
499
599
  //svg did match
500
600
  LOG.debug('svgWithFormula nr: ' + i + ' did dock: ' + svgsWithFormula[i].SVG);
501
- return _context2.abrupt("break", 22);
502
- case 19:
601
+ return _context2.abrupt("break", 18);
602
+ case 15:
503
603
  i++;
504
604
  _context2.next = 7;
505
605
  break;
506
- case 22:
606
+ case 18:
607
+ if (!(!success && article)) {
608
+ _context2.next = 31;
609
+ break;
610
+ }
611
+ targetFilterCandidates = this.getVariantValuesMatchingTargetFilters(article, this.plannerElements.get(targetElemIdToDock));
612
+ _i2 = 0;
613
+ case 21:
614
+ if (!(_i2 < targetFilterCandidates.length && _i2 < 20)) {
615
+ _context2.next = 31;
616
+ break;
617
+ }
618
+ _context2.next = 24;
619
+ return this.applyVariantValuesAndTryDock(plannerElement, targetElemIdToDock, targetFilterCandidates[_i2]);
620
+ case 24:
621
+ success = _context2.sent;
622
+ if (!success) {
623
+ _context2.next = 28;
624
+ break;
625
+ }
626
+ LOG.debug('following variantValues matching the target avl/avr filter did dock: ', targetFilterCandidates[_i2]);
627
+ return _context2.abrupt("break", 31);
628
+ case 28:
629
+ _i2++;
630
+ _context2.next = 21;
631
+ break;
632
+ case 31:
507
633
  //other logic. look for decisions with featrue 90 or 89 and try change the options that influence 90 - 89
508
634
  v = plannerElement.getVaraintValuesInfluencingAVLAVRFilter();
509
635
  if (!(v !== null && v !== void 0 && v.length && !success)) {
510
- _context2.next = 40;
636
+ _context2.next = 44;
511
637
  break;
512
638
  }
513
- _i2 = 0;
514
- case 25:
515
- if (!(_i2 < v.length && _i2 < 20)) {
516
- _context2.next = 40;
639
+ _i3 = 0;
640
+ case 34:
641
+ if (!(_i3 < v.length && _i3 < 20)) {
642
+ _context2.next = 44;
517
643
  break;
518
644
  }
519
- _vv = v[_i2];
520
- _elements = new Map();
521
- _variantValues = new Map();
522
- for (_key in _vv) {
523
- _variantValues.set(_key, _vv[_key]);
524
- }
525
- _elements.set(plannerElement.ElementId, _variantValues);
526
- _context2.next = 33;
527
- return this.set.updateCfgValuesByPlanner(_elements, true);
528
- case 33:
529
- success = this.dockToAVLorAVR(plannerElement, [this.plannerElements.get(targetElemIdToDock)]);
645
+ _context2.next = 37;
646
+ return this.applyVariantValuesAndTryDock(plannerElement, targetElemIdToDock, v[_i3]);
647
+ case 37:
648
+ success = _context2.sent;
530
649
  if (!success) {
531
- _context2.next = 37;
650
+ _context2.next = 41;
532
651
  break;
533
652
  }
534
653
  //variantValues did match
535
- LOG.debug('following variantValues did dock: ', _variantValues);
536
- return _context2.abrupt("break", 40);
537
- case 37:
538
- _i2++;
539
- _context2.next = 25;
654
+ LOG.debug('following variantValues did dock: ', v[_i3]);
655
+ return _context2.abrupt("break", 44);
656
+ case 41:
657
+ _i3++;
658
+ _context2.next = 34;
540
659
  break;
541
- case 40:
660
+ case 44:
542
661
  if (success) {
543
- _context2.next = 47;
662
+ _context2.next = 52;
544
663
  break;
545
664
  }
546
- _elements2 = new Map();
547
- _variantValues2 = new Map();
548
- for (_key2 in origVariantValues) {
549
- _variantValues2.set(_key2, origVariantValues[_key2]);
665
+ elements = new Map();
666
+ variantValues = new Map();
667
+ for (key in origVariantValues) {
668
+ variantValues.set(key, origVariantValues[key]);
550
669
  }
551
- _elements2.set(plannerElement.ElementId, _variantValues2);
552
- _context2.next = 47;
553
- return this.set.updateCfgValuesByPlanner(_elements2, true);
554
- case 47:
670
+ elements.set(plannerElement.ElementId, variantValues);
671
+ _context2.next = 51;
672
+ return this.set.updateCfgValuesByPlanner(elements, true);
673
+ case 51:
674
+ if (article) this.commitPendingConnectorFilters(article);
675
+ case 52:
555
676
  return _context2.abrupt("return", success);
556
- case 48:
677
+ case 53:
557
678
  case "end":
558
679
  return _context2.stop();
559
680
  }
@@ -564,6 +685,91 @@ var DivaStandardPlanner = /*#__PURE__*/function () {
564
685
  }
565
686
  return tryToDockWithDifferentSVGWithFormula;
566
687
  }()
688
+ }, {
689
+ key: "applyVariantValuesAndTryDock",
690
+ value: function () {
691
+ var _applyVariantValuesAndTryDock = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee3(plannerElement, targetElemIdToDock, variantValuesToApply) {
692
+ var elements, variantValues, key, article;
693
+ return _regeneratorRuntime.wrap(function _callee3$(_context3) {
694
+ while (1) switch (_context3.prev = _context3.next) {
695
+ case 0:
696
+ elements = new Map();
697
+ variantValues = new Map();
698
+ for (key in variantValuesToApply) {
699
+ variantValues.set(key, variantValuesToApply[key]);
700
+ }
701
+ elements.set(plannerElement.ElementId, variantValues);
702
+ _context3.next = 6;
703
+ return this.set.updateCfgValuesByPlanner(elements, true);
704
+ case 6:
705
+ article = this.set.getArticleByElementId(plannerElement.ElementId);
706
+ if (article) this.commitPendingConnectorFilters(article);
707
+ return _context3.abrupt("return", this.dockToAVLorAVR(plannerElement, [this.plannerElements.get(targetElemIdToDock)]));
708
+ case 9:
709
+ case "end":
710
+ return _context3.stop();
711
+ }
712
+ }, _callee3, this);
713
+ }));
714
+ function applyVariantValuesAndTryDock(_x7, _x8, _x9) {
715
+ return _applyVariantValuesAndTryDock.apply(this, arguments);
716
+ }
717
+ return applyVariantValuesAndTryDock;
718
+ }() //the engines only commit option-derived connector filters when the svg swaps, but while probing dock configurations the filters must follow the configuration even without a swap
719
+ }, {
720
+ key: "commitPendingConnectorFilters",
721
+ value: function commitPendingConnectorFilters(article) {
722
+ if (article.newPossibleAVRFilters) {
723
+ article.avr = article.newPossibleAVRFilters;
724
+ article.newPossibleAVRFilters = undefined;
725
+ }
726
+ if (article.newPossibleAVLFilters) {
727
+ article.avl = article.newPossibleAVLFilters;
728
+ article.newPossibleAVLFilters = undefined;
729
+ }
730
+ }
731
+ }, {
732
+ key: "getVariantValuesMatchingTargetFilters",
733
+ value: function getVariantValuesMatchingTargetFilters(article, targetElement) {
734
+ if (!targetElement) return [];
735
+ var optPrefix = !article.CatalogData.isIDMFormat ? 'OPT' : '';
736
+ var opvPrefix = !article.CatalogData.isIDMFormat ? 'OPV' : '';
737
+ var candidates = [];
738
+ var seen = new Set();
739
+ var collect = function collect(connectorFeature, targetFilters) {
740
+ var _iterator2 = _createForOfIteratorHelper(targetFilters),
741
+ _step2;
742
+ try {
743
+ for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {
744
+ var filter = _step2.value;
745
+ var _iterator3 = _createForOfIteratorHelper(article.getVariantValuesInfluencingOptions([optPrefix + connectorFeature], opvPrefix + filter)),
746
+ _step3;
747
+ try {
748
+ for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) {
749
+ var vv = _step3.value;
750
+ var key = JSON.stringify(vv);
751
+ if (!seen.has(key)) {
752
+ seen.add(key);
753
+ candidates.push(vv);
754
+ }
755
+ }
756
+ } catch (err) {
757
+ _iterator3.e(err);
758
+ } finally {
759
+ _iterator3.f();
760
+ }
761
+ }
762
+ } catch (err) {
763
+ _iterator2.e(err);
764
+ } finally {
765
+ _iterator2.f();
766
+ }
767
+ };
768
+ //this article's AVL side (feature 89) docks against the target's AVR side and vice versa
769
+ collect('89', targetElement.FilterAVR);
770
+ collect('90', targetElement.FilterAVL);
771
+ return candidates;
772
+ }
567
773
  }, {
568
774
  key: "dockToAVLorAVR",
569
775
  value: function dockToAVLorAVR(plannerElement, targetElements) {
@@ -741,31 +947,31 @@ var DivaStandardPlanner = /*#__PURE__*/function () {
741
947
  }, {
742
948
  key: "updatePlanner",
743
949
  value: function () {
744
- var _updatePlanner = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee3() {
950
+ var _updatePlanner = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee4() {
745
951
  var allPlannerElements, elemtsWhereSomethingChanged, i, elem, doReload, elementsToDelete, elementsLostDockingRelation;
746
- return _regeneratorRuntime.wrap(function _callee3$(_context3) {
747
- while (1) switch (_context3.prev = _context3.next) {
952
+ return _regeneratorRuntime.wrap(function _callee4$(_context4) {
953
+ while (1) switch (_context4.prev = _context4.next) {
748
954
  case 0:
749
955
  allPlannerElements = this.getAllPlannerElements();
750
956
  elemtsWhereSomethingChanged = [];
751
957
  i = 0;
752
958
  case 3:
753
959
  if (!(i < allPlannerElements.length)) {
754
- _context3.next = 13;
960
+ _context4.next = 13;
755
961
  break;
756
962
  }
757
963
  elem = allPlannerElements[i];
758
964
  doReload = elem.updatePlannerData(this.set.getPlannerData(elem.getElementId()));
759
965
  if (!doReload) {
760
- _context3.next = 10;
966
+ _context4.next = 10;
761
967
  break;
762
968
  }
763
969
  elemtsWhereSomethingChanged.push(elem.ElementId);
764
- _context3.next = 10;
970
+ _context4.next = 10;
765
971
  return handler2D.loadSVG(elem, this.set);
766
972
  case 10:
767
973
  i++;
768
- _context3.next = 3;
974
+ _context4.next = 3;
769
975
  break;
770
976
  case 13:
771
977
  elementsToDelete = [];
@@ -778,11 +984,11 @@ var DivaStandardPlanner = /*#__PURE__*/function () {
778
984
  elementsToDelete.push(elementsLostDockingRelation[i].ElementId);
779
985
  }
780
986
  }
781
- this.updateAllElementsWorldPos();
987
+ this.updateAllElementsWorldPos(undefined, elemtsWhereSomethingChanged);
782
988
  this.updatePlannerPosNr();
783
989
  this.updatePlannerBoundingBox();
784
990
  }
785
- return _context3.abrupt("return", {
991
+ return _context4.abrupt("return", {
786
992
  doDeleteBackGrid: false,
787
993
  elemIdsToDelete: elementsToDelete,
788
994
  elementIdsToUpdateSelection: elemtsWhereSomethingChanged,
@@ -790,9 +996,9 @@ var DivaStandardPlanner = /*#__PURE__*/function () {
790
996
  });
791
997
  case 16:
792
998
  case "end":
793
- return _context3.stop();
999
+ return _context4.stop();
794
1000
  }
795
- }, _callee3, this);
1001
+ }, _callee4, this);
796
1002
  }));
797
1003
  function updatePlanner() {
798
1004
  return _updatePlanner.apply(this, arguments);
@@ -807,15 +1013,14 @@ var DivaStandardPlanner = /*#__PURE__*/function () {
807
1013
  }, {
808
1014
  key: "extendPlanner",
809
1015
  value: (function () {
810
- var _extendPlanner = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee4(setPlanData, globalBoundingBox) {
811
- var planDataString, planData, jsonElements, elementsSortedbyPosNr, accElements, oldElementidMapping, i, _jsonElement$Accessoi, jsonElement, catalogArticle, plannerElement, data, curElement, DPsInfo, j, dpInfo, sourceDP, targetElement, targetDP;
812
- return _regeneratorRuntime.wrap(function _callee4$(_context4) {
813
- while (1) switch (_context4.prev = _context4.next) {
1016
+ var _extendPlanner = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee5(setPlanData, globalBoundingBox) {
1017
+ var planData, jsonElements, elementsSortedbyPosNr, accElements, oldElementidMapping, i, _saveElementArticleCo, _jsonElement$Accessoi, jsonElement, catalogArticle, plannerElement, data, elementsForDockingExtend, row, curElement, DPsInfo, j, dpInfo, sourceDP, targetElement, targetDP;
1018
+ return _regeneratorRuntime.wrap(function _callee5$(_context5) {
1019
+ while (1) switch (_context5.prev = _context5.next) {
814
1020
  case 0:
815
- planDataString = DivaUtils.decodeBase64(setPlanData);
816
- planData = JSON.parse(planDataString);
817
- if (!(planData.v != null && planData.v == 2)) {
818
- _context4.next = 40;
1021
+ planData = parseSetPlanData(setPlanData);
1022
+ if (!isSavePlannerV2(planData)) {
1023
+ _context5.next = 39;
819
1024
  break;
820
1025
  }
821
1026
  jsonElements = planData.set.elements;
@@ -823,70 +1028,70 @@ var DivaStandardPlanner = /*#__PURE__*/function () {
823
1028
  accElements = [];
824
1029
  oldElementidMapping = new Map(); //First reset planner element values in jsonElement so that every set is planned to be set to origin
825
1030
  i = 0;
826
- case 8:
1031
+ case 7:
827
1032
  if (!(i < jsonElements.length)) {
828
- _context4.next = 36;
1033
+ _context5.next = 35;
829
1034
  break;
830
1035
  }
831
- _context4.prev = 9;
1036
+ _context5.prev = 8;
832
1037
  jsonElement = jsonElements[i];
833
- catalogArticle = this.set.CatalogData.getCatalogArticleByArticleCodex(jsonElement.articleCodex || jsonElement.Codex);
1038
+ catalogArticle = this.set.CatalogData.getCatalogArticleByArticleCodex((_saveElementArticleCo = saveElementArticleCodex(jsonElement)) !== null && _saveElementArticleCo !== void 0 ? _saveElementArticleCo : '');
834
1039
  if (!(!catalogArticle && (_jsonElement$Accessoi = jsonElement.AccessoireInitParams) !== null && _jsonElement$Accessoi !== void 0 && _jsonElement$Accessoi.RelatedToBasketID && !this.set.getSetState.onlyRunLogic)) {
835
- _context4.next = 15;
1040
+ _context5.next = 14;
836
1041
  break;
837
1042
  }
838
1043
  LOG.error(new DivaError('Error initializing element nr ' + i + ' in the Standard Web Planner. PlanData V2', {
839
1044
  code: 'WC_0012'
840
1045
  }));
841
- return _context4.abrupt("continue", 33);
842
- case 15:
1046
+ return _context5.abrupt("continue", 32);
1047
+ case 14:
843
1048
  plannerElement = new PlannerElementData(this.set.getSetId(), jsonElement.basketID, this.nextElementId, DivaStandardPlanner.plannerType);
844
- oldElementidMapping.set(parseInt(jsonElement.elementID), plannerElement);
1049
+ oldElementidMapping.set(jsonElement.elementID, plannerElement);
845
1050
  this.nextElementId = plannerElement.getElementId() + 1;
846
1051
  this.plannerElements.set(plannerElement.ElementId, plannerElement);
847
1052
  this.set.setElementId(jsonElement.basketID, plannerElement.ElementId);
848
1053
  data = this.set.getPlannerData(plannerElement.ElementId);
849
1054
  plannerElement.updatePlannerData(data);
850
1055
  if (this.doDisablePlanner2D) {
851
- _context4.next = 25;
1056
+ _context5.next = 24;
852
1057
  break;
853
1058
  }
854
- _context4.next = 25;
1059
+ _context5.next = 24;
855
1060
  return handler2D.loadSVG(plannerElement, this.set);
856
- case 25:
1061
+ case 24:
857
1062
  plannerElement.WorldPosCenter = new Vector3(globalBoundingBox.WorldPos.x + globalBoundingBox.Size.x + jsonElement.x + 100, globalBoundingBox.WorldPos.y + jsonElement.y, globalBoundingBox.WorldPos.z + jsonElement.z);
858
1063
  plannerElement.RotDeg = jsonElement.rot;
859
1064
  if (plannerElement.IsDockedAccessoire) {
860
1065
  accElements.push(jsonElement);
861
1066
  plannerElement.PosNr = jsonElement.posNr;
862
- plannerElement.AccessoirePosNr = jsonElement.accNr;
1067
+ if (jsonElement.accNr != null) plannerElement.AccessoirePosNr = jsonElement.accNr;
863
1068
  } else {
864
1069
  elementsSortedbyPosNr[jsonElement.posNr - 1] = jsonElement;
865
1070
  plannerElement.PosNr = jsonElement.posNr;
866
1071
  }
867
- _context4.next = 33;
1072
+ _context5.next = 32;
868
1073
  break;
869
- case 30:
870
- _context4.prev = 30;
871
- _context4.t0 = _context4["catch"](9);
1074
+ case 29:
1075
+ _context5.prev = 29;
1076
+ _context5.t0 = _context5["catch"](8);
872
1077
  LOG.error(new DivaError('Error initializing element nr ' + i + ' in the Standard Web Planner. PlanData V2', {
873
- cause: _context4.t0,
1078
+ cause: _context5.t0,
874
1079
  code: 'WC_0012'
875
1080
  }));
876
- case 33:
1081
+ case 32:
877
1082
  i++;
878
- _context4.next = 8;
1083
+ _context5.next = 7;
879
1084
  break;
880
- case 36:
881
- elementsSortedbyPosNr = elementsSortedbyPosNr.concat(accElements);
882
- for (i = 0; i < elementsSortedbyPosNr.length; i++) {
883
- curElement = oldElementidMapping.get(elementsSortedbyPosNr[i].elementID);
884
- if (elementsSortedbyPosNr.length > 1) {
885
- //This is the case when a complex product is loaded
886
- //First element is already positioned correctly not docket
1085
+ case 35:
1086
+ elementsForDockingExtend = [].concat(_toConsumableArray(elementsSortedbyPosNr.filter(function (e) {
1087
+ return e != null;
1088
+ })), accElements);
1089
+ for (i = 0; i < elementsForDockingExtend.length; i++) {
1090
+ row = elementsForDockingExtend[i];
1091
+ curElement = oldElementidMapping.get(row.elementID);
1092
+ if (elementsForDockingExtend.length > 1) {
887
1093
  if (i > 0) {
888
- //The other elements are docked to the First element.
889
- DPsInfo = elementsSortedbyPosNr[i].DP;
1094
+ DPsInfo = row.DP;
890
1095
  for (j = 0; j < DPsInfo.length; j++) {
891
1096
  dpInfo = DPsInfo[j];
892
1097
  sourceDP = curElement === null || curElement === void 0 ? void 0 : curElement.getDockingPointById(dpInfo.id);
@@ -899,19 +1104,19 @@ var DivaStandardPlanner = /*#__PURE__*/function () {
899
1104
  }
900
1105
  }
901
1106
  }
902
- _context4.next = 41;
1107
+ _context5.next = 40;
903
1108
  break;
904
- case 40:
1109
+ case 39:
905
1110
  LOG.error(new DivaError('The function extend Planner works only with products that are saved in the configurator 2.0', {
906
1111
  code: 'WC_0012'
907
1112
  }));
908
- case 41:
1113
+ case 40:
909
1114
  case "end":
910
- return _context4.stop();
1115
+ return _context5.stop();
911
1116
  }
912
- }, _callee4, this, [[9, 30]]);
1117
+ }, _callee5, this, [[8, 29]]);
913
1118
  }));
914
- function extendPlanner(_x7, _x8) {
1119
+ function extendPlanner(_x10, _x11) {
915
1120
  return _extendPlanner.apply(this, arguments);
916
1121
  }
917
1122
  return extendPlanner;
@@ -919,47 +1124,45 @@ var DivaStandardPlanner = /*#__PURE__*/function () {
919
1124
  }, {
920
1125
  key: "initPlanner",
921
1126
  value: function () {
922
- var _initPlanner = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee5(setPlanData) {
923
- var planDataString, planData, jsonElements, elementsSortedbyPosNr, accElements, i, _jsonElement$Accessoi2, jsonElement, catalogArticle, elementID, plannerElement, data, onlyOneBaseElement, _jsonElement, hasSavedPos, element, DPsInfo, j, dpInfo, sourceElement, sourceDP, targetElement, targetDP, _jsonElements, _elementsSortedbyPosNr, _accElements, _jsonElement2$Accesso, _jsonElement2, _catalogArticle, basketID, elementId, _plannerElement, _data, centerWorldPos, parentPosNr, accPosNr, _DPsInfo, _dpInfo, _this$plannerElements, targetElementId, dpType, curElement, _targetElement;
924
- return _regeneratorRuntime.wrap(function _callee5$(_context5) {
925
- while (1) switch (_context5.prev = _context5.next) {
1127
+ var _initPlanner = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee6(setPlanData) {
1128
+ var planData, _planData$set, jsonElements, elementsSortedbyPosNr, accElements, i, _saveElementArticleCo2, _jsonElement$Accessoi2, jsonElement, catalogArticle, elementID, plannerElement, data, onlyOneBaseElement, elementsForDocking, row, _jsonElement, hasSavedPos, element, DPsInfo, j, dpInfo, sourceElement, sourceDP, targetElement, targetDP, alreadyDocked, docked, _elementsForDocking$i, elementId, _planData$Sets, _legacySet$Elements, legacySet, _jsonElements, _elementsSortedbyPosNr, _accElements, _saveElementArticleCo3, _jsonElement2$Accesso, _jsonElement2, _catalogArticle, basketID, _elementId, _plannerElement, _data, centerWorldPos, parentPosNr, accPosNr, elementsForDockingV1, _row, _DPsInfo, _dpInfo, _this$plannerElements, targetElementId, dpType, curElement, _targetElement, anchorElement;
1129
+ return _regeneratorRuntime.wrap(function _callee6$(_context6) {
1130
+ while (1) switch (_context6.prev = _context6.next) {
926
1131
  case 0:
927
- planDataString = DivaUtils.decodeBase64(setPlanData);
928
- planData = JSON.parse(planDataString);
929
- if (!(planData.v != null && planData.v == 2)) {
930
- _context5.next = 62;
1132
+ planData = parseSetPlanData(setPlanData);
1133
+ if (!isSavePlannerV2(planData)) {
1134
+ _context6.next = 63;
931
1135
  break;
932
1136
  }
933
1137
  LOG.debug('Initialize set Plan Data - V2\n' + planData, 'DivaStandardPlanner initPlanner');
934
- if (!(!planData.set || !planData.set.elements || planData.set.elements.length == 0)) {
935
- _context5.next = 6;
1138
+ if ((_planData$set = planData.set) !== null && _planData$set !== void 0 && (_planData$set = _planData$set.elements) !== null && _planData$set !== void 0 && _planData$set.length) {
1139
+ _context6.next = 5;
936
1140
  break;
937
1141
  }
938
- return _context5.abrupt("return");
939
- case 6:
940
- //Init new saved Plannings
1142
+ return _context6.abrupt("return");
1143
+ case 5:
941
1144
  jsonElements = planData.set.elements;
942
1145
  elementsSortedbyPosNr = [];
943
1146
  accElements = [];
944
1147
  i = 0;
945
- case 10:
1148
+ case 9:
946
1149
  if (!(i < jsonElements.length)) {
947
- _context5.next = 38;
1150
+ _context6.next = 37;
948
1151
  break;
949
1152
  }
950
- _context5.prev = 11;
1153
+ _context6.prev = 10;
951
1154
  jsonElement = jsonElements[i];
952
- catalogArticle = this.set.CatalogData.getCatalogArticleByArticleCodex(jsonElement.articleCodex || jsonElement.Codex);
1155
+ catalogArticle = this.set.CatalogData.getCatalogArticleByArticleCodex((_saveElementArticleCo2 = saveElementArticleCodex(jsonElement)) !== null && _saveElementArticleCo2 !== void 0 ? _saveElementArticleCo2 : '');
953
1156
  if (!(!catalogArticle && (_jsonElement$Accessoi2 = jsonElement.AccessoireInitParams) !== null && _jsonElement$Accessoi2 !== void 0 && _jsonElement$Accessoi2.RelatedToBasketID && !this.set.getSetState.onlyRunLogic)) {
954
- _context5.next = 17;
1157
+ _context6.next = 16;
955
1158
  break;
956
1159
  }
957
1160
  LOG.error(new DivaError('Error initializing element nr ' + i + ' in the Standard Web Planner. PlanData V2', {
958
1161
  code: 'WC_0012'
959
1162
  }));
960
- return _context5.abrupt("continue", 35);
961
- case 17:
962
- elementID = parseInt(jsonElement.elementID);
1163
+ return _context6.abrupt("continue", 34);
1164
+ case 16:
1165
+ elementID = jsonElement.elementID;
963
1166
  plannerElement = new PlannerElementData(this.set.getSetId(), jsonElement.basketID, elementID, DivaStandardPlanner.plannerType);
964
1167
  this.nextElementId = elementID + 1;
965
1168
  this.plannerElements.set(plannerElement.ElementId, plannerElement);
@@ -967,12 +1170,12 @@ var DivaStandardPlanner = /*#__PURE__*/function () {
967
1170
  data = this.set.getPlannerData(plannerElement.ElementId);
968
1171
  plannerElement.updatePlannerData(data);
969
1172
  if (this.doDisablePlanner2D) {
970
- _context5.next = 27;
1173
+ _context6.next = 26;
971
1174
  break;
972
1175
  }
973
- _context5.next = 27;
1176
+ _context6.next = 26;
974
1177
  return handler2D.loadSVG(plannerElement, this.set);
975
- case 27:
1178
+ case 26:
976
1179
  //Im neuen speichern ist die Position hinten link - nicht mehr im Centrum wie im alten Planer
977
1180
  //plannerElement.WorldPosCenter = new Vector3(jsonElement.x, jsonElement.y, jsonElement.z);
978
1181
  plannerElement.WorldPosCenter = new Vector3(this.plannerBoundingBox.WorldPos.x + jsonElement.x, this.plannerBoundingBox.WorldPos.y + jsonElement.y, this.plannerBoundingBox.WorldPos.z + jsonElement.z);
@@ -980,141 +1183,151 @@ var DivaStandardPlanner = /*#__PURE__*/function () {
980
1183
  if (plannerElement.IsDockedAccessoire) {
981
1184
  accElements.push(jsonElement);
982
1185
  plannerElement.PosNr = jsonElement.posNr;
983
- plannerElement.AccessoirePosNr = jsonElement.accNr;
1186
+ if (jsonElement.accNr != null) plannerElement.AccessoirePosNr = jsonElement.accNr;
984
1187
  } else {
985
1188
  elementsSortedbyPosNr[jsonElement.posNr - 1] = jsonElement;
986
1189
  plannerElement.PosNr = jsonElement.posNr;
987
1190
  }
988
- _context5.next = 35;
1191
+ _context6.next = 34;
989
1192
  break;
990
- case 32:
991
- _context5.prev = 32;
992
- _context5.t0 = _context5["catch"](11);
1193
+ case 31:
1194
+ _context6.prev = 31;
1195
+ _context6.t0 = _context6["catch"](10);
993
1196
  LOG.error(new DivaError('Error initializing element nr ' + i + ' in the Standard Web Planner. PlanData V2', {
994
- cause: _context5.t0,
1197
+ cause: _context6.t0,
995
1198
  code: 'WC_0012'
996
1199
  }));
997
- case 35:
1200
+ case 34:
998
1201
  i++;
999
- _context5.next = 10;
1202
+ _context6.next = 9;
1000
1203
  break;
1001
- case 38:
1002
- onlyOneBaseElement = elementsSortedbyPosNr.length == 1; //Saves if only one base element is in the planning. All the others are only accessoires
1003
- elementsSortedbyPosNr = elementsSortedbyPosNr.concat(accElements);
1204
+ case 37:
1205
+ onlyOneBaseElement = elementsSortedbyPosNr.filter(Boolean).length == 1; //Saves if only one base element is in the planning. All the others are only accessoires
1206
+ elementsForDocking = [].concat(_toConsumableArray(elementsSortedbyPosNr.filter(function (e) {
1207
+ return e != null;
1208
+ })), accElements);
1004
1209
  i = 0;
1005
- case 41:
1006
- if (!(i < elementsSortedbyPosNr.length)) {
1007
- _context5.next = 60;
1210
+ case 40:
1211
+ if (!(i < elementsForDocking.length)) {
1212
+ _context6.next = 61;
1008
1213
  break;
1009
1214
  }
1010
- _context5.prev = 42;
1215
+ _context6.prev = 41;
1216
+ row = elementsForDocking[i];
1011
1217
  if (!(i == 0 && onlyOneBaseElement && this.plannerHasStaticBackground)) {
1012
- _context5.next = 48;
1218
+ _context6.next = 48;
1013
1219
  break;
1014
1220
  }
1015
1221
  //if the planner has a static background room and there is only one base element (ignore docked ACCs) then it should be forced positioned in the center of the room.
1016
1222
  //Only do this for fresh plannings - if the saved planData already contains a position, keep it.
1223
+ //if the planner has a static background room and there is only one base element (ignore docked ACCs) then it should be forced positioned in the center of the room
1017
1224
  _jsonElement = elementsSortedbyPosNr[i];
1018
- hasSavedPos = _jsonElement.x != null || _jsonElement.y != null || _jsonElement.z != null;
1225
+ hasSavedPos = (_jsonElement === null || _jsonElement === void 0 ? void 0 : _jsonElement.x) != null || (_jsonElement === null || _jsonElement === void 0 ? void 0 : _jsonElement.y) != null || (_jsonElement === null || _jsonElement === void 0 ? void 0 : _jsonElement.z) != null;
1019
1226
  if (!hasSavedPos) {
1020
- element = this.plannerElements.get(_jsonElement.elementID);
1227
+ element = this.plannerElements.get(row.elementID);
1021
1228
  if (element) element.WorldPosCenter = new Vector3(0, element.Height / 2, element.Depth / 2);
1022
1229
  }
1023
- return _context5.abrupt("continue", 57);
1230
+ return _context6.abrupt("continue", 58);
1024
1231
  case 48:
1025
- if (!(elementsSortedbyPosNr[i].DP == null || elementsSortedbyPosNr[i].DP.length == 0)) {
1026
- _context5.next = 50;
1232
+ if (!(row.DP == null || row.DP.length == 0)) {
1233
+ _context6.next = 50;
1027
1234
  break;
1028
1235
  }
1029
- return _context5.abrupt("continue", 57);
1236
+ return _context6.abrupt("continue", 58);
1030
1237
  case 50:
1031
- DPsInfo = elementsSortedbyPosNr[i].DP;
1238
+ DPsInfo = row.DP;
1032
1239
  for (j = 0; j < DPsInfo.length; j++) {
1033
1240
  dpInfo = DPsInfo[j];
1034
- if (dpInfo.id && dpInfo.id != '' && dpInfo.onID && dpInfo.onID != '' && dpInfo.onDPID && dpInfo.onDPID != '') {
1035
- sourceElement = this.plannerElements.get(elementsSortedbyPosNr[i].elementID);
1241
+ if (dpInfo.id && dpInfo.onID != null && dpInfo.onDPID) {
1242
+ sourceElement = this.plannerElements.get(row.elementID);
1036
1243
  sourceDP = sourceElement === null || sourceElement === void 0 ? void 0 : sourceElement.getDockingPointById(dpInfo.id);
1037
1244
  targetElement = this.plannerElements.get(dpInfo.onID);
1038
1245
  targetDP = targetElement === null || targetElement === void 0 ? void 0 : targetElement.getDockingPointById(dpInfo.onDPID);
1039
1246
  if (sourceDP && targetDP) {
1040
- dockingPointHandlerInst.tryDockElementDPToDP(sourceElement, targetElement, sourceDP, targetDP);
1247
+ // Saved plans store each relation on both sides - skip the mirror entry of an already established pair.
1248
+ alreadyDocked = sourceDP.IsDocking && sourceDP.OnDP == targetDP;
1249
+ docked = alreadyDocked || dockingPointHandlerInst.tryDockElementDPToDP(sourceElement, targetElement, sourceDP, targetDP);
1250
+ if (!docked && !this.doDisablePlanner2D) LOG.error(new DivaError('Saved docking relation rejected on init: ' + dpInfo.id + ' (elem ' + (sourceElement === null || sourceElement === void 0 ? void 0 : sourceElement.ElementId) + ') -> ' + dpInfo.onDPID + ' (elem ' + (targetElement === null || targetElement === void 0 ? void 0 : targetElement.ElementId) + ')', {
1251
+ code: 'WC_0012'
1252
+ }));
1041
1253
  } else {
1042
1254
  if (!this.doDisablePlanner2D) LOG.error(new DivaError('Error initializing docking point between source element with id: ' + (sourceElement === null || sourceElement === void 0 ? void 0 : sourceElement.ElementId) + ' and target Element with id: ' + (targetElement === null || targetElement === void 0 ? void 0 : targetElement.ElementId) + '. SourceDPID: ' + dpInfo.id + '; targetDPID: ' + dpInfo.onDPID));
1043
1255
  }
1044
1256
  }
1045
1257
  }
1046
- _context5.next = 57;
1258
+ _context6.next = 58;
1047
1259
  break;
1048
1260
  case 54:
1049
- _context5.prev = 54;
1050
- _context5.t1 = _context5["catch"](42);
1051
- LOG.error(new DivaError('Error initializing dockingPoints of element with elementID ' + elementsSortedbyPosNr[i].elementID, {
1052
- cause: _context5.t1,
1261
+ _context6.prev = 54;
1262
+ _context6.t1 = _context6["catch"](41);
1263
+ elementId = (_elementsForDocking$i = elementsForDocking[i]) === null || _elementsForDocking$i === void 0 ? void 0 : _elementsForDocking$i.elementID;
1264
+ LOG.error(new DivaError('Error initializing dockingPoints of element with elementID ' + elementId, {
1265
+ cause: _context6.t1,
1053
1266
  code: 'WC_0012'
1054
1267
  }));
1055
- case 57:
1268
+ case 58:
1056
1269
  i++;
1057
- _context5.next = 41;
1270
+ _context6.next = 40;
1058
1271
  break;
1059
- case 60:
1060
- _context5.next = 113;
1272
+ case 61:
1273
+ _context6.next = 116;
1061
1274
  break;
1062
- case 62:
1275
+ case 63:
1063
1276
  LOG.debug('Initialize set Plan Data - old V1\n' + planData, 'DivaStandardPlanner initPlanner');
1064
- if (!(!planData.Sets || planData.Sets.length == 0 || !planData.Sets[0].Elements || planData.Sets[0].Elements.length == 0)) {
1065
- _context5.next = 65;
1277
+ legacySet = (_planData$Sets = planData.Sets) === null || _planData$Sets === void 0 ? void 0 : _planData$Sets[0];
1278
+ if (legacySet !== null && legacySet !== void 0 && (_legacySet$Elements = legacySet.Elements) !== null && _legacySet$Elements !== void 0 && _legacySet$Elements.length) {
1279
+ _context6.next = 67;
1066
1280
  break;
1067
1281
  }
1068
- return _context5.abrupt("return");
1069
- case 65:
1070
- //Init old Plannings - saved with the old planner
1071
- _jsonElements = planData.Sets[0].Elements;
1282
+ return _context6.abrupt("return");
1283
+ case 67:
1284
+ _jsonElements = legacySet.Elements;
1072
1285
  _elementsSortedbyPosNr = [];
1073
1286
  _accElements = []; //Zuerst initialisiere alle Elemente
1074
1287
  //Dann positioniere sie richtig
1075
1288
  i = 0;
1076
- case 69:
1289
+ case 71:
1077
1290
  if (!(i < _jsonElements.length)) {
1078
- _context5.next = 103;
1291
+ _context6.next = 105;
1079
1292
  break;
1080
1293
  }
1081
- _context5.prev = 70;
1294
+ _context6.prev = 72;
1082
1295
  _jsonElement2 = _jsonElements[i];
1083
- _catalogArticle = this.set.CatalogData.getCatalogArticleByArticleCodex(_jsonElement2.articleCodex || _jsonElement2.Codex);
1296
+ _catalogArticle = this.set.CatalogData.getCatalogArticleByArticleCodex((_saveElementArticleCo3 = saveElementArticleCodex(_jsonElement2)) !== null && _saveElementArticleCo3 !== void 0 ? _saveElementArticleCo3 : '');
1084
1297
  if (!(!_catalogArticle && (_jsonElement2$Accesso = _jsonElement2.AccessoireInitParams) !== null && _jsonElement2$Accesso !== void 0 && _jsonElement2$Accesso.RelatedToBasketID && !this.set.getSetState.onlyRunLogic)) {
1085
- _context5.next = 76;
1298
+ _context6.next = 78;
1086
1299
  break;
1087
1300
  }
1088
- LOG.error(new DivaError('Error initializing element nr ' + i + ' in the Standard Web Planner. PlanData V2', {
1301
+ LOG.error(new DivaError('Error initializing element nr ' + i + ' in the Standard Web Planner. PlanData V1', {
1089
1302
  code: 'WC_0012'
1090
1303
  }));
1091
- return _context5.abrupt("continue", 100);
1092
- case 76:
1304
+ return _context6.abrupt("continue", 102);
1305
+ case 78:
1093
1306
  basketID = _jsonElement2.BasketID;
1094
1307
  if (this.set.getElementId(basketID) == -1) this.set.setElementId(basketID, Number(_jsonElement2.ID));
1095
- elementId = this.set.getElementId(basketID);
1096
- _jsonElement2.elementId = elementId;
1097
- if (!(elementId == -1)) {
1098
- _context5.next = 83;
1308
+ _elementId = this.set.getElementId(basketID);
1309
+ _jsonElement2.elementId = _elementId;
1310
+ if (!(_elementId == -1)) {
1311
+ _context6.next = 85;
1099
1312
  break;
1100
1313
  }
1101
1314
  LOG.error(new DivaError('Error when initializing planner. The elementID Was not saved in the article. ', {
1102
1315
  code: 'WC_0012'
1103
1316
  }));
1104
- return _context5.abrupt("continue", 100);
1105
- case 83:
1106
- _plannerElement = new PlannerElementData(this.set.getSetId(), basketID, elementId, DivaStandardPlanner.plannerType);
1107
- this.nextElementId = elementId + 1;
1317
+ return _context6.abrupt("continue", 102);
1318
+ case 85:
1319
+ _plannerElement = new PlannerElementData(this.set.getSetId(), basketID, _elementId, DivaStandardPlanner.plannerType);
1320
+ this.nextElementId = _elementId + 1;
1108
1321
  this.plannerElements.set(_plannerElement.ElementId, _plannerElement);
1109
1322
  _data = this.set.getPlannerData(_plannerElement.ElementId);
1110
1323
  _plannerElement.updatePlannerData(_data);
1111
1324
  if (this.doDisablePlanner2D) {
1112
- _context5.next = 91;
1325
+ _context6.next = 93;
1113
1326
  break;
1114
1327
  }
1115
- _context5.next = 91;
1328
+ _context6.next = 93;
1116
1329
  return handler2D.loadSVG(_plannerElement, this.set);
1117
- case 91:
1330
+ case 93:
1118
1331
  //Achtung die Pos Infos im alten Planer waren Zentrumskoordinaten!!! Nicht hinten oben.
1119
1332
  centerWorldPos = new Vector3(_jsonElement2.PosX, _jsonElement2.PosZ, _jsonElement2.PosY);
1120
1333
  _plannerElement.WorldPosCenter = new Vector3(this.plannerBoundingBox.WorldPos.x + centerWorldPos.x, this.plannerBoundingBox.WorldPos.y + centerWorldPos.y, this.plannerBoundingBox.WorldPos.z + centerWorldPos.z);
@@ -1124,72 +1337,77 @@ var DivaStandardPlanner = /*#__PURE__*/function () {
1124
1337
  if (_jsonElement2.PosNum.toString().indexOf('.') > 0) {
1125
1338
  parentPosNr = _jsonElement2.PosNum.toString().split('.')[0];
1126
1339
  accPosNr = _jsonElement2.PosNum.toString().split('.')[1];
1127
- _plannerElement.PosNr = parentPosNr;
1128
- _plannerElement.AccessoirePosNr = accPosNr;
1340
+ _plannerElement.PosNr = Number(parentPosNr);
1341
+ _plannerElement.AccessoirePosNr = Number(accPosNr);
1129
1342
  }
1130
1343
  } else {
1131
1344
  _elementsSortedbyPosNr[_jsonElement2.PosNum - 1] = _jsonElement2;
1132
1345
  _plannerElement.PosNr = _jsonElement2.PosNum;
1133
1346
  }
1134
- _context5.next = 100;
1347
+ _context6.next = 102;
1135
1348
  break;
1136
- case 97:
1137
- _context5.prev = 97;
1138
- _context5.t2 = _context5["catch"](70);
1349
+ case 99:
1350
+ _context6.prev = 99;
1351
+ _context6.t2 = _context6["catch"](72);
1139
1352
  LOG.error(new DivaError('Error initializing element nr ' + i + ' in the Standard Web Planner - Plan Data old Planner', {
1140
- cause: _context5.t2,
1353
+ cause: _context6.t2,
1141
1354
  code: 'WC_0012'
1142
1355
  }));
1143
- case 100:
1356
+ case 102:
1144
1357
  i++;
1145
- _context5.next = 69;
1358
+ _context6.next = 71;
1146
1359
  break;
1147
- case 103:
1148
- _elementsSortedbyPosNr = _elementsSortedbyPosNr.concat(_accElements);
1149
- //Dann werden die DockingPoints durchgegangen und die jeweils richtigen müssen gesucht werden.
1150
- i = 0;
1151
1360
  case 105:
1152
- if (!(i < _elementsSortedbyPosNr.length)) {
1153
- _context5.next = 113;
1361
+ elementsForDockingV1 = [].concat(_toConsumableArray(_elementsSortedbyPosNr.filter(function (e) {
1362
+ return e != null;
1363
+ })), _accElements);
1364
+ i = 0;
1365
+ case 107:
1366
+ if (!(i < elementsForDockingV1.length)) {
1367
+ _context6.next = 116;
1154
1368
  break;
1155
1369
  }
1156
- if (!(_elementsSortedbyPosNr[i].DP == null || _elementsSortedbyPosNr[i].DP.length == 0)) {
1157
- _context5.next = 108;
1370
+ _row = elementsForDockingV1[i];
1371
+ if (!(_row.DP == null || _row.DP.length == 0)) {
1372
+ _context6.next = 111;
1158
1373
  break;
1159
1374
  }
1160
- return _context5.abrupt("continue", 110);
1161
- case 108:
1162
- _DPsInfo = _elementsSortedbyPosNr[i].DP;
1375
+ return _context6.abrupt("continue", 113);
1376
+ case 111:
1377
+ _DPsInfo = _row.DP;
1163
1378
  for (j = 0; j < _DPsInfo.length; j++) {
1164
1379
  _dpInfo = _DPsInfo[j];
1165
1380
  if (_dpInfo.DP && _dpInfo.DP != '' && _dpInfo.onID && _dpInfo.onID != '') {
1166
- targetElementId = parseInt(_dpInfo.onID);
1381
+ targetElementId = parseInt(String(_dpInfo.onID));
1167
1382
  dpType = _dpInfo.DP;
1168
- curElement = this.plannerElements.get(_elementsSortedbyPosNr[i].elementId);
1383
+ curElement = _row.elementId != null ? this.plannerElements.get(_row.elementId) : undefined;
1169
1384
  _targetElement = (_this$plannerElements = this.plannerElements.get(targetElementId)) !== null && _this$plannerElements !== void 0 ? _this$plannerElements : this.getPlannerElementByIndex(targetElementId - 1);
1170
1385
  if (curElement && _targetElement) {
1171
1386
  dockingPointHandlerInst.initDockingPointRelationByArea(curElement, _targetElement, dpType);
1172
1387
  } else {
1173
- LOG.error(new DivaError('Error initializing dockingPoints of element with elementID ' + _elementsSortedbyPosNr[i].elementId, {
1388
+ LOG.error(new DivaError('Error initializing dockingPoints of element with elementID ' + _row.elementId, {
1174
1389
  code: 'WC_0012'
1175
1390
  }));
1176
1391
  }
1177
1392
  }
1178
1393
  }
1179
- case 110:
1394
+ case 113:
1180
1395
  i++;
1181
- _context5.next = 105;
1396
+ _context6.next = 107;
1182
1397
  break;
1183
- case 113:
1184
- this.updateAllElementsWorldPos();
1398
+ case 116:
1399
+ this.plannerElements.forEach(function (el) {
1400
+ if (!el.IsDockedAccessoire && (anchorElement == undefined || el.PosNr < anchorElement.PosNr)) anchorElement = el;
1401
+ });
1402
+ this.updateAllElementsWorldPos(undefined, anchorElement ? [anchorElement.ElementId] : undefined);
1185
1403
  this.updatePlannerPosNr();
1186
- case 115:
1404
+ case 119:
1187
1405
  case "end":
1188
- return _context5.stop();
1406
+ return _context6.stop();
1189
1407
  }
1190
- }, _callee5, this, [[11, 32], [42, 54], [70, 97]]);
1408
+ }, _callee6, this, [[10, 31], [41, 54], [72, 99]]);
1191
1409
  }));
1192
- function initPlanner(_x9) {
1410
+ function initPlanner(_x12) {
1193
1411
  return _initPlanner.apply(this, arguments);
1194
1412
  }
1195
1413
  return initPlanner;
@@ -1208,11 +1426,11 @@ var DivaStandardPlanner = /*#__PURE__*/function () {
1208
1426
  }, {
1209
1427
  key: "addPlannerElement",
1210
1428
  value: function () {
1211
- var _addPlannerElement = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee6(basketID, params) {
1429
+ var _addPlannerElement = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee7(basketID, params) {
1212
1430
  var _params$dockingPointI, _t$, _t$2, _t$3;
1213
1431
  var plannerElement, data, t;
1214
- return _regeneratorRuntime.wrap(function _callee6$(_context6) {
1215
- while (1) switch (_context6.prev = _context6.next) {
1432
+ return _regeneratorRuntime.wrap(function _callee7$(_context7) {
1433
+ while (1) switch (_context7.prev = _context7.next) {
1216
1434
  case 0:
1217
1435
  // _elementId: number, _setId: string, _basketId: string, elementInitProp: any, catalogElement: CatalogPlannerArticleData
1218
1436
  plannerElement = new PlannerElementData(this.set.getSetId(), basketID, this.nextElementId, DivaStandardPlanner.plannerType /*, this.set.getSetId(), basketID, elementInitProp, catalogElement*/);
@@ -1223,10 +1441,10 @@ var DivaStandardPlanner = /*#__PURE__*/function () {
1223
1441
  plannerElement.updatePlannerData(data);
1224
1442
  //Do load the svg
1225
1443
  if (this.doDisablePlanner2D) {
1226
- _context6.next = 9;
1444
+ _context7.next = 9;
1227
1445
  break;
1228
1446
  }
1229
- _context6.next = 9;
1447
+ _context7.next = 9;
1230
1448
  return handler2D.loadSVG(plannerElement, this.set);
1231
1449
  case 9:
1232
1450
  t = (_params$dockingPointI = params.dockingPointInfos) !== null && _params$dockingPointI !== void 0 ? _params$dockingPointI : [{
@@ -1234,49 +1452,49 @@ var DivaStandardPlanner = /*#__PURE__*/function () {
1234
1452
  targetElemIdToDock: params.targetElemIdToDock
1235
1453
  }];
1236
1454
  if (!(t !== null && t !== void 0 && (_t$ = t[0]) !== null && _t$ !== void 0 && _t$.targetElemIdToDock && t !== null && t !== void 0 && (_t$2 = t[0]) !== null && _t$2 !== void 0 && _t$2.targetDockingPointId)) {
1237
- _context6.next = 15;
1455
+ _context7.next = 15;
1238
1456
  break;
1239
1457
  }
1240
- _context6.next = 13;
1458
+ _context7.next = 13;
1241
1459
  return this.addElementToWorld(plannerElement, t);
1242
1460
  case 13:
1243
- _context6.next = 27;
1461
+ _context7.next = 27;
1244
1462
  break;
1245
1463
  case 15:
1246
1464
  if (!(t !== null && t !== void 0 && (_t$3 = t[0]) !== null && _t$3 !== void 0 && _t$3.targetElemIdToDock)) {
1247
- _context6.next = 20;
1465
+ _context7.next = 20;
1248
1466
  break;
1249
1467
  }
1250
- _context6.next = 18;
1468
+ _context7.next = 18;
1251
1469
  return this.addElementToWorld(plannerElement, t);
1252
1470
  case 18:
1253
- _context6.next = 27;
1471
+ _context7.next = 27;
1254
1472
  break;
1255
1473
  case 20:
1256
1474
  if (!params.oldPlannerTransform) {
1257
- _context6.next = 25;
1475
+ _context7.next = 25;
1258
1476
  break;
1259
1477
  }
1260
- _context6.next = 23;
1478
+ _context7.next = 23;
1261
1479
  return this.addElementToWorld(plannerElement, undefined, undefined, undefined, undefined, {
1262
1480
  forceSetToTrans: true,
1263
1481
  transform: params.oldPlannerTransform
1264
1482
  });
1265
1483
  case 23:
1266
- _context6.next = 27;
1484
+ _context7.next = 27;
1267
1485
  break;
1268
1486
  case 25:
1269
- _context6.next = 27;
1487
+ _context7.next = 27;
1270
1488
  return this.addElementToWorld(plannerElement);
1271
1489
  case 27:
1272
1490
  this.updatePlannerBoundingBox();
1273
1491
  case 28:
1274
1492
  case "end":
1275
- return _context6.stop();
1493
+ return _context7.stop();
1276
1494
  }
1277
- }, _callee6, this);
1495
+ }, _callee7, this);
1278
1496
  }));
1279
- function addPlannerElement(_x10, _x11) {
1497
+ function addPlannerElement(_x13, _x14) {
1280
1498
  return _addPlannerElement.apply(this, arguments);
1281
1499
  }
1282
1500
  return addPlannerElement;
@@ -1295,34 +1513,68 @@ var DivaStandardPlanner = /*#__PURE__*/function () {
1295
1513
  }, {
1296
1514
  key: "copyPlannerElement",
1297
1515
  value: (function () {
1298
- var _copyPlannerElement = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee7(articleCopyRelation, copyInfo) {
1299
- var articlesToLoad, i;
1300
- return _regeneratorRuntime.wrap(function _callee7$(_context7) {
1301
- while (1) switch (_context7.prev = _context7.next) {
1516
+ var _copyPlannerElement = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee8(articleCopyRelation, copyInfo) {
1517
+ var i, _copyInfo$copyIndex, rel, dirX, sourceElement, targetDP;
1518
+ return _regeneratorRuntime.wrap(function _callee8$(_context8) {
1519
+ while (1) switch (_context8.prev = _context8.next) {
1302
1520
  case 0:
1303
- articlesToLoad = [];
1304
- articleCopyRelation.forEach(function (rel) {
1305
- if (copyInfo == undefined) articlesToLoad.push(rel.value);
1306
- });
1307
1521
  i = 0;
1308
- case 3:
1309
- if (!(i < articlesToLoad.length)) {
1310
- _context7.next = 9;
1522
+ case 1:
1523
+ if (!(i < articleCopyRelation.length)) {
1524
+ _context8.next = 24;
1311
1525
  break;
1312
1526
  }
1313
- _context7.next = 6;
1314
- return this.addPlannerElement(articlesToLoad[i], {});
1527
+ rel = articleCopyRelation[i];
1528
+ if (!(copyInfo == undefined)) {
1529
+ _context8.next = 7;
1530
+ break;
1531
+ }
1532
+ _context8.next = 6;
1533
+ return this.addPlannerElement(rel.value, {});
1315
1534
  case 6:
1535
+ return _context8.abrupt("continue", 21);
1536
+ case 7:
1537
+ //Directional copy (copyIndex.x = -1 left / 1 right): dock the copy at the source element's free AVL/AVR
1538
+ dirX = (_copyInfo$copyIndex = copyInfo.copyIndex) === null || _copyInfo$copyIndex === void 0 ? void 0 : _copyInfo$copyIndex.x;
1539
+ if (!(dirX != -1 && dirX != 1)) {
1540
+ _context8.next = 12;
1541
+ break;
1542
+ }
1543
+ _context8.next = 11;
1544
+ return this.addPlannerElement(rel.value, {});
1545
+ case 11:
1546
+ return _context8.abrupt("continue", 21);
1547
+ case 12:
1548
+ sourceElement = this.plannerElements.get(rel.key);
1549
+ targetDP = sourceElement === null || sourceElement === void 0 ? void 0 : sourceElement.getFreeDockingPointsByType(dirX == -1 ? 'AVL' : 'AVR').find(function (dp) {
1550
+ return !dp.IsDisabled;
1551
+ });
1552
+ if (!(sourceElement && targetDP)) {
1553
+ _context8.next = 19;
1554
+ break;
1555
+ }
1556
+ _context8.next = 17;
1557
+ return this.addPlannerElement(rel.value, {
1558
+ targetElemIdToDock: sourceElement.ElementId,
1559
+ targetDockingPointId: targetDP.DpId
1560
+ });
1561
+ case 17:
1562
+ _context8.next = 21;
1563
+ break;
1564
+ case 19:
1565
+ _context8.next = 21;
1566
+ return this.addPlannerElement(rel.value, {});
1567
+ case 21:
1316
1568
  i++;
1317
- _context7.next = 3;
1569
+ _context8.next = 1;
1318
1570
  break;
1319
- case 9:
1571
+ case 24:
1320
1572
  case "end":
1321
- return _context7.stop();
1573
+ return _context8.stop();
1322
1574
  }
1323
- }, _callee7, this);
1575
+ }, _callee8, this);
1324
1576
  }));
1325
- function copyPlannerElement(_x12, _x13) {
1577
+ function copyPlannerElement(_x15, _x16) {
1326
1578
  return _copyPlannerElement.apply(this, arguments);
1327
1579
  }
1328
1580
  return copyPlannerElement;
@@ -1341,7 +1593,8 @@ var DivaStandardPlanner = /*#__PURE__*/function () {
1341
1593
  }, {
1342
1594
  key: "getPlannerElementsInfluencedByCopy",
1343
1595
  value: function getPlannerElementsInfluencedByCopy(elementId, copyInfo) {
1344
- if (!copyInfo || copyInfo.copyType != 'BoxPlanner_backside') throw new Error('copyType needs to be BoxPlanner_backside here');
1596
+ //STD = directional AVL/AVR copy of a single element; only the element itself is influenced
1597
+ if (!copyInfo || copyInfo.copyType != 'BoxPlanner_backside' && copyInfo.copyType != 'STD') throw new Error('copyType needs to be BoxPlanner_backside or STD here');
1345
1598
  if (this.plannerElements.has(elementId)) return [elementId];
1346
1599
  return [];
1347
1600
  }
@@ -1354,19 +1607,19 @@ var DivaStandardPlanner = /*#__PURE__*/function () {
1354
1607
  }, {
1355
1608
  key: "deletePlannerElement",
1356
1609
  value: (function () {
1357
- var _deletePlannerElement = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee8(elementId, autoCorrectAVL_AVR) {
1610
+ var _deletePlannerElement = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee9(elementId, autoCorrectAVL_AVR) {
1358
1611
  var plannerElement, parent, prevPosNum, nextPosNum, newSelElemIdPrev, newSelElemIdNext, endForEach, removeDockingRelation, avlVec, avrVec, elementLeft, elementRight, avrElementLeft, avlElementRight, transform;
1359
- return _regeneratorRuntime.wrap(function _callee8$(_context8) {
1360
- while (1) switch (_context8.prev = _context8.next) {
1612
+ return _regeneratorRuntime.wrap(function _callee9$(_context9) {
1613
+ while (1) switch (_context9.prev = _context9.next) {
1361
1614
  case 0:
1362
- _context8.next = 2;
1615
+ _context9.next = 2;
1363
1616
  return DivaUtils.Sleep(1);
1364
1617
  case 2:
1365
1618
  if (this.plannerElements.has(elementId)) {
1366
- _context8.next = 4;
1619
+ _context9.next = 4;
1367
1620
  break;
1368
1621
  }
1369
- return _context8.abrupt("return", {});
1622
+ return _context9.abrupt("return", {});
1370
1623
  case 4:
1371
1624
  plannerElement = this.plannerElements.get(elementId);
1372
1625
  parent = this.getParentElement(plannerElement);
@@ -1423,17 +1676,17 @@ var DivaStandardPlanner = /*#__PURE__*/function () {
1423
1676
  this.updatePlannerPosNr();
1424
1677
  this.checkCollision(false, plannerElement.getElementId());
1425
1678
  this.updatePlannerBoundingBox();
1426
- return _context8.abrupt("return", {
1679
+ return _context9.abrupt("return", {
1427
1680
  newElementToSelect: newSelElemIdPrev >= 0 ? newSelElemIdPrev : newSelElemIdNext >= 0 ? newSelElemIdNext : undefined,
1428
1681
  transform: transform
1429
1682
  });
1430
1683
  case 24:
1431
1684
  case "end":
1432
- return _context8.stop();
1685
+ return _context9.stop();
1433
1686
  }
1434
- }, _callee8, this);
1687
+ }, _callee9, this);
1435
1688
  }));
1436
- function deletePlannerElement(_x14, _x15) {
1689
+ function deletePlannerElement(_x17, _x18) {
1437
1690
  return _deletePlannerElement.apply(this, arguments);
1438
1691
  }
1439
1692
  return deletePlannerElement;
@@ -1525,8 +1778,8 @@ var DivaStandardPlanner = /*#__PURE__*/function () {
1525
1778
  element.SetPosNr = startSetPosNr + element.PosNr - 1;
1526
1779
  this.set.setPosNr(element.ElementId, element.getPosNr());
1527
1780
  }
1528
- for (var _i3 = 0; _i3 < elements.length; _i3++) {
1529
- if (!elements[_i3].IsAccessoire) this.set.giveAccNewPosNrByBasketId(elements[_i3].getBasketId());
1781
+ for (var _i4 = 0; _i4 < elements.length; _i4++) {
1782
+ if (!elements[_i4].IsAccessoire) this.set.giveAccNewPosNrByBasketId(elements[_i4].getBasketId());
1530
1783
  }
1531
1784
  return elements.length;
1532
1785
  }
@@ -1543,12 +1796,12 @@ var DivaStandardPlanner = /*#__PURE__*/function () {
1543
1796
  */
1544
1797
  }, {
1545
1798
  key: "updatePlannerTrans",
1546
- value: function updatePlannerTrans(elementId, deltaMove, deltaAngleDeg, rotCorrection, transState, autoDockingDistance) {
1799
+ value: function updatePlannerTrans(elementId, deltaMove, deltaAngleDeg, rotCorrection, transState, autoDockingDistance, turningPoint) {
1547
1800
  var _this3 = this;
1548
1801
  var updateConfig = false;
1549
1802
  if (this.plannerElements.has(elementId)) {
1550
1803
  var plannerElement = this.plannerElements.get(elementId);
1551
- plannerElement === null || plannerElement === void 0 || plannerElement.updateDeltaTrans(deltaMove, deltaAngleDeg, rotCorrection, transState == 'END');
1804
+ plannerElement === null || plannerElement === void 0 || plannerElement.updateDeltaTrans(deltaMove, deltaAngleDeg, rotCorrection, transState == 'END', turningPoint);
1552
1805
  if (transState == 'START') {
1553
1806
  if (plannerElement) {
1554
1807
  var dpsToUndock = ['AVR', 'AVL'];
@@ -1731,8 +1984,8 @@ var DivaStandardPlanner = /*#__PURE__*/function () {
1731
1984
  }
1732
1985
  var shelfPlannerElements = _this5.set.getShelfPlannerData(elemId);
1733
1986
  if (shelfPlannerElements) {
1734
- for (var _i4 = 0; _i4 < shelfPlannerElements.length; _i4++) {
1735
- var accessorire = shelfPlannerElements[_i4];
1987
+ for (var _i5 = 0; _i5 < shelfPlannerElements.length; _i5++) {
1988
+ var accessorire = shelfPlannerElements[_i5];
1736
1989
  var shelfConfig = _this5.set.getShelfPlannerConfigData(accessorire.basketId).config;
1737
1990
  var _accElements2 = [];
1738
1991
  if (shelfConfig.accs && shelfConfig.accs.length > 0) {