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