@buerli.io/react-cad 0.0.21 → 0.0.23-beta.0

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 (29) hide show
  1. package/build/components/UI/CAD/Messages/BlankDiv.d.ts +6 -0
  2. package/build/components/UI/CAD/Messages/Message.d.ts +5 -0
  3. package/build/components/UI/CAD/Messages/Messages.d.ts +9 -0
  4. package/build/components/UI/CAD/Messages/index.d.ts +1 -0
  5. package/build/components/UI/CAD/Messages/msgStore.d.ts +17 -0
  6. package/build/components/UI/CAD/SideBar/FeatureList/Feature.d.ts +1 -1
  7. package/build/components/UI/CAD/SideBar/FeatureList/utils.d.ts +1 -0
  8. package/build/components/UI/CAD/common/primitives.d.ts +4 -1
  9. package/build/index.cjs.js +1584 -793
  10. package/build/index.js +1582 -791
  11. package/build/plugins/Dimensions/index.d.ts +1 -1
  12. package/build/plugins/Sketch/Root/Details.d.ts +2 -0
  13. package/build/plugins/Sketch/Root/useMenuItems.d.ts +5 -0
  14. package/build/plugins/Sketch/View/graphics/Merged/Arc.d.ts +9 -0
  15. package/build/plugins/Sketch/View/graphics/Merged/Line.d.ts +10 -0
  16. package/build/plugins/Sketch/View/graphics/Merged/MergedWrapper.d.ts +11 -0
  17. package/build/plugins/Sketch/View/graphics/Merged/Point.d.ts +8 -0
  18. package/build/plugins/Sketch/View/graphics/graphics.d.ts +1 -2
  19. package/build/plugins/Sketch/View/graphics/hooks.d.ts +3 -1
  20. package/build/plugins/Sketch/View/graphics/primitives.d.ts +3 -3
  21. package/build/plugins/Sketch/View/graphics/scale.d.ts +4 -0
  22. package/build/plugins/Sketch/View/handlers/Handlers.d.ts +2 -0
  23. package/build/plugins/Sketch/View/handlers/UseRef.d.ts +3 -0
  24. package/build/plugins/Sketch/types.d.ts +1 -0
  25. package/build/plugins/Sketch/utils/Interaction.d.ts +4 -0
  26. package/build/utils/FileUtils.d.ts +1 -1
  27. package/build/utils/helpers.d.ts +2 -0
  28. package/package.json +9 -8
  29. package/build/plugins/Sketch/Root/UseRef.d.ts +0 -2
package/build/index.js CHANGED
@@ -1,4 +1,4 @@
1
- import { useDrawing, CameraHelper, useBuerli, usePlugin, useCamera, useEmbeddedPlugin, useGeometryInteraction, GlobalTransform, getCamera, Product, Canvas, Viewcube } from '@buerli.io/react';
1
+ import { useDrawing, CameraHelper, useBuerli, usePlugin, useCamera, useEmbeddedPlugin, useGeometryInteraction, GlobalTransform, getCamera, Product, useFeaturePluginDef, usePluginExists, Canvas, Viewcube } from '@buerli.io/react';
2
2
  import * as React from 'react';
3
3
  import React__default, { useMemo, useRef, useCallback, useState, useEffect, memo, useContext, useReducer } from 'react';
4
4
  import { getDrawing, createGraphicItem, GraphicType, MemberType, MathUtils, getPlugin, NOID, BuerliScope, Measure, MeasureResultType, api } from '@buerli.io/core';
@@ -6,22 +6,23 @@ import { CCClasses, ccAPI, ReorientedType, FlipType, BooleanOperationType, Extru
6
6
  import * as THREE from 'three';
7
7
  import _defineProperty from '@babel/runtime/helpers/esm/defineProperty';
8
8
  import { useFrame, useThree, createPortal, extend } from '@react-three/fiber';
9
- import { Html } from '@react-three/drei';
10
- import { ArrowUpOutlined, CheckOutlined, DeleteOutlined, PlusOutlined, EditOutlined, SelectOutlined, PlusSquareOutlined, ExportOutlined, CloseOutlined, EyeFilled, EyeOutlined, CaretRightOutlined, CaretDownOutlined, AppstoreOutlined, FileOutlined, LeftOutlined, AppstoreAddOutlined, CheckCircleTwoTone, CloseCircleTwoTone, ExpandAltOutlined, CodeSandboxOutlined, FontSizeOutlined, DownOutlined } from '@ant-design/icons';
9
+ import { Html, Merged } from '@react-three/drei';
10
+ import { ArrowUpOutlined, CheckOutlined, CaretRightOutlined, CaretDownOutlined, EditOutlined, DeleteOutlined, PlusOutlined, SelectOutlined, PlusSquareOutlined, ExportOutlined, CloseOutlined, EyeFilled, EyeOutlined, ExclamationCircleTwoTone, AppstoreOutlined, FileOutlined, LeftOutlined, AppstoreAddOutlined, CheckCircleTwoTone, CloseCircleTwoTone, ExpandAltOutlined, CodeSandboxOutlined, FontSizeOutlined, DownOutlined, InfoCircleTwoTone, UnorderedListOutlined } from '@ant-design/icons';
11
11
  import _extends from '@babel/runtime/helpers/esm/extends';
12
12
  import Switch from 'antd/lib/switch';
13
+ import AntdButton from 'antd/lib/button';
13
14
  import _objectWithoutProperties from '@babel/runtime/helpers/esm/objectWithoutProperties';
14
15
  import styled, { keyframes } from 'styled-components';
15
16
  import Tooltip from 'antd/lib/tooltip';
16
17
  import RadioGroupImpl from 'antd/lib/radio/group';
17
18
  import RadioButtonImpl from 'antd/lib/radio/radioButton';
19
+ import { Menu as Menu$1, Dropdown, Input, Typography, Space, Table, Tabs, Divider as Divider$1, Button, Tooltip as Tooltip$1, Modal, Badge } from 'antd';
20
+ import 'antd/dist/antd.css';
18
21
  import guid from 'uuid';
19
22
  import shallow from 'zustand/shallow';
20
23
  import { Geometry } from 'three-stdlib';
21
24
  import SelectImpl from 'antd/lib/select';
22
25
  import { basename, extname } from 'path';
23
- import { Menu as Menu$1, Dropdown, Input, Table, Space, Typography, Tabs, Divider as Divider$1, Button, Tooltip as Tooltip$1, Modal } from 'antd';
24
- import 'antd/dist/antd.css';
25
26
  import create from 'zustand';
26
27
  import vanilla from 'zustand/vanilla';
27
28
  import { useUID } from 'react-uid';
@@ -29,9 +30,9 @@ import * as deepmerge from 'deepmerge';
29
30
  import { SortableContainer, SortableElement } from 'react-sortable-hoc';
30
31
  import { RgbaColorPicker } from 'react-colorful';
31
32
 
32
- function ownKeys$k(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) { symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; }
33
+ function ownKeys$m(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) { symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; }
33
34
 
34
- function _objectSpread$k(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys$k(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys$k(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
35
+ function _objectSpread$m(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys$m(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys$m(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
35
36
  function getGraphicId(tree, refOrObjId) {
36
37
  const res = {
37
38
  graphicId: refOrObjId,
@@ -103,7 +104,7 @@ function useSelectedItems(drawingId, refOrObjIds) {
103
104
  }
104
105
 
105
106
  const createSelItem = React__default.useCallback(element => {
106
- return createGraphicItem(prodId, _objectSpread$k(_objectSpread$k({}, element), {}, {
107
+ return createGraphicItem(prodId, _objectSpread$m(_objectSpread$m({}, element), {}, {
107
108
  productId: prodId
108
109
  }));
109
110
  }, [prodId]);
@@ -134,7 +135,7 @@ function useSelectedItems(drawingId, refOrObjIds) {
134
135
  const elem = cont.map[Number(grIds[0])];
135
136
 
136
137
  if (elem) {
137
- elems.push(_objectSpread$k(_objectSpread$k({}, elem), {}, {
138
+ elems.push(_objectSpread$m(_objectSpread$m({}, elem), {}, {
138
139
  graphicId: contId,
139
140
  type: GraphicType.SOLID
140
141
  }));
@@ -172,9 +173,9 @@ function useSelectedItems(drawingId, refOrObjIds) {
172
173
  return selectedItems;
173
174
  }
174
175
 
175
- function ownKeys$j(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) { symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; }
176
+ function ownKeys$l(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) { symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; }
176
177
 
177
- function _objectSpread$j(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys$j(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys$j(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
178
+ function _objectSpread$l(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys$l(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys$l(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
178
179
  function addMembers(drawingId, ccObjId) {
179
180
  const drawingState = getDrawing(drawingId);
180
181
  const objInTree = drawingState.structure.tree[ccObjId];
@@ -187,7 +188,7 @@ function addMembers(drawingId, ccObjId) {
187
188
  const members = {};
188
189
  Object.keys(curMembers).forEach(memberName => {
189
190
  const curMember = curMembers[memberName];
190
- members[memberName] = _objectSpread$j(_objectSpread$j({}, curMember), {}, {
191
+ members[memberName] = _objectSpread$l(_objectSpread$l({}, curMember), {}, {
191
192
  name: memberName
192
193
  });
193
194
 
@@ -307,6 +308,10 @@ function getAncestorIdByClass(drawingId, objectId, parentClass) {
307
308
 
308
309
  return object.parent;
309
310
  }
311
+ const isSketchGeometry = arg => {
312
+ const objClass = typeof arg === 'string' ? arg : arg.class;
313
+ return objClass === CCClasses.CCPoint || objClass === CCClasses.CCLine || objClass === CCClasses.CCArc || objClass === CCClasses.CCCircle;
314
+ };
310
315
  const is2DConstraint = arg => {
311
316
  const objClass = typeof arg === 'string' ? arg : arg.class;
312
317
  return Boolean(objClass.match(/CC_2D.+Constraint/)) || objClass === CCClasses.CCRigidSet;
@@ -415,6 +420,12 @@ function fmod(num, denom) {
415
420
  k = k < 0 ? k + 1 : k;
416
421
  return num - k * denom;
417
422
  }
423
+ function numberToHexColor(color) {
424
+ const hexLen = 6;
425
+ const hexStr = color.toString(16);
426
+ const zeroNumber = hexLen - hexStr.length;
427
+ return '#' + '0'.repeat(zeroNumber) + hexStr;
428
+ }
418
429
 
419
430
  const DimContext = /*#__PURE__*/React__default.createContext({
420
431
  globalToLocalM: new THREE.Matrix4(),
@@ -422,7 +433,7 @@ const DimContext = /*#__PURE__*/React__default.createContext({
422
433
  drawingId: -1
423
434
  });
424
435
 
425
- function useScale(position, getVector) {
436
+ function useScale$1(position, getVector) {
426
437
  const ref = React__default.useRef();
427
438
  useFrame(args => {
428
439
  const sf = CameraHelper.calculateScaleFactor(position, 1, args.camera, args.size);
@@ -996,14 +1007,14 @@ const DimValue = ({
996
1007
  allowExpr: true
997
1008
  })))));
998
1009
  };
999
- const Line$1 = ({
1010
+ const Line$2 = ({
1000
1011
  start,
1001
1012
  end
1002
1013
  }) => {
1003
1014
  const position = React__default.useMemo(() => new THREE.Vector3().lerpVectors(start, end, 0.5), [start, end]);
1004
1015
  const quaternion = React__default.useMemo(() => new THREE.Quaternion().setFromUnitVectors(new THREE.Vector3(0, 1, 0), end.clone().sub(start).normalize()), [start, end]);
1005
1016
  const lineLength = start.distanceTo(end);
1006
- const ref = useScale(position, scaleF => [lineWidth$1 * scaleF, lineLength, lineWidth$1 * scaleF]);
1017
+ const ref = useScale$1(position, scaleF => [lineWidth$1 * scaleF, lineLength, lineWidth$1 * scaleF]);
1007
1018
  return lineLength === 0 ? null : /*#__PURE__*/React__default.createElement("mesh", {
1008
1019
  ref: ref,
1009
1020
  position: position,
@@ -1026,7 +1037,7 @@ const Arrow$1 = ({
1026
1037
  // Move arrow that end of the arrow will be at props.end
1027
1038
  geomRef.current && geomRef.current.translate(0, -0.5, 0);
1028
1039
  }, [geomRef]);
1029
- const ref = useScale(position, sf => [arrowSize * sf, arrowSize * 2 * sf, arrowSize * sf]);
1040
+ const ref = useScale$1(position, sf => [arrowSize * sf, arrowSize * 2 * sf, arrowSize * sf]);
1030
1041
  return /*#__PURE__*/React__default.createElement("mesh", {
1031
1042
  ref: ref,
1032
1043
  position: position,
@@ -1055,7 +1066,7 @@ const Arc$1 = ({
1055
1066
  lines.push(linePos);
1056
1067
  }
1057
1068
 
1058
- return /*#__PURE__*/React__default.createElement(React__default.Fragment, null, lines.map((line, i) => /*#__PURE__*/React__default.createElement(Line$1, {
1069
+ return /*#__PURE__*/React__default.createElement(React__default.Fragment, null, lines.map((line, i) => /*#__PURE__*/React__default.createElement(Line$2, {
1059
1070
  key: i,
1060
1071
  start: line[0],
1061
1072
  end: line[1]
@@ -1082,7 +1093,7 @@ const PositionHandler = ({
1082
1093
  const {
1083
1094
  camera
1084
1095
  } = useThree();
1085
- const ref = useScale(position, sf => [hRadius$1 * sf, hRadius$1 * sf, hRadius$1 * sf]);
1096
+ const ref = useScale$1(position, sf => [hRadius$1 * sf, hRadius$1 * sf, hRadius$1 * sf]);
1086
1097
  const onPointerDown = React__default.useCallback(e => {
1087
1098
  if (e.buttons !== 1) // Continue only if 'primary' mouse button is pressed
1088
1099
  return;
@@ -1187,16 +1198,16 @@ const LinearDim = ({
1187
1198
  endDir: endD
1188
1199
  };
1189
1200
  }, [members, tmpDimP]);
1190
- return /*#__PURE__*/React__default.createElement(React__default.Fragment, null, /*#__PURE__*/React__default.createElement(Line$1, {
1201
+ return /*#__PURE__*/React__default.createElement(React__default.Fragment, null, /*#__PURE__*/React__default.createElement(Line$2, {
1191
1202
  start: startFoot,
1192
1203
  end: tmpDimP
1193
- }), /*#__PURE__*/React__default.createElement(Line$1, {
1204
+ }), /*#__PURE__*/React__default.createElement(Line$2, {
1194
1205
  start: tmpDimP,
1195
1206
  end: endFoot
1196
- }), /*#__PURE__*/React__default.createElement(Line$1, {
1207
+ }), /*#__PURE__*/React__default.createElement(Line$2, {
1197
1208
  start: startP,
1198
1209
  end: startFoot
1199
- }), /*#__PURE__*/React__default.createElement(Line$1, {
1210
+ }), /*#__PURE__*/React__default.createElement(Line$2, {
1200
1211
  start: endP,
1201
1212
  end: endFoot
1202
1213
  }), /*#__PURE__*/React__default.createElement(Arrow$1, {
@@ -1242,10 +1253,10 @@ const RadialDim = ({
1242
1253
  dir: outside ? dir_.multiplyScalar(-1) : dir_
1243
1254
  };
1244
1255
  }, [members, tmpDimP]);
1245
- return /*#__PURE__*/React__default.createElement(React__default.Fragment, null, /*#__PURE__*/React__default.createElement(Line$1, {
1256
+ return /*#__PURE__*/React__default.createElement(React__default.Fragment, null, /*#__PURE__*/React__default.createElement(Line$2, {
1246
1257
  start: centerP,
1247
1258
  end: endP
1248
- }), /*#__PURE__*/React__default.createElement(Line$1, {
1259
+ }), /*#__PURE__*/React__default.createElement(Line$2, {
1249
1260
  start: endP,
1250
1261
  end: dimP
1251
1262
  }), /*#__PURE__*/React__default.createElement(Arrow$1, {
@@ -1289,10 +1300,10 @@ const DiametralDim = ({
1289
1300
  dirEnd: outside ? dir.clone().multiplyScalar(-1) : dir
1290
1301
  };
1291
1302
  }, [members, tmpDimP]);
1292
- return /*#__PURE__*/React__default.createElement(React__default.Fragment, null, /*#__PURE__*/React__default.createElement(Line$1, {
1303
+ return /*#__PURE__*/React__default.createElement(React__default.Fragment, null, /*#__PURE__*/React__default.createElement(Line$2, {
1293
1304
  start: startP,
1294
1305
  end: tmpDimP
1295
- }), /*#__PURE__*/React__default.createElement(Line$1, {
1306
+ }), /*#__PURE__*/React__default.createElement(Line$2, {
1296
1307
  start: tmpDimP,
1297
1308
  end: endP
1298
1309
  }), /*#__PURE__*/React__default.createElement(Arrow$1, {
@@ -1368,10 +1379,10 @@ const AngularDim = ({
1368
1379
  endL2: extendCrn ? corner : end
1369
1380
  };
1370
1381
  }, [members, tmpDimP]);
1371
- return /*#__PURE__*/React__default.createElement(React__default.Fragment, null, /*#__PURE__*/React__default.createElement(Line$1, {
1382
+ return /*#__PURE__*/React__default.createElement(React__default.Fragment, null, /*#__PURE__*/React__default.createElement(Line$2, {
1372
1383
  start: startL1,
1373
1384
  end: startFoot
1374
- }), /*#__PURE__*/React__default.createElement(Line$1, {
1385
+ }), /*#__PURE__*/React__default.createElement(Line$2, {
1375
1386
  start: endFoot,
1376
1387
  end: endL2
1377
1388
  }), /*#__PURE__*/React__default.createElement(Arc$1, {
@@ -1446,13 +1457,14 @@ var DimGraphics$1 = DimGraphics;
1446
1457
  /**
1447
1458
  * @see https://reactjs.org/docs/error-boundaries.html
1448
1459
  */
1449
-
1460
+ const isDev = process.env.NODE_ENV === 'development';
1450
1461
  /**
1451
1462
  * Wrapper for components which are exported from package.
1452
1463
  * It's intended to catch all errors and show friendly fallback to the user instead of error log.
1453
1464
  * By default it returns null in error case. You have to pass showHtml prop to show message to the user.
1454
1465
  * TODO: implement message showing.
1455
1466
  */
1467
+
1456
1468
  class ErrorBoundary extends React__default.Component {
1457
1469
  constructor(props) {
1458
1470
  super(props);
@@ -1481,7 +1493,7 @@ class ErrorBoundary extends React__default.Component {
1481
1493
  Object.values(warns).forEach(w => {
1482
1494
  if (w) {
1483
1495
  hasWarning = true;
1484
- console.warn(w.caption);
1496
+ isDev && console.warn(w.caption);
1485
1497
  }
1486
1498
  });
1487
1499
  }
@@ -1929,9 +1941,9 @@ var index$w = /*#__PURE__*/Object.freeze({
1929
1941
  useDimensionSetId: useDimensionSetId
1930
1942
  });
1931
1943
 
1932
- function ownKeys$i(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) { symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; }
1944
+ function ownKeys$k(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) { symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; }
1933
1945
 
1934
- function _objectSpread$i(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys$i(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys$i(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
1946
+ function _objectSpread$k(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys$k(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys$k(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
1935
1947
  /**
1936
1948
  * Implies the following data structure:
1937
1949
  * data: {
@@ -2034,7 +2046,7 @@ function useMateSelection(drawingId, matePath, csysId) {
2034
2046
  }));
2035
2047
  const handlers = React__default.useMemo(() => {
2036
2048
  if (isSelectable) {
2037
- return _objectSpread$i(_objectSpread$i({}, hHandlers), sHandlers);
2049
+ return _objectSpread$k(_objectSpread$k({}, hHandlers), sHandlers);
2038
2050
  }
2039
2051
 
2040
2052
  return {};
@@ -2050,9 +2062,9 @@ function useMateSelection(drawingId, matePath, csysId) {
2050
2062
  }, [isHovered, isSelected, isSelectable, handlers]);
2051
2063
  }
2052
2064
 
2053
- function ownKeys$h(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) { symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; }
2065
+ function ownKeys$j(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) { symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; }
2054
2066
 
2055
- function _objectSpread$h(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys$h(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys$h(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
2067
+ function _objectSpread$j(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys$j(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys$j(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
2056
2068
  /**
2057
2069
  * Implies the following data structure:
2058
2070
  * data: {
@@ -2071,7 +2083,8 @@ const createTreeObjSelItem = (productId, object) => {
2071
2083
  data: {
2072
2084
  object
2073
2085
  },
2074
- label
2086
+ label,
2087
+ removeCondition: d => d.structure.tree[object.id] === undefined
2075
2088
  };
2076
2089
  };
2077
2090
 
@@ -2180,7 +2193,7 @@ function useTreeObjSelection(drawingId, objId) {
2180
2193
  const isSelected = useIsSelected(drawingId, objId);
2181
2194
  const handlers = React__default.useMemo(() => {
2182
2195
  if (isSelectable) {
2183
- return _objectSpread$h(_objectSpread$h({}, hHandlers), sHandlers);
2196
+ return _objectSpread$j(_objectSpread$j({}, hHandlers), sHandlers);
2184
2197
  }
2185
2198
 
2186
2199
  return {};
@@ -5004,7 +5017,7 @@ const Root$g = ({
5004
5017
  }));
5005
5018
  };
5006
5019
 
5007
- const Point$1 = ({
5020
+ const Point$2 = ({
5008
5021
  position,
5009
5022
  radius,
5010
5023
  color,
@@ -5076,7 +5089,7 @@ const OriginPoint = ({
5076
5089
  handlers,
5077
5090
  userData
5078
5091
  }) => {
5079
- return /*#__PURE__*/React__default.createElement(Point$1, {
5092
+ return /*#__PURE__*/React__default.createElement(Point$2, {
5080
5093
  position: position ? position.clone() : new THREE.Vector3(),
5081
5094
  radius: 2,
5082
5095
  color: color,
@@ -5117,7 +5130,7 @@ const Csys = ({
5117
5130
  userData
5118
5131
  }) => {
5119
5132
  const position = new THREE.Vector3().setFromMatrixPosition(matrix);
5120
- const ref = useScale(position.clone(), sf => [2 * sf, 2 * sf, 2 * sf]);
5133
+ const ref = useScale$1(position.clone(), sf => [2 * sf, 2 * sf, 2 * sf]);
5121
5134
  return /*#__PURE__*/React__default.createElement("group", _extends({
5122
5135
  matrix: matrix,
5123
5136
  matrixAutoUpdate: false
@@ -5156,7 +5169,7 @@ const SelectedCsys = ({
5156
5169
  userData
5157
5170
  }) => {
5158
5171
  const position = new THREE.Vector3().setFromMatrixPosition(matrix);
5159
- const ref = useScale(position.clone(), sf => [2 * sf, 2 * sf, 2 * sf]);
5172
+ const ref = useScale$1(position.clone(), sf => [2 * sf, 2 * sf, 2 * sf]);
5160
5173
  return /*#__PURE__*/React__default.createElement("group", _extends({
5161
5174
  matrix: matrix,
5162
5175
  matrixAutoUpdate: false
@@ -5231,7 +5244,7 @@ const Distance = ({
5231
5244
  setShowValue(true);
5232
5245
  }
5233
5246
  });
5234
- return /*#__PURE__*/React__default.createElement(React__default.Fragment, null, /*#__PURE__*/React__default.createElement(Line$1, {
5247
+ return /*#__PURE__*/React__default.createElement(React__default.Fragment, null, /*#__PURE__*/React__default.createElement(Line$2, {
5235
5248
  start: start,
5236
5249
  end: end
5237
5250
  }), /*#__PURE__*/React__default.createElement(Arrow$1, {
@@ -5318,10 +5331,10 @@ const Angle = ({
5318
5331
  setShowValue(true);
5319
5332
  }
5320
5333
  });
5321
- return /*#__PURE__*/React__default.createElement(React__default.Fragment, null, /*#__PURE__*/React__default.createElement(Line$1, {
5334
+ return /*#__PURE__*/React__default.createElement(React__default.Fragment, null, /*#__PURE__*/React__default.createElement(Line$2, {
5322
5335
  start: center,
5323
5336
  end: end1
5324
- }), /*#__PURE__*/React__default.createElement(Line$1, {
5337
+ }), /*#__PURE__*/React__default.createElement(Line$2, {
5325
5338
  start: center,
5326
5339
  end: end2
5327
5340
  }), /*#__PURE__*/React__default.createElement("group", {
@@ -5348,7 +5361,7 @@ const Position = ({
5348
5361
  pos,
5349
5362
  result
5350
5363
  }) => {
5351
- return /*#__PURE__*/React__default.createElement(React__default.Fragment, null, /*#__PURE__*/React__default.createElement(Point$1, {
5364
+ return /*#__PURE__*/React__default.createElement(React__default.Fragment, null, /*#__PURE__*/React__default.createElement(Point$2, {
5352
5365
  position: pos,
5353
5366
  radius: 1.5,
5354
5367
  color: 0xaf1111
@@ -5363,7 +5376,7 @@ const Vector = ({
5363
5376
  end
5364
5377
  }) => {
5365
5378
  const dir = end.clone().sub(start);
5366
- return /*#__PURE__*/React__default.createElement(React__default.Fragment, null, /*#__PURE__*/React__default.createElement(Line$1, {
5379
+ return /*#__PURE__*/React__default.createElement(React__default.Fragment, null, /*#__PURE__*/React__default.createElement(Line$2, {
5367
5380
  start: start,
5368
5381
  end: end
5369
5382
  }), /*#__PURE__*/React__default.createElement(Arrow$1, {
@@ -5490,6 +5503,7 @@ let HandlersList;
5490
5503
  HandlersList["FILLET"] = "fillet";
5491
5504
  HandlersList["HOVER"] = "hover";
5492
5505
  HandlersList["TRIM"] = "trim";
5506
+ HandlersList["USEREF"] = "useReference";
5493
5507
  HandlersList["GSELECTION"] = "globalSelection";
5494
5508
  })(HandlersList || (HandlersList = {}));
5495
5509
 
@@ -5526,7 +5540,7 @@ const calcPreviewValue = (dir0, dir1, sector, reflex) => {
5526
5540
 
5527
5541
  const hRadius = 6;
5528
5542
  const TmpPositionHandler = props => {
5529
- const ref = useScale(props.position, sf => [hRadius * sf, hRadius * sf, hRadius * sf]);
5543
+ const ref = useScale$1(props.position, sf => [hRadius * sf, hRadius * sf, hRadius * sf]);
5530
5544
  return /*#__PURE__*/React__default.createElement("mesh", {
5531
5545
  ref: ref,
5532
5546
  position: props.position
@@ -5638,10 +5652,10 @@ const TmpAngularDim = props => {
5638
5652
  };
5639
5653
  }, [dir0, dir1, center, dimPos, reflex]);
5640
5654
  const text = radiansToDegrees(previewValue).toFixed(2);
5641
- return /*#__PURE__*/React__default.createElement(React__default.Fragment, null, /*#__PURE__*/React__default.createElement(Line$1, {
5655
+ return /*#__PURE__*/React__default.createElement(React__default.Fragment, null, /*#__PURE__*/React__default.createElement(Line$2, {
5642
5656
  start: cornerP,
5643
5657
  end: startFoot
5644
- }), /*#__PURE__*/React__default.createElement(Line$1, {
5658
+ }), /*#__PURE__*/React__default.createElement(Line$2, {
5645
5659
  start: endFoot,
5646
5660
  end: cornerP
5647
5661
  }), /*#__PURE__*/React__default.createElement(Arc$1, {
@@ -5702,9 +5716,9 @@ function getSketchState(drawingId, pluginId) {
5702
5716
  return plugin.state;
5703
5717
  }
5704
5718
 
5705
- function ownKeys$g(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) { symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; }
5719
+ function ownKeys$i(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) { symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; }
5706
5720
 
5707
- function _objectSpread$g(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys$g(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys$g(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
5721
+ function _objectSpread$i(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys$i(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys$i(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
5708
5722
  function CreateAngle(drawingId, pluginId) {
5709
5723
  const {
5710
5724
  set
@@ -5754,8 +5768,8 @@ function CreateAngle(drawingId, pluginId) {
5754
5768
  set(state_ => {
5755
5769
  const tmpAngularDimension = state_.tmpObjects[tmpDimensionId];
5756
5770
  return {
5757
- tmpObjects: _objectSpread$g(_objectSpread$g({}, state_.tmpObjects), {}, {
5758
- [tmpDimensionId]: _objectSpread$g(_objectSpread$g({}, tmpAngularDimension), params)
5771
+ tmpObjects: _objectSpread$i(_objectSpread$i({}, state_.tmpObjects), {}, {
5772
+ [tmpDimensionId]: _objectSpread$i(_objectSpread$i({}, tmpAngularDimension), params)
5759
5773
  })
5760
5774
  };
5761
5775
  });
@@ -5802,7 +5816,7 @@ function CreateAngle(drawingId, pluginId) {
5802
5816
  const center = linesInfo.center;
5803
5817
  const dimPos = center.clone().addScaledVector(dir0.clone().add(dir1).normalize(), 10);
5804
5818
 
5805
- const tmpAngularDimension = _objectSpread$g(_objectSpread$g({
5819
+ const tmpAngularDimension = _objectSpread$i(_objectSpread$i({
5806
5820
  class: CCClasses.CCAngularDimension,
5807
5821
  id: tmpDimensionId
5808
5822
  }, linesInfo), {}, {
@@ -5882,12 +5896,105 @@ function CreateAngle(drawingId, pluginId) {
5882
5896
  };
5883
5897
  }
5884
5898
 
5885
- function ownKeys$f(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) { symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; }
5899
+ function ownKeys$h(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) { symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; }
5886
5900
 
5887
- function _objectSpread$f(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys$f(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys$f(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
5888
- function Hover(drawingId, pluginId) {
5889
- let timerId;
5901
+ function _objectSpread$h(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys$h(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys$h(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
5902
+ let timerId;
5903
+ const hover = (drawingId, pluginId, hoveredId) => {
5904
+ const {
5905
+ state,
5906
+ set
5907
+ } = getPlugin(drawingId, pluginId);
5908
+ const tree = getDrawing(drawingId).structure.tree;
5909
+ const hoveredObject = tree[hoveredId];
5910
+
5911
+ if (!hoveredObject || hoveredObject && hoveredObject.class === CCClasses.CCSketch || state.rubberBandRectangle) {
5912
+ return;
5913
+ }
5914
+
5915
+ if (is2DConstraint(hoveredObject)) {
5916
+ const constraintEntities = hoveredObject.members.entities.members.map(entity => entity.value);
5917
+ set(state_ => {
5918
+ const highlighted = state_.highlighted;
5919
+ const highlightedConstraints = highlighted.filter(id => is2DConstraint(tree[id]) && id !== hoveredId);
5920
+ return {
5921
+ hovered: hoveredId,
5922
+ highlighted: [...highlightedConstraints, hoveredId, ...constraintEntities]
5923
+ };
5924
+ });
5925
+ } else {
5926
+ const linkedConstraints = Object.values(tree).filter(obj => is2DConstraint(obj)).filter(obj => obj.members.entities.members.some(entity => entity.value === hoveredId)).map(obj => obj.id);
5927
+ const constraintsToGeometry = {};
5928
+ linkedConstraints.forEach(id => {
5929
+ constraintsToGeometry[id] = hoveredId;
5930
+ });
5931
+ set(state_ => {
5932
+ return {
5933
+ hovered: hoveredId,
5934
+ highlighted: [hoveredId, ...linkedConstraints],
5935
+ constraintsToGeometry: _objectSpread$h(_objectSpread$h({}, state_.constraintsToGeometry), constraintsToGeometry)
5936
+ };
5937
+ });
5938
+ }
5939
+
5940
+ if (timerId) {
5941
+ window.clearTimeout(timerId);
5942
+ timerId = undefined;
5943
+ }
5944
+ };
5945
+ const unhover = (drawingId, pluginId, hoveredId) => {
5946
+ const {
5947
+ state,
5948
+ set
5949
+ } = getPlugin(drawingId, pluginId);
5950
+ const tree = getDrawing(drawingId).structure.tree;
5951
+ const hoveredObject = tree[hoveredId];
5952
+
5953
+ if (!hoveredObject || hoveredObject && hoveredObject.class === CCClasses.CCSketch || state.rubberBandRectangle) {
5954
+ return;
5955
+ }
5956
+
5957
+ set(state_ => {
5958
+ const highlighted = state_.highlighted;
5959
+ const highlightedConstraints = highlighted.filter(id => is2DConstraint(tree[id]));
5960
+ return {
5961
+ hovered: state_.hovered === hoveredId ? UNDEFINEDID : state_.hovered,
5962
+ highlighted: highlightedConstraints
5963
+ };
5964
+ });
5965
+
5966
+ if (timerId) {
5967
+ window.clearTimeout(timerId);
5968
+ }
5969
+
5970
+ timerId = window.setTimeout(() => {
5971
+ set({
5972
+ highlighted: []
5973
+ });
5974
+ }, 1000);
5975
+ };
5976
+ const select = (drawingId, pluginId, selectedId) => {
5977
+ const {
5978
+ set
5979
+ } = getPlugin(drawingId, pluginId);
5980
+ set(state => {
5981
+ const curSelected = state.selected;
5982
+
5983
+ if (curSelected.indexOf(selectedId) >= 0) {
5984
+ const newSelected = curSelected.filter(id => id !== selectedId);
5985
+ return {
5986
+ selected: newSelected
5987
+ };
5988
+ } else {
5989
+ curSelected.push(selectedId);
5990
+ return {
5991
+ selected: [...curSelected]
5992
+ };
5993
+ }
5994
+ });
5995
+ };
5890
5996
 
5997
+ function Hover(drawingId, pluginId) {
5891
5998
  const filter = object => true;
5892
5999
 
5893
6000
  const destructor = () => {
@@ -5900,81 +6007,14 @@ function Hover(drawingId, pluginId) {
5900
6007
  };
5901
6008
 
5902
6009
  const onPointerOver = e => {
5903
- const {
5904
- state,
5905
- set
5906
- } = getPlugin(drawingId, pluginId);
5907
6010
  const hoveredId = e.object.userData.objId;
5908
- const tree = getDrawing(drawingId).structure.tree;
5909
- const hoveredObject = tree[hoveredId];
6011
+ hover(drawingId, pluginId, hoveredId);
5910
6012
  e.stopPropagation();
5911
-
5912
- if (!hoveredObject || hoveredObject && hoveredObject.class === CCClasses.CCSketch || state.rubberBandRectangle) {
5913
- return;
5914
- }
5915
-
5916
- if (is2DConstraint(hoveredObject)) {
5917
- const constraintEntities = hoveredObject.members.entities.members.map(entity => entity.value);
5918
- set(state_ => {
5919
- const highlighted = state_.highlighted;
5920
- const highlightedConstraints = highlighted.filter(id => is2DConstraint(tree[id]) && id !== hoveredId);
5921
- return {
5922
- hovered: hoveredId,
5923
- highlighted: [...highlightedConstraints, hoveredId, ...constraintEntities]
5924
- };
5925
- });
5926
- } else {
5927
- const linkedConstraints = Object.values(tree).filter(obj => is2DConstraint(obj)).filter(obj => obj.members.entities.members.some(entity => entity.value === hoveredId)).map(obj => obj.id);
5928
- const constraintsToGeometry = {};
5929
- linkedConstraints.forEach(id => {
5930
- constraintsToGeometry[id] = hoveredId;
5931
- });
5932
- set(state_ => {
5933
- return {
5934
- hovered: hoveredId,
5935
- highlighted: [hoveredId, ...linkedConstraints],
5936
- constraintsToGeometry: _objectSpread$f(_objectSpread$f({}, state_.constraintsToGeometry), constraintsToGeometry)
5937
- };
5938
- });
5939
- }
5940
-
5941
- if (timerId) {
5942
- window.clearTimeout(timerId);
5943
- timerId = undefined;
5944
- }
5945
6013
  };
5946
6014
 
5947
6015
  const onPointerOut = e => {
5948
- const {
5949
- state,
5950
- set
5951
- } = getPlugin(drawingId, pluginId);
5952
6016
  const hoveredId = e.object.userData.objId;
5953
- const tree = getDrawing(drawingId).structure.tree;
5954
- const hoveredObject = tree[hoveredId];
5955
-
5956
- if (!hoveredObject || hoveredObject && hoveredObject.class === CCClasses.CCSketch || state.rubberBandRectangle) {
5957
- return;
5958
- }
5959
-
5960
- set(state_ => {
5961
- const highlighted = state_.highlighted;
5962
- const highlightedConstraints = highlighted.filter(id => is2DConstraint(tree[id]));
5963
- return {
5964
- hovered: state_.hovered === hoveredId ? UNDEFINEDID : state_.hovered,
5965
- highlighted: highlightedConstraints
5966
- };
5967
- });
5968
-
5969
- if (timerId) {
5970
- window.clearTimeout(timerId);
5971
- }
5972
-
5973
- timerId = window.setTimeout(() => {
5974
- set({
5975
- highlighted: []
5976
- });
5977
- }, 1000);
6017
+ unhover(drawingId, pluginId, hoveredId);
5978
6018
  e.stopPropagation();
5979
6019
  };
5980
6020
 
@@ -6073,9 +6113,9 @@ const snapDraggedPoints = (diff, drawingId) => {
6073
6113
  return snapResult;
6074
6114
  };
6075
6115
 
6076
- function ownKeys$e(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) { symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; }
6116
+ function ownKeys$g(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) { symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; }
6077
6117
 
6078
- function _objectSpread$e(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys$e(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys$e(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
6118
+ function _objectSpread$g(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys$g(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys$g(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
6079
6119
 
6080
6120
  const artifDelay = 16;
6081
6121
 
@@ -6262,21 +6302,7 @@ function Drag(drawingId, pluginId) {
6262
6302
  return;
6263
6303
  }
6264
6304
 
6265
- set(state => {
6266
- const curSelected = state.selected;
6267
-
6268
- if (curSelected.indexOf(pressedId) >= 0) {
6269
- const newSelected = curSelected.filter(id => id !== pressedId);
6270
- return {
6271
- selected: newSelected
6272
- };
6273
- } else {
6274
- curSelected.push(pressedId);
6275
- return {
6276
- selected: [...curSelected]
6277
- };
6278
- }
6279
- });
6305
+ select(drawingId, pluginId, pressedId);
6280
6306
  }
6281
6307
 
6282
6308
  clearIgnoreList();
@@ -6363,7 +6389,7 @@ function Drag(drawingId, pluginId) {
6363
6389
  name: HandlersList.DRAG,
6364
6390
  filter,
6365
6391
  onDestruct: destructor,
6366
- pointerHandlers: _objectSpread$e({
6392
+ pointerHandlers: _objectSpread$g({
6367
6393
  onPointerDown,
6368
6394
  onPointerUp,
6369
6395
  onPointerMove
@@ -6375,9 +6401,9 @@ function Drag(drawingId, pluginId) {
6375
6401
  };
6376
6402
  }
6377
6403
 
6378
- function ownKeys$d(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) { symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; }
6404
+ function ownKeys$f(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) { symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; }
6379
6405
 
6380
- function _objectSpread$d(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys$d(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys$d(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
6406
+ function _objectSpread$f(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys$f(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys$f(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
6381
6407
  function DrawPoint(drawingId, pluginId) {
6382
6408
  const {
6383
6409
  set
@@ -6446,8 +6472,8 @@ function DrawPoint(drawingId, pluginId) {
6446
6472
  set(state => {
6447
6473
  const tmpPoint = state.tmpObjects[tmpPointId];
6448
6474
  return {
6449
- tmpObjects: _objectSpread$d(_objectSpread$d({}, state.tmpObjects), {}, {
6450
- [tmpPointId]: _objectSpread$d(_objectSpread$d({}, tmpPoint), {}, {
6475
+ tmpObjects: _objectSpread$f(_objectSpread$f({}, state.tmpObjects), {}, {
6476
+ [tmpPointId]: _objectSpread$f(_objectSpread$f({}, tmpPoint), {}, {
6451
6477
  position: mousePos
6452
6478
  })
6453
6479
  })
@@ -6469,9 +6495,9 @@ function DrawPoint(drawingId, pluginId) {
6469
6495
  };
6470
6496
  }
6471
6497
 
6472
- function ownKeys$c(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) { symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; }
6498
+ function ownKeys$e(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) { symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; }
6473
6499
 
6474
- function _objectSpread$c(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys$c(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys$c(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
6500
+ function _objectSpread$e(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys$e(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys$e(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
6475
6501
  function DrawLine(drawingId, pluginId) {
6476
6502
  // Global hooks:
6477
6503
  const {
@@ -6557,7 +6583,7 @@ function DrawLine(drawingId, pluginId) {
6557
6583
  endPId: tmpEndP.id
6558
6584
  };
6559
6585
  return {
6560
- tmpObjects: _objectSpread$c(_objectSpread$c({}, state.tmpObjects), {}, {
6586
+ tmpObjects: _objectSpread$e(_objectSpread$e({}, state.tmpObjects), {}, {
6561
6587
  [tmpStartP.id]: tmpStartP,
6562
6588
  [tmpLine.id]: tmpLine
6563
6589
  })
@@ -6595,8 +6621,8 @@ function DrawLine(drawingId, pluginId) {
6595
6621
  const tmpStartP = state.tmpObjects[tmpStartPId];
6596
6622
  const tmpEndP = state.tmpObjects[tmpEndPId];
6597
6623
  return {
6598
- tmpObjects: _objectSpread$c(_objectSpread$c({}, state.tmpObjects), {}, {
6599
- [tmpStartPId]: _objectSpread$c(_objectSpread$c({}, tmpStartP), {}, {
6624
+ tmpObjects: _objectSpread$e(_objectSpread$e({}, state.tmpObjects), {}, {
6625
+ [tmpStartPId]: _objectSpread$e(_objectSpread$e({}, tmpStartP), {}, {
6600
6626
  position: tmpEndP.position.clone()
6601
6627
  })
6602
6628
  })
@@ -6618,8 +6644,8 @@ function DrawLine(drawingId, pluginId) {
6618
6644
  set(state => {
6619
6645
  const tmpEndP = state.tmpObjects[tmpEndPId];
6620
6646
  return {
6621
- tmpObjects: _objectSpread$c(_objectSpread$c({}, state.tmpObjects), {}, {
6622
- [tmpEndPId]: _objectSpread$c(_objectSpread$c({}, tmpEndP), {}, {
6647
+ tmpObjects: _objectSpread$e(_objectSpread$e({}, state.tmpObjects), {}, {
6648
+ [tmpEndPId]: _objectSpread$e(_objectSpread$e({}, tmpEndP), {}, {
6623
6649
  position: mousePos
6624
6650
  })
6625
6651
  })
@@ -6644,9 +6670,9 @@ function DrawLine(drawingId, pluginId) {
6644
6670
  };
6645
6671
  }
6646
6672
 
6647
- function ownKeys$b(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) { symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; }
6673
+ function ownKeys$d(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) { symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; }
6648
6674
 
6649
- function _objectSpread$b(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys$b(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys$b(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
6675
+ function _objectSpread$d(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys$d(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys$d(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
6650
6676
  function DrawRectangle(drawingId, pluginId) {
6651
6677
  // Global hooks:
6652
6678
  const {
@@ -6702,7 +6728,7 @@ function DrawRectangle(drawingId, pluginId) {
6702
6728
  set(state => {
6703
6729
  const tmpPoint11 = state.tmpObjects[tmpPoint11Id];
6704
6730
 
6705
- const tmpPoint00 = _objectSpread$b(_objectSpread$b({}, state.tmpObjects[tmpPoint00Id]), {}, {
6731
+ const tmpPoint00 = _objectSpread$d(_objectSpread$d({}, state.tmpObjects[tmpPoint00Id]), {}, {
6706
6732
  position: tmpPoint11.position.clone()
6707
6733
  });
6708
6734
 
@@ -6770,7 +6796,7 @@ function DrawRectangle(drawingId, pluginId) {
6770
6796
  endPId: tmpPoint11.id
6771
6797
  };
6772
6798
  return {
6773
- tmpObjects: _objectSpread$b(_objectSpread$b({}, state.tmpObjects), {}, {
6799
+ tmpObjects: _objectSpread$d(_objectSpread$d({}, state.tmpObjects), {}, {
6774
6800
  [tmpPoint00.id]: tmpPoint00,
6775
6801
  [tmpPoint01.id]: tmpPoint01,
6776
6802
  [tmpPoint10.id]: tmpPoint10,
@@ -6798,7 +6824,7 @@ function DrawRectangle(drawingId, pluginId) {
6798
6824
  const tmpPoint11 = state.tmpObjects[tmpPoint11Id];
6799
6825
  return {
6800
6826
  tmpObjects: {
6801
- [tmpPoint00Id]: _objectSpread$b(_objectSpread$b({}, tmpPoint00), {}, {
6827
+ [tmpPoint00Id]: _objectSpread$d(_objectSpread$d({}, tmpPoint00), {}, {
6802
6828
  position: tmpPoint11.position.clone()
6803
6829
  })
6804
6830
  }
@@ -6822,8 +6848,8 @@ function DrawRectangle(drawingId, pluginId) {
6822
6848
  if (additionIndex === 0) {
6823
6849
  const tmpPoint00 = state.tmpObjects[tmpPoint00Id];
6824
6850
  return {
6825
- tmpObjects: _objectSpread$b(_objectSpread$b({}, state.tmpObjects), {}, {
6826
- [tmpPoint00Id]: _objectSpread$b(_objectSpread$b({}, tmpPoint00), {}, {
6851
+ tmpObjects: _objectSpread$d(_objectSpread$d({}, state.tmpObjects), {}, {
6852
+ [tmpPoint00Id]: _objectSpread$d(_objectSpread$d({}, tmpPoint00), {}, {
6827
6853
  position: snappedPos
6828
6854
  })
6829
6855
  })
@@ -6834,14 +6860,14 @@ function DrawRectangle(drawingId, pluginId) {
6834
6860
  const tmpPoint10 = state.tmpObjects[tmpPoint10Id];
6835
6861
  const tmpPoint11 = state.tmpObjects[tmpPoint11Id];
6836
6862
  return {
6837
- tmpObjects: _objectSpread$b(_objectSpread$b({}, state.tmpObjects), {}, {
6838
- [tmpPoint01Id]: _objectSpread$b(_objectSpread$b({}, tmpPoint01), {}, {
6863
+ tmpObjects: _objectSpread$d(_objectSpread$d({}, state.tmpObjects), {}, {
6864
+ [tmpPoint01Id]: _objectSpread$d(_objectSpread$d({}, tmpPoint01), {}, {
6839
6865
  position: new THREE.Vector3(startPos.x, snappedPos.y, startPos.z)
6840
6866
  }),
6841
- [tmpPoint10Id]: _objectSpread$b(_objectSpread$b({}, tmpPoint10), {}, {
6867
+ [tmpPoint10Id]: _objectSpread$d(_objectSpread$d({}, tmpPoint10), {}, {
6842
6868
  position: new THREE.Vector3(snappedPos.x, startPos.y, startPos.z)
6843
6869
  }),
6844
- [tmpPoint11Id]: _objectSpread$b(_objectSpread$b({}, tmpPoint11), {}, {
6870
+ [tmpPoint11Id]: _objectSpread$d(_objectSpread$d({}, tmpPoint11), {}, {
6845
6871
  position: new THREE.Vector3(snappedPos.x, snappedPos.y, startPos.z)
6846
6872
  })
6847
6873
  })
@@ -6867,17 +6893,35 @@ function DrawRectangle(drawingId, pluginId) {
6867
6893
  };
6868
6894
  }
6869
6895
 
6896
+ let scale = 1;
6897
+ function setScale(newScale) {
6898
+ scale = newScale;
6899
+ }
6900
+ function getScale() {
6901
+ return scale;
6902
+ } // The hook sets scale vector to a refered object in useFrame
6903
+
6904
+ function useScale(getVector) {
6905
+ const ref = React__default.useRef();
6906
+ useFrame(args => {
6907
+ if (ref.current) {
6908
+ const newScale = getVector ? getVector(scale) : [scale, scale, scale];
6909
+ ref.current.scale.set(...newScale);
6910
+ }
6911
+ });
6912
+ return ref;
6913
+ }
6914
+
6870
6915
  const lineWidth = 0.2;
6871
6916
  const pointSize = 0.5;
6872
6917
  const arcWidth = 0.2;
6873
6918
  const radSegments = 32;
6874
- const tubeSegments = 6;
6875
- const cylGeom = new THREE.CylinderGeometry(1, 1, 1, 6);
6876
- const Line = ({
6919
+ const tubeSegments$1 = 6;
6920
+ const cylGeom$1 = new THREE.CylinderGeometry(1, 1, 1, 6);
6921
+ const Line$1 = ({
6877
6922
  start,
6878
6923
  end,
6879
6924
  width = lineWidth,
6880
- scale = 1,
6881
6925
  materialProps,
6882
6926
  meshProps
6883
6927
  }) => {
@@ -6891,24 +6935,26 @@ const Line = ({
6891
6935
  quaternion: new THREE.Quaternion().setFromUnitVectors(new THREE.Vector3(0, 1, 0), dir)
6892
6936
  };
6893
6937
  }, [start, end]);
6938
+ const ref = useScale(scale => [width * scale, start.distanceTo(end), width * scale]);
6894
6939
  return /*#__PURE__*/React__default.createElement("mesh", _extends({}, meshProps, {
6940
+ ref: ref,
6895
6941
  position: position,
6896
6942
  quaternion: quaternion,
6897
- geometry: cylGeom,
6898
- scale: [width * scale, start.distanceTo(end), width * scale]
6943
+ geometry: cylGeom$1
6899
6944
  }), /*#__PURE__*/React__default.createElement("meshBasicMaterial", materialProps));
6900
6945
  };
6901
- const Point = ({
6946
+ const Point$1 = ({
6902
6947
  position,
6903
6948
  size = pointSize,
6904
- scale = 1,
6905
6949
  materialProps,
6906
6950
  meshProps
6907
6951
  }) => {
6952
+ const ref = useScale(scale => [size * scale, size * scale, size * scale]);
6908
6953
  return /*#__PURE__*/React__default.createElement("mesh", _extends({}, meshProps, {
6909
- position: position
6954
+ position: position,
6955
+ ref: ref
6910
6956
  }), /*#__PURE__*/React__default.createElement("sphereGeometry", {
6911
- args: [size * scale, tubeSegments, tubeSegments]
6957
+ args: [1, tubeSegments$1, tubeSegments$1]
6912
6958
  }), /*#__PURE__*/React__default.createElement("meshBasicMaterial", materialProps));
6913
6959
  };
6914
6960
  function getArcAngles(params) {
@@ -6968,7 +7014,7 @@ const Arc = ({
6968
7014
  position: center,
6969
7015
  quaternion: quaternion
6970
7016
  }), /*#__PURE__*/React__default.createElement("torusGeometry", {
6971
- args: [radius, width * scale, tubeSegments, radSegments, thetaLength]
7017
+ args: [radius, width * scale, tubeSegments$1, radSegments, thetaLength]
6972
7018
  }), /*#__PURE__*/React__default.createElement("meshBasicMaterial", _extends({}, materialProps, {
6973
7019
  side: clockwise ? THREE.DoubleSide : THREE.FrontSide
6974
7020
  })));
@@ -6984,13 +7030,13 @@ const Circle = ({
6984
7030
  return /*#__PURE__*/React__default.createElement("mesh", _extends({}, meshProps, {
6985
7031
  position: center
6986
7032
  }), /*#__PURE__*/React__default.createElement("torusGeometry", {
6987
- args: [radius, width * scale, tubeSegments, radSegments]
7033
+ args: [radius, width * scale, tubeSegments$1, radSegments]
6988
7034
  }), /*#__PURE__*/React__default.createElement("meshBasicMaterial", materialProps));
6989
7035
  };
6990
7036
 
6991
- function ownKeys$a(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) { symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; }
7037
+ function ownKeys$c(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) { symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; }
6992
7038
 
6993
- function _objectSpread$a(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys$a(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys$a(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
7039
+ function _objectSpread$c(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys$c(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys$c(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
6994
7040
  function DrawArc(drawingId, pluginId, arcType) {
6995
7041
  // Global hooks:
6996
7042
  const {
@@ -7046,7 +7092,7 @@ function DrawArc(drawingId, pluginId, arcType) {
7046
7092
  additionIndex = 0;
7047
7093
  lastAddedEndPointId = UNDEFINEDID;
7048
7094
  set(state => {
7049
- const tmpStartP = _objectSpread$a(_objectSpread$a({}, state.tmpObjects[tmpStartPId]), {}, {
7095
+ const tmpStartP = _objectSpread$c(_objectSpread$c({}, state.tmpObjects[tmpStartPId]), {}, {
7050
7096
  position: lastMousePos.clone()
7051
7097
  });
7052
7098
 
@@ -7061,24 +7107,24 @@ function DrawArc(drawingId, pluginId, arcType) {
7061
7107
  set(state => {
7062
7108
  const tmpStartP = state.tmpObjects[tmpStartPId];
7063
7109
 
7064
- const tmpEndP = _objectSpread$a(_objectSpread$a({}, state.tmpObjects[tmpEndPId]), {}, {
7110
+ const tmpEndP = _objectSpread$c(_objectSpread$c({}, state.tmpObjects[tmpEndPId]), {}, {
7065
7111
  position: lastMousePos.clone()
7066
7112
  });
7067
7113
 
7068
7114
  const centerPos = calculateCenterPoint(tmpStartP.position, lastMousePos, lastMousePos);
7069
7115
 
7070
- const tmpCenterP = _objectSpread$a(_objectSpread$a({}, state.tmpObjects[tmpCenterPId]), {}, {
7116
+ const tmpCenterP = _objectSpread$c(_objectSpread$c({}, state.tmpObjects[tmpCenterPId]), {}, {
7071
7117
  position: centerPos ? centerPos : lastMousePos.clone()
7072
7118
  });
7073
7119
 
7074
- const tmpArc = _objectSpread$a(_objectSpread$a({}, state.tmpObjects[tmpArcId]), {}, {
7120
+ const tmpArc = _objectSpread$c(_objectSpread$c({}, state.tmpObjects[tmpArcId]), {}, {
7075
7121
  // In case centerPos couldn't be calculated, the arc should be drawn as a line
7076
7122
  drawAsLine: centerPos === undefined,
7077
7123
  clockwise: false
7078
7124
  });
7079
7125
 
7080
7126
  return {
7081
- tmpObjects: _objectSpread$a(_objectSpread$a({}, state.tmpObjects), {}, {
7127
+ tmpObjects: _objectSpread$c(_objectSpread$c({}, state.tmpObjects), {}, {
7082
7128
  [tmpEndP.id]: tmpEndP,
7083
7129
  [tmpCenterP.id]: tmpCenterP,
7084
7130
  [tmpArc.id]: tmpArc
@@ -7199,7 +7245,7 @@ function DrawArc(drawingId, pluginId, arcType) {
7199
7245
  clockwise: false
7200
7246
  };
7201
7247
  return {
7202
- tmpObjects: _objectSpread$a(_objectSpread$a({}, state.tmpObjects), {}, {
7248
+ tmpObjects: _objectSpread$c(_objectSpread$c({}, state.tmpObjects), {}, {
7203
7249
  [tmpEndP.id]: tmpEndP,
7204
7250
  [tmpCenterP.id]: tmpCenterP,
7205
7251
  [tmpArc.id]: tmpArc
@@ -7228,7 +7274,7 @@ function DrawArc(drawingId, pluginId, arcType) {
7228
7274
  clockwise: false
7229
7275
  };
7230
7276
  return {
7231
- tmpObjects: _objectSpread$a(_objectSpread$a({}, state.tmpObjects), {}, {
7277
+ tmpObjects: _objectSpread$c(_objectSpread$c({}, state.tmpObjects), {}, {
7232
7278
  [tmpCenterP.id]: tmpCenterP,
7233
7279
  [tmpArc.id]: tmpArc
7234
7280
  })
@@ -7286,11 +7332,11 @@ function DrawArc(drawingId, pluginId, arcType) {
7286
7332
  const tmpEndP = state.tmpObjects[tmpEndPId];
7287
7333
  const tmpCenterP = state.tmpObjects[tmpCenterPId];
7288
7334
  return {
7289
- tmpObjects: _objectSpread$a(_objectSpread$a({}, state.tmpObjects), {}, {
7290
- [tmpStartPId]: _objectSpread$a(_objectSpread$a({}, tmpStartP), {}, {
7335
+ tmpObjects: _objectSpread$c(_objectSpread$c({}, state.tmpObjects), {}, {
7336
+ [tmpStartPId]: _objectSpread$c(_objectSpread$c({}, tmpStartP), {}, {
7291
7337
  position: tmpEndP.position.clone()
7292
7338
  }),
7293
- [tmpCenterPId]: _objectSpread$a(_objectSpread$a({}, tmpCenterP), {}, {
7339
+ [tmpCenterPId]: _objectSpread$c(_objectSpread$c({}, tmpCenterP), {}, {
7294
7340
  position: tmpEndP.position.clone()
7295
7341
  })
7296
7342
  })
@@ -7314,8 +7360,8 @@ function DrawArc(drawingId, pluginId, arcType) {
7314
7360
  if (additionIndex === 0) {
7315
7361
  const tmpStartP = state.tmpObjects[tmpStartPId];
7316
7362
  return {
7317
- tmpObjects: _objectSpread$a(_objectSpread$a({}, state.tmpObjects), {}, {
7318
- [tmpStartPId]: _objectSpread$a(_objectSpread$a({}, tmpStartP), {}, {
7363
+ tmpObjects: _objectSpread$c(_objectSpread$c({}, state.tmpObjects), {}, {
7364
+ [tmpStartPId]: _objectSpread$c(_objectSpread$c({}, tmpStartP), {}, {
7319
7365
  position: lastMousePos.clone()
7320
7366
  })
7321
7367
  })
@@ -7327,14 +7373,14 @@ function DrawArc(drawingId, pluginId, arcType) {
7327
7373
  const tmpCenterP = state.tmpObjects[tmpCenterPId];
7328
7374
  const centerPos = calculateCenterPoint(tmpStartP.position, lastMousePos, lastMousePos);
7329
7375
  return {
7330
- tmpObjects: _objectSpread$a(_objectSpread$a({}, state.tmpObjects), {}, {
7331
- [tmpEndPId]: _objectSpread$a(_objectSpread$a({}, tmpEndP), {}, {
7376
+ tmpObjects: _objectSpread$c(_objectSpread$c({}, state.tmpObjects), {}, {
7377
+ [tmpEndPId]: _objectSpread$c(_objectSpread$c({}, tmpEndP), {}, {
7332
7378
  position: lastMousePos.clone()
7333
7379
  }),
7334
- [tmpCenterPId]: _objectSpread$a(_objectSpread$a({}, tmpCenterP), {}, {
7380
+ [tmpCenterPId]: _objectSpread$c(_objectSpread$c({}, tmpCenterP), {}, {
7335
7381
  position: centerPos ? centerPos : lastMousePos.clone()
7336
7382
  }),
7337
- [tmpArcId]: _objectSpread$a(_objectSpread$a({}, tmpArc), {}, {
7383
+ [tmpArcId]: _objectSpread$c(_objectSpread$c({}, tmpArc), {}, {
7338
7384
  // In case centerPos couldn't be calculated, the arc should be drawn as a line
7339
7385
  drawAsLine: centerPos === undefined,
7340
7386
  clockwise: false
@@ -7348,14 +7394,14 @@ function DrawArc(drawingId, pluginId, arcType) {
7348
7394
  const tmpCenterP = state.tmpObjects[tmpCenterPId];
7349
7395
  const centerPos = calculateCenterPoint(tmpStartP.position, tmpEndP.position, lastMousePos);
7350
7396
  return {
7351
- tmpObjects: _objectSpread$a(_objectSpread$a({}, state.tmpObjects), {}, {
7352
- [tmpEndPId]: _objectSpread$a(_objectSpread$a({}, tmpEndP), {}, {
7397
+ tmpObjects: _objectSpread$c(_objectSpread$c({}, state.tmpObjects), {}, {
7398
+ [tmpEndPId]: _objectSpread$c(_objectSpread$c({}, tmpEndP), {}, {
7353
7399
  position: arcType === HandlersList.DRAWARCTANGENT ? lastMousePos.clone() : tmpEndP.position
7354
7400
  }),
7355
- [tmpCenterPId]: _objectSpread$a(_objectSpread$a({}, tmpCenterP), {}, {
7401
+ [tmpCenterPId]: _objectSpread$c(_objectSpread$c({}, tmpCenterP), {}, {
7356
7402
  position: centerPos ? centerPos : lastMousePos.clone()
7357
7403
  }),
7358
- [tmpArcId]: _objectSpread$a(_objectSpread$a({}, tmpArc), {}, {
7404
+ [tmpArcId]: _objectSpread$c(_objectSpread$c({}, tmpArc), {}, {
7359
7405
  // In case centerPos couldn't be calculated, the arc should be drawn as a line
7360
7406
  drawAsLine: centerPos === undefined,
7361
7407
  clockwise: evaluateClockwise(tmpStartP.position, tmpEndP.position, lastMousePos)
@@ -7383,9 +7429,9 @@ function DrawArc(drawingId, pluginId, arcType) {
7383
7429
  };
7384
7430
  }
7385
7431
 
7386
- function ownKeys$9(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) { symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; }
7432
+ function ownKeys$b(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) { symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; }
7387
7433
 
7388
- function _objectSpread$9(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys$9(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys$9(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
7434
+ function _objectSpread$b(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys$b(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys$b(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
7389
7435
  function DrawCircle(drawingId, pluginId) {
7390
7436
  const {
7391
7437
  set
@@ -7432,7 +7478,7 @@ function DrawCircle(drawingId, pluginId) {
7432
7478
  } else {
7433
7479
  additionIndex = 0;
7434
7480
  set(state => {
7435
- const tmpCenterP = _objectSpread$9(_objectSpread$9({}, state.tmpObjects[tmpCenterPId]), {}, {
7481
+ const tmpCenterP = _objectSpread$b(_objectSpread$b({}, state.tmpObjects[tmpCenterPId]), {}, {
7436
7482
  position: lastMousePos.clone()
7437
7483
  });
7438
7484
 
@@ -7466,7 +7512,7 @@ function DrawCircle(drawingId, pluginId) {
7466
7512
  radius: 0.001
7467
7513
  };
7468
7514
  return {
7469
- tmpObjects: _objectSpread$9(_objectSpread$9({}, state.tmpObjects), {}, {
7515
+ tmpObjects: _objectSpread$b(_objectSpread$b({}, state.tmpObjects), {}, {
7470
7516
  [tmpCenterP.id]: tmpCenterP,
7471
7517
  [tmpCircle.id]: tmpCircle
7472
7518
  })
@@ -7487,7 +7533,7 @@ function DrawCircle(drawingId, pluginId) {
7487
7533
  const tmpCenterP = state.tmpObjects[tmpCenterPId];
7488
7534
  return {
7489
7535
  tmpObjects: {
7490
- [tmpCenterPId]: _objectSpread$9(_objectSpread$9({}, tmpCenterP), {}, {
7536
+ [tmpCenterPId]: _objectSpread$b(_objectSpread$b({}, tmpCenterP), {}, {
7491
7537
  position: e.point.clone().applyMatrix4(getGlobalToLocalMatrix(drawingId, sketchId))
7492
7538
  })
7493
7539
  }
@@ -7511,8 +7557,8 @@ function DrawCircle(drawingId, pluginId) {
7511
7557
  if (additionIndex === 0) {
7512
7558
  const tmpCenterP = state.tmpObjects[tmpCenterPId];
7513
7559
  return {
7514
- tmpObjects: _objectSpread$9(_objectSpread$9({}, state.tmpObjects), {}, {
7515
- [tmpCenterPId]: _objectSpread$9(_objectSpread$9({}, tmpCenterP), {}, {
7560
+ tmpObjects: _objectSpread$b(_objectSpread$b({}, state.tmpObjects), {}, {
7561
+ [tmpCenterPId]: _objectSpread$b(_objectSpread$b({}, tmpCenterP), {}, {
7516
7562
  position: snappedPos || localPos
7517
7563
  })
7518
7564
  })
@@ -7521,8 +7567,8 @@ function DrawCircle(drawingId, pluginId) {
7521
7567
  const tmpCenterP = state.tmpObjects[tmpCenterPId];
7522
7568
  const tmpCircle = state.tmpObjects[tmpCircleId];
7523
7569
  return {
7524
- tmpObjects: _objectSpread$9(_objectSpread$9({}, state.tmpObjects), {}, {
7525
- [tmpCircleId]: _objectSpread$9(_objectSpread$9({}, tmpCircle), {}, {
7570
+ tmpObjects: _objectSpread$b(_objectSpread$b({}, state.tmpObjects), {}, {
7571
+ [tmpCircleId]: _objectSpread$b(_objectSpread$b({}, tmpCircle), {}, {
7526
7572
  radius: Math.max(tmpCenterP.position.distanceTo(localPos), 0.001)
7527
7573
  })
7528
7574
  })
@@ -8020,9 +8066,9 @@ function recognizeFilletByArc(object, tree, sketchId) {
8020
8066
  };
8021
8067
  }
8022
8068
 
8023
- function ownKeys$8(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) { symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; }
8069
+ function ownKeys$a(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) { symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; }
8024
8070
 
8025
- function _objectSpread$8(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys$8(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys$8(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
8071
+ function _objectSpread$a(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys$a(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys$a(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
8026
8072
  function Fillet(drawingId, pluginId) {
8027
8073
  const actions = getDrawing(drawingId).api;
8028
8074
  const plugin = getPlugin(drawingId, pluginId);
@@ -8171,7 +8217,7 @@ function Fillet(drawingId, pluginId) {
8171
8217
  return;
8172
8218
  }
8173
8219
 
8174
- ccAPI.sketcher.createFillet(drawingId, sketchId, data.info.lines.map(line => line.id), data.info.lineStarts.map(lineStart => lineStart.id), data.info.incidence, data.info.control, data.params.start, getArcAngles(_objectSpread$8(_objectSpread$8({}, data.params), {}, {
8220
+ ccAPI.sketcher.createFillet(drawingId, sketchId, data.info.lines.map(line => line.id), data.info.lineStarts.map(lineStart => lineStart.id), data.info.incidence, data.info.control, data.params.start, getArcAngles(_objectSpread$a(_objectSpread$a({}, data.params), {}, {
8175
8221
  radius: 1
8176
8222
  })).mid, data.params.end);
8177
8223
  set({
@@ -8267,6 +8313,32 @@ function Trim(drawingId, pluginId) {
8267
8313
  };
8268
8314
  }
8269
8315
 
8316
+ function UseRef(drawingId, pluginId) {
8317
+ // UseRef shouldn't work with any of sketch objects
8318
+ const filter = object => false;
8319
+
8320
+ const filterSel = (scope, data) => lineSegmentsFilter(scope, data) || loopFilter(scope, data) || pointFilter(scope, data);
8321
+
8322
+ let remove = undefined;
8323
+
8324
+ const constructor = () => {
8325
+ const selApi = getDrawing(drawingId).api.selection;
8326
+ remove = selApi.createSelector('UseRef', filterSel, true);
8327
+ };
8328
+
8329
+ const destructor = () => {
8330
+ remove && remove();
8331
+ };
8332
+
8333
+ return {
8334
+ name: HandlersList.USEREF,
8335
+ filter,
8336
+ onConstruct: constructor,
8337
+ onDestruct: destructor,
8338
+ pointerHandlers: {}
8339
+ };
8340
+ }
8341
+
8270
8342
  const Handlers$1 = {
8271
8343
  [HandlersList.CREATEANGLE]: CreateAngle,
8272
8344
  [HandlersList.DRAG]: Drag,
@@ -8276,6 +8348,7 @@ const Handlers$1 = {
8276
8348
  [HandlersList.DRAWRECTANGLE]: DrawRectangle,
8277
8349
  [HandlersList.FILLET]: Fillet,
8278
8350
  [HandlersList.TRIM]: Trim,
8351
+ [HandlersList.USEREF]: UseRef,
8279
8352
  [HandlersList.DRAWARCCENTER]: (drawingId, pluginId) => DrawArc(drawingId, pluginId, HandlersList.DRAWARCCENTER),
8280
8353
  [HandlersList.DRAWARCMIDDLE]: (drawingId, pluginId) => DrawArc(drawingId, pluginId, HandlersList.DRAWARCMIDDLE),
8281
8354
  [HandlersList.DRAWARCTANGENT]: (drawingId, pluginId) => DrawArc(drawingId, pluginId, HandlersList.DRAWARCTANGENT)
@@ -8736,10 +8809,10 @@ const resources = {
8736
8809
  [HandlersList.DRAWCIRCLE]: img$y,
8737
8810
  [HandlersList.FILLET]: img$x,
8738
8811
  [HandlersList.TRIM]: img$w,
8812
+ [HandlersList.USEREF]: img$s,
8739
8813
  [Patterns.RECTANGULAR]: img$v,
8740
8814
  [Patterns.CIRCULAR]: img$u,
8741
- [Patterns.MIRROR]: img$t,
8742
- ['useRef']: img$s
8815
+ [Patterns.MIRROR]: img$t
8743
8816
  };
8744
8817
  const textures = {};
8745
8818
  const textureLoader = new THREE.TextureLoader();
@@ -8827,11 +8900,14 @@ const useGeomParams = objId => {
8827
8900
 
8828
8901
  if (isHovered || isSelected || isHighlighted) {
8829
8902
  renderOrder_ += 1;
8830
- }
8903
+ } // TODO: returning isHovered and isSelected is a workaround for changing scale of the hovered point. (return scale coef instead?)
8904
+
8831
8905
 
8832
8906
  return {
8833
8907
  renderOrder: renderOrder_,
8834
- polygonOffsetUnits: offsetUnits
8908
+ polygonOffsetUnits: offsetUnits,
8909
+ isHovered,
8910
+ isSelected
8835
8911
  };
8836
8912
  };
8837
8913
 
@@ -8986,6 +9062,17 @@ const useUserData = objId => {
8986
9062
  return React__default.useMemo(() => ({
8987
9063
  objId
8988
9064
  }), [objId]);
9065
+ }; // Fix for interaction until drei support undefined as pointer handlers
9066
+
9067
+ const defaultHandlers = {
9068
+ onPointerOver: () => null,
9069
+ // onPointerEnter: () => null,
9070
+ onPointerDown: () => null,
9071
+ onPointerMove: () => null,
9072
+ onPointerUp: () => null,
9073
+ onPointerCancel: () => null,
9074
+ onPointerOut: () => null // onPointerLeave: () => null,
9075
+
8989
9076
  };
8990
9077
  const useHandlersAndColor = (drawingId, objId) => {
8991
9078
  const activeSelection = useDrawing(drawingId, d => d.selection.active);
@@ -8994,7 +9081,7 @@ const useHandlersAndColor = (drawingId, objId) => {
8994
9081
  const handlers = activeSelection ? globalSelection.handlers : sketchHandlers;
8995
9082
  const color = useColor(objId, globalSelection.isHovered);
8996
9083
  return React__default.useMemo(() => ({
8997
- handlers,
9084
+ handlers: handlers || defaultHandlers,
8998
9085
  color
8999
9086
  }), [handlers, color]);
9000
9087
  };
@@ -9210,30 +9297,210 @@ class InfinityPlane extends THREE.Object3D {
9210
9297
 
9211
9298
  }
9212
9299
 
9213
- function ownKeys$7(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) { symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; }
9300
+ // InstancedMesh from three.js use the single mesh but applies different transformations to different instances of the mesh
9301
+ // which allows to render multiple objects in the same render call, so we have separate render call for each mesh
9302
+ // (in our case there're 2 render calls: one for Boxes and another for Spheres).
9214
9303
 
9215
- function _objectSpread$7(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys$7(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys$7(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
9216
- /*
9217
- * !polygonOffset!
9218
- * For correct drawing of objects that lie in the same plane, polygonOffset is used.
9219
- * https://www.khronos.org/registry/OpenGL-Refpages/gl4/html/glPolygonOffset.xhtml
9220
- * offset = factor * DZ + r * units
9221
- * Where DZ is a measurement of the change in depth relative to the screen area of the polygon,
9222
- * and r is an implementation-specific value to create a constant depth offset.
9223
- .
9224
- * The offset is added before the depth test is performed and before the value is written into the depth buffer.
9225
- * factor parameter is redundant for this purpose, so only units parameter is used.
9304
+ const material = new THREE.MeshBasicMaterial();
9305
+ const tubeSegments = 6;
9306
+ const cylGeom = new THREE.CylinderGeometry(1, 1, 1, tubeSegments);
9307
+ const cylMesh = new THREE.Mesh(cylGeom, material);
9308
+ const widthSegments = 12;
9309
+ const heightSegments = 12;
9310
+ const sphereGeom = new THREE.SphereGeometry(1, widthSegments, heightSegments);
9311
+ const sphereMesh = new THREE.Mesh(sphereGeom, material); // We use context to store "mocked" objects.
9312
+
9313
+ const MeshContext = /*#__PURE__*/React__default.createContext({
9314
+ Cylinder: null,
9315
+ Sphere: null
9316
+ });
9317
+
9318
+ const ContextWrapper = ({
9319
+ cylinder,
9320
+ sphere,
9321
+ children
9322
+ }) => {
9323
+ const contextVal = React__default.useMemo(() => {
9324
+ return {
9325
+ Cylinder: cylinder,
9326
+ Sphere: sphere
9327
+ };
9328
+ }, [cylinder, sphere]);
9329
+ return /*#__PURE__*/React__default.createElement(MeshContext.Provider, {
9330
+ value: contextVal
9331
+ }, children);
9332
+ };
9333
+ /**
9334
+ * Component which implements InstancedMesh from three.js.
9335
+ * Merged component from drei takes globaly created meshes and then passes corresponding "mocked" components via function props (Box and Sphere) to children.
9336
+ * "mocked" components are used for saying drei where to draw instances.
9226
9337
  */
9227
9338
 
9228
- extend({
9229
- InfinityPlane
9230
- });
9231
- const hoverZone = 0.6;
9232
9339
 
9233
- const CCLine = props => {
9340
+ const MergedWrapper = ({
9341
+ children
9342
+ }) => {
9343
+ return (
9344
+ /*#__PURE__*/
9345
+ // Default raycast of merged should be turned off, because custom raycast is used in primitivesMerged
9346
+ React__default.createElement(Merged, {
9347
+ meshes: [cylMesh, sphereMesh],
9348
+ limit: 10000,
9349
+ raycast: null
9350
+ }, (Cylinder, Sphere) => /*#__PURE__*/React__default.createElement(ContextWrapper, {
9351
+ cylinder: Cylinder,
9352
+ sphere: Sphere
9353
+ }, children))
9354
+ );
9355
+ };
9356
+
9357
+ const lineStart = new THREE.Vector3();
9358
+ const lineEnd = new THREE.Vector3();
9359
+ const pointOnRay = new THREE.Vector3();
9360
+ const lineCoef = 1.2;
9361
+
9362
+ function getParentSketch(child) {
9363
+ const parent = child.parent;
9364
+ if (!parent) return null;
9365
+ if (parent.name === 'sketch') return parent;
9366
+ return getParentSketch(parent);
9367
+ }
9368
+
9369
+ const Line = ({
9370
+ start,
9371
+ end,
9372
+ width = lineWidth,
9373
+ materialProps,
9374
+ meshProps,
9375
+ notInteractive,
9376
+ scalePlus
9377
+ }) => {
9234
9378
  const {
9235
- drawingId,
9236
- pluginId
9379
+ position,
9380
+ quaternion
9381
+ } = React__default.useMemo(() => {
9382
+ const dir = end.clone().sub(start).normalize();
9383
+ return {
9384
+ position: new THREE.Vector3().lerpVectors(start, end, 0.5),
9385
+ quaternion: new THREE.Quaternion().setFromUnitVectors(new THREE.Vector3(0, 1, 0), dir)
9386
+ };
9387
+ }, [start, end]); // TODO: make lineRaycast global function
9388
+
9389
+ const lineRaycast = React__default.useCallback(function (raycaster, intersects) {
9390
+ const sketchGroup = getParentSketch(this);
9391
+
9392
+ if (sketchGroup === null || (sketchGroup == null ? void 0 : sketchGroup.name) !== 'sketch') {
9393
+ console.warn('Line is not a child of sketch group');
9394
+ return;
9395
+ }
9396
+
9397
+ lineStart.copy(start);
9398
+ lineEnd.copy(end);
9399
+ lineStart.applyMatrix4(sketchGroup.matrixWorld);
9400
+ lineEnd.applyMatrix4(sketchGroup.matrixWorld);
9401
+ const dist = Math.sqrt(raycaster.ray.distanceSqToSegment(lineStart, lineEnd, pointOnRay));
9402
+ const sketchScale = getScale();
9403
+
9404
+ if (dist < lineCoef * sketchScale) {
9405
+ intersects.push({
9406
+ distance: dist,
9407
+ point: pointOnRay,
9408
+ face: null,
9409
+ object: this
9410
+ });
9411
+ }
9412
+ }, [start, end]);
9413
+ const {
9414
+ Cylinder
9415
+ } = React__default.useContext(MeshContext);
9416
+ const ref = useScale(scale => {
9417
+ const scale_ = scalePlus ? scale + 0.01 : scale;
9418
+ return [width * scale_, start.distanceTo(end), width * scale_];
9419
+ }); // We need initial scale to remove flickering of recently created objects
9420
+
9421
+ const initialScale = React__default.useMemo(() => {
9422
+ const scale = getScale();
9423
+ return [width * scale, start.distanceTo(end), width * scale]; // eslint-disable-next-line react-hooks/exhaustive-deps
9424
+ }, []);
9425
+ return /*#__PURE__*/React__default.createElement(Cylinder, _extends({
9426
+ ref: ref,
9427
+ scale: initialScale
9428
+ }, materialProps, meshProps, {
9429
+ position: position,
9430
+ quaternion: quaternion,
9431
+ raycast: notInteractive ? null : lineRaycast
9432
+ }));
9433
+ };
9434
+
9435
+ const pointPos = new THREE.Vector3();
9436
+ const pointCoef = 1.3; // Coefficient for increased interaction area
9437
+
9438
+ function pointRaycast(raycaster, intersects) {
9439
+ this.getWorldPosition(pointPos);
9440
+ const dist = raycaster.ray.distanceToPoint(pointPos);
9441
+ const sketchScale = getScale();
9442
+
9443
+ if (dist < pointCoef * sketchScale) {
9444
+ intersects.push({
9445
+ distance: dist,
9446
+ point: pointPos.clone(),
9447
+ face: null,
9448
+ object: this
9449
+ });
9450
+ }
9451
+ }
9452
+
9453
+ const Point = ({
9454
+ position,
9455
+ size = pointSize,
9456
+ materialProps,
9457
+ meshProps,
9458
+ scalePlus
9459
+ }) => {
9460
+ const {
9461
+ Sphere
9462
+ } = React__default.useContext(MeshContext);
9463
+ const ref = useScale(scale => {
9464
+ const scale_ = scalePlus ? scale + 0.01 : scale;
9465
+ return [size * scale_, size * scale_, size * scale_];
9466
+ }); // We need initial scale to remove flickering of recently created objects
9467
+
9468
+ const initialScale = React__default.useMemo(() => {
9469
+ const scale = getScale();
9470
+ return [size * scale, size * scale, size * scale]; // eslint-disable-next-line react-hooks/exhaustive-deps
9471
+ }, []);
9472
+ return /*#__PURE__*/React__default.createElement(Sphere, _extends({
9473
+ scale: initialScale
9474
+ }, materialProps, meshProps, {
9475
+ position: position,
9476
+ ref: ref,
9477
+ raycast: pointRaycast
9478
+ }));
9479
+ };
9480
+
9481
+ function ownKeys$9(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) { symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; }
9482
+
9483
+ function _objectSpread$9(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys$9(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys$9(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
9484
+ /*
9485
+ * !polygonOffset!
9486
+ * For correct drawing of objects that lie in the same plane, polygonOffset is used.
9487
+ * https://www.khronos.org/registry/OpenGL-Refpages/gl4/html/glPolygonOffset.xhtml
9488
+ * offset = factor * DZ + r * units
9489
+ * Where DZ is a measurement of the change in depth relative to the screen area of the polygon,
9490
+ * and r is an implementation-specific value to create a constant depth offset.
9491
+ * The offset is added before the depth test is performed and before the value is written into the depth buffer.
9492
+ *
9493
+ * Factor parameter is redundant for this purpose, so only units parameter is used.
9494
+ */
9495
+
9496
+ extend({
9497
+ InfinityPlane
9498
+ });
9499
+ const hoverZone = 0.6;
9500
+
9501
+ const CCLine = props => {
9502
+ const {
9503
+ drawingId
9237
9504
  } = React__default.useContext(ViewContext);
9238
9505
  const {
9239
9506
  objId
@@ -9242,8 +9509,7 @@ const CCLine = props => {
9242
9509
  const {
9243
9510
  handlers,
9244
9511
  color
9245
- } = useHandlersAndColor(drawingId, objId);
9246
- const scale = useSketchState(drawingId, pluginId, state => state.scale); // TODO: put useUserData into useHandlersAndColor ?
9512
+ } = useHandlersAndColor(drawingId, objId); // TODO: put useUserData into useHandlersAndColor ?
9247
9513
 
9248
9514
  const userData = useUserData(objId);
9249
9515
  const point1 = useDrawing(drawingId, drawing => drawing.structure.tree[line.children[0]]);
@@ -9252,34 +9518,24 @@ const CCLine = props => {
9252
9518
  const end = convertToVector(point2.members.pos);
9253
9519
  const {
9254
9520
  renderOrder,
9255
- polygonOffsetUnits
9521
+ polygonOffsetUnits,
9522
+ isHovered,
9523
+ isSelected
9256
9524
  } = useGeomParams(objId);
9257
9525
  return /*#__PURE__*/React__default.createElement(React__default.Fragment, null, /*#__PURE__*/React__default.createElement(Line, {
9258
9526
  start: start,
9259
9527
  end: end,
9260
- scale: scale,
9261
- meshProps: {
9262
- renderOrder
9263
- },
9264
- materialProps: {
9265
- side: THREE.DoubleSide,
9266
- polygonOffset: true,
9267
- polygonOffsetUnits: polygonOffsetUnits,
9268
- color
9269
- }
9270
- }), /*#__PURE__*/React__default.createElement(Line, {
9271
- start: start,
9272
- end: end,
9273
- scale: scale,
9274
- width: lineWidth + hoverZone,
9275
- meshProps: _objectSpread$7(_objectSpread$7({
9528
+ scalePlus: isHovered || isSelected,
9529
+ meshProps: _objectSpread$9(_objectSpread$9({
9276
9530
  renderOrder
9277
9531
  }, handlers), {}, {
9278
9532
  userData
9279
9533
  }),
9280
9534
  materialProps: {
9281
- transparent: true,
9282
- opacity: 0
9535
+ side: THREE.DoubleSide,
9536
+ polygonOffset: true,
9537
+ polygonOffsetUnits: polygonOffsetUnits,
9538
+ color: numberToHexColor(color)
9283
9539
  }
9284
9540
  }), /*#__PURE__*/React__default.createElement(CCPoint, {
9285
9541
  key: point1.id,
@@ -9292,8 +9548,7 @@ const CCLine = props => {
9292
9548
 
9293
9549
  const CCPoint = props => {
9294
9550
  const {
9295
- drawingId,
9296
- pluginId
9551
+ drawingId
9297
9552
  } = React__default.useContext(ViewContext);
9298
9553
  const {
9299
9554
  objId
@@ -9306,40 +9561,33 @@ const CCPoint = props => {
9306
9561
  const userData = useUserData(objId);
9307
9562
  const {
9308
9563
  renderOrder,
9309
- polygonOffsetUnits
9564
+ polygonOffsetUnits,
9565
+ isHovered,
9566
+ isSelected
9310
9567
  } = useGeomParams(objId);
9311
9568
  const position = convertToVector(point.members.pos);
9312
- const scale = useSketchState(drawingId, pluginId, state => state.scale);
9313
9569
  React__default.useEffect(() => {
9314
9570
  setSnapToPoint(objId, new THREE.Vector3(position.x, position.y, position.z));
9315
9571
  return () => deleteSnapToPoint(objId);
9316
9572
  }, [objId, position.x, position.y, position.z]);
9317
- return /*#__PURE__*/React__default.createElement(React__default.Fragment, null, /*#__PURE__*/React__default.createElement(Point, {
9318
- position: position,
9319
- scale: scale,
9320
- meshProps: {
9573
+ return /*#__PURE__*/React__default.createElement(Point, {
9574
+ position: position // It's not possible to change polygonOffset in drei/Merged component,
9575
+ // so we have to increase size of hovered or selected point to make the point not occluded buy other ones
9576
+ ,
9577
+ scalePlus: isHovered || isSelected,
9578
+ meshProps: _objectSpread$9(_objectSpread$9({
9321
9579
  renderOrder
9322
- },
9580
+ }, handlers), {}, {
9581
+ userData
9582
+ }),
9323
9583
  materialProps: {
9324
9584
  side: THREE.DoubleSide,
9325
9585
  polygonOffset: true,
9326
9586
  polygonOffsetUnits: polygonOffsetUnits,
9327
9587
  // Put hovered point upper then not hovered (check comment in the beginnig of this file about polygonOffset).
9328
- color: color
9588
+ color: numberToHexColor(color)
9329
9589
  }
9330
- }), /*#__PURE__*/React__default.createElement(Point, {
9331
- position: position,
9332
- scale: scale,
9333
- size: pointSize + hoverZone,
9334
- meshProps: _objectSpread$7({
9335
- userData,
9336
- renderOrder
9337
- }, handlers),
9338
- materialProps: {
9339
- transparent: true,
9340
- opacity: 0
9341
- }
9342
- }));
9590
+ });
9343
9591
  };
9344
9592
 
9345
9593
  const CCArc = props => {
@@ -9364,7 +9612,6 @@ const CCArc = props => {
9364
9612
  const point = [p1, p2, p3].find(p => p.name === pointName);
9365
9613
  return convertToVector(point.members.pos);
9366
9614
  }, [p1, p2, p3]);
9367
- const scale = useSketchState(drawingId, pluginId, state => state.scale);
9368
9615
  const startPoint = React__default.useMemo(() => getArcPointPos('startPoint'), [getArcPointPos]);
9369
9616
  const endPoint = React__default.useMemo(() => getArcPointPos('endPoint'), [getArcPointPos]);
9370
9617
  const centerPoint = React__default.useMemo(() => getArcPointPos('center'), [getArcPointPos]);
@@ -9373,36 +9620,23 @@ const CCArc = props => {
9373
9620
  renderOrder,
9374
9621
  polygonOffsetUnits
9375
9622
  } = useGeomParams(objId);
9623
+ const scale = useSketchState(drawingId, pluginId, state => state.scale);
9376
9624
  return /*#__PURE__*/React__default.createElement(React__default.Fragment, null, /*#__PURE__*/React__default.createElement(Arc, {
9377
9625
  start: startPoint,
9378
9626
  end: endPoint,
9379
9627
  center: centerPoint,
9380
- scale: scale,
9381
9628
  clockwise: clockwise,
9382
- meshProps: {
9383
- renderOrder
9384
- },
9629
+ meshProps: _objectSpread$9({
9630
+ renderOrder,
9631
+ userData
9632
+ }, handlers),
9385
9633
  materialProps: {
9386
9634
  side: THREE.DoubleSide,
9387
9635
  polygonOffset: true,
9388
9636
  polygonOffsetUnits: polygonOffsetUnits,
9389
9637
  color: color
9390
- }
9391
- }), /*#__PURE__*/React__default.createElement(Arc, {
9392
- start: startPoint,
9393
- end: endPoint,
9394
- center: centerPoint,
9395
- scale: scale,
9396
- clockwise: clockwise,
9397
- width: arcWidth + hoverZone,
9398
- meshProps: _objectSpread$7({
9399
- renderOrder,
9400
- userData
9401
- }, handlers),
9402
- materialProps: {
9403
- transparent: true,
9404
- opacity: 0
9405
- }
9638
+ },
9639
+ scale: scale
9406
9640
  }), arc.children.map(childId => /*#__PURE__*/React__default.createElement(CCPoint, {
9407
9641
  key: childId,
9408
9642
  objId: childId
@@ -9449,7 +9683,7 @@ const CCCircle = props => {
9449
9683
  radius: radius,
9450
9684
  scale: scale,
9451
9685
  width: arcWidth + hoverZone,
9452
- meshProps: _objectSpread$7(_objectSpread$7({}, handlers), {}, {
9686
+ meshProps: _objectSpread$9(_objectSpread$9({}, handlers), {}, {
9453
9687
  renderOrder,
9454
9688
  userData
9455
9689
  }),
@@ -9528,7 +9762,7 @@ const SketchPlane = ({
9528
9762
  objId
9529
9763
  }
9530
9764
  })), /*#__PURE__*/React__default.createElement("gridHelper", {
9531
- args: [step * linesCount, linesCount, 0x000000, 0x333333],
9765
+ args: [step * linesCount, linesCount, 0x000000, 0x888888],
9532
9766
  quaternion: planeQuaternion,
9533
9767
  onUpdate: update
9534
9768
  }));
@@ -9603,10 +9837,11 @@ const Sketch = ({
9603
9837
  drawnObjectsRef
9604
9838
  });
9605
9839
  }, [set]);
9606
- return /*#__PURE__*/React__default.createElement("group", null, isActive && /*#__PURE__*/React__default.createElement(SketchPlane, {
9840
+ return /*#__PURE__*/React__default.createElement(MergedWrapper, null, isActive && /*#__PURE__*/React__default.createElement(SketchPlane, {
9607
9841
  objId: objId
9608
9842
  }), drawnObjects && /*#__PURE__*/React__default.createElement("group", {
9609
- ref: drawnObjectsRef
9843
+ ref: drawnObjectsRef,
9844
+ name: "sketch"
9610
9845
  }, drawnObjects, isActive && containerIds && containerIds.length === 0 && /*#__PURE__*/React__default.createElement(Constraints$2, {
9611
9846
  sketchId: objId
9612
9847
  })));
@@ -9641,10 +9876,8 @@ const TmpPoint = props => {
9641
9876
  } = React__default.useContext(ViewContext);
9642
9877
  const point = useSketchState(drawingId, pluginId, state => state.tmpObjects[props.objId]);
9643
9878
  const color = getColor$1(point.class);
9644
- const scale = useSketchState(drawingId, pluginId, state => state.scale);
9645
- return /*#__PURE__*/React__default.createElement(Point, {
9879
+ return /*#__PURE__*/React__default.createElement(Point$1, {
9646
9880
  position: point.position,
9647
- scale: scale,
9648
9881
  materialProps: {
9649
9882
  side: THREE.DoubleSide,
9650
9883
  polygonOffset: true,
@@ -9661,13 +9894,11 @@ const TmpLine = props => {
9661
9894
  } = React__default.useContext(ViewContext);
9662
9895
  const line = useSketchState(drawingId, pluginId, state => state.tmpObjects[props.objId]);
9663
9896
  const color = getColor$1(line.class);
9664
- const scale = useSketchState(drawingId, pluginId, state => state.scale);
9665
9897
  const start = useSketchState(drawingId, pluginId, state => state.tmpObjects[line.startPId]).position;
9666
9898
  const end = useSketchState(drawingId, pluginId, state => state.tmpObjects[line.endPId]).position;
9667
- return /*#__PURE__*/React__default.createElement(Line, {
9899
+ return /*#__PURE__*/React__default.createElement(Line$1, {
9668
9900
  start: start,
9669
9901
  end: end,
9670
- scale: scale,
9671
9902
  materialProps: {
9672
9903
  color
9673
9904
  }
@@ -9688,10 +9919,9 @@ const TmpArc = props => {
9688
9919
  const end = useSketchState(drawingId, pluginId, state => state.tmpObjects[arc.endPId]).position;
9689
9920
 
9690
9921
  if (arc.drawAsLine) {
9691
- return /*#__PURE__*/React__default.createElement(Line, {
9922
+ return /*#__PURE__*/React__default.createElement(Line$1, {
9692
9923
  start: start,
9693
9924
  end: end,
9694
- scale: scale,
9695
9925
  materialProps: {
9696
9926
  color: getColor$1(CCClasses.CCLine)
9697
9927
  }
@@ -9860,6 +10090,7 @@ const RubberBandRectangle = () => {
9860
10090
  function useSetScale(drawingId, pluginId) {
9861
10091
  useFrame(args => {
9862
10092
  const plugin = getPlugin(drawingId, pluginId);
10093
+ if (!plugin) return;
9863
10094
  const state = plugin.state;
9864
10095
  const sketchObj = getDrawing(drawingId).structure.tree[plugin.objectId];
9865
10096
  const sketchMatrix = MathUtils.convertToMatrix4(sketchObj.coordinateSystem);
@@ -9873,7 +10104,9 @@ function useSetScale(drawingId, pluginId) {
9873
10104
  plugin.set({
9874
10105
  step: newStep,
9875
10106
  scale: newScale
9876
- });
10107
+ }); // Old way to set scale, needed for circles. (Should be remove when circles will be implemented via Merged component)
10108
+
10109
+ setScale(newScale); // More efficient way to set scale, used buy lines and points.
9877
10110
  }
9878
10111
  });
9879
10112
  } // Turn off all handlers and hide sketch selection if global selection is active
@@ -9888,7 +10121,7 @@ function useHandleGSelection(drawingId, pluginId, activeHandler) {
9888
10121
  const prevSelected = React__default.useRef([]);
9889
10122
  React__default.useEffect(() => {
9890
10123
  // Disable all handlers if global selection is active
9891
- if (activeSelection && !prevHandler.current) {
10124
+ if (activeSelection && activeSelection !== 'UseRef' && !prevHandler.current) {
9892
10125
  prevHandler.current = activeHandler;
9893
10126
  prevSelected.current = getSketchState(drawingId, pluginId).selected;
9894
10127
  set({
@@ -9905,6 +10138,22 @@ function useHandleGSelection(drawingId, pluginId, activeHandler) {
9905
10138
  }, [drawingId, pluginId, activeSelection, activeHandler, set]);
9906
10139
  }
9907
10140
 
10141
+ function useUseRef(drawingId, sketchId) {
10142
+ const itemsUseRef = useDrawing(drawingId, d => {
10143
+ var _d$selection$refs$Use;
10144
+
10145
+ return (_d$selection$refs$Use = d.selection.refs['UseRef']) == null ? void 0 : _d$selection$refs$Use.items;
10146
+ });
10147
+ React__default.useEffect(() => {
10148
+ if (itemsUseRef && itemsUseRef.length > 0) {
10149
+ const selApi = getDrawing(drawingId).api.selection;
10150
+ selApi.setItems('UseRef', []);
10151
+ const ids = itemsUseRef.map(item => item.data.graphicId);
10152
+ ccAPI.sketcher.createReferenceGeometry(drawingId, sketchId, ids);
10153
+ }
10154
+ }, [drawingId, sketchId, itemsUseRef]);
10155
+ }
10156
+
9908
10157
  const getSketchBounds = boundsMember => {
9909
10158
  const [min, max] = boundsMember.members.map(memb => convertToVector(memb));
9910
10159
  const box = new THREE.Box3(min, max);
@@ -9997,10 +10246,13 @@ const DrawingMode = ({
9997
10246
  set({
9998
10247
  activeHandler: HandlersList.DRAG
9999
10248
  });
10000
- return () => set({
10001
- activeHandler: undefined
10002
- });
10003
- }, [set]);
10249
+ return () => {
10250
+ const plugin = getPlugin(drawingId, pluginId);
10251
+ plugin && plugin.set({
10252
+ activeHandler: undefined
10253
+ });
10254
+ };
10255
+ }, [drawingId, pluginId, set]);
10004
10256
  useSetScale(drawingId, pluginId);
10005
10257
  const activeHandler = useSketchState(drawingId, pluginId, state => state.activeHandler);
10006
10258
  const currentHandler = React__default.useRef();
@@ -10021,6 +10273,7 @@ const DrawingMode = ({
10021
10273
  currentHandler.current = activeHandler;
10022
10274
  }, [drawingId, pluginId, activeHandler]);
10023
10275
  useHandleGSelection(drawingId, pluginId, activeHandler);
10276
+ useUseRef(drawingId, sketchId);
10024
10277
  const dimId = useDimensionSetId(drawingId, sketchId);
10025
10278
  const [, dimView] = useEmbeddedPlugin(Plugin, drawingId, pluginId, dimId, setDimId); // SketcherDimensionSet has it's own cSys that will be applied in Plugin.tsx, so apply inverse Sketch cSys.
10026
10279
  // TODO: remove it when parent plugin matrix won't be applied for embedded one.
@@ -10067,7 +10320,11 @@ const ViewImpl$d = ({
10067
10320
  drawingId,
10068
10321
  pluginId,
10069
10322
  isActive
10070
- }), [drawingId, pluginId, isActive]);
10323
+ }), [drawingId, pluginId, isActive]); // Reset scale on unmount
10324
+
10325
+ React__default.useEffect(() => {
10326
+ return () => setScale(1);
10327
+ }, []);
10071
10328
 
10072
10329
  if (planeSelection) {
10073
10330
  return null;
@@ -10097,40 +10354,6 @@ const View$d = ({
10097
10354
  }));
10098
10355
  };
10099
10356
 
10100
- const UseRef = () => {
10101
- const {
10102
- Group,
10103
- Label,
10104
- Selection,
10105
- Button
10106
- } = useBuerli(buerli => buerli.options.elements);
10107
- const {
10108
- drawingId,
10109
- pluginId
10110
- } = React__default.useContext(RootContext);
10111
- const sketchId = usePlugin(drawingId, pluginId, plugin => plugin.objectId);
10112
- const [selId, setSelId] = React__default.useState();
10113
- const createUseRef = React__default.useCallback(() => {
10114
- if (!selId) return;
10115
- const items = getDrawing(drawingId).selection.refs[selId].items;
10116
- const selApi = getDrawing(drawingId).api.selection;
10117
- selApi.setItems(selId, []);
10118
- selApi.activateSelector(null);
10119
- if (items.length === 0) return;
10120
- const ids = items.map(item => item.data.graphicId);
10121
- ccAPI.sketcher.createReferenceGeometry(drawingId, sketchId, ids);
10122
- }, [selId, drawingId, sketchId]);
10123
- return /*#__PURE__*/React__default.createElement(React__default.Fragment, null, /*#__PURE__*/React__default.createElement(Group, null, /*#__PURE__*/React__default.createElement(Label, null, "Create UseRef"), /*#__PURE__*/React__default.createElement(Selection, {
10124
- key: "useRefSelection",
10125
- drawingId: drawingId,
10126
- onCreated: setSelId,
10127
- filter: (scope, data) => lineSegmentsFilter(scope, data) || loopFilter(scope, data) || pointFilter(scope, data),
10128
- caption: "Select geometry..."
10129
- })), /*#__PURE__*/React__default.createElement(Button, {
10130
- onClick: createUseRef
10131
- }, "Create"));
10132
- };
10133
-
10134
10357
  const constraintClasses = {
10135
10358
  fixation: CCClasses.CC2DFixationConstraint,
10136
10359
  horizontality: CCClasses.CC2DHorizontalConstraint,
@@ -10156,8 +10379,7 @@ const constraintClasses = {
10156
10379
  };
10157
10380
  const Constraints$1 = () => {
10158
10381
  const {
10159
- Button,
10160
- ButtonGroup
10382
+ Button
10161
10383
  } = useBuerli(buerli => buerli.options.elements);
10162
10384
  const {
10163
10385
  drawingId,
@@ -10194,7 +10416,12 @@ const Constraints$1 = () => {
10194
10416
  }
10195
10417
  }
10196
10418
  }, [drawingId, set, selected, sketchId]);
10197
- return allowedConstraints && allowedConstraints.length > 0 ? /*#__PURE__*/React__default.createElement(ButtonGroup, null, allowedConstraints.map(constraintName => /*#__PURE__*/React__default.createElement(Button, {
10419
+ return allowedConstraints && allowedConstraints.length > 0 ? /*#__PURE__*/React__default.createElement(AntdButton.Group, {
10420
+ style: {
10421
+ flexWrap: 'wrap',
10422
+ height: 'unset !important'
10423
+ }
10424
+ }, allowedConstraints.map(constraintName => /*#__PURE__*/React__default.createElement(Button, {
10198
10425
  key: constraintName,
10199
10426
  titleText: constraintName,
10200
10427
  size: 'small',
@@ -10231,7 +10458,8 @@ const HButton = _ref => {
10231
10458
  } = React__default.useContext(RootContext);
10232
10459
  const set = getPlugin(drawingId, pluginId).set;
10233
10460
  const activeHandler = useSketchState(drawingId, pluginId, state => state.activeHandler);
10234
- const isSelectorActive = useDrawing(drawingId, drawing => drawing.selection.active) !== null;
10461
+ const activeSelector = useDrawing(drawingId, drawing => drawing.selection.active);
10462
+ const disabled = Boolean(activeSelector) && activeSelector !== 'UseRef';
10235
10463
  const isActive = activeHandler === handlerName;
10236
10464
  return /*#__PURE__*/React__default.createElement(Tooltip, {
10237
10465
  style: {
@@ -10244,7 +10472,7 @@ const HButton = _ref => {
10244
10472
  key: handlerName,
10245
10473
  value: handlerName,
10246
10474
  checked: isActive,
10247
- disabled: isSelectorActive,
10475
+ disabled: disabled,
10248
10476
  onClick: () => {
10249
10477
  if (isActive) {
10250
10478
  set({
@@ -10282,6 +10510,7 @@ const SubGroup$1 = ({
10282
10510
  } = useBuerli(buerli => buerli.options.elements);
10283
10511
  const [lastHandler, setLastHandler] = React__default.useState(handlers[0]);
10284
10512
  const menu = /*#__PURE__*/React__default.createElement(Menu, null, /*#__PURE__*/React__default.createElement(MenuItem, {
10513
+ key: "menuItem",
10285
10514
  style: {
10286
10515
  backgroundColor: 'initial',
10287
10516
  padding: '0px 5px',
@@ -10321,6 +10550,8 @@ const Handlers = () => {
10321
10550
  handlerName: HandlersList.FILLET
10322
10551
  }), /*#__PURE__*/React__default.createElement(HButton, {
10323
10552
  handlerName: HandlersList.TRIM
10553
+ }), /*#__PURE__*/React__default.createElement(HButton, {
10554
+ handlerName: HandlersList.USEREF
10324
10555
  }));
10325
10556
  };
10326
10557
 
@@ -10513,9 +10744,372 @@ const useRollbackBar = (drawingId, partId) => {
10513
10744
  }
10514
10745
 
10515
10746
  return {
10516
- rollbackBarIndex: -1
10747
+ rollbackBarIndex: -1
10748
+ };
10749
+ }, [drawingId, opSeqId, opSeqChildren]);
10750
+ };
10751
+
10752
+ const _excluded$3 = ["items", "children"];
10753
+ const Menu = _ref => {
10754
+ let {
10755
+ items,
10756
+ children
10757
+ } = _ref,
10758
+ props = _objectWithoutProperties(_ref, _excluded$3);
10759
+
10760
+ const onItemClick = React__default.useCallback(e => {
10761
+ e.domEvent.stopPropagation();
10762
+ let item = items[e.keyPath.pop()];
10763
+
10764
+ if (item.children) {
10765
+ item = item.children[e.keyPath.pop()];
10766
+ }
10767
+ item.callback(e.domEvent);
10768
+ }, [items]);
10769
+ const menu = /*#__PURE__*/React__default.createElement(Menu$1, {
10770
+ onClick: onItemClick
10771
+ }, Object.keys(items).map(key => {
10772
+ const item = items[key];
10773
+
10774
+ if (item.children) {
10775
+ const smItem = item;
10776
+ return /*#__PURE__*/React__default.createElement(Menu$1.SubMenu, {
10777
+ title: smItem.caption,
10778
+ key: key,
10779
+ icon: smItem.icon
10780
+ }, Object.keys(smItem.children).map(chKey => {
10781
+ const chItem = smItem.children[chKey];
10782
+ return /*#__PURE__*/React__default.createElement(Menu$1.Item, {
10783
+ key: chKey,
10784
+ icon: chItem.icon
10785
+ }, chItem.caption);
10786
+ }));
10787
+ } else {
10788
+ const item_ = item;
10789
+ return /*#__PURE__*/React__default.createElement(Menu$1.Item, {
10790
+ key: key,
10791
+ icon: item_.icon
10792
+ }, item_.caption);
10793
+ }
10794
+ }));
10795
+ return /*#__PURE__*/React__default.createElement(Dropdown, _extends({
10796
+ overlay: menu,
10797
+ placement: "bottomCenter"
10798
+ }, props), children ? children : /*#__PURE__*/React__default.createElement("div", {
10799
+ style: {
10800
+ width: '24px',
10801
+ cursor: 'pointer',
10802
+ textAlign: 'center'
10803
+ },
10804
+ onClick: e => e.stopPropagation()
10805
+ }, "..."));
10806
+ };
10807
+
10808
+ const NameEdit = ({
10809
+ drawingId,
10810
+ objId,
10811
+ setEditName,
10812
+ name
10813
+ }) => {
10814
+ const ref = React__default.useRef(null);
10815
+ const onEnter = React__default.useCallback(async e => {
10816
+ if (e.target.value !== '') {
10817
+ await ccAPI.common.setObjectName(drawingId, objId, e.target.value);
10818
+ }
10819
+
10820
+ setEditName(false);
10821
+ }, [drawingId, objId, setEditName]);
10822
+ const onKeyPress = React__default.useCallback(e => {
10823
+ if (e.key !== 'Escape') return;
10824
+ setEditName(false);
10825
+ }, [setEditName]);
10826
+ React__default.useEffect(() => {
10827
+ var _ref$current;
10828
+
10829
+ (_ref$current = ref.current) == null ? void 0 : _ref$current.focus({
10830
+ cursor: 'all'
10831
+ });
10832
+ }, []);
10833
+ return /*#__PURE__*/React__default.createElement(Input, {
10834
+ ref: ref,
10835
+ onPressEnter: onEnter,
10836
+ defaultValue: name,
10837
+ size: "small",
10838
+ onKeyDown: onKeyPress,
10839
+ onBlur: () => setEditName(false)
10840
+ });
10841
+ };
10842
+
10843
+ const FlexRow = styled.div`
10844
+ display: flex;
10845
+ flex-direction: row;
10846
+ `;
10847
+ const FlexReverseRow = styled.div`
10848
+ display: flex;
10849
+ flex-direction: row-reverse;
10850
+ `;
10851
+ const Link = styled.a`
10852
+ color: #4f4f4f;
10853
+ &:hover {
10854
+ text-decoration: underline;
10855
+ text-decoration-color: #4f4f4f;
10856
+ color: #4f4f4f;
10857
+ }
10858
+ `;
10859
+ const HoveredDiv = styled.div`
10860
+ width: 100%;
10861
+ display: flex;
10862
+ justify-content: space-between;
10863
+ cursor: default;
10864
+ background-color: ${props => props.hovered ? '#f0f0f0' : undefined};
10865
+ border-bottom: ${props => props.bordered ? '1px solid #f0f0f0' : undefined};
10866
+ padding: ${props => props.bordered ? '4px 10px' : undefined};
10867
+ &:hover {
10868
+ background-color: #f0f0f0;
10869
+ }
10870
+ `;
10871
+
10872
+ const {
10873
+ Text: Text$3
10874
+ } = Typography;
10875
+ const EntityName = ({
10876
+ name,
10877
+ disabled,
10878
+ strong,
10879
+ onClick,
10880
+ onMouseEnter,
10881
+ onMouseLeave
10882
+ }) => {
10883
+ return /*#__PURE__*/React__default.createElement(Link, {
10884
+ onClick: onClick,
10885
+ onMouseEnter: onMouseEnter,
10886
+ onMouseLeave: onMouseLeave
10887
+ }, /*#__PURE__*/React__default.createElement(Text$3, {
10888
+ disabled: disabled,
10889
+ strong: strong
10890
+ }, name));
10891
+ };
10892
+
10893
+ const Indent = () => {
10894
+ return /*#__PURE__*/React__default.createElement("span", {
10895
+ className: "ant-tree-indent"
10896
+ }, /*#__PURE__*/React__default.createElement("span", {
10897
+ className: "ant-tree-indent-unit"
10898
+ }));
10899
+ };
10900
+ const Indents = ({
10901
+ level
10902
+ }) => {
10903
+ const arr = Array.from(Array(level).keys());
10904
+ return /*#__PURE__*/React__default.createElement(React__default.Fragment, null, arr.map(i => /*#__PURE__*/React__default.createElement(Indent, {
10905
+ key: i
10906
+ })));
10907
+ };
10908
+ const CollapseButton = ({
10909
+ collapsed,
10910
+ onClick
10911
+ }) => {
10912
+ return /*#__PURE__*/React__default.createElement("span", {
10913
+ className: "ant-tree-switcher",
10914
+ onClick: onClick
10915
+ }, /*#__PURE__*/React__default.createElement("span", {
10916
+ role: "img",
10917
+ "aria-label": "caret-down",
10918
+ className: "anticon anticon-caret-down ant-tree-switcher-icon"
10919
+ }, collapsed ? /*#__PURE__*/React__default.createElement(CaretRightOutlined, null) : /*#__PURE__*/React__default.createElement(CaretDownOutlined, null)));
10920
+ };
10921
+
10922
+ function useMenuItems$4(drawingId, pluginId, objectId, setRename) {
10923
+ const {
10924
+ set,
10925
+ objectId: sketchId
10926
+ } = getPlugin(drawingId, pluginId);
10927
+ return React__default.useMemo(() => {
10928
+ return {
10929
+ rename: {
10930
+ caption: 'rename',
10931
+ icon: /*#__PURE__*/React__default.createElement(EditOutlined, null),
10932
+ callback: () => {
10933
+ setRename(true);
10934
+ }
10935
+ },
10936
+ delete: {
10937
+ caption: 'delete',
10938
+ icon: /*#__PURE__*/React__default.createElement(DeleteOutlined, null),
10939
+ callback: () => {
10940
+ ccAPI.sketcher.removeObjects(drawingId, sketchId, [objectId]);
10941
+ const tree = getDrawing(drawingId).structure.tree;
10942
+ set(state_ => {
10943
+ const selected = state_.selected.filter(id => id !== objectId && tree[id].parent !== objectId);
10944
+ return {
10945
+ selected
10946
+ };
10947
+ });
10948
+ }
10949
+ }
10950
+ };
10951
+ }, [drawingId, sketchId, objectId, set, setRename]);
10952
+ }
10953
+
10954
+ const {
10955
+ Text: Text$2
10956
+ } = Typography;
10957
+
10958
+ const ObjTitle = ({
10959
+ objId,
10960
+ withMenu
10961
+ }) => {
10962
+ const {
10963
+ drawingId,
10964
+ pluginId
10965
+ } = React__default.useContext(RootContext);
10966
+ const name = useDrawing(drawingId, d => d.structure.tree[objId].name) || '';
10967
+ const objClass = useDrawing(drawingId, d => d.structure.tree[objId].class);
10968
+ const isHovered = useSketchState(drawingId, pluginId, s => s.hovered === objId);
10969
+ const isSelected = useSketchState(drawingId, pluginId, s => s.selected.indexOf(objId) !== -1);
10970
+ const color = isSelected ? '#ffa500' : isHovered ? '#28d79f' : undefined; // TODO: Rename resources so that they have more generic names, i.e. 'CC_Point' instead of 'drawPoint', etc
10971
+
10972
+ const imgName = React__default.useMemo(() => {
10973
+ switch (objClass) {
10974
+ case CCClasses.CCPoint:
10975
+ return HandlersList.DRAWPOINT;
10976
+
10977
+ case CCClasses.CCLine:
10978
+ return HandlersList.DRAWLINE;
10979
+
10980
+ case CCClasses.CCArc:
10981
+ return HandlersList.DRAWARCCENTER;
10982
+
10983
+ case CCClasses.CCCircle:
10984
+ return HandlersList.DRAWCIRCLE;
10985
+
10986
+ default:
10987
+ return objClass;
10988
+ }
10989
+ }, [objClass]);
10990
+ const [rename, setRename] = React__default.useState(false);
10991
+ const [isMenuHovered, setIsMenuHovered] = React__default.useState(false);
10992
+ const menuItems = useMenuItems$4(drawingId, pluginId, objId, setRename);
10993
+ const activeHandler = useSketchState(drawingId, pluginId, state => state.activeHandler);
10994
+ const globalSelection = useTreeObjSelection(drawingId, objId);
10995
+ const onClickSel = globalSelection.handlers.onClick; // TODO: Implement global selection in onClick? Not sure if needed...
10996
+
10997
+ const onClick = React__default.useCallback(() => {
10998
+ if (activeHandler === HandlersList.DRAG) {
10999
+ select(drawingId, pluginId, objId);
11000
+ } else if (!activeHandler) {
11001
+ // if no handler is active, some selector should be active
11002
+ onClickSel && onClickSel();
11003
+ }
11004
+ }, [drawingId, pluginId, objId, activeHandler, onClickSel]);
11005
+ const onMouseEnter = React__default.useCallback(() => {
11006
+ hover(drawingId, pluginId, objId);
11007
+ }, [drawingId, pluginId, objId]);
11008
+ const onMouseLeave = React__default.useCallback(() => {
11009
+ unhover(drawingId, pluginId, objId);
11010
+ }, [drawingId, pluginId, objId]);
11011
+ const nameComponent = rename ? /*#__PURE__*/React__default.createElement(NameEdit, {
11012
+ drawingId: drawingId,
11013
+ objId: objId,
11014
+ setEditName: setRename,
11015
+ name: name
11016
+ }) : /*#__PURE__*/React__default.createElement(EntityName, {
11017
+ name: name,
11018
+ onClick: onClick,
11019
+ onMouseEnter: onMouseEnter,
11020
+ onMouseLeave: onMouseLeave
11021
+ });
11022
+ return /*#__PURE__*/React__default.createElement(HoveredDiv, {
11023
+ hovered: isMenuHovered,
11024
+ style: {
11025
+ backgroundColor: color
11026
+ }
11027
+ }, /*#__PURE__*/React__default.createElement(Space, null, imgName && resources[imgName] && /*#__PURE__*/React__default.createElement("img", {
11028
+ style: {
11029
+ width: 18,
11030
+ height: 18,
11031
+ verticalAlign: '-4px'
11032
+ },
11033
+ src: resources[imgName]
11034
+ }), nameComponent), withMenu && /*#__PURE__*/React__default.createElement(Menu, {
11035
+ items: menuItems,
11036
+ onVisibleChange: setIsMenuHovered
11037
+ }));
11038
+ };
11039
+
11040
+ const SketchObj = ({
11041
+ objId,
11042
+ level
11043
+ }) => {
11044
+ const {
11045
+ drawingId
11046
+ } = React__default.useContext(RootContext);
11047
+ const children = useDrawing(drawingId, d => d.structure.tree[objId].children || []);
11048
+ const [collapsed, setCollapsed] = React__default.useState(true);
11049
+ return /*#__PURE__*/React__default.createElement("div", null, /*#__PURE__*/React__default.createElement(FlexRow, null, /*#__PURE__*/React__default.createElement(Indents, {
11050
+ level: level
11051
+ }), children.length > 0 ? /*#__PURE__*/React__default.createElement(CollapseButton, {
11052
+ collapsed: collapsed,
11053
+ onClick: () => setCollapsed(x => !x)
11054
+ }) : /*#__PURE__*/React__default.createElement(Indent, null), /*#__PURE__*/React__default.createElement(ObjTitle, {
11055
+ objId: objId,
11056
+ withMenu: level === 0
11057
+ })), children.map(childId => /*#__PURE__*/React__default.createElement("div", {
11058
+ key: childId,
11059
+ style: {
11060
+ display: collapsed ? 'none' : 'block'
11061
+ }
11062
+ }, /*#__PURE__*/React__default.createElement(SketchObj, {
11063
+ objId: childId,
11064
+ level: level + 1
11065
+ }))));
11066
+ };
11067
+
11068
+ const Details = () => {
11069
+ const {
11070
+ Collapse
11071
+ } = useBuerli(buerli => buerli.options.elements);
11072
+ const {
11073
+ drawingId,
11074
+ pluginId
11075
+ } = React__default.useContext(RootContext);
11076
+ const sketchId = usePlugin(drawingId, pluginId, plugin => plugin.objectId);
11077
+ const sketchChildren = useDrawing(drawingId, drawing => drawing.structure.tree[sketchId].children);
11078
+ const {
11079
+ geometry,
11080
+ constraints,
11081
+ isTrimActive
11082
+ } = React__default.useMemo(() => {
11083
+ const tree = getDrawing(drawingId).structure.tree;
11084
+ const geometry_ = (sketchChildren == null ? void 0 : sketchChildren.filter(id => isSketchGeometry(tree[id].class))) || [];
11085
+ const constraints_ = (sketchChildren == null ? void 0 : sketchChildren.filter(id => is2DConstraint(tree[id].class))) || [];
11086
+ const isTrimActive_ = (sketchChildren == null ? void 0 : sketchChildren.findIndex(id => tree[id].class === CCClasses.CCContainer)) !== -1;
11087
+ return {
11088
+ geometry: geometry_,
11089
+ constraints: constraints_,
11090
+ isTrimActive: isTrimActive_
10517
11091
  };
10518
- }, [drawingId, opSeqId, opSeqChildren]);
11092
+ }, [drawingId, sketchChildren]);
11093
+ return /*#__PURE__*/React__default.createElement(Collapse, {
11094
+ header: "Details",
11095
+ isActive: false
11096
+ }, geometry.length === 0 && /*#__PURE__*/React__default.createElement(Text$2, {
11097
+ strong: true
11098
+ }, "The sketch is empty"), geometry.length > 0 && isTrimActive && /*#__PURE__*/React__default.createElement(Text$2, {
11099
+ strong: true
11100
+ }, "Trim is active"), geometry.length > 0 && !isTrimActive && /*#__PURE__*/React__default.createElement(React__default.Fragment, null, /*#__PURE__*/React__default.createElement(Text$2, {
11101
+ strong: true
11102
+ }, "Geometry"), !isTrimActive && geometry.map(childId => /*#__PURE__*/React__default.createElement(SketchObj, {
11103
+ objId: childId,
11104
+ key: childId,
11105
+ level: 0
11106
+ }))), constraints.length > 0 && !isTrimActive && /*#__PURE__*/React__default.createElement(React__default.Fragment, null, /*#__PURE__*/React__default.createElement(Text$2, {
11107
+ strong: true
11108
+ }, "Constraints"), constraints.map(childId => /*#__PURE__*/React__default.createElement(SketchObj, {
11109
+ objId: childId,
11110
+ key: childId,
11111
+ level: 0
11112
+ }))));
10519
11113
  };
10520
11114
 
10521
11115
  const PlaneSelectionMode = ({
@@ -10553,12 +11147,19 @@ const PlaneSelectionMode = ({
10553
11147
  }); // Make planes invisible again
10554
11148
 
10555
11149
  return () => {
10556
- const planeId = getDrawing(drawingId).structure.tree[sketchId].members.planeReference.value;
10557
- wereInvisible.forEach(id => {
10558
- if (id !== planeId) {
10559
- pluginApi.setVisiblePlugin(id, false);
10560
- }
10561
- });
11150
+ const drawing_ = getDrawing(drawingId);
11151
+
11152
+ if (drawing_) {
11153
+ var _drawing_$structure$t, _drawing_$structure$t2;
11154
+
11155
+ const pluginApi_ = drawing_.api.plugin;
11156
+ const planeId = (_drawing_$structure$t = drawing_.structure.tree[sketchId]) == null ? void 0 : (_drawing_$structure$t2 = _drawing_$structure$t.members) == null ? void 0 : _drawing_$structure$t2.planeReference.value;
11157
+ wereInvisible.forEach(id => {
11158
+ if (id !== planeId) {
11159
+ pluginApi_.setVisiblePlugin(id, false);
11160
+ }
11161
+ });
11162
+ }
10562
11163
  }; // Should always happen just once
10563
11164
  // eslint-disable-next-line react-hooks/exhaustive-deps
10564
11165
  }, []);
@@ -10666,7 +11267,7 @@ const SketchMode = ({
10666
11267
  });
10667
11268
  }
10668
11269
  })), /*#__PURE__*/React__default.createElement(MousePos, null), /*#__PURE__*/React__default.createElement(Collapse, {
10669
- header: "Patterns and use reference",
11270
+ header: "Patterns",
10670
11271
  isActive: false
10671
11272
  }, /*#__PURE__*/React__default.createElement(Tabs, {
10672
11273
  tabBarGutter: 0,
@@ -10691,13 +11292,7 @@ const SketchMode = ({
10691
11292
  tooltip: "Mirror copy pattern."
10692
11293
  }),
10693
11294
  key: "Mirror"
10694
- }, /*#__PURE__*/React__default.createElement(MirrorPattern, null)), /*#__PURE__*/React__default.createElement(TabPane, {
10695
- tab: /*#__PURE__*/React__default.createElement(TabIcon, {
10696
- url: resources['useRef'],
10697
- tooltip: "Use reference."
10698
- }),
10699
- key: "UseRef"
10700
- }, /*#__PURE__*/React__default.createElement(UseRef, null))))));
11295
+ }, /*#__PURE__*/React__default.createElement(MirrorPattern, null)))), /*#__PURE__*/React__default.createElement(Details, null)));
10701
11296
  };
10702
11297
 
10703
11298
  const RootImpl$f = ({
@@ -10707,22 +11302,23 @@ const RootImpl$f = ({
10707
11302
  const objectId = usePlugin(drawingId, pluginId, plugin => plugin.objectId);
10708
11303
  const sketch = useDrawing(drawingId, drawing => drawing.structure.tree[objectId]);
10709
11304
  const planeSelected = sketch.members.planeReference.value !== 0;
10710
- const {
10711
- set
10712
- } = getPlugin(drawingId, pluginId);
10713
11305
  React__default.useEffect(() => {
10714
11306
  // Reset some fields in state and force sketch visibility when sketch is unmounted.
10715
11307
  return () => {
10716
- const pluginApi = getDrawing(drawingId).api.plugin;
10717
- pluginApi.setVisiblePlugin(pluginId, true);
10718
- set({
10719
- tmpObjects: {},
10720
- selected: [],
10721
- hovered: UNDEFINEDID,
10722
- highlighted: []
10723
- });
11308
+ const plugin = getPlugin(drawingId, pluginId); // Only do stuff if plugin exists in the store when unmounting
11309
+
11310
+ if (plugin) {
11311
+ const pluginApi = getDrawing(drawingId).api.plugin;
11312
+ pluginApi.setVisiblePlugin(pluginId, true);
11313
+ plugin.set({
11314
+ tmpObjects: {},
11315
+ selected: [],
11316
+ hovered: UNDEFINEDID,
11317
+ highlighted: []
11318
+ });
11319
+ }
10724
11320
  };
10725
- }, [drawingId, pluginId, set]);
11321
+ }, [drawingId, pluginId]);
10726
11322
  React__default.useEffect(() => {
10727
11323
  if (!planeSelected) {
10728
11324
  return;
@@ -10980,7 +11576,7 @@ const ViewImpl$c = ({
10980
11576
  handlers
10981
11577
  } = useTreeObjSelection(drawingId, objectId);
10982
11578
  const color = getColor(isHovered, isSelected, direction, workAxisObj.members.Type.value);
10983
- const ref = useScale(position.clone(), sf => [3 * sf, 3 * sf, 3 * sf]);
11579
+ const ref = useScale$1(position.clone(), sf => [3 * sf, 3 * sf, 3 * sf]);
10984
11580
  return /*#__PURE__*/React__default.createElement(HUD, null, /*#__PURE__*/React__default.createElement("group", {
10985
11581
  ref: ref,
10986
11582
  position: position
@@ -11501,7 +12097,7 @@ const ViewImpl$a = ({
11501
12097
  handlers
11502
12098
  } = useTreeObjSelection(drawingId, objectId);
11503
12099
  const color = isHovered ? 0x28d79f : isSelected ? 0xa70b0b : 0x111111;
11504
- const ref = useScale(position.clone(), sf => [3 * sf, 3 * sf, 3 * sf]);
12100
+ const ref = useScale$1(position.clone(), sf => [3 * sf, 3 * sf, 3 * sf]);
11505
12101
  return /*#__PURE__*/React__default.createElement(HUD, null, /*#__PURE__*/React__default.createElement("group", {
11506
12102
  ref: ref,
11507
12103
  position: position
@@ -11542,9 +12138,9 @@ var index$c = /*#__PURE__*/Object.freeze({
11542
12138
  description: description$c
11543
12139
  });
11544
12140
 
11545
- function ownKeys$6(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) { symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; }
12141
+ function ownKeys$8(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) { symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; }
11546
12142
 
11547
- function _objectSpread$6(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys$6(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys$6(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
12143
+ function _objectSpread$8(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys$8(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys$8(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
11548
12144
 
11549
12145
  const NumInput = ({
11550
12146
  onChange,
@@ -11605,7 +12201,7 @@ const CSysEditor = ({
11605
12201
  const [z, setZ] = React__default.useState(() => userValue[csysRow].z);
11606
12202
  React__default.useEffect(() => {
11607
12203
  setUserValue(val => {
11608
- const newVal = [_objectSpread$6({}, val[0]), _objectSpread$6({}, val[1]), _objectSpread$6({}, val[2]), _objectSpread$6({}, val[3])];
12204
+ const newVal = [_objectSpread$8({}, val[0]), _objectSpread$8({}, val[1]), _objectSpread$8({}, val[2]), _objectSpread$8({}, val[3])];
11609
12205
  newVal[csysRow] = {
11610
12206
  x,
11611
12207
  y,
@@ -12216,36 +12812,36 @@ function ViewImpl$8({
12216
12812
  length: zAxisLength + scale * 10,
12217
12813
  width: arrowWidth,
12218
12814
  color: 0x11116f
12219
- }), /*#__PURE__*/React__default.createElement(Point$1, {
12815
+ }), /*#__PURE__*/React__default.createElement(Point$2, {
12220
12816
  position: origin,
12221
12817
  radius: originPointWidth,
12222
12818
  color: 0x111111
12223
- }), axisPoints.map(point => /*#__PURE__*/React__default.createElement(Point$1, {
12819
+ }), axisPoints.map(point => /*#__PURE__*/React__default.createElement(Point$2, {
12224
12820
  key: point.key,
12225
12821
  position: point.position,
12226
12822
  radius: axisPointWidth,
12227
12823
  color: point.color
12228
- })), /*#__PURE__*/React__default.createElement(Point$1, {
12824
+ })), /*#__PURE__*/React__default.createElement(Point$2, {
12229
12825
  position: xMin,
12230
12826
  radius: boundaryPointWidth,
12231
12827
  color: 0x6f1111
12232
- }), /*#__PURE__*/React__default.createElement(Point$1, {
12828
+ }), /*#__PURE__*/React__default.createElement(Point$2, {
12233
12829
  position: xMax,
12234
12830
  radius: boundaryPointWidth,
12235
12831
  color: 0x6f1111
12236
- }), /*#__PURE__*/React__default.createElement(Point$1, {
12832
+ }), /*#__PURE__*/React__default.createElement(Point$2, {
12237
12833
  position: yMin,
12238
12834
  radius: boundaryPointWidth,
12239
12835
  color: 0x116f11
12240
- }), /*#__PURE__*/React__default.createElement(Point$1, {
12836
+ }), /*#__PURE__*/React__default.createElement(Point$2, {
12241
12837
  position: yMax,
12242
12838
  radius: boundaryPointWidth,
12243
12839
  color: 0x116f11
12244
- }), /*#__PURE__*/React__default.createElement(Point$1, {
12840
+ }), /*#__PURE__*/React__default.createElement(Point$2, {
12245
12841
  position: zMin,
12246
12842
  radius: boundaryPointWidth,
12247
12843
  color: 0x11116f
12248
- }), /*#__PURE__*/React__default.createElement(Point$1, {
12844
+ }), /*#__PURE__*/React__default.createElement(Point$2, {
12249
12845
  position: zMax,
12250
12846
  radius: boundaryPointWidth,
12251
12847
  color: 0x11116f
@@ -12943,6 +13539,47 @@ const CSysDisplayValidator = ({
12943
13539
  }, children);
12944
13540
  };
12945
13541
 
13542
+ function useFeaturesIds(drawingId, curNodeId) {
13543
+ const curClass = useDrawing(drawingId, d => {
13544
+ var _d$structure$tree$cur;
13545
+
13546
+ return (_d$structure$tree$cur = d.structure.tree[curNodeId]) == null ? void 0 : _d$structure$tree$cur.class;
13547
+ });
13548
+ const prodId = useDrawing(drawingId, d => {
13549
+ if (curClass === CCClasses.CCProductReference || curClass === CCClasses.CCProductReferenceET) {
13550
+ const node = d.structure.tree[curNodeId];
13551
+ return node.members.productId.value;
13552
+ }
13553
+
13554
+ return curNodeId;
13555
+ });
13556
+ const opSeqId = useOperationSequence(drawingId, prodId);
13557
+ const opSeqChildren = useDrawing(drawingId, d => {
13558
+ var _d$structure$tree;
13559
+
13560
+ return (_d$structure$tree = d.structure.tree[opSeqId || -1]) == null ? void 0 : _d$structure$tree.children;
13561
+ });
13562
+ const tree = getDrawing(drawingId).structure.tree;
13563
+ const featureIds = (opSeqChildren == null ? void 0 : opSeqChildren.map(refId => tree[refId].members.refObj.value)) || [];
13564
+ return featureIds;
13565
+ }
13566
+ function getFeaturesIds(drawingId, curNodeId) {
13567
+ var _tree$prodId, _tree;
13568
+
13569
+ const tree = getDrawing(drawingId).structure.tree;
13570
+ const curClass = tree[curNodeId].class;
13571
+ const prodId = curClass === CCClasses.CCProductReference || curClass === CCClasses.CCProductReferenceET ? tree[curNodeId].members.productId.value : curNodeId;
13572
+ const prodChildren = (_tree$prodId = tree[prodId]) == null ? void 0 : _tree$prodId.children;
13573
+ const opSeqId = prodChildren == null ? void 0 : prodChildren.find(id => {
13574
+ var _tree$id;
13575
+
13576
+ return ((_tree$id = tree[id]) == null ? void 0 : _tree$id.class) === CCClasses.CCOperationSequence;
13577
+ });
13578
+ const opSeqChildren = (_tree = tree[opSeqId || -1]) == null ? void 0 : _tree.children;
13579
+ const featureIds = (opSeqChildren == null ? void 0 : opSeqChildren.map(refId => tree[refId].members.refObj.value)) || [];
13580
+ return featureIds;
13581
+ }
13582
+
12946
13583
  const getFlipMatrix = (flip, xAxis, yAxis) => {
12947
13584
  switch (flip) {
12948
13585
  case FlipType.FLIP_X:
@@ -13285,9 +13922,8 @@ const CSysDisplayImpl = ({
13285
13922
  const productId = ((_tree$id$members = tree[id].members) == null ? void 0 : (_tree$id$members$prod = _tree$id$members.productId) == null ? void 0 : _tree$id$members$prod.value) || tree[id].id;
13286
13923
 
13287
13924
  if (prToCsysMap[productId] === undefined) {
13288
- var _tree$productId$featu;
13289
-
13290
- const csysIds = ((_tree$productId$featu = tree[productId].features) == null ? void 0 : _tree$productId$featu.filter(featureId => tree[featureId].class === CCClasses.CCWorkCoordSystem)) || [];
13925
+ const features = getFeaturesIds(drawingId, productId);
13926
+ const csysIds = (features == null ? void 0 : features.filter(featureId => tree[featureId].class === CCClasses.CCWorkCoordSystem)) || [];
13291
13927
  prToCsysMap[productId] = csysIds;
13292
13928
  }
13293
13929
 
@@ -15059,61 +15695,6 @@ const FileUtils = {
15059
15695
  }
15060
15696
  };
15061
15697
 
15062
- const _excluded$3 = ["items", "children"];
15063
- const Menu = _ref => {
15064
- let {
15065
- items,
15066
- children
15067
- } = _ref,
15068
- props = _objectWithoutProperties(_ref, _excluded$3);
15069
-
15070
- const onItemClick = React__default.useCallback(e => {
15071
- e.domEvent.stopPropagation();
15072
- let item = items[e.keyPath.pop()];
15073
-
15074
- if (item.children) {
15075
- item = item.children[e.keyPath.pop()];
15076
- }
15077
- item.callback(e.domEvent);
15078
- }, [items]);
15079
- const menu = /*#__PURE__*/React__default.createElement(Menu$1, {
15080
- onClick: onItemClick
15081
- }, Object.keys(items).map(key => {
15082
- const item = items[key];
15083
-
15084
- if (item.children) {
15085
- const smItem = item;
15086
- return /*#__PURE__*/React__default.createElement(Menu$1.SubMenu, {
15087
- title: smItem.caption,
15088
- key: key,
15089
- icon: smItem.icon
15090
- }, Object.keys(smItem.children).map(chKey => {
15091
- const chItem = smItem.children[chKey];
15092
- return /*#__PURE__*/React__default.createElement(Menu$1.Item, {
15093
- key: chKey,
15094
- icon: chItem.icon
15095
- }, chItem.caption);
15096
- }));
15097
- } else {
15098
- const item_ = item;
15099
- return /*#__PURE__*/React__default.createElement(Menu$1.Item, {
15100
- key: key,
15101
- icon: item_.icon
15102
- }, item_.caption);
15103
- }
15104
- }));
15105
- return /*#__PURE__*/React__default.createElement(Dropdown, _extends({
15106
- overlay: menu,
15107
- placement: "bottomCenter"
15108
- }, props), children ? children : /*#__PURE__*/React__default.createElement("div", {
15109
- style: {
15110
- width: '24px',
15111
- cursor: 'pointer'
15112
- },
15113
- onClick: e => e.stopPropagation()
15114
- }, "..."));
15115
- };
15116
-
15117
15698
  const zoomToFit = drawingId => {
15118
15699
  var _getCamera;
15119
15700
 
@@ -15143,9 +15724,9 @@ const zoomToFit = drawingId => {
15143
15724
  camApi.setZoom('fit', bounds);
15144
15725
  };
15145
15726
 
15146
- function ownKeys$5(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) { symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; }
15727
+ function ownKeys$7(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) { symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; }
15147
15728
 
15148
- function _objectSpread$5(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys$5(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys$5(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
15729
+ function _objectSpread$7(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys$7(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys$7(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
15149
15730
  const appApi = (set, get) => ({
15150
15731
  assemblyTree: {
15151
15732
  startProdEditing: (drawingId, objId) => {
@@ -15154,7 +15735,7 @@ const appApi = (set, get) => ({
15154
15735
  const curNode = api.getState().drawing.refs[drawingId].structure.currentNode;
15155
15736
  res = state.assemblyTree.prodStack;
15156
15737
  curNode && res.push(curNode);
15157
- return _objectSpread$5(_objectSpread$5({}, state), {}, {
15738
+ return _objectSpread$7(_objectSpread$7({}, state), {}, {
15158
15739
  assemblyTree: {
15159
15740
  prodStack: [...res]
15160
15741
  }
@@ -15169,7 +15750,7 @@ const appApi = (set, get) => ({
15169
15750
  set(state => {
15170
15751
  const res = state.assemblyTree.prodStack;
15171
15752
  res.pop();
15172
- return _objectSpread$5(_objectSpread$5({}, state), {}, {
15753
+ return _objectSpread$7(_objectSpread$7({}, state), {}, {
15173
15754
  assemblyTree: {
15174
15755
  prodStack: [...res]
15175
15756
  }
@@ -15178,7 +15759,7 @@ const appApi = (set, get) => ({
15178
15759
  ccAPI.assemblyBuilder.setCurrentNode(drawingId, prevProd).then(() => zoomToFit(drawingId)).catch();
15179
15760
  },
15180
15761
  clearProdStack: () => {
15181
- set(state => _objectSpread$5(_objectSpread$5({}, state), {}, {
15762
+ set(state => _objectSpread$7(_objectSpread$7({}, state), {}, {
15182
15763
  assemblyTree: {
15183
15764
  prodStack: []
15184
15765
  }
@@ -15274,43 +15855,8 @@ function useMenuItems$3(drawingId, prodId, setEditName, pluginId) {
15274
15855
  return res;
15275
15856
  }
15276
15857
 
15277
- const NameEdit = ({
15278
- drawingId,
15279
- objId,
15280
- setEditName,
15281
- name
15282
- }) => {
15283
- const ref = React__default.useRef(null);
15284
- const onEnter = React__default.useCallback(async e => {
15285
- if (e.target.value !== '') {
15286
- await ccAPI.common.setObjectName(drawingId, objId, e.target.value);
15287
- }
15288
-
15289
- setEditName(false);
15290
- }, [drawingId, objId, setEditName]);
15291
- const onKeyPress = React__default.useCallback(e => {
15292
- if (e.key !== 'Escape') return;
15293
- setEditName(false);
15294
- }, [setEditName]);
15295
- React__default.useEffect(() => {
15296
- var _ref$current;
15297
-
15298
- (_ref$current = ref.current) == null ? void 0 : _ref$current.focus({
15299
- cursor: 'all'
15300
- });
15301
- }, []);
15302
- return /*#__PURE__*/React__default.createElement(Input, {
15303
- ref: ref,
15304
- onPressEnter: onEnter,
15305
- defaultValue: name,
15306
- size: "small",
15307
- onKeyDown: onKeyPress,
15308
- onBlur: () => setEditName(false)
15309
- });
15310
- };
15311
-
15312
15858
  const {
15313
- Text: Text$2
15859
+ Text: Text$1
15314
15860
  } = Typography; // TODO: use Name from Feature.tsx
15315
15861
 
15316
15862
  const Name = ({
@@ -15319,7 +15865,7 @@ const Name = ({
15319
15865
  strong,
15320
15866
  onClick
15321
15867
  }) => {
15322
- return /*#__PURE__*/React__default.createElement(Text$2, {
15868
+ return /*#__PURE__*/React__default.createElement(Text$1, {
15323
15869
  disabled: disabled,
15324
15870
  strong: strong,
15325
15871
  style: {
@@ -15407,7 +15953,7 @@ const NewProd = ({
15407
15953
  ref: inputRef,
15408
15954
  suffix: /*#__PURE__*/React__default.createElement(React__default.Fragment, null, /*#__PURE__*/React__default.createElement(Space, null, /*#__PURE__*/React__default.createElement(InputButton, {
15409
15955
  type: "apply",
15410
- onClick: () => createProd() && setCreateMode(false)
15956
+ onClick: () => setCreateMode(false)
15411
15957
  }), /*#__PURE__*/React__default.createElement(InputButton, {
15412
15958
  type: "cancel",
15413
15959
  onClick: () => setCreateMode(false)
@@ -15444,13 +15990,16 @@ const ProdTable = ({
15444
15990
  dataIndex: 'prodId',
15445
15991
  render
15446
15992
  }];
15447
- }, [drawingId, pluginId, setCreateMode]); // ResetselectedProduct when plugin is closed
15993
+ }, [drawingId, pluginId, setCreateMode]); // Reset selectedProduct when plugin is closed
15448
15994
 
15449
15995
  React__default.useEffect(() => {
15450
- return () => set({
15451
- selectedProduct: null
15452
- });
15453
- }, [set]);
15996
+ return () => {
15997
+ const plugin = getPlugin(drawingId, pluginId);
15998
+ plugin && plugin.set({
15999
+ selectedProduct: null
16000
+ });
16001
+ };
16002
+ }, [drawingId, pluginId]);
15454
16003
  const keyHandler = React__default.useCallback(e => {
15455
16004
  if (e.key === 'Escape') {
15456
16005
  set({
@@ -15919,6 +16468,25 @@ const useIsDisabled = (drawingId, featureId) => {
15919
16468
  return featureIndex > rollbackBarIndex || actFeatIdx >= 0 && actFeatIdx < featureIndex;
15920
16469
  };
15921
16470
 
16471
+ /**
16472
+ * Validator for FeatureList component. Checks drawing and currentProduct existance.
16473
+ *
16474
+ * @param drawingId
16475
+ * @returns
16476
+ */
16477
+
16478
+ const FeatureListValidator = ({
16479
+ drawingId,
16480
+ children
16481
+ }) => {
16482
+ const warnings = {};
16483
+ useDrawingVerifier(drawingId, warnings);
16484
+ useRootOrProdVerifier(drawingId, warnings);
16485
+ return /*#__PURE__*/React__default.createElement(ErrorBoundary, {
16486
+ warnings: warnings
16487
+ }, children);
16488
+ };
16489
+
15922
16490
  /**
15923
16491
  * Goal of this component is to manage visibility of individual features when interacting with RollbackBar
15924
16492
  * TODO: change the component name?
@@ -15955,8 +16523,6 @@ const VisibilityController = ({
15955
16523
  const FtVisibilityControllerImpl = ({
15956
16524
  drawingId
15957
16525
  }) => {
15958
- var _operationSequence$ch;
15959
-
15960
16526
  const activeSelId = useDrawing(drawingId, d => d.selection.active);
15961
16527
  const featuresToHide = React__default.useRef([]);
15962
16528
  React__default.useEffect(() => {
@@ -15985,15 +16551,7 @@ const FtVisibilityControllerImpl = ({
15985
16551
  };
15986
16552
  }, [drawingId, activeSelId]);
15987
16553
  const curPartId = useDrawing(drawingId, d => d.structure.currentProduct || d.structure.root);
15988
- const {
15989
- operationSequence
15990
- } = useRollbackBar(drawingId, curPartId);
15991
- const tree = getDrawing(drawingId).structure.tree;
15992
- const features = operationSequence == null ? void 0 : (_operationSequence$ch = operationSequence.children) == null ? void 0 : _operationSequence$ch.map(id => {
15993
- var _tree$id, _tree$id$members, _tree$id$members$refO;
15994
-
15995
- return (_tree$id = tree[id]) == null ? void 0 : (_tree$id$members = _tree$id.members) == null ? void 0 : (_tree$id$members$refO = _tree$id$members.refObj) == null ? void 0 : _tree$id$members$refO.value;
15996
- });
16554
+ const features = useFeaturesIds(drawingId, curPartId);
15997
16555
  return features ? /*#__PURE__*/React__default.createElement(React__default.Fragment, null, features.map(id => /*#__PURE__*/React__default.createElement(VisibilityController, {
15998
16556
  key: id,
15999
16557
  drawingId: drawingId,
@@ -16004,72 +16562,27 @@ const FtVisibilityControllerImpl = ({
16004
16562
  const FtVisibilityController = ({
16005
16563
  drawingId
16006
16564
  }) => {
16007
- return /*#__PURE__*/React__default.createElement(ErrorBoundary, null, /*#__PURE__*/React__default.createElement(FtVisibilityControllerImpl, {
16565
+ return /*#__PURE__*/React__default.createElement(FeatureListValidator, {
16566
+ drawingId: drawingId
16567
+ }, /*#__PURE__*/React__default.createElement(FtVisibilityControllerImpl, {
16008
16568
  drawingId: drawingId
16009
16569
  }));
16010
16570
  };
16011
16571
 
16012
16572
  var FtVisibilityController$1 = FtVisibilityController;
16013
16573
 
16014
- function ownKeys$4(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) { symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; }
16574
+ function ownKeys$6(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) { symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; }
16015
16575
 
16016
- function _objectSpread$4(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys$4(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys$4(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
16576
+ function _objectSpread$6(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys$6(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys$6(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
16017
16577
 
16018
16578
  const Divider = props => {
16019
16579
  return /*#__PURE__*/React__default.createElement(Divider$1, _extends({}, props, {
16020
- style: _objectSpread$4({
16580
+ style: _objectSpread$6({
16021
16581
  margin: '0'
16022
16582
  }, props.style)
16023
16583
  }));
16024
16584
  };
16025
16585
 
16026
- const FlexRow = styled.div`
16027
- display: flex;
16028
- flex-direction: row;
16029
- `;
16030
- const FlexReverseRow = styled.div`
16031
- display: flex;
16032
- flex-direction: row-reverse;
16033
- `;
16034
- const Link = styled.a`
16035
- color: #4f4f4f;
16036
- &:hover {
16037
- text-decoration: underline;
16038
- text-decoration-color: #4f4f4f;
16039
- color: #4f4f4f;
16040
- }
16041
- `;
16042
- const HoveredDiv = styled.div`
16043
- width: 100%;
16044
- display: flex;
16045
- justify-content: space-between;
16046
- cursor: default;
16047
- &:hover {
16048
- background-color: #fbfbfb;
16049
- }
16050
- `;
16051
-
16052
- const {
16053
- Text: Text$1
16054
- } = Typography;
16055
- const EntityName = ({
16056
- name,
16057
- disabled,
16058
- strong,
16059
- onClick,
16060
- onMouseEnter,
16061
- onMouseLeave
16062
- }) => {
16063
- return /*#__PURE__*/React__default.createElement(Link, {
16064
- onClick: onClick,
16065
- onMouseEnter: onMouseEnter,
16066
- onMouseLeave: onMouseLeave
16067
- }, /*#__PURE__*/React__default.createElement(Text$1, {
16068
- disabled: disabled,
16069
- strong: strong
16070
- }, name));
16071
- };
16072
-
16073
16586
  function useMenuItems$2(drawingId, featureId, isActive, setEditName) {
16074
16587
  return React__default.useMemo(() => {
16075
16588
  return {
@@ -16093,35 +16606,92 @@ function useMenuItems$2(drawingId, featureId, isActive, setEditName) {
16093
16606
  }, [drawingId, featureId, isActive, setEditName]);
16094
16607
  }
16095
16608
 
16096
- function useIsCustom(drawingId, featureId) {
16609
+ function useIsCustom(drawingId, featureRefId) {
16610
+ const curProduct = useDrawing(drawingId, d => d.structure.currentProduct);
16611
+ const opSeqId = useOperationSequence(drawingId, curProduct);
16612
+ const opSeqChildren = useDrawing(drawingId, d => {
16613
+ var _d$structure$tree;
16614
+
16615
+ return (_d$structure$tree = d.structure.tree[opSeqId || -1]) == null ? void 0 : _d$structure$tree.children;
16616
+ }) || []; // First 7 elements in operationSequence are features created by default (origin, x,y,z axes and planes) => they're not custom
16617
+
16618
+ return opSeqChildren.indexOf(featureRefId) > 6;
16619
+ }
16620
+
16621
+ function usePrecheckErrorId(drawingId, featureId) {
16097
16622
  const curProduct = useDrawing(drawingId, d => d.structure.currentProduct);
16098
16623
  const opSeqId = useOperationSequence(drawingId, curProduct) || -1;
16099
- const opSeqChildren = useDrawing(drawingId, d => d.structure.tree[opSeqId].children || []);
16100
- const referedObjs = React__default.useMemo(() => {
16101
- return opSeqChildren.map(refId => {
16102
- const ref = getDrawing(drawingId).structure.tree[refId];
16103
- return ref.members.refObj.value;
16104
- });
16105
- }, [opSeqChildren, drawingId]); // First 7 elements in operationSequens are features created by default (origin, x,y,z axes and planes) => they're not custom
16624
+ const opSeqChildren = useDrawing(drawingId, d => {
16625
+ var _d$structure$tree$opS;
16626
+
16627
+ return (_d$structure$tree$opS = d.structure.tree[opSeqId]) == null ? void 0 : _d$structure$tree$opS.children;
16628
+ }) || [];
16629
+ const refId = opSeqChildren.find(chId => {
16630
+ var _ref_$members;
16631
+
16632
+ const ref_ = getDrawing(drawingId).structure.tree[chId];
16633
+ return featureId === (ref_ == null ? void 0 : (_ref_$members = ref_.members) == null ? void 0 : _ref_$members.refObj.value);
16634
+ });
16635
+ const refChildren = useDrawing(drawingId, d => {
16636
+ var _d$structure$tree2;
16637
+
16638
+ return (_d$structure$tree2 = d.structure.tree[refId || -1]) == null ? void 0 : _d$structure$tree2.children;
16639
+ }) || [];
16640
+ const errorId = refChildren.find(chId => {
16641
+ var _getDrawing$structure;
16642
+
16643
+ return ((_getDrawing$structure = getDrawing(drawingId).structure.tree[chId]) == null ? void 0 : _getDrawing$structure.class) === CCClasses.BMError;
16644
+ }) || null;
16645
+ return errorId;
16646
+ }
16647
+
16648
+ const ErrorWrapper = styled.div`
16649
+ cursor: pointer;
16650
+ margin-right: 4px;
16651
+ `;
16652
+
16653
+ const PrecheckError = ({
16654
+ drawingId,
16655
+ errorId
16656
+ }) => {
16657
+ var _error$members;
16658
+
16659
+ const error = useDrawing(drawingId, d => d.structure.tree[errorId]);
16660
+ const title = (error == null ? void 0 : (_error$members = error.members) == null ? void 0 : _error$members.errorMessage.value) || '';
16661
+ return /*#__PURE__*/React__default.createElement(ErrorWrapper, null, /*#__PURE__*/React__default.createElement(Tooltip, {
16662
+ title: title
16663
+ }, /*#__PURE__*/React__default.createElement(ExclamationCircleTwoTone, {
16664
+ twoToneColor: "#ff5f5f"
16665
+ })));
16666
+ };
16106
16667
 
16107
- return referedObjs.indexOf(featureId) > 6;
16668
+ function useHasView(drawingId, featureId) {
16669
+ const [hasGraphics, setHasGraphics] = React__default.useState(false);
16670
+ const ftClass = useDrawing(drawingId, d => d.structure.tree[featureId].class);
16671
+ useFeaturePluginDef(ftClass, plugin => setHasGraphics(Boolean(plugin == null ? void 0 : plugin.View)));
16672
+ return hasGraphics;
16108
16673
  }
16109
16674
 
16110
16675
  const Feature = ({
16111
16676
  drawingId,
16112
- featureId
16677
+ featureRefId
16113
16678
  }) => {
16114
- const name = useDrawing(drawingId, d => d.structure.tree[featureId].name);
16115
- const visible = useDrawing(drawingId, d => d.plugin.visible.indexOf(featureId) >= 0);
16116
- const view = useDrawing(drawingId, d => {
16117
- var _d$plugin$refs$featur;
16679
+ const featureId = useDrawing(drawingId, d => {
16680
+ var _d$structure$tree$fea, _d$structure$tree$fea2;
16681
+
16682
+ return (_d$structure$tree$fea = d.structure.tree[featureRefId]) == null ? void 0 : (_d$structure$tree$fea2 = _d$structure$tree$fea.members) == null ? void 0 : _d$structure$tree$fea2.refObj.value;
16683
+ });
16684
+ const name = useDrawing(drawingId, d => {
16685
+ var _d$structure$tree$fea3;
16118
16686
 
16119
- return (_d$plugin$refs$featur = d.plugin.refs[featureId]) == null ? void 0 : _d$plugin$refs$featur.View;
16687
+ return (_d$structure$tree$fea3 = d.structure.tree[featureId]) == null ? void 0 : _d$structure$tree$fea3.name;
16120
16688
  });
16121
- const hasGraphics = Boolean(view);
16689
+ const visible = useDrawing(drawingId, d => d.plugin.visible.indexOf(featureId) >= 0);
16690
+ const hasGraphics = useHasView(drawingId, featureId);
16122
16691
  const isActive = useDrawing(drawingId, d => d.plugin.active.feature === featureId);
16123
- const isCustom = useIsCustom(drawingId, featureId);
16692
+ const isCustom = useIsCustom(drawingId, featureRefId);
16124
16693
  const disabled = useIsDisabled(drawingId, featureId);
16694
+ const errorId = usePrecheckErrorId(drawingId, featureId);
16125
16695
  const [rename, setRename] = React__default.useState(false);
16126
16696
  const onNameClick = React__default.useCallback(() => {
16127
16697
  !disabled && getDrawing(drawingId).api.plugin.setActiveFeature(featureId);
@@ -16142,6 +16712,7 @@ const Feature = ({
16142
16712
  const pluginApi = getDrawing(drawingId).api.plugin;
16143
16713
  pluginApi.setVisiblePlugin(featureId, !visible);
16144
16714
  }, [drawingId, visible, featureId, disabled, rename]);
16715
+ const [isMenuHovered, setIsMenuHovered] = React__default.useState(false);
16145
16716
  const menuItems = useMenuItems$2(drawingId, featureId, isActive, setRename);
16146
16717
  const eyeComponent = React__default.useMemo(() => {
16147
16718
  if (!hasGraphics) return /*#__PURE__*/React__default.createElement("div", {
@@ -16164,51 +16735,20 @@ const Feature = ({
16164
16735
  });
16165
16736
  }, [hasGraphics, visible, disabled, onEyeClick]);
16166
16737
  return /*#__PURE__*/React__default.createElement(HoveredDiv, {
16167
- style: {
16168
- borderBottom: '1px solid #f0f0f0',
16169
- padding: '4px 10px'
16170
- },
16738
+ hovered: isMenuHovered,
16739
+ bordered: true,
16171
16740
  title: String(featureId)
16172
- }, /*#__PURE__*/React__default.createElement(Space, null, eyeComponent, nameComponent), isCustom && /*#__PURE__*/React__default.createElement(Menu, {
16173
- items: menuItems
16174
- }));
16175
- };
16176
-
16177
- function useFeaturesIds(drawingId, curNodeId) {
16178
- const curClass = useDrawing(drawingId, d => d.structure.tree[curNodeId].class);
16179
- const prodId = useDrawing(drawingId, d => {
16180
- if (curClass === CCClasses.CCProductReference || curClass === CCClasses.CCProductReferenceET) {
16181
- const node = d.structure.tree[curNodeId];
16182
- return node.members.productId.value;
16741
+ }, /*#__PURE__*/React__default.createElement(Space, {
16742
+ style: {
16743
+ flex: 1
16183
16744
  }
16184
-
16185
- return curNodeId;
16186
- });
16187
- const featuresIds = useDrawing(drawingId, d => {
16188
- var _d$structure$tree$pro;
16189
-
16190
- return ((_d$structure$tree$pro = d.structure.tree[prodId]) == null ? void 0 : _d$structure$tree$pro.features) || [];
16191
- });
16192
- return featuresIds;
16193
- }
16194
-
16195
- /**
16196
- * Validator for FeatureList component. Checks drawing and currentProduct existance.
16197
- *
16198
- * @param drawingId
16199
- * @returns
16200
- */
16201
-
16202
- const FeatureListValidator = ({
16203
- drawingId,
16204
- children
16205
- }) => {
16206
- const warnings = {};
16207
- useDrawingVerifier(drawingId, warnings);
16208
- useRootOrProdVerifier(drawingId, warnings);
16209
- return /*#__PURE__*/React__default.createElement(ErrorBoundary, {
16210
- warnings: warnings
16211
- }, children);
16745
+ }, eyeComponent, nameComponent), errorId && /*#__PURE__*/React__default.createElement(PrecheckError, {
16746
+ drawingId: drawingId,
16747
+ errorId: errorId
16748
+ }), isCustom && /*#__PURE__*/React__default.createElement(Menu, {
16749
+ items: menuItems,
16750
+ onVisibleChange: setIsMenuHovered
16751
+ }));
16212
16752
  };
16213
16753
 
16214
16754
  const _excluded$1 = ["children"];
@@ -16222,7 +16762,7 @@ const SortableCont = SortableContainer(_ref => {
16222
16762
  });
16223
16763
  const SortableItem = SortableElement(({
16224
16764
  drawingId,
16225
- featureId,
16765
+ featureRefId,
16226
16766
  isRollbackBar
16227
16767
  }) => {
16228
16768
  if (isRollbackBar) return /*#__PURE__*/React__default.createElement("div", {
@@ -16248,36 +16788,53 @@ const SortableItem = SortableElement(({
16248
16788
  }
16249
16789
  }));else return /*#__PURE__*/React__default.createElement(Feature, {
16250
16790
  drawingId: drawingId,
16251
- featureId: featureId
16791
+ featureRefId: featureRefId
16252
16792
  });
16253
16793
  });
16254
16794
 
16255
16795
  const Item$1 = ({
16256
16796
  drawingId,
16257
- featureId
16797
+ featureRefId
16258
16798
  }) => {
16259
16799
  const curPartId = useDrawing(drawingId, d => d.structure.currentProduct || d.structure.root);
16260
- const featuresIds = useFeaturesIds(drawingId, curPartId);
16800
+ const opSeqId = useOperationSequence(drawingId, curPartId);
16801
+ const idx = useDrawing(drawingId, d => {
16802
+ var _d$structure$tree, _d$structure$tree$chi;
16803
+
16804
+ return (_d$structure$tree = d.structure.tree[opSeqId || -1]) == null ? void 0 : (_d$structure$tree$chi = _d$structure$tree.children) == null ? void 0 : _d$structure$tree$chi.indexOf(featureRefId);
16805
+ }) || -1;
16806
+ const featureId = useDrawing(drawingId, d => {
16807
+ var _d$structure$tree$fea, _d$structure$tree$fea2;
16808
+
16809
+ return (_d$structure$tree$fea = d.structure.tree[featureRefId]) == null ? void 0 : (_d$structure$tree$fea2 = _d$structure$tree$fea.members) == null ? void 0 : _d$structure$tree$fea2.refObj.value;
16810
+ });
16261
16811
  const objClass = useDrawing(drawingId, d => {
16262
- var _d$structure$tree$fea;
16812
+ var _d$structure$tree$fea3;
16263
16813
 
16264
- return ((_d$structure$tree$fea = d.structure.tree[featureId]) == null ? void 0 : _d$structure$tree$fea.class) || '';
16814
+ return ((_d$structure$tree$fea3 = d.structure.tree[featureId]) == null ? void 0 : _d$structure$tree$fea3.class) || '';
16265
16815
  });
16266
- const idx = featuresIds.findIndex(fId => fId === featureId);
16816
+ const isFeatureActive = useDrawing(drawingId, d => d.plugin.active.feature !== null) || false;
16267
16817
  const isRollbackBar = objClass === CCClasses.CCRollbackBar;
16818
+ const isDisabled = !isRollbackBar || isFeatureActive;
16268
16819
  return /*#__PURE__*/React__default.createElement(SortableItem, {
16269
16820
  drawingId: drawingId,
16270
- featureId: featureId,
16821
+ featureRefId: featureRefId,
16271
16822
  isRollbackBar: isRollbackBar,
16272
- disabled: !isRollbackBar,
16823
+ disabled: isDisabled,
16273
16824
  index: idx
16274
16825
  });
16275
16826
  };
16276
16827
 
16277
16828
  const List$2 = ({
16278
- featureIds,
16279
16829
  drawingId
16280
16830
  }) => {
16831
+ const curPartId = useDrawing(drawingId, d => d.structure.currentProduct || d.structure.root);
16832
+ const opSeqId = useOperationSequence(drawingId, curPartId);
16833
+ const featureRefIds = useDrawing(drawingId, d => {
16834
+ var _d$structure$tree2;
16835
+
16836
+ return (_d$structure$tree2 = d.structure.tree[opSeqId || -1]) == null ? void 0 : _d$structure$tree2.children;
16837
+ }) || [];
16281
16838
  return /*#__PURE__*/React__default.createElement(SortableCont, {
16282
16839
  helperClass: "row-dragging",
16283
16840
  lockAxis: "y",
@@ -16285,11 +16842,8 @@ const List$2 = ({
16285
16842
  oldIndex,
16286
16843
  newIndex
16287
16844
  }) => {
16288
- var _object$features;
16289
-
16290
16845
  const rootId_ = getDrawing(drawingId).structure.currentProduct;
16291
- const object = getDrawing(drawingId).structure.tree[rootId_];
16292
- const features = (_object$features = object == null ? void 0 : object.features) != null ? _object$features : [];
16846
+ const features = getFeaturesIds(drawingId, rootId_);
16293
16847
  const offset = 4;
16294
16848
  const move = ccAPI.feature.rollback.calculateMovement(oldIndex, newIndex, features, offset);
16295
16849
 
@@ -16299,30 +16853,19 @@ const List$2 = ({
16299
16853
  ccAPI.feature.rollback.moveBefore(drawingId, move.featureId).catch();
16300
16854
  }
16301
16855
  }
16302
- }, featureIds.map(fId => /*#__PURE__*/React__default.createElement(Item$1, {
16303
- key: fId,
16856
+ }, featureRefIds.map(refId => /*#__PURE__*/React__default.createElement(Item$1, {
16857
+ key: refId,
16304
16858
  drawingId: drawingId,
16305
- featureId: fId
16859
+ featureRefId: refId
16306
16860
  })));
16307
16861
  };
16308
16862
 
16309
- const FeatureListImpl = ({
16310
- drawingId
16311
- }) => {
16312
- const curPartId = useDrawing(drawingId, d => d.structure.currentProduct || d.structure.root);
16313
- const featuresIds = useFeaturesIds(drawingId, curPartId);
16314
- return /*#__PURE__*/React__default.createElement(List$2, {
16315
- drawingId: drawingId,
16316
- featureIds: featuresIds
16317
- });
16318
- };
16319
-
16320
16863
  const FeatureList = ({
16321
16864
  drawingId
16322
16865
  }) => {
16323
16866
  return /*#__PURE__*/React__default.createElement(FeatureListValidator, {
16324
16867
  drawingId: drawingId
16325
- }, /*#__PURE__*/React__default.createElement(FeatureListImpl, {
16868
+ }, /*#__PURE__*/React__default.createElement(List$2, {
16326
16869
  drawingId: drawingId
16327
16870
  }));
16328
16871
  };
@@ -16348,35 +16891,6 @@ function useMenuItems$1(drawingId, objectId, setRename) {
16348
16891
  }, [drawingId, objectId, setRename]);
16349
16892
  }
16350
16893
 
16351
- const Indent = () => {
16352
- return /*#__PURE__*/React__default.createElement("span", {
16353
- className: "ant-tree-indent"
16354
- }, /*#__PURE__*/React__default.createElement("span", {
16355
- className: "ant-tree-indent-unit"
16356
- }));
16357
- };
16358
- const Indents = ({
16359
- level
16360
- }) => {
16361
- const arr = Array.from(Array(level).keys());
16362
- return /*#__PURE__*/React__default.createElement(React__default.Fragment, null, arr.map(i => /*#__PURE__*/React__default.createElement(Indent, {
16363
- key: i
16364
- })));
16365
- };
16366
- const CollapseButton = ({
16367
- collapsed,
16368
- onClick
16369
- }) => {
16370
- return /*#__PURE__*/React__default.createElement("span", {
16371
- className: "ant-tree-switcher",
16372
- onClick: onClick
16373
- }, /*#__PURE__*/React__default.createElement("span", {
16374
- role: "img",
16375
- "aria-label": "caret-down",
16376
- className: "anticon anticon-caret-down ant-tree-switcher-icon"
16377
- }, collapsed ? /*#__PURE__*/React__default.createElement(CaretRightOutlined, null) : /*#__PURE__*/React__default.createElement(CaretDownOutlined, null)));
16378
- };
16379
-
16380
16894
  function setProductsHidden(drawingId, prodId, hidden) {
16381
16895
  var _getDrawing$structure;
16382
16896
 
@@ -16425,6 +16939,7 @@ const NodeTitle = ({
16425
16939
  const referedObj = useDrawing(drawingId, d => d.structure.tree[referedId]);
16426
16940
  const name = referedObj.name;
16427
16941
  const [rename, setRename] = React__default.useState(false);
16942
+ const [isMenuHovered, setIsMenuHovered] = React__default.useState(false);
16428
16943
  const menuItems = useMenuItems$1(drawingId, refId, setRename);
16429
16944
  const nameComponent = rename ? /*#__PURE__*/React__default.createElement(NameEdit, {
16430
16945
  drawingId: drawingId,
@@ -16437,11 +16952,14 @@ const NodeTitle = ({
16437
16952
  onClick: onClick,
16438
16953
  name: name
16439
16954
  }));
16440
- return /*#__PURE__*/React__default.createElement(HoveredDiv, null, /*#__PURE__*/React__default.createElement(Space, null, /*#__PURE__*/React__default.createElement(EyeIcon, {
16955
+ return /*#__PURE__*/React__default.createElement(HoveredDiv, {
16956
+ hovered: isMenuHovered
16957
+ }, /*#__PURE__*/React__default.createElement(Space, null, /*#__PURE__*/React__default.createElement(EyeIcon, {
16441
16958
  drawingId: drawingId,
16442
16959
  refId: refId
16443
16960
  }), referedObj.class === CCClasses.CCAssembly ? /*#__PURE__*/React__default.createElement(AppstoreOutlined, null) : /*#__PURE__*/React__default.createElement(FileOutlined, null), nameComponent), /*#__PURE__*/React__default.createElement(Menu, {
16444
- items: menuItems
16961
+ items: menuItems,
16962
+ onVisibleChange: setIsMenuHovered
16445
16963
  }));
16446
16964
  };
16447
16965
 
@@ -16537,6 +17055,7 @@ const AssemblyTreeHeader = ({
16537
17055
  const currNode = useCurrentNode(drawingId);
16538
17056
  const objDetails = useObjectDetails(drawingId, (currNode == null ? void 0 : currNode.id) || -1);
16539
17057
  const showBackBtn = React__default.useMemo(() => pStackNotEmpty || !objDetails.isRoot && (objDetails.isAssemblyNode || objDetails.isAssembly), [objDetails.isAssembly, objDetails.isAssemblyNode, objDetails.isRoot, pStackNotEmpty]);
17058
+ const isFeatureActive = useDrawing(drawingId, d => d.plugin.active.feature !== null) || false;
16540
17059
  const name = currProd ? currProd.name : currNode ? currNode.name : '';
16541
17060
  const [rename, setRename] = React__default.useState(false);
16542
17061
  const [showNameChoice, setShowNameChoice] = React__default.useState(false);
@@ -16567,6 +17086,19 @@ const AssemblyTreeHeader = ({
16567
17086
  title: 'Export node as ' + type,
16568
17087
  placement: "right"
16569
17088
  }, type))));
17089
+ const exportComponent = isFeatureActive ? /*#__PURE__*/React__default.createElement(Tooltip$1, {
17090
+ title: "All features should be closed before exporting",
17091
+ placement: "left"
17092
+ }, /*#__PURE__*/React__default.createElement(Button, {
17093
+ icon: /*#__PURE__*/React__default.createElement(ExportOutlined, null),
17094
+ size: "small",
17095
+ disabled: true
17096
+ })) : /*#__PURE__*/React__default.createElement(Dropdown, {
17097
+ overlay: menu
17098
+ }, /*#__PURE__*/React__default.createElement(Button, {
17099
+ icon: /*#__PURE__*/React__default.createElement(ExportOutlined, null),
17100
+ size: "small"
17101
+ }));
16570
17102
  const nameComponent = rename ? /*#__PURE__*/React__default.createElement(NameEdit, {
16571
17103
  drawingId: drawingId,
16572
17104
  objId: (currProd == null ? void 0 : currProd.id) || -1,
@@ -16581,12 +17113,7 @@ const AssemblyTreeHeader = ({
16581
17113
  size: "small",
16582
17114
  icon: /*#__PURE__*/React__default.createElement(LeftOutlined, null),
16583
17115
  onClick: () => api.assemblyTree.goBack(drawingId)
16584
- }), nameComponent), /*#__PURE__*/React__default.createElement(Space, null, /*#__PURE__*/React__default.createElement(Dropdown, {
16585
- overlay: menu
16586
- }, /*#__PURE__*/React__default.createElement(Button, {
16587
- icon: /*#__PURE__*/React__default.createElement(ExportOutlined, null),
16588
- size: "small"
16589
- })), mode === EditMode.Assembly && /*#__PURE__*/React__default.createElement(React__default.Fragment, null, /*#__PURE__*/React__default.createElement(Tooltip$1, {
17116
+ }), nameComponent), /*#__PURE__*/React__default.createElement(Space, null, exportComponent, mode === EditMode.Assembly && /*#__PURE__*/React__default.createElement(React__default.Fragment, null, /*#__PURE__*/React__default.createElement(Tooltip$1, {
16590
17117
  title: "Convert to subassembly"
16591
17118
  }, /*#__PURE__*/React__default.createElement(Button, {
16592
17119
  onClick: () => setShowNameChoice(true),
@@ -16767,6 +17294,7 @@ const Entity = ({
16767
17294
  const isActive = useDrawing(drawingId, d => d.plugin.active.feature === constraintId);
16768
17295
  const hover = useComponentInteraction(drawingId, state => state.api);
16769
17296
  const [rename, setRename] = React__default.useState(false);
17297
+ const [isMenuHovered, setIsMenuHovered] = React__default.useState(false);
16770
17298
  const menuItems = useMenuItems$2(drawingId, constraintId, isActive, setRename);
16771
17299
  const onNameClick = React__default.useCallback(() => {
16772
17300
  getDrawing(drawingId).api.plugin.setActiveFeature(constraintId);
@@ -16790,12 +17318,11 @@ const Entity = ({
16790
17318
  onMouseLeave: onMouseLeave
16791
17319
  });
16792
17320
  return /*#__PURE__*/React__default.createElement(HoveredDiv, {
16793
- style: {
16794
- borderBottom: '1px solid #f0f0f0',
16795
- padding: '4px 10px'
16796
- }
17321
+ hovered: isMenuHovered,
17322
+ bordered: true
16797
17323
  }, /*#__PURE__*/React__default.createElement(Space, null, nameComponent), /*#__PURE__*/React__default.createElement(Menu, {
16798
- items: menuItems
17324
+ items: menuItems,
17325
+ onVisibleChange: setIsMenuHovered
16799
17326
  }));
16800
17327
  }; // TODO: Create external component
16801
17328
 
@@ -16929,7 +17456,8 @@ const ColorPicker = ({
16929
17456
  const geomApi = getDrawing(drawingId).api.geometry;
16930
17457
  geomApi.setConfig(solidId, {
16931
17458
  meshes: {
16932
- color: undefined
17459
+ color: undefined,
17460
+ opacity: undefined
16933
17461
  }
16934
17462
  });
16935
17463
  setShowPicker(false);
@@ -16939,7 +17467,8 @@ const ColorPicker = ({
16939
17467
  const geomApi = getDrawing(drawingId).api.geometry;
16940
17468
  geomApi.setConfig(solidId, {
16941
17469
  meshes: {
16942
- color: undefined
17470
+ color: undefined,
17471
+ opacity: undefined
16943
17472
  }
16944
17473
  });
16945
17474
  setUColor({
@@ -17045,12 +17574,11 @@ const Solid = ({
17045
17574
  }) || -1;
17046
17575
  const ccSolid = useDrawing(drawingId, d => d.structure.tree[solidOwner]);
17047
17576
  const [rename, setRename] = React__default.useState(false);
17577
+ const [isMenuHovered, setIsMenuHovered] = React__default.useState(false);
17048
17578
  const menuItems = useMenuItems(setRename);
17049
17579
  return /*#__PURE__*/React__default.createElement(HoveredDiv, {
17050
- style: {
17051
- borderBottom: '1px solid #f0f0f0',
17052
- padding: '4px 10px'
17053
- }
17580
+ hovered: isMenuHovered,
17581
+ bordered: true
17054
17582
  }, /*#__PURE__*/React__default.createElement(Space, null, /*#__PURE__*/React__default.createElement(EyeComponent, {
17055
17583
  drawingId: drawingId,
17056
17584
  solidId: solidId
@@ -17063,7 +17591,8 @@ const Solid = ({
17063
17591
  drawingId: drawingId,
17064
17592
  solidId: solidId
17065
17593
  }), /*#__PURE__*/React__default.createElement(Menu, {
17066
- items: menuItems
17594
+ items: menuItems,
17595
+ onVisibleChange: setIsMenuHovered
17067
17596
  })));
17068
17597
  }; // TODO: Create external component
17069
17598
 
@@ -17212,9 +17741,9 @@ const Spinner = styled.div`
17212
17741
  transform: translateZ(0);
17213
17742
  `;
17214
17743
 
17215
- function ownKeys$3(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) { symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; }
17744
+ function ownKeys$5(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) { symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; }
17216
17745
 
17217
- function _objectSpread$3(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys$3(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys$3(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
17746
+ function _objectSpread$5(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys$5(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys$5(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
17218
17747
  const LoadingWrapper = styled.div`
17219
17748
  position: absolute;
17220
17749
  display: flex;
@@ -17235,7 +17764,7 @@ const LoadingScreen = ({
17235
17764
  children
17236
17765
  }) => {
17237
17766
  return /*#__PURE__*/React__default.createElement("div", {
17238
- style: _objectSpread$3(_objectSpread$3({}, style), {}, {
17767
+ style: _objectSpread$5(_objectSpread$5({}, style), {}, {
17239
17768
  position: 'relative'
17240
17769
  })
17241
17770
  }, isLoading && /*#__PURE__*/React__default.createElement(LoadingWrapper, null, /*#__PURE__*/React__default.createElement(Spinner, null), /*#__PURE__*/React__default.createElement("div", null, "Loading...")), children);
@@ -17379,9 +17908,9 @@ const useResize = (x, y, width, height, onResize) => {
17379
17908
 
17380
17909
  const _excluded = ["id", "modalState", "dispatch", "visible", "children", "title", "initialWidth", "initialHeight", "initialX", "initialY", "resizable", "minPosition", "maxPosition"];
17381
17910
 
17382
- function ownKeys$2(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) { symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; }
17911
+ function ownKeys$4(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) { symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; }
17383
17912
 
17384
- function _objectSpread$2(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys$2(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys$2(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
17913
+ function _objectSpread$4(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys$4(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys$4(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
17385
17914
  const modalStyle = {
17386
17915
  margin: 0,
17387
17916
  paddingBottom: 0,
@@ -17451,7 +17980,7 @@ function DraggableModalInnerNonMemo(_ref) {
17451
17980
  width,
17452
17981
  height
17453
17982
  } = modalState;
17454
- const style = useMemo(() => _objectSpread$2(_objectSpread$2({}, modalStyle), {}, {
17983
+ const style = useMemo(() => _objectSpread$4(_objectSpread$4({}, modalStyle), {}, {
17455
17984
  top: y,
17456
17985
  left: x,
17457
17986
  height: resizable ? height : 'auto'
@@ -17461,14 +17990,14 @@ function DraggableModalInnerNonMemo(_ref) {
17461
17990
  type: 'focus',
17462
17991
  id
17463
17992
  }), [id, dispatch]);
17464
- const onDragWithID = useCallback(args => dispatch(_objectSpread$2(_objectSpread$2({
17993
+ const onDragWithID = useCallback(args => dispatch(_objectSpread$4(_objectSpread$4({
17465
17994
  type: 'drag',
17466
17995
  id
17467
17996
  }, args), {}, {
17468
17997
  minPosition,
17469
17998
  maxPosition
17470
17999
  })), [dispatch, id, minPosition, maxPosition]);
17471
- const onResizeWithID = useCallback(args => dispatch(_objectSpread$2({
18000
+ const onResizeWithID = useCallback(args => dispatch(_objectSpread$4({
17472
18001
  type: 'resize',
17473
18002
  id
17474
18003
  }, args)), [dispatch, id]);
@@ -17507,9 +18036,9 @@ const getWindowSize = () => ({
17507
18036
 
17508
18037
  const clamp = (min, max, value) => Math.max(min, Math.min(max, value));
17509
18038
 
17510
- function ownKeys$1(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) { symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; }
18039
+ function ownKeys$3(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) { symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; }
17511
18040
 
17512
- function _objectSpread$1(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys$1(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys$1(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
18041
+ function _objectSpread$3(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys$3(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys$3(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
17513
18042
 
17514
18043
  const mapObject = (o, f) => Object.assign({}, ...Object.keys(o).map(k => ({
17515
18044
  [k]: f(o[k])
@@ -17609,10 +18138,10 @@ const draggableModalReducer = (state, action) => {
17609
18138
  switch (action.type) {
17610
18139
  case 'resize':
17611
18140
  const size = clampResize(state.windowSize.width, state.windowSize.height, action.x, action.y, action.width, action.height);
17612
- return _objectSpread$1(_objectSpread$1({}, state), {}, {
18141
+ return _objectSpread$3(_objectSpread$3({}, state), {}, {
17613
18142
  maxZIndex: getNextZIndex(state, action.id),
17614
- modals: _objectSpread$1(_objectSpread$1({}, state.modals), {}, {
17615
- [action.id]: _objectSpread$1(_objectSpread$1(_objectSpread$1({}, state.modals[action.id]), size), {}, {
18143
+ modals: _objectSpread$3(_objectSpread$3({}, state.modals), {}, {
18144
+ [action.id]: _objectSpread$3(_objectSpread$3(_objectSpread$3({}, state.modals[action.id]), size), {}, {
17616
18145
  zIndex: getNextZIndex(state, action.id)
17617
18146
  })
17618
18147
  })
@@ -17620,10 +18149,10 @@ const draggableModalReducer = (state, action) => {
17620
18149
 
17621
18150
  case 'drag':
17622
18151
  const modal = state.modals[action.id];
17623
- return _objectSpread$1(_objectSpread$1({}, state), {}, {
18152
+ return _objectSpread$3(_objectSpread$3({}, state), {}, {
17624
18153
  maxZIndex: getNextZIndex(state, action.id),
17625
- modals: _objectSpread$1(_objectSpread$1({}, state.modals), {}, {
17626
- [action.id]: _objectSpread$1(_objectSpread$1(_objectSpread$1({}, state.modals[action.id]), clampDrag(action.x, action.y, state.modals[action.id].width || 0, state.modals[action.id].height || 0, modal.maxPosition.x ? Math.min(modal.maxPosition.x, state.windowSize.width) : state.windowSize.width, modal.maxPosition.y ? Math.min(modal.maxPosition.y, state.windowSize.height) : state.windowSize.height, ((_action$minPosition = action.minPosition) == null ? void 0 : _action$minPosition.x) || 0, ((_action$minPosition2 = action.minPosition) == null ? void 0 : _action$minPosition2.y) || 0)), {}, {
18154
+ modals: _objectSpread$3(_objectSpread$3({}, state.modals), {}, {
18155
+ [action.id]: _objectSpread$3(_objectSpread$3(_objectSpread$3({}, state.modals[action.id]), clampDrag(action.x, action.y, state.modals[action.id].width || 0, state.modals[action.id].height || 0, modal.maxPosition.x ? Math.min(modal.maxPosition.x, state.windowSize.width) : state.windowSize.width, modal.maxPosition.y ? Math.min(modal.maxPosition.y, state.windowSize.height) : state.windowSize.height, ((_action$minPosition = action.minPosition) == null ? void 0 : _action$minPosition.x) || 0, ((_action$minPosition2 = action.minPosition) == null ? void 0 : _action$minPosition2.y) || 0)), {}, {
17627
18156
  zIndex: getNextZIndex(state, action.id)
17628
18157
  })
17629
18158
  })
@@ -17643,10 +18172,10 @@ const draggableModalReducer = (state, action) => {
17643
18172
  // modalState.height || 0,
17644
18173
  // )
17645
18174
 
17646
- return _objectSpread$1(_objectSpread$1({}, state), {}, {
18175
+ return _objectSpread$3(_objectSpread$3({}, state), {}, {
17647
18176
  maxZIndex: state.maxZIndex + 1,
17648
- modals: _objectSpread$1(_objectSpread$1({}, state.modals), {}, {
17649
- [action.id]: _objectSpread$1(_objectSpread$1(_objectSpread$1({}, modalState_), position), {}, {
18177
+ modals: _objectSpread$3(_objectSpread$3({}, state.modals), {}, {
18178
+ [action.id]: _objectSpread$3(_objectSpread$3(_objectSpread$3({}, modalState_), position), {}, {
17650
18179
  // ...size,
17651
18180
  zIndex: state.maxZIndex + 1,
17652
18181
  visible: true
@@ -17657,10 +18186,10 @@ const draggableModalReducer = (state, action) => {
17657
18186
 
17658
18187
  case 'focus':
17659
18188
  const modalState = state.modals[action.id];
17660
- return _objectSpread$1(_objectSpread$1({}, state), {}, {
18189
+ return _objectSpread$3(_objectSpread$3({}, state), {}, {
17661
18190
  maxZIndex: state.maxZIndex + 1,
17662
- modals: _objectSpread$1(_objectSpread$1({}, state.modals), {}, {
17663
- [action.id]: _objectSpread$1(_objectSpread$1({}, modalState), {}, {
18191
+ modals: _objectSpread$3(_objectSpread$3({}, state.modals), {}, {
18192
+ [action.id]: _objectSpread$3(_objectSpread$3({}, modalState), {}, {
17664
18193
  zIndex: state.maxZIndex + 1
17665
18194
  })
17666
18195
  })
@@ -17669,9 +18198,9 @@ const draggableModalReducer = (state, action) => {
17669
18198
  case 'hide':
17670
18199
  {
17671
18200
  const modalState_ = state.modals[action.id];
17672
- return _objectSpread$1(_objectSpread$1({}, state), {}, {
17673
- modals: _objectSpread$1(_objectSpread$1({}, state.modals), {}, {
17674
- [action.id]: _objectSpread$1(_objectSpread$1({}, modalState_), {}, {
18201
+ return _objectSpread$3(_objectSpread$3({}, state), {}, {
18202
+ modals: _objectSpread$3(_objectSpread$3({}, state.modals), {}, {
18203
+ [action.id]: _objectSpread$3(_objectSpread$3({}, modalState_), {}, {
17675
18204
  visible: false
17676
18205
  })
17677
18206
  })
@@ -17679,26 +18208,26 @@ const draggableModalReducer = (state, action) => {
17679
18208
  }
17680
18209
 
17681
18210
  case 'mount':
17682
- const initialState = getInitialModalState(_objectSpread$1({}, action.intialState));
17683
- return _objectSpread$1(_objectSpread$1({}, state), {}, {
18211
+ const initialState = getInitialModalState(_objectSpread$3({}, action.intialState));
18212
+ return _objectSpread$3(_objectSpread$3({}, state), {}, {
17684
18213
  maxZIndex: state.maxZIndex + 1,
17685
- modals: _objectSpread$1(_objectSpread$1({}, state.modals), {}, {
17686
- [action.id]: _objectSpread$1(_objectSpread$1(_objectSpread$1({}, state.modals[action.id]), initialState), {}, {
18214
+ modals: _objectSpread$3(_objectSpread$3({}, state.modals), {}, {
18215
+ [action.id]: _objectSpread$3(_objectSpread$3(_objectSpread$3({}, state.modals[action.id]), initialState), {}, {
17687
18216
  zIndex: state.maxZIndex + 1
17688
18217
  })
17689
18218
  })
17690
18219
  });
17691
18220
 
17692
18221
  case 'unmount':
17693
- const modalsClone = _objectSpread$1({}, state.modals);
18222
+ const modalsClone = _objectSpread$3({}, state.modals);
17694
18223
 
17695
18224
  delete modalsClone[action.id];
17696
- return _objectSpread$1(_objectSpread$1({}, state), {}, {
18225
+ return _objectSpread$3(_objectSpread$3({}, state), {}, {
17697
18226
  modals: modalsClone
17698
18227
  });
17699
18228
 
17700
18229
  case 'windowResize':
17701
- return _objectSpread$1(_objectSpread$1({}, state), {}, {
18230
+ return _objectSpread$3(_objectSpread$3({}, state), {}, {
17702
18231
  windowSize: action.size,
17703
18232
  modals: mapObject(state.modals, modalState_ => {
17704
18233
  if (!modalState_.visible) {
@@ -17714,24 +18243,24 @@ const draggableModalReducer = (state, action) => {
17714
18243
  // modalState.height || 0,
17715
18244
  // )
17716
18245
 
17717
- return _objectSpread$1(_objectSpread$1({}, modalState_), position);
18246
+ return _objectSpread$3(_objectSpread$3({}, modalState_), position);
17718
18247
  })
17719
18248
  });
17720
18249
 
17721
18250
  case 'updateMinPosition':
17722
- return _objectSpread$1(_objectSpread$1({}, state), {}, {
17723
- modals: _objectSpread$1(_objectSpread$1({}, state.modals), {}, {
17724
- [action.id]: _objectSpread$1(_objectSpread$1({}, state.modals[action.id]), {}, {
17725
- minPosition: _objectSpread$1(_objectSpread$1({}, state.modals[action.id].minPosition), action.value)
18251
+ return _objectSpread$3(_objectSpread$3({}, state), {}, {
18252
+ modals: _objectSpread$3(_objectSpread$3({}, state.modals), {}, {
18253
+ [action.id]: _objectSpread$3(_objectSpread$3({}, state.modals[action.id]), {}, {
18254
+ minPosition: _objectSpread$3(_objectSpread$3({}, state.modals[action.id].minPosition), action.value)
17726
18255
  })
17727
18256
  })
17728
18257
  });
17729
18258
 
17730
18259
  case 'updateMaxPosition':
17731
- return _objectSpread$1(_objectSpread$1({}, state), {}, {
17732
- modals: _objectSpread$1(_objectSpread$1({}, state.modals), {}, {
17733
- [action.id]: _objectSpread$1(_objectSpread$1({}, state.modals[action.id]), {}, {
17734
- maxPosition: _objectSpread$1(_objectSpread$1({}, state.modals[action.id].maxPosition), action.value)
18260
+ return _objectSpread$3(_objectSpread$3({}, state), {}, {
18261
+ modals: _objectSpread$3(_objectSpread$3({}, state.modals), {}, {
18262
+ [action.id]: _objectSpread$3(_objectSpread$3({}, state.modals[action.id]), {}, {
18263
+ maxPosition: _objectSpread$3(_objectSpread$3({}, state.modals[action.id].maxPosition), action.value)
17735
18264
  })
17736
18265
  })
17737
18266
  });
@@ -17744,9 +18273,9 @@ const draggableModalReducer = (state, action) => {
17744
18273
  var css_248z = "/**\n * NOTE: This is not compiled.\n */\n\n.ant-design-draggable-modal {\n pointer-events: none;\n overflow: hidden !important;\n}\n\n.ant-design-draggable-modal .ant-modal {\n display: flex;\n max-width: none;\n transform-origin: 50% 50% !important;\n}\n\n.ant-design-draggable-modal .ant-modal-content {\n flex: 1;\n display: flex;\n flex-direction: column;\n}\n\n.ant-design-draggable-modal .ant-modal-header {\n flex: 0;\n padding: 0;\n}\n\n.ant-design-draggable-modal .ant-modal-footer {\n flex: 0;\n padding: 16px;\n}\n\n.ant-design-draggable-modal .ant-design-draggable-modal-title {\n cursor: move;\n padding: 16px;\n}\n\n.ant-design-draggable-modal .ant-design-draggable-modal-title::before {\n content: '\\00a0';\n}\n\n.ant-design-draggable-modal .ant-modal-body {\n flex: 1;\n overflow-y: auto;\n padding: 16px;\n}\n\n.ant-design-draggable-modal-resize-handle-inner {\n width: 12px;\n right: 14px;\n border: 2px solid grey;\n height: 12px;\n bottom: 14px;\n position: absolute;\n border-top: 0;\n border-left: 0;\n}\n\n.ant-design-draggable-modal-resize-handle {\n right: -10px;\n width: 44px;\n bottom: -10px;\n cursor: se-resize;\n height: 44px;\n position: absolute;\n}\n";
17745
18274
  styleInject(css_248z);
17746
18275
 
17747
- function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) { symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; }
18276
+ function ownKeys$2(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) { symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; }
17748
18277
 
17749
- function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
18278
+ function _objectSpread$2(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys$2(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys$2(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
17750
18279
  const DraggableModal = props => {
17751
18280
  // Get the unique ID of this modal.
17752
18281
  const id = useUID(); // Get modal provider.
@@ -17781,7 +18310,7 @@ const DraggableModal = props => {
17781
18310
  maxPosition
17782
18311
  } = props;
17783
18312
  React.useEffect(() => {
17784
- const value = _objectSpread({
18313
+ const value = _objectSpread$2({
17785
18314
  x: null,
17786
18315
  y: null
17787
18316
  }, maxPosition);
@@ -17796,7 +18325,7 @@ const DraggableModal = props => {
17796
18325
  minPosition
17797
18326
  } = props;
17798
18327
  React.useEffect(() => {
17799
- const value = _objectSpread({
18328
+ const value = _objectSpread$2({
17800
18329
  x: null,
17801
18330
  y: null
17802
18331
  }, minPosition);
@@ -17862,15 +18391,17 @@ const FPluginWindow = ({
17862
18391
  const FeaturePlugin = ({
17863
18392
  drawingId
17864
18393
  }) => {
17865
- const activeFeature = useDrawing(drawingId, d => d.plugin.active.feature);
18394
+ const activeFeature = useDrawing(drawingId, d => d.plugin.active.feature); // Feature plugins are lazy loaded, so it's possible that recently activated feature plugins hasn't been created yet
18395
+
18396
+ const isCreated = usePluginExists(drawingId, activeFeature || -1);
17866
18397
  const name = useDrawing(drawingId, d => {
17867
- if (!activeFeature) return '';
18398
+ if (!activeFeature || !isCreated) return '';
17868
18399
  const objId = d.plugin.refs[activeFeature].objectId;
17869
18400
  const plugin = d.structure.tree[objId];
17870
18401
  return (plugin == null ? void 0 : plugin.name) || '';
17871
18402
  });
17872
18403
  const pluginAPI = getDrawing(drawingId).api.plugin;
17873
- return /*#__PURE__*/React__default.createElement(React__default.Fragment, null, /*#__PURE__*/React__default.createElement(DraggableModalProvider, null, activeFeature && /*#__PURE__*/React__default.createElement(DraggableModal, {
18404
+ return /*#__PURE__*/React__default.createElement(React__default.Fragment, null, /*#__PURE__*/React__default.createElement(DraggableModalProvider, null, activeFeature && isCreated && /*#__PURE__*/React__default.createElement(DraggableModal, {
17874
18405
  visible: true,
17875
18406
  cancelButtonProps: {
17876
18407
  hidden: true
@@ -17999,7 +18530,7 @@ const ViewPlugButtons = ({
17999
18530
  }));
18000
18531
  };
18001
18532
 
18002
- const Icon = ({
18533
+ const Icon$1 = ({
18003
18534
  url
18004
18535
  }) => {
18005
18536
  return /*#__PURE__*/React__default.createElement("svg", {
@@ -18048,20 +18579,20 @@ const useOptionCommands = drawingId => {
18048
18579
  const commands = React__default.useMemo(() => {
18049
18580
  return [{
18050
18581
  label: 'Zoom fit',
18051
- icon: /*#__PURE__*/React__default.createElement(Icon, {
18582
+ icon: /*#__PURE__*/React__default.createElement(Icon$1, {
18052
18583
  url: img$q
18053
18584
  }),
18054
18585
  command: () => zoomToFit(drawingId)
18055
18586
  }, {
18056
18587
  label: 'Meshes',
18057
- icon: /*#__PURE__*/React__default.createElement(Icon, {
18588
+ icon: /*#__PURE__*/React__default.createElement(Icon$1, {
18058
18589
  url: img$p
18059
18590
  }),
18060
18591
  isChecked: showFaces,
18061
18592
  command: () => setShowFaces(!showFaces)
18062
18593
  }, {
18063
18594
  label: 'Wireframe',
18064
- icon: /*#__PURE__*/React__default.createElement(Icon, {
18595
+ icon: /*#__PURE__*/React__default.createElement(Icon$1, {
18065
18596
  url: img$n
18066
18597
  }),
18067
18598
  isChecked: showWireframe,
@@ -18069,14 +18600,14 @@ const useOptionCommands = drawingId => {
18069
18600
  command: () => setShowWireframe(!showWireframe)
18070
18601
  }, {
18071
18602
  label: 'Edges',
18072
- icon: /*#__PURE__*/React__default.createElement(Icon, {
18603
+ icon: /*#__PURE__*/React__default.createElement(Icon$1, {
18073
18604
  url: img$o
18074
18605
  }),
18075
18606
  isChecked: showEdges,
18076
18607
  command: () => setShowEdges(!showEdges)
18077
18608
  }, {
18078
18609
  label: 'Vertices',
18079
- icon: /*#__PURE__*/React__default.createElement(Icon, {
18610
+ icon: /*#__PURE__*/React__default.createElement(Icon$1, {
18080
18611
  url: img$E
18081
18612
  }),
18082
18613
  isChecked: showVertices,
@@ -18172,136 +18703,136 @@ const PartModeCmds = (drawingId, rootId) => {
18172
18703
  return {
18173
18704
  Sketch: {
18174
18705
  label: 'Sketch',
18175
- icon: /*#__PURE__*/React__default.createElement(Icon, {
18706
+ icon: /*#__PURE__*/React__default.createElement(Icon$1, {
18176
18707
  url: img$w
18177
18708
  }),
18178
18709
  callback: wrapper(() => ccAPI.sketcher.createSketch(drawingId, rootId))
18179
18710
  },
18180
18711
  Work: [{
18181
18712
  label: 'Workpoint',
18182
- icon: /*#__PURE__*/React__default.createElement(Icon, {
18713
+ icon: /*#__PURE__*/React__default.createElement(Icon$1, {
18183
18714
  url: img$m
18184
18715
  }),
18185
18716
  callback: wrapper(() => featureApi.createWorkPoint(drawingId, rootId))
18186
18717
  }, {
18187
18718
  label: 'Workaxis',
18188
- icon: /*#__PURE__*/React__default.createElement(Icon, {
18719
+ icon: /*#__PURE__*/React__default.createElement(Icon$1, {
18189
18720
  url: img$l
18190
18721
  }),
18191
18722
  callback: wrapper(() => featureApi.createWorkAxis(drawingId, rootId))
18192
18723
  }, {
18193
18724
  label: 'Workplane',
18194
- icon: /*#__PURE__*/React__default.createElement(Icon, {
18725
+ icon: /*#__PURE__*/React__default.createElement(Icon$1, {
18195
18726
  url: img$k
18196
18727
  }),
18197
18728
  callback: wrapper(() => featureApi.createWorkPlane(drawingId, rootId))
18198
18729
  }, {
18199
18730
  label: 'WCsys',
18200
- icon: /*#__PURE__*/React__default.createElement(Icon, {
18731
+ icon: /*#__PURE__*/React__default.createElement(Icon$1, {
18201
18732
  url: img$j
18202
18733
  }),
18203
18734
  callback: wrapper(() => featureApi.createWorkCoordSystem(drawingId, rootId))
18204
18735
  }],
18205
18736
  Solid: [{
18206
18737
  label: 'Extrusion',
18207
- icon: /*#__PURE__*/React__default.createElement(Icon, {
18738
+ icon: /*#__PURE__*/React__default.createElement(Icon$1, {
18208
18739
  url: img$G
18209
18740
  }),
18210
18741
  callback: wrapper(() => featureApi.createExtrusion(drawingId, rootId))
18211
18742
  }, {
18212
18743
  label: 'Revolve',
18213
- icon: /*#__PURE__*/React__default.createElement(Icon, {
18744
+ icon: /*#__PURE__*/React__default.createElement(Icon$1, {
18214
18745
  url: img$F
18215
18746
  }),
18216
18747
  callback: wrapper(() => featureApi.createRevolve(drawingId, rootId))
18217
18748
  }],
18218
18749
  Boolean: {
18219
18750
  label: 'Boolean',
18220
- icon: /*#__PURE__*/React__default.createElement(Icon, {
18751
+ icon: /*#__PURE__*/React__default.createElement(Icon$1, {
18221
18752
  url: img$i
18222
18753
  }),
18223
18754
  callback: wrapper(() => featureApi.createBooleanOperation(drawingId, rootId))
18224
18755
  },
18225
18756
  Slice: {
18226
18757
  label: 'Slice',
18227
- icon: /*#__PURE__*/React__default.createElement(Icon, {
18758
+ icon: /*#__PURE__*/React__default.createElement(Icon$1, {
18228
18759
  url: img$f
18229
18760
  }),
18230
18761
  callback: wrapper(() => featureApi.createFeature(drawingId, rootId, CCClasses.CCSlice, 'Slice'))
18231
18762
  },
18232
18763
  Edge: [{
18233
18764
  label: 'Fillet',
18234
- icon: /*#__PURE__*/React__default.createElement(Icon, {
18765
+ icon: /*#__PURE__*/React__default.createElement(Icon$1, {
18235
18766
  url: img$h
18236
18767
  }),
18237
18768
  callback: wrapper(() => featureApi.createFeature(drawingId, rootId, CCClasses.CCConstantRadiusFillet, 'Fillet'))
18238
18769
  }, {
18239
18770
  label: 'Chamfer',
18240
- icon: /*#__PURE__*/React__default.createElement(Icon, {
18771
+ icon: /*#__PURE__*/React__default.createElement(Icon$1, {
18241
18772
  url: img$g
18242
18773
  }),
18243
18774
  callback: wrapper(() => featureApi.createFeature(drawingId, rootId, CCClasses.CCChamfer, 'Chamfer'))
18244
18775
  }],
18245
18776
  Patterns: [{
18246
18777
  label: 'Linear pattern',
18247
- icon: /*#__PURE__*/React__default.createElement(Icon, {
18778
+ icon: /*#__PURE__*/React__default.createElement(Icon$1, {
18248
18779
  url: img$e
18249
18780
  }),
18250
18781
  callback: wrapper(() => featureApi.createFeature(drawingId, rootId, CCClasses.CCLinearPattern, 'Linear pattern'))
18251
18782
  }, {
18252
18783
  label: 'Circular pattern',
18253
- icon: /*#__PURE__*/React__default.createElement(Icon, {
18784
+ icon: /*#__PURE__*/React__default.createElement(Icon$1, {
18254
18785
  url: img$d
18255
18786
  }),
18256
18787
  callback: wrapper(() => featureApi.createFeature(drawingId, rootId, CCClasses.CCCircularPattern, 'Circular pattern'))
18257
18788
  }],
18258
18789
  Translation: [{
18259
18790
  label: 'Translation',
18260
- icon: /*#__PURE__*/React__default.createElement(Icon, {
18791
+ icon: /*#__PURE__*/React__default.createElement(Icon$1, {
18261
18792
  url: img$c
18262
18793
  }),
18263
18794
  callback: wrapper(() => featureApi.createFeature(drawingId, rootId, CCClasses.CCTranslation, 'Translate'))
18264
18795
  }, {
18265
18796
  label: 'Rotation',
18266
- icon: /*#__PURE__*/React__default.createElement(Icon, {
18797
+ icon: /*#__PURE__*/React__default.createElement(Icon$1, {
18267
18798
  url: img$b
18268
18799
  }),
18269
18800
  callback: wrapper(() => featureApi.createFeature(drawingId, rootId, CCClasses.CCRotation, 'Rotate'))
18270
18801
  }, {
18271
18802
  label: 'Transformation by Csys',
18272
- icon: /*#__PURE__*/React__default.createElement(Icon, {
18803
+ icon: /*#__PURE__*/React__default.createElement(Icon$1, {
18273
18804
  url: img$a
18274
18805
  }),
18275
18806
  callback: wrapper(() => featureApi.createFeature(drawingId, rootId, CCClasses.CCTransformationByCSys, 'Transform by Csys'))
18276
18807
  }],
18277
18808
  BasicShapes: [{
18278
18809
  label: 'Add Box',
18279
- icon: /*#__PURE__*/React__default.createElement(Icon, {
18810
+ icon: /*#__PURE__*/React__default.createElement(Icon$1, {
18280
18811
  url: img$n
18281
18812
  }),
18282
18813
  callback: wrapper(() => featureApi.createFeature(drawingId, rootId, 'CC_Box', 'Box'))
18283
18814
  }, {
18284
18815
  label: 'Add Sphere',
18285
- icon: /*#__PURE__*/React__default.createElement(Icon, {
18816
+ icon: /*#__PURE__*/React__default.createElement(Icon$1, {
18286
18817
  url: img$9
18287
18818
  }),
18288
18819
  callback: wrapper(() => featureApi.createFeature(drawingId, rootId, 'CC_Sphere', 'Sphere'))
18289
18820
  }, {
18290
18821
  label: 'Add Cylinder',
18291
- icon: /*#__PURE__*/React__default.createElement(Icon, {
18822
+ icon: /*#__PURE__*/React__default.createElement(Icon$1, {
18292
18823
  url: img$8
18293
18824
  }),
18294
18825
  callback: wrapper(() => featureApi.createFeature(drawingId, rootId, 'CC_Cylinder', 'Cylinder'))
18295
18826
  }, {
18296
18827
  label: 'Add Cone',
18297
- icon: /*#__PURE__*/React__default.createElement(Icon, {
18828
+ icon: /*#__PURE__*/React__default.createElement(Icon$1, {
18298
18829
  url: img$7
18299
18830
  }),
18300
18831
  callback: wrapper(() => featureApi.createFeature(drawingId, rootId, 'CC_Cone', 'Cone'))
18301
18832
  }],
18302
18833
  Import: {
18303
18834
  label: 'Import',
18304
- icon: /*#__PURE__*/React__default.createElement(Icon, {
18835
+ icon: /*#__PURE__*/React__default.createElement(Icon$1, {
18305
18836
  url: img$r
18306
18837
  }),
18307
18838
  callback: wrapper(() => featureApi.createFeature(drawingId, rootId, CCClasses.CCImport, 'Import'))
@@ -18356,49 +18887,49 @@ const AssemblyModeCmds = (drawingId, rootId) => {
18356
18887
  return {
18357
18888
  FastenedOrigin: {
18358
18889
  label: 'Add Fastened Origin',
18359
- icon: /*#__PURE__*/React__default.createElement(Icon, {
18890
+ icon: /*#__PURE__*/React__default.createElement(Icon$1, {
18360
18891
  url: img$6
18361
18892
  }),
18362
18893
  callback: wrapper(addFastenedOrigin)
18363
18894
  },
18364
18895
  Fastened: {
18365
18896
  label: 'Add Fastened',
18366
- icon: /*#__PURE__*/React__default.createElement(Icon, {
18897
+ icon: /*#__PURE__*/React__default.createElement(Icon$1, {
18367
18898
  url: img$5
18368
18899
  }),
18369
18900
  callback: wrapper(addFastened)
18370
18901
  },
18371
18902
  Slider: {
18372
18903
  label: 'Add Slider',
18373
- icon: /*#__PURE__*/React__default.createElement(Icon, {
18904
+ icon: /*#__PURE__*/React__default.createElement(Icon$1, {
18374
18905
  url: img$4
18375
18906
  }),
18376
18907
  callback: wrapper(addSlider)
18377
18908
  },
18378
18909
  Revolute: {
18379
18910
  label: 'Add Revolute',
18380
- icon: /*#__PURE__*/React__default.createElement(Icon, {
18911
+ icon: /*#__PURE__*/React__default.createElement(Icon$1, {
18381
18912
  url: img$3
18382
18913
  }),
18383
18914
  callback: wrapper(addRevolute)
18384
18915
  },
18385
18916
  Cylindrical: {
18386
18917
  label: 'Add Cylindrical',
18387
- icon: /*#__PURE__*/React__default.createElement(Icon, {
18918
+ icon: /*#__PURE__*/React__default.createElement(Icon$1, {
18388
18919
  url: img$2
18389
18920
  }),
18390
18921
  callback: wrapper(addCylindrical)
18391
18922
  },
18392
18923
  Planar: {
18393
18924
  label: 'Add Planar',
18394
- icon: /*#__PURE__*/React__default.createElement(Icon, {
18925
+ icon: /*#__PURE__*/React__default.createElement(Icon$1, {
18395
18926
  url: img$1
18396
18927
  }),
18397
18928
  callback: wrapper(addPlanar)
18398
18929
  },
18399
18930
  Parallel: {
18400
18931
  label: 'Add Parallel',
18401
- icon: /*#__PURE__*/React__default.createElement(Icon, {
18932
+ icon: /*#__PURE__*/React__default.createElement(Icon$1, {
18402
18933
  url: img
18403
18934
  }),
18404
18935
  callback: wrapper(addParallel)
@@ -18646,6 +19177,258 @@ const HoveredConstraintDisplay = ({
18646
19177
  }))));
18647
19178
  };
18648
19179
 
19180
+ function ownKeys$1(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) { symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; }
19181
+
19182
+ function _objectSpread$1(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys$1(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys$1(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
19183
+
19184
+ function createApi(set) {
19185
+ return {
19186
+ setMsg: (msgId, msg) => set(prev => _objectSpread$1(_objectSpread$1({}, prev), {}, {
19187
+ msgs: _objectSpread$1(_objectSpread$1({}, prev.msgs), {}, {
19188
+ [msgId]: msg
19189
+ })
19190
+ })),
19191
+ deleteMsg: msgId => set(prev => {
19192
+ const newMsgs = _objectSpread$1({}, prev.msgs);
19193
+
19194
+ delete newMsgs[msgId];
19195
+ return _objectSpread$1(_objectSpread$1({}, prev), {}, {
19196
+ msgs: newMsgs
19197
+ });
19198
+ }),
19199
+ setShown: () => {
19200
+ set(prev => {
19201
+ const msgs = _objectSpread$1({}, prev.msgs);
19202
+
19203
+ Object.keys(msgs).forEach(msgId => {
19204
+ msgs[msgId].isShown = true;
19205
+ });
19206
+ return _objectSpread$1(_objectSpread$1({}, prev), {}, {
19207
+ msgs
19208
+ });
19209
+ });
19210
+ }
19211
+ };
19212
+ } // Buerli can store only single message in store.
19213
+ // But it will be convenient for the user to save all messages
19214
+ // and provide possibility to look through all messages came from the server.
19215
+
19216
+
19217
+ const useMsgStore = create((set, get) => ({
19218
+ msgs: {},
19219
+ api: createApi(set)
19220
+ }));
19221
+
19222
+ const blankZIndex = 1000;
19223
+ const BlankDiv = ({
19224
+ onClick
19225
+ }) => {
19226
+ return /*#__PURE__*/React__default.createElement("div", {
19227
+ onClick: onClick,
19228
+ style: {
19229
+ zIndex: blankZIndex,
19230
+ position: 'fixed',
19231
+ top: 0,
19232
+ left: 0,
19233
+ bottom: 0,
19234
+ right: 0
19235
+ }
19236
+ });
19237
+ };
19238
+
19239
+ function getBorderColor(msg) {
19240
+ if (msg.isShown) return '#dddddd';
19241
+ if (msg.type === 'success') return '#b7eb8f';
19242
+ if (msg.type === 'error') return '#ffccc7';
19243
+ if (msg.type === 'warning') return '#ffe58f';
19244
+ if (msg.type === 'busy' || msg.type === 'info') return '#91d5ff';
19245
+ return '#91d5ff';
19246
+ }
19247
+
19248
+ function getBackGrColor(msg) {
19249
+ if (msg.isShown) return '#ffffff';
19250
+ if (msg.type === 'success') return '#f6ffed';
19251
+ if (msg.type === 'error') return '#fff2f0';
19252
+ if (msg.type === 'warning') return '#fffbe6';
19253
+ if (msg.type === 'busy' || msg.type === 'info') return '#e6f7ff';
19254
+ return '#e6f7ff';
19255
+ }
19256
+
19257
+ const MessageWrapper = styled.div`
19258
+ border: 1px solid ${props => getBorderColor(props.msg)};
19259
+ background-color: ${props => getBackGrColor(props.msg)};
19260
+ padding: 8px 15px;
19261
+ margin-bottom: 4px;
19262
+ `;
19263
+ const FlexContainer = styled.div`
19264
+ display: flex;
19265
+ align-items: center;
19266
+ `;
19267
+ const MessageText = styled.div`
19268
+ flex-grow: 1;
19269
+ overflow: auto;
19270
+ overflow-wrap: break-word;
19271
+ max-height: 300px;
19272
+ &::-webkit-scrollbar {
19273
+ width: 12px;
19274
+ }
19275
+ &::-webkit-scrollbar-thumb {
19276
+ border-radius: 10px;
19277
+ background-clip: padding-box;
19278
+ background-color: #d7d7d7;
19279
+ border: 3px solid rgba(0, 0, 0, 0); // Invisible boreder to emulate margin
19280
+ }
19281
+ `;
19282
+ const iconStyle = {
19283
+ marginRight: '8px'
19284
+ };
19285
+ const CloseButton = styled.button`
19286
+ margin-left: 8px;
19287
+ padding: 0;
19288
+ overflow: hidden;
19289
+ font-size: 12px;
19290
+ line-height: 12px;
19291
+ background-color: transparent;
19292
+ border: none;
19293
+ outline: none;
19294
+ cursor: pointer;
19295
+ `;
19296
+ const Time = styled.div`
19297
+ font-size: 0.7rem;
19298
+ color: #adadad;
19299
+ margin-left: 20px;
19300
+ `;
19301
+
19302
+ function getTime(timestamp) {
19303
+ const date = new Date(timestamp);
19304
+ return date.toLocaleTimeString(undefined, {
19305
+ hour: 'numeric',
19306
+ minute: '2-digit',
19307
+ hour12: false
19308
+ });
19309
+ }
19310
+
19311
+ const Icon = ({
19312
+ type
19313
+ }) => {
19314
+ if (type === 'success') return /*#__PURE__*/React__default.createElement(CheckCircleTwoTone, {
19315
+ twoToneColor: "#52c41a",
19316
+ style: iconStyle
19317
+ });
19318
+ if (type === 'error') return /*#__PURE__*/React__default.createElement(CloseCircleTwoTone, {
19319
+ twoToneColor: "#ff4d4f",
19320
+ style: iconStyle
19321
+ });
19322
+ if (type === 'warning') return /*#__PURE__*/React__default.createElement(ExclamationCircleTwoTone, {
19323
+ twoToneColor: "#faad14",
19324
+ style: iconStyle
19325
+ });
19326
+ if (type === 'busy' || type === 'info') return /*#__PURE__*/React__default.createElement(InfoCircleTwoTone, {
19327
+ twoToneColor: "#1890ff",
19328
+ style: iconStyle
19329
+ });
19330
+ return null;
19331
+ };
19332
+
19333
+ const Message = ({
19334
+ msgId
19335
+ }) => {
19336
+ const msg = useMsgStore(s => s.msgs[msgId]) || {};
19337
+ const msgApi = useMsgStore(s => s.api);
19338
+ const type = msg.type === 'busy' ? 'info' : msg.type;
19339
+ return /*#__PURE__*/React__default.createElement(MessageWrapper, {
19340
+ msg: msg
19341
+ }, /*#__PURE__*/React__default.createElement(FlexContainer, null, /*#__PURE__*/React__default.createElement(Icon, {
19342
+ type: type
19343
+ }), /*#__PURE__*/React__default.createElement(MessageText, null, `${msg.title} ${msg.text}`), /*#__PURE__*/React__default.createElement(CloseButton, {
19344
+ onClick: () => msgApi.deleteMsg(msgId)
19345
+ }, /*#__PURE__*/React__default.createElement(CloseOutlined, null))), /*#__PURE__*/React__default.createElement(Time, null, getTime(msg.timestamp)));
19346
+ };
19347
+
19348
+ function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) { symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; }
19349
+
19350
+ function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
19351
+ const MsgListWrapper = styled.div`
19352
+ max-height: 500px;
19353
+ max-width: 400px;
19354
+ min-width: 300px;
19355
+ overflow-y: auto;
19356
+ &::-webkit-scrollbar {
19357
+ width: 12px;
19358
+ }
19359
+ &::-webkit-scrollbar-thumb {
19360
+ border-radius: 10px;
19361
+ background-clip: padding-box;
19362
+ background-color: #cfcfcf;
19363
+ border: 3px solid rgba(0, 0, 0, 0); // Invisible boreder to emulate margin
19364
+ }
19365
+ z-index: ${blankZIndex + 1};
19366
+ `;
19367
+ const MessageList = ({
19368
+ drawingId
19369
+ }) => {
19370
+ const msgsIds = useMsgStore(s => {
19371
+ // Return array of messages with fresh messages in the beginning
19372
+ return Object.keys(s.msgs).sort((id1, id2) => s.msgs[id2].timestamp - s.msgs[id1].timestamp);
19373
+ });
19374
+ const msgsApi = useMsgStore(s => s.api); // Set isShow = true for all messages in store on unmount
19375
+
19376
+ React__default.useEffect(() => {
19377
+ return () => msgsApi.setShown();
19378
+ }, [msgsApi]);
19379
+ return /*#__PURE__*/React__default.createElement(MsgListWrapper, null, msgsIds.map(msgId => /*#__PURE__*/React__default.createElement(Message, {
19380
+ msgId: msgId,
19381
+ key: msgId
19382
+ })));
19383
+ };
19384
+ const Messages = ({
19385
+ drawingId
19386
+ }) => {
19387
+ const [showList, setShowList] = React__default.useState(false);
19388
+ const [showBadge, setShowBadge] = React__default.useState(false);
19389
+ const timestamp = useBuerli(state => state.message.timestamp);
19390
+ const msg = useBuerli(state => state.message.data);
19391
+ const msgsApi = useMsgStore(s => s.api);
19392
+ const msgsLen = useMsgStore(s => Object.keys(s.msgs).length);
19393
+ React__default.useEffect(() => setShowBadge(true), [timestamp]); // Add recent message to msgs store
19394
+
19395
+ React__default.useEffect(() => {
19396
+ if (timestamp && msg && (msg.text || msg.title)) {
19397
+ msgsApi.setMsg(msg.id, _objectSpread(_objectSpread({}, msg), {}, {
19398
+ timestamp,
19399
+ isShown: false
19400
+ }));
19401
+ }
19402
+ }, [timestamp, msg, msgsApi]); // Hide list when there is no cached messages
19403
+
19404
+ React__default.useEffect(() => {
19405
+ if (msgsLen === 0) setShowList(false);
19406
+ }, [msgsLen]);
19407
+ const onClick = React__default.useCallback(() => {
19408
+ setShowList(s => !s);
19409
+ setShowBadge(false);
19410
+ }, []);
19411
+ return /*#__PURE__*/React__default.createElement("div", {
19412
+ style: {
19413
+ display: 'flex',
19414
+ flexDirection: 'column',
19415
+ alignItems: 'flex-end'
19416
+ }
19417
+ }, showList && /*#__PURE__*/React__default.createElement(React__default.Fragment, null, /*#__PURE__*/React__default.createElement(MessageList, {
19418
+ drawingId: drawingId
19419
+ }), /*#__PURE__*/React__default.createElement(BlankDiv, {
19420
+ onClick: () => setShowList(false)
19421
+ })), /*#__PURE__*/React__default.createElement(Tooltip, {
19422
+ title: "Messages"
19423
+ }, /*#__PURE__*/React__default.createElement(Badge, {
19424
+ dot: showBadge
19425
+ }, /*#__PURE__*/React__default.createElement(Button, {
19426
+ size: "small",
19427
+ icon: /*#__PURE__*/React__default.createElement(UnorderedListOutlined, null),
19428
+ onClick: onClick
19429
+ }))));
19430
+ };
19431
+
18649
19432
  const EditDrawing = ({
18650
19433
  drawingId
18651
19434
  }) => {
@@ -18676,7 +19459,7 @@ const EditDrawing = ({
18676
19459
  }
18677
19460
  }), /*#__PURE__*/React__default.createElement("div", {
18678
19461
  style: {
18679
- flex: '1',
19462
+ flexGrow: 1,
18680
19463
  overflow: 'hidden'
18681
19464
  }
18682
19465
  }, /*#__PURE__*/React__default.createElement("div", {
@@ -18784,7 +19567,15 @@ const Drawing = ({
18784
19567
  }
18785
19568
  }), /*#__PURE__*/React__default.createElement(EditDrawing, {
18786
19569
  drawingId: drawingId
18787
- })));
19570
+ }), /*#__PURE__*/React__default.createElement("div", {
19571
+ style: {
19572
+ position: 'absolute',
19573
+ bottom: '4px',
19574
+ right: '4px'
19575
+ }
19576
+ }, /*#__PURE__*/React__default.createElement(Messages, {
19577
+ drawingId: drawingId
19578
+ }))));
18788
19579
  };
18789
19580
 
18790
19581
  const CAD = ({