kitchen-simulator 4.0.0-react-18 → 4.0.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 (180) hide show
  1. package/README.md +3 -0
  2. package/es/AppContext.js +1 -1
  3. package/es/LiteKitchenConfigurator.js +156 -108
  4. package/es/LiteRenderer.js +159 -130
  5. package/es/actions/export.js +25 -12
  6. package/es/assets/gltf/door_sliding.bin +0 -0
  7. package/es/assets/img/png/helper/video_preview_start.png +0 -0
  8. package/es/assets/img/svg/bottombar/elevation.svg +12 -5
  9. package/es/catalog/catalog.js +21 -5
  10. package/es/catalog/holes/window-clear/planner-element.js +2 -2
  11. package/es/catalog/properties/export.js +21 -0
  12. package/es/catalog/properties/property-checkbox.js +68 -0
  13. package/es/catalog/properties/property-color.js +39 -0
  14. package/es/catalog/properties/property-enum.js +50 -0
  15. package/es/catalog/properties/property-hidden.js +19 -0
  16. package/es/catalog/properties/property-lenght-measure.js +100 -0
  17. package/es/catalog/properties/property-length-measure.js +84 -0
  18. package/es/catalog/properties/property-length-measure_hole.js +100 -0
  19. package/es/catalog/properties/property-number.js +48 -0
  20. package/es/catalog/properties/property-read-only.js +26 -0
  21. package/es/catalog/properties/property-string.js +48 -0
  22. package/es/catalog/properties/property-toggle.js +39 -0
  23. package/es/catalog/properties/shared-property-style.js +14 -0
  24. package/es/catalog/utils/exporter.js +1 -0
  25. package/es/catalog/utils/item-loader.js +17 -12
  26. package/es/class/hole.js +0 -2
  27. package/es/class/item.js +95 -69
  28. package/es/class/line.js +4 -8
  29. package/es/class/project.js +91 -80
  30. package/es/components/content.js +5 -2
  31. package/es/components/export.js +4 -6
  32. package/es/components/style/button.js +106 -0
  33. package/es/components/style/cancel-button.js +21 -0
  34. package/es/components/style/content-container.js +30 -0
  35. package/es/components/style/content-title.js +25 -0
  36. package/es/components/style/delete-button.js +24 -0
  37. package/es/components/style/export.js +28 -2
  38. package/es/components/style/form-block.js +20 -0
  39. package/es/components/style/form-color-input.js +26 -0
  40. package/es/components/style/form-label.js +22 -0
  41. package/es/components/style/form-number-input.js +11 -22
  42. package/es/components/style/form-number-input_2.js +200 -0
  43. package/es/components/style/form-select.js +19 -0
  44. package/es/components/style/form-slider.js +60 -0
  45. package/es/components/style/form-submit-button.js +25 -0
  46. package/es/components/style/form-text-input.js +69 -0
  47. package/es/components/viewer2d/group.js +5 -4
  48. package/es/components/viewer2d/item.js +41 -16
  49. package/es/components/viewer2d/layer.js +1 -1
  50. package/es/components/viewer2d/line.js +17 -47
  51. package/es/components/viewer2d/ruler.js +5 -3
  52. package/es/components/viewer2d/rulerDist.js +8 -7
  53. package/es/components/viewer2d/rulerX.js +3 -0
  54. package/es/components/viewer2d/rulerY.js +3 -0
  55. package/es/components/viewer2d/scene.js +4 -1
  56. package/es/components/viewer2d/state.js +1 -1
  57. package/es/components/viewer2d/utils.js +2 -2
  58. package/es/components/viewer2d/viewer2d.js +51 -84
  59. package/es/components/viewer3d/scene-creator.js +51 -15
  60. package/es/components/viewer3d/viewer3d-first-person.js +8 -0
  61. package/es/components/viewer3d/viewer3d.js +80 -88
  62. package/es/constants.js +6 -2
  63. package/es/devLiteRenderer.js +491 -150
  64. package/es/index.js +567 -25
  65. package/es/models.js +2 -1
  66. package/es/plugins/SVGLoader.js +1414 -0
  67. package/es/plugins/console-debugger.js +0 -2
  68. package/es/styles/export.js +5 -0
  69. package/es/styles/tabs.css +40 -0
  70. package/es/utils/geometry.js +52 -96
  71. package/es/utils/helper.js +38 -1
  72. package/es/utils/isolate-event-handler.js +781 -577
  73. package/es/utils/molding.js +457 -11
  74. package/lib/AppContext.js +1 -1
  75. package/lib/LiteKitchenConfigurator.js +155 -108
  76. package/lib/LiteRenderer.js +158 -130
  77. package/lib/actions/export.js +35 -39
  78. package/lib/assets/gltf/door_sliding.bin +0 -0
  79. package/lib/assets/img/png/helper/video_preview_start.png +0 -0
  80. package/lib/assets/img/svg/bottombar/elevation.svg +12 -5
  81. package/lib/catalog/catalog.js +20 -4
  82. package/lib/catalog/holes/window-clear/planner-element.js +2 -2
  83. package/lib/catalog/properties/export.js +81 -0
  84. package/lib/catalog/properties/property-checkbox.js +76 -0
  85. package/lib/catalog/properties/property-color.js +47 -0
  86. package/lib/catalog/properties/property-enum.js +58 -0
  87. package/lib/catalog/properties/property-hidden.js +27 -0
  88. package/lib/catalog/properties/property-lenght-measure.js +108 -0
  89. package/lib/catalog/properties/property-length-measure.js +92 -0
  90. package/lib/catalog/properties/property-length-measure_hole.js +108 -0
  91. package/lib/catalog/properties/property-number.js +56 -0
  92. package/lib/catalog/properties/property-read-only.js +34 -0
  93. package/lib/catalog/properties/property-string.js +56 -0
  94. package/lib/catalog/properties/property-toggle.js +47 -0
  95. package/lib/catalog/properties/shared-property-style.js +21 -0
  96. package/lib/catalog/utils/exporter.js +1 -0
  97. package/lib/catalog/utils/item-loader.js +17 -12
  98. package/lib/class/hole.js +0 -2
  99. package/lib/class/item.js +93 -67
  100. package/lib/class/line.js +3 -7
  101. package/lib/class/project.js +91 -80
  102. package/lib/components/content.js +5 -2
  103. package/lib/components/export.js +6 -26
  104. package/lib/components/style/button.js +115 -0
  105. package/lib/components/style/cancel-button.js +29 -0
  106. package/lib/components/style/content-container.js +38 -0
  107. package/lib/components/style/content-title.js +35 -0
  108. package/lib/components/style/delete-button.js +34 -0
  109. package/lib/components/style/export.js +105 -1
  110. package/lib/components/style/form-block.js +28 -0
  111. package/lib/components/style/form-color-input.js +34 -0
  112. package/lib/components/style/form-label.js +30 -0
  113. package/lib/components/style/form-number-input.js +11 -22
  114. package/lib/components/style/form-number-input_2.js +209 -0
  115. package/lib/components/style/form-select.js +29 -0
  116. package/lib/components/style/form-slider.js +68 -0
  117. package/lib/components/style/form-submit-button.js +35 -0
  118. package/lib/components/style/form-text-input.js +78 -0
  119. package/lib/components/viewer2d/group.js +5 -4
  120. package/lib/components/viewer2d/item.js +41 -16
  121. package/lib/components/viewer2d/layer.js +1 -1
  122. package/lib/components/viewer2d/line.js +17 -47
  123. package/lib/components/viewer2d/ruler.js +4 -2
  124. package/lib/components/viewer2d/rulerDist.js +8 -7
  125. package/lib/components/viewer2d/rulerX.js +3 -0
  126. package/lib/components/viewer2d/rulerY.js +3 -0
  127. package/lib/components/viewer2d/scene.js +4 -1
  128. package/lib/components/viewer2d/state.js +1 -1
  129. package/lib/components/viewer2d/utils.js +2 -2
  130. package/lib/components/viewer2d/viewer2d.js +49 -81
  131. package/lib/components/viewer3d/scene-creator.js +49 -13
  132. package/lib/components/viewer3d/viewer3d-first-person.js +8 -0
  133. package/lib/components/viewer3d/viewer3d.js +77 -84
  134. package/lib/constants.js +11 -7
  135. package/lib/devLiteRenderer.js +489 -148
  136. package/lib/index.js +567 -25
  137. package/lib/models.js +2 -1
  138. package/lib/plugins/SVGLoader.js +1419 -0
  139. package/lib/plugins/console-debugger.js +0 -2
  140. package/lib/styles/export.js +13 -0
  141. package/lib/styles/tabs.css +40 -0
  142. package/lib/utils/geometry.js +52 -96
  143. package/lib/utils/helper.js +40 -1
  144. package/lib/utils/isolate-event-handler.js +781 -576
  145. package/lib/utils/molding.js +458 -9
  146. package/package.json +21 -16
  147. package/es/mocks/appliancePayload.json +0 -27
  148. package/es/mocks/cabinetPayload.json +0 -1914
  149. package/es/mocks/cabinetPayload2.json +0 -76
  150. package/es/mocks/dataBundle2.json +0 -4
  151. package/es/mocks/distancePayload.json +0 -6
  152. package/es/mocks/doorStylePayload2.json +0 -84
  153. package/es/mocks/furnishingPayload.json +0 -23
  154. package/es/mocks/itemCDSPayload.json +0 -27
  155. package/es/mocks/lightingPayload.json +0 -23
  156. package/es/mocks/mockProps.json +0 -43
  157. package/es/mocks/mockProps2.json +0 -9
  158. package/es/mocks/moldingPayload.json +0 -19
  159. package/es/mocks/projectItemsCatalog.json +0 -133
  160. package/es/mocks/rectangleShape.json +0 -238
  161. package/es/mocks/replaceCabinetPayload.json +0 -81
  162. package/es/mocks/roomShapePayload.json +0 -5
  163. package/es/useAppContext.js +0 -8
  164. package/lib/mocks/appliancePayload.json +0 -27
  165. package/lib/mocks/cabinetPayload.json +0 -1914
  166. package/lib/mocks/cabinetPayload2.json +0 -76
  167. package/lib/mocks/dataBundle2.json +0 -4
  168. package/lib/mocks/distancePayload.json +0 -6
  169. package/lib/mocks/doorStylePayload2.json +0 -84
  170. package/lib/mocks/furnishingPayload.json +0 -23
  171. package/lib/mocks/itemCDSPayload.json +0 -27
  172. package/lib/mocks/lightingPayload.json +0 -23
  173. package/lib/mocks/mockProps.json +0 -43
  174. package/lib/mocks/mockProps2.json +0 -9
  175. package/lib/mocks/moldingPayload.json +0 -19
  176. package/lib/mocks/projectItemsCatalog.json +0 -133
  177. package/lib/mocks/rectangleShape.json +0 -238
  178. package/lib/mocks/replaceCabinetPayload.json +0 -81
  179. package/lib/mocks/roomShapePayload.json +0 -5
  180. package/lib/useAppContext.js +0 -16
@@ -8,13 +8,15 @@ Object.defineProperty(exports, "__esModule", {
8
8
  exports["default"] = void 0;
9
9
  var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
10
10
  var _objectWithoutProperties2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutProperties"));
11
- var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
12
11
  var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
12
+ var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
13
13
  var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
14
14
  var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
15
15
  var _possibleConstructorReturn2 = _interopRequireDefault(require("@babel/runtime/helpers/possibleConstructorReturn"));
16
16
  var _getPrototypeOf2 = _interopRequireDefault(require("@babel/runtime/helpers/getPrototypeOf"));
17
17
  var _inherits2 = _interopRequireDefault(require("@babel/runtime/helpers/inherits"));
18
+ var _taggedTemplateLiteral2 = _interopRequireDefault(require("@babel/runtime/helpers/taggedTemplateLiteral"));
19
+ var _styledComponents = _interopRequireDefault(require("styled-components"));
18
20
  var _convertUnitsLite = require("./utils/convert-units-lite");
19
21
  var _propTypes = _interopRequireDefault(require("prop-types"));
20
22
  var _react = _interopRequireWildcard(require("react"));
@@ -29,8 +31,8 @@ var _translator = _interopRequireDefault(require("./translator/translator"));
29
31
  var _objectsUtils = require("./utils/objects-utils");
30
32
  var _version = require("./version");
31
33
  var _isolateEventHandler = require("./utils/isolate-event-handler");
32
- var _AppContext = _interopRequireDefault(require("./AppContext"));
33
- var _excluded = ["width", "height", "state", "stateExtractor"];
34
+ var _excluded = ["width", "height", "extractedState"];
35
+ var _templateObject, _templateObject2; // LiteKitchenConfigurator.jsx
34
36
  function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function _interopRequireWildcard(e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, "default": e }; if (null === e || "object" != _typeof(e) && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (var _t in e) "default" !== _t && {}.hasOwnProperty.call(e, _t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, _t)) && (i.get || i.set) ? o(f, _t, i) : f[_t] = e[_t]); return f; })(e, t); }
35
37
  function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
36
38
  function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { (0, _defineProperty2["default"])(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
@@ -41,14 +43,16 @@ var wrapperStyle = {
41
43
  display: 'flex',
42
44
  flexFlow: 'row nowrap'
43
45
  };
46
+ var WarningItem = _styledComponents["default"].div(_templateObject || (_templateObject = (0, _taggedTemplateLiteral2["default"])(["\n opacity: 0.8;\n position: absolute;\n border-radius: 6px;\n z-index: 11;\n background-color: #ff7400;\n width: max-content;\n align-items: center;\n padding: 10px;\n display: none;\n box-shadow:\n 0px 3px 5px -1px rgba(0, 0, 0, 0.2),\n 0px 6px 10px 0px rgba(0, 0, 0, 0.39),\n 0px 1px 18px 0px rgba(0, 0, 0, 0.12);\n top: -50px;\n left: 5px;\n color: white;\n"])));
47
+ var SubCategoryItemImage = _styledComponents["default"].img(_templateObject2 || (_templateObject2 = (0, _taggedTemplateLiteral2["default"])(["\n background-color: ", ";\n height: 30px;\n width: 30px;\n -webkit-mask-image: url(", ");\n -webkit-mask-size: calc(100% - 2px) calc(100% - 2px);\n -webkit-mask-repeat: no-repeat;\n -webkit-mask-position: 1px 1px;\n"])), constants.SECONDARY_PURPLE_COLOR, function (props) {
48
+ return props.maskImage + '?nocache=2025';
49
+ });
44
50
  var LiteKitchenConfigurator = /*#__PURE__*/function (_Component) {
45
51
  function LiteKitchenConfigurator(props) {
46
52
  var _utmRequestData2, _utmRequestData3, _utmRequestData4, _utmRequestData5, _utmRequestData6, _utmRequestData7, _utmRequestData8, _utmRequestData9, _utmRequestData0;
47
53
  var _this;
48
54
  (0, _classCallCheck2["default"])(this, LiteKitchenConfigurator);
49
55
  _this = _callSuper(this, LiteKitchenConfigurator, [props]);
50
-
51
- // utm tracking
52
56
  var utmDetailParams = new URLSearchParams(_this.props.location && _this.props.location.search);
53
57
  var utmStrEncoded = utmDetailParams.get('details');
54
58
  var utmRequestData = null;
@@ -58,7 +62,7 @@ var LiteKitchenConfigurator = /*#__PURE__*/function (_Component) {
58
62
  utmRequestData = JSON.parse((0, _helper.base64Decode)(utmStrEncoded));
59
63
  utmRequestData = JSON.parse((_utmRequestData = utmRequestData) === null || _utmRequestData === void 0 ? void 0 : _utmRequestData.utm);
60
64
  } catch (e) {
61
- console.error('Cannot parse utm parameter: ', error);
65
+ console.error('Cannot parse utm parameter: ', e);
62
66
  utmRequestData = null;
63
67
  }
64
68
  }
@@ -77,7 +81,6 @@ var LiteKitchenConfigurator = /*#__PURE__*/function (_Component) {
77
81
  myProjectsOpen: false,
78
82
  myProjectsToLogin: false,
79
83
  downloadPopupVisible: false,
80
- // For Toolbar Item
81
84
  toolbar: '',
82
85
  reviewQuotePopupOpened: false,
83
86
  floorOpened: false,
@@ -95,8 +98,6 @@ var LiteKitchenConfigurator = /*#__PURE__*/function (_Component) {
95
98
  isSaved: false,
96
99
  isLeaving: false
97
100
  };
98
-
99
- // For UTM tracking
100
101
  _this.utm = {
101
102
  utm_source: ((_utmRequestData2 = utmRequestData) === null || _utmRequestData2 === void 0 ? void 0 : _utmRequestData2.source) || 'source',
102
103
  utm_medium: ((_utmRequestData3 = utmRequestData) === null || _utmRequestData3 === void 0 ? void 0 : _utmRequestData3.medium) || 'medium',
@@ -127,10 +128,13 @@ var LiteKitchenConfigurator = /*#__PURE__*/function (_Component) {
127
128
  _this.setDownloadPopupVisible = _this.setDownloadPopupVisible.bind(_this);
128
129
  _this.neverShowInput = /*#__PURE__*/_react["default"].createRef(null);
129
130
  _this.setShowProperty = _this.setShowProperty.bind(_this);
131
+
132
+ // cache for viewer2D init so we don't allocate merges every render
133
+ _this._lastExtractedStateRef = null;
134
+ _this._cachedViewer2DKey = null;
135
+ _this._cachedExtractedState = null;
130
136
  return _this;
131
137
  }
132
-
133
- // Toolbar control functions
134
138
  (0, _inherits2["default"])(LiteKitchenConfigurator, _Component);
135
139
  return (0, _createClass2["default"])(LiteKitchenConfigurator, [{
136
140
  key: "setToolbar",
@@ -214,26 +218,32 @@ var LiteKitchenConfigurator = /*#__PURE__*/function (_Component) {
214
218
  }, {
215
219
  key: "openFloor",
216
220
  value: function openFloor() {
221
+ var _el$parentElement;
217
222
  this.setState({
218
223
  floorOpened: true
219
224
  });
220
- document.getElementById('make_floorplan_inactive').parentElement.parentElement.style.zIndex = 999;
225
+ var el = document.getElementById('make_floorplan_inactive');
226
+ if (el !== null && el !== void 0 && (_el$parentElement = el.parentElement) !== null && _el$parentElement !== void 0 && _el$parentElement.parentElement) el.parentElement.parentElement.style.zIndex = 999;
221
227
  }
222
228
  }, {
223
229
  key: "openCabinet",
224
230
  value: function openCabinet() {
231
+ var _el$parentElement2;
225
232
  this.setState({
226
233
  cabinetOpened: true
227
234
  });
228
- document.getElementById('add_cabinets_inactive').parentElement.parentElement.style.zIndex = 999;
235
+ var el = document.getElementById('add_cabinets_inactive');
236
+ if (el !== null && el !== void 0 && (_el$parentElement2 = el.parentElement) !== null && _el$parentElement2 !== void 0 && _el$parentElement2.parentElement) el.parentElement.parentElement.style.zIndex = 999;
229
237
  }
230
238
  }, {
231
239
  key: "toggleDoorStyle",
232
240
  value: function toggleDoorStyle(visible) {
241
+ var _el$parentElement3;
233
242
  this.setState({
234
243
  doorStyleOpen: visible
235
244
  });
236
- document.getElementById('select_doorstyle_inactive').parentElement.parentElement.style.zIndex = visible ? 999 : 6;
245
+ var el = document.getElementById('select_doorstyle_inactive');
246
+ if (el !== null && el !== void 0 && (_el$parentElement3 = el.parentElement) !== null && _el$parentElement3 !== void 0 && _el$parentElement3.parentElement) el.parentElement.parentElement.style.zIndex = visible ? 999 : 6;
237
247
  }
238
248
  }, {
239
249
  key: "replaceCabinet",
@@ -245,70 +255,83 @@ var LiteKitchenConfigurator = /*#__PURE__*/function (_Component) {
245
255
  }, {
246
256
  key: "openAppliance",
247
257
  value: function openAppliance() {
258
+ var _el$parentElement4;
248
259
  this.setState({
249
260
  applianceOpened: true
250
261
  });
251
- document.getElementById('add_appliances_inactive').parentElement.parentElement.style.zIndex = 999;
262
+ var el = document.getElementById('add_appliances_inactive');
263
+ if (el !== null && el !== void 0 && (_el$parentElement4 = el.parentElement) !== null && _el$parentElement4 !== void 0 && _el$parentElement4.parentElement) el.parentElement.parentElement.style.zIndex = 999;
252
264
  }
253
265
  }, {
254
266
  key: "openFinishing",
255
267
  value: function openFinishing() {
268
+ var _el$parentElement5;
256
269
  this.setState({
257
270
  finishingOpened: true
258
271
  });
259
- document.getElementById('finishing_touches_inactive').parentElement.parentElement.style.zIndex = 999;
272
+ var el = document.getElementById('finishing_touches_inactive');
273
+ if (el !== null && el !== void 0 && (_el$parentElement5 = el.parentElement) !== null && _el$parentElement5 !== void 0 && _el$parentElement5.parentElement) el.parentElement.parentElement.style.zIndex = 999;
260
274
  }
261
275
  }, {
262
276
  key: "onReviewQuoteClicked",
263
277
  value: function onReviewQuoteClicked(visible) {
278
+ var _el$parentElement6;
264
279
  this.setState({
265
280
  reviewQuotePopupOpened: visible
266
281
  });
267
- document.getElementById('review_quote_inactive').parentElement.parentElement.style.zIndex = visible ? 999 : 6;
282
+ var el = document.getElementById('review_quote_inactive');
283
+ if (el !== null && el !== void 0 && (_el$parentElement6 = el.parentElement) !== null && _el$parentElement6 !== void 0 && _el$parentElement6.parentElement) el.parentElement.parentElement.style.zIndex = visible ? 999 : 6;
268
284
  }
269
285
  }, {
270
286
  key: "closeFloorTB",
271
287
  value: function closeFloorTB() {
288
+ var _el$parentElement7;
272
289
  this.setState({
273
290
  floorOpened: false
274
291
  });
275
- document.getElementById('make_floorplan_inactive') && (document.getElementById('make_floorplan_inactive').parentElement.parentElement.style.zIndex = 6);
292
+ var el = document.getElementById('make_floorplan_inactive');
293
+ if (el !== null && el !== void 0 && (_el$parentElement7 = el.parentElement) !== null && _el$parentElement7 !== void 0 && _el$parentElement7.parentElement) el.parentElement.parentElement.style.zIndex = 6;
276
294
  }
277
295
  }, {
278
296
  key: "closeCabinetTB",
279
297
  value: function closeCabinetTB() {
298
+ var _el$parentElement8;
280
299
  this.setState({
281
300
  cabinetOpened: false
282
301
  });
283
- document.getElementById('add_cabinets_inactive').parentElement.parentElement.style.zIndex = 6;
302
+ var el = document.getElementById('add_cabinets_inactive');
303
+ if (el !== null && el !== void 0 && (_el$parentElement8 = el.parentElement) !== null && _el$parentElement8 !== void 0 && _el$parentElement8.parentElement) el.parentElement.parentElement.style.zIndex = 6;
284
304
  }
285
305
  }, {
286
306
  key: "closeFinishingTB",
287
307
  value: function closeFinishingTB() {
308
+ var _el$parentElement9;
288
309
  this.setState({
289
310
  finishingOpened: false
290
311
  });
291
- document.getElementById('finishing_touches_inactive').parentElement.parentElement.style.zIndex = 6;
312
+ var el = document.getElementById('finishing_touches_inactive');
313
+ if (el !== null && el !== void 0 && (_el$parentElement9 = el.parentElement) !== null && _el$parentElement9 !== void 0 && _el$parentElement9.parentElement) el.parentElement.parentElement.style.zIndex = 6;
292
314
  }
293
315
  }, {
294
316
  key: "closeApplianceTB",
295
317
  value: function closeApplianceTB() {
318
+ var _el$parentElement0;
296
319
  this.setState({
297
320
  applianceOpened: false
298
321
  });
299
- document.getElementById('add_appliances_inactive').parentElement.parentElement.style.zIndex = 6;
322
+ var el = document.getElementById('add_appliances_inactive');
323
+ if (el !== null && el !== void 0 && (_el$parentElement0 = el.parentElement) !== null && _el$parentElement0 !== void 0 && _el$parentElement0.parentElement) el.parentElement.parentElement.style.zIndex = 6;
300
324
  }
301
325
  }, {
302
- key: "closeDoorstyle",
303
- value: function closeDoorstyle() {
304
- this.setState({});
305
- document.getElementById('select_doorstyle_inactive').parentElement.parentElement.style.zIndex = 6;
306
- }
307
- }, {
308
- key: "closeReviewQuote",
309
- value: function closeReviewQuote() {
310
- this.setState({});
311
- document.getElementById('review_quote_inactive').parentElement.parentElement.style.zIndex = 6;
326
+ key: "getChildContext",
327
+ value: function getChildContext() {
328
+ var _this2 = this;
329
+ return _objectSpread(_objectSpread({}, (0, _objectsUtils.objectsMap)(_export["default"], function (actionNamespace) {
330
+ return _this2.props[actionNamespace];
331
+ })), {}, {
332
+ translator: this.props.translator,
333
+ catalog: this.props.catalog
334
+ });
312
335
  }
313
336
  }, {
314
337
  key: "componentDidMount",
@@ -318,30 +341,31 @@ var LiteKitchenConfigurator = /*#__PURE__*/function (_Component) {
318
341
  var _this$props = this.props,
319
342
  stateExtractor = _this$props.stateExtractor,
320
343
  plugins = _this$props.plugins;
344
+
345
+ // keep old behavior: run plugins once on mount
321
346
  var newplugins = (0, _toConsumableArray2["default"])(plugins);
322
347
  newplugins.forEach(function (newplugin) {
323
348
  return newplugin(store, stateExtractor);
324
349
  });
325
350
  }
326
351
  }, {
327
- key: "componentWillReceiveProps",
328
- value: function componentWillReceiveProps(nextProps) {
329
- var stateExtractor = nextProps.stateExtractor,
330
- state = nextProps.state,
331
- projectActions = nextProps.projectActions,
332
- catalog = nextProps.catalog,
333
- externalEvent = nextProps.externalEvent,
334
- onInternalEvent = nextProps.onInternalEvent;
352
+ key: "componentDidUpdate",
353
+ value: function componentDidUpdate(prevProps) {
354
+ var _extractedState$getIn;
355
+ var _this$props2 = this.props,
356
+ externalEvent = _this$props2.externalEvent,
357
+ extractedState = _this$props2.extractedState,
358
+ projectActions = _this$props2.projectActions,
359
+ catalog = _this$props2.catalog;
335
360
 
336
- // handle external events
337
- if (this.props.externalEvent !== externalEvent) {
338
- (0, _isolateEventHandler.handleExternalEvent)(nextProps);
339
- }
340
- var plannerState = stateExtractor(state);
341
- var catalogReady = plannerState.getIn(['catalog', 'ready']);
342
- if (!catalogReady) {
343
- projectActions.initCatalog(catalog);
361
+ // same behavior: handle external event when it changes
362
+ if (prevProps.externalEvent !== externalEvent) {
363
+ (0, _isolateEventHandler.handleExternalEvent)(this.props);
344
364
  }
365
+
366
+ // same behavior: init catalog until ready
367
+ var catalogReady = extractedState === null || extractedState === void 0 || (_extractedState$getIn = extractedState.getIn) === null || _extractedState$getIn === void 0 ? void 0 : _extractedState$getIn.call(extractedState, ['catalog', 'ready']);
368
+ if (!catalogReady) projectActions.initCatalog(catalog);
345
369
  }
346
370
  }, {
347
371
  key: "isProjectEmpty",
@@ -351,24 +375,51 @@ var LiteKitchenConfigurator = /*#__PURE__*/function (_Component) {
351
375
  var layer = layers.get(selectedLayer);
352
376
  return layer.areas.size + layer.lines.size + layer.holes.size + layer.items.size === 0;
353
377
  }
378
+ }, {
379
+ key: "getExtractedStateWithViewer2DInit",
380
+ value: function getExtractedStateWithViewer2DInit(extractedState, width, height) {
381
+ if (!extractedState) return extractedState;
382
+
383
+ // ✅ If the extractedState reference changed, drop cache immediately.
384
+ if (this._lastExtractedStateRef !== extractedState) {
385
+ this._lastExtractedStateRef = extractedState;
386
+ this._cachedViewer2DKey = null;
387
+ this._cachedExtractedState = null;
388
+ }
389
+ var _viewer2D = extractedState.getIn(['viewer2D']);
390
+ if (!_viewer2D || _viewer2D.size <= 0) return extractedState;
391
+ var v = _viewer2D.toJS();
392
+
393
+ // Only do the "center viewer2D if e/f are zero" logic.
394
+ // ✅ No need to build keys from unrelated parts of state.
395
+ if (v.e !== 0 || v.f !== 0) return extractedState;
396
+
397
+ // Build a cache key ONLY for this viewer2D-centering computation.
398
+ var cacheKey = "".concat(width, ":").concat(height, ":").concat(v.viewerWidth, ":").concat(v.viewerHeight, ":").concat(v.SVGWidth, ":").concat(v.SVGHeight);
399
+ if (this._cachedViewer2DKey === cacheKey && this._cachedExtractedState) {
400
+ return this._cachedExtractedState;
401
+ }
402
+ var centeredViewer2D = _viewer2D.merge({
403
+ e: v.viewerWidth / 2 - v.SVGWidth / 2,
404
+ f: v.viewerHeight / 2 - v.SVGHeight / 2,
405
+ a: 0.99,
406
+ d: 0.99
407
+ });
408
+ var merged = extractedState.merge({
409
+ viewer2D: centeredViewer2D
410
+ });
411
+ this._cachedViewer2DKey = cacheKey;
412
+ this._cachedExtractedState = merged;
413
+ return merged;
414
+ }
354
415
  }, {
355
416
  key: "render",
356
417
  value: function render() {
357
- var _this2 = this;
358
- var actionsFromProps = (0, _objectsUtils.objectsMap)(_export["default"], function (ns) {
359
- return _this2.props[ns];
360
- });
361
- var appCtxValue = _objectSpread(_objectSpread({}, actionsFromProps), {}, {
362
- translator: this.props.translator,
363
- // instance (defaultProps already gives one)
364
- catalog: this.props.catalog
365
- });
366
- var _this$props2 = this.props,
367
- width = _this$props2.width,
368
- height = _this$props2.height,
369
- state = _this$props2.state,
370
- stateExtractor = _this$props2.stateExtractor,
371
- props = (0, _objectWithoutProperties2["default"])(_this$props2, _excluded);
418
+ var _this$props3 = this.props,
419
+ width = _this$props3.width,
420
+ height = _this$props3.height,
421
+ extractedState = _this$props3.extractedState,
422
+ props = (0, _objectWithoutProperties2["default"])(_this$props3, _excluded);
372
423
  var _this$state = this.state,
373
424
  savePopupVisible = _this$state.savePopupVisible,
374
425
  quotePopupVisible = _this$state.quotePopupVisible,
@@ -376,53 +427,22 @@ var LiteKitchenConfigurator = /*#__PURE__*/function (_Component) {
376
427
  signOpen = _this$state.signOpen,
377
428
  myProjectsOpen = _this$state.myProjectsOpen;
378
429
  var contentW = width - toolbarW;
379
- // let contentW = width - toolbarW - sidebarW;
380
- // let toolbarH = height - footerBarH;
381
- // let contentH = height - footerBarH;
382
- // let sidebarH = height - footerBarH;
383
- var toolbarH = height;
384
430
  var contentH = height;
385
- var sidebarH = height;
386
- var headerW = width;
387
- var headerH = 60;
388
- var extractedState = stateExtractor(state);
389
- var firstVisit = this.state.wizardStepOpend && this.isProjectEmpty(extractedState.scene);
431
+ var extracted = this.getExtractedStateWithViewer2DInit(extractedState, width, height);
432
+ var firstVisit = this.state.wizardStepOpend && this.isProjectEmpty(extracted.scene);
390
433
  var allVisible = firstVisit || signOpen || myProjectsOpen;
391
- var _scene = extractedState.getIn(['scene']);
392
- var len = (0, _convertUnitsLite.convert)(_scene.width).from(_scene.unit).to('cm');
393
- var _viewer2D = extractedState.getIn(['viewer2D']);
394
- if (_viewer2D.size > 0) {
395
- var scaleX = width / len * 3;
396
- var scaleY = height / len * 3;
397
- var scale = scaleX > scaleY ? scaleY : scaleX;
398
- var _e = width - len * scale,
399
- _f = height - len * scale;
400
- var viewer = _viewer2D.toJS();
401
- if (viewer.e === 0 && viewer.f === 0) {
402
- _viewer2D = _viewer2D.merge({
403
- e: viewer.viewerWidth / 2 - viewer.SVGWidth / 2,
404
- f: viewer.viewerHeight / 2 - viewer.SVGHeight / 2,
405
- a: 0.99,
406
- d: 0.99
407
- });
408
- }
409
- }
410
- extractedState = extractedState.merge({
411
- viewer2D: _viewer2D
412
- });
413
- return /*#__PURE__*/_react["default"].createElement(_AppContext["default"].Provider, {
414
- value: appCtxValue
415
- }, /*#__PURE__*/_react["default"].createElement("section", null, /*#__PURE__*/_react["default"].createElement("div", {
434
+ return /*#__PURE__*/_react["default"].createElement("section", null, /*#__PURE__*/_react["default"].createElement("div", {
416
435
  style: _objectSpread(_objectSpread({}, wrapperStyle), {}, {
417
436
  height: height,
418
437
  display: 'flex',
419
- justifyContent: 'center'
438
+ justifyContent: 'center',
439
+ position: 'relative'
420
440
  })
421
441
  }, /*#__PURE__*/_react["default"].createElement(_export2.Content, (0, _extends2["default"])({
422
442
  width: contentW,
423
443
  height: contentH,
424
444
  catalog: this.props.catalog,
425
- state: extractedState,
445
+ state: extracted,
426
446
  toolBar: this.state.toolbar,
427
447
  setToolbar: this.setToolbar,
428
448
  replaceCabinet: this.replaceCabinet,
@@ -432,7 +452,20 @@ var LiteKitchenConfigurator = /*#__PURE__*/function (_Component) {
432
452
  return event.preventDefault();
433
453
  },
434
454
  onInternalEvent: this.props.onInternalEvent
435
- })))));
455
+ })), /*#__PURE__*/_react["default"].createElement(WarningItem, {
456
+ id: "warning_box_2d",
457
+ style: {
458
+ display: 'none'
459
+ }
460
+ }, /*#__PURE__*/_react["default"].createElement(SubCategoryItemImage, {
461
+ maskImage: "/assets/img/svg/3d_item_warning_info.svg",
462
+ style: {
463
+ backgroundColor: constants.BG_COLOR_1,
464
+ marginRight: 10,
465
+ height: 30,
466
+ width: 30
467
+ }
468
+ }), "This item is not available in the current door style. Replace it with another one.")));
436
469
  }
437
470
  }]);
438
471
  }(_react.Component);
@@ -446,13 +479,21 @@ LiteKitchenConfigurator.propTypes = {
446
479
  width: _propTypes["default"].number.isRequired,
447
480
  height: _propTypes["default"].number.isRequired,
448
481
  stateExtractor: _propTypes["default"].func.isRequired,
449
- sidebarComponents: _propTypes["default"].array,
450
- footerbarComponents: _propTypes["default"].array,
451
- customContents: _propTypes["default"].object,
452
- softwareSignature: _propTypes["default"].string,
453
482
  configData: _propTypes["default"].object,
454
- onInternalEvent: _propTypes["default"].func
483
+ onInternalEvent: _propTypes["default"].func,
484
+ extractedState: _propTypes["default"].object,
485
+ // ✅ injected by connect
486
+ externalEvent: _propTypes["default"].object
487
+ };
488
+ LiteKitchenConfigurator.contextTypes = {
489
+ store: _propTypes["default"].object.isRequired
455
490
  };
491
+ LiteKitchenConfigurator.childContextTypes = _objectSpread(_objectSpread({}, (0, _objectsUtils.objectsMap)(_export["default"], function () {
492
+ return _propTypes["default"].object;
493
+ })), {}, {
494
+ translator: _propTypes["default"].object,
495
+ catalog: _propTypes["default"].object
496
+ });
456
497
  LiteKitchenConfigurator.defaultProps = {
457
498
  translator: new _translator["default"](),
458
499
  catalog: new _catalog["default"](),
@@ -465,10 +506,16 @@ LiteKitchenConfigurator.defaultProps = {
465
506
  configData: {}
466
507
  };
467
508
 
468
- //redux connect
469
- function mapStateToProps(reduxState) {
509
+ // ✅ Only select the slice you actually use.
510
+ // This preserves behavior but massively reduces rerenders.
511
+ function mapStateToProps(reduxState, ownProps) {
512
+ var stateExtractor = ownProps.stateExtractor || function (s) {
513
+ return s;
514
+ };
515
+ var extractedState = stateExtractor(reduxState);
470
516
  return {
471
- state: reduxState
517
+ extractedState: extractedState,
518
+ state: extractedState
472
519
  };
473
520
  }
474
521
  function mapDispatchToProps(dispatch) {