kitchen-simulator 3.1.2 → 4.0.1-react-18

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 (138) hide show
  1. package/README.md +0 -3
  2. package/es/AppContext.js +1 -1
  3. package/es/LiteKitchenConfigurator.js +15 -25
  4. package/es/LiteRenderer.js +2 -5
  5. package/es/actions/export.js +12 -25
  6. package/es/catalog/catalog.js +5 -21
  7. package/es/components/content.js +2 -5
  8. package/es/components/export.js +6 -4
  9. package/es/components/style/export.js +2 -28
  10. package/es/components/style/form-number-input.js +22 -11
  11. package/es/components/viewer2d/group.js +4 -5
  12. package/es/components/viewer2d/item.js +300 -316
  13. package/es/components/viewer2d/layer.js +1 -1
  14. package/es/components/viewer2d/line.js +47 -17
  15. package/es/components/viewer2d/rulerX.js +0 -3
  16. package/es/components/viewer2d/rulerY.js +0 -3
  17. package/es/components/viewer2d/scene.js +1 -4
  18. package/es/components/viewer2d/state.js +1 -1
  19. package/es/components/viewer2d/viewer2d.js +43 -28
  20. package/es/components/viewer3d/viewer3d-first-person.js +0 -8
  21. package/es/components/viewer3d/viewer3d.js +0 -9
  22. package/es/devLiteRenderer.js +148 -317
  23. package/es/index.js +12 -4
  24. package/es/mocks/appliancePayload.json +27 -0
  25. package/es/mocks/cabinetPayload.json +1914 -0
  26. package/es/mocks/cabinetPayload2.json +76 -0
  27. package/es/mocks/dataBundle2.json +4 -0
  28. package/es/mocks/distancePayload.json +6 -0
  29. package/es/mocks/doorStylePayload2.json +84 -0
  30. package/es/mocks/furnishingPayload.json +23 -0
  31. package/es/mocks/itemCDSPayload.json +27 -0
  32. package/es/mocks/lightingPayload.json +23 -0
  33. package/es/mocks/mockProps.json +43 -0
  34. package/es/mocks/mockProps2.json +9 -0
  35. package/es/mocks/moldingPayload.json +19 -0
  36. package/es/mocks/projectItemsCatalog.json +133 -0
  37. package/es/mocks/rectangleShape.json +238 -0
  38. package/es/mocks/replaceCabinetPayload.json +81 -0
  39. package/es/mocks/roomShapePayload.json +5 -0
  40. package/es/useAppContext.js +8 -0
  41. package/lib/AppContext.js +1 -1
  42. package/lib/LiteKitchenConfigurator.js +15 -25
  43. package/lib/LiteRenderer.js +2 -5
  44. package/lib/actions/export.js +39 -35
  45. package/lib/catalog/catalog.js +4 -20
  46. package/lib/components/content.js +2 -5
  47. package/lib/components/export.js +26 -6
  48. package/lib/components/style/export.js +1 -105
  49. package/lib/components/style/form-number-input.js +22 -11
  50. package/lib/components/viewer2d/group.js +4 -5
  51. package/lib/components/viewer2d/item.js +298 -314
  52. package/lib/components/viewer2d/layer.js +1 -1
  53. package/lib/components/viewer2d/line.js +47 -17
  54. package/lib/components/viewer2d/rulerX.js +0 -3
  55. package/lib/components/viewer2d/rulerY.js +0 -3
  56. package/lib/components/viewer2d/scene.js +1 -4
  57. package/lib/components/viewer2d/state.js +1 -1
  58. package/lib/components/viewer2d/viewer2d.js +42 -27
  59. package/lib/components/viewer3d/viewer3d-first-person.js +0 -8
  60. package/lib/components/viewer3d/viewer3d.js +0 -9
  61. package/lib/devLiteRenderer.js +147 -316
  62. package/lib/index.js +12 -4
  63. package/lib/mocks/appliancePayload.json +27 -0
  64. package/lib/mocks/cabinetPayload.json +1914 -0
  65. package/lib/mocks/cabinetPayload2.json +76 -0
  66. package/lib/mocks/dataBundle2.json +4 -0
  67. package/lib/mocks/distancePayload.json +6 -0
  68. package/lib/mocks/doorStylePayload2.json +84 -0
  69. package/lib/mocks/furnishingPayload.json +23 -0
  70. package/lib/mocks/itemCDSPayload.json +27 -0
  71. package/lib/mocks/lightingPayload.json +23 -0
  72. package/lib/mocks/mockProps.json +43 -0
  73. package/lib/mocks/mockProps2.json +9 -0
  74. package/lib/mocks/moldingPayload.json +19 -0
  75. package/lib/mocks/projectItemsCatalog.json +133 -0
  76. package/lib/mocks/rectangleShape.json +238 -0
  77. package/lib/mocks/replaceCabinetPayload.json +81 -0
  78. package/lib/mocks/roomShapePayload.json +5 -0
  79. package/lib/useAppContext.js +16 -0
  80. package/package.json +16 -21
  81. package/es/catalog/properties/export.js +0 -21
  82. package/es/catalog/properties/property-checkbox.js +0 -68
  83. package/es/catalog/properties/property-color.js +0 -39
  84. package/es/catalog/properties/property-enum.js +0 -50
  85. package/es/catalog/properties/property-hidden.js +0 -19
  86. package/es/catalog/properties/property-lenght-measure.js +0 -100
  87. package/es/catalog/properties/property-length-measure.js +0 -84
  88. package/es/catalog/properties/property-length-measure_hole.js +0 -100
  89. package/es/catalog/properties/property-number.js +0 -48
  90. package/es/catalog/properties/property-read-only.js +0 -26
  91. package/es/catalog/properties/property-string.js +0 -48
  92. package/es/catalog/properties/property-toggle.js +0 -39
  93. package/es/catalog/properties/shared-property-style.js +0 -14
  94. package/es/components/style/button.js +0 -106
  95. package/es/components/style/cancel-button.js +0 -21
  96. package/es/components/style/content-container.js +0 -30
  97. package/es/components/style/content-title.js +0 -25
  98. package/es/components/style/delete-button.js +0 -24
  99. package/es/components/style/form-block.js +0 -20
  100. package/es/components/style/form-color-input.js +0 -26
  101. package/es/components/style/form-label.js +0 -22
  102. package/es/components/style/form-number-input_2.js +0 -200
  103. package/es/components/style/form-select.js +0 -19
  104. package/es/components/style/form-slider.js +0 -60
  105. package/es/components/style/form-submit-button.js +0 -25
  106. package/es/components/style/form-text-input.js +0 -69
  107. package/es/plugins/SVGLoader.js +0 -1414
  108. package/es/styles/export.js +0 -5
  109. package/es/styles/tabs.css +0 -40
  110. package/lib/catalog/properties/export.js +0 -81
  111. package/lib/catalog/properties/property-checkbox.js +0 -76
  112. package/lib/catalog/properties/property-color.js +0 -47
  113. package/lib/catalog/properties/property-enum.js +0 -58
  114. package/lib/catalog/properties/property-hidden.js +0 -27
  115. package/lib/catalog/properties/property-lenght-measure.js +0 -108
  116. package/lib/catalog/properties/property-length-measure.js +0 -92
  117. package/lib/catalog/properties/property-length-measure_hole.js +0 -108
  118. package/lib/catalog/properties/property-number.js +0 -56
  119. package/lib/catalog/properties/property-read-only.js +0 -34
  120. package/lib/catalog/properties/property-string.js +0 -56
  121. package/lib/catalog/properties/property-toggle.js +0 -47
  122. package/lib/catalog/properties/shared-property-style.js +0 -21
  123. package/lib/components/style/button.js +0 -115
  124. package/lib/components/style/cancel-button.js +0 -29
  125. package/lib/components/style/content-container.js +0 -38
  126. package/lib/components/style/content-title.js +0 -35
  127. package/lib/components/style/delete-button.js +0 -34
  128. package/lib/components/style/form-block.js +0 -28
  129. package/lib/components/style/form-color-input.js +0 -34
  130. package/lib/components/style/form-label.js +0 -30
  131. package/lib/components/style/form-number-input_2.js +0 -209
  132. package/lib/components/style/form-select.js +0 -29
  133. package/lib/components/style/form-slider.js +0 -68
  134. package/lib/components/style/form-submit-button.js +0 -35
  135. package/lib/components/style/form-text-input.js +0 -78
  136. package/lib/plugins/SVGLoader.js +0 -1419
  137. package/lib/styles/export.js +0 -13
  138. package/lib/styles/tabs.css +0 -40
@@ -15,6 +15,7 @@ var _export = require("../../utils/export");
15
15
  var _constants = require("../../constants");
16
16
  var _utils = require("./utils");
17
17
  var _geometry = require("../../utils/geometry");
18
+ var _useAppContext2 = require("../../useAppContext");
18
19
  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); }
19
20
  var STYLE_LINE = {
20
21
  fill: '#0096fd',
@@ -30,14 +31,15 @@ var STYLE_CIRCLE2 = {
30
31
  stroke: '#0096fd',
31
32
  cursor: 'ew-resize'
32
33
  };
33
- function Item(_ref, _ref2) {
34
+ function Item(_ref) {
34
35
  var _element$render2D;
35
36
  var layer = _ref.layer,
36
37
  item = _ref.item,
37
38
  scene = _ref.scene,
38
39
  catalog = _ref.catalog,
39
40
  mode = _ref.mode;
40
- var itemsActions = _ref2.itemsActions;
41
+ var _useAppContext = (0, _useAppContext2.useAppContext)(),
42
+ itemsActions = _useAppContext.itemsActions;
41
43
  var x = item.x,
42
44
  y = item.y,
43
45
  rotation = item.rotation,
@@ -45,14 +47,8 @@ function Item(_ref, _ref2) {
45
47
  layoutpos = item.layoutpos;
46
48
  var showBaseCabinetMeasure = scene.showBaseCabinetMeasure,
47
49
  showWallCabinetMeasure = scene.showWallCabinetMeasure;
48
- var vertices = layer.vertices;
49
50
  var layerID = scene.selectedLayer;
50
51
  var element = catalog.getElement(item.type);
51
- var allLines;
52
- var curiteminfo;
53
- var allLineRects;
54
- var allItemRect;
55
- var width, height;
56
52
  var altitude = item.properties.getIn(['altitude', '_length']);
57
53
  var _useState = (0, _react.useState)(false),
58
54
  _useState2 = (0, _slicedToArray2["default"])(_useState, 2),
@@ -62,118 +58,79 @@ function Item(_ref, _ref2) {
62
58
  _useState4 = (0, _slicedToArray2["default"])(_useState3, 2),
63
59
  antiClockRotateState = _useState4[0],
64
60
  setAntiClockRotateState = _useState4[1];
65
- var val = {
66
- pos: {
67
- x: item.x,
68
- y: item.y
69
- },
70
- rotRad: item.rotation / 180 * Math.PI
71
- };
72
- var tempWidth = item.properties.get('width');
73
- var tempHeight = item.properties.get('depth');
74
- if (tempWidth || tempHeight) {
75
- width = (0, _convertUnitsLite.convert)(tempWidth.get('_length')).from(tempWidth.get('_unit')).to('cm');
76
- height = (0, _convertUnitsLite.convert)(tempHeight.get('_length')).from(tempHeight.get('_unit')).to('cm');
77
- } else {
78
- width = (0, _convertUnitsLite.convert)(element.info.sizeinfo.width).from('in').to('cm');
79
- height = (0, _convertUnitsLite.convert)(element.info.sizeinfo.depth).from('in').to('cm');
80
- }
81
- var angle = rotation + 90;
82
- val.size = {
83
- width: width,
84
- height: height
85
- };
86
- function point(x, y) {
61
+
62
+ // ----- helpers -----
63
+ function point(px, py) {
87
64
  return {
88
- x: x,
89
- y: y
65
+ x: px,
66
+ y: py
90
67
  };
91
68
  }
92
69
  function getCalcRectFromItem(items) {
93
- var x = items.pos.x;
94
- var y = items.pos.y;
70
+ var ix = items.pos.x;
71
+ var iy = items.pos.y;
95
72
  var w = items.size.width / 2;
96
73
  var h = items.size.height / 2;
97
74
  var rotRad = items.rotRad;
98
75
  var mh = 3 * h / 4;
99
- var mx = x - w * Math.cos(rotRad) - mh * Math.sin(rotRad);
100
- var my = y - w * Math.sin(rotRad) + mh * Math.cos(rotRad);
101
- var m2x = x + w * Math.cos(rotRad) - mh * Math.sin(rotRad);
102
- var m2y = y + w * Math.sin(rotRad) + mh * Math.cos(rotRad);
103
- var m3x = x - h * Math.sin(rotRad);
104
- var m3y = y + h * Math.cos(rotRad);
105
- var m1x = x + h * Math.sin(rotRad);
106
- var m1y = y - h * Math.cos(rotRad);
107
- var x0 = mx + h * Math.sin(rotRad);
108
- var y0 = my - h * Math.cos(rotRad);
109
- var x3 = mx * 2 - x0;
110
- var y3 = my * 2 - y0;
111
- var x1 = x * 2 - x3;
112
- var y1 = y * 2 - y3;
113
- var x2 = x * 2 - x0;
114
- var y2 = y * 2 - y0;
76
+ var mx = ix - w * Math.cos(rotRad) - mh * Math.sin(rotRad);
77
+ var my = iy - w * Math.sin(rotRad) + mh * Math.cos(rotRad);
78
+ var m2x = ix + w * Math.cos(rotRad) - mh * Math.sin(rotRad);
79
+ var m2y = iy + w * Math.sin(rotRad) + mh * Math.cos(rotRad);
80
+ var m3x = ix - h * Math.sin(rotRad);
81
+ var m3y = iy + h * Math.cos(rotRad);
82
+ var m1x = ix + h * Math.sin(rotRad);
83
+ var m1y = iy - h * Math.cos(rotRad);
115
84
  return {
116
85
  rectCenterPoint: [[point(mx, my), 180], [point(m1x, m1y), -90], [point(m2x, m2y), 0], [point(m3x, m3y), 90]]
117
86
  };
118
87
  }
119
- function getAllItems() {
88
+ function getAllItemsRectangles(_ref2) {
89
+ var layer = _ref2.layer,
90
+ catalog = _ref2.catalog,
91
+ layoutpos = _ref2.layoutpos,
92
+ altitude = _ref2.altitude,
93
+ tempHeightLen = _ref2.tempHeightLen;
120
94
  var rectarray = [];
121
- var currentItem;
122
- var selectedItem;
95
+
96
+ // keeping your selectedItem logic (even though not used right now)
123
97
  if (layer.selected.items.size > 0) {
124
- selectedItem = layer.getIn(['items', layer.selected.items.get(0)]);
125
- var _catid = selectedItem.type;
126
- var _cat = (0, _geometry.findCatalogElement)(catalog, _catid);
127
- currentItem = {
128
- selectedItem: selectedItem,
129
- cat: _cat
130
- };
98
+ var selectedItem = layer.getIn(['items', layer.selected.items.get(0)]);
99
+ var catid = selectedItem.type;
100
+ (0, _geometry.findCatalogElement)(catalog, catid);
131
101
  }
132
- layer.items.forEach(function (item) {
102
+ layer.items.forEach(function (other) {
133
103
  var val = {
134
104
  pos: {
135
- x: item.x,
136
- y: item.y
105
+ x: other.x,
106
+ y: other.y
137
107
  },
138
- rotRad: item.rotation / 180 * Math.PI
108
+ rotRad: other.rotation / 180 * Math.PI
139
109
  };
140
- var catid = item.type;
141
- var cat = (0, _geometry.findCatalogElement)(catalog, catid);
142
- var width = (0, _convertUnitsLite.convert)(item.properties.getIn(['width', '_length'])).from('in').to('cm');
143
- var height = (0, _convertUnitsLite.convert)(item.properties.getIn(['depth', '_length'])).from('in').to('cm');
144
- // let width = cat.info.sizeinfo.width;
145
- // let height = cat.info.sizeinfo.depth;
110
+ var widthCm = (0, _convertUnitsLite.convert)(other.properties.getIn(['width', '_length'])).from('in').to('cm');
111
+ var heightCm = (0, _convertUnitsLite.convert)(other.properties.getIn(['depth', '_length'])).from('in').to('cm');
146
112
  val.size = {
147
- width: width,
148
- height: height
113
+ width: widthCm,
114
+ height: heightCm
149
115
  };
150
- var otherItem = {
151
- item: item,
152
- cat: cat
153
- };
154
-
155
- // if (!GeometryUtils.needSnap(currentItem, otherItem)) {
156
- // return;
157
- // }
158
-
159
- if (!item.selected) {
160
- var detectObjectsAtSameAltitudeFlag = layoutpos === 'Base' ? item.properties.getIn(['altitude', '_length']) <= altitude + tempHeight.get('_length') : item.properties.getIn(['altitude', '_length']) + item.properties.getIn(['height', '_length']) >= altitude;
116
+ if (!other.selected) {
117
+ var detectObjectsAtSameAltitudeFlag = layoutpos === 'Base' ? other.properties.getIn(['altitude', '_length']) <= altitude + tempHeightLen : other.properties.getIn(['altitude', '_length']) + other.properties.getIn(['height', '_length']) >= altitude;
161
118
  if (detectObjectsAtSameAltitudeFlag) {
162
- var _x = val.pos.x;
163
- var _y = val.pos.y;
119
+ var ox = val.pos.x;
120
+ var oy = val.pos.y;
164
121
  var rotRad = val.rotRad;
165
122
  var w = val.size.width / 2;
166
123
  var h = val.size.height / 2;
167
- var mx = _x - w * Math.cos(rotRad);
168
- var my = _y - w * Math.sin(rotRad);
124
+ var mx = ox - w * Math.cos(rotRad);
125
+ var my = oy - w * Math.sin(rotRad);
169
126
  var x0 = mx + h * Math.sin(rotRad);
170
127
  var y0 = my - h * Math.cos(rotRad);
171
128
  var x3 = mx * 2 - x0;
172
129
  var y3 = my * 2 - y0;
173
- var x1 = _x * 2 - x3;
174
- var y1 = _y * 2 - y3;
175
- var x2 = _x * 2 - x0;
176
- var y2 = _y * 2 - y0;
130
+ var x1 = ox * 2 - x3;
131
+ var y1 = oy * 2 - y3;
132
+ var x2 = ox * 2 - x0;
133
+ var y2 = oy * 2 - y0;
177
134
  rectarray.push({
178
135
  rect: [point(x0, y0), point(x1, y1), point(x0, y0), point(x1, y1)]
179
136
  });
@@ -189,126 +146,156 @@ function Item(_ref, _ref2) {
189
146
  }
190
147
  }
191
148
  });
192
-
193
- // layer.holes.forEach(hole => {
194
- // let val = {pos:{x:hole.x, y:hole.y}, rotRad:hole.rotation};
195
- // let catid = hole.type;
196
- // let cat = catalog.elements[catid];
197
- // let width = hole.properties.getIn(['width']).getIn(['length']);
198
- // let height = hole.properties.getIn(['height']).getIn(['length']);
199
- // val.size = {width, height};
200
- // let otherItem = {
201
- // hole,
202
- // cat
203
- // }
204
-
205
- // // if (!GeometryUtils.needSnap(currentItem, otherItem)) {
206
- // // return;
207
- // // }
208
-
209
- // if (!hole.selected) {
210
- // let x = val.pos.x;
211
- // let y = val.pos.y;
212
- // let rotRad = val.rotRad;
213
- // let w = val.size.width / 2;
214
- // let mx = x - w * Math.cos(rotRad);
215
- // let my = y - w * Math.sin(rotRad);
216
- // let kx = x + w * Math.cos(rotRad);
217
- // let ky = y + w * Math.sin(rotRad);
218
- // let x0 = mx - 10 * Math.sin(rotRad);
219
- // let y0 = my + 10 * Math.cos(rotRad);
220
- // let x3 = mx + 10 * Math.sin(rotRad);
221
- // let y3 = my - 10 * Math.cos(rotRad);
222
- // let x1 = kx - 10 * Math.sin(rotRad);
223
- // let y1 = ky + 10 * Math.cos(rotRad);
224
- // let x2 = kx + 10 * Math.sin(rotRad);
225
- // let y2 = ky - 10 * Math.cos(rotRad);
226
- // rectarray.push({'rect':[point(x0,y0), point(x1,y1) ,point(x0,y0), point(x1,y1)]});
227
- // rectarray.push({'rect':[point(x1,y1), point(x2,y2), point(x1,y1), point(x2,y2)]}); // right
228
- // rectarray.push({'rect':[point(x2,y2), point(x3,y3), point(x2,y2), point(x3,y3)]}); // front
229
- // rectarray.push({'rect':[point(x3,y3), point(x0,y0), point(x3,y3), point(x0,y0)]}); // left
230
- // }
231
- // });
232
149
  return {
233
150
  others: rectarray
234
151
  };
235
152
  }
236
- allItemRect = getAllItems();
237
- allLines = _export.GeometryUtils.getAllLines(layer);
238
- allLineRects = _export.GeometryUtils.buildRectFromLines(layer, allLines);
239
- var allRect = allLineRects.concat(allItemRect.others);
240
- curiteminfo = getCalcRectFromItem(val);
241
153
 
242
- /**
243
- *
244
- * @param x y position
245
- * @param y x position
246
- * @param rotRad item's rotation in radian
247
- */
248
- var getDistant = function getDistant(x, y, rotRad) {
249
- var center_h = 3 * height / 8;
250
- var center_x = x;
251
- var center_y = y;
252
- var center_x1 = x - center_h * Math.sin(rotRad);
253
- var center_y1 = y + center_h * Math.cos(rotRad);
254
- var PointArray = [];
255
- curiteminfo.rectCenterPoint.forEach(function (centerpoint) {
256
- var comparelength = [];
257
- var a;
258
- var RectLineFuction;
259
- if (centerpoint[1] === 180 || centerpoint[1] === 0) RectLineFuction = _export.GeometryUtils.linePassingThroughTwoPoints(centerpoint[0].x, centerpoint[0].y, center_x1, center_y1);else RectLineFuction = _export.GeometryUtils.linePassingThroughTwoPoints(centerpoint[0].x, centerpoint[0].y, center_x, center_y);
260
- allRect.forEach(function (linerect) {
261
- var p0 = _export.GeometryUtils.clone_point(linerect.rect[2]);
262
- var p1 = _export.GeometryUtils.clone_point(linerect.rect[3]);
263
- var lineFunction = {};
264
- if (p0.x !== p1.x || p0.y !== p1.y) lineFunction = _export.GeometryUtils.linePassingThroughTwoPoints(p0.x, p0.y, p1.x, p1.y);
265
- var coordinatePoint = _export.GeometryUtils.twoLinesIntersection(lineFunction.a, lineFunction.b, lineFunction.c, RectLineFuction.a, RectLineFuction.b, RectLineFuction.c);
266
- if (coordinatePoint !== undefined) {
267
- if (_export.GeometryUtils.pointsDistance(p0.x, p0.y, p1.x, p1.y) > _export.GeometryUtils.pointsDistance(p0.x, p0.y, coordinatePoint.x, coordinatePoint.y) && _export.GeometryUtils.pointsDistance(p0.x, p0.y, p1.x, p1.y) > _export.GeometryUtils.pointsDistance(p1.x, p1.y, coordinatePoint.x, coordinatePoint.y)) {
268
- if (_export.GeometryUtils.pointsDistance(coordinatePoint.x, coordinatePoint.y, center_x, center_y) > _export.GeometryUtils.pointsDistance(centerpoint[0].x, centerpoint[0].y, coordinatePoint.x, coordinatePoint.y)) {
269
- comparelength.push(_export.GeometryUtils.pointsDistance(centerpoint[0].x, centerpoint[0].y, coordinatePoint.x, coordinatePoint.y));
270
- a = Math.min.apply(null, comparelength);
271
- }
154
+ // ----- item size -----
155
+ var tempWidth = item.properties.get('width');
156
+ var tempHeight = item.properties.get('depth');
157
+ var _useMemo = (0, _react.useMemo)(function () {
158
+ var w, h;
159
+ if (tempWidth || tempHeight) {
160
+ w = (0, _convertUnitsLite.convert)(tempWidth.get('_length')).from(tempWidth.get('_unit')).to('cm');
161
+ h = (0, _convertUnitsLite.convert)(tempHeight.get('_length')).from(tempHeight.get('_unit')).to('cm');
162
+ } else {
163
+ w = (0, _convertUnitsLite.convert)(element.info.sizeinfo.width).from('in').to('cm');
164
+ h = (0, _convertUnitsLite.convert)(element.info.sizeinfo.depth).from('in').to('cm');
165
+ }
166
+ return {
167
+ width: w,
168
+ height: h
169
+ };
170
+ }, [tempWidth, tempHeight, element]),
171
+ width = _useMemo.width,
172
+ height = _useMemo.height;
173
+ var nw = width / 2;
174
+ var nh = height / 2;
175
+
176
+ // val used in geometry calc
177
+ var val = (0, _react.useMemo)(function () {
178
+ return {
179
+ pos: {
180
+ x: item.x,
181
+ y: item.y
182
+ },
183
+ rotRad: item.rotation / 180 * Math.PI,
184
+ size: {
185
+ width: width,
186
+ height: height
187
+ }
188
+ };
189
+ }, [item.x, item.y, item.rotation, width, height]);
190
+
191
+ // ----- heavy geometry (memoized) -----
192
+ var _useMemo2 = (0, _react.useMemo)(function () {
193
+ var allItemRect = getAllItemsRectangles({
194
+ layer: layer,
195
+ catalog: catalog,
196
+ layoutpos: layoutpos,
197
+ altitude: altitude,
198
+ tempHeightLen: tempHeight ? tempHeight.get('_length') : 0
199
+ });
200
+ var allLines = _export.GeometryUtils.getAllLines(layer);
201
+ var allLineRects = _export.GeometryUtils.buildRectFromLines(layer, allLines);
202
+ var allRect = allLineRects.concat(allItemRect.others);
203
+ var curiteminfo = getCalcRectFromItem(val);
204
+ var getDistant = function getDistant(px, py, rotRad) {
205
+ var center_h = 3 * height / 8;
206
+ var center_x = px;
207
+ var center_y = py;
208
+ var center_x1 = px - center_h * Math.sin(rotRad);
209
+ var center_y1 = py + center_h * Math.cos(rotRad);
210
+ var PointArray = [];
211
+ curiteminfo.rectCenterPoint.forEach(function (centerpoint) {
212
+ var a;
213
+ var RectLineFuction;
214
+ if (centerpoint[1] === 180 || centerpoint[1] === 0) {
215
+ RectLineFuction = _export.GeometryUtils.linePassingThroughTwoPoints(centerpoint[0].x, centerpoint[0].y, center_x1, center_y1);
216
+ } else {
217
+ RectLineFuction = _export.GeometryUtils.linePassingThroughTwoPoints(centerpoint[0].x, centerpoint[0].y, center_x, center_y);
272
218
  }
219
+ var comparelength = [];
220
+ allRect.forEach(function (linerect) {
221
+ var p0 = _export.GeometryUtils.clone_point(linerect.rect[2]);
222
+ var p1 = _export.GeometryUtils.clone_point(linerect.rect[3]);
223
+ var lineFunction = {};
224
+ if (p0.x !== p1.x || p0.y !== p1.y) {
225
+ lineFunction = _export.GeometryUtils.linePassingThroughTwoPoints(p0.x, p0.y, p1.x, p1.y);
226
+ }
227
+ var coordinatePoint = _export.GeometryUtils.twoLinesIntersection(lineFunction.a, lineFunction.b, lineFunction.c, RectLineFuction.a, RectLineFuction.b, RectLineFuction.c);
228
+ if (coordinatePoint !== undefined) {
229
+ if (_export.GeometryUtils.pointsDistance(p0.x, p0.y, p1.x, p1.y) > _export.GeometryUtils.pointsDistance(p0.x, p0.y, coordinatePoint.x, coordinatePoint.y) && _export.GeometryUtils.pointsDistance(p0.x, p0.y, p1.x, p1.y) > _export.GeometryUtils.pointsDistance(p1.x, p1.y, coordinatePoint.x, coordinatePoint.y)) {
230
+ if (_export.GeometryUtils.pointsDistance(coordinatePoint.x, coordinatePoint.y, center_x, center_y) > _export.GeometryUtils.pointsDistance(centerpoint[0].x, centerpoint[0].y, coordinatePoint.x, coordinatePoint.y)) {
231
+ comparelength.push(_export.GeometryUtils.pointsDistance(centerpoint[0].x, centerpoint[0].y, coordinatePoint.x, coordinatePoint.y));
232
+ a = Math.min.apply(null, comparelength);
233
+ }
234
+ }
235
+ }
236
+ });
237
+ PointArray.push([a, centerpoint[1]]);
238
+ });
239
+ return {
240
+ PointArray: PointArray
241
+ };
242
+ };
243
+ var _getDistant = getDistant(x, y, val.rotRad),
244
+ PointArray = _getDistant.PointArray;
245
+ var catid = item.type;
246
+ var catLocal = catalog.elements[catid];
247
+
248
+ // normalize like your original code
249
+ PointArray.forEach(function (pointElement, index) {
250
+ if (pointElement[0] == undefined) PointArray[index][0] = 0;
251
+ if (pointElement[1] === -90 && catLocal.info.is_corner !== 1) {
252
+ PointArray[index][0] -= 4;
273
253
  }
274
254
  });
275
- PointArray.push([a, centerpoint[1]]);
276
- });
277
- return {
278
- PointArray: PointArray
279
- };
280
- };
281
- var nw = width / 2;
282
- var nh = height / 2;
283
- var _getDistant = getDistant(x, y, val.rotRad),
284
- PointArray = _getDistant.PointArray;
285
- var catid = item.type;
286
- var cat = catalog.elements[catid];
287
- PointArray.forEach(function (pointElement, index) {
288
- if (pointElement[0] == undefined) PointArray[index][0] = 0;
289
- if (pointElement[1] === -90 && cat.info.is_corner !== 1) {
290
- PointArray[index][0] -= 4;
291
- }
292
- });
293
- if (Array.isArray(PointArray)) {
294
- itemsActions.storeDistArray(layerID, id, PointArray);
295
- }
296
- var renderedRuler = [];
297
- var ep = 0.1;
298
- if (item.selected) {
299
- PointArray.forEach(function (element, key) {
255
+ return {
256
+ pointArray: PointArray,
257
+ cat: catLocal
258
+ };
259
+ }, [layer, catalog, layoutpos, altitude, tempHeight, item.type, x, y, val, height]),
260
+ pointArray = _useMemo2.pointArray,
261
+ cat = _useMemo2.cat;
262
+
263
+ // ----- FIX: dispatch AFTER render (no setState/dispatch in render) -----
264
+ var lastSigRef = (0, _react.useRef)('');
265
+ (0, _react.useEffect)(function () {
266
+ if (!Array.isArray(pointArray)) return;
267
+
268
+ // small signature to prevent dispatching repeatedly with same values
269
+ // rounding reduces noise from floating point jitter
270
+ var sig = pointArray.map(function (_ref3) {
271
+ var _ref4 = (0, _slicedToArray2["default"])(_ref3, 2),
272
+ dist = _ref4[0],
273
+ dir = _ref4[1];
274
+ return "".concat(dir, ":").concat(Math.round((dist || 0) * 1000));
275
+ }).join('|');
276
+ if (sig === lastSigRef.current) return;
277
+ lastSigRef.current = sig;
278
+ itemsActions.storeDistArray(layerID, id, pointArray);
279
+ }, [itemsActions, layerID, id, pointArray]);
280
+
281
+ // ----- rulers -----
282
+ var renderedRuler = (0, _react.useMemo)(function () {
283
+ var rulers = [];
284
+ var ep = 0.1;
285
+ if (!item.selected || !Array.isArray(pointArray)) return rulers;
286
+ pointArray.forEach(function (element, key) {
300
287
  var itemDistanceFromLine = element[0];
301
- var length = itemDistanceFromLine;
288
+ var dir = element[1];
302
289
  if (itemDistanceFromLine > ep || itemDistanceFromLine < -ep) {
303
- renderedRuler.push(/*#__PURE__*/_react["default"].createElement("g", {
290
+ rulers.push(/*#__PURE__*/_react["default"].createElement("g", {
304
291
  "data-element-root": true,
305
292
  "data-prototype": "rulerDist",
306
293
  "data-id": item.id,
307
294
  "data-selected": item.selected,
308
295
  "data-layer": layer.id,
309
296
  key: key,
310
- "data-length": length,
311
- "data-direct": element[1]
297
+ "data-length": itemDistanceFromLine,
298
+ "data-direct": dir
312
299
  }, /*#__PURE__*/_react["default"].createElement(_rulerDist["default"], {
313
300
  key: key,
314
301
  layer: layer,
@@ -316,126 +303,126 @@ function Item(_ref, _ref2) {
316
303
  rulerUnit: scene.rulerUnit,
317
304
  length: itemDistanceFromLine,
318
305
  angle: rotation,
319
- rotation: element[1],
320
- transform: "translate(".concat(element[1] === 180 ? -nw : element[1] === 0 ? nw : 0, ", ").concat(element[1] === 90 ? nh : element[1] === -90 ? cat.info.is_corner !== 1 ? -(nh + 4) : -nh : 0, ") rotate(").concat(element[1], ", 0, 0)")
306
+ rotation: dir,
307
+ transform: "translate(".concat(dir === 180 ? -nw : dir === 0 ? nw : 0, ", ").concat(dir === 90 ? nh : dir === -90 ? cat.info.is_corner !== 1 ? -(nh + 4) : -nh : 0, ") rotate(").concat(dir, ", 0, 0)")
321
308
  })));
322
309
  }
323
310
  });
324
- }
311
+ return rulers;
312
+ }, [item.selected, pointArray, item.id, layer, scene.unit, scene.rulerUnit, rotation, nw, nh, cat]);
313
+
314
+ // ----- rendered item -----
325
315
  var renderedItem = element === null || element === void 0 || (_element$render2D = element.render2D) === null || _element$render2D === void 0 ? void 0 : _element$render2D.call(element, item, layer, scene);
326
- var isSmall = false;
327
- if (width < 40) isSmall = true;
328
- var parts = [];
329
- var newWidth = item.toJS().properties.width.length;
330
- if (item.selected) parts = [/*#__PURE__*/_react["default"].createElement("g", {
331
- key: 0,
332
- "data-element-root": true,
333
- "data-prototype": item.prototype,
334
- "data-id": item.id,
335
- "data-selected": item.selected,
336
- "data-layer": layer.id,
337
- "data-part": "rotation-anchor",
338
- style: {
339
- cursor: 'w-resize'
340
- }
341
- }, /*#__PURE__*/_react["default"].createElement("image", {
342
- href: clockRotateState ? '/assets/img/svg/rotate.png' : '/assets/img/svg/blank_div.svg',
343
- style: {
344
- transform: "scale(-1, -1) translate(".concat(width / 2, "px, ").concat(height / 2, "px) rotate(25deg)")
345
- },
346
- height: "20",
347
- width: "20",
348
- onMouseEnter: function onMouseEnter() {
349
- setClockRotateState(true);
350
- setAntiClockRotateState(false);
351
- },
352
- onMouseLeave: function onMouseLeave() {
353
- return setClockRotateState(mode === _constants.MODE_ROTATING_ITEM ? true : false);
354
- }
355
- }), /*#__PURE__*/_react["default"].createElement("image", {
356
- href: antiClockRotateState ? '/assets/img/svg/rotate.png' : '/assets/img/svg/blank_div.svg',
357
- style: {
358
- transform: "scale(1, -1) translate(".concat(width / 2, "px, ").concat(height / 2, "px) rotate(25deg)")
359
- },
360
- height: "20",
361
- width: "20",
362
- onMouseEnter: function onMouseEnter() {
363
- setAntiClockRotateState(true);
364
- setClockRotateState(false);
365
- },
366
- onMouseLeave: function onMouseLeave() {
367
- return setAntiClockRotateState(mode === _constants.MODE_ROTATING_ITEM ? true : false);
368
- }
369
- })), /*#__PURE__*/_react["default"].createElement("g", {
370
- key: 1
371
- // transform={`translate(${-width / 2 - (!isSmall ? 40 : 0)},${height / 2 + 40})`}
372
- ,
373
- style: {
374
- cursor: 'pointer',
375
- transform: "rotate(".concat(360 - item.rotation, "deg) translate(").concat(-width / 2 - 27, "px, ", 0, "px)")
376
- },
377
- "data-element-root": true,
378
- "data-prototype": item.prototype,
379
- "data-id": item.id,
380
- "data-selected": item.selected,
381
- "data-layer": layer.id,
382
- "data-part": "duplicate"
383
- }, /*#__PURE__*/_react["default"].createElement("defs", null, /*#__PURE__*/_react["default"].createElement("filter", {
384
- id: "shadow"
385
- }, /*#__PURE__*/_react["default"].createElement("feDropShadow", {
386
- dx: "0",
387
- dy: "0",
388
- stdDeviation: "0.6"
389
- }))), /*#__PURE__*/_react["default"].createElement("rect", {
390
- rx: "4",
391
- ry: "4",
392
- height: "22",
393
- width: "22",
394
- fill: "white",
395
- filter: "url(#shadow)"
396
- }), /*#__PURE__*/_react["default"].createElement("image", {
397
- href: "/assets/img/svg/duplicate.svg",
398
- x: "3",
399
- y: "-19",
400
- height: "16",
401
- width: "16",
402
- style: (0, _utils.isWarningItem)(item) ? {
403
- transform: 'rotateX(180deg)',
404
- opacity: 0.5
405
- } : {
406
- transform: 'rotateX(180deg)'
407
- }
408
- })), /*#__PURE__*/_react["default"].createElement("g", {
409
- key: 2
410
- // transform={`translate(${-width / 2 - (!isSmall ? 40 : 0)},${height / 2})`}
411
- ,
412
- style: {
413
- cursor: 'pointer',
414
- transform: "rotate(".concat(360 - item.rotation, "deg) translate(").concat(-width / 2 - 27, "px, ").concat(-27, "px)")
415
- },
416
- "data-element-root": true,
417
- "data-prototype": item.prototype,
418
- "data-id": item.id,
419
- "data-selected": item.selected,
420
- "data-layer": layer.id,
421
- "data-part": "remove"
422
- }, /*#__PURE__*/_react["default"].createElement("rect", {
423
- rx: "4",
424
- ry: "4",
425
- height: "22",
426
- width: "22",
427
- fill: "white",
428
- filter: "url(#shadow)"
429
- }), /*#__PURE__*/_react["default"].createElement("image", {
430
- href: "/assets/img/svg/delete.svg",
431
- x: "3",
432
- y: "-19",
433
- height: "16",
434
- width: "16",
435
- style: {
436
- transform: 'rotateX(180deg)'
437
- }
438
- }))];
316
+
317
+ // ----- action icons -----
318
+ var parts = (0, _react.useMemo)(function () {
319
+ if (!item.selected) return [];
320
+ return [/*#__PURE__*/_react["default"].createElement("g", {
321
+ key: 0,
322
+ "data-element-root": true,
323
+ "data-prototype": item.prototype,
324
+ "data-id": item.id,
325
+ "data-selected": item.selected,
326
+ "data-layer": layer.id,
327
+ "data-part": "rotation-anchor",
328
+ style: {
329
+ cursor: 'w-resize'
330
+ }
331
+ }, /*#__PURE__*/_react["default"].createElement("image", {
332
+ href: clockRotateState ? '/assets/img/svg/rotate.png' : '/assets/img/svg/blank_div.svg',
333
+ style: {
334
+ transform: "scale(-1, -1) translate(".concat(width / 2, "px, ").concat(height / 2, "px) rotate(25deg)")
335
+ },
336
+ height: "20",
337
+ width: "20",
338
+ onMouseEnter: function onMouseEnter() {
339
+ setClockRotateState(true);
340
+ setAntiClockRotateState(false);
341
+ },
342
+ onMouseLeave: function onMouseLeave() {
343
+ return setClockRotateState(mode === _constants.MODE_ROTATING_ITEM ? true : false);
344
+ }
345
+ }), /*#__PURE__*/_react["default"].createElement("image", {
346
+ href: antiClockRotateState ? '/assets/img/svg/rotate.png' : '/assets/img/svg/blank_div.svg',
347
+ style: {
348
+ transform: "scale(1, -1) translate(".concat(width / 2, "px, ").concat(height / 2, "px) rotate(25deg)")
349
+ },
350
+ height: "20",
351
+ width: "20",
352
+ onMouseEnter: function onMouseEnter() {
353
+ setAntiClockRotateState(true);
354
+ setClockRotateState(false);
355
+ },
356
+ onMouseLeave: function onMouseLeave() {
357
+ return setAntiClockRotateState(mode === _constants.MODE_ROTATING_ITEM ? true : false);
358
+ }
359
+ })), /*#__PURE__*/_react["default"].createElement("g", {
360
+ key: 1,
361
+ style: {
362
+ cursor: 'pointer',
363
+ transform: "rotate(".concat(360 - item.rotation, "deg) translate(").concat(-width / 2 - 27, "px, ", 0, "px)")
364
+ },
365
+ "data-element-root": true,
366
+ "data-prototype": item.prototype,
367
+ "data-id": item.id,
368
+ "data-selected": item.selected,
369
+ "data-layer": layer.id,
370
+ "data-part": "duplicate"
371
+ }, /*#__PURE__*/_react["default"].createElement("defs", null, /*#__PURE__*/_react["default"].createElement("filter", {
372
+ id: "shadow"
373
+ }, /*#__PURE__*/_react["default"].createElement("feDropShadow", {
374
+ dx: "0",
375
+ dy: "0",
376
+ stdDeviation: "0.6"
377
+ }))), /*#__PURE__*/_react["default"].createElement("rect", {
378
+ rx: "4",
379
+ ry: "4",
380
+ height: "22",
381
+ width: "22",
382
+ fill: "white",
383
+ filter: "url(#shadow)"
384
+ }), /*#__PURE__*/_react["default"].createElement("image", {
385
+ href: "/assets/img/svg/duplicate.svg",
386
+ x: "3",
387
+ y: "-19",
388
+ height: "16",
389
+ width: "16",
390
+ style: (0, _utils.isWarningItem)(item) ? {
391
+ transform: 'rotateX(180deg)',
392
+ opacity: 0.5
393
+ } : {
394
+ transform: 'rotateX(180deg)'
395
+ }
396
+ })), /*#__PURE__*/_react["default"].createElement("g", {
397
+ key: 2,
398
+ style: {
399
+ cursor: 'pointer',
400
+ transform: "rotate(".concat(360 - item.rotation, "deg) translate(").concat(-width / 2 - 27, "px, ").concat(-27, "px)")
401
+ },
402
+ "data-element-root": true,
403
+ "data-prototype": item.prototype,
404
+ "data-id": item.id,
405
+ "data-selected": item.selected,
406
+ "data-layer": layer.id,
407
+ "data-part": "remove"
408
+ }, /*#__PURE__*/_react["default"].createElement("rect", {
409
+ rx: "4",
410
+ ry: "4",
411
+ height: "22",
412
+ width: "22",
413
+ fill: "white",
414
+ filter: "url(#shadow)"
415
+ }), /*#__PURE__*/_react["default"].createElement("image", {
416
+ href: "/assets/img/svg/delete.svg",
417
+ x: "3",
418
+ y: "-19",
419
+ height: "16",
420
+ width: "16",
421
+ style: {
422
+ transform: 'rotateX(180deg)'
423
+ }
424
+ }))];
425
+ }, [item.selected, item.prototype, item.id, item.rotation, layer.id, clockRotateState, antiClockRotateState, width, height, mode, item]);
439
426
  var measure = item.layoutpos === _constants.WALL_CABINET_LAYOUTPOS ? showWallCabinetMeasure : showBaseCabinetMeasure;
440
427
  return /*#__PURE__*/_react["default"].createElement("g", {
441
428
  "data-element-root": true,
@@ -459,7 +446,4 @@ Item.propTypes = {
459
446
  scene: _propTypes["default"].object.isRequired,
460
447
  catalog: _propTypes["default"].object.isRequired
461
448
  };
462
- Item.contextTypes = {
463
- itemsActions: _propTypes["default"].object.isRequired
464
- };
465
449
  module.exports = exports.default;