kitchen-simulator 5.0.2-react.18 → 5.0.4-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.
@@ -15,10 +15,11 @@ import FormNumberInput from "../style/form-number-input";
15
15
  import { convert } from "../../utils/convert-units-lite";
16
16
  import { Map } from 'immutable';
17
17
  import { formatNumber } from "../../utils/math";
18
- import { isEmpty, updatePayloadOfInternalEvent } from "../../utils/helper"; // variables
18
+ import { isEmpty, updatePayloadOfInternalEvent } from "../../utils/helper";
19
19
  import { isWarningItem } from "./utils";
20
20
  import AppContext from "../../AppContext";
21
- // variables
21
+
22
+ // variables (kept as in your original file)
22
23
  var pinFlag = false;
23
24
  var sFlag = false; //for all object move
24
25
  var sPoint = {}; //for all object move
@@ -107,10 +108,11 @@ function mode2DetectAutopan(mode) {
107
108
  }
108
109
  }
109
110
  function extractElementData(node) {
110
- while (!node.attributes.getNamedItem('data-element-root') && node.tagName !== 'svg') {
111
+ while (!((_node = node) !== null && _node !== void 0 && (_node = _node.attributes) !== null && _node !== void 0 && (_node$getNamedItem = _node.getNamedItem) !== null && _node$getNamedItem !== void 0 && _node$getNamedItem.call(_node, 'data-element-root')) && ((_node2 = node) === null || _node2 === void 0 ? void 0 : _node2.tagName) !== 'svg') {
112
+ var _node, _node$getNamedItem, _node2;
111
113
  node = node.parentNode;
112
114
  }
113
- if (node.tagName === 'svg') return null;
115
+ if (!node || node.tagName === 'svg') return null;
114
116
  return {
115
117
  length: node.attributes.getNamedItem('data-length') ? parseFloat(node.attributes.getNamedItem('data-length').value) : 0,
116
118
  part: node.attributes.getNamedItem('data-part') ? node.attributes.getNamedItem('data-part').value : undefined,
@@ -128,15 +130,16 @@ export default function Viewer2D(_ref) {
128
130
  setToolbar = _ref.setToolbar,
129
131
  replaceCabinet = _ref.replaceCabinet,
130
132
  onInternalEvent = _ref.onInternalEvent;
131
- var _useContext = useContext(AppContext),
132
- viewer2DActions = _useContext.viewer2DActions,
133
- linesActions = _useContext.linesActions,
134
- holesActions = _useContext.holesActions,
135
- verticesActions = _useContext.verticesActions,
136
- itemsActions = _useContext.itemsActions,
137
- areaActions = _useContext.areaActions,
138
- projectActions = _useContext.projectActions,
139
- catalog = _useContext.catalog;
133
+ // React 18: useContext instead of legacy contextTypes
134
+ var ctx = useContext(AppContext);
135
+ var viewer2DActions = ctx.viewer2DActions,
136
+ linesActions = ctx.linesActions,
137
+ holesActions = ctx.holesActions,
138
+ verticesActions = ctx.verticesActions,
139
+ itemsActions = ctx.itemsActions,
140
+ areaActions = ctx.areaActions,
141
+ projectActions = ctx.projectActions,
142
+ catalog = ctx.catalog;
140
143
  var _useState = useState(null),
141
144
  _useState2 = _slicedToArray(_useState, 2),
142
145
  rulerEdit = _useState2[0],
@@ -146,22 +149,55 @@ export default function Viewer2D(_ref) {
146
149
  rulerEditID = _useState4[0],
147
150
  setRulerEditID = _useState4[1];
148
151
  var Viewer = useRef(null);
152
+ var _useState5 = useState(false),
153
+ _useState6 = _slicedToArray(_useState5, 2),
154
+ viewerReady = _useState6[0],
155
+ setViewerReady = _useState6[1];
156
+ var setViewerRef = function setViewerRef(node) {
157
+ Viewer.current = node;
158
+ if (node && !viewerReady) setViewerReady(true);
159
+ };
149
160
  var viewer2D = state.viewer2D,
150
161
  mode = state.mode,
151
162
  scene = state.scene;
152
-
153
- // let relatedLines = [];
154
- var _useState5 = useState([]),
155
- _useState6 = _slicedToArray(_useState5, 2),
156
- relatedLines = _useState6[0],
157
- setRelatedLines = _useState6[1];
158
- var _useState7 = useState(false),
163
+ var _useState7 = useState([]),
159
164
  _useState8 = _slicedToArray(_useState7, 2),
160
- drawStart = _useState8[0],
161
- setdrawStart = _useState8[1];
165
+ relatedLines = _useState8[0],
166
+ setRelatedLines = _useState8[1];
167
+ var _useState9 = useState(false),
168
+ _useState0 = _slicedToArray(_useState9, 2),
169
+ drawStart = _useState0[0],
170
+ setdrawStart = _useState0[1];
171
+
172
+ /**
173
+ * ✅ CRITICAL FIX (keeps same behavior):
174
+ * react-svg-pan-zoom does NOT always provide viewerEvent.x/y on mousedown/mouseup.
175
+ * If you treat viewerEvent as {x,y}, you inject NaN into Redux state -> SVG crash.
176
+ */
177
+ var getXY = function getXY(viewerEvent) {
178
+ var _viewerEvent$original;
179
+ // mousemove usually has viewer coords
180
+ if (Number.isFinite(viewerEvent === null || viewerEvent === void 0 ? void 0 : viewerEvent.x) && Number.isFinite(viewerEvent === null || viewerEvent === void 0 ? void 0 : viewerEvent.y)) {
181
+ return {
182
+ x: viewerEvent.x,
183
+ y: viewerEvent.y
184
+ };
185
+ }
186
+
187
+ // fallback for mousedown/mouseup
188
+ var ev = (viewerEvent === null || viewerEvent === void 0 || (_viewerEvent$original = viewerEvent.originalEvent) === null || _viewerEvent$original === void 0 ? void 0 : _viewerEvent$original.nativeEvent) || (viewerEvent === null || viewerEvent === void 0 ? void 0 : viewerEvent.originalEvent);
189
+ if (!ev || !Viewer.current) return null;
190
+
191
+ // most versions expose getSVGPoint
192
+ if (typeof Viewer.current.getSVGPoint === 'function') {
193
+ var pt = Viewer.current.getSVGPoint(ev.clientX, ev.clientY);
194
+ if (Number.isFinite(pt === null || pt === void 0 ? void 0 : pt.x) && Number.isFinite(pt === null || pt === void 0 ? void 0 : pt.y)) return pt;
195
+ }
196
+ return null;
197
+ };
198
+ var viewer2DState = state.viewer2D;
162
199
  useEffect(function () {
163
- if (!Viewer.current) return;
164
- var zoom = viewer2D && !viewer2D.isEmpty() ? viewer2D.get('a') : 1;
200
+ if (!viewerReady || !Viewer.current) return;
165
201
 
166
202
  // move viewer point to center
167
203
  var selectedLayer = state.scene.layers.get(state.scene.selectedLayer);
@@ -181,8 +217,10 @@ export default function Viewer2D(_ref) {
181
217
  });
182
218
  var moveX = topX + (bottomX - topX) / 2;
183
219
  var moveY = 2000 - (bottomY + (topY - bottomY) / 2);
220
+ var zoom = viewer2DState && !viewer2DState.isEmpty() ? viewer2DState.get('a') : 1;
221
+ console.log('aici');
184
222
  Viewer.current.setPointOnViewerCenter(moveX, moveY, zoom);
185
- }, []);
223
+ }, [viewerReady, state.scene.selectedLayer]);
186
224
  var layerID = scene.selectedLayer;
187
225
  var wall_thickness = LINE_THICKNESS / 2;
188
226
  var layer = scene.getIn(['layers', layerID]);
@@ -194,10 +232,6 @@ export default function Viewer2D(_ref) {
194
232
  y: -y + scene.height
195
233
  };
196
234
  };
197
- // let pinBackColor = pinFlag ? "#4488ff" : "black";
198
- // let topRightImg = state.mode == MODE_IDLE || state.mode == MODE_2D_PAN ? "/assets/img/svg/topbar/edit_inactive.svg" : "/assets/img/svg/topbar/edit_active.svg";
199
- // let topBtnAction = state.mode == MODE_IDLE || state.mode == MODE_2D_PAN ? () => linesActions.selectToolDrawingLine("wall") : () => projectActions.setMode(MODE_IDLE);
200
-
201
235
  var prepareSnap = function prepareSnap() {
202
236
  var layerID = scene.selectedLayer;
203
237
  var layer = scene.layers.get(layerID);
@@ -257,24 +291,7 @@ export default function Viewer2D(_ref) {
257
291
  v_a = _GeometryUtils$orderV2[0],
258
292
  v_b = _GeometryUtils$orderV2[1];
259
293
  var v_b_new = GeometryUtils.extendLine(v_a.x, v_a.y, v_b.x, v_b.y, value.get('length'), 2);
260
-
261
- // Blocked function that as wall changed, opposite wall should changed together.
262
- // let layer = scene.getIn(['layers', elementData.layer]);
263
- // let allLines = layer.lines.toArray()
264
- // let relatedLine = allLines.filter(line => { return line.vertices.toArray().includes(v_b.id) && line.id != selectedLine.id })[0];
265
- // let relatedVertexID = relatedLine && (relatedLine.vertices.toArray()[0] == v_b.id ? relatedLine.vertices.toArray()[1] : relatedLine.vertices.toArray()[0]);
266
- // let v_d = relatedVertexID && layer.getIn(['vertices', relatedVertexID]);
267
- // let delta = {
268
- // x : v_b_new.x - v_b.x,
269
- // y : v_b_new.y - v_b.y
270
- // };
271
- // let newPosition = {
272
- // x : v_d.x + delta.x,
273
- // y : v_d.y + delta.y
274
- // }
275
-
276
294
  var attributesData = {
277
- // (v_0 === v_a ? 'vertexTwo' : 'vertexOne') : v_b.merge(v_b_new)),
278
295
  lineLength: value
279
296
  };
280
297
  if (v_0 === v_a) {
@@ -294,11 +311,6 @@ export default function Viewer2D(_ref) {
294
311
  layerID: elementData.layer,
295
312
  lineID: elementData.id
296
313
  });
297
-
298
- // Blocked function that as wall changed, opposite wall should changed together.
299
- // verticesActions.beginDraggingVertex(elementData.layer, relatedVertexID, newPosition.x, newPosition.y, state.snapMask);
300
- // verticesActions.updateDraggingVertex(newPosition.x, newPosition.y, state.snapMask);
301
- // verticesActions.endDraggingVertex(newPosition.x, newPosition.y, state.snapMask);
302
314
  };
303
315
  var updateTwoHoleRulerAttribute = function updateTwoHoleRulerAttribute(elementData, value) {
304
316
  var elementIds = elementData.id.split(',');
@@ -364,11 +376,9 @@ export default function Viewer2D(_ref) {
364
376
  _loop2(j);
365
377
  }
366
378
  };
367
- // if (drawingLine.vertices[0] !== drawingLine.vertices[1]) {
368
379
  for (var i = 0; i < drawingLine.vertices.length; i++) {
369
380
  _loop();
370
381
  }
371
- // }
372
382
  };
373
383
  var getEndPoint = function getEndPoint(vertices, x, y, mode) {
374
384
  var selLineID = state.getIn(['scene', 'layers', layerID, 'selected', 'lines']).first();
@@ -435,7 +445,6 @@ export default function Viewer2D(_ref) {
435
445
  vtx = x;
436
446
  vty = y;
437
447
  } else {
438
- // the origin point of rotation(snapping)
439
448
  var _originVerId = draggingLine.vertices.findIndex(function (vertice) {
440
449
  return vertice !== dragVertexId;
441
450
  });
@@ -443,7 +452,7 @@ export default function Viewer2D(_ref) {
443
452
  if (stepUnit) {
444
453
  var _ox = vertices[_originVerId].x;
445
454
  var _oy = vertices[_originVerId].y;
446
- angles.forEach(function (angle, index) {
455
+ angles.forEach(function (angle) {
447
456
  if (Math.abs(angle) < MIN_ANGLE_DISALLOW_DRAW_WALL || Math.abs(angle) > 360 - MIN_ANGLE_DISALLOW_DRAW_WALL) {
448
457
  var absVal = Math.abs(angle);
449
458
  var rest = MIN_ANGLE_DISALLOW_DRAW_WALL - absVal;
@@ -451,9 +460,7 @@ export default function Viewer2D(_ref) {
451
460
  absVal = 360 - absVal;
452
461
  rest = -(MIN_ANGLE_DISALLOW_DRAW_WALL - absVal);
453
462
  }
454
- // determine the direction of rotation.
455
463
  rest = angle > 0 ? -rest : rest;
456
- // rotate the current point to last point around the first point of drawing line.
457
464
  var res = GeometryUtils.rotatePointAroundPoint(x, y, _ox, _oy, rest);
458
465
  vtx = res.x;
459
466
  vty = res.y;
@@ -461,98 +468,18 @@ export default function Viewer2D(_ref) {
461
468
  });
462
469
  }
463
470
  }
464
-
465
- // angle snapping as a value of UNIT_ANGLE
466
471
  if (!endDrag.some(function (flag) {
467
472
  return flag === false;
468
473
  }) && !isEmpty(absAngle) && absAngle % UNIT_ANGLE !== 0 && stepUnit) {
469
- var _result = GeometryUtils.snapAngleByUnit(lineAngle, vertices, draggingLine, vtx, vty, dragVertexId);
470
- vtx = _result.x;
471
- vty = _result.y;
474
+ var result = GeometryUtils.snapAngleByUnit(lineAngle, vertices, draggingLine, vtx, vty, dragVertexId);
475
+ vtx = result.x;
476
+ vty = result.y;
472
477
  }
473
- var result = {
478
+ return {
474
479
  isEndDrag: endDrag,
475
480
  x: vtx,
476
481
  y: vty
477
482
  };
478
- return result;
479
- };
480
- var getProperties = function getProperties(item, property) {
481
- var _item$properties;
482
- if (!(item !== null && item !== void 0 && (_item$properties = item.properties) !== null && _item$properties !== void 0 && _item$properties.getIn)) return 0;
483
- var length = item.properties.getIn([property, '_length']);
484
- var unit = item.properties.getIn([property, '_unit']);
485
- return length && unit ? convert(length).from(unit).to('cm') : 0;
486
- };
487
- var point = function point(x, y) {
488
- return {
489
- x: x,
490
- y: y
491
- };
492
- };
493
- var getDistant = function getDistant(x, y, rotRad, curItemInfo, allRect) {
494
- var center_h = 3 * height / 8;
495
- var center_x1 = x - center_h * Math.sin(rotRad);
496
- var center_y1 = y + center_h * Math.cos(rotRad);
497
- var pointArray = [];
498
- curItemInfo.rectCenterPoint.forEach(function (centerpoint) {
499
- if (!Array.isArray(centerpoint) || centerpoint.length < 2) return;
500
- var _centerpoint = _slicedToArray(centerpoint, 2),
501
- pt = _centerpoint[0],
502
- angle = _centerpoint[1];
503
- if (!pt) return;
504
-
505
- // line through centerpoint and reference center
506
- var rectLine = angle === 180 || angle === 0 ? GeometryUtils.linePassingThroughTwoPoints(pt.x, pt.y, center_x1, center_y1) : GeometryUtils.linePassingThroughTwoPoints(pt.x, pt.y, x, y);
507
- if (!rectLine) return;
508
- var minDist;
509
- allRect.forEach(function (linerect) {
510
- if (!(linerect !== null && linerect !== void 0 && linerect.rect) || linerect.rect.length < 4) return;
511
- var p0 = GeometryUtils.clone_point(linerect.rect[2]);
512
- var p1 = GeometryUtils.clone_point(linerect.rect[3]);
513
- if (!p0 || !p1 || p0.x === p1.x && p0.y === p1.y) return;
514
- var lineFn = GeometryUtils.linePassingThroughTwoPoints(p0.x, p0.y, p1.x, p1.y);
515
- if (!lineFn) return;
516
- var ip = GeometryUtils.twoLinesIntersection(lineFn.a, lineFn.b, lineFn.c, rectLine.a, rectLine.b, rectLine.c);
517
- if (!ip) return;
518
-
519
- // intersection must lie within line segment
520
- var segLen = GeometryUtils.pointsDistance(p0.x, p0.y, p1.x, p1.y);
521
- if (segLen <= GeometryUtils.pointsDistance(p0.x, p0.y, ip.x, ip.y) || segLen <= GeometryUtils.pointsDistance(p1.x, p1.y, ip.x, ip.y)) return;
522
-
523
- // ensure intersection is farther than pt→center
524
- var distToCenter = GeometryUtils.pointsDistance(ip.x, ip.y, x, y);
525
- var baseDist = GeometryUtils.pointsDistance(pt.x, pt.y, ip.x, ip.y);
526
- if (distToCenter <= baseDist) return;
527
- var candidate = baseDist;
528
- minDist = minDist !== undefined ? Math.min(minDist, candidate) : candidate;
529
- });
530
- pointArray.push([minDist !== null && minDist !== void 0 ? minDist : 0, angle]);
531
- });
532
- return pointArray;
533
- };
534
- var getCalcRectFromItem = function getCalcRectFromItem(item) {
535
- if (!(item !== null && item !== void 0 && item.pos) || !(item !== null && item !== void 0 && item.size)) return {
536
- rectCenterPoint: []
537
- };
538
- var _item$pos = item.pos,
539
- x = _item$pos.x,
540
- y = _item$pos.y;
541
- var w = item.size.width / 2;
542
- var h = item.size.height / 2;
543
- var rotRad = item.rotRad;
544
- var mh = 3 * h / 4;
545
- var mx = x - w * Math.cos(rotRad) - mh * Math.sin(rotRad);
546
- var my = y - w * Math.sin(rotRad) + mh * Math.cos(rotRad);
547
- var m2x = x + w * Math.cos(rotRad) - mh * Math.sin(rotRad);
548
- var m2y = y + w * Math.sin(rotRad) + mh * Math.cos(rotRad);
549
- var m3x = x - h * Math.sin(rotRad);
550
- var m3y = y + h * Math.cos(rotRad);
551
- var m1x = x + h * Math.sin(rotRad);
552
- var m1y = y - h * Math.cos(rotRad);
553
- return {
554
- rectCenterPoint: [[point(mx, my), 180], [point(m1x, m1y), -90], [point(m2x, m2y), 0], [point(m3x, m3y), 90]]
555
- };
556
483
  };
557
484
  var getConnectedLines = function getConnectedLines() {
558
485
  var _state$getIn;
@@ -560,20 +487,22 @@ export default function Viewer2D(_ref) {
560
487
  var lines = state.getIn(['scene', 'layers', layerID, 'lines']).toJS();
561
488
  var lineID = state.getIn(['scene', 'layers', layerID, 'selected', 'lines']).first();
562
489
  var drawingLine = (_state$getIn = state.getIn(['scene', 'layers', layerID, 'lines', lineID])) === null || _state$getIn === void 0 ? void 0 : _state$getIn.toJS();
563
- // get the lines that have same points with drawing line.
564
490
  if (!isEmpty(drawingLine)) {
565
491
  var tlines = [];
566
492
  getRelatedLines(tlines, drawingLine, vertices, lines);
567
493
  setRelatedLines(tlines);
568
494
  }
569
495
  };
570
- var onMouseMove = function onMouseMove(viewerEvent) {
571
- //workaround that allow imageful component to work
572
496
 
573
- // let evt = new Event('mousemove-planner-event');
574
- // evt.viewerEvent = viewerEvent;
575
- // document.dispatchEvent(evt);
576
- var _mapCursorPosition = mapCursorPosition(viewerEvent),
497
+ // =========================
498
+ // Mouse handlers (only x/y extraction changed; logic preserved)
499
+ // =========================
500
+
501
+ var onMouseMove = function onMouseMove(viewerEvent) {
502
+ var _viewerEvent$original2, _viewerEvent$original3;
503
+ var raw = getXY(viewerEvent);
504
+ if (!raw) return;
505
+ var _mapCursorPosition = mapCursorPosition(raw),
577
506
  x = _mapCursorPosition.x,
578
507
  y = _mapCursorPosition.y;
579
508
  projectActions.updateMouseCoord({
@@ -589,54 +518,127 @@ export default function Viewer2D(_ref) {
589
518
  } else {
590
519
  switch (mode) {
591
520
  case constants.MODE_DRAWING_LINE:
592
- // check whether the drawing line is started.
593
- var lineID = state.getIn(['scene', 'layers', layerID, 'selected', 'lines']).first();
594
- var lines = state.getIn(['scene', 'layers', layerID, 'lines']).toJS();
595
- var drawingLine = state.getIn(['scene', 'layers', layerID, 'lines', lineID]).toJS();
596
- var tlines = [];
597
- if (drawStart || state.getIn(['scene', 'setLineAttributes'])) {
598
- var _vertices = state.getIn(['scene', 'layers', layerID, 'vertices']).toJS();
599
- setdrawStart(false);
600
- // get the lines that have same points with drawing line.
601
- getRelatedLines(tlines, drawingLine, _vertices, lines);
602
- setRelatedLines(tlines);
603
- linesActions.updateDrawingLine(x, y, tlines, state.snapMask);
604
- } else {
605
- linesActions.updateDrawingLine(x, y, relatedLines, state.snapMask);
521
+ {
522
+ var lineID = state.getIn(['scene', 'layers', layerID, 'selected', 'lines']).first();
523
+ var lines = state.getIn(['scene', 'layers', layerID, 'lines']).toJS();
524
+ var drawingLine = state.getIn(['scene', 'layers', layerID, 'lines', lineID]).toJS();
525
+ var tlines = [];
526
+ if (drawStart || state.getIn(['scene', 'setLineAttributes'])) {
527
+ var vertices = state.getIn(['scene', 'layers', layerID, 'vertices']).toJS();
528
+ setdrawStart(false);
529
+ getRelatedLines(tlines, drawingLine, vertices, lines);
530
+ setRelatedLines(tlines);
531
+ linesActions.updateDrawingLine(x, y, tlines, state.snapMask);
532
+ } else {
533
+ linesActions.updateDrawingLine(x, y, relatedLines, state.snapMask);
534
+ }
535
+ break;
606
536
  }
607
-
608
- // Blocked 90 degree snap.
609
- // let prevVertexID = state.getIn(['scene', 'layers', layerID, 'selected', 'vertices']).toJS()[0];
610
- // let prevVertex = state.getIn(['scene', 'layers', layerID, 'vertices', prevVertexID]);
611
- // let dx = Math.abs(x - prevVertex.x);
612
- // let dy = Math.abs(y - prevVertex.y);
613
- // if (dx > dy) y = prevVertex.y
614
- // else x = prevVertex.x;
615
- break;
616
537
  case constants.MODE_DRAWING_HOLE:
617
538
  holesActions.updateDrawingHole(layerID, x, y);
618
539
  break;
619
540
  case constants.MODE_DRAWING_ITEM:
620
- var _layer = scene.layers.get(layerID);
621
- var flag = false;
622
- _layer.items.some(function (item) {
623
- if (item.selected) {
624
- item.counterTop.uri = _layer.counterTop.uri;
625
- current_sel_obj_id = item.id;
626
- flag = true;
541
+ {
542
+ var _layer = scene.layers.get(layerID);
543
+ var flag = false;
544
+ _layer.items.some(function (item) {
545
+ if (item.selected) {
546
+ item.counterTop.uri = _layer.counterTop.uri;
547
+ current_sel_obj_id = item.id;
548
+ flag = true;
549
+ }
550
+ });
551
+ if (current_sel_obj_id === null || !flag) {
552
+ itemsActions.updateDrawingItem(layerID, x, y);
553
+ endPoint.x = x;
554
+ endPoint.y = y;
555
+ } else {
556
+ prepareSnap();
557
+ var _GeometryUtils$calcSn = GeometryUtils.calcSnap(allItemRect, allItemSnap, allLineRects, allLineSnap, allRect, x, y, allArea),
558
+ nx = _GeometryUtils$calcSn.nx,
559
+ ny = _GeometryUtils$calcSn.ny,
560
+ rot = _GeometryUtils$calcSn.rot,
561
+ rotRad = _GeometryUtils$calcSn.rotRad;
562
+ var val = {
563
+ pos: {
564
+ x: x,
565
+ y: y
566
+ },
567
+ rotRad: rotRad,
568
+ size: allItemRect.cur && allItemRect.cur.size,
569
+ layoutpos: allItemRect.cur && allItemRect.cur.layoutpos,
570
+ is_corner: allItemRect.cur && allItemRect.cur.is_corner
571
+ };
572
+ var _GeometryUtils$getAll = GeometryUtils.getAllHoleRect(scene, val),
573
+ isSect = _GeometryUtils$getAll.isSect,
574
+ snap = _GeometryUtils$getAll.snap;
575
+ if (!isEmpty(snap) && isSect) {
576
+ if (snap.length == 1) val.pos = {
577
+ x: snap[0].x,
578
+ y: snap[0].y
579
+ };else {
580
+ if ((snap[0].x - x) * (snap[0].x - x) + (snap[0].y - y) * (snap[0].y - y) < (snap[1].x - x) * (snap[1].x - x) + (snap[1].y - y) * (snap[1].y - y)) val.pos = {
581
+ x: snap[0].x,
582
+ y: snap[0].y
583
+ };else val.pos = {
584
+ x: snap[1].x,
585
+ y: snap[1].y
586
+ };
587
+ }
588
+ var interSect = GeometryUtils.validInterSect(allItemRect.others, val);
589
+ if (interSect) {
590
+ nx = val.pos.x;
591
+ ny = val.pos.y;
592
+ }
593
+ }
594
+ val.pos = {
595
+ x: nx,
596
+ y: ny
597
+ };
598
+ var isrectSect = GeometryUtils.validInterSect(allItemRect.others, val);
599
+ if (isrectSect && isSect) {
600
+ itemsActions.updateDraggingItemChanged(nx, ny, layerID, current_sel_obj_id);
601
+ itemsActions.updateRotatingItemChanged(rot, layerID, current_sel_obj_id);
602
+ endPoint.x = nx;
603
+ endPoint.y = ny;
604
+ }
605
+ if (allItemRect.cur && allItemRect.cur.itemInfo.name.includes('Cook Top') || allItemRect.cur && allItemRect.cur.itemInfo.name.includes('cabinet')) {
606
+ itemsActions.updateDraggingItemChanged(nx, ny, layerID, current_sel_obj_id);
607
+ itemsActions.updateRotatingItemChanged(rot, layerID, current_sel_obj_id);
608
+ endPoint.x = nx;
609
+ endPoint.y = ny;
610
+ }
611
+ if (allItemRect.cur && allItemRect.cur.itemInfo.name.includes('Hood') || allItemRect.cur && allItemRect.cur.itemInfo.name.includes('Range') || allItemRect.cur && allItemRect.cur.itemInfo.name.includes('Cook Top')) {
612
+ itemsActions.updateDraggingItemChanged(nx, ny, layerID, current_sel_obj_id);
613
+ itemsActions.updateRotatingItemChanged(rot, layerID, current_sel_obj_id);
614
+ endPoint.x = nx;
615
+ endPoint.y = ny;
616
+ }
627
617
  }
628
- });
629
- if (current_sel_obj_id === null || !flag) {
630
- itemsActions.updateDrawingItem(layerID, x, y);
631
- endPoint.x = x;
632
- endPoint.y = y;
633
- } else {
618
+ break;
619
+ }
620
+ case constants.MODE_DRAGGING_HOLE:
621
+ holesActions.updateDraggingHole(x, y);
622
+ break;
623
+ case constants.MODE_DRAGGING_LINE:
624
+ linesActions.updateDraggingLine(x, y, relatedLines, state.snapMask);
625
+ break;
626
+ case constants.MODE_DRAGGING_VERTEX:
627
+ {
628
+ var _vertices = state.getIn(['scene', 'layers', layerID, 'vertices']).toJS();
629
+ getConnectedLines();
630
+ var result = getEndPoint(_vertices, x, y, 'DRAGGING_VERTEX');
631
+ verticesActions.updateDraggingVertex(result.x, result.y, state.snapMask);
632
+ break;
633
+ }
634
+ case constants.MODE_DRAGGING_ITEM:
635
+ {
634
636
  prepareSnap();
635
- var _GeometryUtils$calcSn = GeometryUtils.calcSnap(allItemRect, allItemSnap, allLineRects, allLineSnap, allRect, x, y, allArea),
636
- nx = _GeometryUtils$calcSn.nx,
637
- ny = _GeometryUtils$calcSn.ny,
638
- rot = _GeometryUtils$calcSn.rot,
639
- rotRad = _GeometryUtils$calcSn.rotRad;
637
+ var _GeometryUtils$calcSn2 = GeometryUtils.calcSnap(allItemRect, allItemSnap, allLineRects, allLineSnap, allRect, x, y, allArea),
638
+ nx = _GeometryUtils$calcSn2.nx,
639
+ ny = _GeometryUtils$calcSn2.ny,
640
+ rot = _GeometryUtils$calcSn2.rot,
641
+ rotRad = _GeometryUtils$calcSn2.rotRad;
640
642
  var _val = {
641
643
  pos: {
642
644
  x: x,
@@ -647,14 +649,14 @@ export default function Viewer2D(_ref) {
647
649
  layoutpos: allItemRect.cur && allItemRect.cur.layoutpos,
648
650
  is_corner: allItemRect.cur && allItemRect.cur.is_corner
649
651
  };
650
- var _GeometryUtils$getAll = GeometryUtils.getAllHoleRect(scene, _val),
651
- _isSect = _GeometryUtils$getAll.isSect,
652
- _snap = _GeometryUtils$getAll.snap;
652
+ var _GeometryUtils$getAll2 = GeometryUtils.getAllHoleRect(scene, _val),
653
+ _isSect = _GeometryUtils$getAll2.isSect,
654
+ _snap = _GeometryUtils$getAll2.snap;
653
655
  if (!isEmpty(_snap) && _isSect) {
654
656
  if (_snap.length == 1) _val.pos = {
655
657
  x: _snap[0].x,
656
658
  y: _snap[0].y
657
- };else {
659
+ };else if (_snap.length == 2) {
658
660
  if ((_snap[0].x - x) * (_snap[0].x - x) + (_snap[0].y - y) * (_snap[0].y - y) < (_snap[1].x - x) * (_snap[1].x - x) + (_snap[1].y - y) * (_snap[1].y - y)) _val.pos = {
659
661
  x: _snap[0].x,
660
662
  y: _snap[0].y
@@ -663,8 +665,8 @@ export default function Viewer2D(_ref) {
663
665
  y: _snap[1].y
664
666
  };
665
667
  }
666
- var interSect = GeometryUtils.validInterSect(allItemRect.others, _val);
667
- if (interSect) {
668
+ var _interSect = GeometryUtils.validInterSect(allItemRect.others, _val);
669
+ if (_interSect) {
668
670
  nx = _val.pos.x;
669
671
  ny = _val.pos.y;
670
672
  }
@@ -677,106 +679,33 @@ export default function Viewer2D(_ref) {
677
679
  if (_isrectSect && _isSect) {
678
680
  itemsActions.updateDraggingItemChanged(nx, ny, layerID, current_sel_obj_id);
679
681
  itemsActions.updateRotatingItemChanged(rot, layerID, current_sel_obj_id);
680
- endPoint.x = nx;
681
- endPoint.y = ny;
682
682
  }
683
- if (allItemRect.cur && allItemRect.cur.itemInfo.name.includes('Cook Top') || allItemRect.cur && allItemRect.cur.itemInfo.name.includes('cabinet')) {
683
+ if (allItemRect.cur && allItemRect.cur.itemInfo.name.includes('Cook Top') || allItemRect.cur && allItemRect.cur.itemInfo.name.includes('Cabinet')) {
684
684
  itemsActions.updateDraggingItemChanged(nx, ny, layerID, current_sel_obj_id);
685
685
  itemsActions.updateRotatingItemChanged(rot, layerID, current_sel_obj_id);
686
- endPoint.x = nx;
687
- endPoint.y = ny;
688
686
  }
689
687
  if (allItemRect.cur && allItemRect.cur.itemInfo.name.includes('Hood') || allItemRect.cur && allItemRect.cur.itemInfo.name.includes('Range') || allItemRect.cur && allItemRect.cur.itemInfo.name.includes('Cook Top')) {
690
688
  itemsActions.updateDraggingItemChanged(nx, ny, layerID, current_sel_obj_id);
691
689
  itemsActions.updateRotatingItemChanged(rot, layerID, current_sel_obj_id);
692
- endPoint.x = nx;
693
- endPoint.y = ny;
694
690
  }
691
+ break;
695
692
  }
696
- break;
697
- case constants.MODE_DRAGGING_HOLE:
698
- holesActions.updateDraggingHole(x, y);
699
- break;
700
- case constants.MODE_DRAGGING_LINE:
701
- linesActions.updateDraggingLine(x, y, relatedLines, state.snapMask);
702
- break;
703
- case constants.MODE_DRAGGING_VERTEX:
704
- var vertices = state.getIn(['scene', 'layers', layerID, 'vertices']).toJS();
705
- getConnectedLines();
706
- var result = getEndPoint(vertices, x, y, 'DRAGGING_VERTEX');
707
- verticesActions.updateDraggingVertex(result.x, result.y, state.snapMask);
708
- break;
709
- case constants.MODE_DRAGGING_ITEM:
710
- prepareSnap();
711
- var _GeometryUtils$calcSn2 = GeometryUtils.calcSnap(allItemRect, allItemSnap, allLineRects, allLineSnap, allRect, x, y, allArea),
712
- nx = _GeometryUtils$calcSn2.nx,
713
- ny = _GeometryUtils$calcSn2.ny,
714
- rot = _GeometryUtils$calcSn2.rot,
715
- rotRad = _GeometryUtils$calcSn2.rotRad;
716
- var val = {
717
- pos: {
718
- x: x,
719
- y: y
720
- },
721
- rotRad: rotRad,
722
- size: allItemRect.cur && allItemRect.cur.size,
723
- layoutpos: allItemRect.cur && allItemRect.cur.layoutpos,
724
- is_corner: allItemRect.cur && allItemRect.cur.is_corner
725
- };
726
- var _GeometryUtils$getAll2 = GeometryUtils.getAllHoleRect(scene, val),
727
- isSect = _GeometryUtils$getAll2.isSect,
728
- snap = _GeometryUtils$getAll2.snap;
729
- if (!isEmpty(snap) && isSect) {
730
- if (snap.length == 1) val.pos = {
731
- x: snap[0].x,
732
- y: snap[0].y
733
- };else if (snap.length == 2) {
734
- if ((snap[0].x - x) * (snap[0].x - x) + (snap[0].y - y) * (snap[0].y - y) < (snap[1].x - x) * (snap[1].x - x) + (snap[1].y - y) * (snap[1].y - y)) val.pos = {
735
- x: snap[0].x,
736
- y: snap[0].y
737
- };else val.pos = {
738
- x: snap[1].x,
739
- y: snap[1].y
740
- };
741
- }
742
- var _interSect = GeometryUtils.validInterSect(allItemRect.others, val);
743
- if (_interSect) {
744
- nx = val.pos.x;
745
- ny = val.pos.y;
746
- }
747
- }
748
- val.pos = {
749
- x: nx,
750
- y: ny
751
- };
752
- var isrectSect = GeometryUtils.validInterSect(allItemRect.others, val);
753
- if (isrectSect && isSect) {
754
- itemsActions.updateDraggingItemChanged(nx, ny, layerID, current_sel_obj_id);
755
- itemsActions.updateRotatingItemChanged(rot, layerID, current_sel_obj_id);
756
- }
757
- if (allItemRect.cur && allItemRect.cur.itemInfo.name.includes('Cook Top') || allItemRect.cur && allItemRect.cur.itemInfo.name.includes('Cabinet')) {
758
- itemsActions.updateDraggingItemChanged(nx, ny, layerID, current_sel_obj_id);
759
- itemsActions.updateRotatingItemChanged(rot, layerID, current_sel_obj_id);
760
- }
761
- if (allItemRect.cur && allItemRect.cur.itemInfo.name.includes('Hood') || allItemRect.cur && allItemRect.cur.itemInfo.name.includes('Range') || allItemRect.cur && allItemRect.cur.itemInfo.name.includes('Cook Top')) {
762
- itemsActions.updateDraggingItemChanged(nx, ny, layerID, current_sel_obj_id);
763
- itemsActions.updateRotatingItemChanged(rot, layerID, current_sel_obj_id);
764
- }
765
- break;
766
693
  case constants.MODE_ROTATING_ITEM:
767
694
  itemsActions.updateRotatingItem(x, y);
768
695
  break;
696
+ default:
697
+ break;
769
698
  }
770
699
  }
771
- viewerEvent.originalEvent.stopPropagation();
700
+ viewerEvent === null || viewerEvent === void 0 || (_viewerEvent$original2 = viewerEvent.originalEvent) === null || _viewerEvent$original2 === void 0 || (_viewerEvent$original3 = _viewerEvent$original2.stopPropagation) === null || _viewerEvent$original3 === void 0 || _viewerEvent$original3.call(_viewerEvent$original2);
772
701
  };
773
702
  var onMouseDown = function onMouseDown(viewerEvent) {
774
703
  var event = viewerEvent.originalEvent;
775
- //workaround that allow imageful component to work
776
- // let evt = new Event('mousedown-planner-event');
777
- // evt.viewerEvent = viewerEvent;
778
- // document.dispatchEvent(evt);
779
- var _mapCursorPosition2 = mapCursorPosition(viewerEvent),
704
+
705
+ // fixed: do not treat viewerEvent as {x,y}
706
+ var raw = getXY(viewerEvent);
707
+ if (!raw) return;
708
+ var _mapCursorPosition2 = mapCursorPosition(raw),
780
709
  x = _mapCursorPosition2.x,
781
710
  y = _mapCursorPosition2.y;
782
711
  var layer = state.scene.getIn(['layers', state.scene.selectedLayer]);
@@ -810,12 +739,10 @@ export default function Viewer2D(_ref) {
810
739
  setToolbar('');
811
740
  current_sel_obj_id = elementData.id;
812
741
  if (elementData.part === 'rotation-anchor') itemsActions.beginRotatingItem(elementData.layer, elementData.id, x, y);else if (elementData.part === 'remove') break;else if (elementData.part === 'duplicate') break;else if (elementData.part === 'warning_edit') break;else {
813
- // closes the setting dialog
814
742
  if (document.getElementById('setting_dialog')) {
815
743
  document.getElementById('setting_dialog').style.display = 'none';
816
744
  }
817
745
  itemsActions.selectItem(elementData.layer, elementData.id);
818
- // projectActions.setMode(constants.MODE_DRAGGING_ITEM);
819
746
  itemsActions.beginDraggingItem(elementData.layer, elementData.id, x, y);
820
747
  replaceCabinet(false);
821
748
  }
@@ -835,9 +762,15 @@ export default function Viewer2D(_ref) {
835
762
  event.stopPropagation();
836
763
  };
837
764
  var onMouseUp = function onMouseUp(viewerEvent) {
838
- //set move all flag false
839
765
  sFlag = false;
840
766
  var event = viewerEvent.originalEvent;
767
+
768
+ // ✅ fixed: do not treat viewerEvent as {x,y}
769
+ var raw = getXY(viewerEvent);
770
+ if (!raw) return;
771
+ var _mapCursorPosition3 = mapCursorPosition(raw),
772
+ x = _mapCursorPosition3.x,
773
+ y = _mapCursorPosition3.y;
841
774
  var parent = document.querySelector('#kitchen-simulator-container');
842
775
  var targetRect = event.target.getBoundingClientRect();
843
776
  var left = targetRect.left;
@@ -858,13 +791,6 @@ export default function Viewer2D(_ref) {
858
791
  }
859
792
  }
860
793
  setRulerEdit(null);
861
- // let evt = new Event('mouseup-planner-event');
862
- // evt.viewerEvent = viewerEvent;
863
- // document.dispatchEvent(evt);
864
-
865
- var _mapCursorPosition3 = mapCursorPosition(viewerEvent),
866
- x = _mapCursorPosition3.x,
867
- y = _mapCursorPosition3.y;
868
794
  var draggingDistance = Math.sqrt((x - mouseDownPoint.x) * (x - mouseDownPoint.x) + (y - mouseDownPoint.y) * (y - mouseDownPoint.y));
869
795
  var vertices = state.getIn(['scene', 'layers', layerID, 'vertices']).toJS();
870
796
  var lines = state.getIn(['scene', 'layers', layerID, 'lines']).toJS();
@@ -901,8 +827,6 @@ export default function Viewer2D(_ref) {
901
827
  elementPrototype = 'items';
902
828
  internalType = INTERNAL_EVENT_ROTATE_ELEMENT;
903
829
  break;
904
-
905
- // item selection be came from dragging mode
906
830
  case constants.MODE_DRAGGING_ITEM:
907
831
  elementPrototype = 'items';
908
832
  internalType = INTERNAL_EVENT_SELECT_ELEMENT;
@@ -917,8 +841,12 @@ export default function Viewer2D(_ref) {
917
841
  internalType = INTERNAL_EVENT_SELECT_ELEMENT;
918
842
  }
919
843
  break;
844
+ default:
845
+ break;
920
846
  }
921
847
  break;
848
+ default:
849
+ break;
922
850
  }
923
851
  switch (mode) {
924
852
  case constants.MODE_IDLE:
@@ -937,7 +865,6 @@ export default function Viewer2D(_ref) {
937
865
  projectActions.remove();
938
866
  break;
939
867
  } else if (elementData.part === 'elevation') {
940
- // handle action when click elevation about selected line
941
868
  var _mode = MODE_ELEVATION_VIEW;
942
869
  projectActions.setMode(_mode);
943
870
  internalType = constants.INTERNAL_EVENT_TOGGLE_TO_ELEVATION;
@@ -959,13 +886,12 @@ export default function Viewer2D(_ref) {
959
886
  case 'items':
960
887
  if (elementData.part === 'duplicate') {
961
888
  var currentObject = state.getIn(['scene', 'layers', layerID, 'items', elementData.id]);
962
- if (!isWarningItem(currentObject)) itemsActions.duplicateSelected(currentObject, onInternalEvent); // send draw internal event when duplicating
889
+ if (!isWarningItem(currentObject)) itemsActions.duplicateSelected(currentObject, onInternalEvent);
963
890
  break;
964
891
  } else if (elementData.part === 'remove') {
965
892
  projectActions.remove();
966
893
  break;
967
894
  } else if (elementData.part === 'warning_edit') {
968
- // closes the setting dialog
969
895
  if (document.getElementById('setting_dialog')) {
970
896
  document.getElementById('setting_dialog').style.display = 'none';
971
897
  }
@@ -978,234 +904,250 @@ export default function Viewer2D(_ref) {
978
904
  break;
979
905
  }
980
906
  case 'rulerDist':
981
- var _length1 = convert(elementData.length).from(scene.unit).to(scene.rulerUnit);
982
- var distanceText1 = "".concat(formatNumber(_length1, DECIMAL_PLACES_2));
983
- var numberInput1 = /*#__PURE__*/React.createElement("div", {
984
- id: "ruler_numberInput",
985
- style: {
986
- position: 'absolute',
987
- left: left,
988
- top: top,
989
- zIndex: 1000
990
- }
991
- }, /*#__PURE__*/React.createElement(FormNumberInput, {
992
- style: {
993
- textAlign: 'center',
994
- paddingRight: 10,
995
- fontSize: '16px',
996
- lineHeight: '22px',
997
- fontWeight: 600
998
- },
999
- value: distanceText1,
1000
- onChange: function onChange(event) {
1001
- var value = new Map({
1002
- length: convert(event.target.value).from(scene.rulerUnit).to(scene.unit),
1003
- _length: event.target.value,
1004
- _unit: scene.rulerUnit
1005
- });
1006
- updateRulerDistAttribute(elementData, value);
1007
- },
1008
- precision: 2
1009
- }));
1010
- setRulerEdit(numberInput1);
1011
- projectActions.unselectAll();
1012
- break;
907
+ {
908
+ var _length1 = convert(elementData.length).from(scene.unit).to(scene.rulerUnit);
909
+ var distanceText1 = "".concat(formatNumber(_length1, DECIMAL_PLACES_2));
910
+ var numberInput1 = /*#__PURE__*/React.createElement("div", {
911
+ id: "ruler_numberInput",
912
+ style: {
913
+ position: 'absolute',
914
+ left: left,
915
+ top: top,
916
+ zIndex: 1000
917
+ }
918
+ }, /*#__PURE__*/React.createElement(FormNumberInput, {
919
+ style: {
920
+ textAlign: 'center',
921
+ paddingRight: 10,
922
+ fontSize: '16px',
923
+ lineHeight: '22px',
924
+ fontWeight: 600
925
+ },
926
+ value: distanceText1,
927
+ onChange: function onChange(event) {
928
+ var value = new Map({
929
+ length: convert(event.target.value).from(scene.rulerUnit).to(scene.unit),
930
+ _length: event.target.value,
931
+ _unit: scene.rulerUnit
932
+ });
933
+ updateRulerDistAttribute(elementData, value);
934
+ },
935
+ precision: 2
936
+ }));
937
+ setRulerEdit(numberInput1);
938
+ projectActions.unselectAll();
939
+ break;
940
+ }
1013
941
  case 'ruler':
1014
- var _length = convert(elementData.length).from(scene.unit).to(selectedLayer.unit);
1015
- var numberInput = /*#__PURE__*/React.createElement("div", {
1016
- id: "ruler_numberInput",
1017
- style: {
1018
- position: 'absolute',
1019
- left: left,
1020
- top: top,
1021
- zIndex: 1000
1022
- }
1023
- }, /*#__PURE__*/React.createElement(FormNumberInput, {
1024
- style: {
1025
- textAlign: 'center',
1026
- paddingRight: 10,
1027
- fontSize: '16px',
1028
- lineHeight: '22px',
1029
- fontWeight: 600
1030
- },
1031
- value: formatNumber(_length, DECIMAL_PLACES_2),
1032
- onChange: function onChange(event) {
1033
- var value = new Map({
1034
- length: convert(event.target.value).from(selectedLayer.unit).to(scene.unit),
1035
- _length: event.target.value,
1036
- _unit: selectedLayer.unit
1037
- });
1038
- updateRulerAttribute(elementData, value);
1039
- },
1040
- precision: 2
1041
- }));
1042
- setRulerEdit(numberInput);
1043
- projectActions.unselectAll();
1044
- break;
942
+ {
943
+ var _length = convert(elementData.length).from(scene.unit).to(selectedLayer.unit);
944
+ var numberInput = /*#__PURE__*/React.createElement("div", {
945
+ id: "ruler_numberInput",
946
+ style: {
947
+ position: 'absolute',
948
+ left: left,
949
+ top: top,
950
+ zIndex: 1000
951
+ }
952
+ }, /*#__PURE__*/React.createElement(FormNumberInput, {
953
+ style: {
954
+ textAlign: 'center',
955
+ paddingRight: 10,
956
+ fontSize: '16px',
957
+ lineHeight: '22px',
958
+ fontWeight: 600
959
+ },
960
+ value: formatNumber(_length, DECIMAL_PLACES_2),
961
+ onChange: function onChange(event) {
962
+ var value = new Map({
963
+ length: convert(event.target.value).from(selectedLayer.unit).to(scene.unit),
964
+ _length: event.target.value,
965
+ _unit: selectedLayer.unit
966
+ });
967
+ updateRulerAttribute(elementData, value);
968
+ },
969
+ precision: 2
970
+ }));
971
+ setRulerEdit(numberInput);
972
+ projectActions.unselectAll();
973
+ break;
974
+ }
1045
975
  case 'twoHoleRuler':
1046
- var _lengthTwoHoleRuler = convert(elementData.length).from(scene.unit).to(scene.rulerUnit);
1047
- var distanceTextTwoHoleRuler = "".concat(formatNumber(_lengthTwoHoleRuler, DECIMAL_PLACES_2));
1048
- var numberInputTwoHoleRuler = /*#__PURE__*/React.createElement("div", {
1049
- id: "ruler_numberInput",
1050
- style: {
1051
- position: 'absolute',
1052
- left: left,
1053
- top: top,
1054
- zIndex: 1000
1055
- }
1056
- }, /*#__PURE__*/React.createElement(FormNumberInput, {
1057
- style: {
1058
- textAlign: 'center',
1059
- padding: 'auto',
1060
- fontSize: '16px',
1061
- lineHeight: '22px',
1062
- fontWeight: 600
1063
- },
1064
- value: distanceTextTwoHoleRuler,
1065
- onChange: function onChange(event) {
1066
- var value = new Map({
1067
- length: convert(event.target.value / 2).from(scene.rulerUnit).to(scene.unit),
1068
- _length: event.target.value / 2,
1069
- _unit: scene.rulerUnit
1070
- });
1071
- updateTwoHoleRulerAttribute(elementData, value);
1072
- },
1073
- precision: 2
1074
- }));
1075
- setRulerEdit(numberInputTwoHoleRuler);
1076
- projectActions.unselectAll();
1077
- break;
976
+ {
977
+ var _lengthTwoHoleRuler = convert(elementData.length).from(scene.unit).to(scene.rulerUnit);
978
+ var distanceTextTwoHoleRuler = "".concat(formatNumber(_lengthTwoHoleRuler, DECIMAL_PLACES_2));
979
+ var numberInputTwoHoleRuler = /*#__PURE__*/React.createElement("div", {
980
+ id: "ruler_numberInput",
981
+ style: {
982
+ position: 'absolute',
983
+ left: left,
984
+ top: top,
985
+ zIndex: 1000
986
+ }
987
+ }, /*#__PURE__*/React.createElement(FormNumberInput, {
988
+ style: {
989
+ textAlign: 'center',
990
+ padding: 'auto',
991
+ fontSize: '16px',
992
+ lineHeight: '22px',
993
+ fontWeight: 600
994
+ },
995
+ value: distanceTextTwoHoleRuler,
996
+ onChange: function onChange(event) {
997
+ var value = new Map({
998
+ length: convert(event.target.value / 2).from(scene.rulerUnit).to(scene.unit),
999
+ _length: event.target.value / 2,
1000
+ _unit: scene.rulerUnit
1001
+ });
1002
+ updateTwoHoleRulerAttribute(elementData, value);
1003
+ },
1004
+ precision: 2
1005
+ }));
1006
+ setRulerEdit(numberInputTwoHoleRuler);
1007
+ projectActions.unselectAll();
1008
+ break;
1009
+ }
1078
1010
  case 'leftHoleRuler':
1079
- var _lengthLeftHoleRuler = convert(elementData.length).from(scene.unit).to(scene.rulerUnit);
1080
- var distanceTextLeftHoleRuler = "".concat(_lengthLeftHoleRuler.toFixed(2));
1081
- var numberInputLeftHoleRuler = /*#__PURE__*/React.createElement("div", {
1082
- id: "ruler_numberInput",
1083
- style: {
1084
- position: 'absolute',
1085
- left: left,
1086
- top: top,
1087
- zIndex: 1000
1088
- }
1089
- }, /*#__PURE__*/React.createElement(FormNumberInput, {
1090
- style: {
1091
- textAlign: 'center',
1092
- paddingRight: 10,
1093
- fontSize: '16px',
1094
- lineHeight: '22px',
1095
- fontWeight: 600
1096
- },
1097
- value: distanceTextLeftHoleRuler,
1098
- onChange: function onChange(event) {
1099
- var value = new Map({
1100
- length: convert(event.target.value).from(scene.rulerUnit).to(scene.unit),
1101
- _length: event.target.value,
1102
- _unit: scene.rulerUnit
1103
- });
1104
- updateLeftHoleRulerAttribute(elementData, value);
1105
- },
1106
- precision: 2
1107
- }));
1108
- setRulerEdit(numberInputLeftHoleRuler);
1109
- projectActions.unselectAll();
1110
- break;
1011
+ {
1012
+ var _lengthLeftHoleRuler = convert(elementData.length).from(scene.unit).to(scene.rulerUnit);
1013
+ var distanceTextLeftHoleRuler = "".concat(_lengthLeftHoleRuler.toFixed(2));
1014
+ var numberInputLeftHoleRuler = /*#__PURE__*/React.createElement("div", {
1015
+ id: "ruler_numberInput",
1016
+ style: {
1017
+ position: 'absolute',
1018
+ left: left,
1019
+ top: top,
1020
+ zIndex: 1000
1021
+ }
1022
+ }, /*#__PURE__*/React.createElement(FormNumberInput, {
1023
+ style: {
1024
+ textAlign: 'center',
1025
+ paddingRight: 10,
1026
+ fontSize: '16px',
1027
+ lineHeight: '22px',
1028
+ fontWeight: 600
1029
+ },
1030
+ value: distanceTextLeftHoleRuler,
1031
+ onChange: function onChange(event) {
1032
+ var value = new Map({
1033
+ length: convert(event.target.value).from(scene.rulerUnit).to(scene.unit),
1034
+ _length: event.target.value,
1035
+ _unit: scene.rulerUnit
1036
+ });
1037
+ updateLeftHoleRulerAttribute(elementData, value);
1038
+ },
1039
+ precision: 2
1040
+ }));
1041
+ setRulerEdit(numberInputLeftHoleRuler);
1042
+ projectActions.unselectAll();
1043
+ break;
1044
+ }
1111
1045
  case 'rulerHole':
1112
- var _lengthRulerHole = convert(elementData.length).from(scene.unit).to(scene.rulerUnit);
1113
- var distanceTextRulerHole = "".concat(formatNumber(_lengthRulerHole, DECIMAL_PLACES_2));
1114
- var numberInputRulerHole = /*#__PURE__*/React.createElement("div", {
1115
- id: "ruler_numberInput",
1116
- style: {
1117
- position: 'absolute',
1118
- left: left,
1119
- top: top,
1120
- zIndex: 1000
1121
- }
1122
- }, /*#__PURE__*/React.createElement(FormNumberInput, {
1123
- style: {
1124
- textAlign: 'center',
1125
- paddingRight: 10,
1126
- fontSize: '16px',
1127
- lineHeight: '22px',
1128
- fontWeight: 600
1129
- },
1130
- value: distanceTextRulerHole,
1131
- onChange: function onChange(event) {
1132
- var value = new Map({
1133
- length: convert(event.target.value).from(scene.rulerUnit).to(scene.unit),
1134
- _length: event.target.value,
1135
- _unit: scene.rulerUnit
1136
- });
1137
- updateHoleRulerAttribute(elementData, value);
1138
- },
1139
- precision: 2
1140
- }));
1141
- setRulerEdit(numberInputRulerHole);
1142
- projectActions.unselectAll();
1143
- break;
1046
+ {
1047
+ var _lengthRulerHole = convert(elementData.length).from(scene.unit).to(scene.rulerUnit);
1048
+ var distanceTextRulerHole = "".concat(formatNumber(_lengthRulerHole, DECIMAL_PLACES_2));
1049
+ var numberInputRulerHole = /*#__PURE__*/React.createElement("div", {
1050
+ id: "ruler_numberInput",
1051
+ style: {
1052
+ position: 'absolute',
1053
+ left: left,
1054
+ top: top,
1055
+ zIndex: 1000
1056
+ }
1057
+ }, /*#__PURE__*/React.createElement(FormNumberInput, {
1058
+ style: {
1059
+ textAlign: 'center',
1060
+ paddingRight: 10,
1061
+ fontSize: '16px',
1062
+ lineHeight: '22px',
1063
+ fontWeight: 600
1064
+ },
1065
+ value: distanceTextRulerHole,
1066
+ onChange: function onChange(event) {
1067
+ var value = new Map({
1068
+ length: convert(event.target.value).from(scene.rulerUnit).to(scene.unit),
1069
+ _length: event.target.value,
1070
+ _unit: scene.rulerUnit
1071
+ });
1072
+ updateHoleRulerAttribute(elementData, value);
1073
+ },
1074
+ precision: 2
1075
+ }));
1076
+ setRulerEdit(numberInputRulerHole);
1077
+ projectActions.unselectAll();
1078
+ break;
1079
+ }
1144
1080
  case 'rightHoleRuler':
1145
- var _lengthRightHoleRuler = convert(elementData.length).from(scene.unit).to(scene.rulerUnit);
1146
- var distanceTextRightHoleRuler = "".concat(_lengthRightHoleRuler.toFixed(2));
1147
- var numberInputRightHoleRuler = /*#__PURE__*/React.createElement("div", {
1148
- id: "ruler_numberInput",
1149
- style: {
1150
- position: 'absolute',
1151
- left: left,
1152
- top: top,
1153
- zIndex: 1000
1154
- }
1155
- }, /*#__PURE__*/React.createElement(FormNumberInput, {
1156
- style: {
1157
- textAlign: 'center',
1158
- paddingRight: 10,
1159
- fontSize: '16px',
1160
- lineHeight: '22px',
1161
- fontWeight: 600
1162
- },
1163
- value: distanceTextRightHoleRuler,
1164
- onChange: function onChange(event) {
1165
- var value = new Map({
1166
- length: convert(event.target.value).from(scene.rulerUnit).to(scene.unit),
1167
- _length: event.target.value,
1168
- _unit: scene.rulerUnit
1169
- });
1170
- updateRightHoleRulerAttribute(elementData, value);
1171
- },
1172
- precision: 2
1173
- }));
1174
- setRulerEdit(numberInputRightHoleRuler);
1175
- projectActions.unselectAll();
1176
- break;
1081
+ {
1082
+ var _lengthRightHoleRuler = convert(elementData.length).from(scene.unit).to(scene.rulerUnit);
1083
+ var distanceTextRightHoleRuler = "".concat(_lengthRightHoleRuler.toFixed(2));
1084
+ var numberInputRightHoleRuler = /*#__PURE__*/React.createElement("div", {
1085
+ id: "ruler_numberInput",
1086
+ style: {
1087
+ position: 'absolute',
1088
+ left: left,
1089
+ top: top,
1090
+ zIndex: 1000
1091
+ }
1092
+ }, /*#__PURE__*/React.createElement(FormNumberInput, {
1093
+ style: {
1094
+ textAlign: 'center',
1095
+ paddingRight: 10,
1096
+ fontSize: '16px',
1097
+ lineHeight: '22px',
1098
+ fontWeight: 600
1099
+ },
1100
+ value: distanceTextRightHoleRuler,
1101
+ onChange: function onChange(event) {
1102
+ var value = new Map({
1103
+ length: convert(event.target.value).from(scene.rulerUnit).to(scene.unit),
1104
+ _length: event.target.value,
1105
+ _unit: scene.rulerUnit
1106
+ });
1107
+ updateRightHoleRulerAttribute(elementData, value);
1108
+ },
1109
+ precision: 2
1110
+ }));
1111
+ setRulerEdit(numberInputRightHoleRuler);
1112
+ projectActions.unselectAll();
1113
+ break;
1114
+ }
1177
1115
  case 'angleChange':
1178
- var _length2 = elementData.length;
1179
- var numberInput2 = /*#__PURE__*/React.createElement("div", {
1180
- id: "ruler_numberInput",
1181
- style: {
1182
- position: 'absolute',
1183
- left: left,
1184
- top: top,
1185
- zIndex: 1000
1186
- }
1187
- }, /*#__PURE__*/React.createElement(FormNumberInput, {
1188
- style: {
1189
- width: 50,
1190
- height: 50
1191
- },
1192
- value: _length2,
1193
- onChange: function onChange(event) {
1194
- var value = new Map({
1195
- length: convert(event.target.value).from(scene.rulerUnit).to(scene.unit),
1196
- _length: event.target.value,
1197
- _unit: scene.rulerUnit
1198
- });
1199
- updateangleChangeAttribute(elementData, value);
1200
- },
1201
- precision: 2
1202
- }));
1203
- setRulerEdit(numberInput2);
1204
- projectActions.unselectAll();
1205
- break;
1116
+ {
1117
+ var _length2 = elementData.length;
1118
+ var numberInput2 = /*#__PURE__*/React.createElement("div", {
1119
+ id: "ruler_numberInput",
1120
+ style: {
1121
+ position: 'absolute',
1122
+ left: left,
1123
+ top: top,
1124
+ zIndex: 1000
1125
+ }
1126
+ }, /*#__PURE__*/React.createElement(FormNumberInput, {
1127
+ style: {
1128
+ width: 50,
1129
+ height: 50
1130
+ },
1131
+ value: _length2,
1132
+ onChange: function onChange(event) {
1133
+ var value = new Map({
1134
+ length: convert(event.target.value).from(scene.rulerUnit).to(scene.unit),
1135
+ _length: event.target.value,
1136
+ _unit: scene.rulerUnit
1137
+ });
1138
+ updateangleChangeAttribute(elementData, value);
1139
+ },
1140
+ precision: 2
1141
+ }));
1142
+ setRulerEdit(numberInput2);
1143
+ projectActions.unselectAll();
1144
+ break;
1145
+ }
1206
1146
  case 'none':
1207
1147
  projectActions.unselectAll();
1208
1148
  break;
1149
+ default:
1150
+ break;
1209
1151
  }
1210
1152
  break;
1211
1153
  case constants.MODE_WAITING_DRAWING_LINE:
@@ -1213,19 +1155,14 @@ export default function Viewer2D(_ref) {
1213
1155
  linesActions.beginDrawingLine(layerID, x, y, state.snapMask, onInternalEvent);
1214
1156
  break;
1215
1157
  case constants.MODE_DRAWING_LINE:
1216
- // Blocked 90 degree snap.
1217
- // let prevVertexID = state.getIn(['scene', 'layers', layerID, 'selected', 'vertices']).toJS()[0];
1218
- // let prevVertex = state.getIn(['scene', 'layers', layerID, 'vertices', prevVertexID]);
1219
- // let dx = Math.abs(x - prevVertex.x);
1220
- // let dy = Math.abs(y - prevVertex.y);
1221
- // if (dx > dy) y = prevVertex.y
1222
- // else x = prevVertex.x;
1223
- setdrawStart(true);
1224
- getConnectedLines();
1225
- var endInfor = getEndPoint(vertices, x, y, 'END_DRAWIN_LINE');
1226
- linesActions.endDrawingLine(endInfor.x, endInfor.y, state.snapMask);
1227
- linesActions.beginDrawingLine(layerID, endInfor.x, endInfor.y, state.snapMask, onInternalEvent);
1228
- break;
1158
+ {
1159
+ setdrawStart(true);
1160
+ getConnectedLines();
1161
+ var endInfor = getEndPoint(vertices, x, y, 'END_DRAWIN_LINE');
1162
+ linesActions.endDrawingLine(endInfor.x, endInfor.y, state.snapMask);
1163
+ linesActions.beginDrawingLine(layerID, endInfor.x, endInfor.y, state.snapMask, onInternalEvent);
1164
+ break;
1165
+ }
1229
1166
  case constants.MODE_DRAWING_HOLE:
1230
1167
  holesActions.endDrawingHole(layerID, x, y);
1231
1168
  break;
@@ -1233,16 +1170,18 @@ export default function Viewer2D(_ref) {
1233
1170
  {
1234
1171
  var itemData = state.getIn(['scene', 'layers', layerID, elementData === null || elementData === void 0 ? void 0 : elementData.prototype, elementData === null || elementData === void 0 ? void 0 : elementData.id]);
1235
1172
  itemsActions.endDrawingItem(layerID, itemData.isInitialPos ? itemData.x : endPoint.x, itemData.isInitialPos ? itemData.y : endPoint.y);
1173
+ break;
1236
1174
  }
1237
- break;
1238
1175
  case constants.MODE_DRAGGING_LINE:
1239
1176
  linesActions.endDraggingLine(x, y, relatedLines, state.snapMask);
1240
1177
  break;
1241
1178
  case constants.MODE_DRAGGING_VERTEX:
1242
- getConnectedLines();
1243
- var result = getEndPoint(vertices, x, y, 'DRAGGING_VERTEX');
1244
- verticesActions.endDraggingVertex(result.x, result.y, state.snapMask);
1245
- break;
1179
+ {
1180
+ getConnectedLines();
1181
+ var result = getEndPoint(vertices, x, y, 'DRAGGING_VERTEX');
1182
+ verticesActions.endDraggingVertex(result.x, result.y, state.snapMask);
1183
+ break;
1184
+ }
1246
1185
  case constants.MODE_DRAGGING_ITEM:
1247
1186
  itemsActions.updateMolding();
1248
1187
  projectActions.setMode(MODE_IDLE);
@@ -1253,6 +1192,8 @@ export default function Viewer2D(_ref) {
1253
1192
  case constants.MODE_ROTATING_ITEM:
1254
1193
  itemsActions.endRotatingItem(x, y);
1255
1194
  break;
1195
+ default:
1196
+ break;
1256
1197
  }
1257
1198
  if (internalType) {
1258
1199
  var _currentObject2;
@@ -1263,8 +1204,6 @@ export default function Viewer2D(_ref) {
1263
1204
  }
1264
1205
  if (_currentObject) {
1265
1206
  var payload = updatePayloadOfInternalEvent(_currentObject, layer, catalog);
1266
-
1267
- // send selection event befor replace event
1268
1207
  if (internalType === constants.INTERNAL_EVENT_REPLACE_CABINET) {
1269
1208
  onInternalEvent === null || onInternalEvent === void 0 || onInternalEvent({
1270
1209
  type: INTERNAL_EVENT_SELECT_ELEMENT,
@@ -1279,22 +1218,12 @@ export default function Viewer2D(_ref) {
1279
1218
  }
1280
1219
  event.stopPropagation();
1281
1220
  };
1282
- var normalizeValue = function normalizeValue(v) {
1283
- var _v$viewerWidth, _v$viewerHeight, _v$SVGWidth, _v$SVGHeight;
1284
- return _objectSpread(_objectSpread({}, v), {}, {
1285
- viewerWidth: (_v$viewerWidth = v.viewerWidth) !== null && _v$viewerWidth !== void 0 ? _v$viewerWidth : width - rulerSize,
1286
- viewerHeight: (_v$viewerHeight = v.viewerHeight) !== null && _v$viewerHeight !== void 0 ? _v$viewerHeight : height - rulerSize,
1287
- SVGWidth: (_v$SVGWidth = v.SVGWidth) !== null && _v$SVGWidth !== void 0 ? _v$SVGWidth : scene.width,
1288
- SVGHeight: (_v$SVGHeight = v.SVGHeight) !== null && _v$SVGHeight !== void 0 ? _v$SVGHeight : scene.height
1289
- });
1290
- };
1291
1221
  var onChangeValue = function onChangeValue(value) {
1292
1222
  if (sFlag) return;
1293
- var normalized = normalizeValue(value);
1294
- var _zoomValue = parseInt((normalized.a - 0.5) / constants.ZOOM_VARIABLE);
1223
+ var _zoomValue = parseInt((value.a - 0.5) / constants.ZOOM_VARIABLE, 10);
1295
1224
  if (_zoomValue > constants.MAX_ZOOM_IN_SCALE) return;
1296
1225
  if (_zoomValue < 0 || Number.isNaN(_zoomValue)) return;
1297
- if (rulerEdit !== null && normalized.startX && normalized.startY || normalized.lastAction === 'zoom') {
1226
+ if (rulerEdit !== null && value.startX && value.startY || value.lastAction === 'zoom') {
1298
1227
  var _rulerEdit = document.getElementById('ruler_numberInput') && document.getElementById('ruler_numberInput'),
1299
1228
  _rect;
1300
1229
  if (rulerEditID !== null) {
@@ -1307,13 +1236,16 @@ export default function Viewer2D(_ref) {
1307
1236
  _rulerEdit.style.top = "".concat(bbox.top - (50 - bbox.height) / 2, "px");
1308
1237
  }
1309
1238
  }
1310
- if (normalized.e <= 10 && normalized.e + normalized.a * normalized.SVGWidth + 10 >= normalized.viewerWidth && normalized.f <= 80 && normalized.f + normalized.d * normalized.SVGHeight + 10 >= normalized.viewerHeight) {
1311
- projectActions.updateZoomScale(normalized.a);
1312
- return viewer2DActions.updateCameraView(normalized);
1239
+ if (value.e <= 10 && value.e + value.a * value.SVGWidth + 10 >= value.viewerWidth && value.f <= 80 && value.f + value.d * value.SVGHeight + 10 >= value.viewerHeight) {
1240
+ projectActions.updateZoomScale(value.a);
1241
+ return viewer2DActions.updateCameraView(value);
1313
1242
  }
1314
1243
  };
1315
1244
  var onChangeTool = function onChangeTool(tool) {
1316
1245
  switch (tool) {
1246
+ case TOOL_NONE:
1247
+ projectActions.selectToolEdit();
1248
+ break;
1317
1249
  case TOOL_PAN:
1318
1250
  viewer2DActions.selectToolPan();
1319
1251
  break;
@@ -1323,18 +1255,10 @@ export default function Viewer2D(_ref) {
1323
1255
  case TOOL_ZOOM_OUT:
1324
1256
  viewer2DActions.selectToolZoomOut();
1325
1257
  break;
1326
- case TOOL_NONE:
1327
- case TOOL_AUTO:
1328
1258
  default:
1329
1259
  break;
1330
1260
  }
1331
1261
  };
1332
- var onZoom = function onZoom(value) {
1333
- // var nextValue = viewer2D.toJS();
1334
- // nextValue = zoom(nextValue, 0, 0, value.a / nextValue.a)
1335
- // projectActions.updateZoomScale(nextValue.a);
1336
- // return viewer2DActions.updateCameraView(nextValue)
1337
- };
1338
1262
  var _state$get$toJS = state.get('viewer2D').toJS(),
1339
1263
  e = _state$get$toJS.e,
1340
1264
  f = _state$get$toJS.f,
@@ -1432,15 +1356,15 @@ export default function Viewer2D(_ref) {
1432
1356
  onMouseDown: onMouseDown,
1433
1357
  onMouseMove: onMouseMove,
1434
1358
  onMouseUp: onMouseUp,
1435
- detectPinchGesture: false,
1359
+ miniatureProps: {
1360
+ position: 'none'
1361
+ },
1436
1362
  toolbarProps: {
1437
- position: 'none',
1438
- style: {
1439
- display: 'none'
1440
- }
1363
+ position: 'none'
1441
1364
  },
1365
+ detectPinchGesture: false,
1442
1366
  disableDoubleClickZoomWithToolAuto: true,
1443
- ref: Viewer
1367
+ ref: setViewerRef
1444
1368
  }, /*#__PURE__*/React.createElement("svg", {
1445
1369
  width: scene.width,
1446
1370
  height: scene.height
@@ -1474,5 +1398,8 @@ export default function Viewer2D(_ref) {
1474
1398
  Viewer2D.propTypes = {
1475
1399
  state: PropTypes.object.isRequired,
1476
1400
  width: PropTypes.number.isRequired,
1477
- height: PropTypes.number.isRequired
1401
+ height: PropTypes.number.isRequired,
1402
+ setToolbar: PropTypes.func,
1403
+ replaceCabinet: PropTypes.func,
1404
+ onInternalEvent: PropTypes.func
1478
1405
  };