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
package/README.md CHANGED
@@ -44,12 +44,15 @@ You need to check **webpack.config.js** to change the API server.
44
44
  Webpack is used as the module bundler. The source code is in the **src** folder.
45
45
 
46
46
  entry: {
47
+ // app: './src/renderer.jsx', // For production build WITH API
47
48
  app: './src/devLiteRenderer.jsx', // For development of LiteRenderer
48
49
  vendor: VENDORS_LIBRARIES
49
50
  },
50
51
 
51
52
  - **index.html**: The main HTML file.
52
53
 
54
+ - **[renderer.jsx](src/renderer.jsx)**: The main JavaScript file that bootstraps the React application. WTH API CALLS
55
+
53
56
  - **[devLiteRenderer.jsx](src/devLiteRenderer.jsx).jsx**: The main JavaScript file that bootstraps the React application. For development lite version without API calls. WITH MOCKS
54
57
  - **[LiteRenderer.js](src/LiteRenderer.js)**: The Lite React component that uses mock data and creates the store / catalog etc
55
58
  - [LiteKitchenConfigurator.jsx](src/LiteKitchenConfigurator.jsx)
package/es/AppContext.js CHANGED
@@ -1,3 +1,3 @@
1
1
  import React from 'react';
2
- var AppContext = /*#__PURE__*/React.createContext(null);
2
+ var AppContext = /*#__PURE__*/React.createContext({});
3
3
  export default AppContext;
@@ -1,16 +1,21 @@
1
1
  import _extends from "@babel/runtime/helpers/esm/extends";
2
- import _defineProperty from "@babel/runtime/helpers/esm/defineProperty";
3
2
  import _objectWithoutProperties from "@babel/runtime/helpers/esm/objectWithoutProperties";
3
+ import _toConsumableArray from "@babel/runtime/helpers/esm/toConsumableArray";
4
+ import _defineProperty from "@babel/runtime/helpers/esm/defineProperty";
4
5
  import _classCallCheck from "@babel/runtime/helpers/esm/classCallCheck";
5
6
  import _createClass from "@babel/runtime/helpers/esm/createClass";
6
7
  import _possibleConstructorReturn from "@babel/runtime/helpers/esm/possibleConstructorReturn";
7
8
  import _getPrototypeOf from "@babel/runtime/helpers/esm/getPrototypeOf";
8
9
  import _inherits from "@babel/runtime/helpers/esm/inherits";
9
- var _excluded = ["width", "height", "state", "stateExtractor"];
10
+ import _taggedTemplateLiteral from "@babel/runtime/helpers/esm/taggedTemplateLiteral";
11
+ var _excluded = ["width", "height", "extractedState"];
12
+ var _templateObject, _templateObject2;
10
13
  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; }
11
14
  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) { _defineProperty(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; }
12
15
  function _callSuper(t, o, e) { return o = _getPrototypeOf(o), _possibleConstructorReturn(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], _getPrototypeOf(t).constructor) : o.apply(t, e)); }
13
16
  function _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); }
17
+ // LiteKitchenConfigurator.jsx
18
+ import styled from 'styled-components';
14
19
  import { convert } from "./utils/convert-units-lite";
15
20
  import PropTypes from 'prop-types';
16
21
  import React, { Component } from 'react';
@@ -25,20 +30,21 @@ import Translator from "./translator/translator";
25
30
  import { objectsMap } from "./utils/objects-utils";
26
31
  import { VERSION } from "./version";
27
32
  import { handleExternalEvent } from "./utils/isolate-event-handler";
28
- import AppContext from "./AppContext";
29
33
  var toolbarW = 0;
30
34
  var wrapperStyle = {
31
35
  display: 'flex',
32
36
  flexFlow: 'row nowrap'
33
37
  };
38
+ var WarningItem = styled.div(_templateObject || (_templateObject = _taggedTemplateLiteral(["\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"])));
39
+ var SubCategoryItemImage = styled.img(_templateObject2 || (_templateObject2 = _taggedTemplateLiteral(["\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) {
40
+ return props.maskImage + '?nocache=2025';
41
+ });
34
42
  var LiteKitchenConfigurator = /*#__PURE__*/function (_Component) {
35
43
  function LiteKitchenConfigurator(props) {
36
44
  var _utmRequestData2, _utmRequestData3, _utmRequestData4, _utmRequestData5, _utmRequestData6, _utmRequestData7, _utmRequestData8, _utmRequestData9, _utmRequestData0;
37
45
  var _this;
38
46
  _classCallCheck(this, LiteKitchenConfigurator);
39
47
  _this = _callSuper(this, LiteKitchenConfigurator, [props]);
40
-
41
- // utm tracking
42
48
  var utmDetailParams = new URLSearchParams(_this.props.location && _this.props.location.search);
43
49
  var utmStrEncoded = utmDetailParams.get('details');
44
50
  var utmRequestData = null;
@@ -48,7 +54,7 @@ var LiteKitchenConfigurator = /*#__PURE__*/function (_Component) {
48
54
  utmRequestData = JSON.parse(base64Decode(utmStrEncoded));
49
55
  utmRequestData = JSON.parse((_utmRequestData = utmRequestData) === null || _utmRequestData === void 0 ? void 0 : _utmRequestData.utm);
50
56
  } catch (e) {
51
- console.error('Cannot parse utm parameter: ', error);
57
+ console.error('Cannot parse utm parameter: ', e);
52
58
  utmRequestData = null;
53
59
  }
54
60
  }
@@ -67,7 +73,6 @@ var LiteKitchenConfigurator = /*#__PURE__*/function (_Component) {
67
73
  myProjectsOpen: false,
68
74
  myProjectsToLogin: false,
69
75
  downloadPopupVisible: false,
70
- // For Toolbar Item
71
76
  toolbar: '',
72
77
  reviewQuotePopupOpened: false,
73
78
  floorOpened: false,
@@ -85,8 +90,6 @@ var LiteKitchenConfigurator = /*#__PURE__*/function (_Component) {
85
90
  isSaved: false,
86
91
  isLeaving: false
87
92
  };
88
-
89
- // For UTM tracking
90
93
  _this.utm = {
91
94
  utm_source: ((_utmRequestData2 = utmRequestData) === null || _utmRequestData2 === void 0 ? void 0 : _utmRequestData2.source) || 'source',
92
95
  utm_medium: ((_utmRequestData3 = utmRequestData) === null || _utmRequestData3 === void 0 ? void 0 : _utmRequestData3.medium) || 'medium',
@@ -108,6 +111,7 @@ var LiteKitchenConfigurator = /*#__PURE__*/function (_Component) {
108
111
  _this.closeCabinetTB = _this.closeCabinetTB.bind(_this);
109
112
  _this.closeFinishingTB = _this.closeFinishingTB.bind(_this);
110
113
  _this.closeApplianceTB = _this.closeApplianceTB.bind(_this);
114
+ _this.setToolbar = _this.setToolbar.bind(_this);
111
115
  _this.replaceCabinet = _this.replaceCabinet.bind(_this);
112
116
  _this.setSubmitToSave = _this.setSubmitToSave.bind(_this);
113
117
  _this.setSignOpen = _this.setSignOpen.bind(_this);
@@ -116,12 +120,22 @@ var LiteKitchenConfigurator = /*#__PURE__*/function (_Component) {
116
120
  _this.setDownloadPopupVisible = _this.setDownloadPopupVisible.bind(_this);
117
121
  _this.neverShowInput = /*#__PURE__*/React.createRef(null);
118
122
  _this.setShowProperty = _this.setShowProperty.bind(_this);
123
+
124
+ // cache for viewer2D init so we don't allocate merges every render
125
+ _this._lastExtractedStateRef = null;
126
+ _this._cachedViewer2DKey = null;
127
+ _this._cachedExtractedState = null;
119
128
  return _this;
120
129
  }
121
-
122
- // Toolbar control functions
123
130
  _inherits(LiteKitchenConfigurator, _Component);
124
131
  return _createClass(LiteKitchenConfigurator, [{
132
+ key: "setToolbar",
133
+ value: function setToolbar(toolBarKey) {
134
+ this.setState({
135
+ toolbar: toolBarKey
136
+ });
137
+ }
138
+ }, {
125
139
  key: "setShowProperty",
126
140
  value: function setShowProperty(value) {
127
141
  this.setState({
@@ -196,26 +210,32 @@ var LiteKitchenConfigurator = /*#__PURE__*/function (_Component) {
196
210
  }, {
197
211
  key: "openFloor",
198
212
  value: function openFloor() {
213
+ var _el$parentElement;
199
214
  this.setState({
200
215
  floorOpened: true
201
216
  });
202
- document.getElementById('make_floorplan_inactive').parentElement.parentElement.style.zIndex = 999;
217
+ var el = document.getElementById('make_floorplan_inactive');
218
+ if (el !== null && el !== void 0 && (_el$parentElement = el.parentElement) !== null && _el$parentElement !== void 0 && _el$parentElement.parentElement) el.parentElement.parentElement.style.zIndex = 999;
203
219
  }
204
220
  }, {
205
221
  key: "openCabinet",
206
222
  value: function openCabinet() {
223
+ var _el$parentElement2;
207
224
  this.setState({
208
225
  cabinetOpened: true
209
226
  });
210
- document.getElementById('add_cabinets_inactive').parentElement.parentElement.style.zIndex = 999;
227
+ var el = document.getElementById('add_cabinets_inactive');
228
+ if (el !== null && el !== void 0 && (_el$parentElement2 = el.parentElement) !== null && _el$parentElement2 !== void 0 && _el$parentElement2.parentElement) el.parentElement.parentElement.style.zIndex = 999;
211
229
  }
212
230
  }, {
213
231
  key: "toggleDoorStyle",
214
232
  value: function toggleDoorStyle(visible) {
233
+ var _el$parentElement3;
215
234
  this.setState({
216
235
  doorStyleOpen: visible
217
236
  });
218
- document.getElementById('select_doorstyle_inactive').parentElement.parentElement.style.zIndex = visible ? 999 : 6;
237
+ var el = document.getElementById('select_doorstyle_inactive');
238
+ 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;
219
239
  }
220
240
  }, {
221
241
  key: "replaceCabinet",
@@ -227,101 +247,117 @@ var LiteKitchenConfigurator = /*#__PURE__*/function (_Component) {
227
247
  }, {
228
248
  key: "openAppliance",
229
249
  value: function openAppliance() {
250
+ var _el$parentElement4;
230
251
  this.setState({
231
252
  applianceOpened: true
232
253
  });
233
- document.getElementById('add_appliances_inactive').parentElement.parentElement.style.zIndex = 999;
254
+ var el = document.getElementById('add_appliances_inactive');
255
+ if (el !== null && el !== void 0 && (_el$parentElement4 = el.parentElement) !== null && _el$parentElement4 !== void 0 && _el$parentElement4.parentElement) el.parentElement.parentElement.style.zIndex = 999;
234
256
  }
235
257
  }, {
236
258
  key: "openFinishing",
237
259
  value: function openFinishing() {
260
+ var _el$parentElement5;
238
261
  this.setState({
239
262
  finishingOpened: true
240
263
  });
241
- document.getElementById('finishing_touches_inactive').parentElement.parentElement.style.zIndex = 999;
264
+ var el = document.getElementById('finishing_touches_inactive');
265
+ if (el !== null && el !== void 0 && (_el$parentElement5 = el.parentElement) !== null && _el$parentElement5 !== void 0 && _el$parentElement5.parentElement) el.parentElement.parentElement.style.zIndex = 999;
242
266
  }
243
267
  }, {
244
268
  key: "onReviewQuoteClicked",
245
269
  value: function onReviewQuoteClicked(visible) {
270
+ var _el$parentElement6;
246
271
  this.setState({
247
272
  reviewQuotePopupOpened: visible
248
273
  });
249
- document.getElementById('review_quote_inactive').parentElement.parentElement.style.zIndex = visible ? 999 : 6;
274
+ var el = document.getElementById('review_quote_inactive');
275
+ 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;
250
276
  }
251
277
  }, {
252
278
  key: "closeFloorTB",
253
279
  value: function closeFloorTB() {
280
+ var _el$parentElement7;
254
281
  this.setState({
255
282
  floorOpened: false
256
283
  });
257
- document.getElementById('make_floorplan_inactive') && (document.getElementById('make_floorplan_inactive').parentElement.parentElement.style.zIndex = 6);
284
+ var el = document.getElementById('make_floorplan_inactive');
285
+ if (el !== null && el !== void 0 && (_el$parentElement7 = el.parentElement) !== null && _el$parentElement7 !== void 0 && _el$parentElement7.parentElement) el.parentElement.parentElement.style.zIndex = 6;
258
286
  }
259
287
  }, {
260
288
  key: "closeCabinetTB",
261
289
  value: function closeCabinetTB() {
290
+ var _el$parentElement8;
262
291
  this.setState({
263
292
  cabinetOpened: false
264
293
  });
265
- document.getElementById('add_cabinets_inactive').parentElement.parentElement.style.zIndex = 6;
294
+ var el = document.getElementById('add_cabinets_inactive');
295
+ if (el !== null && el !== void 0 && (_el$parentElement8 = el.parentElement) !== null && _el$parentElement8 !== void 0 && _el$parentElement8.parentElement) el.parentElement.parentElement.style.zIndex = 6;
266
296
  }
267
297
  }, {
268
298
  key: "closeFinishingTB",
269
299
  value: function closeFinishingTB() {
300
+ var _el$parentElement9;
270
301
  this.setState({
271
302
  finishingOpened: false
272
303
  });
273
- document.getElementById('finishing_touches_inactive').parentElement.parentElement.style.zIndex = 6;
304
+ var el = document.getElementById('finishing_touches_inactive');
305
+ if (el !== null && el !== void 0 && (_el$parentElement9 = el.parentElement) !== null && _el$parentElement9 !== void 0 && _el$parentElement9.parentElement) el.parentElement.parentElement.style.zIndex = 6;
274
306
  }
275
307
  }, {
276
308
  key: "closeApplianceTB",
277
309
  value: function closeApplianceTB() {
310
+ var _el$parentElement0;
278
311
  this.setState({
279
312
  applianceOpened: false
280
313
  });
281
- document.getElementById('add_appliances_inactive').parentElement.parentElement.style.zIndex = 6;
314
+ var el = document.getElementById('add_appliances_inactive');
315
+ if (el !== null && el !== void 0 && (_el$parentElement0 = el.parentElement) !== null && _el$parentElement0 !== void 0 && _el$parentElement0.parentElement) el.parentElement.parentElement.style.zIndex = 6;
282
316
  }
283
317
  }, {
284
- key: "closeDoorstyle",
285
- value: function closeDoorstyle() {
286
- this.setState({});
287
- document.getElementById('select_doorstyle_inactive').parentElement.parentElement.style.zIndex = 6;
288
- }
289
- }, {
290
- key: "closeReviewQuote",
291
- value: function closeReviewQuote() {
292
- this.setState({});
293
- document.getElementById('review_quote_inactive').parentElement.parentElement.style.zIndex = 6;
318
+ key: "getChildContext",
319
+ value: function getChildContext() {
320
+ var _this2 = this;
321
+ return _objectSpread(_objectSpread({}, objectsMap(actions, function (actionNamespace) {
322
+ return _this2.props[actionNamespace];
323
+ })), {}, {
324
+ translator: this.props.translator,
325
+ catalog: this.props.catalog
326
+ });
294
327
  }
295
328
  }, {
296
329
  key: "componentDidMount",
297
330
  value: function componentDidMount() {
298
331
  window.forRedo = [];
332
+ var store = this.context.store;
333
+ var _this$props = this.props,
334
+ stateExtractor = _this$props.stateExtractor,
335
+ plugins = _this$props.plugins;
336
+
337
+ // keep old behavior: run plugins once on mount
338
+ var newplugins = _toConsumableArray(plugins);
339
+ newplugins.forEach(function (newplugin) {
340
+ return newplugin(store, stateExtractor);
341
+ });
299
342
  }
300
343
  }, {
301
344
  key: "componentDidUpdate",
302
345
  value: function componentDidUpdate(prevProps) {
303
- var _this$props = this.props,
304
- stateExtractor = _this$props.stateExtractor,
305
- state = _this$props.state,
306
- projectActions = _this$props.projectActions,
307
- catalog = _this$props.catalog,
308
- externalEvent = _this$props.externalEvent;
309
- var plannerState = stateExtractor(state);
310
- var catalogReady = plannerState.getIn(['catalog', 'ready']);
311
- if (!catalogReady) {
312
- projectActions.initCatalog(catalog);
313
- }
314
- if (prevProps.externalEvent !== externalEvent && externalEvent) {
315
- var _externalEvent$id, _externalEvent$payloa, _externalEvent$payloa2;
316
- var key = (_externalEvent$id = externalEvent.id) !== null && _externalEvent$id !== void 0 ? _externalEvent$id : JSON.stringify({
317
- type: externalEvent.type,
318
- 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
319
- });
320
- if (key !== this.lastHandledExternalEventKey) {
321
- this.lastHandledExternalEventKey = key;
322
- handleExternalEvent(this.props);
323
- }
346
+ var _extractedState$getIn;
347
+ var _this$props2 = this.props,
348
+ externalEvent = _this$props2.externalEvent,
349
+ extractedState = _this$props2.extractedState,
350
+ projectActions = _this$props2.projectActions,
351
+ catalog = _this$props2.catalog;
352
+
353
+ // same behavior: handle external event when it changes
354
+ if (prevProps.externalEvent !== externalEvent) {
355
+ handleExternalEvent(this.props);
324
356
  }
357
+
358
+ // same behavior: init catalog until ready
359
+ var catalogReady = extractedState === null || extractedState === void 0 || (_extractedState$getIn = extractedState.getIn) === null || _extractedState$getIn === void 0 ? void 0 : _extractedState$getIn.call(extractedState, ['catalog', 'ready']);
360
+ if (!catalogReady) projectActions.initCatalog(catalog);
325
361
  }
326
362
  }, {
327
363
  key: "isProjectEmpty",
@@ -331,23 +367,51 @@ var LiteKitchenConfigurator = /*#__PURE__*/function (_Component) {
331
367
  var layer = layers.get(selectedLayer);
332
368
  return layer.areas.size + layer.lines.size + layer.holes.size + layer.items.size === 0;
333
369
  }
370
+ }, {
371
+ key: "getExtractedStateWithViewer2DInit",
372
+ value: function getExtractedStateWithViewer2DInit(extractedState, width, height) {
373
+ if (!extractedState) return extractedState;
374
+
375
+ // ✅ If the extractedState reference changed, drop cache immediately.
376
+ if (this._lastExtractedStateRef !== extractedState) {
377
+ this._lastExtractedStateRef = extractedState;
378
+ this._cachedViewer2DKey = null;
379
+ this._cachedExtractedState = null;
380
+ }
381
+ var _viewer2D = extractedState.getIn(['viewer2D']);
382
+ if (!_viewer2D || _viewer2D.size <= 0) return extractedState;
383
+ var v = _viewer2D.toJS();
384
+
385
+ // Only do the "center viewer2D if e/f are zero" logic.
386
+ // ✅ No need to build keys from unrelated parts of state.
387
+ if (v.e !== 0 || v.f !== 0) return extractedState;
388
+
389
+ // Build a cache key ONLY for this viewer2D-centering computation.
390
+ var cacheKey = "".concat(width, ":").concat(height, ":").concat(v.viewerWidth, ":").concat(v.viewerHeight, ":").concat(v.SVGWidth, ":").concat(v.SVGHeight);
391
+ if (this._cachedViewer2DKey === cacheKey && this._cachedExtractedState) {
392
+ return this._cachedExtractedState;
393
+ }
394
+ var centeredViewer2D = _viewer2D.merge({
395
+ e: v.viewerWidth / 2 - v.SVGWidth / 2,
396
+ f: v.viewerHeight / 2 - v.SVGHeight / 2,
397
+ a: 0.99,
398
+ d: 0.99
399
+ });
400
+ var merged = extractedState.merge({
401
+ viewer2D: centeredViewer2D
402
+ });
403
+ this._cachedViewer2DKey = cacheKey;
404
+ this._cachedExtractedState = merged;
405
+ return merged;
406
+ }
334
407
  }, {
335
408
  key: "render",
336
409
  value: function render() {
337
- var _this2 = this;
338
- var _this$props2 = this.props,
339
- width = _this$props2.width,
340
- height = _this$props2.height,
341
- state = _this$props2.state,
342
- stateExtractor = _this$props2.stateExtractor,
343
- props = _objectWithoutProperties(_this$props2, _excluded);
344
- var actionsFromProps = objectsMap(actions, function (ns) {
345
- return _this2.props[ns];
346
- });
347
- var appCtxValue = _objectSpread(_objectSpread({}, actionsFromProps), {}, {
348
- translator: this.props.translator,
349
- catalog: this.props.catalog
350
- });
410
+ var _this$props3 = this.props,
411
+ width = _this$props3.width,
412
+ height = _this$props3.height,
413
+ extractedState = _this$props3.extractedState,
414
+ props = _objectWithoutProperties(_this$props3, _excluded);
351
415
  var _this$state = this.state,
352
416
  savePopupVisible = _this$state.savePopupVisible,
353
417
  quotePopupVisible = _this$state.quotePopupVisible,
@@ -355,43 +419,11 @@ var LiteKitchenConfigurator = /*#__PURE__*/function (_Component) {
355
419
  signOpen = _this$state.signOpen,
356
420
  myProjectsOpen = _this$state.myProjectsOpen;
357
421
  var contentW = width - toolbarW;
358
- // let contentW = width - toolbarW - sidebarW;
359
- // let toolbarH = height - footerBarH;
360
- // let contentH = height - footerBarH;
361
- // let sidebarH = height - footerBarH;
362
- var toolbarH = height;
363
422
  var contentH = height;
364
- var sidebarH = height;
365
- var headerW = width;
366
- var headerH = 60;
367
- var extractedState = stateExtractor(state);
368
- var firstVisit = this.state.wizardStepOpend && this.isProjectEmpty(extractedState.scene);
423
+ var extracted = this.getExtractedStateWithViewer2DInit(extractedState, width, height);
424
+ var firstVisit = this.state.wizardStepOpend && this.isProjectEmpty(extracted.scene);
369
425
  var allVisible = firstVisit || signOpen || myProjectsOpen;
370
- var _scene = extractedState.getIn(['scene']);
371
- var len = convert(_scene.width).from(_scene.unit).to('cm');
372
- var _viewer2D = extractedState.getIn(['viewer2D']);
373
- if (_viewer2D.size > 0) {
374
- var scaleX = width / len * 3;
375
- var scaleY = height / len * 3;
376
- var scale = scaleX > scaleY ? scaleY : scaleX;
377
- var _e = width - len * scale,
378
- _f = height - len * scale;
379
- var viewer = _viewer2D.toJS();
380
- if (viewer.e === 0 && viewer.f === 0) {
381
- _viewer2D = _viewer2D.merge({
382
- e: viewer.viewerWidth / 2 - viewer.SVGWidth / 2,
383
- f: viewer.viewerHeight / 2 - viewer.SVGHeight / 2,
384
- a: 0.99,
385
- d: 0.99
386
- });
387
- }
388
- }
389
- extractedState = extractedState.merge({
390
- viewer2D: _viewer2D
391
- });
392
- return /*#__PURE__*/React.createElement(AppContext.Provider, {
393
- value: appCtxValue
394
- }, /*#__PURE__*/React.createElement("section", null, /*#__PURE__*/React.createElement("div", {
426
+ return /*#__PURE__*/React.createElement("section", null, /*#__PURE__*/React.createElement("div", {
395
427
  style: _objectSpread(_objectSpread({}, wrapperStyle), {}, {
396
428
  height: height,
397
429
  display: 'flex',
@@ -402,8 +434,9 @@ var LiteKitchenConfigurator = /*#__PURE__*/function (_Component) {
402
434
  width: contentW,
403
435
  height: contentH,
404
436
  catalog: this.props.catalog,
405
- state: extractedState,
437
+ state: extracted,
406
438
  toolBar: this.state.toolbar,
439
+ setToolbar: this.setToolbar,
407
440
  replaceCabinet: this.replaceCabinet,
408
441
  keyDownEnable: !savePopupVisible && !quotePopupVisible && !assistPopupVisible
409
442
  }, props, {
@@ -411,7 +444,20 @@ var LiteKitchenConfigurator = /*#__PURE__*/function (_Component) {
411
444
  return event.preventDefault();
412
445
  },
413
446
  onInternalEvent: this.props.onInternalEvent
414
- })))));
447
+ })), /*#__PURE__*/React.createElement(WarningItem, {
448
+ id: "warning_box_2d",
449
+ style: {
450
+ display: 'none'
451
+ }
452
+ }, /*#__PURE__*/React.createElement(SubCategoryItemImage, {
453
+ maskImage: "/assets/img/svg/3d_item_warning_info.svg",
454
+ style: {
455
+ backgroundColor: constants.BG_COLOR_1,
456
+ marginRight: 10,
457
+ height: 30,
458
+ width: 30
459
+ }
460
+ }), "This item is not available in the current door style. Replace it with another one.")));
415
461
  }
416
462
  }]);
417
463
  }(Component);
@@ -425,13 +471,21 @@ LiteKitchenConfigurator.propTypes = {
425
471
  width: PropTypes.number.isRequired,
426
472
  height: PropTypes.number.isRequired,
427
473
  stateExtractor: PropTypes.func.isRequired,
428
- sidebarComponents: PropTypes.array,
429
- footerbarComponents: PropTypes.array,
430
- customContents: PropTypes.object,
431
- softwareSignature: PropTypes.string,
432
474
  configData: PropTypes.object,
433
- onInternalEvent: PropTypes.func
475
+ onInternalEvent: PropTypes.func,
476
+ extractedState: PropTypes.object,
477
+ // ✅ injected by connect
478
+ externalEvent: PropTypes.object
479
+ };
480
+ LiteKitchenConfigurator.contextTypes = {
481
+ store: PropTypes.object.isRequired
434
482
  };
483
+ LiteKitchenConfigurator.childContextTypes = _objectSpread(_objectSpread({}, objectsMap(actions, function () {
484
+ return PropTypes.object;
485
+ })), {}, {
486
+ translator: PropTypes.object,
487
+ catalog: PropTypes.object
488
+ });
435
489
  LiteKitchenConfigurator.defaultProps = {
436
490
  translator: new Translator(),
437
491
  catalog: new Catalog(),
@@ -444,10 +498,16 @@ LiteKitchenConfigurator.defaultProps = {
444
498
  configData: {}
445
499
  };
446
500
 
447
- //redux connect
448
- function mapStateToProps(reduxState) {
501
+ // ✅ Only select the slice you actually use.
502
+ // This preserves behavior but massively reduces rerenders.
503
+ function mapStateToProps(reduxState, ownProps) {
504
+ var stateExtractor = ownProps.stateExtractor || function (s) {
505
+ return s;
506
+ };
507
+ var extractedState = stateExtractor(reduxState);
449
508
  return {
450
- state: reduxState
509
+ extractedState: extractedState,
510
+ state: extractedState
451
511
  };
452
512
  }
453
513
  function mapDispatchToProps(dispatch) {