kitchen-simulator 4.1.7-react-18 → 4.2.1

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 (206) hide show
  1. package/README.md +3 -0
  2. package/es/AppContext.js +1 -1
  3. package/es/LiteKitchenConfigurator.js +171 -111
  4. package/es/LiteRenderer.js +161 -129
  5. package/es/actions/export.js +25 -12
  6. package/es/actions/project-actions.js +2 -1
  7. package/es/assets/gltf/door_sliding.bin +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/factories/area-factory-3d.js +17 -17
  11. package/es/catalog/factories/wall-factory.js +1 -1
  12. package/es/catalog/holes/window-clear/planner-element.js +2 -2
  13. package/es/catalog/properties/export.js +21 -0
  14. package/es/catalog/properties/property-checkbox.js +68 -0
  15. package/es/catalog/properties/property-color.js +39 -0
  16. package/es/catalog/properties/property-enum.js +50 -0
  17. package/es/catalog/properties/property-hidden.js +19 -0
  18. package/es/catalog/properties/property-lenght-measure.js +100 -0
  19. package/es/catalog/properties/property-length-measure.js +84 -0
  20. package/es/catalog/properties/property-length-measure_hole.js +100 -0
  21. package/es/catalog/properties/property-number.js +48 -0
  22. package/es/catalog/properties/property-read-only.js +26 -0
  23. package/es/catalog/properties/property-string.js +48 -0
  24. package/es/catalog/properties/property-toggle.js +39 -0
  25. package/es/catalog/properties/shared-property-style.js +14 -0
  26. package/es/catalog/utils/exporter.js +24 -11
  27. package/es/catalog/utils/item-loader.js +224 -220
  28. package/es/class/hole.js +0 -2
  29. package/es/class/item.js +92 -70
  30. package/es/class/layer.js +1 -1
  31. package/es/class/line.js +4 -8
  32. package/es/class/project.js +96 -81
  33. package/es/components/content.js +10 -93
  34. package/es/components/export.js +4 -6
  35. package/es/components/style/button.js +106 -0
  36. package/es/components/style/cancel-button.js +21 -0
  37. package/es/components/style/content-container.js +30 -0
  38. package/es/components/style/content-title.js +25 -0
  39. package/es/components/style/delete-button.js +24 -0
  40. package/es/components/style/export.js +28 -2
  41. package/es/components/style/form-block.js +20 -0
  42. package/es/components/style/form-color-input.js +26 -0
  43. package/es/components/style/form-label.js +22 -0
  44. package/es/components/style/form-number-input.js +29 -29
  45. package/es/components/style/form-number-input_2.js +200 -0
  46. package/es/components/style/form-select.js +19 -0
  47. package/es/components/style/form-slider.js +60 -0
  48. package/es/components/style/form-submit-button.js +25 -0
  49. package/es/components/style/form-text-input.js +69 -0
  50. package/es/components/viewer2d/grids/grid-streak.js +1 -1
  51. package/es/components/viewer2d/group.js +5 -4
  52. package/es/components/viewer2d/item.js +155 -359
  53. package/es/components/viewer2d/layer.js +1 -1
  54. package/es/components/viewer2d/line.js +22 -54
  55. package/es/components/viewer2d/ruler.js +16 -11
  56. package/es/components/viewer2d/rulerDist.js +38 -51
  57. package/es/components/viewer2d/rulerX.js +4 -2
  58. package/es/components/viewer2d/rulerY.js +3 -0
  59. package/es/components/viewer2d/scene.js +17 -12
  60. package/es/components/viewer2d/state.js +1 -1
  61. package/es/components/viewer2d/utils.js +2 -2
  62. package/es/components/viewer2d/vertex.js +3 -2
  63. package/es/components/viewer2d/viewer2d.js +81 -118
  64. package/es/components/viewer3d/front3D.js +13 -1
  65. package/es/components/viewer3d/ruler-utils/scene3D.js +1 -1
  66. package/es/components/viewer3d/scene-creator.js +270 -69
  67. package/es/components/viewer3d/viewer3d-first-person.js +26 -32
  68. package/es/components/viewer3d/viewer3d.js +110 -130
  69. package/es/constants.js +7 -2
  70. package/es/devLiteRenderer.js +491 -150
  71. package/es/index.js +589 -62
  72. package/es/models.js +13 -8
  73. package/es/plugins/SVGLoader.js +1414 -0
  74. package/es/plugins/console-debugger.js +34 -0
  75. package/es/plugins/export.js +7 -0
  76. package/es/plugins/keyboard.js +110 -0
  77. package/es/reducers/project-reducer.js +4 -1
  78. package/es/reducers/viewer2d-reducer.js +3 -1
  79. package/es/reducers/viewer3d-reducer.js +3 -1
  80. package/es/styles/export.js +5 -0
  81. package/es/styles/tabs.css +40 -0
  82. package/es/utils/geometry.js +77 -119
  83. package/es/utils/helper.js +38 -1
  84. package/es/utils/isolate-event-handler.js +829 -609
  85. package/es/utils/molding.js +459 -11
  86. package/es/utils/ruler.js +58 -0
  87. package/lib/AppContext.js +1 -1
  88. package/lib/LiteKitchenConfigurator.js +170 -111
  89. package/lib/LiteRenderer.js +160 -129
  90. package/lib/actions/export.js +35 -39
  91. package/lib/actions/project-actions.js +2 -1
  92. package/lib/assets/gltf/door_sliding.bin +0 -0
  93. package/lib/assets/img/svg/bottombar/elevation.svg +12 -5
  94. package/lib/catalog/catalog.js +20 -4
  95. package/lib/catalog/factories/area-factory-3d.js +14 -14
  96. package/lib/catalog/factories/wall-factory.js +1 -1
  97. package/lib/catalog/holes/window-clear/planner-element.js +2 -2
  98. package/lib/catalog/properties/export.js +81 -0
  99. package/lib/catalog/properties/property-checkbox.js +76 -0
  100. package/lib/catalog/properties/property-color.js +47 -0
  101. package/lib/catalog/properties/property-enum.js +58 -0
  102. package/lib/catalog/properties/property-hidden.js +27 -0
  103. package/lib/catalog/properties/property-lenght-measure.js +108 -0
  104. package/lib/catalog/properties/property-length-measure.js +92 -0
  105. package/lib/catalog/properties/property-length-measure_hole.js +108 -0
  106. package/lib/catalog/properties/property-number.js +56 -0
  107. package/lib/catalog/properties/property-read-only.js +34 -0
  108. package/lib/catalog/properties/property-string.js +56 -0
  109. package/lib/catalog/properties/property-toggle.js +47 -0
  110. package/lib/catalog/properties/shared-property-style.js +21 -0
  111. package/lib/catalog/utils/exporter.js +24 -11
  112. package/lib/catalog/utils/item-loader.js +221 -217
  113. package/lib/class/hole.js +0 -2
  114. package/lib/class/item.js +90 -68
  115. package/lib/class/layer.js +1 -1
  116. package/lib/class/line.js +3 -7
  117. package/lib/class/project.js +96 -81
  118. package/lib/components/content.js +10 -93
  119. package/lib/components/export.js +6 -26
  120. package/lib/components/style/button.js +115 -0
  121. package/lib/components/style/cancel-button.js +29 -0
  122. package/lib/components/style/content-container.js +38 -0
  123. package/lib/components/style/content-title.js +35 -0
  124. package/lib/components/style/delete-button.js +34 -0
  125. package/lib/components/style/export.js +105 -1
  126. package/lib/components/style/form-block.js +28 -0
  127. package/lib/components/style/form-color-input.js +34 -0
  128. package/lib/components/style/form-label.js +30 -0
  129. package/lib/components/style/form-number-input.js +29 -29
  130. package/lib/components/style/form-number-input_2.js +209 -0
  131. package/lib/components/style/form-select.js +29 -0
  132. package/lib/components/style/form-slider.js +68 -0
  133. package/lib/components/style/form-submit-button.js +35 -0
  134. package/lib/components/style/form-text-input.js +78 -0
  135. package/lib/components/viewer2d/grids/grid-streak.js +1 -1
  136. package/lib/components/viewer2d/group.js +5 -4
  137. package/lib/components/viewer2d/item.js +152 -356
  138. package/lib/components/viewer2d/layer.js +1 -1
  139. package/lib/components/viewer2d/line.js +22 -54
  140. package/lib/components/viewer2d/ruler.js +15 -10
  141. package/lib/components/viewer2d/rulerDist.js +38 -51
  142. package/lib/components/viewer2d/rulerX.js +4 -2
  143. package/lib/components/viewer2d/rulerY.js +3 -0
  144. package/lib/components/viewer2d/scene.js +17 -12
  145. package/lib/components/viewer2d/state.js +1 -1
  146. package/lib/components/viewer2d/utils.js +2 -2
  147. package/lib/components/viewer2d/vertex.js +3 -2
  148. package/lib/components/viewer2d/viewer2d.js +79 -115
  149. package/lib/components/viewer3d/front3D.js +13 -1
  150. package/lib/components/viewer3d/ruler-utils/scene3D.js +1 -1
  151. package/lib/components/viewer3d/scene-creator.js +267 -66
  152. package/lib/components/viewer3d/viewer3d-first-person.js +26 -32
  153. package/lib/components/viewer3d/viewer3d.js +107 -126
  154. package/lib/constants.js +12 -7
  155. package/lib/devLiteRenderer.js +489 -148
  156. package/lib/index.js +591 -62
  157. package/lib/models.js +13 -8
  158. package/lib/plugins/SVGLoader.js +1419 -0
  159. package/lib/plugins/console-debugger.js +42 -0
  160. package/lib/plugins/export.js +25 -0
  161. package/lib/plugins/keyboard.js +117 -0
  162. package/lib/reducers/project-reducer.js +4 -1
  163. package/lib/reducers/viewer2d-reducer.js +3 -1
  164. package/lib/reducers/viewer3d-reducer.js +3 -1
  165. package/lib/styles/export.js +13 -0
  166. package/lib/styles/tabs.css +40 -0
  167. package/lib/utils/geometry.js +77 -119
  168. package/lib/utils/helper.js +40 -1
  169. package/lib/utils/isolate-event-handler.js +829 -608
  170. package/lib/utils/molding.js +460 -9
  171. package/lib/utils/ruler.js +63 -0
  172. package/package.json +21 -20
  173. package/es/mocks/appliancePayload.json +0 -27
  174. package/es/mocks/cabinetPayload.json +0 -1914
  175. package/es/mocks/cabinetPayload2.json +0 -76
  176. package/es/mocks/dataBundle2.json +0 -4
  177. package/es/mocks/distancePayload.json +0 -6
  178. package/es/mocks/doorStylePayload2.json +0 -84
  179. package/es/mocks/furnishingPayload.json +0 -23
  180. package/es/mocks/itemCDSPayload.json +0 -27
  181. package/es/mocks/lightingPayload.json +0 -23
  182. package/es/mocks/mockProps.json +0 -43
  183. package/es/mocks/mockProps2.json +0 -9
  184. package/es/mocks/moldingPayload.json +0 -19
  185. package/es/mocks/projectItemsCatalog.json +0 -133
  186. package/es/mocks/rectangleShape.json +0 -238
  187. package/es/mocks/replaceCabinetPayload.json +0 -81
  188. package/es/mocks/roomShapePayload.json +0 -5
  189. package/es/useAppContext.js +0 -8
  190. package/lib/mocks/appliancePayload.json +0 -27
  191. package/lib/mocks/cabinetPayload.json +0 -1914
  192. package/lib/mocks/cabinetPayload2.json +0 -76
  193. package/lib/mocks/dataBundle2.json +0 -4
  194. package/lib/mocks/distancePayload.json +0 -6
  195. package/lib/mocks/doorStylePayload2.json +0 -84
  196. package/lib/mocks/furnishingPayload.json +0 -23
  197. package/lib/mocks/itemCDSPayload.json +0 -27
  198. package/lib/mocks/lightingPayload.json +0 -23
  199. package/lib/mocks/mockProps.json +0 -43
  200. package/lib/mocks/mockProps2.json +0 -9
  201. package/lib/mocks/moldingPayload.json +0 -19
  202. package/lib/mocks/projectItemsCatalog.json +0 -133
  203. package/lib/mocks/rectangleShape.json +0 -238
  204. package/lib/mocks/replaceCabinetPayload.json +0 -81
  205. package/lib/mocks/roomShapePayload.json +0 -5
  206. package/lib/useAppContext.js +0 -16
@@ -7,13 +7,16 @@ Object.defineProperty(exports, "__esModule", {
7
7
  });
8
8
  exports["default"] = void 0;
9
9
  var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
10
- var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
11
10
  var _objectWithoutProperties2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutProperties"));
11
+ var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
12
+ var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
12
13
  var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
13
14
  var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
14
15
  var _possibleConstructorReturn2 = _interopRequireDefault(require("@babel/runtime/helpers/possibleConstructorReturn"));
15
16
  var _getPrototypeOf2 = _interopRequireDefault(require("@babel/runtime/helpers/getPrototypeOf"));
16
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"));
17
20
  var _convertUnitsLite = require("./utils/convert-units-lite");
18
21
  var _propTypes = _interopRequireDefault(require("prop-types"));
19
22
  var _react = _interopRequireWildcard(require("react"));
@@ -28,8 +31,8 @@ var _translator = _interopRequireDefault(require("./translator/translator"));
28
31
  var _objectsUtils = require("./utils/objects-utils");
29
32
  var _version = require("./version");
30
33
  var _isolateEventHandler = require("./utils/isolate-event-handler");
31
- var _AppContext = _interopRequireDefault(require("./AppContext"));
32
- var _excluded = ["width", "height", "state", "stateExtractor"];
34
+ var _excluded = ["width", "height", "extractedState"];
35
+ var _templateObject, _templateObject2; // LiteKitchenConfigurator.jsx
33
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); }
34
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; }
35
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; }
@@ -40,14 +43,16 @@ var wrapperStyle = {
40
43
  display: 'flex',
41
44
  flexFlow: 'row nowrap'
42
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
+ });
43
50
  var LiteKitchenConfigurator = /*#__PURE__*/function (_Component) {
44
51
  function LiteKitchenConfigurator(props) {
45
52
  var _utmRequestData2, _utmRequestData3, _utmRequestData4, _utmRequestData5, _utmRequestData6, _utmRequestData7, _utmRequestData8, _utmRequestData9, _utmRequestData0;
46
53
  var _this;
47
54
  (0, _classCallCheck2["default"])(this, LiteKitchenConfigurator);
48
55
  _this = _callSuper(this, LiteKitchenConfigurator, [props]);
49
-
50
- // utm tracking
51
56
  var utmDetailParams = new URLSearchParams(_this.props.location && _this.props.location.search);
52
57
  var utmStrEncoded = utmDetailParams.get('details');
53
58
  var utmRequestData = null;
@@ -57,7 +62,7 @@ var LiteKitchenConfigurator = /*#__PURE__*/function (_Component) {
57
62
  utmRequestData = JSON.parse((0, _helper.base64Decode)(utmStrEncoded));
58
63
  utmRequestData = JSON.parse((_utmRequestData = utmRequestData) === null || _utmRequestData === void 0 ? void 0 : _utmRequestData.utm);
59
64
  } catch (e) {
60
- console.error('Cannot parse utm parameter: ', error);
65
+ console.error('Cannot parse utm parameter: ', e);
61
66
  utmRequestData = null;
62
67
  }
63
68
  }
@@ -76,7 +81,6 @@ var LiteKitchenConfigurator = /*#__PURE__*/function (_Component) {
76
81
  myProjectsOpen: false,
77
82
  myProjectsToLogin: false,
78
83
  downloadPopupVisible: false,
79
- // For Toolbar Item
80
84
  toolbar: '',
81
85
  reviewQuotePopupOpened: false,
82
86
  floorOpened: false,
@@ -94,8 +98,6 @@ var LiteKitchenConfigurator = /*#__PURE__*/function (_Component) {
94
98
  isSaved: false,
95
99
  isLeaving: false
96
100
  };
97
-
98
- // For UTM tracking
99
101
  _this.utm = {
100
102
  utm_source: ((_utmRequestData2 = utmRequestData) === null || _utmRequestData2 === void 0 ? void 0 : _utmRequestData2.source) || 'source',
101
103
  utm_medium: ((_utmRequestData3 = utmRequestData) === null || _utmRequestData3 === void 0 ? void 0 : _utmRequestData3.medium) || 'medium',
@@ -117,6 +119,7 @@ var LiteKitchenConfigurator = /*#__PURE__*/function (_Component) {
117
119
  _this.closeCabinetTB = _this.closeCabinetTB.bind(_this);
118
120
  _this.closeFinishingTB = _this.closeFinishingTB.bind(_this);
119
121
  _this.closeApplianceTB = _this.closeApplianceTB.bind(_this);
122
+ _this.setToolbar = _this.setToolbar.bind(_this);
120
123
  _this.replaceCabinet = _this.replaceCabinet.bind(_this);
121
124
  _this.setSubmitToSave = _this.setSubmitToSave.bind(_this);
122
125
  _this.setSignOpen = _this.setSignOpen.bind(_this);
@@ -125,12 +128,22 @@ var LiteKitchenConfigurator = /*#__PURE__*/function (_Component) {
125
128
  _this.setDownloadPopupVisible = _this.setDownloadPopupVisible.bind(_this);
126
129
  _this.neverShowInput = /*#__PURE__*/_react["default"].createRef(null);
127
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;
128
136
  return _this;
129
137
  }
130
-
131
- // Toolbar control functions
132
138
  (0, _inherits2["default"])(LiteKitchenConfigurator, _Component);
133
139
  return (0, _createClass2["default"])(LiteKitchenConfigurator, [{
140
+ key: "setToolbar",
141
+ value: function setToolbar(toolBarKey) {
142
+ this.setState({
143
+ toolbar: toolBarKey
144
+ });
145
+ }
146
+ }, {
134
147
  key: "setShowProperty",
135
148
  value: function setShowProperty(value) {
136
149
  this.setState({
@@ -205,26 +218,32 @@ var LiteKitchenConfigurator = /*#__PURE__*/function (_Component) {
205
218
  }, {
206
219
  key: "openFloor",
207
220
  value: function openFloor() {
221
+ var _el$parentElement;
208
222
  this.setState({
209
223
  floorOpened: true
210
224
  });
211
- 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;
212
227
  }
213
228
  }, {
214
229
  key: "openCabinet",
215
230
  value: function openCabinet() {
231
+ var _el$parentElement2;
216
232
  this.setState({
217
233
  cabinetOpened: true
218
234
  });
219
- 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;
220
237
  }
221
238
  }, {
222
239
  key: "toggleDoorStyle",
223
240
  value: function toggleDoorStyle(visible) {
241
+ var _el$parentElement3;
224
242
  this.setState({
225
243
  doorStyleOpen: visible
226
244
  });
227
- 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;
228
247
  }
229
248
  }, {
230
249
  key: "replaceCabinet",
@@ -236,101 +255,117 @@ var LiteKitchenConfigurator = /*#__PURE__*/function (_Component) {
236
255
  }, {
237
256
  key: "openAppliance",
238
257
  value: function openAppliance() {
258
+ var _el$parentElement4;
239
259
  this.setState({
240
260
  applianceOpened: true
241
261
  });
242
- 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;
243
264
  }
244
265
  }, {
245
266
  key: "openFinishing",
246
267
  value: function openFinishing() {
268
+ var _el$parentElement5;
247
269
  this.setState({
248
270
  finishingOpened: true
249
271
  });
250
- 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;
251
274
  }
252
275
  }, {
253
276
  key: "onReviewQuoteClicked",
254
277
  value: function onReviewQuoteClicked(visible) {
278
+ var _el$parentElement6;
255
279
  this.setState({
256
280
  reviewQuotePopupOpened: visible
257
281
  });
258
- 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;
259
284
  }
260
285
  }, {
261
286
  key: "closeFloorTB",
262
287
  value: function closeFloorTB() {
288
+ var _el$parentElement7;
263
289
  this.setState({
264
290
  floorOpened: false
265
291
  });
266
- 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;
267
294
  }
268
295
  }, {
269
296
  key: "closeCabinetTB",
270
297
  value: function closeCabinetTB() {
298
+ var _el$parentElement8;
271
299
  this.setState({
272
300
  cabinetOpened: false
273
301
  });
274
- 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;
275
304
  }
276
305
  }, {
277
306
  key: "closeFinishingTB",
278
307
  value: function closeFinishingTB() {
308
+ var _el$parentElement9;
279
309
  this.setState({
280
310
  finishingOpened: false
281
311
  });
282
- 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;
283
314
  }
284
315
  }, {
285
316
  key: "closeApplianceTB",
286
317
  value: function closeApplianceTB() {
318
+ var _el$parentElement0;
287
319
  this.setState({
288
320
  applianceOpened: false
289
321
  });
290
- document.getElementById('add_appliances_inactive').parentElement.parentElement.style.zIndex = 6;
291
- }
292
- }, {
293
- key: "closeDoorstyle",
294
- value: function closeDoorstyle() {
295
- this.setState({});
296
- document.getElementById('select_doorstyle_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;
297
324
  }
298
325
  }, {
299
- key: "closeReviewQuote",
300
- value: function closeReviewQuote() {
301
- this.setState({});
302
- 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
+ });
303
335
  }
304
336
  }, {
305
337
  key: "componentDidMount",
306
338
  value: function componentDidMount() {
307
339
  window.forRedo = [];
340
+ var store = this.context.store;
341
+ var _this$props = this.props,
342
+ stateExtractor = _this$props.stateExtractor,
343
+ plugins = _this$props.plugins;
344
+
345
+ // keep old behavior: run plugins once on mount
346
+ var newplugins = (0, _toConsumableArray2["default"])(plugins);
347
+ newplugins.forEach(function (newplugin) {
348
+ return newplugin(store, stateExtractor);
349
+ });
308
350
  }
309
351
  }, {
310
352
  key: "componentDidUpdate",
311
353
  value: function componentDidUpdate(prevProps) {
312
- var _this$props = this.props,
313
- stateExtractor = _this$props.stateExtractor,
314
- state = _this$props.state,
315
- projectActions = _this$props.projectActions,
316
- catalog = _this$props.catalog,
317
- externalEvent = _this$props.externalEvent;
318
- var plannerState = stateExtractor(state);
319
- var catalogReady = plannerState.getIn(['catalog', 'ready']);
320
- if (!catalogReady) {
321
- projectActions.initCatalog(catalog);
322
- }
323
- if (prevProps.externalEvent !== externalEvent && externalEvent) {
324
- var _externalEvent$id, _externalEvent$payloa, _externalEvent$payloa2;
325
- var key = (_externalEvent$id = externalEvent.id) !== null && _externalEvent$id !== void 0 ? _externalEvent$id : JSON.stringify({
326
- type: externalEvent.type,
327
- payload: (_externalEvent$payloa = (_externalEvent$payloa2 = externalEvent.payload) === null || _externalEvent$payloa2 === void 0 ? void 0 : _externalEvent$payloa2.mode) !== null && _externalEvent$payloa !== void 0 ? _externalEvent$payloa : externalEvent.payload
328
- });
329
- if (key !== this.lastHandledExternalEventKey) {
330
- this.lastHandledExternalEventKey = key;
331
- (0, _isolateEventHandler.handleExternalEvent)(this.props);
332
- }
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;
360
+
361
+ // same behavior: handle external event when it changes
362
+ if (prevProps.externalEvent !== externalEvent) {
363
+ (0, _isolateEventHandler.handleExternalEvent)(this.props);
333
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);
334
369
  }
335
370
  }, {
336
371
  key: "isProjectEmpty",
@@ -340,23 +375,51 @@ var LiteKitchenConfigurator = /*#__PURE__*/function (_Component) {
340
375
  var layer = layers.get(selectedLayer);
341
376
  return layer.areas.size + layer.lines.size + layer.holes.size + layer.items.size === 0;
342
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
+ }
343
415
  }, {
344
416
  key: "render",
345
417
  value: function render() {
346
- var _this2 = this;
347
- var _this$props2 = this.props,
348
- width = _this$props2.width,
349
- height = _this$props2.height,
350
- state = _this$props2.state,
351
- stateExtractor = _this$props2.stateExtractor,
352
- props = (0, _objectWithoutProperties2["default"])(_this$props2, _excluded);
353
- var actionsFromProps = (0, _objectsUtils.objectsMap)(_export["default"], function (ns) {
354
- return _this2.props[ns];
355
- });
356
- var appCtxValue = _objectSpread(_objectSpread({}, actionsFromProps), {}, {
357
- translator: this.props.translator,
358
- catalog: this.props.catalog
359
- });
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);
360
423
  var _this$state = this.state,
361
424
  savePopupVisible = _this$state.savePopupVisible,
362
425
  quotePopupVisible = _this$state.quotePopupVisible,
@@ -364,43 +427,11 @@ var LiteKitchenConfigurator = /*#__PURE__*/function (_Component) {
364
427
  signOpen = _this$state.signOpen,
365
428
  myProjectsOpen = _this$state.myProjectsOpen;
366
429
  var contentW = width - toolbarW;
367
- // let contentW = width - toolbarW - sidebarW;
368
- // let toolbarH = height - footerBarH;
369
- // let contentH = height - footerBarH;
370
- // let sidebarH = height - footerBarH;
371
- var toolbarH = height;
372
430
  var contentH = height;
373
- var sidebarH = height;
374
- var headerW = width;
375
- var headerH = 60;
376
- var extractedState = stateExtractor(state);
377
- 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);
378
433
  var allVisible = firstVisit || signOpen || myProjectsOpen;
379
- var _scene = extractedState.getIn(['scene']);
380
- var len = (0, _convertUnitsLite.convert)(_scene.width).from(_scene.unit).to('cm');
381
- var _viewer2D = extractedState.getIn(['viewer2D']);
382
- if (_viewer2D.size > 0) {
383
- var scaleX = width / len * 3;
384
- var scaleY = height / len * 3;
385
- var scale = scaleX > scaleY ? scaleY : scaleX;
386
- var _e = width - len * scale,
387
- _f = height - len * scale;
388
- var viewer = _viewer2D.toJS();
389
- if (viewer.e === 0 && viewer.f === 0) {
390
- _viewer2D = _viewer2D.merge({
391
- e: viewer.viewerWidth / 2 - viewer.SVGWidth / 2,
392
- f: viewer.viewerHeight / 2 - viewer.SVGHeight / 2,
393
- a: 0.99,
394
- d: 0.99
395
- });
396
- }
397
- }
398
- extractedState = extractedState.merge({
399
- viewer2D: _viewer2D
400
- });
401
- return /*#__PURE__*/_react["default"].createElement(_AppContext["default"].Provider, {
402
- value: appCtxValue
403
- }, /*#__PURE__*/_react["default"].createElement("section", null, /*#__PURE__*/_react["default"].createElement("div", {
434
+ return /*#__PURE__*/_react["default"].createElement("section", null, /*#__PURE__*/_react["default"].createElement("div", {
404
435
  style: _objectSpread(_objectSpread({}, wrapperStyle), {}, {
405
436
  height: height,
406
437
  display: 'flex',
@@ -411,8 +442,9 @@ var LiteKitchenConfigurator = /*#__PURE__*/function (_Component) {
411
442
  width: contentW,
412
443
  height: contentH,
413
444
  catalog: this.props.catalog,
414
- state: extractedState,
445
+ state: extracted,
415
446
  toolBar: this.state.toolbar,
447
+ setToolbar: this.setToolbar,
416
448
  replaceCabinet: this.replaceCabinet,
417
449
  keyDownEnable: !savePopupVisible && !quotePopupVisible && !assistPopupVisible
418
450
  }, props, {
@@ -420,7 +452,20 @@ var LiteKitchenConfigurator = /*#__PURE__*/function (_Component) {
420
452
  return event.preventDefault();
421
453
  },
422
454
  onInternalEvent: this.props.onInternalEvent
423
- })))));
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.")));
424
469
  }
425
470
  }]);
426
471
  }(_react.Component);
@@ -434,13 +479,21 @@ LiteKitchenConfigurator.propTypes = {
434
479
  width: _propTypes["default"].number.isRequired,
435
480
  height: _propTypes["default"].number.isRequired,
436
481
  stateExtractor: _propTypes["default"].func.isRequired,
437
- sidebarComponents: _propTypes["default"].array,
438
- footerbarComponents: _propTypes["default"].array,
439
- customContents: _propTypes["default"].object,
440
- softwareSignature: _propTypes["default"].string,
441
482
  configData: _propTypes["default"].object,
442
- onInternalEvent: _propTypes["default"].func
483
+ onInternalEvent: _propTypes["default"].func,
484
+ extractedState: _propTypes["default"].object,
485
+ // ✅ injected by connect
486
+ externalEvent: _propTypes["default"].object
443
487
  };
488
+ LiteKitchenConfigurator.contextTypes = {
489
+ store: _propTypes["default"].object.isRequired
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
+ });
444
497
  LiteKitchenConfigurator.defaultProps = {
445
498
  translator: new _translator["default"](),
446
499
  catalog: new _catalog["default"](),
@@ -453,10 +506,16 @@ LiteKitchenConfigurator.defaultProps = {
453
506
  configData: {}
454
507
  };
455
508
 
456
- //redux connect
457
- 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);
458
516
  return {
459
- state: reduxState
517
+ extractedState: extractedState,
518
+ state: extractedState
460
519
  };
461
520
  }
462
521
  function mapDispatchToProps(dispatch) {