@crystaldesign/web-planner-logic 26.13.0-rc.9 → 26.13.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 (35) hide show
  1. package/build/cjs/{DivaBoxPlanner-f97de3e6.js → DivaBoxPlanner-53fb3ae5.js} +2 -2
  2. package/build/cjs/{DivaStandardPlanner-4a1fd4af.js → DivaStandardPlanner-b46f6267.js} +2 -2
  3. package/build/cjs/{DoorPlanner-aa316570.js → DoorPlanner-f51953f5.js} +1 -1
  4. package/build/cjs/{Host3DSignalR-5455276f.js → Host3DSignalR-c88d4538.js} +1 -1
  5. package/build/cjs/{LiviqueWWSHandler-e2ec06bd.js → LiviqueWWSHandler-3b045813.js} +1 -1
  6. package/build/cjs/{PfisterWWSHandler-5c27c820.js → PfisterWWSHandler-00f45372.js} +1 -1
  7. package/build/cjs/{PlannerHandler2D-8e80956d.js → PlannerHandler2D-adc38873.js} +1 -1
  8. package/build/cjs/{SeriousBasketHandler-ba413732.js → SeriousBasketHandler-1d1b2acd.js} +1 -1
  9. package/build/cjs/{ShelfPlanner-b5b5411e.js → ShelfPlanner-58864389.js} +1 -1
  10. package/build/cjs/{StandardWWSHandler-33f5f021.js → StandardWWSHandler-7e217e62.js} +1 -1
  11. package/build/cjs/{index-c714a61d.js → index-efedc2df.js} +146 -78
  12. package/build/cjs/index.js +1 -1
  13. package/build/esm/{DivaBoxPlanner-99fd3579.js → DivaBoxPlanner-45eb016b.js} +2 -2
  14. package/build/esm/{DivaStandardPlanner-cf20597a.js → DivaStandardPlanner-4758f866.js} +2 -2
  15. package/build/esm/{DoorPlanner-2ea81462.js → DoorPlanner-a4579229.js} +1 -1
  16. package/build/esm/{Host3DSignalR-9fecebf1.js → Host3DSignalR-bc058311.js} +1 -1
  17. package/build/esm/{LiviqueWWSHandler-6cffd070.js → LiviqueWWSHandler-b19f7c65.js} +1 -1
  18. package/build/esm/{PfisterWWSHandler-9d712034.js → PfisterWWSHandler-1629a131.js} +1 -1
  19. package/build/esm/{PlannerHandler2D-c2bc56a0.js → PlannerHandler2D-bbc10b09.js} +1 -1
  20. package/build/esm/{SeriousBasketHandler-790840ee.js → SeriousBasketHandler-d5097836.js} +1 -1
  21. package/build/esm/{ShelfPlanner-6e58efe9.js → ShelfPlanner-1bf7c5b9.js} +1 -1
  22. package/build/esm/{StandardWWSHandler-99c2d6cd.js → StandardWWSHandler-514c6ac8.js} +1 -1
  23. package/build/esm/{index-68183d49.js → index-c5450f2e.js} +146 -78
  24. package/build/esm/index.js +1 -1
  25. package/build/types/web-planner-logic/src/logic/DivaWebPlanner.d.ts +5 -0
  26. package/build/types/web-planner-logic/src/logic/DivaWebPlanner.d.ts.map +1 -1
  27. package/build/types/web-planner-logic/src/logic/Planner/DivaPlannerHandler.d.ts +2 -0
  28. package/build/types/web-planner-logic/src/logic/Planner/DivaPlannerHandler.d.ts.map +1 -1
  29. package/build/types/web-planner-logic/src/logic/Planner/Rendering/PlannerHandler3D.d.ts +8 -0
  30. package/build/types/web-planner-logic/src/logic/Planner/Rendering/PlannerHandler3D.d.ts.map +1 -1
  31. package/build/types/web-planner-logic/src/logic/Planner/Rendering/types.d.ts +4 -0
  32. package/build/types/web-planner-logic/src/logic/Planner/Rendering/types.d.ts.map +1 -1
  33. package/build/types/web-planner-logic/src/test/hidingRenderScript.test.d.ts +2 -0
  34. package/build/types/web-planner-logic/src/test/hidingRenderScript.test.d.ts.map +1 -0
  35. package/package.json +3 -3
@@ -5,10 +5,10 @@ import _createClass from '@babel/runtime/helpers/createClass';
5
5
  import _defineProperty from '@babel/runtime/helpers/defineProperty';
6
6
  import _slicedToArray from '@babel/runtime/helpers/slicedToArray';
7
7
  import _regeneratorRuntime from '@babel/runtime/regenerator';
8
- import { V as Vector3, p as poseOf, g as getSnapPlace, c as getDockingGroups, d as getElementShape, e as getCarrierSlots, h as getSlotPlaces, m as moveGroupRigidly, i as isSamePose, j as getGroupBlock, k as fitsInsideRoom, l as keepInsideRoom, n as bindToWalls, o as sameGeoExtent, q as getCornerEnd, r as getDoorClearanceRects, t as rectCorners, u as Vector2, M as MAX_GUEST_DEPTH, v as slotExempt, w as bodiesOverlap, x as getNearestMember, y as toPlacementOffset, z as getTurnDeg, A as moveSlotMember, B as moveShape, C as layersCollide, D as shapesCollide, P as PlannerElementData, E as parseGuestPlacement, F as saveElementArticleCodex, H as parseSetPlanData, I as isSavePlannerV2, J as BoundingBox, K as movePoints } from './index-68183d49.js';
8
+ import { V as Vector3, p as poseOf, g as getSnapPlace, c as getDockingGroups, d as getElementShape, e as getCarrierSlots, h as getSlotPlaces, m as moveGroupRigidly, i as isSamePose, j as getGroupBlock, k as fitsInsideRoom, l as keepInsideRoom, n as bindToWalls, o as sameGeoExtent, q as getCornerEnd, r as getDoorClearanceRects, t as rectCorners, u as Vector2, M as MAX_GUEST_DEPTH, v as slotExempt, w as bodiesOverlap, x as getNearestMember, y as toPlacementOffset, z as getTurnDeg, A as moveSlotMember, B as moveShape, C as layersCollide, D as shapesCollide, P as PlannerElementData, E as parseGuestPlacement, F as saveElementArticleCodex, H as parseSetPlanData, I as isSavePlannerV2, J as BoundingBox, K as movePoints } from './index-c5450f2e.js';
9
9
  import DivaUtils, { DivaError, md5 } from '@crystaldesign/diva-utils';
10
10
  import { computeDockedTransform } from '@crystaldesign/planner-core';
11
- import { d as dockingPointHandlerInst, h as handler2D } from './PlannerHandler2D-c2bc56a0.js';
11
+ import { d as dockingPointHandlerInst, h as handler2D } from './PlannerHandler2D-bbc10b09.js';
12
12
  import '@babel/runtime/helpers/objectWithoutProperties';
13
13
  import 'axios';
14
14
  import '@babel/runtime/helpers/typeof';
@@ -1,7 +1,7 @@
1
1
  import _classCallCheck from '@babel/runtime/helpers/classCallCheck';
2
2
  import _createClass from '@babel/runtime/helpers/createClass';
3
3
  import _defineProperty from '@babel/runtime/helpers/defineProperty';
4
- import './index-68183d49.js';
4
+ import './index-c5450f2e.js';
5
5
  import DivaUtils from '@crystaldesign/diva-utils';
6
6
  import '@babel/runtime/helpers/slicedToArray';
7
7
  import '@babel/runtime/helpers/asyncToGenerator';
@@ -3,7 +3,7 @@ import _classCallCheck from '@babel/runtime/helpers/classCallCheck';
3
3
  import _createClass from '@babel/runtime/helpers/createClass';
4
4
  import _defineProperty from '@babel/runtime/helpers/defineProperty';
5
5
  import _regeneratorRuntime from '@babel/runtime/regenerator';
6
- import { L as bootMark, R as Rendering, N as HQRenderScript } from './index-68183d49.js';
6
+ import { L as bootMark, R as Rendering, N as HQRenderScript } from './index-c5450f2e.js';
7
7
  import DivaUtils, { DivaError } from '@crystaldesign/diva-utils';
8
8
  import { HubConnectionBuilder, LogLevel } from '@microsoft/signalr';
9
9
  import io from 'socket.io-client';
@@ -1,6 +1,6 @@
1
1
  import _classCallCheck from '@babel/runtime/helpers/classCallCheck';
2
2
  import _createClass from '@babel/runtime/helpers/createClass';
3
- import './index-68183d49.js';
3
+ import './index-c5450f2e.js';
4
4
  import '@babel/runtime/helpers/slicedToArray';
5
5
  import '@babel/runtime/helpers/asyncToGenerator';
6
6
  import '@babel/runtime/helpers/defineProperty';
@@ -1,6 +1,6 @@
1
1
  import _classCallCheck from '@babel/runtime/helpers/classCallCheck';
2
2
  import _createClass from '@babel/runtime/helpers/createClass';
3
- import { a as articleHandlerInstance } from './index-68183d49.js';
3
+ import { a as articleHandlerInstance } from './index-c5450f2e.js';
4
4
  import { SAPOrderLineData } from '@crystaldesign/basket-model';
5
5
  import DivaUtils, { DivaError } from '@crystaldesign/diva-utils';
6
6
  import '@babel/runtime/helpers/slicedToArray';
@@ -3,7 +3,7 @@ import _classCallCheck from '@babel/runtime/helpers/classCallCheck';
3
3
  import _createClass from '@babel/runtime/helpers/createClass';
4
4
  import _defineProperty from '@babel/runtime/helpers/defineProperty';
5
5
  import _regeneratorRuntime from '@babel/runtime/regenerator';
6
- import { u as Vector2, S as SVGUtils } from './index-68183d49.js';
6
+ import { u as Vector2, S as SVGUtils } from './index-c5450f2e.js';
7
7
  import _possibleConstructorReturn from '@babel/runtime/helpers/possibleConstructorReturn';
8
8
  import _getPrototypeOf from '@babel/runtime/helpers/getPrototypeOf';
9
9
  import _get from '@babel/runtime/helpers/get';
@@ -1,7 +1,7 @@
1
1
  import _classCallCheck from '@babel/runtime/helpers/classCallCheck';
2
2
  import _createClass from '@babel/runtime/helpers/createClass';
3
3
  import _defineProperty from '@babel/runtime/helpers/defineProperty';
4
- import { s as summaryHandlerInstance } from './index-68183d49.js';
4
+ import { s as summaryHandlerInstance } from './index-c5450f2e.js';
5
5
  import DivaUtils from '@crystaldesign/diva-utils';
6
6
  import '@babel/runtime/helpers/slicedToArray';
7
7
  import '@babel/runtime/helpers/asyncToGenerator';
@@ -4,7 +4,7 @@ import _classCallCheck from '@babel/runtime/helpers/classCallCheck';
4
4
  import _createClass from '@babel/runtime/helpers/createClass';
5
5
  import _defineProperty from '@babel/runtime/helpers/defineProperty';
6
6
  import _regeneratorRuntime from '@babel/runtime/regenerator';
7
- import { G as Grid, f as familyMembersOf, a as articleHandlerInstance, b as setHandlerInstance } from './index-68183d49.js';
7
+ import { G as Grid, f as familyMembersOf, a as articleHandlerInstance, b as setHandlerInstance } from './index-c5450f2e.js';
8
8
  import DivaUtils, { DivaError } from '@crystaldesign/diva-utils';
9
9
  import '@babel/runtime/helpers/slicedToArray';
10
10
  import '@babel/runtime/helpers/objectWithoutProperties';
@@ -1,6 +1,6 @@
1
1
  import _classCallCheck from '@babel/runtime/helpers/classCallCheck';
2
2
  import _createClass from '@babel/runtime/helpers/createClass';
3
- import './index-68183d49.js';
3
+ import './index-c5450f2e.js';
4
4
  import '@babel/runtime/helpers/slicedToArray';
5
5
  import '@babel/runtime/helpers/asyncToGenerator';
6
6
  import '@babel/runtime/helpers/defineProperty';
@@ -34343,7 +34343,7 @@ var DivaArticle = /*#__PURE__*/function () {
34343
34343
  break;
34344
34344
  }
34345
34345
  _context.next = 4;
34346
- return import('./ShelfPlanner-6e58efe9.js');
34346
+ return import('./ShelfPlanner-1bf7c5b9.js');
34347
34347
  case 4:
34348
34348
  _yield$import = _context.sent;
34349
34349
  ShelfPlanner = _yield$import["default"];
@@ -43192,7 +43192,7 @@ var DivaSet = /*#__PURE__*/function () {
43192
43192
  break;
43193
43193
  }
43194
43194
  _context5.next = 3;
43195
- return import('./DoorPlanner-2ea81462.js');
43195
+ return import('./DoorPlanner-a4579229.js');
43196
43196
  case 3:
43197
43197
  _yield$import = _context5.sent;
43198
43198
  DoorPlanner = _yield$import["default"];
@@ -51502,7 +51502,7 @@ var DivaBasketHandler = /*#__PURE__*/function () {
51502
51502
  break;
51503
51503
  case 3:
51504
51504
  _context13.next = 5;
51505
- return import('./PfisterWWSHandler-9d712034.js');
51505
+ return import('./PfisterWWSHandler-1629a131.js');
51506
51506
  case 5:
51507
51507
  _yield$import = _context13.sent;
51508
51508
  PfisterWWSHandler = _yield$import["default"];
@@ -51510,7 +51510,7 @@ var DivaBasketHandler = /*#__PURE__*/function () {
51510
51510
  return _context13.abrupt("break", 27);
51511
51511
  case 9:
51512
51512
  _context13.next = 11;
51513
- return import('./LiviqueWWSHandler-6cffd070.js');
51513
+ return import('./LiviqueWWSHandler-b19f7c65.js');
51514
51514
  case 11:
51515
51515
  _yield$import2 = _context13.sent;
51516
51516
  LiviqueWWSHandler = _yield$import2["default"];
@@ -51518,7 +51518,7 @@ var DivaBasketHandler = /*#__PURE__*/function () {
51518
51518
  return _context13.abrupt("break", 27);
51519
51519
  case 15:
51520
51520
  _context13.next = 17;
51521
- return import('./SeriousBasketHandler-790840ee.js');
51521
+ return import('./SeriousBasketHandler-d5097836.js');
51522
51522
  case 17:
51523
51523
  _yield$import3 = _context13.sent;
51524
51524
  SeriousWWSHandler = _yield$import3["default"];
@@ -51526,7 +51526,7 @@ var DivaBasketHandler = /*#__PURE__*/function () {
51526
51526
  return _context13.abrupt("break", 27);
51527
51527
  case 21:
51528
51528
  _context13.next = 23;
51529
- return import('./StandardWWSHandler-99c2d6cd.js');
51529
+ return import('./StandardWWSHandler-514c6ac8.js');
51530
51530
  case 23:
51531
51531
  _yield$import4 = _context13.sent;
51532
51532
  StandardWWSHandler = _yield$import4["default"];
@@ -52688,6 +52688,12 @@ var PlannerHandler3D = /*#__PURE__*/function () {
52688
52688
  _defineProperty(this, "lastSavedHQRenderScript", void 0);
52689
52689
  _defineProperty(this, "lastRequestInput", void 0);
52690
52690
  _defineProperty(this, "lastSavedAlternateRenderings", undefined);
52691
+ /** Planning hashes of render scripts requested for a rendering that hides options (e.g. without doors). */
52692
+ _defineProperty(this, "hidingScriptHashes", new Set());
52693
+ /** Planning hash of the planning as it is now: a hiding rendering may come to the hash of an earlier planning. */
52694
+ _defineProperty(this, "currentPlanningHash", void 0);
52695
+ /** Planning hash of the render script last handed to the view. */
52696
+ _defineProperty(this, "shownScriptHash", void 0);
52691
52697
  _defineProperty(this, "connectionHandler", void 0);
52692
52698
  _defineProperty(this, "viewPointHandler", void 0);
52693
52699
  _defineProperty(this, "getOrigConfiguration", void 0);
@@ -52924,7 +52930,7 @@ var PlannerHandler3D = /*#__PURE__*/function () {
52924
52930
  //If we need real time rendering initialize the SignalR and 3D host connection Handler
52925
52931
  bootMark('signalr: chunk import start');
52926
52932
  _context3.next = 3;
52927
- return import('./Host3DSignalR-9fecebf1.js');
52933
+ return import('./Host3DSignalR-bc058311.js');
52928
52934
  case 3:
52929
52935
  _yield$import = _context3.sent;
52930
52936
  Host3DSignalR = _yield$import["default"];
@@ -53078,8 +53084,17 @@ var PlannerHandler3D = /*#__PURE__*/function () {
53078
53084
  _iterator2.f();
53079
53085
  }
53080
53086
  this.sendARRenderScript(hqRenderScript, planningHash);
53087
+ this.shownScriptHash = planningHash;
53081
53088
  this.updatePlannerHqRenderScriptInView(hqRenderScript);
53082
53089
  }
53090
+
53091
+ /** Whether the view shows a render script that hides options of the planning (e.g. without doors): its 3D is not the planning's. */
53092
+ }, {
53093
+ key: "showsHidingRenderScript",
53094
+ value: function showsHidingRenderScript() {
53095
+ var hash = this.shownScriptHash;
53096
+ return hash !== undefined && this.hidingScriptHashes.has(hash) && hash !== this.currentPlanningHash;
53097
+ }
53083
53098
  }, {
53084
53099
  key: "handleReceiveRendering",
53085
53100
  value:
@@ -53446,8 +53461,10 @@ var PlannerHandler3D = /*#__PURE__*/function () {
53446
53461
  key: "request3D",
53447
53462
  value: (function () {
53448
53463
  var _request3D = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee8(params) {
53449
- var _params$renderRequest, _params$renderRequest2, _params$renderRequest3, _params$renderRequest4, _params$renderRequest5, _params$renderRequest6, _this$viewPointHandle, _this$viewPointHandle2;
53450
- var room, newRenderSize, doReloadWholePlanning, hybridInfo, planningHash, requestRenderingFrom3DHost, requestHqRenderScriptFrom3DHost, rendering, renderHash, viewPointName, functionType, _hybridInfo, sizeInfo, _rendering, fullscreenRendering, renderingInCacheFound, _this$connectionHandl6, _plannerMeasureDigits, _hybridInfo2, _hybridInfo3, returnRequest;
53464
+ var _this2 = this,
53465
+ _this$viewPointHandle,
53466
+ _this$viewPointHandle2;
53467
+ var room, setRoomInfo, newRenderSize, doReloadWholePlanning, hybridInfo, planningHash, requestRenderingFrom3DHost, requestHqRenderScriptFrom3DHost, _params$alternateRend, rendering, renderHash, viewPointName, functionType, _hybridInfo, sizeInfo, _rendering, fullscreenRendering, renderingInCacheFound, _this$connectionHandl6, _plannerMeasureDigits, _hybridInfo2, _hybridInfo3, returnRequest;
53451
53468
  return _regeneratorRuntime.wrap(function _callee8$(_context8) {
53452
53469
  while (1) switch (_context8.prev = _context8.next) {
53453
53470
  case 0:
@@ -53468,7 +53485,12 @@ var PlannerHandler3D = /*#__PURE__*/function () {
53468
53485
  LOG$4.debug("RequestRendering - but connectionHandler is undefined " + "(doRequestRendering=".concat(params.doRequestRendering, ", doRequestHqRenderScript=").concat(params.doRequestHqRenderScript, ") ") + "\u2014 SignalR was never initialized for this planner instance, request will be lost");
53469
53486
  }
53470
53487
  room = this.viewPointHandler.getCurRoomCodex();
53471
- newRenderSize = this.setRoomInfoInPlanningData(params.planningData, (_params$renderRequest = (_params$renderRequest2 = params.renderRequestInfos) === null || _params$renderRequest2 === void 0 ? void 0 : _params$renderRequest2.width) !== null && _params$renderRequest !== void 0 ? _params$renderRequest : 500, (_params$renderRequest3 = (_params$renderRequest4 = params.renderRequestInfos) === null || _params$renderRequest4 === void 0 ? void 0 : _params$renderRequest4.height) !== null && _params$renderRequest3 !== void 0 ? _params$renderRequest3 : 500, (_params$renderRequest5 = (_params$renderRequest6 = params.renderRequestInfos) === null || _params$renderRequest6 === void 0 ? void 0 : _params$renderRequest6.mediaServiceSaveMode) !== null && _params$renderRequest5 !== void 0 ? _params$renderRequest5 : undefined);
53488
+ setRoomInfo = function setRoomInfo(planningData) {
53489
+ var _params$renderRequest, _params$renderRequest2, _params$renderRequest3, _params$renderRequest4, _params$renderRequest5, _params$renderRequest6;
53490
+ return _this2.setRoomInfoInPlanningData(planningData, (_params$renderRequest = (_params$renderRequest2 = params.renderRequestInfos) === null || _params$renderRequest2 === void 0 ? void 0 : _params$renderRequest2.width) !== null && _params$renderRequest !== void 0 ? _params$renderRequest : 500, (_params$renderRequest3 = (_params$renderRequest4 = params.renderRequestInfos) === null || _params$renderRequest4 === void 0 ? void 0 : _params$renderRequest4.height) !== null && _params$renderRequest3 !== void 0 ? _params$renderRequest3 : 500, (_params$renderRequest5 = (_params$renderRequest6 = params.renderRequestInfos) === null || _params$renderRequest6 === void 0 ? void 0 : _params$renderRequest6.mediaServiceSaveMode) !== null && _params$renderRequest5 !== void 0 ? _params$renderRequest5 : undefined);
53491
+ };
53492
+ newRenderSize = setRoomInfo(params.planningData); // Part of the hash: the two plannings only compare with the same room info.
53493
+ if (params.fullPlanningData) setRoomInfo(params.fullPlanningData);
53472
53494
  doReloadWholePlanning = true;
53473
53495
  if (params.doRequestRendering) {
53474
53496
  params.renderRequestInfos.width = newRenderSize.newRenderWidth;
@@ -53503,9 +53525,13 @@ var PlannerHandler3D = /*#__PURE__*/function () {
53503
53525
  requestRenderingFrom3DHost = false;
53504
53526
  requestHqRenderScriptFrom3DHost = false;
53505
53527
  if (params.doRequestHqRenderScript) {
53528
+ // An alternate that hides nothing of this planning has the planning's own script (see showsHidingRenderScript).
53529
+ if ((_params$alternateRend = params.alternateRenderInfo) !== null && _params$alternateRend !== void 0 && _params$alternateRend.hideOptionsIn3DImage.length) this.hidingScriptHashes.add(planningHash);
53530
+ this.currentPlanningHash = params.fullPlanningData ? md5(JSON.stringify(params.fullPlanningData)) : planningHash;
53506
53531
  rendering = this.hqRenderScriptCache.get(planningHash);
53507
53532
  if (rendering && !params.useLatestHybridInfo) {
53508
53533
  this.lastSavedHQRenderScript = JSON.parse(rendering.HQRenderScript);
53534
+ this.shownScriptHash = planningHash;
53509
53535
  this.updatePlannerHqRenderScriptInView(rendering);
53510
53536
  this.sendARRenderScript(rendering, planningHash);
53511
53537
  params.doRequestHqRenderScript = false;
@@ -53565,7 +53591,7 @@ var PlannerHandler3D = /*#__PURE__*/function () {
53565
53591
  divaNr: params.divaNr
53566
53592
  };
53567
53593
  if (!(requestHqRenderScriptFrom3DHost || requestRenderingFrom3DHost)) {
53568
- _context8.next = 40;
53594
+ _context8.next = 42;
53569
53595
  break;
53570
53596
  }
53571
53597
  if (params.catalogData.lang) params.planningData.SCE.Lang = params.catalogData.lang;
@@ -53598,14 +53624,14 @@ var PlannerHandler3D = /*#__PURE__*/function () {
53598
53624
  if ((_hybridInfo2 = hybridInfo) !== null && _hybridInfo2 !== void 0 && _hybridInfo2.currentCamera) this.currentCamera = (_hybridInfo3 = hybridInfo) === null || _hybridInfo3 === void 0 ? void 0 : _hybridInfo3.currentCamera;
53599
53625
  this.latestHybridInfo = hybridInfo;
53600
53626
  if (!(returnRequest === undefined || requestHqRenderScriptFrom3DHost && returnRequest.hqRenderScript == undefined || requestRenderingFrom3DHost && returnRequest.rendering == undefined)) {
53601
- _context8.next = 38;
53627
+ _context8.next = 40;
53602
53628
  break;
53603
53629
  }
53604
53630
  LOG$4.error(new DivaError('Error requesting the 3D from host. RequestHqRenderScript: ' + requestHqRenderScriptFrom3DHost + '; RequestRendering: ' + requestRenderingFrom3DHost, {
53605
53631
  code: 'WC_0013'
53606
53632
  }));
53607
53633
  return _context8.abrupt("return");
53608
- case 38:
53634
+ case 40:
53609
53635
  if (requestHqRenderScriptFrom3DHost) {
53610
53636
  if (this.waitForHQRenderScript.has(planningHash)) this.waitForHQRenderScript["delete"](planningHash);
53611
53637
  this.waitForHQRenderScript.set(planningHash, returnRequest.hqRenderScript);
@@ -53617,12 +53643,12 @@ var PlannerHandler3D = /*#__PURE__*/function () {
53617
53643
  if (returnRequest.rendering.getIsAlternateRendering()) this.addAlternateRenderingToSavedAlternateRenderings(returnRequest.rendering);else this.lastSavedRendering = returnRequest.rendering;
53618
53644
  }
53619
53645
  }
53620
- case 40:
53646
+ case 42:
53621
53647
  return _context8.abrupt("return", {
53622
53648
  planningHash: planningHash,
53623
53649
  renderHash: renderHash
53624
53650
  });
53625
- case 41:
53651
+ case 43:
53626
53652
  case "end":
53627
53653
  return _context8.stop();
53628
53654
  }
@@ -53833,14 +53859,14 @@ var PlannerHandler3D = /*#__PURE__*/function () {
53833
53859
  key: "openARObserverConnection",
53834
53860
  value: function openARObserverConnection(handleNoHqrs, renderer) {
53835
53861
  var _this$liveArConnectio,
53836
- _this2 = this;
53862
+ _this3 = this;
53837
53863
  this.liveArRenderer = renderer;
53838
53864
  (_this$liveArConnectio = this.liveArConnection) !== null && _this$liveArConnectio !== void 0 ? _this$liveArConnectio : this.liveArConnection = this.connectLiveAr(handleNoHqrs)["catch"](function (error) {
53839
- var _this2$liveArSocket;
53865
+ var _this3$liveArSocket;
53840
53866
  // The next call connects anew; the failed socket must not keep reconnecting meanwhile.
53841
- (_this2$liveArSocket = _this2.liveArSocket) === null || _this2$liveArSocket === void 0 || _this2$liveArSocket.close();
53842
- _this2.liveArSocket = undefined;
53843
- _this2.liveArConnection = undefined;
53867
+ (_this3$liveArSocket = _this3.liveArSocket) === null || _this3$liveArSocket === void 0 || _this3$liveArSocket.close();
53868
+ _this3.liveArSocket = undefined;
53869
+ _this3.liveArConnection = undefined;
53844
53870
  throw error;
53845
53871
  });
53846
53872
  return this.liveArConnection;
@@ -53848,45 +53874,45 @@ var PlannerHandler3D = /*#__PURE__*/function () {
53848
53874
  }, {
53849
53875
  key: "connectLiveAr",
53850
53876
  value: function connectLiveAr(handleNoHqrs) {
53851
- var _this3 = this;
53877
+ var _this4 = this;
53852
53878
  return new Promise(function (resolve, reject) {
53853
- if (!_this3.liveArViewerUrl) return reject(new Error('No Live AR Viewer URL set'));
53879
+ if (!_this4.liveArViewerUrl) return reject(new Error('No Live AR Viewer URL set'));
53854
53880
  try {
53855
- var socketUrl = new URL(_this3.renderSettings.DivaMediaServiceUrl);
53856
- _this3.liveArSocket = io(socketUrl.origin + '/live-ar', {
53881
+ var socketUrl = new URL(_this4.renderSettings.DivaMediaServiceUrl);
53882
+ _this4.liveArSocket = io(socketUrl.origin + '/live-ar', {
53857
53883
  forceNew: true,
53858
53884
  rejectUnauthorized: false,
53859
53885
  path: socketUrl.pathname + '/socket.io',
53860
53886
  auth: {
53861
- jwt: _this3.jwt
53887
+ jwt: _this4.jwt
53862
53888
  }
53863
53889
  });
53864
- _this3.liveArSocket.on('disconnect', function () {
53890
+ _this4.liveArSocket.on('disconnect', function () {
53865
53891
  LOG$4.error(new DivaError('AR Socket disconnected'));
53866
53892
  });
53867
- _this3.liveArSocket.on('observer-joined', function () {
53868
- var _this3$liveArSocket;
53893
+ _this4.liveArSocket.on('observer-joined', function () {
53894
+ var _this4$liveArSocket;
53869
53895
  LOG$4.debug('AR Observer joined');
53870
- _this3.liveArClientsConnected = true;
53871
- var hqRenderScript = _this3.lastSavedHQRenderScript;
53872
- if (hqRenderScript) (_this3$liveArSocket = _this3.liveArSocket) === null || _this3$liveArSocket === void 0 || _this3$liveArSocket.emit('update', _this3.liveArUpdate(JSON.stringify(hqRenderScript)));else {
53896
+ _this4.liveArClientsConnected = true;
53897
+ var hqRenderScript = _this4.lastSavedHQRenderScript;
53898
+ if (hqRenderScript) (_this4$liveArSocket = _this4.liveArSocket) === null || _this4$liveArSocket === void 0 || _this4$liveArSocket.emit('update', _this4.liveArUpdate(JSON.stringify(hqRenderScript)));else {
53873
53899
  LOG$4.debug('No HQRenderScript found for observer-joined');
53874
53900
  handleNoHqrs();
53875
53901
  }
53876
53902
  });
53877
- _this3.liveArSocket.on('observer-left', function () {
53903
+ _this4.liveArSocket.on('observer-left', function () {
53878
53904
  LOG$4.debug('AR Observer left');
53879
- _this3.liveArClientsConnected = false;
53905
+ _this4.liveArClientsConnected = false;
53880
53906
  });
53881
- _this3.liveArSocket.on('connected', function (data) {
53907
+ _this4.liveArSocket.on('connected', function (data) {
53882
53908
  LOG$4.debug('AR Socket connected ' + data.connectionId);
53883
- _this3.liveArSocket.auth = _objectSpread$c(_objectSpread$c({}, _this3.liveArSocket.auth), {}, {
53909
+ _this4.liveArSocket.auth = _objectSpread$c(_objectSpread$c({}, _this4.liveArSocket.auth), {}, {
53884
53910
  connectionId: data.connectionId
53885
53911
  });
53886
53912
  var applyConfiguratorSessionId = DivaUtils.ConfigurationId ? '&configurationId=' + DivaUtils.ConfigurationId : '';
53887
- resolve(_this3.liveArViewerUrl + '?liveArConnectionId=' + data.connectionId + '&organizationId=' + _this3.renderSettings.OrganizationId + '&divaSessionId=' + DivaUtils.SessionId + applyConfiguratorSessionId);
53913
+ resolve(_this4.liveArViewerUrl + '?liveArConnectionId=' + data.connectionId + '&organizationId=' + _this4.renderSettings.OrganizationId + '&divaSessionId=' + DivaUtils.SessionId + applyConfiguratorSessionId);
53888
53914
  });
53889
- _this3.liveArSocket.on('connect_error', function (err) {
53915
+ _this4.liveArSocket.on('connect_error', function (err) {
53890
53916
  return reject(err);
53891
53917
  });
53892
53918
  } catch (err) {
@@ -56909,6 +56935,8 @@ var DivaPlannerHandler = /*#__PURE__*/function () {
56909
56935
  }, {
56910
56936
  key: "setElementFootprints",
56911
56937
  value: function setElementFootprints(footprints) {
56938
+ // Measured on a rendering with options hidden (a basket image without doors): those are not the planning's extents.
56939
+ if (this.handler3D.showsHidingRenderScript()) return false;
56912
56940
  var moved = false;
56913
56941
  this.plannerList.forEach(function (planner, setId) {
56914
56942
  var own = footprints.filter(function (footprint) {
@@ -57330,7 +57358,7 @@ var DivaPlannerHandler = /*#__PURE__*/function () {
57330
57358
  break;
57331
57359
  case 9:
57332
57360
  _context5.next = 11;
57333
- return import('./DivaStandardPlanner-cf20597a.js');
57361
+ return import('./DivaStandardPlanner-4758f866.js');
57334
57362
  case 11:
57335
57363
  _yield$import = _context5.sent;
57336
57364
  DivaStandardPlanner = _yield$import["default"];
@@ -57345,7 +57373,7 @@ var DivaPlannerHandler = /*#__PURE__*/function () {
57345
57373
  return _context5.abrupt("break", 22);
57346
57374
  case 16:
57347
57375
  _context5.next = 18;
57348
- return import('./DivaBoxPlanner-99fd3579.js');
57376
+ return import('./DivaBoxPlanner-45eb016b.js');
57349
57377
  case 18:
57350
57378
  _yield$import2 = _context5.sent;
57351
57379
  DivaBoxPlanner = _yield$import2["default"];
@@ -58548,12 +58576,43 @@ var DivaPlannerHandler = /*#__PURE__*/function () {
58548
58576
  LOG$3.debug('2D bbox: ', bbox.size);
58549
58577
  return bbox;
58550
58578
  }
58579
+
58580
+ /** The planning for the 3D host, without the options `alternateRenderInfo` hides. */
58581
+ }, {
58582
+ key: "buildPlannerData3D",
58583
+ value: function buildPlannerData3D(doShow3DDimensionLines, alternateRenderInfo) {
58584
+ var _this10 = this;
58585
+ var useSetPlanner = this.plannerHandlerFunctions.doAllowSetPlanner();
58586
+ var plannerData = this.handler3D.initPlannerData(useSetPlanner);
58587
+ var savedSetId = undefined;
58588
+ this.plannerList.forEach(function (planner, setId) {
58589
+ savedSetId = setId;
58590
+ var config = planner.getSetData(true, useSetPlanner, doShow3DDimensionLines, alternateRenderInfo);
58591
+ var setData = config.constructionSet;
58592
+
58593
+ //Add technical Info to setData
58594
+ var bboxInfo2D = _this10.get2DViewPlannerBoundingBox();
58595
+ setData.TechSize = {
58596
+ Width: bboxInfo2D.size.x,
58597
+ Height: bboxInfo2D.size.y,
58598
+ Depth: bboxInfo2D.size.z
58599
+ };
58600
+ plannerData.SCE.ROO[0].SET.push(setData);
58601
+ });
58602
+
58603
+ // if not in set planner mode overwrite s1 with correct setId
58604
+ if (savedSetId !== undefined && !useSetPlanner) {
58605
+ plannerData.SCE.ROO[0].SET[0].ID = savedSetId;
58606
+ plannerData.SCE.ROO[0].SelectSet = savedSetId;
58607
+ }
58608
+ return plannerData;
58609
+ }
58551
58610
  }, {
58552
58611
  key: "request3D",
58553
58612
  value: function () {
58554
58613
  var _request3D = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee19(doRequestRendering, doRequestHqRenderScript, alternateRenderingsExist, alternateRenderInfo, forceReloadPlanning, renderRequestInfos, hybrid3DInfo, useLatestHybridInfo) {
58555
- var _this10 = this;
58556
- var plannerData, loadedCatData, plannerExists, savedSetId;
58614
+ var _renderRequestInfos$d;
58615
+ var doShow3DDimensionLines, plannerData, fullPlanningData, loadedCatData, plannerExists;
58557
58616
  return _regeneratorRuntime.wrap(function _callee19$(_context19) {
58558
58617
  while (1) switch (_context19.prev = _context19.next) {
58559
58618
  case 0:
@@ -58575,24 +58634,12 @@ var DivaPlannerHandler = /*#__PURE__*/function () {
58575
58634
  LOG$3.warn('Warning requesting rendering. Not valid width or height request width: ' + renderRequestInfos.width + ' height: ' + renderRequestInfos.height);
58576
58635
  return _context19.abrupt("return");
58577
58636
  case 9:
58578
- plannerData = this.handler3D.initPlannerData(this.plannerHandlerFunctions.doAllowSetPlanner());
58637
+ doShow3DDimensionLines = (_renderRequestInfos$d = renderRequestInfos === null || renderRequestInfos === void 0 ? void 0 : renderRequestInfos.doShow3DDimensionLines) !== null && _renderRequestInfos$d !== void 0 ? _renderRequestInfos$d : false;
58638
+ plannerData = this.buildPlannerData3D(doShow3DDimensionLines, alternateRenderInfo); // The live script of a hidden option is all the handler gets: it needs the planning itself to tell the two apart.
58639
+ fullPlanningData = doRequestHqRenderScript && alternateRenderInfo !== null && alternateRenderInfo !== void 0 && alternateRenderInfo.hideOptionsIn3DImage.length ? this.buildPlannerData3D(doShow3DDimensionLines) : undefined;
58579
58640
  loadedCatData = [];
58580
58641
  plannerExists = false;
58581
- savedSetId = undefined;
58582
- this.plannerList.forEach(function (planner, setId) {
58583
- var _renderRequestInfos$d;
58584
- savedSetId = setId;
58585
- var config = planner.getSetData(true, _this10.plannerHandlerFunctions.doAllowSetPlanner(), (_renderRequestInfos$d = renderRequestInfos === null || renderRequestInfos === void 0 ? void 0 : renderRequestInfos.doShow3DDimensionLines) !== null && _renderRequestInfos$d !== void 0 ? _renderRequestInfos$d : false, alternateRenderInfo);
58586
- var setData = config.constructionSet;
58587
-
58588
- //Add technical Info to setData
58589
- var bboxInfo2D = _this10.get2DViewPlannerBoundingBox();
58590
- setData.TechSize = {
58591
- Width: bboxInfo2D.size.x,
58592
- Height: bboxInfo2D.size.y,
58593
- Depth: bboxInfo2D.size.z
58594
- };
58595
- plannerData.SCE.ROO[0].SET.push(setData);
58642
+ this.plannerList.forEach(function (planner) {
58596
58643
  plannerExists = true;
58597
58644
  var catalog = planner.getCatalogData();
58598
58645
  if (renderRequestInfos) renderRequestInfos.plannerMeasureDigits = catalog.PlannerMeasureDigits;
@@ -58606,17 +58653,13 @@ var DivaPlannerHandler = /*#__PURE__*/function () {
58606
58653
  _context19.next = 19;
58607
58654
  break;
58608
58655
  }
58609
- // if not in set planner mode overwrite s1 with correct setId
58610
- if (!this.plannerHandlerFunctions.doAllowSetPlanner()) {
58611
- plannerData.SCE.ROO[0].SET[0].ID = savedSetId;
58612
- plannerData.SCE.ROO[0].SelectSet = savedSetId;
58613
- }
58614
58656
  _context19.next = 18;
58615
58657
  return this.handler3D.request3D({
58616
58658
  doRequestRendering: doRequestRendering,
58617
58659
  doRequestHqRenderScript: doRequestHqRenderScript,
58618
58660
  divaNr: this.divaNr,
58619
58661
  planningData: plannerData,
58662
+ fullPlanningData: fullPlanningData,
58620
58663
  catalogData: loadedCatData[0],
58621
58664
  renderRequestInfos: renderRequestInfos,
58622
58665
  forceReloadPlanning: forceReloadPlanning,
@@ -59010,8 +59053,8 @@ var DivaWebPlanner = /*#__PURE__*/function () {
59010
59053
  */
59011
59054
  _defineProperty(this, "captureSetImages", /*#__PURE__*/function () {
59012
59055
  var _ref2 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee3(setId) {
59013
- var _this$view12, _this$view$getCurrent, _this$alternateRestor, _this$view13;
59014
- var set, alternates, onlySetId, viewerReleased;
59056
+ var _this$view12, _this$view$getCurrent, _this$alternateRestor, _this$alternateToRest;
59057
+ var set, alternates, onlySetId, viewerReleased, showedHidingAlternate, guardFootprints, showAlternate, _this$view13;
59015
59058
  return _regeneratorRuntime.wrap(function _callee3$(_context3) {
59016
59059
  while (1) switch (_context3.prev = _context3.next) {
59017
59060
  case 0:
@@ -59024,54 +59067,76 @@ var DivaWebPlanner = /*#__PURE__*/function () {
59024
59067
  viewerReleased = new Promise(function (resolve) {
59025
59068
  _this.alternateRestored = resolve;
59026
59069
  });
59027
- return _context3.abrupt("return", (_this$view13 = _this.view) === null || _this$view13 === void 0 ? void 0 : _this$view13.captureSetImages(alternates, /*#__PURE__*/function () {
59070
+ showedHidingAlternate = false;
59071
+ guardFootprints = function guardFootprints() {
59072
+ if (showedHidingAlternate) return;
59073
+ showedHidingAlternate = true;
59074
+ _this.capturingHidingAlternates++;
59075
+ }; // A save that starts on the customer's view without doors swaps to the full planning first: that scene is mounted too.
59076
+ if ((_this$alternateToRest = _this.alternateToRestore) !== null && _this$alternateToRest !== void 0 && _this$alternateToRest.hideOptionsIn3DImage.length) guardFootprints();
59077
+ showAlternate = /*#__PURE__*/function () {
59028
59078
  var _ref3 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee2(alternate) {
59029
59079
  var _yield$set$plannerHan;
59030
59080
  return _regeneratorRuntime.wrap(function _callee2$(_context2) {
59031
59081
  while (1) switch (_context2.prev = _context2.next) {
59032
59082
  case 0:
59033
- _context2.next = 2;
59083
+ if (alternate !== null && alternate !== void 0 && alternate.hideOptionsIn3DImage.length) guardFootprints();
59084
+ _context2.next = 3;
59034
59085
  return set === null || set === void 0 ? void 0 : set.plannerHandler.saveSetHQRenderScript(alternate);
59035
- case 2:
59086
+ case 3:
59036
59087
  _context2.t1 = _yield$set$plannerHan = _context2.sent;
59037
59088
  _context2.t0 = _context2.t1 !== null;
59038
59089
  if (!_context2.t0) {
59039
- _context2.next = 6;
59090
+ _context2.next = 7;
59040
59091
  break;
59041
59092
  }
59042
59093
  _context2.t0 = _yield$set$plannerHan !== void 0;
59043
- case 6:
59094
+ case 7:
59044
59095
  if (!_context2.t0) {
59045
- _context2.next = 10;
59096
+ _context2.next = 11;
59046
59097
  break;
59047
59098
  }
59048
59099
  _context2.t2 = _yield$set$plannerHan;
59049
- _context2.next = 11;
59100
+ _context2.next = 12;
59050
59101
  break;
59051
- case 10:
59052
- _context2.t2 = false;
59053
59102
  case 11:
59054
- return _context2.abrupt("return", _context2.t2);
59103
+ _context2.t2 = false;
59055
59104
  case 12:
59105
+ return _context2.abrupt("return", _context2.t2);
59106
+ case 13:
59056
59107
  case "end":
59057
59108
  return _context2.stop();
59058
59109
  }
59059
59110
  }, _callee2);
59060
59111
  }));
59061
- return function (_x3) {
59112
+ return function showAlternate(_x3) {
59062
59113
  return _ref3.apply(this, arguments);
59063
59114
  };
59064
- }(), onlySetId, viewerReleased));
59065
- case 7:
59115
+ }();
59116
+ _context3.prev = 10;
59117
+ _context3.next = 13;
59118
+ return (_this$view13 = _this.view) === null || _this$view13 === void 0 ? void 0 : _this$view13.captureSetImages(alternates, showAlternate, onlySetId, viewerReleased);
59119
+ case 13:
59120
+ return _context3.abrupt("return", _context3.sent);
59121
+ case 14:
59122
+ _context3.prev = 14;
59123
+ if (showedHidingAlternate) _this.capturingHidingAlternates--;
59124
+ return _context3.finish(14);
59125
+ case 17:
59066
59126
  case "end":
59067
59127
  return _context3.stop();
59068
59128
  }
59069
- }, _callee3);
59129
+ }, _callee3, null, [[10,, 14, 17]]);
59070
59130
  }));
59071
59131
  return function (_x2) {
59072
59132
  return _ref2.apply(this, arguments);
59073
59133
  };
59074
59134
  }());
59135
+ /**
59136
+ * Captures of {@link captureSetImages} that showed an alternate hiding options (e.g. without doors) and are not done.
59137
+ * The viewer measures that scene until it shows the full planning again (see {@link setElementFootprints}).
59138
+ */
59139
+ _defineProperty(this, "capturingHidingAlternates", 0);
59075
59140
  /** The alternate rendering a save took off the live viewer, shown again by {@link restoreAlternateRendering}. */
59076
59141
  _defineProperty(this, "alternateToRestore", void 0);
59077
59142
  /** Releases the viewer's still of a save's {@link captureSetImages} once {@link restoreAlternateRendering} is done. */
@@ -62070,6 +62135,9 @@ var DivaWebPlanner = /*#__PURE__*/function () {
62070
62135
  key: "setElementFootprints",
62071
62136
  value: function setElementFootprints(footprints) {
62072
62137
  var _this$plannerHandler7;
62138
+ // A save's capture of an alternate (e.g. without doors): its extents are not the planning's, also while the full
62139
+ // planning is handed back but the alternate's scene is still mounted.
62140
+ if (this.capturingHidingAlternates > 0) return;
62073
62141
  if ((_this$plannerHandler7 = this.plannerHandler) !== null && _this$plannerHandler7 !== void 0 && _this$plannerHandler7.setElementFootprints(footprints)) this.updatePlannerView('ELEMENT_FOOTPRINTS');
62074
62142
  }
62075
62143
 
@@ -1,4 +1,4 @@
1
- export { aj as ArtifactGenerationError, Z as CatalogPlannerArticleData, W as Cell, Q as DivaArticle, a as DivaArticleHandler, Y as DivaBasketHandler, T as DivaCatalogData, b as DivaSetHandler, G as Grid, a0 as JsonDataCache, U as OptionCatalogData, _ as PROPERTY_SCHEMAS, P as PlannerElementData, R as Rendering, u as Vector2, V as Vector3, ac as Vector4, L as bootMark, a2 as bootMarksEnabled, a3 as bootNetworkMark, a4 as bootNow, a5 as bootRequestName, a6 as canSwitchTo, ag as collectStructureStepKeys, ad as creatRenderOrders, O as default, a7 as dockingFiltersMatch, ae as getOrigProductId, a1 as getSeriousSetNamePlaceholder, aa as getViewerStateToggles, af as headlessSession, X as loadAndRepairBasket, $ as propertyEncodingOf, ah as runHeadlessArtifactPass, ai as runHeadlessArtifactPassBatch, ab as setViewerStateToggle, a8 as switchElementOf, a9 as switchInitParamsOf } from './index-68183d49.js';
1
+ export { aj as ArtifactGenerationError, Z as CatalogPlannerArticleData, W as Cell, Q as DivaArticle, a as DivaArticleHandler, Y as DivaBasketHandler, T as DivaCatalogData, b as DivaSetHandler, G as Grid, a0 as JsonDataCache, U as OptionCatalogData, _ as PROPERTY_SCHEMAS, P as PlannerElementData, R as Rendering, u as Vector2, V as Vector3, ac as Vector4, L as bootMark, a2 as bootMarksEnabled, a3 as bootNetworkMark, a4 as bootNow, a5 as bootRequestName, a6 as canSwitchTo, ag as collectStructureStepKeys, ad as creatRenderOrders, O as default, a7 as dockingFiltersMatch, ae as getOrigProductId, a1 as getSeriousSetNamePlaceholder, aa as getViewerStateToggles, af as headlessSession, X as loadAndRepairBasket, $ as propertyEncodingOf, ah as runHeadlessArtifactPass, ai as runHeadlessArtifactPassBatch, ab as setViewerStateToggle, a8 as switchElementOf, a9 as switchInitParamsOf } from './index-c5450f2e.js';
2
2
  export { DockingPoint } from '@crystaldesign/planner-core';
3
3
  import '@babel/runtime/helpers/slicedToArray';
4
4
  import '@babel/runtime/helpers/asyncToGenerator';
@@ -267,6 +267,11 @@ export default class DivaWebPlanner {
267
267
  * undefined here and keeps using the render farm.
268
268
  */
269
269
  captureSetImages: (setId?: string) => Promise<CapturedSetImages | undefined>;
270
+ /**
271
+ * Captures of {@link captureSetImages} that showed an alternate hiding options (e.g. without doors) and are not done.
272
+ * The viewer measures that scene until it shows the full planning again (see {@link setElementFootprints}).
273
+ */
274
+ private capturingHidingAlternates;
270
275
  /** The alternate rendering a save took off the live viewer, shown again by {@link restoreAlternateRendering}. */
271
276
  private alternateToRestore;
272
277
  /** Releases the viewer's still of a save's {@link captureSetImages} once {@link restoreAlternateRendering} is done. */