@buerli.io/react-cad 0.13.1-beta.2 → 0.13.1-beta.3

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.
@@ -11,11 +11,11 @@ var _defineProperty = require('@babel/runtime/helpers/defineProperty');
11
11
  var _extends = require('@babel/runtime/helpers/extends');
12
12
  var fiber = require('@react-three/fiber');
13
13
  var drei = require('@react-three/drei');
14
+ var icons = require('@ant-design/icons');
14
15
  var create = require('zustand');
15
16
  var vanilla = require('zustand/vanilla');
16
17
  require('antd/dist/antd.css');
17
18
  var styled = require('styled-components');
18
- var icons = require('@ant-design/icons');
19
19
  var _objectWithoutProperties = require('@babel/runtime/helpers/objectWithoutProperties');
20
20
  var reactDom = require('react-dom');
21
21
  var antd = require('antd');
@@ -105,8 +105,8 @@ function useDrawingStr(drawingId, selector) {
105
105
  return res || EMPTYSTR;
106
106
  }
107
107
 
108
- function ownKeys$x(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
109
- function _objectSpread$x(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys$x(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys$x(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
108
+ function ownKeys$y(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
109
+ function _objectSpread$y(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys$y(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys$y(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
110
110
  function getGraphicId(tree, refOrObjId) {
111
111
  const res = {
112
112
  graphicId: refOrObjId,
@@ -169,7 +169,7 @@ function useSelectedItems(drawingId, refOrObjIds) {
169
169
  // TODO: !!!Important!!! This may not properly create a graphic item for BuerliGeometry in assembly mode, but currently it isn't needed to.
170
170
  const prodId = core.getDrawing(drawingId).structure.currentProduct;
171
171
  const createSelItem = React.useCallback(element => {
172
- return core.createGraphicItem(prodId, _objectSpread$x(_objectSpread$x({}, element), {}, {
172
+ return core.createGraphicItem(prodId, _objectSpread$y(_objectSpread$y({}, element), {}, {
173
173
  productId: prodId
174
174
  }));
175
175
  }, [prodId]);
@@ -194,7 +194,7 @@ function useSelectedItems(drawingId, refOrObjIds) {
194
194
  if (grIds && grIds.length > 0) {
195
195
  const elem = cont.map[Number(grIds[0])];
196
196
  if (elem) {
197
- elems.push(_objectSpread$x(_objectSpread$x({}, elem), {}, {
197
+ elems.push(_objectSpread$y(_objectSpread$y({}, elem), {}, {
198
198
  graphicId: contId,
199
199
  type: cont.type
200
200
  }));
@@ -230,8 +230,8 @@ function useSelectedItems(drawingId, refOrObjIds) {
230
230
  return selectedItems;
231
231
  }
232
232
 
233
- function ownKeys$w(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
234
- function _objectSpread$w(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys$w(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys$w(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
233
+ function ownKeys$x(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
234
+ function _objectSpread$x(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys$x(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys$x(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
235
235
  function addMembers(drawingId, ccObjId) {
236
236
  const drawingState = core.getDrawing(drawingId);
237
237
  const objInTree = drawingState.structure.tree[ccObjId];
@@ -242,7 +242,7 @@ function addMembers(drawingId, ccObjId) {
242
242
  const members = {};
243
243
  Object.keys(curMembers).forEach(memberName => {
244
244
  const curMember = curMembers[memberName];
245
- members[memberName] = _objectSpread$w(_objectSpread$w({}, curMember), {}, {
245
+ members[memberName] = _objectSpread$x(_objectSpread$x({}, curMember), {}, {
246
246
  name: memberName
247
247
  });
248
248
  if (curMember.type === core.MemberType.POINT && Array.isArray(curMember.value)) {
@@ -258,7 +258,10 @@ function addMembers(drawingId, ccObjId) {
258
258
  };
259
259
  }
260
260
  function useGlobalToLocalMatrix(drawingId, objId) {
261
- const csys = react.useDrawing(drawingId, drawing => objId && drawing.structure.tree[objId].coordinateSystem);
261
+ const csys = react.useDrawing(drawingId, drawing => {
262
+ var _drawing$structure$tr;
263
+ return objId && ((_drawing$structure$tr = drawing.structure.tree[objId]) == null ? void 0 : _drawing$structure$tr.coordinateSystem);
264
+ });
262
265
  return React.useMemo(() => {
263
266
  // TODO: remove undefined check when dimSet will be created on object creation.
264
267
  if (!csys) return new THREE__namespace.Matrix4();
@@ -271,7 +274,7 @@ function useGlobalToLocalMatrix(drawingId, objId) {
271
274
  function getGlobalToLocalMatrix(drawingId, objId) {
272
275
  const drawing = core.getDrawing(drawingId);
273
276
  const object = drawing.structure.tree[objId];
274
- const matrix = object.coordinateSystem ? core.MathUtils.convertToMatrix4(object.coordinateSystem) : new THREE__namespace.Matrix4();
277
+ const matrix = object != null && object.coordinateSystem ? core.MathUtils.convertToMatrix4(object.coordinateSystem) : new THREE__namespace.Matrix4();
275
278
  return matrix.invert();
276
279
  }
277
280
  function convertToVector(point) {
@@ -374,6 +377,9 @@ const isSketchRegion = arg => {
374
377
  const objClass = typeof arg === 'string' ? arg : arg.class;
375
378
  return classcad.ccUtils.base.isA(objClass, classcad.CCClasses.CCSketchRegion);
376
379
  };
380
+ const isSketchObj = obj => {
381
+ return classcad.ccUtils.base.isA(obj == null ? void 0 : obj.class, classcad.CCClasses.CCSketch) || isSketchGeometry(obj) || is2DConstraint(obj);
382
+ };
377
383
  const degreesToRadians = degrees => {
378
384
  return degrees * Math.PI / 180;
379
385
  };
@@ -415,7 +421,7 @@ const stringifyValue = (value, type) => {
415
421
 
416
422
  // Searches for an object in the tree or graphic containers
417
423
  function findObject(drawingId, id, unrollRefs = false) {
418
- var _drawing$structure$tr;
424
+ var _drawing$structure$tr2;
419
425
  const drawing = core.getDrawing(drawingId);
420
426
  const tree = drawing.structure.tree;
421
427
  const obj = tree[id];
@@ -432,7 +438,7 @@ function findObject(drawingId, id, unrollRefs = false) {
432
438
  }
433
439
  const cache = drawing.geometry.cache;
434
440
  const allContainers = Object.getOwnPropertyNames(cache).map(n => Number(n)).sort((a, b) => b - a);
435
- const activeContainers = ((_drawing$structure$tr = drawing.structure.tree[drawing.structure.currentProduct || NOCCID]) == null ? void 0 : _drawing$structure$tr.solids) || [];
441
+ const activeContainers = ((_drawing$structure$tr2 = drawing.structure.tree[drawing.structure.currentProduct || NOCCID]) == null ? void 0 : _drawing$structure$tr2.solids) || [];
436
442
  const visibleContainers = drawing.structure.visibleContainers || [];
437
443
  let sortedContainerIds = [...activeContainers, ...visibleContainers, ...allContainers];
438
444
  sortedContainerIds = sortedContainerIds.filter((grId, i) => sortedContainerIds.indexOf(grId) === i);
@@ -1217,8 +1223,8 @@ const isAngular = dim => classcad.ccUtils.base.isA(dim.class, classcad.CCClasses
1217
1223
  const isRadial = dim => classcad.ccUtils.base.isA(dim.class, classcad.CCClasses.CCRadialDimension) && !classcad.ccUtils.base.isA(dim.class, classcad.CCClasses.CCDiameterDimension);
1218
1224
  const isDiameter = dim => classcad.ccUtils.base.isA(dim.class, classcad.CCClasses.CCDiameterDimension);
1219
1225
 
1220
- function ownKeys$v(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
1221
- function _objectSpread$v(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys$v(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys$v(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
1226
+ function ownKeys$w(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
1227
+ function _objectSpread$w(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys$w(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys$w(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
1222
1228
  const isFeatureActive = drawingId => {
1223
1229
  const activePlugin = core.getDrawing(drawingId).plugin.active.feature;
1224
1230
  if (activePlugin) {
@@ -1254,8 +1260,8 @@ const appApi = (set, get) => ({
1254
1260
  const curInstance = core.api.getState().drawing.refs[drawingId].structure.currentInstance;
1255
1261
  res = state.assemblyTree.prodStack;
1256
1262
  curInstance && res.push(curInstance);
1257
- return _objectSpread$v(_objectSpread$v({}, state), {}, {
1258
- assemblyTree: _objectSpread$v(_objectSpread$v({}, state.assemblyTree), {}, {
1263
+ return _objectSpread$w(_objectSpread$w({}, state), {}, {
1264
+ assemblyTree: _objectSpread$w(_objectSpread$w({}, state.assemblyTree), {}, {
1259
1265
  prodStack: [...res]
1260
1266
  })
1261
1267
  });
@@ -1271,8 +1277,8 @@ const appApi = (set, get) => ({
1271
1277
  set(state => {
1272
1278
  const res = state.assemblyTree.prodStack;
1273
1279
  res.pop();
1274
- return _objectSpread$v(_objectSpread$v({}, state), {}, {
1275
- assemblyTree: _objectSpread$v(_objectSpread$v({}, state.assemblyTree), {}, {
1280
+ return _objectSpread$w(_objectSpread$w({}, state), {}, {
1281
+ assemblyTree: _objectSpread$w(_objectSpread$w({}, state.assemblyTree), {}, {
1276
1282
  prodStack: [...res]
1277
1283
  })
1278
1284
  });
@@ -1280,8 +1286,8 @@ const appApi = (set, get) => ({
1280
1286
  classcad.ccAPI.assemblyBuilder.setCurrentInstance(drawingId, prevProd).catch(console.warn);
1281
1287
  },
1282
1288
  clearProdStack: () => {
1283
- set(state => _objectSpread$v(_objectSpread$v({}, state), {}, {
1284
- assemblyTree: _objectSpread$v(_objectSpread$v({}, state.assemblyTree), {}, {
1289
+ set(state => _objectSpread$w(_objectSpread$w({}, state), {}, {
1290
+ assemblyTree: _objectSpread$w(_objectSpread$w({}, state.assemblyTree), {}, {
1285
1291
  prodStack: []
1286
1292
  })
1287
1293
  }));
@@ -1291,7 +1297,7 @@ const appApi = (set, get) => ({
1291
1297
  return;
1292
1298
  }
1293
1299
  const visibleMap = get().assemblyTree.visibleMap;
1294
- const visibleMapNew = _objectSpread$v({}, visibleMap);
1300
+ const visibleMapNew = _objectSpread$w({}, visibleMap);
1295
1301
  instanceIds.forEach((instanceId, index) => {
1296
1302
  const objIds = objIdsArr[index];
1297
1303
  const visible = visibleMap[instanceId];
@@ -1306,8 +1312,8 @@ const appApi = (set, get) => ({
1306
1312
  });
1307
1313
  visibleMapNew[instanceId] = visibleNew;
1308
1314
  });
1309
- set(state => _objectSpread$v(_objectSpread$v({}, state), {}, {
1310
- assemblyTree: _objectSpread$v(_objectSpread$v({}, state.assemblyTree), {}, {
1315
+ set(state => _objectSpread$w(_objectSpread$w({}, state), {}, {
1316
+ assemblyTree: _objectSpread$w(_objectSpread$w({}, state.assemblyTree), {}, {
1311
1317
  visibleMap: visibleMapNew
1312
1318
  })
1313
1319
  }));
@@ -1315,7 +1321,7 @@ const appApi = (set, get) => ({
1315
1321
  },
1316
1322
  blankDiv: {
1317
1323
  show: callback => {
1318
- set(state => _objectSpread$v(_objectSpread$v({}, state), {}, {
1324
+ set(state => _objectSpread$w(_objectSpread$w({}, state), {}, {
1319
1325
  blankDiv: {
1320
1326
  isActive: true,
1321
1327
  onClose: callback
@@ -1323,7 +1329,7 @@ const appApi = (set, get) => ({
1323
1329
  }));
1324
1330
  },
1325
1331
  hide: () => {
1326
- set(state => _objectSpread$v(_objectSpread$v({}, state), {}, {
1332
+ set(state => _objectSpread$w(_objectSpread$w({}, state), {}, {
1327
1333
  blankDiv: {
1328
1334
  isActive: false,
1329
1335
  onClose: undefined
@@ -1421,7 +1427,7 @@ const DimValue = ({
1421
1427
  dimId,
1422
1428
  disableEvents = false
1423
1429
  }) => {
1424
- var _dimension$members, _dimension$members$ma, _master$members;
1430
+ var _dimension$members, _dimension$members$ma, _master$members, _master$members$lgsSt, _master$members2, _master$members2$lgsS;
1425
1431
  const {
1426
1432
  drawingId
1427
1433
  } = React.useContext(DimSetContext);
@@ -1436,11 +1442,13 @@ const DimValue = ({
1436
1442
  // If we are in sketch context, master is a constraint, so the useValue should be taken if it exists, if doesn't take value.
1437
1443
  const memberName = isSketchConstr ? master != null && (_master$members = master.members) != null && _master$members.userValue ? 'userValue' : 'value' : dimension.name;
1438
1444
  const angle = isAngular(dimension);
1445
+ const lgsState = (_master$members$lgsSt = master == null ? void 0 : (_master$members2 = master.members) == null ? void 0 : (_master$members2$lgsS = _master$members2.lgsState) == null ? void 0 : _master$members2$lgsS.value) != null ? _master$members$lgsSt : 1;
1446
+ const isUnsatisfied = !(lgsState & 1);
1439
1447
  const valueParam = useNumParam(drawingId, masterId, memberName, {
1440
1448
  angle
1441
1449
  });
1442
1450
  const caption = React.useMemo(() => {
1443
- var _master$members2, _master$members2$memb, _master$members3, _master$members3$memb;
1451
+ var _master$members3, _master$members3$memb, _master$members4, _master$members4$memb;
1444
1452
  if (!master) {
1445
1453
  var _dimension$members2, _dimension$members2$v, _dimension$members3, _dimension$members3$d;
1446
1454
  const dimValue = (_dimension$members2 = dimension.members) == null ? void 0 : (_dimension$members2$v = _dimension$members2.value) == null ? void 0 : _dimension$members2$v.value;
@@ -1452,10 +1460,10 @@ const DimValue = ({
1452
1460
  }
1453
1461
 
1454
1462
  // const paramName = dimension.members.paramName.value
1455
- const expr = ((_master$members2 = master.members) == null ? void 0 : (_master$members2$memb = _master$members2[memberName]) == null ? void 0 : _master$members2$memb.expression.replace(/ /g, '').replace(/ExpressionSet./g, '@')) || '';
1463
+ const expr = ((_master$members3 = master.members) == null ? void 0 : (_master$members3$memb = _master$members3[memberName]) == null ? void 0 : _master$members3$memb.expression.replace(/ /g, '').replace(/ExpressionSet./g, '@')) || '';
1456
1464
  const degValue = expr.length > 0 && expr[expr.length - 1] === 'g' ? Number(expr.slice(0, expr.length - 1)) : NaN;
1457
1465
  const isDeg = !isNaN(degValue);
1458
- const value = isDeg ? degValue : (_master$members3 = master.members) == null ? void 0 : (_master$members3$memb = _master$members3[memberName]) == null ? void 0 : _master$members3$memb.value;
1466
+ const value = isDeg ? degValue : (_master$members4 = master.members) == null ? void 0 : (_master$members4$memb = _master$members4[memberName]) == null ? void 0 : _master$members4$memb.value;
1459
1467
  const valueStr = isDeg ? value.toFixed(2) + 'g' : value.toFixed(2);
1460
1468
  return expr && !isDeg ? expr + ' (' + valueStr + ')' : valueStr;
1461
1469
  }, [dimension, master, memberName, angle]);
@@ -1533,12 +1541,20 @@ const DimValue = ({
1533
1541
  }
1534
1542
  e.stopPropagation();
1535
1543
  }, [update]);
1544
+ const [iconOffset, setIconOffset] = React.useState(0);
1536
1545
  fiber.useFrame(args => {
1537
1546
  if (!textRef.current || !textRef.current.parent) {
1538
1547
  return;
1539
1548
  }
1540
1549
  textRef.current.quaternion.copy(textRef.current.parent.getWorldQuaternion(quat$2)).invert().multiply(args.camera.quaternion);
1541
1550
  textRef.current.scale.setScalar(1 / args.camera.zoom);
1551
+ if (!textRef.current.geometry.boundingBox) {
1552
+ return;
1553
+ }
1554
+ const iconOffsetNew = textRef.current.geometry.boundingBox.max.x + 4;
1555
+ if (Math.abs(iconOffsetNew - iconOffset) > 1e-3) {
1556
+ setIconOffset(iconOffsetNew);
1557
+ }
1542
1558
  });
1543
1559
  return /*#__PURE__*/React.createElement("group", {
1544
1560
  position: position
@@ -1557,7 +1573,14 @@ const DimValue = ({
1557
1573
  userData: {
1558
1574
  onHUD: true
1559
1575
  }
1560
- }, handlers), caption)) : /*#__PURE__*/React.createElement(drei.Html, {
1576
+ }, handlers), caption, isUnsatisfied && /*#__PURE__*/React.createElement(drei.Html, {
1577
+ style: {
1578
+ transform: `translate3d(${iconOffset}px,19px,0)`,
1579
+ pointerEvents: 'none'
1580
+ }
1581
+ }, /*#__PURE__*/React.createElement(icons.CloseCircleTwoTone, {
1582
+ twoToneColor: "#eb2f96"
1583
+ })))) : /*#__PURE__*/React.createElement(drei.Html, {
1561
1584
  zIndexRange: [blankZIndex + 1, blankZIndex + 1],
1562
1585
  style: {
1563
1586
  transform: 'translate3d(-50%,0,0)',
@@ -2371,8 +2394,58 @@ function useRefsParam(drawingId, objId, memberName) {
2371
2394
  });
2372
2395
  }
2373
2396
 
2374
- function ownKeys$u(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
2375
- function _objectSpread$u(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys$u(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys$u(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
2397
+ const MultiSelectContext = /*#__PURE__*/React.createContext(null);
2398
+ const MultiSelect = ({
2399
+ children,
2400
+ drawingId,
2401
+ items,
2402
+ createInfo
2403
+ }) => {
2404
+ const itemsInfo = React.useMemo(() => items.map(createInfo), [items, createInfo]);
2405
+ const lastSelected = React.useRef(-1);
2406
+ const setLastSelected = React.useCallback((objId, overwrite) => {
2407
+ if (lastSelected.current === -1 || overwrite) lastSelected.current = objId;
2408
+ }, []);
2409
+ const multiSelect = React.useCallback(objId => {
2410
+ const drawing = core.getDrawing(drawingId);
2411
+ if (objId === lastSelected.current) {
2412
+ const select = drawing.api.interaction.select;
2413
+ select(createInfo(objId));
2414
+ return;
2415
+ }
2416
+ const index1 = items.indexOf(lastSelected.current);
2417
+ const index2 = items.indexOf(objId);
2418
+ if (index1 === -1 || index2 === -1) {
2419
+ return;
2420
+ }
2421
+ const start = Math.min(index1, index2);
2422
+ const end = Math.max(index1, index2);
2423
+ const toSelect = itemsInfo.slice(start, end + 1);
2424
+ const setSelected = drawing.api.interaction.setSelected;
2425
+ setSelected(toSelect);
2426
+ }, [drawingId, items, itemsInfo, createInfo]);
2427
+ const needsReset = react.useDrawing(drawingId, d => {
2428
+ var _d$interaction$select;
2429
+ return (_d$interaction$select = d.interaction.selected) == null ? void 0 : _d$interaction$select.every(selItem => !itemsInfo.some(info => info.uniqueIdent === selItem.uniqueIdent));
2430
+ }) || false;
2431
+ React.useEffect(() => {
2432
+ // Reset lastSelected if selected array becomes empty
2433
+ if (needsReset) {
2434
+ lastSelected.current = -1;
2435
+ }
2436
+ }, [needsReset]);
2437
+ const contextValue = React.useMemo(() => ({
2438
+ setLastSelected,
2439
+ multiSelect
2440
+ }), [setLastSelected, multiSelect]);
2441
+ return /*#__PURE__*/React.createElement(MultiSelectContext.Provider, {
2442
+ value: contextValue
2443
+ }, children);
2444
+ };
2445
+
2446
+ function ownKeys$v(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
2447
+ function _objectSpread$v(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys$v(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys$v(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
2448
+
2376
2449
  /**
2377
2450
  * Implies the following data structure:
2378
2451
  * data: {
@@ -2403,22 +2476,32 @@ const getEventInfo = e => {
2403
2476
  return {
2404
2477
  delta: eRTF.delta,
2405
2478
  stopPropagation: eRTF.stopPropagation,
2479
+ ctrlKey: eRTF.nativeEvent.ctrlKey,
2406
2480
  shiftKey: eRTF.nativeEvent.shiftKey
2407
2481
  };
2408
2482
  } else {
2409
2483
  return {
2410
2484
  delta: 0,
2411
2485
  stopPropagation: undefined,
2486
+ ctrlKey: eDef.ctrlKey,
2412
2487
  shiftKey: eDef.shiftKey
2413
2488
  };
2414
2489
  }
2415
2490
  };
2416
2491
  function useSelect$1(drawingId, objId) {
2492
+ const {
2493
+ setLastSelected,
2494
+ multiSelect
2495
+ } = React.useContext(MultiSelectContext) || {
2496
+ setLastSelected: undefined,
2497
+ multiSelect: undefined
2498
+ };
2417
2499
  const onClick = React.useCallback(e => {
2418
2500
  var _drawing$plugin$refs, _drawing$structure$tr;
2419
2501
  const {
2420
2502
  delta,
2421
2503
  stopPropagation,
2504
+ ctrlKey,
2422
2505
  shiftKey
2423
2506
  } = getEventInfo(e);
2424
2507
  if (delta > 1) {
@@ -2426,16 +2509,18 @@ function useSelect$1(drawingId, objId) {
2426
2509
  }
2427
2510
  const drawing = core.getDrawing(drawingId);
2428
2511
  const productId = drawing.structure.currentProduct;
2512
+ if (!productId) {
2513
+ return;
2514
+ }
2429
2515
  let object = drawing.structure.tree[objId];
2430
2516
  const selection = drawing.selection.refs[drawing.selection.active || ''];
2431
- const isSelActive = selection !== undefined;
2432
2517
  const isSelectable = (selection == null ? void 0 : selection.isSelectable(TreeObjScope, {
2433
2518
  object
2434
2519
  })) || false;
2435
2520
  const activeId = ((_drawing$plugin$refs = drawing.plugin.refs[drawing.plugin.active.feature || -1]) == null ? void 0 : _drawing$plugin$refs.id) || -1;
2436
2521
  const objClass = ((_drawing$structure$tr = drawing.structure.tree[activeId]) == null ? void 0 : _drawing$structure$tr.class) || '';
2437
2522
  const isSketchActive = classcad.ccUtils.base.isA(objClass, classcad.CCClasses.CCSketch);
2438
- if ((isSketchActive || isSelActive) && !isSelectable || !productId) {
2523
+ if (isSketchActive && !isSketchObj(object) && !isSelectable) {
2439
2524
  return;
2440
2525
  }
2441
2526
  stopPropagation == null ? void 0 : stopPropagation();
@@ -2453,13 +2538,18 @@ function useSelect$1(drawingId, objId) {
2453
2538
  }
2454
2539
  return;
2455
2540
  }
2541
+ setLastSelected == null ? void 0 : setLastSelected(objId, !shiftKey);
2542
+ if (shiftKey && multiSelect) {
2543
+ multiSelect(objId);
2544
+ return;
2545
+ }
2456
2546
  const interactionInfo = core.createInfo({
2457
2547
  objectId: objId,
2458
2548
  prodRefId: productId
2459
2549
  });
2460
2550
  const select = drawing.api.interaction.select;
2461
- select(interactionInfo, shiftKey);
2462
- }, [drawingId, objId]);
2551
+ select(interactionInfo, ctrlKey || shiftKey);
2552
+ }, [drawingId, objId, setLastSelected, multiSelect]);
2463
2553
  return React.useMemo(() => ({
2464
2554
  onClick
2465
2555
  }), [onClick]);
@@ -2472,16 +2562,18 @@ function useHover$1(drawingId, objId) {
2472
2562
  } = getEventInfo(e);
2473
2563
  const drawing = core.getDrawing(drawingId);
2474
2564
  const productId = drawing.structure.currentProduct;
2565
+ if (!productId) {
2566
+ return;
2567
+ }
2475
2568
  const object = drawing.structure.tree[objId];
2476
2569
  const selection = drawing.selection.refs[drawing.selection.active || ''];
2477
- const isSelActive = selection !== undefined;
2478
2570
  const isSelectable = (selection == null ? void 0 : selection.isSelectable(TreeObjScope, {
2479
2571
  object
2480
2572
  })) || false;
2481
2573
  const activeId = ((_drawing$plugin$refs2 = drawing.plugin.refs[drawing.plugin.active.feature || -1]) == null ? void 0 : _drawing$plugin$refs2.id) || -1;
2482
2574
  const objClass = ((_drawing$structure$tr2 = drawing.structure.tree[activeId]) == null ? void 0 : _drawing$structure$tr2.class) || '';
2483
2575
  const isSketchActive = classcad.ccUtils.base.isA(objClass, classcad.CCClasses.CCSketch);
2484
- if ((isSketchActive || isSelActive) && !isSelectable || !productId) {
2576
+ if (isSketchActive && !isSketchObj(object) && !isSelectable) {
2485
2577
  return;
2486
2578
  }
2487
2579
  stopPropagation == null ? void 0 : stopPropagation();
@@ -2604,7 +2696,7 @@ function useTreeObjInteraction(drawingId, objId) {
2604
2696
  const isGSelected = useIsGSelected(drawingId, objId);
2605
2697
  const isSHovered = useIsSHovered(drawingId, objId);
2606
2698
  const isSSelected = useIsSSelected(drawingId, objId);
2607
- const handlers = React.useMemo(() => _objectSpread$u(_objectSpread$u({}, hHandlers), sHandlers), [hHandlers, sHandlers]);
2699
+ const handlers = React.useMemo(() => _objectSpread$v(_objectSpread$v({}, hHandlers), sHandlers), [hHandlers, sHandlers]);
2608
2700
  return React.useMemo(() => {
2609
2701
  // If the handlers are switched off immediately after the selection (workplane selection for the sketcher), then hovered would keep being equal to true, making the mesh color wrong.
2610
2702
  // Thus, we don't want hovered and selected to be true if the object is not selectable.
@@ -3075,8 +3167,8 @@ const SelectionRestorer = ({
3075
3167
  return null;
3076
3168
  };
3077
3169
 
3078
- function ownKeys$t(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
3079
- function _objectSpread$t(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys$t(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys$t(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
3170
+ function ownKeys$u(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
3171
+ function _objectSpread$u(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys$u(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys$u(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
3080
3172
 
3081
3173
  /**
3082
3174
  * Implies the following data structure:
@@ -3170,7 +3262,7 @@ function useMateSelection(drawingId, matePath, csysId) {
3170
3262
  }));
3171
3263
  const handlers = React.useMemo(() => {
3172
3264
  if (isSelectable) {
3173
- return _objectSpread$t(_objectSpread$t({}, hHandlers), sHandlers);
3265
+ return _objectSpread$u(_objectSpread$u({}, hHandlers), sHandlers);
3174
3266
  }
3175
3267
  return {};
3176
3268
  }, [isSelectable, hHandlers, sHandlers]);
@@ -3213,8 +3305,11 @@ const PluginBounds = ({
3213
3305
  };
3214
3306
 
3215
3307
  const _excluded$6 = ["children"];
3308
+ function isDOM(node) {
3309
+ return node instanceof HTMLElement || node instanceof SVGElement;
3310
+ }
3216
3311
  const PluginTooltip = _ref => {
3217
- var _React$useContext, _ref$current, _pluginBoundsRef$curr;
3312
+ var _React$useContext, _ref$current, _ref$current$triggerR, _ref$current$triggerR2, _ref$current2, _pluginBoundsRef$curr;
3218
3313
  let {
3219
3314
  children
3220
3315
  } = _ref,
@@ -3223,7 +3318,11 @@ const PluginTooltip = _ref => {
3223
3318
  const pluginBoundsRef = (_React$useContext = React.useContext(PBContext)) == null ? void 0 : _React$useContext.pluginBoundsRef;
3224
3319
  const [, setStateChanged] = React.useState(0); // We want to trigger a rerender when the tooltip is opened
3225
3320
 
3226
- const elem = reactDom.findDOMNode((_ref$current = ref.current) == null ? void 0 : _ref$current.triggerRef.current);
3321
+ // In some cases, antd components return strange refs which should be handled differently here to prevent findDOMNode errors.
3322
+ // ref.current?.triggerRef.current?.input?.parentNode in particular is needed to get the correct element if RadioButton was wrapped.
3323
+ // BUT this is obviously a hack, and the problem should ideally be resolved the other way somehow...
3324
+ const node = ((_ref$current = ref.current) == null ? void 0 : (_ref$current$triggerR = _ref$current.triggerRef.current) == null ? void 0 : (_ref$current$triggerR2 = _ref$current$triggerR.input) == null ? void 0 : _ref$current$triggerR2.parentNode) || ((_ref$current2 = ref.current) == null ? void 0 : _ref$current2.triggerRef.current);
3325
+ const elem = isDOM(node) ? reactDom.findDOMNode(node) : undefined;
3227
3326
  const elemRect = elem == null ? void 0 : elem.getBoundingClientRect();
3228
3327
  const pbRect = pluginBoundsRef == null ? void 0 : (_pluginBoundsRef$curr = pluginBoundsRef.current) == null ? void 0 : _pluginBoundsRef$curr.getBoundingClientRect();
3229
3328
  let offsetX = 0;
@@ -4167,8 +4266,8 @@ var index$H = /*#__PURE__*/Object.freeze({
4167
4266
  description: description$H
4168
4267
  });
4169
4268
 
4170
- function ownKeys$s(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
4171
- function _objectSpread$s(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys$s(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys$s(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
4269
+ function ownKeys$t(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
4270
+ function _objectSpread$t(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys$t(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys$t(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
4172
4271
  function parseVal(val) {
4173
4272
  const float = Number(val);
4174
4273
  if (!isNaN(float)) {
@@ -4419,13 +4518,13 @@ const PointEditor = ({
4419
4518
  newVals[i] = val;
4420
4519
  }
4421
4520
  });
4422
- return _objectSpread$s(_objectSpread$s({}, state), {}, {
4521
+ return _objectSpread$t(_objectSpread$t({}, state), {}, {
4423
4522
  displayVals: newVals
4424
4523
  });
4425
4524
  })).catch();
4426
4525
  } else {
4427
4526
  const value = defaults.value;
4428
- setDisplayState(state => _objectSpread$s(_objectSpread$s({}, state), {}, {
4527
+ setDisplayState(state => _objectSpread$t(_objectSpread$t({}, state), {}, {
4429
4528
  displayVals: [value.x, value.y, value.z]
4430
4529
  }));
4431
4530
  }
@@ -4441,7 +4540,7 @@ const PointEditor = ({
4441
4540
  editMode: false,
4442
4541
  displayVals: res_ !== null ? [res_.x, res_.y, res_.z] : [...state.displayVals]
4443
4542
  }));
4444
- }).catch(() => setDisplayState(state => _objectSpread$s(_objectSpread$s({}, state), {}, {
4543
+ }).catch(() => setDisplayState(state => _objectSpread$t(_objectSpread$t({}, state), {}, {
4445
4544
  editMode: false
4446
4545
  })));
4447
4546
  } else {
@@ -4463,7 +4562,7 @@ const PointEditor = ({
4463
4562
  caption: caption,
4464
4563
  highlighted: param.isChanged()
4465
4564
  }, !editMode && /*#__PURE__*/React.createElement(DisplayBase, {
4466
- onClick: () => setDisplayState(state => _objectSpread$s(_objectSpread$s({}, state), {}, {
4565
+ onClick: () => setDisplayState(state => _objectSpread$t(_objectSpread$t({}, state), {}, {
4467
4566
  editMode: true
4468
4567
  }))
4469
4568
  }, /*#__PURE__*/React.createElement(PluginTooltip, {
@@ -4546,11 +4645,11 @@ const PointEditor = ({
4546
4645
  }, "\u2014")));
4547
4646
  };
4548
4647
 
4549
- function ownKeys$r(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
4550
- function _objectSpread$r(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys$r(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys$r(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
4648
+ function ownKeys$s(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
4649
+ function _objectSpread$s(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys$s(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys$s(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
4551
4650
  function createPointParam(member) {
4552
4651
  const isExpr = member.expression.length > 0;
4553
- const value = isExpr ? member.expression : _objectSpread$r({}, member.value);
4652
+ const value = isExpr ? member.expression : _objectSpread$s({}, member.value);
4554
4653
  return {
4555
4654
  value,
4556
4655
  isExpr
@@ -6914,8 +7013,8 @@ const Digits = ({
6914
7013
 
6915
7014
  const vectorToString = (point, digits) => `${point.toArray().map(n => core.MathUtils.round(n, digits)).join(', ')}`;
6916
7015
 
6917
- function ownKeys$q(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
6918
- function _objectSpread$q(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys$q(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys$q(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
7016
+ function ownKeys$r(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
7017
+ function _objectSpread$r(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys$r(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys$r(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
6919
7018
  const Excluded = [core.GraphicType.LOOP].concat(core.EntityTypes);
6920
7019
  const RootImpl$o = ({
6921
7020
  drawingId,
@@ -6986,7 +7085,7 @@ const Output = ({
6986
7085
  const {
6987
7086
  value
6988
7087
  } = res.measureData;
6989
- return _objectSpread$q(_objectSpread$q({}, res), {}, {
7088
+ return _objectSpread$r(_objectSpread$r({}, res), {}, {
6990
7089
  asString: core.MathUtils.round(value, digits)
6991
7090
  });
6992
7091
  }
@@ -6996,13 +7095,13 @@ const Output = ({
6996
7095
  const {
6997
7096
  value
6998
7097
  } = res.measureData;
6999
- return _objectSpread$q(_objectSpread$q({}, res), {}, {
7098
+ return _objectSpread$r(_objectSpread$r({}, res), {}, {
7000
7099
  asString: vectorToString(value, digits)
7001
7100
  });
7002
7101
  }
7003
7102
  }
7004
7103
  }
7005
- return _objectSpread$q(_objectSpread$q({}, res), {}, {
7104
+ return _objectSpread$r(_objectSpread$r({}, res), {}, {
7006
7105
  asString: ''
7007
7106
  });
7008
7107
  });
@@ -7556,6 +7655,7 @@ const description$n = {
7556
7655
  },
7557
7656
 
7558
7657
  // Contains information about objects under the pointer (`interaction.objects[interaction.cycle]` should equal `hovered`)
7658
+ overdefined: {},
7559
7659
  isDragged: false,
7560
7660
  // When used drags some objects, this should equal true.
7561
7661
  scale: 1,
@@ -7582,8 +7682,8 @@ function getSketchState(drawingId, pluginId) {
7582
7682
  return plugin.state;
7583
7683
  }
7584
7684
 
7585
- function ownKeys$p(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
7586
- function _objectSpread$p(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys$p(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys$p(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
7685
+ function ownKeys$q(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
7686
+ function _objectSpread$q(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys$q(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys$q(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
7587
7687
  function CreateAngle(drawingId, pluginId) {
7588
7688
  const {
7589
7689
  set
@@ -7624,8 +7724,8 @@ function CreateAngle(drawingId, pluginId) {
7624
7724
  set(state_ => {
7625
7725
  const tmpAngularDimension = state_.tmpObjects[tmpDimensionId];
7626
7726
  return {
7627
- tmpObjects: _objectSpread$p(_objectSpread$p({}, state_.tmpObjects), {}, {
7628
- [tmpDimensionId]: _objectSpread$p(_objectSpread$p({}, tmpAngularDimension), params)
7727
+ tmpObjects: _objectSpread$q(_objectSpread$q({}, state_.tmpObjects), {}, {
7728
+ [tmpDimensionId]: _objectSpread$q(_objectSpread$q({}, tmpAngularDimension), params)
7629
7729
  })
7630
7730
  };
7631
7731
  });
@@ -7651,7 +7751,7 @@ function CreateAngle(drawingId, pluginId) {
7651
7751
  const dir1 = linesInfo.dir1;
7652
7752
  const center = linesInfo.center;
7653
7753
  const dimPos = center.clone().addScaledVector(dir0.clone().add(dir1).normalize(), 10);
7654
- const tmpAngularDimension = _objectSpread$p(_objectSpread$p({
7754
+ const tmpAngularDimension = _objectSpread$q(_objectSpread$q({
7655
7755
  class: TmpObjClasses.AngularDimension,
7656
7756
  id: tmpDimensionId
7657
7757
  }, linesInfo), {}, {
@@ -7779,8 +7879,8 @@ function getGeometryPriority(object) {
7779
7879
  return -1;
7780
7880
  }
7781
7881
 
7782
- function ownKeys$o(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
7783
- function _objectSpread$o(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys$o(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys$o(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
7882
+ function ownKeys$p(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
7883
+ function _objectSpread$p(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys$p(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys$p(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
7784
7884
  let timerId;
7785
7885
  const projectPointOnGeometry = (point, geometryId, tree) => {
7786
7886
  const geometry = tree[geometryId];
@@ -7826,7 +7926,7 @@ const setHoverState = (drawingId, pluginId, cycle, objects, hoverPos) => {
7826
7926
  const highlightedNonGeom = highlighted.filter(id => id !== hoveredId && (is2DConstraint(tree[id]) || isSketchRegion(tree[id])));
7827
7927
  return {
7828
7928
  highlighted: [...highlightedNonGeom, hoveredId, ...entities],
7829
- interaction: _objectSpread$o(_objectSpread$o({}, state_.interaction), {}, {
7929
+ interaction: _objectSpread$p(_objectSpread$p({}, state_.interaction), {}, {
7830
7930
  cycle,
7831
7931
  objects
7832
7932
  })
@@ -7835,12 +7935,12 @@ const setHoverState = (drawingId, pluginId, cycle, objects, hoverPos) => {
7835
7935
  } else {
7836
7936
  const linked = Object.values(tree).filter(obj => is2DConstraint(obj) || isSketchRegion(obj)).filter(obj => getEntities(drawingId, obj.id).some(entityId => entityId === hoveredId)).map(obj => obj.id);
7837
7937
  const state = getSketchState(drawingId, pluginId);
7838
- const constraintsToGeometry = _objectSpread$o({}, state.interaction.constraintsToGeometry);
7938
+ const constraintsToGeometry = _objectSpread$p({}, state.interaction.constraintsToGeometry);
7839
7939
  linked.forEach(id => {
7840
7940
  constraintsToGeometry[id] = hoveredId;
7841
7941
  });
7842
7942
  const prevHoveredId = state.interaction.objects[state.interaction.cycle % state.interaction.objects.length];
7843
- const lastHoveredPos = _objectSpread$o({}, state.interaction.lastHoveredPos);
7943
+ const lastHoveredPos = _objectSpread$p({}, state.interaction.lastHoveredPos);
7844
7944
  if (!hoverPos) {
7845
7945
  linked.forEach(id => delete lastHoveredPos[id]);
7846
7946
  } else if (hoveredId !== prevHoveredId) {
@@ -7868,7 +7968,7 @@ const setHoverState = (drawingId, pluginId, cycle, objects, hoverPos) => {
7868
7968
  const highlightedNonGeom = highlighted.filter(id => is2DConstraint(tree[id]) || isSketchRegion(tree[id]));
7869
7969
  return {
7870
7970
  highlighted: highlightedNonGeom,
7871
- interaction: _objectSpread$o(_objectSpread$o({}, state_.interaction), {}, {
7971
+ interaction: _objectSpread$p(_objectSpread$p({}, state_.interaction), {}, {
7872
7972
  cycle,
7873
7973
  objects
7874
7974
  })
@@ -7913,16 +8013,6 @@ const select = (drawingId, selectedId) => {
7913
8013
  prodRefId: curProduct
7914
8014
  }), true);
7915
8015
  };
7916
- const setSelected = (drawingId, selectedIds) => {
7917
- const drawing = core.getDrawing(drawingId);
7918
- const curProduct = drawing.structure.currentProduct;
7919
- const items = selectedIds.map(id => core.createInfo({
7920
- objectId: id,
7921
- prodRefId: curProduct
7922
- }));
7923
- const setSelected_ = drawing.api.interaction.setSelected;
7924
- setSelected_(items);
7925
- };
7926
8016
  const tab = (drawingId, pluginId) => {
7927
8017
  const state = getSketchState(drawingId, pluginId);
7928
8018
  if (state.rubberBandRectangle || state.isDragged) {
@@ -7933,8 +8023,43 @@ const tab = (drawingId, pluginId) => {
7933
8023
  setHoverState(drawingId, pluginId, cycle, objects);
7934
8024
  };
7935
8025
 
7936
- function Hover(drawingId, pluginId) {
8026
+ const getSketchObjIds = (drawingId, sketchId, intersections) => {
8027
+ const drawing = core.getDrawing(drawingId);
8028
+ const tree = drawing.structure.tree;
8029
+ const selection = drawing.selection.refs[drawing.selection.active || ''];
8030
+ const isSelActive = selection !== undefined;
8031
+ const objIds = intersections.map(intersection => {
8032
+ var _intersection$object$;
8033
+ return ((_intersection$object$ = intersection.object.userData) == null ? void 0 : _intersection$object$.objId) || undefined;
8034
+ });
8035
+ return objIds.filter((objId, i) => {
8036
+ var _object$members;
8037
+ const object = tree[objId || NOCCID];
8038
+ const isSelectable = object && (selection == null ? void 0 : selection.isSelectable(TreeObjScope, {
8039
+ object
8040
+ })) || false;
8041
+ const isSketchObj = object && (isSketchGeometry(object) || is2DConstraint(object)) && getAncestorIdByClass(drawingId, object.id, classcad.CCClasses.CCSketch) === sketchId;
8042
+ const isSketchRegion_ = object && isSketchRegion(object) && ((_object$members = object.members) == null ? void 0 : _object$members.sketch.value) === sketchId;
8043
+ const canBeSelected = !isSelActive || isSelectable;
8044
+ return object && (isSketchObj || isSketchRegion_) && canBeSelected && objIds.indexOf(objId) === i;
8045
+ });
8046
+ };
8047
+ const hoverIntersections = (drawingId, pluginId, intersections) => {
7937
8048
  const sketchId = core.getPlugin(drawingId, pluginId).objectId;
8049
+ const tree = core.getDrawing(drawingId).structure.tree;
8050
+ const sketchObjIds = getSketchObjIds(drawingId, sketchId, intersections);
8051
+ const sketchIntersection = intersections.find(intersection => {
8052
+ var _intersection$object$2;
8053
+ const objId = (_intersection$object$2 = intersection.object.userData) == null ? void 0 : _intersection$object$2.objId;
8054
+ const obj = tree[objId];
8055
+ return classcad.ccUtils.base.isA(obj == null ? void 0 : obj.class, classcad.CCClasses.CCSketch);
8056
+ });
8057
+ const hoverPos = sketchIntersection ? sketchIntersection.point.clone() : new THREE__namespace.Vector3();
8058
+ hoverPos.applyMatrix4(getGlobalToLocalMatrix(drawingId, sketchId));
8059
+ hover(drawingId, pluginId, sketchObjIds, hoverPos);
8060
+ };
8061
+
8062
+ function Hover(drawingId, pluginId) {
7938
8063
  const filter = object => true;
7939
8064
  const onDeactivate = () => {
7940
8065
  const setHovered = core.getDrawing(drawingId).api.interaction.setHovered;
@@ -7945,27 +8070,6 @@ function Hover(drawingId, pluginId) {
7945
8070
  tab(drawingId, pluginId);
7946
8071
  }
7947
8072
  };
7948
- const getSketchObjIds = e => {
7949
- const drawing = core.getDrawing(drawingId);
7950
- const tree = drawing.structure.tree;
7951
- const selection = drawing.selection.refs[drawing.selection.active || ''];
7952
- const isSelActive = selection !== undefined;
7953
- const objIds = e.intersections.map(intersection => {
7954
- var _intersection$object$;
7955
- return ((_intersection$object$ = intersection.object.userData) == null ? void 0 : _intersection$object$.objId) || undefined;
7956
- });
7957
- return objIds.filter((objId, i) => {
7958
- var _object$members;
7959
- const object = tree[objId || NOCCID];
7960
- const isSelectable = object && (selection == null ? void 0 : selection.isSelectable(TreeObjScope, {
7961
- object
7962
- })) || false;
7963
- const isSketchObj = object && (isSketchGeometry(object) || is2DConstraint(object)) && getAncestorIdByClass(drawingId, object.id, classcad.CCClasses.CCSketch) === sketchId;
7964
- const isSketchRegion_ = object && isSketchRegion(object) && ((_object$members = object.members) == null ? void 0 : _object$members.sketch.value) === sketchId;
7965
- const canBeSelected = !isSelActive || isSelectable;
7966
- return object && (isSketchObj || isSketchRegion_) && canBeSelected && objIds.indexOf(objId) === i;
7967
- });
7968
- };
7969
8073
 
7970
8074
  // A single handler for both onPointerOver / onPointerOut
7971
8075
  const onHover = e => {
@@ -7974,16 +8078,7 @@ function Hover(drawingId, pluginId) {
7974
8078
  if (!tree[hoveredId] || classcad.ccUtils.base.isA(tree[hoveredId].class, classcad.CCClasses.CCSketch)) {
7975
8079
  return;
7976
8080
  }
7977
- const sketchObjIds = getSketchObjIds(e);
7978
- const sketchIntersection = e.intersections.find(intersection => {
7979
- var _intersection$object$2;
7980
- const objId = (_intersection$object$2 = intersection.object.userData) == null ? void 0 : _intersection$object$2.objId;
7981
- const obj = tree[objId];
7982
- return classcad.ccUtils.base.isA(obj == null ? void 0 : obj.class, classcad.CCClasses.CCSketch);
7983
- });
7984
- const hoverPos = sketchIntersection ? sketchIntersection.point.clone() : new THREE__namespace.Vector3();
7985
- hoverPos.applyMatrix4(getGlobalToLocalMatrix(drawingId, sketchId));
7986
- hover(drawingId, pluginId, sketchObjIds, hoverPos);
8081
+ hoverIntersections(drawingId, pluginId, e.intersections);
7987
8082
  };
7988
8083
  return {
7989
8084
  name: HandlersList.HOVER,
@@ -8333,8 +8428,8 @@ const MergedWrapper = ({
8333
8428
  );
8334
8429
  };
8335
8430
 
8336
- function ownKeys$n(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
8337
- function _objectSpread$n(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys$n(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys$n(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
8431
+ function ownKeys$o(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
8432
+ function _objectSpread$o(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys$o(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys$o(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
8338
8433
 
8339
8434
  // Artificial delay in 16 ms.
8340
8435
  const artifDelay = 16;
@@ -8434,29 +8529,21 @@ function Drag(drawingId, pluginId, camControls) {
8434
8529
  cycle,
8435
8530
  objects
8436
8531
  } = getSketchState(drawingId, pluginId).interaction;
8437
- pressedId = objects.length > 0 ? objects[cycle % objects.length] : e.object.userData.objId;
8438
- const pressedObj = core.getDrawing(drawingId).structure.tree[pressedId];
8532
+ pressedId = objects.length > 0 ? objects[cycle % objects.length] : NOCCID;
8439
8533
  if (e.nativeEvent.shiftKey) {
8440
- if (!classcad.ccUtils.base.isA(pressedObj.class, classcad.CCClasses.CCSketch)) {
8441
- // If clicked on a sketch child propagate down to Sketch plane.
8442
- return;
8443
- }
8444
8534
  isRectSelectionActive = true;
8445
- rectClickPoint = e.point.clone().project(e.camera);
8446
- pressedId = NOCCID;
8447
8535
  camControls.enabled = false;
8448
- e.target.setPointerCapture(e.pointerId);
8449
- e.stopPropagation();
8536
+ rectClickPoint = e.point.clone().project(e.camera);
8450
8537
  set({
8451
8538
  rubberBandRectangle: {
8452
8539
  min: rectClickPoint.clone(),
8453
8540
  max: rectClickPoint.clone()
8454
8541
  }
8455
8542
  });
8543
+ e.stopPropagation();
8456
8544
  return;
8457
8545
  }
8458
- if (classcad.ccUtils.base.isA(pressedObj.class, classcad.CCClasses.CCSketch)) {
8459
- pressedId = NOCCID;
8546
+ if (pressedId === NOCCID) {
8460
8547
  return;
8461
8548
  }
8462
8549
  const intersectionPoint = getPointOnPlane(e.unprojectedPoint, e.camera, getGlobalToLocalMatrix(drawingId, sketchId));
@@ -8492,31 +8579,42 @@ function Drag(drawingId, pluginId, camControls) {
8492
8579
  const setSelected = drawing.api.interaction.setSelected;
8493
8580
  if (isRectSelectionActive) {
8494
8581
  isRectSelectionActive = false;
8495
- const highlighted = getSketchState(drawingId, pluginId).highlighted;
8496
- const highlightedInfo = highlighted.map(id => core.createInfo({
8497
- objectId: id,
8498
- prodRefId: curProduct
8499
- }));
8500
- const curSelected = drawing.interaction.selected || [];
8501
- setSelected([...curSelected, ...highlightedInfo]);
8502
- set({
8503
- highlighted: [],
8504
- rubberBandRectangle: undefined
8505
- });
8506
- e.target.releasePointerCapture(e.pointerId);
8507
- e.stopPropagation();
8508
- return;
8582
+ if (isMoved) {
8583
+ const highlighted = getSketchState(drawingId, pluginId).highlighted;
8584
+ const highlightedInfo = highlighted.map(id => core.createInfo({
8585
+ objectId: id,
8586
+ prodRefId: curProduct
8587
+ }));
8588
+ const curSelected = drawing.interaction.selected || [];
8589
+ setSelected([...curSelected, ...highlightedInfo]);
8590
+ set({
8591
+ highlighted: [],
8592
+ rubberBandRectangle: undefined
8593
+ });
8594
+ pressedId = NOCCID;
8595
+ e.stopPropagation();
8596
+ return;
8597
+ }
8509
8598
  }
8510
- set({
8511
- isDragged: false
8512
- });
8513
8599
  if (isMoved === false) {
8514
8600
  if (pressedId === NOCCID) {
8515
8601
  clearSelection();
8602
+ set({
8603
+ isDragged: false,
8604
+ rubberBandRectangle: undefined
8605
+ });
8606
+ e.stopPropagation();
8516
8607
  return;
8517
8608
  }
8518
8609
  select(drawingId, pressedId);
8519
8610
  }
8611
+ set({
8612
+ isDragged: false,
8613
+ rubberBandRectangle: undefined
8614
+ });
8615
+
8616
+ // We want to reset the interaction state after the drag stops
8617
+ hoverIntersections(drawingId, pluginId, e.intersections);
8520
8618
  clearIgnoreList();
8521
8619
  clearDraggedPoints();
8522
8620
  pressedId = NOCCID;
@@ -8601,7 +8699,7 @@ function Drag(drawingId, pluginId, camControls) {
8601
8699
  name: HandlersList.DRAG,
8602
8700
  filter,
8603
8701
  onDeactivate,
8604
- pointerHandlers: _objectSpread$n({
8702
+ pointerHandlers: _objectSpread$o({
8605
8703
  onPointerDown,
8606
8704
  onPointerUp,
8607
8705
  onPointerMove
@@ -8613,8 +8711,8 @@ function Drag(drawingId, pluginId, camControls) {
8613
8711
  };
8614
8712
  }
8615
8713
 
8616
- function ownKeys$m(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
8617
- function _objectSpread$m(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys$m(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys$m(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
8714
+ function ownKeys$n(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
8715
+ function _objectSpread$n(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys$n(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys$n(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
8618
8716
  function DrawPoint(drawingId, pluginId) {
8619
8717
  const {
8620
8718
  set
@@ -8663,7 +8761,7 @@ function DrawPoint(drawingId, pluginId) {
8663
8761
  }).then(() => {
8664
8762
  // Remove the old temporary point once a permanent one is created in its place
8665
8763
  set(state => {
8666
- const tmpObjects_ = _objectSpread$m({}, state.tmpObjects);
8764
+ const tmpObjects_ = _objectSpread$n({}, state.tmpObjects);
8667
8765
  delete tmpObjects_[curPointId];
8668
8766
  return {
8669
8767
  tmpObjects: tmpObjects_
@@ -8676,8 +8774,8 @@ function DrawPoint(drawingId, pluginId) {
8676
8774
  set(state => {
8677
8775
  const tmpPoint = state.tmpObjects[curPointId];
8678
8776
  return {
8679
- tmpObjects: _objectSpread$m(_objectSpread$m({}, state.tmpObjects), {}, {
8680
- [tmpPointId]: _objectSpread$m(_objectSpread$m({}, tmpPoint), {}, {
8777
+ tmpObjects: _objectSpread$n(_objectSpread$n({}, state.tmpObjects), {}, {
8778
+ [tmpPointId]: _objectSpread$n(_objectSpread$n({}, tmpPoint), {}, {
8681
8779
  id: tmpPointId,
8682
8780
  position: tmpPoint.position.clone()
8683
8781
  })
@@ -8694,8 +8792,8 @@ function DrawPoint(drawingId, pluginId) {
8694
8792
  const tmpPoint = state.tmpObjects[tmpPointId];
8695
8793
  return {
8696
8794
  mousePos,
8697
- tmpObjects: _objectSpread$m(_objectSpread$m({}, state.tmpObjects), {}, {
8698
- [tmpPointId]: _objectSpread$m(_objectSpread$m({}, tmpPoint), {}, {
8795
+ tmpObjects: _objectSpread$n(_objectSpread$n({}, state.tmpObjects), {}, {
8796
+ [tmpPointId]: _objectSpread$n(_objectSpread$n({}, tmpPoint), {}, {
8699
8797
  position: mousePos
8700
8798
  })
8701
8799
  })
@@ -8715,8 +8813,8 @@ function DrawPoint(drawingId, pluginId) {
8715
8813
  };
8716
8814
  }
8717
8815
 
8718
- function ownKeys$l(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
8719
- function _objectSpread$l(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys$l(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys$l(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
8816
+ function ownKeys$m(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
8817
+ function _objectSpread$m(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys$m(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys$m(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
8720
8818
  function DrawLine(drawingId, pluginId) {
8721
8819
  // Global hooks:
8722
8820
  const {
@@ -8795,7 +8893,7 @@ function DrawLine(drawingId, pluginId) {
8795
8893
  endPId: tmpEndP.id
8796
8894
  };
8797
8895
  return {
8798
- tmpObjects: _objectSpread$l(_objectSpread$l({}, state.tmpObjects), {}, {
8896
+ tmpObjects: _objectSpread$m(_objectSpread$m({}, state.tmpObjects), {}, {
8799
8897
  [tmpStartP.id]: tmpStartP,
8800
8898
  [tmpLine.id]: tmpLine
8801
8899
  })
@@ -8831,7 +8929,7 @@ function DrawLine(drawingId, pluginId) {
8831
8929
  var _lastAddedLine$childr;
8832
8930
  // Remove the old temporary line and its points once a permanent one is created in its place
8833
8931
  set(state => {
8834
- const tmpObjects_ = _objectSpread$l({}, state.tmpObjects);
8932
+ const tmpObjects_ = _objectSpread$m({}, state.tmpObjects);
8835
8933
  delete tmpObjects_[curStartPId];
8836
8934
  delete tmpObjects_[curEndPId];
8837
8935
  delete tmpObjects_[curLineId];
@@ -8854,16 +8952,16 @@ function DrawLine(drawingId, pluginId) {
8854
8952
  const tmpEndP = state.tmpObjects[curEndPId];
8855
8953
  const tmpLine = state.tmpObjects[curLineId];
8856
8954
  return {
8857
- tmpObjects: _objectSpread$l(_objectSpread$l({}, state.tmpObjects), {}, {
8858
- [tmpStartPId]: _objectSpread$l(_objectSpread$l({}, tmpStartP), {}, {
8955
+ tmpObjects: _objectSpread$m(_objectSpread$m({}, state.tmpObjects), {}, {
8956
+ [tmpStartPId]: _objectSpread$m(_objectSpread$m({}, tmpStartP), {}, {
8859
8957
  id: tmpStartPId,
8860
8958
  position: tmpEndP.position.clone()
8861
8959
  }),
8862
- [tmpEndPId]: _objectSpread$l(_objectSpread$l({}, tmpEndP), {}, {
8960
+ [tmpEndPId]: _objectSpread$m(_objectSpread$m({}, tmpEndP), {}, {
8863
8961
  id: tmpEndPId,
8864
8962
  position: tmpEndP.position.clone()
8865
8963
  }),
8866
- [tmpLineId]: _objectSpread$l(_objectSpread$l({}, tmpLine), {}, {
8964
+ [tmpLineId]: _objectSpread$m(_objectSpread$m({}, tmpLine), {}, {
8867
8965
  id: tmpLineId,
8868
8966
  startPId: tmpStartPId,
8869
8967
  endPId: tmpEndPId
@@ -8882,8 +8980,8 @@ function DrawLine(drawingId, pluginId) {
8882
8980
  const tmpEndP = state.tmpObjects[tmpEndPId];
8883
8981
  return {
8884
8982
  mousePos,
8885
- tmpObjects: _objectSpread$l(_objectSpread$l({}, state.tmpObjects), {}, {
8886
- [tmpEndPId]: _objectSpread$l(_objectSpread$l({}, tmpEndP), {}, {
8983
+ tmpObjects: _objectSpread$m(_objectSpread$m({}, state.tmpObjects), {}, {
8984
+ [tmpEndPId]: _objectSpread$m(_objectSpread$m({}, tmpEndP), {}, {
8887
8985
  position: mousePos
8888
8986
  })
8889
8987
  })
@@ -8906,8 +9004,8 @@ function DrawLine(drawingId, pluginId) {
8906
9004
  };
8907
9005
  }
8908
9006
 
8909
- function ownKeys$k(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
8910
- function _objectSpread$k(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys$k(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys$k(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
9007
+ function ownKeys$l(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
9008
+ function _objectSpread$l(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys$l(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys$l(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
8911
9009
  function DrawRectangle(drawingId, pluginId, rectType) {
8912
9010
  const {
8913
9011
  set
@@ -8983,7 +9081,7 @@ function DrawRectangle(drawingId, pluginId, rectType) {
8983
9081
  isSquare: e.shiftKey,
8984
9082
  isCentered: rectType === HandlersList.DRAWRECTCENTER
8985
9083
  };
8986
- const newTmpObjects = _objectSpread$k(_objectSpread$k({}, state.tmpObjects), {}, {
9084
+ const newTmpObjects = _objectSpread$l(_objectSpread$l({}, state.tmpObjects), {}, {
8987
9085
  [tmpRect.id]: tmpRect
8988
9086
  });
8989
9087
  delete newTmpObjects[tmpPointId];
@@ -9019,7 +9117,7 @@ function DrawRectangle(drawingId, pluginId, rectType) {
9019
9117
  }).then(() => {
9020
9118
  // Remove the old temporary rectangle once a permanent one is created in its place
9021
9119
  set(state => {
9022
- const tmpObjects = _objectSpread$k({}, state.tmpObjects);
9120
+ const tmpObjects = _objectSpread$l({}, state.tmpObjects);
9023
9121
  delete tmpObjects[curRectId];
9024
9122
  return {
9025
9123
  tmpObjects
@@ -9037,7 +9135,7 @@ function DrawRectangle(drawingId, pluginId, rectType) {
9037
9135
  position: tmpRect_.end.clone()
9038
9136
  };
9039
9137
  return {
9040
- tmpObjects: _objectSpread$k(_objectSpread$k({}, state.tmpObjects), {}, {
9138
+ tmpObjects: _objectSpread$l(_objectSpread$l({}, state.tmpObjects), {}, {
9041
9139
  [tmpPoint.id]: tmpPoint
9042
9140
  })
9043
9141
  };
@@ -9053,19 +9151,19 @@ function DrawRectangle(drawingId, pluginId, rectType) {
9053
9151
  let newTmpObjs = null;
9054
9152
  if (additionIndex === 0) {
9055
9153
  const tmpPoint = state.tmpObjects[tmpPointId];
9056
- newTmpObjs = _objectSpread$k(_objectSpread$k({}, state.tmpObjects), {}, {
9057
- [tmpPointId]: _objectSpread$k(_objectSpread$k({}, tmpPoint), {}, {
9154
+ newTmpObjs = _objectSpread$l(_objectSpread$l({}, state.tmpObjects), {}, {
9155
+ [tmpPointId]: _objectSpread$l(_objectSpread$l({}, tmpPoint), {}, {
9058
9156
  position: snappedPos
9059
9157
  })
9060
9158
  });
9061
9159
  } else {
9062
- newTmpObjs = _objectSpread$k(_objectSpread$k({}, state.tmpObjects), {}, {
9063
- [tmpRectId]: _objectSpread$k(_objectSpread$k({}, state.tmpObjects[tmpRectId]), {}, {
9160
+ newTmpObjs = _objectSpread$l(_objectSpread$l({}, state.tmpObjects), {}, {
9161
+ [tmpRectId]: _objectSpread$l(_objectSpread$l({}, state.tmpObjects[tmpRectId]), {}, {
9064
9162
  end: new THREE__namespace.Vector3(snappedPos.x, snappedPos.y, 0)
9065
9163
  })
9066
9164
  });
9067
9165
  }
9068
- return _objectSpread$k(_objectSpread$k({}, state), {}, {
9166
+ return _objectSpread$l(_objectSpread$l({}, state), {}, {
9069
9167
  tmpObjects: newTmpObjs,
9070
9168
  mousePos: snappedPos
9071
9169
  });
@@ -9074,9 +9172,9 @@ function DrawRectangle(drawingId, pluginId, rectType) {
9074
9172
  };
9075
9173
  const keydown = e => {
9076
9174
  if (e.code === 'ShiftLeft' || e.code === 'ShiftRight') {
9077
- set(state => _objectSpread$k(_objectSpread$k({}, state), {}, {
9078
- tmpObjects: _objectSpread$k(_objectSpread$k({}, state.tmpObjects), {}, {
9079
- [tmpRectId]: _objectSpread$k(_objectSpread$k({}, state.tmpObjects[tmpRectId]), {}, {
9175
+ set(state => _objectSpread$l(_objectSpread$l({}, state), {}, {
9176
+ tmpObjects: _objectSpread$l(_objectSpread$l({}, state.tmpObjects), {}, {
9177
+ [tmpRectId]: _objectSpread$l(_objectSpread$l({}, state.tmpObjects[tmpRectId]), {}, {
9080
9178
  isSquare: true
9081
9179
  })
9082
9180
  })
@@ -9085,9 +9183,9 @@ function DrawRectangle(drawingId, pluginId, rectType) {
9085
9183
  };
9086
9184
  const keyup = e => {
9087
9185
  if (e.code === 'ShiftLeft' || e.code === 'ShiftRight') {
9088
- set(state => _objectSpread$k(_objectSpread$k({}, state), {}, {
9089
- tmpObjects: _objectSpread$k(_objectSpread$k({}, state.tmpObjects), {}, {
9090
- [tmpRectId]: _objectSpread$k(_objectSpread$k({}, state.tmpObjects[tmpRectId]), {}, {
9186
+ set(state => _objectSpread$l(_objectSpread$l({}, state), {}, {
9187
+ tmpObjects: _objectSpread$l(_objectSpread$l({}, state.tmpObjects), {}, {
9188
+ [tmpRectId]: _objectSpread$l(_objectSpread$l({}, state.tmpObjects[tmpRectId]), {}, {
9091
9189
  isSquare: false
9092
9190
  })
9093
9191
  })
@@ -9269,8 +9367,8 @@ const Circle$1 = ({
9269
9367
  }), /*#__PURE__*/React.createElement("meshBasicMaterial", materialProps));
9270
9368
  };
9271
9369
 
9272
- function ownKeys$j(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
9273
- function _objectSpread$j(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys$j(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys$j(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
9370
+ function ownKeys$k(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
9371
+ function _objectSpread$k(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys$k(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys$k(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
9274
9372
  function DrawArc(drawingId, pluginId, arcType) {
9275
9373
  // Global hooks:
9276
9374
  const {
@@ -9323,7 +9421,7 @@ function DrawArc(drawingId, pluginId, arcType) {
9323
9421
  additionIndex = 0;
9324
9422
  lastAddedEndPointId = NOCCID;
9325
9423
  set(state => {
9326
- const tmpStartP = _objectSpread$j(_objectSpread$j({}, state.tmpObjects[tmpStartPId]), {}, {
9424
+ const tmpStartP = _objectSpread$k(_objectSpread$k({}, state.tmpObjects[tmpStartPId]), {}, {
9327
9425
  position: lastMousePos.clone()
9328
9426
  });
9329
9427
  return {
@@ -9336,20 +9434,20 @@ function DrawArc(drawingId, pluginId, arcType) {
9336
9434
  additionIndex = 1;
9337
9435
  set(state => {
9338
9436
  const tmpStartP = state.tmpObjects[tmpStartPId];
9339
- const tmpEndP = _objectSpread$j(_objectSpread$j({}, state.tmpObjects[tmpEndPId]), {}, {
9437
+ const tmpEndP = _objectSpread$k(_objectSpread$k({}, state.tmpObjects[tmpEndPId]), {}, {
9340
9438
  position: lastMousePos.clone()
9341
9439
  });
9342
9440
  const centerPos = calculateCenterPoint(tmpStartP.position, lastMousePos, lastMousePos);
9343
- const tmpCenterP = _objectSpread$j(_objectSpread$j({}, state.tmpObjects[tmpCenterPId]), {}, {
9441
+ const tmpCenterP = _objectSpread$k(_objectSpread$k({}, state.tmpObjects[tmpCenterPId]), {}, {
9344
9442
  position: centerPos ? centerPos : lastMousePos.clone()
9345
9443
  });
9346
- const tmpArc = _objectSpread$j(_objectSpread$j({}, state.tmpObjects[tmpArcId]), {}, {
9444
+ const tmpArc = _objectSpread$k(_objectSpread$k({}, state.tmpObjects[tmpArcId]), {}, {
9347
9445
  // In case centerPos couldn't be calculated, the arc should be drawn as a line
9348
9446
  drawAsLine: centerPos === undefined,
9349
9447
  clockwise: false
9350
9448
  });
9351
9449
  return {
9352
- tmpObjects: _objectSpread$j(_objectSpread$j({}, state.tmpObjects), {}, {
9450
+ tmpObjects: _objectSpread$k(_objectSpread$k({}, state.tmpObjects), {}, {
9353
9451
  [tmpEndP.id]: tmpEndP,
9354
9452
  [tmpCenterP.id]: tmpCenterP,
9355
9453
  [tmpArc.id]: tmpArc
@@ -9460,7 +9558,7 @@ function DrawArc(drawingId, pluginId, arcType) {
9460
9558
  clockwise: false
9461
9559
  };
9462
9560
  return {
9463
- tmpObjects: _objectSpread$j(_objectSpread$j({}, state.tmpObjects), {}, {
9561
+ tmpObjects: _objectSpread$k(_objectSpread$k({}, state.tmpObjects), {}, {
9464
9562
  [tmpEndP.id]: tmpEndP,
9465
9563
  [tmpCenterP.id]: tmpCenterP,
9466
9564
  [tmpArc.id]: tmpArc
@@ -9489,7 +9587,7 @@ function DrawArc(drawingId, pluginId, arcType) {
9489
9587
  clockwise: false
9490
9588
  };
9491
9589
  return {
9492
- tmpObjects: _objectSpread$j(_objectSpread$j({}, state.tmpObjects), {}, {
9590
+ tmpObjects: _objectSpread$k(_objectSpread$k({}, state.tmpObjects), {}, {
9493
9591
  [tmpCenterP.id]: tmpCenterP,
9494
9592
  [tmpArc.id]: tmpArc
9495
9593
  })
@@ -9536,7 +9634,7 @@ function DrawArc(drawingId, pluginId, arcType) {
9536
9634
  var _lastAddedArc$childre;
9537
9635
  // Remove the old temporary arc and its points once a permanent one is created in its place
9538
9636
  set(state => {
9539
- const tmpObjects_ = _objectSpread$j({}, state.tmpObjects);
9637
+ const tmpObjects_ = _objectSpread$k({}, state.tmpObjects);
9540
9638
  delete tmpObjects_[curStartPId];
9541
9639
  delete tmpObjects_[curEndPId];
9542
9640
  delete tmpObjects_[curCenterPId];
@@ -9569,20 +9667,20 @@ function DrawArc(drawingId, pluginId, arcType) {
9569
9667
  const tmpCenterP = state.tmpObjects[curCenterPId];
9570
9668
  const tmpArcP = state.tmpObjects[curArcId];
9571
9669
  return {
9572
- tmpObjects: _objectSpread$j(_objectSpread$j({}, state.tmpObjects), {}, {
9573
- [tmpStartPId]: _objectSpread$j(_objectSpread$j({}, tmpStartP), {}, {
9670
+ tmpObjects: _objectSpread$k(_objectSpread$k({}, state.tmpObjects), {}, {
9671
+ [tmpStartPId]: _objectSpread$k(_objectSpread$k({}, tmpStartP), {}, {
9574
9672
  id: tmpStartPId,
9575
9673
  position: tmpEndP.position.clone()
9576
9674
  }),
9577
- [tmpEndPId]: _objectSpread$j(_objectSpread$j({}, tmpEndP), {}, {
9675
+ [tmpEndPId]: _objectSpread$k(_objectSpread$k({}, tmpEndP), {}, {
9578
9676
  id: tmpEndPId,
9579
9677
  position: tmpEndP.position.clone()
9580
9678
  }),
9581
- [tmpCenterPId]: _objectSpread$j(_objectSpread$j({}, tmpCenterP), {}, {
9679
+ [tmpCenterPId]: _objectSpread$k(_objectSpread$k({}, tmpCenterP), {}, {
9582
9680
  id: tmpCenterPId,
9583
9681
  position: tmpEndP.position.clone()
9584
9682
  }),
9585
- [tmpArcId]: _objectSpread$j(_objectSpread$j({}, tmpArcP), {}, {
9683
+ [tmpArcId]: _objectSpread$k(_objectSpread$k({}, tmpArcP), {}, {
9586
9684
  id: tmpArcId,
9587
9685
  startPId: tmpStartPId,
9588
9686
  endPId: tmpEndPId,
@@ -9604,8 +9702,8 @@ function DrawArc(drawingId, pluginId, arcType) {
9604
9702
  const tmpStartP = state.tmpObjects[tmpStartPId];
9605
9703
  return {
9606
9704
  mousePos: lastMousePos,
9607
- tmpObjects: _objectSpread$j(_objectSpread$j({}, state.tmpObjects), {}, {
9608
- [tmpStartPId]: _objectSpread$j(_objectSpread$j({}, tmpStartP), {}, {
9705
+ tmpObjects: _objectSpread$k(_objectSpread$k({}, state.tmpObjects), {}, {
9706
+ [tmpStartPId]: _objectSpread$k(_objectSpread$k({}, tmpStartP), {}, {
9609
9707
  position: lastMousePos.clone()
9610
9708
  })
9611
9709
  })
@@ -9618,14 +9716,14 @@ function DrawArc(drawingId, pluginId, arcType) {
9618
9716
  const centerPos = calculateCenterPoint(tmpStartP.position, lastMousePos, lastMousePos);
9619
9717
  return {
9620
9718
  mousePos: lastMousePos,
9621
- tmpObjects: _objectSpread$j(_objectSpread$j({}, state.tmpObjects), {}, {
9622
- [tmpEndPId]: _objectSpread$j(_objectSpread$j({}, tmpEndP), {}, {
9719
+ tmpObjects: _objectSpread$k(_objectSpread$k({}, state.tmpObjects), {}, {
9720
+ [tmpEndPId]: _objectSpread$k(_objectSpread$k({}, tmpEndP), {}, {
9623
9721
  position: lastMousePos.clone()
9624
9722
  }),
9625
- [tmpCenterPId]: _objectSpread$j(_objectSpread$j({}, tmpCenterP), {}, {
9723
+ [tmpCenterPId]: _objectSpread$k(_objectSpread$k({}, tmpCenterP), {}, {
9626
9724
  position: centerPos ? centerPos : lastMousePos.clone()
9627
9725
  }),
9628
- [tmpArcId]: _objectSpread$j(_objectSpread$j({}, tmpArc), {}, {
9726
+ [tmpArcId]: _objectSpread$k(_objectSpread$k({}, tmpArc), {}, {
9629
9727
  // In case centerPos couldn't be calculated, the arc should be drawn as a line
9630
9728
  drawAsLine: centerPos === undefined,
9631
9729
  clockwise: false
@@ -9640,14 +9738,14 @@ function DrawArc(drawingId, pluginId, arcType) {
9640
9738
  const centerPos = calculateCenterPoint(tmpStartP.position, tmpEndP.position, lastMousePos);
9641
9739
  return {
9642
9740
  mousePos: lastMousePos,
9643
- tmpObjects: _objectSpread$j(_objectSpread$j({}, state.tmpObjects), {}, {
9644
- [tmpEndPId]: _objectSpread$j(_objectSpread$j({}, tmpEndP), {}, {
9741
+ tmpObjects: _objectSpread$k(_objectSpread$k({}, state.tmpObjects), {}, {
9742
+ [tmpEndPId]: _objectSpread$k(_objectSpread$k({}, tmpEndP), {}, {
9645
9743
  position: arcType === HandlersList.DRAWARCTANGENT ? lastMousePos.clone() : tmpEndP.position
9646
9744
  }),
9647
- [tmpCenterPId]: _objectSpread$j(_objectSpread$j({}, tmpCenterP), {}, {
9745
+ [tmpCenterPId]: _objectSpread$k(_objectSpread$k({}, tmpCenterP), {}, {
9648
9746
  position: centerPos ? centerPos : lastMousePos.clone()
9649
9747
  }),
9650
- [tmpArcId]: _objectSpread$j(_objectSpread$j({}, tmpArc), {}, {
9748
+ [tmpArcId]: _objectSpread$k(_objectSpread$k({}, tmpArc), {}, {
9651
9749
  // In case centerPos couldn't be calculated, the arc should be drawn as a line
9652
9750
  drawAsLine: centerPos === undefined,
9653
9751
  clockwise: evaluateClockwise(tmpStartP.position, tmpEndP.position, lastMousePos)
@@ -9673,8 +9771,8 @@ function DrawArc(drawingId, pluginId, arcType) {
9673
9771
  };
9674
9772
  }
9675
9773
 
9676
- function ownKeys$i(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
9677
- function _objectSpread$i(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys$i(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys$i(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
9774
+ function ownKeys$j(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
9775
+ function _objectSpread$j(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys$j(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys$j(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
9678
9776
  function DrawCircle(drawingId, pluginId) {
9679
9777
  const {
9680
9778
  set
@@ -9718,7 +9816,7 @@ function DrawCircle(drawingId, pluginId) {
9718
9816
  } else {
9719
9817
  additionIndex = 0;
9720
9818
  set(state => {
9721
- const tmpCenterP = _objectSpread$i(_objectSpread$i({}, state.tmpObjects[tmpCenterPId]), {}, {
9819
+ const tmpCenterP = _objectSpread$j(_objectSpread$j({}, state.tmpObjects[tmpCenterPId]), {}, {
9722
9820
  position: lastMousePos.clone()
9723
9821
  });
9724
9822
  return {
@@ -9747,7 +9845,7 @@ function DrawCircle(drawingId, pluginId) {
9747
9845
  radius: 0.001
9748
9846
  };
9749
9847
  return {
9750
- tmpObjects: _objectSpread$i(_objectSpread$i({}, state.tmpObjects), {}, {
9848
+ tmpObjects: _objectSpread$j(_objectSpread$j({}, state.tmpObjects), {}, {
9751
9849
  [tmpCenterP.id]: tmpCenterP,
9752
9850
  [tmpCircle.id]: tmpCircle
9753
9851
  })
@@ -9769,7 +9867,7 @@ function DrawCircle(drawingId, pluginId) {
9769
9867
  }).then(() => {
9770
9868
  // Remove the old temporary circle and its center point once a permanent one is created in its place
9771
9869
  set(state => {
9772
- const tmpObjects_ = _objectSpread$i({}, state.tmpObjects);
9870
+ const tmpObjects_ = _objectSpread$j({}, state.tmpObjects);
9773
9871
  delete tmpObjects_[curCenterPId];
9774
9872
  delete tmpObjects_[curCircleId];
9775
9873
  return {
@@ -9784,8 +9882,8 @@ function DrawCircle(drawingId, pluginId) {
9784
9882
  set(state => {
9785
9883
  const tmpCenterP = state.tmpObjects[curCenterPId];
9786
9884
  return {
9787
- tmpObjects: _objectSpread$i(_objectSpread$i({}, state.tmpObjects), {}, {
9788
- [tmpCenterPId]: _objectSpread$i(_objectSpread$i({}, tmpCenterP), {}, {
9885
+ tmpObjects: _objectSpread$j(_objectSpread$j({}, state.tmpObjects), {}, {
9886
+ [tmpCenterPId]: _objectSpread$j(_objectSpread$j({}, tmpCenterP), {}, {
9789
9887
  id: tmpCenterPId,
9790
9888
  position: e.point.clone().applyMatrix4(getGlobalToLocalMatrix(drawingId, sketchId))
9791
9889
  })
@@ -9805,8 +9903,8 @@ function DrawCircle(drawingId, pluginId) {
9805
9903
  const tmpCenterP = state.tmpObjects[tmpCenterPId];
9806
9904
  return {
9807
9905
  mousePos: lastMousePos,
9808
- tmpObjects: _objectSpread$i(_objectSpread$i({}, state.tmpObjects), {}, {
9809
- [tmpCenterPId]: _objectSpread$i(_objectSpread$i({}, tmpCenterP), {}, {
9906
+ tmpObjects: _objectSpread$j(_objectSpread$j({}, state.tmpObjects), {}, {
9907
+ [tmpCenterPId]: _objectSpread$j(_objectSpread$j({}, tmpCenterP), {}, {
9810
9908
  position: snappedPos || localPos
9811
9909
  })
9812
9910
  })
@@ -9816,8 +9914,8 @@ function DrawCircle(drawingId, pluginId) {
9816
9914
  const tmpCircle = state.tmpObjects[tmpCircleId];
9817
9915
  return {
9818
9916
  mousePos: lastMousePos,
9819
- tmpObjects: _objectSpread$i(_objectSpread$i({}, state.tmpObjects), {}, {
9820
- [tmpCircleId]: _objectSpread$i(_objectSpread$i({}, tmpCircle), {}, {
9917
+ tmpObjects: _objectSpread$j(_objectSpread$j({}, state.tmpObjects), {}, {
9918
+ [tmpCircleId]: _objectSpread$j(_objectSpread$j({}, tmpCircle), {}, {
9821
9919
  radius: Math.max(tmpCenterP.position.distanceTo(localPos), 0.001)
9822
9920
  })
9823
9921
  })
@@ -9943,7 +10041,7 @@ var img$F = "data:image/svg+xml,%3csvg width='100' height='100' viewBox='0 0 100
9943
10041
  var img$E = "data:image/svg+xml,%3csvg width='100' height='100' viewBox='0 0 100 100' fill='none' xmlns='http://www.w3.org/2000/svg'%3e%3crect x='18.5' y='18.5' width='64' height='64' fill='%23C4C4C4' stroke='black' stroke-width='5'/%3e%3cpath d='M48.6562 36.4062V53.2637C48.6562 56.0645 47.7773 58.2793 46.0195 59.9082C44.2734 61.5371 41.8828 62.3516 38.8477 62.3516C35.8594 62.3516 33.4863 61.5605 31.7285 59.9785C29.9707 58.3965 29.0742 56.2227 29.0391 53.457V36.4062H34.3125V53.2988C34.3125 54.9746 34.7109 56.1992 35.5078 56.9727C36.3164 57.7344 37.4297 58.1152 38.8477 58.1152C41.8125 58.1152 43.3184 56.5566 43.3652 53.4395V36.4062H48.6562ZM66.252 55.2852C66.252 54.2891 65.9004 53.5273 65.1973 53C64.4941 52.4609 63.2285 51.8984 61.4004 51.3125C59.5723 50.7148 58.125 50.1289 57.0586 49.5547C54.1523 47.9844 52.6992 45.8691 52.6992 43.209C52.6992 41.8262 53.0859 40.5957 53.8594 39.5176C54.6445 38.4277 55.7637 37.5781 57.2168 36.9688C58.6816 36.3594 60.3223 36.0547 62.1387 36.0547C63.9668 36.0547 65.5957 36.3887 67.0254 37.0566C68.4551 37.7129 69.5625 38.6445 70.3477 39.8516C71.1445 41.0586 71.543 42.4297 71.543 43.9648H66.2695C66.2695 42.793 65.9004 41.8848 65.1621 41.2402C64.4238 40.584 63.3867 40.2559 62.0508 40.2559C60.7617 40.2559 59.7598 40.5312 59.0449 41.082C58.3301 41.6211 57.9727 42.3359 57.9727 43.2266C57.9727 44.0586 58.3887 44.7559 59.2207 45.3184C60.0645 45.8809 61.3008 46.4082 62.9297 46.9004C65.9297 47.8027 68.1152 48.9219 69.4863 50.2578C70.8574 51.5938 71.543 53.2578 71.543 55.25C71.543 57.4648 70.7051 59.2051 69.0293 60.4707C67.3535 61.7246 65.0977 62.3516 62.2617 62.3516C60.293 62.3516 58.5 61.9941 56.8828 61.2793C55.2656 60.5527 54.0293 59.5625 53.1738 58.3086C52.3301 57.0547 51.9082 55.6016 51.9082 53.9492H57.1992C57.1992 56.7734 58.8867 58.1855 62.2617 58.1855C63.5156 58.1855 64.4941 57.9336 65.1973 57.4297C65.9004 56.9141 66.252 56.1992 66.252 55.2852Z' fill='black'/%3e%3c/svg%3e";
9944
10042
  var useReference = img$E;
9945
10043
 
9946
- var img$D = "data:image/svg+xml,%3csvg width='100' height='100' viewBox='0 0 100 100' fill='none' xmlns='http://www.w3.org/2000/svg'%3e%3cpath d='M52.9688 53.0938H42.2812V71.5H36.25V26H51.3125C56.4375 26 60.375 27.1667 63.125 29.5C65.8958 31.8333 67.2812 35.2292 67.2812 39.6875C67.2812 42.5208 66.5104 44.9896 64.9688 47.0938C63.4479 49.1979 61.3229 50.7708 58.5938 51.8125L69.2812 71.125V71.5H62.8438L52.9688 53.0938ZM42.2812 48.1875H51.5C54.4792 48.1875 56.8438 47.4167 58.5938 45.875C60.3646 44.3333 61.25 42.2708 61.25 39.6875C61.25 36.875 60.4062 34.7188 58.7188 33.2188C57.0521 31.7188 54.6354 30.9583 51.4688 30.9375H42.2812V48.1875Z' fill='%235E5E5E'/%3e%3cpath d='M52.9688 53.0938L53.8499 52.621L53.5671 52.0938H52.9688V53.0938ZM42.2812 53.0938V52.0938H41.2812V53.0938H42.2812ZM42.2812 71.5V72.5H43.2812V71.5H42.2812ZM36.25 71.5H35.25V72.5H36.25V71.5ZM36.25 26V25H35.25V26H36.25ZM63.125 29.5L62.478 30.2625L62.4809 30.2649L63.125 29.5ZM64.9688 47.0938L64.1621 46.5027L64.1583 46.508L64.9688 47.0938ZM58.5938 51.8125L58.2372 50.8782L57.1611 51.2889L57.7188 52.2967L58.5938 51.8125ZM69.2812 71.125H70.2812V70.8668L70.1562 70.6408L69.2812 71.125ZM69.2812 71.5V72.5H70.2812V71.5H69.2812ZM62.8438 71.5L61.9626 71.9728L62.2454 72.5H62.8438V71.5ZM42.2812 48.1875H41.2812V49.1875H42.2812V48.1875ZM58.5938 45.875L57.9371 45.1208L57.9327 45.1246L58.5938 45.875ZM58.7188 33.2188L58.0498 33.9621L58.0544 33.9662L58.7188 33.2188ZM51.4688 30.9375L51.4753 29.9375H51.4688V30.9375ZM42.2812 30.9375V29.9375H41.2812V30.9375H42.2812ZM52.9688 52.0938H42.2812V54.0938H52.9688V52.0938ZM41.2812 53.0938V71.5H43.2812V53.0938H41.2812ZM42.2812 70.5H36.25V72.5H42.2812V70.5ZM37.25 71.5V26H35.25V71.5H37.25ZM36.25 27H51.3125V25H36.25V27ZM51.3125 27C56.2989 27 59.9717 28.136 62.478 30.2625L63.772 28.7375C60.7783 26.1974 56.5761 25 51.3125 25V27ZM62.4809 30.2649C64.9748 32.3651 66.2812 35.4498 66.2812 39.6875H68.2812C68.2812 35.0085 66.8169 31.3016 63.7691 28.7351L62.4809 30.2649ZM66.2812 39.6875C66.2812 42.3276 65.5672 44.585 64.1621 46.5027L65.7754 47.6848C67.4537 45.3942 68.2812 42.714 68.2812 39.6875H66.2812ZM64.1583 46.508C62.7655 48.435 60.8079 49.8971 58.2372 50.8782L58.9503 52.7468C61.838 51.6446 64.1304 49.9608 65.7792 47.6795L64.1583 46.508ZM57.7188 52.2967L68.4063 71.6092L70.1562 70.6408L59.4687 51.3283L57.7188 52.2967ZM68.2812 71.125V71.5H70.2812V71.125H68.2812ZM69.2812 70.5H62.8438V72.5H69.2812V70.5ZM63.7249 71.0272L53.8499 52.621L52.0876 53.5665L61.9626 71.9728L63.7249 71.0272ZM42.2812 49.1875H51.5V47.1875H42.2812V49.1875ZM51.5 49.1875C54.6531 49.1875 57.276 48.3686 59.2548 46.6254L57.9327 45.1246C56.4115 46.4648 54.3053 47.1875 51.5 47.1875V49.1875ZM59.2504 46.6292C61.2628 44.8772 62.25 42.5275 62.25 39.6875H60.25C60.25 42.0142 59.4664 43.7894 57.9371 45.1208L59.2504 46.6292ZM62.25 39.6875C62.25 36.665 61.3348 34.2062 59.3831 32.4713L58.0544 33.9662C59.4777 35.2313 60.25 37.085 60.25 39.6875H62.25ZM59.3877 32.4755C57.4763 30.7552 54.7864 29.9593 51.4753 29.9375L51.4622 31.9375C54.4844 31.9574 56.6279 32.6823 58.0498 33.962L59.3877 32.4755ZM51.4688 29.9375H42.2812V31.9375H51.4688V29.9375ZM41.2812 30.9375V48.1875H43.2812V30.9375H41.2812Z' fill='%235E5E5E'/%3e%3c/svg%3e";
10044
+ var img$D = "data:image/svg+xml,%3c%3fxml version='1.0' encoding='UTF-8'%3f%3e%3csvg width='100' height='100' version='1.1' viewBox='0 0 100 100' xmlns='http://www.w3.org/2000/svg'%3e %3cg stroke='black' stroke-linecap='square'%3e %3ccircle cx='50' cy='50' r='25' fill='%239c9c9c' stroke-width='5'/%3e %3ccircle cx='50' cy='50' r='5' stroke-width='6'/%3e %3cpath d='m80.642 75.712a40 40 0 0 1-30.642 14.288 40 40 0 0 1-30.642-14.288' fill='none' stroke-width='5'/%3e %3cpath d='m87.07 68.051-1.8316 11.517-9.1925-7.7135z' stroke-width='4'/%3e %3c/g%3e%3c/svg%3e";
9947
10045
 
9948
10046
  const RootContext = /*#__PURE__*/React.createContext({
9949
10047
  drawingId: -1,
@@ -9977,7 +10075,7 @@ const GroupLabel = styled.span`
9977
10075
  `;
9978
10076
  const PostfixSpace = styled.div`
9979
10077
  float: left;
9980
- margintop: 1px;
10078
+ margin-top: 1px;
9981
10079
  `;
9982
10080
  const CollapseButtonSpace = styled.div`
9983
10081
  float: right;
@@ -9990,7 +10088,8 @@ const CollapseButton$1 = styled.div`
9990
10088
  border-left: 1px solid rgba(127, 127, 127, 1);
9991
10089
  padding: 1px 1px 0px 1px;
9992
10090
  `;
9993
- const HelpSpace = styled.div`
10091
+ const InfoSpace = styled.div`
10092
+ display: flex;
9994
10093
  float: right;
9995
10094
  padding: 1px 8px 0px 0px;
9996
10095
  `;
@@ -10008,6 +10107,7 @@ const SketchGroup = ({
10008
10107
  helpUrl = 'https://buerli.io/',
10009
10108
  collapse = false,
10010
10109
  postfix,
10110
+ info,
10011
10111
  children
10012
10112
  }) => {
10013
10113
  const {
@@ -10024,7 +10124,7 @@ const SketchGroup = ({
10024
10124
  const onQuestionIconClick = React.useCallback(() => window.open(helpUrl, '_blank'), [helpUrl]);
10025
10125
  return /*#__PURE__*/React.createElement(GroupWrapper, null, /*#__PURE__*/React.createElement(HeaderSpace, null, /*#__PURE__*/React.createElement(GroupLabel, null, caption), postfix && /*#__PURE__*/React.createElement(PostfixSpace, null, postfix), /*#__PURE__*/React.createElement(CollapseButtonSpace, null, collapse && /*#__PURE__*/React.createElement(CollapseButton$1, {
10026
10126
  onClick: onCollapseClick
10027
- }, isDisplayed && /*#__PURE__*/React.createElement(icons.DownOutlined, null), !isDisplayed && /*#__PURE__*/React.createElement(icons.RightOutlined, null))), /*#__PURE__*/React.createElement(HelpSpace, null, /*#__PURE__*/React.createElement(QuestionIcon$1, {
10127
+ }, isDisplayed && /*#__PURE__*/React.createElement(icons.DownOutlined, null), !isDisplayed && /*#__PURE__*/React.createElement(icons.RightOutlined, null))), /*#__PURE__*/React.createElement(InfoSpace, null, info, /*#__PURE__*/React.createElement(QuestionIcon$1, {
10028
10128
  onClick: onQuestionIconClick
10029
10129
  }))), isDisplayed && /*#__PURE__*/React.createElement(ContentSpace, null, children));
10030
10130
  };
@@ -11018,9 +11118,6 @@ const EyeIcon$1 = () => {
11018
11118
  return /*#__PURE__*/React.createElement(PluginTooltip, {
11019
11119
  title: `Constraints visibility: ${alwaysShowConstr ? 'Always show' : 'Show on hover'}`
11020
11120
  }, /*#__PURE__*/React.createElement(Component, {
11021
- style: {
11022
- marginTop: '1px'
11023
- },
11024
11121
  onClick: onClick
11025
11122
  }));
11026
11123
  };
@@ -11042,7 +11139,6 @@ const CoincidenceIcon = () => {
11042
11139
  style: {
11043
11140
  width: '14px',
11044
11141
  height: '14px',
11045
- marginTop: '1px',
11046
11142
  marginLeft: '2px',
11047
11143
  cursor: 'pointer',
11048
11144
  opacity: showCoincidence ? 1.0 : 0.5
@@ -11051,6 +11147,29 @@ const CoincidenceIcon = () => {
11051
11147
  onClick: onClick
11052
11148
  }));
11053
11149
  };
11150
+ const SolverState$1 = () => {
11151
+ var _solverStateMemb$memb;
11152
+ const {
11153
+ drawingId,
11154
+ pluginId
11155
+ } = React.useContext(RootContext);
11156
+ const sketchId = react.usePlugin(drawingId, pluginId, p => p.id);
11157
+ const solverStateMemb = react.useDrawing(drawingId, d => {
11158
+ var _d$structure$tree$ske, _d$structure$tree$ske2;
11159
+ return (_d$structure$tree$ske = d.structure.tree[sketchId]) == null ? void 0 : (_d$structure$tree$ske2 = _d$structure$tree$ske.members) == null ? void 0 : _d$structure$tree$ske2.solverState;
11160
+ });
11161
+ const solverState = solverStateMemb == null ? void 0 : (_solverStateMemb$memb = solverStateMemb.members[2]) == null ? void 0 : _solverStateMemb$memb.value;
11162
+ const isSolved = Boolean(solverState && solverState & 1);
11163
+ const Component = isSolved ? icons.CheckCircleTwoTone : icons.CloseCircleTwoTone;
11164
+ return solverState === undefined ? null : /*#__PURE__*/React.createElement(PluginTooltip, {
11165
+ title: isSolved ? 'Solved' : 'Not Solved'
11166
+ }, /*#__PURE__*/React.createElement(Component, {
11167
+ style: {
11168
+ marginRight: '2px'
11169
+ },
11170
+ twoToneColor: isSolved ? '#52c41a' : '#eb2f96'
11171
+ }));
11172
+ };
11054
11173
  const ConstrBtn = ({
11055
11174
  constrClass,
11056
11175
  disabled
@@ -11157,9 +11276,15 @@ const Constraints$2 = () => {
11157
11276
  display: 'flex'
11158
11277
  }
11159
11278
  }, /*#__PURE__*/React.createElement(EyeIcon$1, null), /*#__PURE__*/React.createElement(CoincidenceIcon, null));
11279
+ const solverInfo = /*#__PURE__*/React.createElement("div", {
11280
+ style: {
11281
+ display: 'flex'
11282
+ }
11283
+ }, /*#__PURE__*/React.createElement(SolverState$1, null));
11160
11284
  return /*#__PURE__*/React.createElement(SketchGroup, {
11161
11285
  caption: "Constraints",
11162
- postfix: postfix
11286
+ postfix: postfix,
11287
+ info: solverInfo
11163
11288
  }, /*#__PURE__*/React.createElement("div", {
11164
11289
  ref: ref
11165
11290
  }, /*#__PURE__*/React.createElement(ConstrButtonGroup, {
@@ -11397,8 +11522,8 @@ function recognizeFilletByArc(object, tree, sketchId) {
11397
11522
  };
11398
11523
  }
11399
11524
 
11400
- function ownKeys$h(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
11401
- function _objectSpread$h(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys$h(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys$h(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
11525
+ function ownKeys$i(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
11526
+ function _objectSpread$i(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys$i(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys$i(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
11402
11527
  function Fillet(drawingId, pluginId) {
11403
11528
  const plugin = core.getPlugin(drawingId, pluginId);
11404
11529
  const set = plugin.set;
@@ -11530,7 +11655,7 @@ function Fillet(drawingId, pluginId) {
11530
11655
  if (!data) {
11531
11656
  return;
11532
11657
  }
11533
- classcad.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$h(_objectSpread$h({}, data.params), {}, {
11658
+ classcad.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$i(_objectSpread$i({}, data.params), {}, {
11534
11659
  radius: 1
11535
11660
  })).mid, data.params.end).catch(console.warn);
11536
11661
  set({
@@ -11634,8 +11759,8 @@ function Trim(drawingId, pluginId) {
11634
11759
  };
11635
11760
  }
11636
11761
 
11637
- function ownKeys$g(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
11638
- function _objectSpread$g(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys$g(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys$g(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
11762
+ function ownKeys$h(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
11763
+ function _objectSpread$h(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys$h(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys$h(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
11639
11764
  const tolerance$5 = 1e-6;
11640
11765
  const tMinClosed = 1e-3;
11641
11766
  const tMaxClosed = 1 - 1e-3;
@@ -11805,7 +11930,7 @@ function intersectCircleCircle(circle1, circle2) {
11805
11930
  const c = w * w - dy * dy;
11806
11931
  let res = solveQuadratic(a, b, c).filter(u => u >= -1 && u <= 1).map(u => Math.acos(u) / (2 * Math.PI));
11807
11932
  res = [...res, ...res.map(u => -u)];
11808
- const points = res.map(t => getParameterizedPosition(t, _objectSpread$g(_objectSpread$g({}, circle1), {}, {
11933
+ const points = res.map(t => getParameterizedPosition(t, _objectSpread$h(_objectSpread$h({}, circle1), {}, {
11809
11934
  class: classcad.CCClasses.CCCircle
11810
11935
  }))).filter(point => Math.abs(point.distanceTo(circle1.center) - circle1.radius) < tolerance$5 && Math.abs(point.distanceTo(circle2.center) - circle2.radius) < tolerance$5);
11811
11936
  const circle1Intersections = points.map(point => getNormalizedPosition(point, circle1));
@@ -12176,8 +12301,8 @@ function UseRef(drawingId, pluginId) {
12176
12301
  };
12177
12302
  }
12178
12303
 
12179
- function ownKeys$f(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
12180
- function _objectSpread$f(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys$f(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys$f(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
12304
+ function ownKeys$g(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
12305
+ function _objectSpread$g(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys$g(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys$g(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
12181
12306
  function SSelect(drawingId, pluginId) {
12182
12307
  const hoverHandler = Hover(drawingId, pluginId);
12183
12308
  const filter = object => true;
@@ -12228,10 +12353,10 @@ function SSelect(drawingId, pluginId) {
12228
12353
  name: HandlersList.SSELECT,
12229
12354
  filter,
12230
12355
  onDeactivate,
12231
- pointerHandlers: _objectSpread$f({
12356
+ pointerHandlers: _objectSpread$g({
12232
12357
  onClick
12233
12358
  }, hoverHandler.pointerHandlers),
12234
- keyHandlers: _objectSpread$f({}, hoverHandler.keyHandlers)
12359
+ keyHandlers: _objectSpread$g({}, hoverHandler.keyHandlers)
12235
12360
  };
12236
12361
  }
12237
12362
 
@@ -12294,6 +12419,7 @@ const useGeomParams = objId => {
12294
12419
  const isSelected = gSelected || sSelected;
12295
12420
  const isHovered = gHovered || sHovered;
12296
12421
  const isHighlighted = useSketchState(drawingId, pluginId, state => state.highlighted.indexOf(objId) !== -1);
12422
+ const isConstrOverdefined = useSketchState(drawingId, pluginId, state => state.overdefined[objId] !== undefined);
12297
12423
  const {
12298
12424
  renderOrder,
12299
12425
  offsetUnits
@@ -12312,7 +12438,8 @@ const useGeomParams = objId => {
12312
12438
  polygonOffsetUnits: offsetUnits,
12313
12439
  isHovered,
12314
12440
  isSelected,
12315
- isHighlighted
12441
+ isHighlighted,
12442
+ isConstrOverdefined
12316
12443
  };
12317
12444
  };
12318
12445
  function isUnknown(lgsState) {
@@ -12337,11 +12464,13 @@ const getPointColor = objState => {
12337
12464
  isSelected,
12338
12465
  isGHovered,
12339
12466
  isHighlighted,
12467
+ isConstrOverdefined,
12340
12468
  lgsState
12341
12469
  } = objState;
12342
12470
  if (!isSketchActive) return 0x006666;
12343
12471
  if (isSelected) return 0xffa500;
12344
12472
  if (isGHovered || isHighlighted) return 0x00ff00;
12473
+ if (isConstrOverdefined) return 0x990000;
12345
12474
  if (isWelldefined(lgsState)) return 0x000000;
12346
12475
  if (isOverdefined(lgsState)) return 0x990000;
12347
12476
  return 0x0066ff;
@@ -12352,11 +12481,13 @@ const getLineColor = objState => {
12352
12481
  isSelected,
12353
12482
  isGHovered,
12354
12483
  isHighlighted,
12484
+ isConstrOverdefined,
12355
12485
  lgsState
12356
12486
  } = objState;
12357
12487
  if (isSelected) return 0xffa500;
12358
12488
  if (isGHovered || isHighlighted) return 0x00ff00;
12359
12489
  if (!isSketchActive) return 0x009999;
12490
+ if (isConstrOverdefined) return 0x990000;
12360
12491
  if (isWelldefined(lgsState)) return 0x000000;
12361
12492
  if (isOverdefined(lgsState)) return 0x990000;
12362
12493
  return 0x0066ff;
@@ -12367,11 +12498,13 @@ const getArcColor = objState => {
12367
12498
  isSelected,
12368
12499
  isGHovered,
12369
12500
  isHighlighted,
12501
+ isConstrOverdefined,
12370
12502
  lgsState
12371
12503
  } = objState;
12372
12504
  if (isSelected) return 0xffa500;
12373
12505
  if (isGHovered || isHighlighted) return 0x00ff00;
12374
12506
  if (!isSketchActive) return 0x009999;
12507
+ if (isConstrOverdefined) return 0x990000;
12375
12508
  if (isWelldefined(lgsState)) return 0x000000;
12376
12509
  if (isOverdefined(lgsState)) return 0x990000;
12377
12510
  return 0x0066ff;
@@ -12384,9 +12517,8 @@ const getConstrColor = objState => {
12384
12517
  lgsState
12385
12518
  } = objState;
12386
12519
  if (isSelected) return 0xffff00;
12387
- if (isUnknown(lgsState)) return 0x66ff66;
12388
12520
  if (isOverdefined(lgsState) && isSatisfied(lgsState)) return 0xff6600;
12389
- if (isOverdefined(lgsState)) return 0x990000;
12521
+ if (isUnknown(lgsState) || isOverdefined(lgsState)) return 0x990000;
12390
12522
  if (isGHovered) return 0x28d79f;
12391
12523
  if (isHighlighted) return 0xbbecdd;
12392
12524
  return 0xdddddd;
@@ -12474,6 +12606,7 @@ const useColor = objId => {
12474
12606
  const sSelected = useIsSSelected(drawingId, objId);
12475
12607
  const isSelected = gSelected || sSelected;
12476
12608
  const isHighlighted = useSketchState(drawingId, pluginId, state => state.highlighted.indexOf(objId) !== -1);
12609
+ const isConstrOverdefined = useSketchState(drawingId, pluginId, state => state.overdefined[objId] !== undefined);
12477
12610
  const lgsState = react.useDrawing(drawingId, d => {
12478
12611
  var _d$structure$tree$obj, _d$structure$tree$obj2, _d$structure$tree$obj3;
12479
12612
  return ((_d$structure$tree$obj = d.structure.tree[objId]) == null ? void 0 : (_d$structure$tree$obj2 = _d$structure$tree$obj.members) == null ? void 0 : (_d$structure$tree$obj3 = _d$structure$tree$obj2.lgsState) == null ? void 0 : _d$structure$tree$obj3.value) || 0;
@@ -12486,9 +12619,10 @@ const useColor = objId => {
12486
12619
  isGHovered: gHovered,
12487
12620
  isSHovered: sHovered,
12488
12621
  isSelected,
12622
+ isConstrOverdefined,
12489
12623
  lgsState
12490
12624
  });
12491
- }, [drawingId, objId, gHovered, sHovered, isActive, isHighlighted, isSelected, lgsState]);
12625
+ }, [drawingId, objId, gHovered, sHovered, isActive, isHighlighted, isSelected, isConstrOverdefined, lgsState]);
12492
12626
  return color;
12493
12627
  };
12494
12628
  const useUserData = objId => {
@@ -13206,8 +13340,8 @@ const Regions$1 = ({
13206
13340
  });
13207
13341
  };
13208
13342
 
13209
- function ownKeys$e(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
13210
- function _objectSpread$e(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys$e(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys$e(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
13343
+ function ownKeys$f(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
13344
+ function _objectSpread$f(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys$f(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys$f(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
13211
13345
 
13212
13346
  /*
13213
13347
  * !polygonOffset!
@@ -13249,13 +13383,14 @@ const CCLine = props => {
13249
13383
  polygonOffsetUnits,
13250
13384
  isHovered,
13251
13385
  isSelected,
13252
- isHighlighted
13386
+ isHighlighted,
13387
+ isConstrOverdefined
13253
13388
  } = useGeomParams(objId);
13254
13389
  return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(Line, {
13255
13390
  start: start,
13256
13391
  end: end,
13257
- scalePlus: isHovered || isSelected || isHighlighted,
13258
- meshProps: _objectSpread$e(_objectSpread$e({
13392
+ scalePlus: isHovered || isSelected || isHighlighted || isConstrOverdefined,
13393
+ meshProps: _objectSpread$f(_objectSpread$f({
13259
13394
  renderOrder
13260
13395
  }, handlers), {}, {
13261
13396
  userData
@@ -13292,7 +13427,8 @@ const CCPoint = props => {
13292
13427
  polygonOffsetUnits,
13293
13428
  isHovered,
13294
13429
  isSelected,
13295
- isHighlighted
13430
+ isHighlighted,
13431
+ isConstrOverdefined
13296
13432
  } = useGeomParams(objId);
13297
13433
  const position = convertToVector((_point$members = point.members) == null ? void 0 : _point$members.pos);
13298
13434
  React.useEffect(() => {
@@ -13304,8 +13440,8 @@ const CCPoint = props => {
13304
13440
  // It's not possible to change polygonOffset in drei/Merged component,
13305
13441
  // so we have to increase size of hovered or selected point to make the point not occluded buy other ones
13306
13442
  ,
13307
- scalePlus: isHovered || isSelected || isHighlighted,
13308
- meshProps: _objectSpread$e(_objectSpread$e({
13443
+ scalePlus: isHovered || isSelected || isHighlighted || isConstrOverdefined,
13444
+ meshProps: _objectSpread$f(_objectSpread$f({
13309
13445
  renderOrder
13310
13446
  }, handlers), {}, {
13311
13447
  userData
@@ -13352,15 +13488,16 @@ const CCArc = props => {
13352
13488
  polygonOffsetUnits,
13353
13489
  isHovered,
13354
13490
  isSelected,
13355
- isHighlighted
13491
+ isHighlighted,
13492
+ isConstrOverdefined
13356
13493
  } = useGeomParams(objId);
13357
13494
  return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(Arc, {
13358
13495
  start: startPoint,
13359
13496
  end: endPoint,
13360
13497
  center: centerPoint,
13361
13498
  clockwise: clockwise,
13362
- scalePlus: isHovered || isSelected || isHighlighted,
13363
- meshProps: _objectSpread$e({
13499
+ scalePlus: isHovered || isSelected || isHighlighted || isConstrOverdefined,
13500
+ meshProps: _objectSpread$f({
13364
13501
  renderOrder,
13365
13502
  userData
13366
13503
  }, handlers),
@@ -13397,13 +13534,14 @@ const CCCircle = props => {
13397
13534
  polygonOffsetUnits,
13398
13535
  isHovered,
13399
13536
  isSelected,
13400
- isHighlighted
13537
+ isHighlighted,
13538
+ isConstrOverdefined
13401
13539
  } = useGeomParams(objId);
13402
13540
  return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(Circle, {
13403
13541
  center: center,
13404
13542
  radius: radius,
13405
- scalePlus: isHovered || isSelected || isHighlighted,
13406
- meshProps: _objectSpread$e({
13543
+ scalePlus: isHovered || isSelected || isHighlighted || isConstrOverdefined,
13544
+ meshProps: _objectSpread$f({
13407
13545
  renderOrder,
13408
13546
  userData
13409
13547
  }, handlers),
@@ -13915,17 +14053,17 @@ const MousePosition = () => {
13915
14053
  }, `${mousePos.x.toFixed(2)}, ${mousePos.y.toFixed(2)}`)) : null;
13916
14054
  };
13917
14055
 
13918
- function ownKeys$d(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
13919
- function _objectSpread$d(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys$d(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys$d(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
14056
+ function ownKeys$e(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
14057
+ function _objectSpread$e(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys$e(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys$e(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
13920
14058
  const useGeometryOverridesStore = create((set, get) => ({
13921
14059
  overrides: {},
13922
14060
  addOverride: (name, override) => set(state => ({
13923
- overrides: _objectSpread$d(_objectSpread$d({}, state.overrides), {}, {
14061
+ overrides: _objectSpread$e(_objectSpread$e({}, state.overrides), {}, {
13924
14062
  [name]: override
13925
14063
  })
13926
14064
  })),
13927
14065
  removeOverride: name => set(state => {
13928
- const overrides_ = _objectSpread$d({}, state.overrides);
14066
+ const overrides_ = _objectSpread$e({}, state.overrides);
13929
14067
  delete overrides_[name];
13930
14068
  return {
13931
14069
  overrides: overrides_
@@ -13992,23 +14130,42 @@ const useOperationSequence = (drawingId, partId) => {
13992
14130
  }, [children, drawingId]);
13993
14131
  };
13994
14132
 
13995
- const deleteFeature = (drawingId, featureId, opSeqId, isActive) => {
14133
+ const getFeatureIds = (drawingId, opSeqId) => {
13996
14134
  var _tree$opSeqId;
13997
- const pluginAPI = core.getDrawing(drawingId).api.plugin;
13998
- if (isActive) pluginAPI.setActiveFeature(null);
13999
14135
  const tree = core.getDrawing(drawingId).structure.tree;
14000
14136
  const featureRefIds = ((_tree$opSeqId = tree[opSeqId]) == null ? void 0 : _tree$opSeqId.children) || [];
14001
- const featureIds = featureRefIds.map(refId => {
14137
+ return featureRefIds.map(refId => {
14002
14138
  var _tree$refId, _tree$refId$members;
14003
14139
  return (_tree$refId = tree[refId]) == null ? void 0 : (_tree$refId$members = _tree$refId.members) == null ? void 0 : _tree$refId$members.refObj.value;
14004
- });
14005
- const selectedInfo = core.getDrawing(drawingId).interaction.selected || [];
14140
+ }).slice(7); // Ignore first 7 features since they are base WorkGeometry
14141
+ };
14142
+
14143
+ const getHLConstraintIds = drawingId => {
14144
+ var _tree$curProdId, _tree$constrSetId;
14145
+ const drawing = core.getDrawing(drawingId);
14146
+ const tree = drawing.structure.tree;
14147
+ const curProdId = drawing.structure.currentProduct;
14148
+ const prodChildren = ((_tree$curProdId = tree[curProdId]) == null ? void 0 : _tree$curProdId.children) || [];
14149
+ const constrSetId = prodChildren.find(childId => classcad.ccUtils.base.isA(tree[childId].class, classcad.CCClasses.CCConstraintSet)) || NOCCID;
14150
+ return ((_tree$constrSetId = tree[constrSetId]) == null ? void 0 : _tree$constrSetId.children) || [];
14151
+ };
14152
+ const deleteFeature = (drawingId, featureId, opSeqId) => {
14153
+ var _drawing$structure$tr;
14154
+ const drawing = core.getDrawing(drawingId);
14155
+ const curProdId = drawing.structure.currentProduct;
14156
+ const isPart = classcad.ccUtils.base.isA(((_drawing$structure$tr = drawing.structure.tree[curProdId]) == null ? void 0 : _drawing$structure$tr.class) || '', classcad.CCClasses.CCPart);
14157
+ const featureIds = isPart ? getFeatureIds(drawingId, opSeqId) : getHLConstraintIds(drawingId);
14158
+ if (featureIds.indexOf(drawing.plugin.active.feature) !== -1) {
14159
+ const pluginAPI = drawing.api.plugin;
14160
+ pluginAPI.setActiveFeature(null);
14161
+ }
14162
+ const selectedInfo = drawing.interaction.selected || [];
14006
14163
  const selectedFeatures = selectedInfo.map(info => info.objectId).filter(id => featureIds.indexOf(id) !== -1);
14007
14164
  const ids = selectedFeatures.indexOf(featureId) === -1 ? [...selectedFeatures, featureId] : selectedFeatures;
14008
14165
  const idsSorted = ids.sort((a, b) => b - a);
14009
14166
  classcad.ccAPI.baseModeler.deleteObjects(drawingId, idsSorted).catch(console.warn);
14010
14167
  };
14011
- function useContextMenuItems$4(drawingId, isActive, setEditName) {
14168
+ function useContextMenuItems$4(drawingId, setEditName) {
14012
14169
  const curPartId = react.useDrawing(drawingId, d => d.structure.currentProduct || d.structure.root);
14013
14170
  const opSeqId = useOperationSequence(drawingId, curPartId) || NOCCID;
14014
14171
  return React.useMemo(() => {
@@ -14024,10 +14181,10 @@ function useContextMenuItems$4(drawingId, isActive, setEditName) {
14024
14181
  icon: /*#__PURE__*/React.createElement(icons.DeleteOutlined, null),
14025
14182
  key: 'deleteFeature',
14026
14183
  onClick: menuInfo => {
14027
- deleteFeature(drawingId, menuInfo.interactionInfo.objectId, opSeqId, isActive);
14184
+ deleteFeature(drawingId, menuInfo.interactionInfo.objectId, opSeqId);
14028
14185
  }
14029
14186
  }];
14030
- }, [drawingId, opSeqId, isActive, setEditName]);
14187
+ }, [drawingId, opSeqId, setEditName]);
14031
14188
  }
14032
14189
 
14033
14190
  const useCurrentInstance = drawingId => {
@@ -14365,6 +14522,101 @@ const GeometryOverridesManager = ({
14365
14522
  return null;
14366
14523
  };
14367
14524
 
14525
+ function ownKeys$d(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
14526
+ function _objectSpread$d(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys$d(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys$d(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
14527
+ const ConstraintManager = ({
14528
+ drawingId,
14529
+ pluginId,
14530
+ constraintId
14531
+ }) => {
14532
+ var _constraint$members, _ref, _constraint$members2, _constraint$members2$;
14533
+ const constraint = react.useDrawing(drawingId, d => d.structure.tree[constraintId]);
14534
+ const entitiesMem = constraint == null ? void 0 : (_constraint$members = constraint.members) == null ? void 0 : _constraint$members.entities;
14535
+ const lgsState = (_ref = constraint == null ? void 0 : (_constraint$members2 = constraint.members) == null ? void 0 : (_constraint$members2$ = _constraint$members2.lgsState) == null ? void 0 : _constraint$members2$.value) != null ? _ref : 1;
14536
+ const isUnsatisfied = !(lgsState & 1);
14537
+ const entities = React.useMemo(() => (entitiesMem == null ? void 0 : entitiesMem.members.map(memb => memb.value)) || [], [entitiesMem]);
14538
+ const addOverdefined = React.useCallback(entities_ => {
14539
+ const {
14540
+ set
14541
+ } = core.getPlugin(drawingId, pluginId);
14542
+ const {
14543
+ overdefined
14544
+ } = getSketchState(drawingId, pluginId);
14545
+ const overdefinedNew = _objectSpread$d({}, overdefined);
14546
+ entities_.forEach(id => {
14547
+ var _overdefined$id;
14548
+ const entityConstrArr = ((_overdefined$id = overdefined[id]) == null ? void 0 : _overdefined$id.filter(cId => cId !== constraintId)) || [];
14549
+ entityConstrArr.push(constraintId);
14550
+ overdefinedNew[id] = entityConstrArr;
14551
+ });
14552
+ set({
14553
+ overdefined: overdefinedNew
14554
+ });
14555
+ }, [drawingId, pluginId, constraintId]);
14556
+ const removeOverdefined = React.useCallback(entities_ => {
14557
+ const {
14558
+ set
14559
+ } = core.getPlugin(drawingId, pluginId);
14560
+ const {
14561
+ overdefined
14562
+ } = getSketchState(drawingId, pluginId);
14563
+ const overdefinedNew = _objectSpread$d({}, overdefined);
14564
+ entities_.forEach(id => {
14565
+ if (!overdefined[id]) {
14566
+ return;
14567
+ }
14568
+ const entityConstrArr = overdefined[id].filter(cId => cId !== constraintId);
14569
+ if (entityConstrArr.length === 0) {
14570
+ delete overdefinedNew[id];
14571
+ return;
14572
+ }
14573
+ overdefinedNew[id] = entityConstrArr;
14574
+ });
14575
+ set({
14576
+ overdefined: overdefinedNew
14577
+ });
14578
+ }, [drawingId, pluginId, constraintId]);
14579
+ React.useEffect(() => {
14580
+ const {
14581
+ overdefined
14582
+ } = getSketchState(drawingId, pluginId);
14583
+ if (isUnsatisfied && entities.some(id => !overdefined[id] || overdefined[id].indexOf(constraintId) === -1)) {
14584
+ // Only update if some of constraint's entities aren't linked with the current unsatisfied constraint
14585
+ addOverdefined(entities);
14586
+ } else if (!isUnsatisfied && entities.some(id => overdefined[id] && overdefined[id].indexOf(constraintId) !== -1)) {
14587
+ // Only update if some of constraint's entities are linked with the current satisfied constraint
14588
+ removeOverdefined(entities);
14589
+ }
14590
+ }, [drawingId, pluginId, constraintId, entities, isUnsatisfied, addOverdefined, removeOverdefined]);
14591
+
14592
+ // Should only be executed on dismount
14593
+ React.useEffect(() => {
14594
+ return () => removeOverdefined(entities);
14595
+ // eslint-disable-next-line react-hooks/exhaustive-deps
14596
+ }, []);
14597
+ return null;
14598
+ };
14599
+ const OverdefinedStateManager = ({
14600
+ drawingId,
14601
+ pluginId
14602
+ }) => {
14603
+ const sketchId = react.usePlugin(drawingId, pluginId, p => p.objectId);
14604
+ const sketchChildren = useDrawingArr(drawingId, drawing => {
14605
+ var _drawing$structure$tr;
14606
+ return (_drawing$structure$tr = drawing.structure.tree[sketchId]) == null ? void 0 : _drawing$structure$tr.children;
14607
+ });
14608
+ const constraintIds = React.useMemo(() => {
14609
+ const tree = core.getDrawing(drawingId).structure.tree;
14610
+ return sketchChildren == null ? void 0 : sketchChildren.filter(id => is2DConstraint(tree[id]));
14611
+ }, [drawingId, sketchChildren]);
14612
+ return /*#__PURE__*/React.createElement(React.Fragment, null, constraintIds.map(id => /*#__PURE__*/React.createElement(ConstraintManager, {
14613
+ key: id,
14614
+ drawingId: drawingId,
14615
+ pluginId: pluginId,
14616
+ constraintId: id
14617
+ })));
14618
+ };
14619
+
14368
14620
  function useSetScale(drawingId, pluginId) {
14369
14621
  fiber.useFrame(args => {
14370
14622
  const plugin = core.getPlugin(drawingId, pluginId);
@@ -14593,6 +14845,7 @@ function useStateReset(drawingId, pluginId) {
14593
14845
  lastHoveredPos: {},
14594
14846
  constraintsToGeometry: {}
14595
14847
  },
14848
+ overdefined: {},
14596
14849
  isDragged: false,
14597
14850
  mousePos: undefined,
14598
14851
  drawnObjectsRef: undefined,
@@ -14631,7 +14884,10 @@ const DrawingMode = ({
14631
14884
  return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(TmpGraphics, null), /*#__PURE__*/React.createElement(Sketch, {
14632
14885
  key: sketchId,
14633
14886
  objId: sketchId
14634
- }), /*#__PURE__*/React.createElement(MousePosition, null), /*#__PURE__*/React.createElement(RubberBandRectangle, null), dimId && /*#__PURE__*/React.createElement(DimensionSet, {
14887
+ }), /*#__PURE__*/React.createElement(MousePosition, null), /*#__PURE__*/React.createElement(RubberBandRectangle, null), /*#__PURE__*/React.createElement(OverdefinedStateManager, {
14888
+ drawingId: drawingId,
14889
+ pluginId: pluginId
14890
+ }), dimId && /*#__PURE__*/React.createElement(DimensionSet, {
14635
14891
  drawingId: drawingId,
14636
14892
  objectId: dimId,
14637
14893
  applyTransform: false,
@@ -15363,7 +15619,6 @@ function useContextMenuItems$3(drawingId, pluginId, setRename) {
15363
15619
  const {
15364
15620
  Text: Text$1
15365
15621
  } = antd.Typography;
15366
- const DetailsContext = /*#__PURE__*/React.createContext(null);
15367
15622
  const RefTag = ({
15368
15623
  objId,
15369
15624
  refId,
@@ -15444,18 +15699,12 @@ const RefTag = ({
15444
15699
  const ObjTitle = ({
15445
15700
  objId,
15446
15701
  refId,
15447
- withMenu = false,
15448
- index
15702
+ withMenu = false
15449
15703
  }) => {
15450
15704
  const {
15451
15705
  drawingId,
15452
15706
  pluginId
15453
15707
  } = React.useContext(RootContext);
15454
- const {
15455
- items,
15456
- lastSelected,
15457
- setLastSelected
15458
- } = React.useContext(DetailsContext);
15459
15708
  const name = useDrawingStr(drawingId, d => {
15460
15709
  var _d$structure$tree$obj;
15461
15710
  return (_d$structure$tree$obj = d.structure.tree[objId]) == null ? void 0 : _d$structure$tree$obj.name;
@@ -15465,10 +15714,14 @@ const ObjTitle = ({
15465
15714
  return (_d$structure$tree$obj2 = d.structure.tree[objId]) == null ? void 0 : _d$structure$tree$obj2.class;
15466
15715
  });
15467
15716
  const activeHandler = useSketchState(drawingId, pluginId, state => state.activeHandler);
15468
- const treeObjInteraction = useTreeObjInteraction(drawingId, objId);
15469
- const isSHovered = treeObjInteraction.isSHovered;
15470
- const isSSelected = treeObjInteraction.isSSelected;
15471
- const onClickSel = treeObjInteraction.handlers.onClick;
15717
+ const {
15718
+ isSHovered,
15719
+ isSSelected,
15720
+ handlers
15721
+ } = useTreeObjInteraction(drawingId, objId);
15722
+ const onTreeObjClick = handlers.onClick;
15723
+ const onTreeObjPointerOver = handlers.onPointerOver;
15724
+ const onTreeObjPointerOut = handlers.onPointerOut;
15472
15725
  const isGHovered = react.useDrawing(drawingId, d => {
15473
15726
  var _d$interaction$hovere;
15474
15727
  return ((_d$interaction$hovere = d.interaction.hovered) == null ? void 0 : _d$interaction$hovere.objectId) === objId;
@@ -15531,37 +15784,24 @@ const ObjTitle = ({
15531
15784
  unhover(drawingId, pluginId, objId);
15532
15785
  onHide_();
15533
15786
  }, [drawingId, pluginId, objId, onHide_]);
15534
-
15535
- // TODO: Implement global selection in onClick? Not sure if needed...
15536
15787
  const onClick = React.useCallback(e => {
15537
- if (activeHandler === HandlersList.DRAG) {
15538
- if (index !== undefined && e.shiftKey && lastSelected !== -1) {
15539
- const start = Math.min(lastSelected, index);
15540
- const end = Math.max(lastSelected, index);
15541
- const toSelect = items.slice(start, end + 1);
15542
- setSelected(drawingId, toSelect);
15543
- } else {
15544
- if (index !== undefined) {
15545
- setLastSelected(index);
15546
- }
15547
- select(drawingId, objId);
15548
- }
15549
- } else if (!activeHandler) {
15550
- // if no handler is active, some selector should be active
15551
- onClickSel && onClickSel(e);
15788
+ if (activeHandler === HandlersList.DRAG || activeHandler === HandlersList.SSELECT) {
15789
+ onTreeObjClick(e);
15552
15790
  }
15553
- }, [drawingId, objId, index, activeHandler, onClickSel, items, lastSelected, setLastSelected]);
15791
+ }, [activeHandler, onTreeObjClick]);
15554
15792
  const onContextMenuDefault = React.useCallback(e => {
15555
15793
  e.preventDefault();
15556
15794
  }, []);
15557
- const onMouseEnter = React.useCallback(() => {
15558
- hover(drawingId, pluginId, [objId]);
15559
- }, [drawingId, pluginId, objId]);
15795
+
15796
+ /* const onMouseEnter = React.useCallback(() => {
15797
+ hover(drawingId, pluginId, [objId])
15798
+ }, [drawingId, pluginId, objId]) */
15799
+
15560
15800
  const onMouseLeave = React.useCallback(() => {
15561
15801
  if (!isContextMenuActive) {
15562
- unhover(drawingId, pluginId, objId);
15802
+ onTreeObjPointerOut(drawingId, pluginId, objId);
15563
15803
  }
15564
- }, [drawingId, pluginId, objId, isContextMenuActive]);
15804
+ }, [drawingId, pluginId, objId, isContextMenuActive, onTreeObjPointerOut]);
15565
15805
  const nameComponent = rename ? /*#__PURE__*/React.createElement(NameEdit, {
15566
15806
  drawingId: drawingId,
15567
15807
  objId: objId,
@@ -15582,7 +15822,7 @@ const ObjTitle = ({
15582
15822
  margin: '0px 2px 0px 0px'
15583
15823
  },
15584
15824
  onClick: onClick,
15585
- onMouseEnter: onMouseEnter,
15825
+ onMouseEnter: onTreeObjPointerOver,
15586
15826
  onMouseLeave: onMouseLeave,
15587
15827
  onContextMenu: withMenu ? onContextMenu : onContextMenuDefault
15588
15828
  }, imgName && resources[imgName] && /*#__PURE__*/React.createElement(Img, {
@@ -15627,8 +15867,7 @@ const ObjTitle = ({
15627
15867
  const SketchObj = ({
15628
15868
  objId,
15629
15869
  level,
15630
- refId,
15631
- index
15870
+ refId
15632
15871
  }) => {
15633
15872
  const {
15634
15873
  drawingId
@@ -15646,8 +15885,7 @@ const SketchObj = ({
15646
15885
  }) : /*#__PURE__*/React.createElement(Indent, null), /*#__PURE__*/React.createElement(ObjTitle, {
15647
15886
  objId: objId,
15648
15887
  refId: refId,
15649
- withMenu: level === 0,
15650
- index: index
15888
+ withMenu: level === 0
15651
15889
  })), children.map(childId => /*#__PURE__*/React.createElement("div", {
15652
15890
  key: childId,
15653
15891
  style: {
@@ -15663,6 +15901,7 @@ const Details = () => {
15663
15901
  drawingId,
15664
15902
  pluginId
15665
15903
  } = React.useContext(RootContext);
15904
+ const curProduct = useDrawingCCId(drawingId, d => d.structure.currentProduct);
15666
15905
  const sketchId = react.usePlugin(drawingId, pluginId, plugin => plugin.objectId);
15667
15906
  const sketchChildren = react.useDrawing(drawingId, d => d.structure.tree[sketchId].children);
15668
15907
  const ccUseSetId = react.useDrawing(drawingId, d => sketchChildren == null ? void 0 : sketchChildren.find(id => {
@@ -15698,29 +15937,17 @@ const Details = () => {
15698
15937
  const hasConstraints = constraints.length > 0;
15699
15938
  const [geomCollapsed, setGeomCollapsed] = React.useState(false);
15700
15939
  const [constrCollapsed, setConstrCollapsed] = React.useState(false);
15701
- const geomStartIndex = refGeometry.length;
15702
- const constrStartIndex = geomStartIndex + geometry.length;
15703
- const [lastSelected, setLastSelected] = React.useState(-1);
15704
- const selectedInfo = useDrawingArr(drawingId, d => d.interaction.selected);
15705
- const selected = selectedInfo.map(info => info.objectId);
15706
- // Either reset lastSelected if selected array becomes empty, or set it to something if the user selects something in the view
15707
- React.useEffect(() => {
15708
- if (selected.length === 0) {
15709
- setLastSelected(-1);
15710
- } else if (lastSelected === -1) {
15711
- setLastSelected(items.findIndex(item => selected.indexOf(item) !== -1));
15712
- }
15713
- }, [selected, items, lastSelected]);
15714
- const contextValue = React.useMemo(() => ({
15715
- items,
15716
- lastSelected,
15717
- setLastSelected
15718
- }), [items, lastSelected]);
15940
+ const createInfo_ = React.useCallback(objId => core.createInfo({
15941
+ objectId: objId,
15942
+ prodRefId: curProduct
15943
+ }), [curProduct]);
15719
15944
  return /*#__PURE__*/React.createElement(SketchGroup, {
15720
15945
  caption: "Details",
15721
15946
  collapse: true
15722
- }, /*#__PURE__*/React.createElement(DetailsContext.Provider, {
15723
- value: contextValue
15947
+ }, /*#__PURE__*/React.createElement(MultiSelect, {
15948
+ drawingId: drawingId,
15949
+ items: items,
15950
+ createInfo: createInfo_
15724
15951
  }, !hasGeometry && /*#__PURE__*/React.createElement(Text$1, {
15725
15952
  style: {
15726
15953
  marginLeft: '2px'
@@ -15748,16 +15975,14 @@ const Details = () => {
15748
15975
  style: {
15749
15976
  display: geomCollapsed ? 'none' : 'block'
15750
15977
  }
15751
- }, refGeometry.map(([id, refId], i) => /*#__PURE__*/React.createElement(SketchObj, {
15978
+ }, refGeometry.map(([id, refId]) => /*#__PURE__*/React.createElement(SketchObj, {
15752
15979
  objId: id,
15753
15980
  refId: refId,
15754
15981
  key: id,
15755
- index: i,
15756
15982
  level: 0
15757
- })), geometry.map((id, i) => /*#__PURE__*/React.createElement(SketchObj, {
15983
+ })), geometry.map(id => /*#__PURE__*/React.createElement(SketchObj, {
15758
15984
  objId: id,
15759
15985
  key: id,
15760
- index: geomStartIndex + i,
15761
15986
  level: 0
15762
15987
  })))), hasConstraints && !isTrimActive && /*#__PURE__*/React.createElement("div", {
15763
15988
  style: {
@@ -15777,10 +16002,9 @@ const Details = () => {
15777
16002
  style: {
15778
16003
  display: constrCollapsed ? 'none' : 'block'
15779
16004
  }
15780
- }, constraints.map((id, i) => /*#__PURE__*/React.createElement(SketchObj, {
16005
+ }, constraints.map(id => /*#__PURE__*/React.createElement(SketchObj, {
15781
16006
  objId: id,
15782
16007
  key: id,
15783
- index: constrStartIndex + i,
15784
16008
  level: 0
15785
16009
  }))))));
15786
16010
  };
@@ -16070,7 +16294,7 @@ const EditRegion = ({
16070
16294
  return (_d$structure$tree$reg = d.structure.tree[regionId]) == null ? void 0 : _d$structure$tree$reg.name;
16071
16295
  });
16072
16296
  const [rename, setRename] = React.useState(false);
16073
- const menuItems = useContextMenuItems$4(drawingId, false, setRename);
16297
+ const menuItems = useContextMenuItems$4(drawingId, setRename);
16074
16298
  const menuInfo = React.useMemo(() => ({
16075
16299
  interactionInfo: core.createInfo({
16076
16300
  objectId: regionId
@@ -19513,6 +19737,13 @@ const SectionHeader = ({
19513
19737
  }, children);
19514
19738
  };
19515
19739
 
19740
+ const createConstraintInfo = (drawingId, constraintId) => {
19741
+ const curInstanceId = core.getDrawing(drawingId).structure.currentInstance;
19742
+ return core.createInfo({
19743
+ objectId: constraintId,
19744
+ prodRefId: curInstanceId
19745
+ });
19746
+ };
19516
19747
  function usePrecheckErrorId$1(drawingId, constraintId) {
19517
19748
  const constraintChildren = useDrawingArr(drawingId, d => {
19518
19749
  var _d$structure$tree$con;
@@ -19611,25 +19842,16 @@ const Constraint = ({
19611
19842
  drawingId,
19612
19843
  constraintId
19613
19844
  }) => {
19614
- const hoveredId = react.useDrawing(drawingId, d => {
19615
- var _d$interaction$hovere;
19616
- return (_d$interaction$hovere = d.interaction.hovered) == null ? void 0 : _d$interaction$hovere.objectId;
19617
- });
19618
19845
  const name = react.useDrawing(drawingId, d => {
19619
19846
  var _d$structure$tree$con2;
19620
19847
  return (_d$structure$tree$con2 = d.structure.tree[constraintId]) == null ? void 0 : _d$structure$tree$con2.name;
19621
19848
  });
19622
19849
  const isActive = react.useDrawing(drawingId, d => d.plugin.active.feature === constraintId);
19623
- const isHovered = hoveredId === constraintId;
19624
19850
  const [rename, setRename] = React.useState(false);
19625
- const menuItems = useContextMenuItems$4(drawingId, isActive, setRename);
19851
+ const menuItems = useContextMenuItems$4(drawingId, setRename);
19626
19852
  const menuInfo = React.useMemo(() => {
19627
- const curInstanceId = core.getDrawing(drawingId).structure.currentInstance;
19628
19853
  return {
19629
- interactionInfo: core.createInfo({
19630
- objectId: constraintId,
19631
- prodRefId: curInstanceId
19632
- })
19854
+ interactionInfo: createConstraintInfo(drawingId, constraintId)
19633
19855
  };
19634
19856
  }, [drawingId, constraintId]);
19635
19857
  const {
@@ -19639,19 +19861,20 @@ const Constraint = ({
19639
19861
  } = useContextMenuInteraction(drawingId);
19640
19862
  const errorId = usePrecheckErrorId$1(drawingId, constraintId);
19641
19863
  const {
19864
+ isGHovered,
19865
+ isGSelected,
19866
+ isSHovered,
19642
19867
  handlers
19643
19868
  } = useTreeObjInteraction(drawingId, constraintId);
19644
19869
  const onClick = handlers.onClick;
19870
+ const isHovered = isGHovered || isSHovered;
19871
+ const isHighlighted = isHovered || isGSelected;
19645
19872
  const onDoubleClick = React.useCallback(() => {
19646
19873
  core.getDrawing(drawingId).api.plugin.setActiveFeature(constraintId);
19647
19874
  }, [drawingId, constraintId]);
19648
19875
  const onMouseEnter = React.useCallback(() => {
19649
19876
  const setHovered = core.getDrawing(drawingId).api.interaction.setHovered;
19650
- const curInstanceId = core.getDrawing(drawingId).structure.currentInstance;
19651
- setHovered(core.createInfo({
19652
- objectId: constraintId,
19653
- prodRefId: curInstanceId
19654
- }));
19877
+ setHovered(createConstraintInfo(drawingId, constraintId));
19655
19878
  }, [drawingId, constraintId]);
19656
19879
  const onMouseLeave = React.useCallback(() => {
19657
19880
  if (!isContextMenuActive) {
@@ -19684,7 +19907,7 @@ const Constraint = ({
19684
19907
  flex: 1,
19685
19908
  minWidth: '0px'
19686
19909
  },
19687
- hovered: isHovered,
19910
+ hovered: isHighlighted,
19688
19911
  bordered: true,
19689
19912
  onClick: onClick,
19690
19913
  onDoubleClick: onDoubleClick,
@@ -19711,11 +19934,16 @@ const List$2 = ({
19711
19934
  constrIds,
19712
19935
  drawingId
19713
19936
  }) => {
19714
- return /*#__PURE__*/React.createElement("div", null, constrIds.map(constrId => /*#__PURE__*/React.createElement(Constraint, {
19937
+ const createInfo_ = React.useCallback(objId => createConstraintInfo(drawingId, objId), [drawingId]);
19938
+ return /*#__PURE__*/React.createElement("div", null, /*#__PURE__*/React.createElement(MultiSelect, {
19939
+ drawingId: drawingId,
19940
+ items: constrIds,
19941
+ createInfo: createInfo_
19942
+ }, constrIds.map(constrId => /*#__PURE__*/React.createElement(Constraint, {
19715
19943
  key: constrId,
19716
19944
  drawingId: drawingId,
19717
19945
  constraintId: constrId
19718
- })));
19946
+ }))));
19719
19947
  };
19720
19948
 
19721
19949
  /**
@@ -21244,7 +21472,7 @@ const Feature = ({
21244
21472
  const pluginApi = core.getDrawing(drawingId).api.plugin;
21245
21473
  pluginApi.setVisiblePlugin(featureId, !visible);
21246
21474
  }, [drawingId, visible, featureId, disabled, rename]);
21247
- const menuItems = useContextMenuItems$4(drawingId, isActive, setRename);
21475
+ const menuItems = useContextMenuItems$4(drawingId, setRename);
21248
21476
  const {
21249
21477
  name: menuHeaderName,
21250
21478
  icon
@@ -21452,7 +21680,25 @@ const List$1 = ({
21452
21680
  var _d$structure$tree$opS;
21453
21681
  return (_d$structure$tree$opS = d.structure.tree[opSeqId]) == null ? void 0 : _d$structure$tree$opS.children;
21454
21682
  });
21455
- return /*#__PURE__*/React.createElement(SortableList, {
21683
+ const featureIds = React.useMemo(() => {
21684
+ const tree = core.getDrawing(drawingId).structure.tree;
21685
+ return featureRefIds.map(refId => {
21686
+ var _tree$refId, _tree$refId$members;
21687
+ return (_tree$refId = tree[refId]) == null ? void 0 : (_tree$refId$members = _tree$refId.members) == null ? void 0 : _tree$refId$members.refObj.value;
21688
+ });
21689
+ }, [drawingId, featureRefIds]);
21690
+ const createInfo_ = React.useCallback(objId => {
21691
+ const productId = core.getDrawing(drawingId).structure.currentProduct;
21692
+ return core.createInfo({
21693
+ objectId: objId,
21694
+ prodRefId: productId
21695
+ });
21696
+ }, [drawingId]);
21697
+ return /*#__PURE__*/React.createElement(MultiSelect, {
21698
+ drawingId: drawingId,
21699
+ items: featureIds,
21700
+ createInfo: createInfo_
21701
+ }, /*#__PURE__*/React.createElement(SortableList, {
21456
21702
  items: featureRefIds,
21457
21703
  onSortEnd: (oldIndex, newIndex) => {
21458
21704
  const rootId_ = core.getDrawing(drawingId).structure.currentProduct;
@@ -21469,7 +21715,7 @@ const List$1 = ({
21469
21715
  drawingId: drawingId,
21470
21716
  featureRefId: item
21471
21717
  })
21472
- });
21718
+ }));
21473
21719
  };
21474
21720
  const FeatureList = ({
21475
21721
  drawingId
@@ -21908,6 +22154,10 @@ const InstanceNode = ({
21908
22154
  const [collapsed, setCollapsed] = React.useState(true);
21909
22155
  const ref = React.useRef(null);
21910
22156
  const hasCollapsed = ((_ref$current = ref.current) == null ? void 0 : _ref$current.children) && ref.current.children.length > 0;
22157
+ const createInfo_ = React.useCallback(objId => core.createInfo({
22158
+ objectId: objId,
22159
+ prodRefId: objId
22160
+ }), []);
21911
22161
  return /*#__PURE__*/React.createElement("div", null, /*#__PURE__*/React.createElement(FlexRow, null, /*#__PURE__*/React.createElement(Indents, {
21912
22162
  level: level
21913
22163
  }), hasCollapsed ? /*#__PURE__*/React.createElement(CollapseButton, {
@@ -21922,6 +22172,10 @@ const InstanceNode = ({
21922
22172
  style: {
21923
22173
  display: collapsed ? 'none' : 'block'
21924
22174
  }
22175
+ }, /*#__PURE__*/React.createElement(MultiSelect, {
22176
+ drawingId: drawingId,
22177
+ items: instanceChildren,
22178
+ createInfo: createInfo_
21925
22179
  }, geometrySetId && /*#__PURE__*/React.createElement(GeometrySetNode, {
21926
22180
  drawingId: drawingId,
21927
22181
  objectId: geometrySetId,
@@ -21932,7 +22186,7 @@ const InstanceNode = ({
21932
22186
  drawingId: drawingId,
21933
22187
  nodeId: childId,
21934
22188
  level: level + 1
21935
- }))));
22189
+ })))));
21936
22190
  };
21937
22191
  const AssemblyNode = ({
21938
22192
  drawingId,
@@ -21975,6 +22229,10 @@ const AssemblyNodeList = ({
21975
22229
  var _tree$id2;
21976
22230
  return classcad.ccUtils.base.isA((_tree$id2 = tree[id]) == null ? void 0 : _tree$id2.class, classcad.CCClasses.CCGeometrySet);
21977
22231
  });
22232
+ const createInfo_ = React.useCallback(objId => core.createInfo({
22233
+ objectId: objId,
22234
+ prodRefId: objId
22235
+ }), []);
21978
22236
  const {
21979
22237
  isPatternActive,
21980
22238
  instances
@@ -21990,6 +22248,10 @@ const AssemblyNodeList = ({
21990
22248
  }), [currentInstance, isPatternActive, activeRigidsets]);
21991
22249
  return /*#__PURE__*/React.createElement("div", null, /*#__PURE__*/React.createElement(AssemblyNodeContext.Provider, {
21992
22250
  value: contextValue
22251
+ }, /*#__PURE__*/React.createElement(MultiSelect, {
22252
+ drawingId: drawingId,
22253
+ items: instanceChildren,
22254
+ createInfo: createInfo_
21993
22255
  }, geometrySetId && /*#__PURE__*/React.createElement(GeometrySetNode, {
21994
22256
  drawingId: drawingId,
21995
22257
  objectId: geometrySetId,
@@ -22000,7 +22262,7 @@ const AssemblyNodeList = ({
22000
22262
  drawingId: drawingId,
22001
22263
  nodeId: childId,
22002
22264
  level: 0
22003
- }))));
22265
+ })))));
22004
22266
  };
22005
22267
 
22006
22268
  const Skeleton = styled(SkeletonImpl)`
@@ -22462,6 +22724,20 @@ function useContextMenuItems$1(drawingId, setEditName) {
22462
22724
 
22463
22725
  function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
22464
22726
  function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
22727
+ const createSolidInfo = (drawingId, solidId) => {
22728
+ var _drawing$graphic$cont, _drawing$structure$tr;
22729
+ const drawing = core.getDrawing(drawingId);
22730
+ const solidOwner = (_drawing$graphic$cont = drawing.graphic.containers[solidId]) == null ? void 0 : _drawing$graphic$cont.owner;
22731
+ const curInstanceId = drawing.structure.currentInstance;
22732
+ const curProdId = drawing.structure.currentProduct;
22733
+ const isPart = classcad.ccUtils.base.isA(((_drawing$structure$tr = drawing.structure.tree[curProdId]) == null ? void 0 : _drawing$structure$tr.class) || '', classcad.CCClasses.CCPart);
22734
+ return core.createInfo({
22735
+ objectId: solidOwner,
22736
+ graphicId: solidId,
22737
+ containerId: solidId,
22738
+ prodRefId: isPart ? curProdId : curInstanceId
22739
+ });
22740
+ };
22465
22741
  const EyeComponent = ({
22466
22742
  drawingId,
22467
22743
  solidId
@@ -22498,46 +22774,39 @@ const Solid = ({
22498
22774
  drawingId,
22499
22775
  solidId
22500
22776
  }) => {
22501
- const hoveredId = react.useDrawing(drawingId, d => {
22502
- var _d$interaction$hovere;
22503
- return (_d$interaction$hovere = d.interaction.hovered) == null ? void 0 : _d$interaction$hovere.containerId;
22504
- });
22505
- const selected = react.useDrawing(drawingId, d => d.interaction.selected);
22506
- const selectedIds = (selected == null ? void 0 : selected.map(sel => sel.containerId || -1)) || [];
22777
+ const {
22778
+ setLastSelected,
22779
+ multiSelect
22780
+ } = React.useContext(MultiSelectContext) || {
22781
+ setLastSelected: undefined,
22782
+ multiSelect: undefined
22783
+ };
22507
22784
  const solidOwner = useDrawingCCId(drawingId, d => {
22508
22785
  var _d$graphic$containers;
22509
22786
  return (_d$graphic$containers = d.graphic.containers[solidId]) == null ? void 0 : _d$graphic$containers.owner;
22510
22787
  });
22511
22788
  const ccSolid = react.useDrawing(drawingId, d => d.structure.tree[solidOwner]);
22512
- const isHovered = hoveredId === solidId;
22513
- const isSelected = selectedIds.indexOf(solidId) !== -1;
22789
+ const isHovered = react.useDrawing(drawingId, d => {
22790
+ var _d$interaction$hovere;
22791
+ return ((_d$interaction$hovere = d.interaction.hovered) == null ? void 0 : _d$interaction$hovere.containerId) === solidId;
22792
+ }) || false;
22793
+ const isSelected = react.useDrawing(drawingId, d => {
22794
+ var _d$interaction$select;
22795
+ return (_d$interaction$select = d.interaction.selected) == null ? void 0 : _d$interaction$select.some(sel => sel.containerId === solidId);
22796
+ }) || false;
22514
22797
  const isHighlighted = isHovered || isSelected;
22515
22798
  const [rename, setRename] = React.useState(false);
22516
22799
  const menuItems = useContextMenuItems$1(drawingId, setRename);
22517
- const menuInfo = React.useMemo(() => {
22518
- var _drawing$structure$tr;
22519
- const drawing = core.getDrawing(drawingId);
22520
- const curInstanceId = drawing.structure.currentInstance;
22521
- const curProdId = drawing.structure.currentProduct;
22522
- const isPart = classcad.ccUtils.base.isA(((_drawing$structure$tr = drawing.structure.tree[curProdId]) == null ? void 0 : _drawing$structure$tr.class) || '', classcad.CCClasses.CCPart);
22523
- return {
22524
- interactionInfo: core.createInfo({
22525
- objectId: solidOwner,
22526
- graphicId: solidId,
22527
- containerId: solidId,
22528
- prodRefId: isPart ? curProdId : curInstanceId
22529
- })
22530
- };
22531
- }, [drawingId, solidId, solidOwner]);
22800
+ const menuInfo = React.useMemo(() => ({
22801
+ interactionInfo: createSolidInfo(drawingId, solidId)
22802
+ }), [drawingId, solidId]);
22532
22803
  const {
22533
22804
  isContextMenuActive,
22534
22805
  onContextMenu,
22535
22806
  onHide
22536
22807
  } = useContextMenuInteraction(drawingId);
22537
22808
  const onClick = React.useCallback(e => {
22538
- var _drawing$structure$tr2;
22539
22809
  const drawing = core.getDrawing(drawingId);
22540
- const curInstanceId = drawing.structure.currentInstance;
22541
22810
  const curProdId = drawing.structure.currentProduct;
22542
22811
  const selId = drawing.selection.active;
22543
22812
  if (selId) {
@@ -22560,29 +22829,18 @@ const Solid = ({
22560
22829
  }
22561
22830
  return;
22562
22831
  }
22832
+ setLastSelected == null ? void 0 : setLastSelected(solidId, !e.shiftKey);
22833
+ if (e.shiftKey && multiSelect) {
22834
+ multiSelect(solidId);
22835
+ return;
22836
+ }
22563
22837
  const select = drawing.api.interaction.select;
22564
- const multi = e.shiftKey;
22565
- const isPart = classcad.ccUtils.base.isA(((_drawing$structure$tr2 = drawing.structure.tree[curProdId]) == null ? void 0 : _drawing$structure$tr2.class) || '', classcad.CCClasses.CCPart);
22566
- select(core.createInfo({
22567
- objectId: solidOwner,
22568
- graphicId: solidId,
22569
- containerId: solidId,
22570
- prodRefId: isPart ? curProdId : curInstanceId
22571
- }), multi);
22572
- }, [drawingId, solidId, solidOwner]);
22838
+ select(createSolidInfo(drawingId, solidId), e.ctrlKey || e.shiftKey);
22839
+ }, [drawingId, solidId, setLastSelected, multiSelect]);
22573
22840
  const onMouseEnter = React.useCallback(() => {
22574
- var _getDrawing$structure;
22575
22841
  const setHovered = core.getDrawing(drawingId).api.interaction.setHovered;
22576
- const curInstanceId = core.getDrawing(drawingId).structure.currentInstance;
22577
- const curProdId = core.getDrawing(drawingId).structure.currentProduct;
22578
- const isPart = classcad.ccUtils.base.isA(((_getDrawing$structure = core.getDrawing(drawingId).structure.tree[curProdId]) == null ? void 0 : _getDrawing$structure.class) || '', classcad.CCClasses.CCPart);
22579
- setHovered(core.createInfo({
22580
- objectId: solidOwner,
22581
- graphicId: solidId,
22582
- containerId: solidId,
22583
- prodRefId: isPart ? curProdId : curInstanceId
22584
- }));
22585
- }, [drawingId, solidId, solidOwner]);
22842
+ setHovered(createSolidInfo(drawingId, solidId));
22843
+ }, [drawingId, solidId]);
22586
22844
  const onMouseLeave = React.useCallback(() => {
22587
22845
  if (!isContextMenuActive) {
22588
22846
  const setHovered = core.getDrawing(drawingId).api.interaction.setHovered;
@@ -22643,11 +22901,16 @@ const List = ({
22643
22901
  solidsIds,
22644
22902
  drawingId
22645
22903
  }) => {
22646
- return /*#__PURE__*/React.createElement("div", null, solidsIds.map(solidId => /*#__PURE__*/React.createElement(Solid, {
22904
+ const createInfo_ = React.useCallback(solidId => createSolidInfo(drawingId, solidId), [drawingId]);
22905
+ return /*#__PURE__*/React.createElement("div", null, /*#__PURE__*/React.createElement(MultiSelect, {
22906
+ drawingId: drawingId,
22907
+ items: solidsIds,
22908
+ createInfo: createInfo_
22909
+ }, solidsIds.map(solidId => /*#__PURE__*/React.createElement(Solid, {
22647
22910
  key: solidId,
22648
22911
  drawingId: drawingId,
22649
22912
  solidId: solidId
22650
- })));
22913
+ }))));
22651
22914
  };
22652
22915
 
22653
22916
  /**
@@ -22753,199 +23016,197 @@ const PartModeCmds = (drawingId, rootId) => {
22753
23016
  }
22754
23017
  return res;
22755
23018
  };
22756
- return {
22757
- Sketch: {
22758
- label: 'Sketch',
22759
- icon: /*#__PURE__*/React.createElement(Icon, {
22760
- url: img$A
22761
- }),
22762
- callback: wrapper(() => classcad.ccAPI.sketcher.createSketch(drawingId, rootId))
22763
- },
22764
- Work: [{
22765
- label: 'Workpoint',
22766
- icon: /*#__PURE__*/React.createElement(Icon, {
22767
- url: img$z
22768
- }),
22769
- callback: wrapper(() => featureApi.createWorkGeometry(drawingId, rootId, classcad.CCClasses.CCWorkPoint, 'WorkPoint'))
22770
- }, {
22771
- label: 'Workaxis',
22772
- icon: /*#__PURE__*/React.createElement(Icon, {
22773
- url: img$y
22774
- }),
22775
- callback: wrapper(() => featureApi.createWorkGeometry(drawingId, rootId, classcad.CCClasses.CCWorkAxis, 'WorkAxis'))
22776
- }, {
22777
- label: 'Workplane',
22778
- icon: /*#__PURE__*/React.createElement(Icon, {
22779
- url: img$x
22780
- }),
22781
- callback: wrapper(() => featureApi.createWorkGeometry(drawingId, rootId, classcad.CCClasses.CCWorkPlane, 'WorkPlane'))
22782
- }, {
22783
- label: 'WorkCsys',
22784
- icon: /*#__PURE__*/React.createElement(Icon, {
22785
- url: img$w
22786
- }),
22787
- callback: wrapper(() => featureApi.createWorkGeometry(drawingId, rootId, classcad.CCClasses.CCWorkCSys, 'WorkCSys'))
22788
- }],
22789
- Solid: [{
22790
- label: 'Extrusion',
22791
- icon: /*#__PURE__*/React.createElement(Icon, {
22792
- url: img$U
22793
- }),
22794
- callback: wrapper(() => featureApi.createFeature(drawingId, rootId, classcad.CCClasses.CCExtrusion, 'Extrusion'))
22795
- }, {
22796
- label: 'Revolve',
22797
- icon: /*#__PURE__*/React.createElement(Icon, {
22798
- url: img$T
22799
- }),
22800
- callback: wrapper(() => featureApi.createFeature(drawingId, rootId, classcad.CCClasses.CCRevolve, 'Revolve'))
22801
- }, {
22802
- label: 'Twist',
22803
- icon: /*#__PURE__*/React.createElement(Icon, {
22804
- url: img$v
22805
- }),
22806
- callback: wrapper(() => featureApi.createFeature(drawingId, rootId, classcad.CCClasses.CCTwist, 'Twist'))
22807
- }],
22808
- Boolean: {
22809
- label: 'Boolean',
22810
- icon: /*#__PURE__*/React.createElement(Icon, {
22811
- url: img$u
22812
- }),
22813
- callback: wrapper(() => featureApi.createFeature(drawingId, rootId, classcad.CCClasses.CCUnion, 'Union'))
22814
- },
22815
- Slice: [{
22816
- label: 'Slice',
22817
- icon: /*#__PURE__*/React.createElement(Icon, {
22818
- url: img$r
22819
- }),
22820
- callback: wrapper(() => featureApi.createFeature(drawingId, rootId, classcad.CCClasses.CCSlice, 'Slice'))
22821
- }, {
22822
- label: 'Slice by sheet',
22823
- icon: /*#__PURE__*/React.createElement(Icon, {
22824
- url: img$r
22825
- }),
22826
- callback: wrapper(() => featureApi.createFeature(drawingId, rootId, classcad.CCClasses.CCSliceBySheet, 'Slice by sheet'))
22827
- }],
22828
- Edge: [{
22829
- label: 'Fillet',
22830
- icon: /*#__PURE__*/React.createElement(Icon, {
22831
- url: img$t
22832
- }),
22833
- callback: wrapper(() => featureApi.createFeature(drawingId, rootId, classcad.CCClasses.CCConstantRadiusFillet, 'Fillet'))
22834
- }, {
22835
- label: 'Chamfer',
22836
- icon: /*#__PURE__*/React.createElement(Icon, {
22837
- url: img$s
22838
- }),
22839
- callback: wrapper(() => featureApi.createFeature(drawingId, rootId, classcad.CCClasses.CCChamfer, 'Chamfer'))
22840
- }],
22841
- Patterns: [{
22842
- label: 'Linear pattern',
22843
- icon: /*#__PURE__*/React.createElement(Icon, {
22844
- url: img$q
22845
- }),
22846
- callback: wrapper(() => featureApi.createFeature(drawingId, rootId, classcad.CCClasses.CCLinearPattern, 'Linear pattern'))
22847
- }, {
22848
- label: 'Circular pattern',
22849
- icon: /*#__PURE__*/React.createElement(Icon, {
22850
- url: img$p
22851
- }),
22852
- callback: wrapper(() => featureApi.createFeature(drawingId, rootId, classcad.CCClasses.CCCircularPattern, 'Circular pattern'))
22853
- }, {
22854
- label: 'Mirror',
22855
- icon: /*#__PURE__*/React.createElement(Icon, {
22856
- url: img$F
22857
- }),
22858
- callback: wrapper(() => featureApi.createFeature(drawingId, rootId, classcad.CCClasses.CCMirror, 'Mirror'))
22859
- }],
22860
- Translation: [{
22861
- label: 'Translation',
22862
- icon: /*#__PURE__*/React.createElement(Icon, {
22863
- url: img$o
22864
- }),
22865
- callback: wrapper(() => featureApi.createFeature(drawingId, rootId, classcad.CCClasses.CCTranslation, 'Translate'))
22866
- }, {
22867
- label: 'Rotation',
22868
- icon: /*#__PURE__*/React.createElement(Icon, {
22869
- url: img$n
22870
- }),
22871
- callback: wrapper(() => featureApi.createFeature(drawingId, rootId, classcad.CCClasses.CCRotation, 'Rotate'))
22872
- }, {
22873
- label: 'Transformation by Csys',
22874
- icon: /*#__PURE__*/React.createElement(Icon, {
22875
- url: img$m
22876
- }),
22877
- callback: wrapper(() => featureApi.createFeature(drawingId, rootId, classcad.CCClasses.CCTransformationByCSys, 'Transform by Csys'))
22878
- }],
22879
- BasicShapes: [{
22880
- label: 'Add Box',
22881
- icon: /*#__PURE__*/React.createElement(Icon, {
22882
- url: img$l
22883
- }),
22884
- callback: wrapper(() => featureApi.createFeature(drawingId, rootId, 'CC_Box', 'Box'))
22885
- }, {
22886
- label: 'Add Sphere',
22887
- icon: /*#__PURE__*/React.createElement(Icon, {
22888
- url: img$k
22889
- }),
22890
- callback: wrapper(() => featureApi.createFeature(drawingId, rootId, 'CC_Sphere', 'Sphere'))
22891
- }, {
22892
- label: 'Add Cylinder',
22893
- icon: /*#__PURE__*/React.createElement(Icon, {
22894
- url: img$j
22895
- }),
22896
- callback: wrapper(() => featureApi.createFeature(drawingId, rootId, 'CC_Cylinder', 'Cylinder'))
22897
- }, {
22898
- label: 'Add Cone',
22899
- icon: /*#__PURE__*/React.createElement(Icon, {
22900
- url: img$i
22901
- }),
22902
- callback: wrapper(() => featureApi.createFeature(drawingId, rootId, 'CC_Cone', 'Cone'))
22903
- }],
22904
- Import: {
22905
- label: 'Import',
22906
- icon: /*#__PURE__*/React.createElement(Icon, {
22907
- url: img$h
22908
- }),
22909
- callback: wrapper(() => featureApi.createFeature(drawingId, rootId, classcad.CCClasses.CCImport, 'Import'))
22910
- },
22911
- CompositeCurve: {
22912
- label: 'Composite Curve',
22913
- icon: /*#__PURE__*/React.createElement(Icon, {
22914
- url: img$f
22915
- }),
22916
- callback: wrapper(() => featureApi.createFeature(drawingId, rootId, classcad.CCClasses.CCCompositeCurve, 'Composite Curve'))
22917
- },
22918
- Deletion: {
22919
- label: 'Delete Entity',
22920
- icon: /*#__PURE__*/React.createElement(Icon, {
22921
- url: img$g
22922
- }),
22923
- callback: wrapper(() => featureApi.createFeature(drawingId, rootId, classcad.CCClasses.CCEntityDeletion, 'Entity Deletion'))
23019
+ return [{
23020
+ label: 'Sketch',
23021
+ icon: /*#__PURE__*/React.createElement(Icon, {
23022
+ url: img$A
23023
+ }),
23024
+ callback: wrapper(() => classcad.ccAPI.sketcher.createSketch(drawingId, rootId))
23025
+ }, [{
23026
+ label: 'Workpoint',
23027
+ icon: /*#__PURE__*/React.createElement(Icon, {
23028
+ url: img$z
23029
+ }),
23030
+ callback: wrapper(() => featureApi.createWorkGeometry(drawingId, rootId, classcad.CCClasses.CCWorkPoint, 'WorkPoint'))
23031
+ }, {
23032
+ label: 'Workaxis',
23033
+ icon: /*#__PURE__*/React.createElement(Icon, {
23034
+ url: img$y
23035
+ }),
23036
+ callback: wrapper(() => featureApi.createWorkGeometry(drawingId, rootId, classcad.CCClasses.CCWorkAxis, 'WorkAxis'))
23037
+ }, {
23038
+ label: 'Workplane',
23039
+ icon: /*#__PURE__*/React.createElement(Icon, {
23040
+ url: img$x
23041
+ }),
23042
+ callback: wrapper(() => featureApi.createWorkGeometry(drawingId, rootId, classcad.CCClasses.CCWorkPlane, 'WorkPlane'))
23043
+ }, {
23044
+ label: 'WorkCsys',
23045
+ icon: /*#__PURE__*/React.createElement(Icon, {
23046
+ url: img$w
23047
+ }),
23048
+ callback: wrapper(() => featureApi.createWorkGeometry(drawingId, rootId, classcad.CCClasses.CCWorkCSys, 'WorkCSys'))
23049
+ }], [{
23050
+ label: 'Extrusion',
23051
+ icon: /*#__PURE__*/React.createElement(Icon, {
23052
+ url: img$U
23053
+ }),
23054
+ callback: wrapper(() => featureApi.createFeature(drawingId, rootId, classcad.CCClasses.CCExtrusion, 'Extrusion'))
23055
+ }, {
23056
+ label: 'Revolve',
23057
+ icon: /*#__PURE__*/React.createElement(Icon, {
23058
+ url: img$T
23059
+ }),
23060
+ callback: wrapper(() => featureApi.createFeature(drawingId, rootId, classcad.CCClasses.CCRevolve, 'Revolve'))
23061
+ }, {
23062
+ label: 'Twist',
23063
+ icon: /*#__PURE__*/React.createElement(Icon, {
23064
+ url: img$v
23065
+ }),
23066
+ callback: wrapper(() => featureApi.createFeature(drawingId, rootId, classcad.CCClasses.CCTwist, 'Twist'))
23067
+ }], {
23068
+ label: 'Boolean',
23069
+ icon: /*#__PURE__*/React.createElement(Icon, {
23070
+ url: img$u
23071
+ }),
23072
+ callback: wrapper(() => featureApi.createFeature(drawingId, rootId, classcad.CCClasses.CCUnion, 'Union'))
23073
+ }, [{
23074
+ label: 'Slice',
23075
+ icon: /*#__PURE__*/React.createElement(Icon, {
23076
+ url: img$r
23077
+ }),
23078
+ callback: wrapper(() => featureApi.createFeature(drawingId, rootId, classcad.CCClasses.CCSlice, 'Slice'))
23079
+ }, {
23080
+ label: 'Slice by sheet',
23081
+ icon: /*#__PURE__*/React.createElement(Icon, {
23082
+ url: img$r
23083
+ }),
23084
+ callback: wrapper(() => featureApi.createFeature(drawingId, rootId, classcad.CCClasses.CCSliceBySheet, 'Slice by sheet'))
23085
+ }], [{
23086
+ label: 'Fillet',
23087
+ icon: /*#__PURE__*/React.createElement(Icon, {
23088
+ url: img$t
23089
+ }),
23090
+ callback: wrapper(() => featureApi.createFeature(drawingId, rootId, classcad.CCClasses.CCConstantRadiusFillet, 'Fillet'))
23091
+ }, {
23092
+ label: 'Chamfer',
23093
+ icon: /*#__PURE__*/React.createElement(Icon, {
23094
+ url: img$s
23095
+ }),
23096
+ callback: wrapper(() => featureApi.createFeature(drawingId, rootId, classcad.CCClasses.CCChamfer, 'Chamfer'))
23097
+ }], [{
23098
+ label: 'Linear pattern',
23099
+ icon: /*#__PURE__*/React.createElement(Icon, {
23100
+ url: img$q
23101
+ }),
23102
+ callback: wrapper(() => featureApi.createFeature(drawingId, rootId, classcad.CCClasses.CCLinearPattern, 'Linear pattern'))
23103
+ }, {
23104
+ label: 'Circular pattern',
23105
+ icon: /*#__PURE__*/React.createElement(Icon, {
23106
+ url: img$p
23107
+ }),
23108
+ callback: wrapper(() => featureApi.createFeature(drawingId, rootId, classcad.CCClasses.CCCircularPattern, 'Circular pattern'))
23109
+ }, {
23110
+ label: 'Mirror',
23111
+ icon: /*#__PURE__*/React.createElement(Icon, {
23112
+ url: img$F
23113
+ }),
23114
+ callback: wrapper(() => featureApi.createFeature(drawingId, rootId, classcad.CCClasses.CCMirror, 'Mirror'))
23115
+ }], [{
23116
+ label: 'Translation',
23117
+ icon: /*#__PURE__*/React.createElement(Icon, {
23118
+ url: img$o
23119
+ }),
23120
+ callback: wrapper(() => featureApi.createFeature(drawingId, rootId, classcad.CCClasses.CCTranslation, 'Translate'))
23121
+ }, {
23122
+ label: 'Rotation',
23123
+ icon: /*#__PURE__*/React.createElement(Icon, {
23124
+ url: img$n
23125
+ }),
23126
+ callback: wrapper(() => featureApi.createFeature(drawingId, rootId, classcad.CCClasses.CCRotation, 'Rotate'))
23127
+ }, {
23128
+ label: 'Transformation by Csys',
23129
+ icon: /*#__PURE__*/React.createElement(Icon, {
23130
+ url: img$m
23131
+ }),
23132
+ callback: wrapper(() => featureApi.createFeature(drawingId, rootId, classcad.CCClasses.CCTransformationByCSys, 'Transform by Csys'))
23133
+ }], [{
23134
+ label: 'Add Box',
23135
+ icon: /*#__PURE__*/React.createElement(Icon, {
23136
+ url: img$l
23137
+ }),
23138
+ callback: wrapper(() => featureApi.createFeature(drawingId, rootId, 'CC_Box', 'Box'))
23139
+ }, {
23140
+ label: 'Add Sphere',
23141
+ icon: /*#__PURE__*/React.createElement(Icon, {
23142
+ url: img$k
23143
+ }),
23144
+ callback: wrapper(() => featureApi.createFeature(drawingId, rootId, 'CC_Sphere', 'Sphere'))
23145
+ }, {
23146
+ label: 'Add Cylinder',
23147
+ icon: /*#__PURE__*/React.createElement(Icon, {
23148
+ url: img$j
23149
+ }),
23150
+ callback: wrapper(() => featureApi.createFeature(drawingId, rootId, 'CC_Cylinder', 'Cylinder'))
23151
+ }, {
23152
+ label: 'Add Cone',
23153
+ icon: /*#__PURE__*/React.createElement(Icon, {
23154
+ url: img$i
23155
+ }),
23156
+ callback: wrapper(() => featureApi.createFeature(drawingId, rootId, 'CC_Cone', 'Cone'))
23157
+ }], {
23158
+ label: 'Import',
23159
+ icon: /*#__PURE__*/React.createElement(Icon, {
23160
+ url: img$h
23161
+ }),
23162
+ callback: wrapper(() => featureApi.createFeature(drawingId, rootId, classcad.CCClasses.CCImport, 'Import'))
23163
+ }, {
23164
+ label: 'Composite Curve',
23165
+ icon: /*#__PURE__*/React.createElement(Icon, {
23166
+ url: img$f
23167
+ }),
23168
+ callback: wrapper(() => featureApi.createFeature(drawingId, rootId, classcad.CCClasses.CCCompositeCurve, 'Composite Curve'))
23169
+ }, {
23170
+ label: 'Delete Entity',
23171
+ icon: /*#__PURE__*/React.createElement(Icon, {
23172
+ url: img$g
23173
+ }),
23174
+ callback: wrapper(() => featureApi.createFeature(drawingId, rootId, classcad.CCClasses.CCEntityDeletion, 'Entity Deletion'))
23175
+ }, {
23176
+ type: 'divider'
23177
+ }, {
23178
+ label: 'Expressions',
23179
+ icon: /*#__PURE__*/React.createElement(icons.FontSizeOutlined, null),
23180
+ callback: async () => {
23181
+ const gPlugins = core.getDrawing(drawingId).plugin.refs;
23182
+ const exprPlugin = Object.values(gPlugins).find(p => p.name === 'Expressions');
23183
+ const pApi = core.getDrawing(drawingId).api.plugin;
23184
+ exprPlugin && pApi.setActiveGlobal(exprPlugin.id, true);
22924
23185
  }
22925
- };
23186
+ }];
22926
23187
  };
22927
23188
 
22928
- var img$e = "data:image/svg+xml,%3csvg width='100' height='100' viewBox='0 0 100 100' fill='none' xmlns='http://www.w3.org/2000/svg'%3e%3cpath d='M40.375 51.4062H21.2812V71.5H15.2812V26H43.4688V30.9375H21.2812V46.5H40.375V51.4062ZM85.6562 50.2188C85.6562 54.6771 84.9062 58.5729 83.4062 61.9062C81.9062 65.2188 79.7812 67.75 77.0312 69.5C74.2812 71.25 71.0729 72.125 67.4062 72.125C63.8229 72.125 60.6458 71.25 57.875 69.5C55.1042 67.7292 52.9479 65.2188 51.4062 61.9688C49.8854 58.6979 49.1042 54.9167 49.0625 50.625V47.3438C49.0625 42.9688 49.8229 39.1042 51.3438 35.75C52.8646 32.3958 55.0104 29.8333 57.7812 28.0625C60.5729 26.2708 63.7604 25.375 67.3438 25.375C70.9896 25.375 74.1979 26.2604 76.9688 28.0312C79.7604 29.7812 81.9062 32.3333 83.4062 35.6875C84.9062 39.0208 85.6562 42.9062 85.6562 47.3438V50.2188ZM79.6875 47.2812C79.6875 41.8854 78.6042 37.75 76.4375 34.875C74.2708 31.9792 71.2396 30.5312 67.3438 30.5312C63.5521 30.5312 60.5625 31.9792 58.375 34.875C56.2083 37.75 55.0938 41.75 55.0312 46.875V50.2188C55.0312 55.4479 56.125 59.5625 58.3125 62.5625C60.5208 65.5417 63.5521 67.0312 67.4062 67.0312C71.2812 67.0312 74.2812 65.625 76.4062 62.8125C78.5312 59.9792 79.625 55.9271 79.6875 50.6562V47.2812Z' fill='%235E5E5E'/%3e%3cpath d='M40.375 51.4062V52.4062H41.375V51.4062H40.375ZM21.2812 51.4062V50.4062H20.2812V51.4062H21.2812ZM21.2812 71.5V72.5H22.2812V71.5H21.2812ZM15.2812 71.5H14.2812V72.5H15.2812V71.5ZM15.2812 26V25H14.2812V26H15.2812ZM43.4688 26H44.4688V25H43.4688V26ZM43.4688 30.9375V31.9375H44.4688V30.9375H43.4688ZM21.2812 30.9375V29.9375H20.2812V30.9375H21.2812ZM21.2812 46.5H20.2812V47.5H21.2812V46.5ZM40.375 46.5H41.375V45.5H40.375V46.5ZM40.375 50.4062H21.2812V52.4062H40.375V50.4062ZM20.2812 51.4062V71.5H22.2812V51.4062H20.2812ZM21.2812 70.5H15.2812V72.5H21.2812V70.5ZM16.2812 71.5V26H14.2812V71.5H16.2812ZM15.2812 27H43.4688V25H15.2812V27ZM42.4688 26V30.9375H44.4688V26H42.4688ZM43.4688 29.9375H21.2812V31.9375H43.4688V29.9375ZM20.2812 30.9375V46.5H22.2812V30.9375H20.2812ZM21.2812 47.5H40.375V45.5H21.2812V47.5ZM39.375 46.5V51.4062H41.375V46.5H39.375ZM83.4062 61.9062L84.3172 62.3188L84.3182 62.3166L83.4062 61.9062ZM57.875 69.5L57.3365 70.3426L57.341 70.3455L57.875 69.5ZM51.4062 61.9688L50.4995 62.3904L50.5027 62.3973L51.4062 61.9688ZM49.0625 50.625H48.0625L48.0625 50.6347L49.0625 50.625ZM57.7812 28.0625L58.3198 28.9051L58.3214 28.9041L57.7812 28.0625ZM76.9688 28.0312L76.4302 28.8739L76.4376 28.8785L76.9688 28.0312ZM83.4062 35.6875L82.4934 36.0957L82.4943 36.0979L83.4062 35.6875ZM76.4375 34.875L75.6368 35.4741L75.6389 35.4769L76.4375 34.875ZM58.375 34.875L57.5771 34.2722L57.5764 34.2731L58.375 34.875ZM55.0312 46.875L54.0312 46.8628V46.875H55.0312ZM58.3125 62.5625L57.5045 63.1517L57.5091 63.158L58.3125 62.5625ZM76.4062 62.8125L77.2041 63.4153L77.2062 63.4125L76.4062 62.8125ZM79.6875 50.6562L80.6875 50.6681V50.6562H79.6875ZM84.6562 50.2188C84.6562 54.566 83.925 58.3167 82.4943 61.4959L84.3182 62.3166C85.8875 58.8292 86.6562 54.7882 86.6562 50.2188H84.6562ZM82.4953 61.4937C81.0659 64.6504 79.0619 67.0225 76.4944 68.6563L77.5681 70.3437C80.5006 68.4775 82.7466 65.7871 84.3172 62.3188L82.4953 61.4937ZM76.4944 68.6563C73.9243 70.2919 70.9072 71.125 67.4062 71.125V73.125C71.2386 73.125 74.6382 72.2081 77.5681 70.3437L76.4944 68.6563ZM67.4062 71.125C63.9936 71.125 61.0052 70.2942 58.409 68.6545L57.341 70.3455C60.2865 72.2058 63.6522 73.125 67.4062 73.125V71.125ZM58.4135 68.6574C55.8155 66.997 53.7788 64.6371 52.3098 61.5402L50.5027 62.3973C52.117 65.8004 54.3928 68.4613 57.3365 70.3426L58.4135 68.6574ZM52.313 61.5471C50.8625 58.4276 50.103 54.7912 50.0625 50.6153L48.0625 50.6347C48.1053 55.0421 48.9083 58.9683 50.4995 62.3904L52.313 61.5471ZM50.0625 50.625V47.3438H48.0625V50.625H50.0625ZM50.0625 47.3438C50.0625 43.0848 50.8025 39.3653 52.2545 36.163L50.433 35.337C48.8433 38.843 48.0625 42.8527 48.0625 47.3438H50.0625ZM52.2545 36.163C53.7053 32.9632 55.7311 30.5595 58.3198 28.9051L57.2427 27.2199C54.2898 29.1071 52.0238 31.8285 50.433 35.337L52.2545 36.163ZM58.3214 28.9041C60.9389 27.2242 63.9359 26.375 67.3438 26.375V24.375C63.5849 24.375 60.2069 25.3175 57.2411 27.2209L58.3214 28.9041ZM67.3438 26.375C70.8202 26.375 73.8374 27.2168 76.4302 28.8739L77.5073 27.1886C74.5584 25.304 71.159 24.375 67.3438 24.375V26.375ZM76.4376 28.8785C79.0423 30.5113 81.0646 32.9009 82.4934 36.0957L84.3191 35.2793C82.7479 31.7658 80.4785 29.0512 77.4999 27.184L76.4376 28.8785ZM82.4943 36.0979C83.9252 39.2776 84.6562 43.0181 84.6562 47.3438H86.6562C86.6562 42.7944 85.8873 38.764 84.3182 35.2771L82.4943 36.0979ZM84.6562 47.3438V50.2188H86.6562V47.3438H84.6562ZM80.6875 47.2812C80.6875 41.7713 79.5843 37.389 77.2361 34.2731L75.6389 35.4769C77.6241 38.111 78.6875 41.9995 78.6875 47.2812H80.6875ZM77.2382 34.2759C74.8664 31.1059 71.5265 29.5312 67.3438 29.5312V31.5312C70.9527 31.5312 73.6753 32.8524 75.6368 35.4741L77.2382 34.2759ZM67.3438 29.5312C63.2549 29.5312 59.9632 31.1134 57.5771 34.2722L59.1729 35.4778C61.1618 32.8449 63.8492 31.5312 67.3438 31.5312V29.5312ZM57.5764 34.2731C55.2374 37.3768 54.0954 41.6121 54.0313 46.8628L56.0312 46.8872C56.0921 41.8879 57.1792 38.1232 59.1736 35.4769L57.5764 34.2731ZM54.0312 46.875V50.2188H56.0312V46.875H54.0312ZM54.0312 50.2188C54.0312 55.5758 55.1505 59.9233 57.5045 63.1517L59.1205 61.9733C57.0995 59.2017 56.0312 55.3201 56.0312 50.2188H54.0312ZM57.5091 63.158C59.9146 66.4031 63.25 68.0312 67.4062 68.0312V66.0312C63.8542 66.0312 61.127 64.6802 59.1159 61.967L57.5091 63.158ZM67.4062 68.0312C71.5589 68.0312 74.8695 66.5053 77.2041 63.4153L75.6084 62.2097C73.693 64.7447 71.0036 66.0312 67.4062 66.0312V68.0312ZM77.2062 63.4125C79.5072 60.3445 80.6236 56.0527 80.6874 50.6681L78.6876 50.6444C78.6264 55.8015 77.5553 59.6138 75.6063 62.2125L77.2062 63.4125ZM80.6875 50.6562V47.2812H78.6875V50.6562H80.6875Z' fill='%235E5E5E'/%3e%3c/svg%3e";
23189
+ var img$e = "data:image/svg+xml,%3c%3fxml version='1.0' encoding='UTF-8'%3f%3e%3csvg width='100' height='100' version='1.1' viewBox='0 0 100 100' xmlns='http://www.w3.org/2000/svg'%3e %3cg stroke='black' stroke-width='6'%3e %3crect x='32' y='37' width='36' height='36' fill='%239c9c9c' stroke-linecap='square'/%3e %3cpath d='m50 15v35' fill='none'/%3e %3cpath d='m12 75 33-15' fill='none'/%3e %3cpath d='m88 75-33-15' fill='none'/%3e %3c/g%3e%3c/svg%3e";
22929
23190
 
22930
- var img$d = "data:image/svg+xml,%3csvg width='100' height='100' viewBox='0 0 100 100' fill='none' xmlns='http://www.w3.org/2000/svg'%3e%3cpath d='M62.375 51.4062H43.2812V71.5H37.2812V26H65.4688V30.9375H43.2812V46.5H62.375V51.4062Z' fill='%235E5E5E'/%3e%3cpath d='M62.375 51.4062V52.4062H63.375V51.4062H62.375ZM43.2812 51.4062V50.4062H42.2812V51.4062H43.2812ZM43.2812 71.5V72.5H44.2812V71.5H43.2812ZM37.2812 71.5H36.2812V72.5H37.2812V71.5ZM37.2812 26V25H36.2812V26H37.2812ZM65.4688 26H66.4688V25H65.4688V26ZM65.4688 30.9375V31.9375H66.4688V30.9375H65.4688ZM43.2812 30.9375V29.9375H42.2812V30.9375H43.2812ZM43.2812 46.5H42.2812V47.5H43.2812V46.5ZM62.375 46.5H63.375V45.5H62.375V46.5ZM62.375 50.4062H43.2812V52.4062H62.375V50.4062ZM42.2812 51.4062V71.5H44.2812V51.4062H42.2812ZM43.2812 70.5H37.2812V72.5H43.2812V70.5ZM38.2812 71.5V26H36.2812V71.5H38.2812ZM37.2812 27H65.4688V25H37.2812V27ZM64.4688 26V30.9375H66.4688V26H64.4688ZM65.4688 29.9375H43.2812V31.9375H65.4688V29.9375ZM42.2812 30.9375V46.5H44.2812V30.9375H42.2812ZM43.2812 47.5H62.375V45.5H43.2812V47.5ZM61.375 46.5V51.4062H63.375V46.5H61.375Z' fill='%235E5E5E'/%3e%3c/svg%3e";
23191
+ var img$d = "data:image/svg+xml,%3c%3fxml version='1.0' encoding='UTF-8'%3f%3e%3csvg width='100' height='100' version='1.1' viewBox='0 0 100 100' xmlns='http://www.w3.org/2000/svg'%3e %3cg fill='%239c9c9c'%3e %3crect x='7' y='55' width='86' height='38'/%3e %3crect x='32' y='32' width='36' height='36' stroke='black' stroke-linecap='square' stroke-width='6'/%3e %3cpath d='m10 55h30' stroke='black' stroke-linecap='square' stroke-width='6'/%3e %3cpath d='m90 55h-30' stroke='black' stroke-linecap='square' stroke-width='6'/%3e %3c/g%3e%3c/svg%3e";
22931
23192
 
22932
- var img$c = "data:image/svg+xml,%3csvg width='100' height='100' viewBox='0 0 100 100' fill='none' xmlns='http://www.w3.org/2000/svg'%3e%3cpath d='M49.6875 51.2188C44.5417 49.7396 40.7917 47.9271 38.4375 45.7812C36.1042 43.6146 34.9375 40.9479 34.9375 37.7812C34.9375 34.1979 36.3646 31.2396 39.2188 28.9062C42.0938 26.5521 45.8229 25.375 50.4062 25.375C53.5312 25.375 56.3125 25.9792 58.75 27.1875C61.2083 28.3958 63.1042 30.0625 64.4375 32.1875C65.7917 34.3125 66.4688 36.6354 66.4688 39.1562H60.4375C60.4375 36.4062 59.5625 34.25 57.8125 32.6875C56.0625 31.1042 53.5938 30.3125 50.4062 30.3125C47.4479 30.3125 45.1354 30.9688 43.4688 32.2812C41.8229 33.5729 41 35.375 41 37.6875C41 39.5417 41.7812 41.1146 43.3438 42.4062C44.9271 43.6771 47.6042 44.8438 51.375 45.9062C55.1667 46.9688 58.125 48.1458 60.25 49.4375C62.3958 50.7083 63.9792 52.1979 65 53.9062C66.0417 55.6146 66.5625 57.625 66.5625 59.9375C66.5625 63.625 65.125 66.5833 62.25 68.8125C59.375 71.0208 55.5312 72.125 50.7188 72.125C47.5938 72.125 44.6771 71.5312 41.9688 70.3438C39.2604 69.1354 37.1667 67.4896 35.6875 65.4062C34.2292 63.3229 33.5 60.9583 33.5 58.3125H39.5312C39.5312 61.0625 40.5417 63.2396 42.5625 64.8438C44.6042 66.4271 47.3229 67.2188 50.7188 67.2188C53.8854 67.2188 56.3125 66.5729 58 65.2812C59.6875 63.9896 60.5312 62.2292 60.5312 60C60.5312 57.7708 59.75 56.0521 58.1875 54.8438C56.625 53.6146 53.7917 52.4062 49.6875 51.2188Z' fill='%235E5E5E'/%3e%3cpath d='M49.6875 51.2188L49.9654 50.2582L49.9638 50.2577L49.6875 51.2188ZM38.4375 45.7812L37.757 46.5141L37.7639 46.5203L38.4375 45.7812ZM39.2188 28.9062L39.8517 29.6805L39.8523 29.68L39.2188 28.9062ZM58.75 27.1875L58.3058 28.0835L58.3089 28.0849L58.75 27.1875ZM64.4375 32.1875L63.5904 32.719L63.5942 32.7249L64.4375 32.1875ZM66.4688 39.1562V40.1562H67.4688V39.1562H66.4688ZM60.4375 39.1562H59.4375V40.1562H60.4375V39.1562ZM57.8125 32.6875L57.1416 33.4291L57.1465 33.4334L57.8125 32.6875ZM43.4688 32.2812L44.0861 33.0679L44.0874 33.0669L43.4688 32.2812ZM43.3438 42.4062L42.7066 43.177L42.7122 43.1816L42.7178 43.1861L43.3438 42.4062ZM51.375 45.9062L51.1038 46.8688L51.1052 46.8692L51.375 45.9062ZM60.25 49.4375L59.7306 50.2921L59.7404 50.2979L60.25 49.4375ZM65 53.9062L64.1416 54.4192L64.1462 54.4269L65 53.9062ZM62.25 68.8125L62.8592 69.6056L62.8628 69.6028L62.25 68.8125ZM41.9688 70.3438L41.5613 71.257L41.5672 71.2596L41.9688 70.3438ZM35.6875 65.4062L34.8682 65.9797L34.8721 65.9852L35.6875 65.4062ZM33.5 58.3125V57.3125H32.5V58.3125H33.5ZM39.5312 58.3125H40.5312V57.3125H39.5312V58.3125ZM42.5625 64.8438L41.9407 65.627L41.9497 65.634L42.5625 64.8438ZM58.1875 54.8438L57.5692 55.6297L57.5758 55.6348L58.1875 54.8438ZM49.9638 50.2577C44.8778 48.7957 41.2993 47.0367 39.1111 45.0422L37.7639 46.5203C40.284 48.8174 44.2055 50.6834 49.4112 52.1798L49.9638 50.2577ZM39.118 45.0485C36.9871 43.0698 35.9375 40.6681 35.9375 37.7812H33.9375C33.9375 41.2277 35.2212 44.1594 37.757 46.514L39.118 45.0485ZM35.9375 37.7812C35.9375 34.5079 37.2221 31.8302 39.8517 29.6805L38.5858 28.132C35.5071 30.649 33.9375 33.888 33.9375 37.7812H35.9375ZM39.8523 29.68C42.5099 27.5038 45.9983 26.375 50.4062 26.375V24.375C45.6475 24.375 41.6776 25.6003 38.5852 28.1325L39.8523 29.68ZM50.4062 26.375C53.4001 26.375 56.0256 26.9531 58.3059 28.0835L59.1941 26.2915C56.5994 25.0053 53.6624 24.375 50.4062 24.375V26.375ZM58.3089 28.0849C60.6164 29.2192 62.3648 30.7656 63.5904 32.719L65.2846 31.656C63.8435 29.3594 61.8003 27.5725 59.1911 26.2901L58.3089 28.0849ZM63.5942 32.7249C64.846 34.6893 65.4688 36.8257 65.4688 39.1562H67.4688C67.4688 36.4451 66.7374 33.9357 65.2808 31.6501L63.5942 32.7249ZM66.4688 38.1562H60.4375V40.1562H66.4688V38.1562ZM61.4375 39.1562C61.4375 36.1753 60.4781 33.7269 58.4785 31.9416L57.1465 33.4334C58.6469 34.7731 59.4375 36.6372 59.4375 39.1562H61.4375ZM58.4834 31.946C56.4933 30.1454 53.7536 29.3125 50.4062 29.3125V31.3125C53.4339 31.3125 55.6317 32.063 57.1416 33.429L58.4834 31.946ZM50.4062 29.3125C47.3105 29.3125 44.751 29.9986 42.8501 31.4956L44.0874 33.0669C45.5198 31.9389 47.5853 31.3125 50.4062 31.3125V29.3125ZM42.8514 31.4946C40.9363 32.9975 40 35.1049 40 37.6875H42C42 35.6451 42.7095 34.1483 44.0861 33.0679L42.8514 31.4946ZM40 37.6875C40 39.8701 40.9387 41.7155 42.7066 43.177L43.9809 41.6355C42.6238 40.5137 42 39.2133 42 37.6875H40ZM42.7178 43.1861C44.4635 44.5873 47.3015 45.7974 51.1038 46.8688L51.6462 44.9437C47.9069 43.8901 45.3907 42.7669 43.9697 41.6264L42.7178 43.1861ZM51.1052 46.8692C54.8538 47.9196 57.7151 49.0669 59.7306 50.292L60.7694 48.583C58.5349 47.2248 55.4795 46.0179 51.6448 44.9433L51.1052 46.8692ZM59.7404 50.2979C61.7785 51.5049 63.2253 52.8858 64.1416 54.4192L65.8584 53.3933C64.7331 51.5101 63.0132 49.9117 60.7596 48.5771L59.7404 50.2979ZM64.1462 54.4269C65.0782 55.9553 65.5625 57.7796 65.5625 59.9375H67.5625C67.5625 57.4704 67.0052 55.2739 65.8538 53.3856L64.1462 54.4269ZM65.5625 59.9375C65.5625 63.3208 64.2641 65.9855 61.6372 68.0222L62.8628 69.6028C65.9859 67.1812 67.5625 63.9292 67.5625 59.9375H65.5625ZM61.6408 68.0194C58.9901 70.0555 55.3829 71.125 50.7188 71.125V73.125C55.6796 73.125 59.7599 71.9862 62.8592 69.6056L61.6408 68.0194ZM50.7188 71.125C47.724 71.125 44.9449 70.5568 42.3703 69.4279L41.5672 71.2596C44.4092 72.5057 47.4635 73.125 50.7188 73.125V71.125ZM42.3762 69.4305C39.8047 68.2832 37.8628 66.7427 36.5029 64.8273L34.8721 65.9852C36.4706 68.2365 38.7161 69.9876 41.5613 71.257L42.3762 69.4305ZM36.5067 64.8328C35.171 62.9246 34.5 60.762 34.5 58.3125H32.5C32.5 61.1547 33.2873 63.7212 34.8683 65.9797L36.5067 64.8328ZM33.5 59.3125H39.5312V57.3125H33.5V59.3125ZM38.5312 58.3125C38.5312 61.3445 39.6634 63.8192 41.9408 65.627L43.1842 64.0605C41.4199 62.66 40.5312 60.7805 40.5312 58.3125H38.5312ZM41.9497 65.634C44.2149 67.3907 47.1709 68.2188 50.7188 68.2188V66.2188C47.4749 66.2188 44.9934 65.4635 43.1753 64.0535L41.9497 65.634ZM50.7188 68.2188C54.0023 68.2188 56.6788 67.5519 58.6078 66.0753L57.3922 64.4872C55.9462 65.5939 53.7686 66.2188 50.7188 66.2188V68.2188ZM58.6078 66.0753C60.5563 64.5839 61.5312 62.5227 61.5312 60H59.5312C59.5312 61.9356 58.8187 63.3953 57.3922 64.4872L58.6078 66.0753ZM61.5312 60C61.5312 57.5066 60.6404 55.4765 58.7992 54.0527L57.5758 55.6348C58.8596 56.6276 59.5312 58.0351 59.5312 60H61.5312ZM58.8058 54.0578C57.0802 52.7003 54.0838 51.4498 49.9654 50.2582L49.4096 52.1793C53.4995 53.3627 56.1698 54.5288 57.5692 55.6297L58.8058 54.0578Z' fill='%235E5E5E'/%3e%3c/svg%3e";
23193
+ var img$c = "data:image/svg+xml,%3c%3fxml version='1.0' encoding='UTF-8'%3f%3e%3csvg width='100' height='100' version='1.1' viewBox='0 0 100 100' xml:space='preserve' xmlns='http://www.w3.org/2000/svg'%3e%3cg%3e%3cpath d='m20 50h60' fill='%239c9c9c' stroke='black' stroke-linecap='round' stroke-width='5'/%3e%3crect x='37' y='37' width='26' height='26' fill='%239c9c9c' stroke='black' stroke-linecap='round' stroke-width='5'/%3e%3cpath d='m10 50 10-6v12z' stroke='black' stroke-linecap='square' stroke-width='5'/%3e%3cpath d='m90 50-10-6v12z' stroke='black' stroke-linecap='square' stroke-width='5'/%3e%3crect x='10' y='15' width='80' height='10'/%3e%3crect x='10' y='75' width='80' height='10'/%3e%3c/g%3e%3c/svg%3e";
22933
23194
 
22934
- var img$b = "data:image/svg+xml,%3csvg width='100' height='100' viewBox='0 0 100 100' fill='none' xmlns='http://www.w3.org/2000/svg'%3e%3cpath d='M70.75 57.0625C70.1875 61.875 68.4062 65.5938 65.4062 68.2188C62.4271 70.8229 58.4583 72.125 53.5 72.125C48.125 72.125 43.8125 70.1979 40.5625 66.3438C37.3333 62.4896 35.7188 57.3333 35.7188 50.875V46.5C35.7188 42.2708 36.4688 38.5521 37.9688 35.3438C39.4896 32.1354 41.6354 29.6771 44.4062 27.9688C47.1771 26.2396 50.3854 25.375 54.0312 25.375C58.8646 25.375 62.7396 26.7292 65.6562 29.4375C68.5729 32.125 70.2708 35.8542 70.75 40.625H64.7188C64.1979 37 63.0625 34.375 61.3125 32.75C59.5833 31.125 57.1562 30.3125 54.0312 30.3125C50.1979 30.3125 47.1875 31.7292 45 34.5625C42.8333 37.3958 41.75 41.4271 41.75 46.6562V51.0625C41.75 56 42.7812 59.9271 44.8438 62.8438C46.9062 65.7604 49.7917 67.2188 53.5 67.2188C56.8333 67.2188 59.3854 66.4688 61.1562 64.9688C62.9479 63.4479 64.1354 60.8125 64.7188 57.0625H70.75Z' fill='%235E5E5E'/%3e%3cpath d='M70.75 57.0625L71.7432 57.1786L71.8737 56.0625H70.75V57.0625ZM65.4062 68.2188L66.0644 68.9717L66.0648 68.9713L65.4062 68.2188ZM40.5625 66.3438L39.796 66.986L39.798 66.9884L40.5625 66.3438ZM37.9688 35.3438L37.0651 34.9154L37.0629 34.9202L37.9688 35.3438ZM44.4062 27.9688L44.9311 28.82L44.9357 28.8171L44.4062 27.9688ZM65.6562 29.4375L64.9758 30.1703L64.9786 30.1729L65.6562 29.4375ZM70.75 40.625V41.625H71.8555L71.745 40.5251L70.75 40.625ZM64.7188 40.625L63.7289 40.7672L63.8522 41.625H64.7188V40.625ZM61.3125 32.75L60.6277 33.4787L60.632 33.4828L61.3125 32.75ZM45 34.5625L44.2085 33.9514L44.2056 33.955L45 34.5625ZM61.1562 64.9688L61.8026 65.7318L61.8034 65.7311L61.1562 64.9688ZM64.7188 57.0625V56.0625H63.8623L63.7306 56.9088L64.7188 57.0625ZM69.7568 56.9464C69.2165 61.5683 67.5228 65.038 64.7477 67.4662L66.0648 68.9713C69.2897 66.1495 71.1585 62.1817 71.7432 57.1786L69.7568 56.9464ZM64.7481 67.4658C61.9938 69.8734 58.2797 71.125 53.5 71.125V73.125C58.637 73.125 62.8603 71.7724 66.0644 68.9717L64.7481 67.4658ZM53.5 71.125C48.3975 71.125 44.3731 69.3115 41.327 65.6991L39.798 66.9884C43.2519 71.0843 47.8525 73.125 53.5 73.125V71.125ZM41.329 65.7015C38.2893 62.0735 36.7188 57.1666 36.7188 50.875H34.7188C34.7188 57.5 36.3774 62.9057 39.796 66.986L41.329 65.7015ZM36.7188 50.875V46.5H34.7188V50.875H36.7188ZM36.7188 46.5C36.7188 42.3892 37.4475 38.8198 38.8746 35.7673L37.0629 34.9202C35.49 38.2844 34.7188 42.1525 34.7188 46.5H36.7188ZM38.8724 35.7721C40.3183 32.7219 42.3396 30.4177 44.9311 28.82L43.8814 27.1175C40.9313 28.9364 38.6609 31.549 37.0651 34.9154L38.8724 35.7721ZM44.9357 28.8171C47.5297 27.1983 50.5502 26.375 54.0312 26.375V24.375C50.2206 24.375 46.8245 25.2809 43.8768 27.1204L44.9357 28.8171ZM54.0312 26.375C58.6692 26.375 62.282 27.6689 64.9758 30.1703L66.3367 28.7047C63.1971 25.7894 59.06 24.375 54.0312 24.375V26.375ZM64.9786 30.1729C67.6794 32.6615 69.2949 36.1442 69.755 40.7249L71.745 40.5251C71.2467 35.5641 69.4664 31.5885 66.3339 28.7021L64.9786 30.1729ZM70.75 39.625H64.7188V41.625H70.75V39.625ZM65.7086 40.4828C65.1717 36.7462 63.9795 33.8618 61.993 32.0172L60.632 33.4828C62.1455 34.8882 63.2241 37.2538 63.7289 40.7672L65.7086 40.4828ZM61.9973 32.0213C60.03 30.1725 57.3278 29.3125 54.0312 29.3125V31.3125C56.9847 31.3125 59.1366 32.0775 60.6277 33.4787L61.9973 32.0213ZM54.0312 29.3125C49.9135 29.3125 46.6003 30.8534 44.2085 33.9514L45.7915 35.1736C47.7747 32.605 50.4823 31.3125 54.0312 31.3125V29.3125ZM44.2056 33.955C41.8562 37.0275 40.75 41.3059 40.75 46.6562H42.75C42.75 41.5483 43.8105 37.7642 45.7944 35.17L44.2056 33.955ZM40.75 46.6562V51.0625H42.75V46.6562H40.75ZM40.75 51.0625C40.75 56.1298 41.8075 60.2821 44.0273 63.4211L45.6602 62.2664C43.755 59.5721 42.75 55.8702 42.75 51.0625H40.75ZM44.0273 63.4211C46.2855 66.6146 49.4817 68.2188 53.5 68.2188V66.2188C50.1016 66.2188 47.527 64.9062 45.6602 62.2664L44.0273 63.4211ZM53.5 68.2188C56.9687 68.2188 59.7865 67.4395 61.8026 65.7318L60.5099 64.2057C58.9843 65.498 56.698 66.2188 53.5 66.2188V68.2188ZM61.8034 65.7311C63.8616 63.9841 65.1079 61.0665 65.7069 57.2162L63.7306 56.9088C63.1629 60.5585 62.0343 62.9118 60.5091 64.2064L61.8034 65.7311ZM64.7188 58.0625H70.75V56.0625H64.7188V58.0625Z' fill='%235E5E5E'/%3e%3c/svg%3e";
23195
+ var img$b = "data:image/svg+xml,%3c%3fxml version='1.0' encoding='UTF-8'%3f%3e%3csvg width='100' height='100' version='1.1' viewBox='0 0 100 100' xmlns='http://www.w3.org/2000/svg'%3e %3cg stroke='black' stroke-linecap='square'%3e %3cellipse cx='50' cy='55' rx='25' ry='15' fill='%239c9c9c' stroke-width='6'/%3e %3cellipse cx='50' cy='55' rx='5' ry='2' stroke-width='6'/%3e %3cpath d='m80.642 74.284a40 30 0 0 1-30.642 10.716 40 30 0 0 1-30.642-10.716' fill='none' stroke-width='6'/%3e %3cpath d='m88.503 63.648-0.82085 11.633-9.8298-6.8829z' stroke-width='4'/%3e %3cpath d='m50 55v-35' stroke-width='5'/%3e %3cpath d='m50 10 6 10h-12z' stroke-width='4'/%3e %3c/g%3e%3c/svg%3e";
22935
23196
 
22936
- var img$a = "data:image/svg+xml,%3csvg width='100' height='100' viewBox='0 0 100 100' fill='none' xmlns='http://www.w3.org/2000/svg'%3e%3cpath d='M23.7812 53.6875V71.5H17.7812V26H34.5625C39.5417 26 43.4375 27.2708 46.25 29.8125C49.0833 32.3542 50.5 35.7188 50.5 39.9062C50.5 44.3229 49.1146 47.7292 46.3438 50.125C43.5938 52.5 39.6458 53.6875 34.5 53.6875H23.7812ZM23.7812 48.7812H34.5625C37.7708 48.7812 40.2292 48.0312 41.9375 46.5312C43.6458 45.0104 44.5 42.8229 44.5 39.9688C44.5 37.2604 43.6458 35.0938 41.9375 33.4688C40.2292 31.8438 37.8854 31 34.9062 30.9375H23.7812V48.7812ZM64.1875 66.5938H85.75V71.5H58.1562V26H64.1875V66.5938Z' fill='%235E5E5E'/%3e%3cpath d='M23.7812 53.6875V52.6875H22.7812V53.6875H23.7812ZM23.7812 71.5V72.5H24.7812V71.5H23.7812ZM17.7812 71.5H16.7812V72.5H17.7812V71.5ZM17.7812 26V25H16.7812V26H17.7812ZM46.25 29.8125L45.5795 30.5544L45.5822 30.5569L46.25 29.8125ZM46.3438 50.125L46.9974 50.8818L46.9978 50.8814L46.3438 50.125ZM23.7812 48.7812H22.7812V49.7812H23.7812V48.7812ZM41.9375 46.5312L42.5973 47.2827L42.6024 47.2782L41.9375 46.5312ZM34.9062 30.9375L34.9272 29.9377L34.9167 29.9375H34.9062V30.9375ZM23.7812 30.9375V29.9375H22.7812V30.9375H23.7812ZM22.7812 53.6875V71.5H24.7812V53.6875H22.7812ZM23.7812 70.5H17.7812V72.5H23.7812V70.5ZM18.7812 71.5V26H16.7812V71.5H18.7812ZM17.7812 27H34.5625V25H17.7812V27ZM34.5625 27C39.3734 27 43.0023 28.2254 45.5795 30.5544L46.9205 29.0706C43.8727 26.3163 39.71 25 34.5625 25V27ZM45.5822 30.5569C48.1816 32.8886 49.5 35.971 49.5 39.9062H51.5C51.5 35.4665 49.9851 31.8197 46.9178 29.0681L45.5822 30.5569ZM49.5 39.9062C49.5 44.0979 48.1958 47.2016 45.6897 49.3686L46.9978 50.8814C50.0334 48.2567 51.5 44.5479 51.5 39.9062H49.5ZM45.6901 49.3682C43.1847 51.532 39.5046 52.6875 34.5 52.6875V54.6875C39.787 54.6875 44.0028 53.468 46.9974 50.8818L45.6901 49.3682ZM34.5 52.6875H23.7812V54.6875H34.5V52.6875ZM23.7812 49.7812H34.5625V47.7812H23.7812V49.7812ZM34.5625 49.7812C37.9145 49.7812 40.6437 48.998 42.5973 47.2827L41.2777 45.7798C39.8146 47.0645 37.6272 47.7812 34.5625 47.7812V49.7812ZM42.6024 47.2782C44.5749 45.5222 45.5 43.0321 45.5 39.9688H43.5C43.5 42.6137 42.7168 44.4986 41.2726 45.7843L42.6024 47.2782ZM45.5 39.9688C45.5 37.0311 44.5636 34.5866 42.6267 32.7442L41.2483 34.1933C42.7281 35.6009 43.5 37.4898 43.5 39.9688H45.5ZM42.6267 32.7442C40.6937 30.9055 38.0874 30.004 34.9272 29.9377L34.8853 31.9373C37.6834 31.996 39.7646 32.782 41.2483 34.1933L42.6267 32.7442ZM34.9062 29.9375H23.7812V31.9375H34.9062V29.9375ZM22.7812 30.9375V48.7812H24.7812V30.9375H22.7812ZM64.1875 66.5938H63.1875V67.5938H64.1875V66.5938ZM85.75 66.5938H86.75V65.5938H85.75V66.5938ZM85.75 71.5V72.5H86.75V71.5H85.75ZM58.1562 71.5H57.1562V72.5H58.1562V71.5ZM58.1562 26V25H57.1562V26H58.1562ZM64.1875 26H65.1875V25H64.1875V26ZM64.1875 67.5938H85.75V65.5938H64.1875V67.5938ZM84.75 66.5938V71.5H86.75V66.5938H84.75ZM85.75 70.5H58.1562V72.5H85.75V70.5ZM59.1562 71.5V26H57.1562V71.5H59.1562ZM58.1562 27H64.1875V25H58.1562V27ZM63.1875 26V66.5938H65.1875V26H63.1875Z' fill='%235E5E5E'/%3e%3c/svg%3e";
23197
+ var img$a = "data:image/svg+xml,%3c%3fxml version='1.0' encoding='UTF-8'%3f%3e%3csvg width='100' height='100' version='1.1' viewBox='0 0 100 100' xmlns='http://www.w3.org/2000/svg'%3e %3cg stroke='black' stroke-linecap='square' stroke-width='5'%3e %3cpath d='m20 50h60' fill='%239c9c9c'/%3e %3cpath d='m50 20v60' fill='%239c9c9c'/%3e %3crect x='37' y='37' width='26' height='26' fill='%239c9c9c'/%3e %3cpath d='m10 50 10-6v12z'/%3e %3cpath d='m90 50-10-6v12z'/%3e %3cpath d='m50 10-6 10h12z'/%3e %3cpath d='m50 90-6-10h12z'/%3e %3c/g%3e%3c/svg%3e";
22937
23198
 
22938
- var img$9 = "data:image/svg+xml,%3csvg width='100' height='100' viewBox='0 0 100 100' fill='none' xmlns='http://www.w3.org/2000/svg'%3e%3cpath d='M22.2812 53.6875V71.5H16.2812V26H33.0625C38.0417 26 41.9375 27.2708 44.75 29.8125C47.5833 32.3542 49 35.7188 49 39.9062C49 44.3229 47.6146 47.7292 44.8438 50.125C42.0938 52.5 38.1458 53.6875 33 53.6875H22.2812ZM22.2812 48.7812H33.0625C36.2708 48.7812 38.7292 48.0312 40.4375 46.5312C42.1458 45.0104 43 42.8229 43 39.9688C43 37.2604 42.1458 35.0938 40.4375 33.4688C38.7292 31.8438 36.3854 31 33.4062 30.9375H22.2812V48.7812ZM77.4688 59.625H58.4062L54.125 71.5H47.9375L65.3125 26H70.5625L87.9688 71.5H81.8125L77.4688 59.625ZM60.2188 54.6875H75.6875L67.9375 33.4062L60.2188 54.6875Z' fill='%235E5E5E'/%3e%3cpath d='M22.2812 53.6875V52.6875H21.2812V53.6875H22.2812ZM22.2812 71.5V72.5H23.2812V71.5H22.2812ZM16.2812 71.5H15.2812V72.5H16.2812V71.5ZM16.2812 26V25H15.2812V26H16.2812ZM44.75 29.8125L44.0795 30.5544L44.0822 30.5569L44.75 29.8125ZM44.8438 50.125L45.4974 50.8818L45.4978 50.8814L44.8438 50.125ZM22.2812 48.7812H21.2812V49.7812H22.2812V48.7812ZM40.4375 46.5312L41.0973 47.2827L41.1024 47.2782L40.4375 46.5312ZM33.4062 30.9375L33.4272 29.9377L33.4167 29.9375H33.4062V30.9375ZM22.2812 30.9375V29.9375H21.2812V30.9375H22.2812ZM21.2812 53.6875V71.5H23.2812V53.6875H21.2812ZM22.2812 70.5H16.2812V72.5H22.2812V70.5ZM17.2812 71.5V26H15.2812V71.5H17.2812ZM16.2812 27H33.0625V25H16.2812V27ZM33.0625 27C37.8734 27 41.5023 28.2254 44.0795 30.5544L45.4205 29.0706C42.3727 26.3163 38.21 25 33.0625 25V27ZM44.0822 30.5569C46.6816 32.8886 48 35.971 48 39.9062H50C50 35.4665 48.4851 31.8197 45.4178 29.0681L44.0822 30.5569ZM48 39.9062C48 44.0979 46.6958 47.2016 44.1897 49.3686L45.4978 50.8814C48.5334 48.2567 50 44.5479 50 39.9062H48ZM44.1901 49.3682C41.6847 51.532 38.0046 52.6875 33 52.6875V54.6875C38.287 54.6875 42.5028 53.468 45.4974 50.8818L44.1901 49.3682ZM33 52.6875H22.2812V54.6875H33V52.6875ZM22.2812 49.7812H33.0625V47.7812H22.2812V49.7812ZM33.0625 49.7812C36.4145 49.7812 39.1437 48.998 41.0973 47.2827L39.7777 45.7798C38.3146 47.0645 36.1272 47.7812 33.0625 47.7812V49.7812ZM41.1024 47.2782C43.0749 45.5222 44 43.0321 44 39.9688H42C42 42.6137 41.2168 44.4986 39.7726 45.7843L41.1024 47.2782ZM44 39.9688C44 37.0311 43.0636 34.5866 41.1267 32.7442L39.7483 34.1933C41.2281 35.6009 42 37.4898 42 39.9688H44ZM41.1267 32.7442C39.1937 30.9055 36.5874 30.004 33.4272 29.9377L33.3853 31.9373C36.1834 31.996 38.2646 32.782 39.7483 34.1933L41.1267 32.7442ZM33.4062 29.9375H22.2812V31.9375H33.4062V29.9375ZM21.2812 30.9375V48.7812H23.2812V30.9375H21.2812ZM77.4688 59.625L78.4079 59.2815L78.1678 58.625H77.4688V59.625ZM58.4062 59.625V58.625H57.7038L57.4655 59.2858L58.4062 59.625ZM54.125 71.5V72.5H54.8275L55.0657 71.8392L54.125 71.5ZM47.9375 71.5L47.0033 71.1433L46.4852 72.5H47.9375V71.5ZM65.3125 26V25H64.6239L64.3783 25.6433L65.3125 26ZM70.5625 26L71.4965 25.6427L71.2506 25H70.5625V26ZM87.9688 71.5V72.5H89.422L88.9027 71.1427L87.9688 71.5ZM81.8125 71.5L80.8734 71.8435L81.1135 72.5H81.8125V71.5ZM60.2188 54.6875L59.2787 54.3465L58.7923 55.6875H60.2188V54.6875ZM75.6875 54.6875V55.6875H77.1159L76.6271 54.3453L75.6875 54.6875ZM67.9375 33.4062L68.8771 33.0641L67.9356 30.4787L66.9974 33.0653L67.9375 33.4062ZM77.4688 58.625H58.4062V60.625H77.4688V58.625ZM57.4655 59.2858L53.1843 71.1608L55.0657 71.8392L59.347 59.9642L57.4655 59.2858ZM54.125 70.5H47.9375V72.5H54.125V70.5ZM48.8717 71.8567L66.2467 26.3567L64.3783 25.6433L47.0033 71.1433L48.8717 71.8567ZM65.3125 27H70.5625V25H65.3125V27ZM69.6285 26.3573L87.0348 71.8573L88.9027 71.1427L71.4965 25.6427L69.6285 26.3573ZM87.9688 70.5H81.8125V72.5H87.9688V70.5ZM82.7516 71.1565L78.4079 59.2815L76.5296 59.9685L80.8734 71.8435L82.7516 71.1565ZM60.2188 55.6875H75.6875V53.6875H60.2188V55.6875ZM76.6271 54.3453L68.8771 33.0641L66.9979 33.7484L74.7479 55.0297L76.6271 54.3453ZM66.9974 33.0653L59.2787 54.3465L61.1588 55.0285L68.8776 33.7472L66.9974 33.0653Z' fill='%235E5E5E'/%3e%3c/svg%3e";
23199
+ var img$9 = "data:image/svg+xml,%3c%3fxml version='1.0' encoding='UTF-8'%3f%3e%3csvg width='100' height='100' version='1.1' viewBox='0 0 100 100' xmlns='http://www.w3.org/2000/svg'%3e %3cg stroke='black'%3e %3cpath d='m81.945 25.927-63.891 48.145' fill='%239c9c9c' stroke-linecap='square' stroke-width='5'/%3e %3cpath d='m85.939 22.918-14.792 3.6336 10.416 7.1764z' stroke-linecap='square' stroke-width='4'/%3e %3cpath d='m14.061 77.082 14.792-3.6336-10.416-7.1764z' stroke-linecap='square' stroke-width='4'/%3e %3cpath d='m18.055 25.927 63.891 48.145' fill='%239c9c9c' stroke-linecap='square' stroke-width='5'/%3e %3cpath d='m14.061 22.918 4.3755 10.81 10.416-7.1764z' stroke-linecap='square' stroke-width='4'/%3e %3cpath d='m85.939 77.082-4.3755-10.81-10.416 7.1764z' stroke-linecap='square' stroke-width='4'/%3e %3cpath d='m30 50 20 15 20-15-20-15z' fill='%239c9c9c' stroke-linecap='square' stroke-width='5'/%3e %3cpath d='m50 50v-35' stroke-linecap='round' stroke-width='5'/%3e %3cpath d='m50 10-6 10h12z' stroke-linecap='square' stroke-width='4'/%3e %3c/g%3e%3c/svg%3e";
22939
23200
 
22940
- var img$8 = "data:image/svg+xml,%3c%3fxml version='1.0' encoding='UTF-8'%3f%3e%3csvg width='100' height='100' version='1.1' viewBox='0 0 100 100' xmlns='http://www.w3.org/2000/svg'%3e %3cpath d='m41.909 60.481q0-3.0938-2.1914-4.7695-2.1592-1.6758-7.8311-3.3838t-9.0234-3.8027q-6.4131-4.0283-6.4131-10.506 0-5.6719 4.6084-9.3457 4.6406-3.6738 12.021-3.6738 4.8984 0 8.7334 1.8047 3.835 1.8047 6.0264 5.1562 2.1914 3.3193 2.1914 7.3799h-8.1211q0-3.6738-2.3203-5.7363-2.2881-2.0947-6.5742-2.0947-3.9961 0-6.2197 1.708-2.1914 1.708-2.1914 4.7695 0 2.5781 2.3848 4.3184 2.3848 1.708 7.8633 3.3516 5.4785 1.6113 8.7979 3.7061 3.3193 2.0625 4.8662 4.7695 1.5469 2.6748 1.5469 6.2842 0 5.8652-4.5117 9.3457-4.4795 3.4482-12.182 3.4482-5.0918 0-9.3779-1.8691-4.2539-1.9014-6.6387-5.2207-2.3525-3.3193-2.3525-7.7344h8.1533q0 3.9961 2.6426 6.1875 2.6426 2.1914 7.5732 2.1914 4.2539 0 6.3809-1.708 2.1592-1.7402 2.1592-4.5762zm20.461-5.3496v17.435h-8.1533v-46.922h17.95q7.8633 0 12.472 4.0928 4.6406 4.0928 4.6406 10.828 0 6.8965-4.5439 10.731-4.5117 3.835-12.665 3.835zm0-6.542h9.7969q4.3506 0 6.6387-2.0303 2.2881-2.0625 2.2881-5.9297 0-3.8027-2.3203-6.0586-2.3203-2.2881-6.3809-2.3525h-10.022z' fill='%235e5e5e' aria-label='SP'/%3e%3c/svg%3e";
23201
+ var img$8 = "data:image/svg+xml,%3c%3fxml version='1.0' encoding='UTF-8'%3f%3e%3csvg width='100' height='100' version='1.1' viewBox='0 0 100 100' xmlns='http://www.w3.org/2000/svg'%3e %3cg stroke='black'%3e %3ccircle cx='50' cy='50' r='35' fill='%239c9c9c' stroke-linecap='round' stroke-width='5' style='paint-order:normal'/%3e %3cpath d='m74.749 57.071a35 10 0 0 1-38.143 2.1677 35 10 0 0 1-21.606-9.2388' fill='none' stroke-linecap='round' stroke-width='5'/%3e %3cpath d='m50 85a10 35 0 0 1-9.0631-20.208 10 35 0 0 1 1.4026-37.289' fill='none' stroke-width='5'/%3e %3cpath d='m47.767 19.618 2.3872 16.832-16.914-6.1564z' stroke-width='4' style='paint-order:normal'/%3e %3cpath d='m79.586 52.422-10.675 14.527-6.1564-16.914z' stroke-width='4' style='paint-order:normal'/%3e %3c/g%3e%3c/svg%3e";
22941
23202
 
22942
- var img$7 = "data:image/svg+xml,%3c%3fxml version='1.0' encoding='UTF-8'%3f%3e%3csvg width='100' height='100' version='1.1' viewBox='0 0 100 100' xmlns='http://www.w3.org/2000/svg'%3e %3cpath d='m70.818 66.476q-2.5459 3.3193-7.0576 5.0273-4.5117 1.708-10.248 1.708-5.8975 0-10.441-2.6748-4.5439-2.6748-7.0254-7.6377-2.4492-4.9951-2.5459-11.634v-3.6738q0-10.635 5.0918-16.597 5.0918-5.9941 14.212-5.9941 7.8311 0 12.439 3.8672 4.6084 3.8672 5.543 11.15h-7.9922q-1.3535-8.4756-9.8291-8.4756-5.4785 0-8.3467 3.9639-2.8359 3.9316-2.9326 11.569v3.6094q0 7.6055 3.1904 11.827 3.2227 4.1895 8.9268 4.1895 6.252 0 8.8945-2.8359v-9.1846h-9.668v-6.1875h17.789z' fill='%235e5e5e' stroke-width='0' style='paint-order:markers fill stroke' aria-label='G'/%3e%3c/svg%3e";
23203
+ var img$7 = "data:image/svg+xml,%3c%3fxml version='1.0' encoding='UTF-8'%3f%3e%3csvg width='100' height='100' version='1.1' viewBox='0 0 100 100' xmlns='http://www.w3.org/2000/svg'%3e %3cg%3e %3cpath d='m66 2-3.8555 9.6367a20 20 0 0 0-4.0879 2.3848l-10.305-1.4863-4 6.9297 6.418 8.1543a20 20 0 0 0-0.16992 2.3809 20 20 0 0 0 0.16992 2.3809l-6.418 8.1543 4 6.9297 10.305-1.4863a20 20 0 0 0 4.0879 2.3848l3.8555 9.6367h8l3.8555-9.6367a20 20 0 0 0 4.0879-2.3848l10.305 1.4863 4-6.9297-6.418-8.1543a20 20 0 0 0 0.16992-2.3809 20 20 0 0 0-0.15039-2.4043l6.3984-8.1309-4-6.9297-10.236 1.4766a20 20 0 0 0-4.1699-2.4062l-3.8418-9.6055h-8z'/%3e %3ccircle cx='70' cy='30' r='10' fill='white'/%3e %3cpath d='m26 42-3.8555 9.6367a20 20 0 0 0-4.0879 2.3848l-10.305-1.4863-4 6.9297 6.418 8.1543a20 20 0 0 0-0.16992 2.3809 20 20 0 0 0 0.16992 2.3809l-6.418 8.1543 4 6.9297 10.305-1.4863a20 20 0 0 0 4.0879 2.3848l3.8555 9.6367h8l3.8555-9.6367a20 20 0 0 0 4.0879-2.3848l10.305 1.4863 4-6.9297-6.418-8.1543a20 20 0 0 0 0.16992-2.3809 20 20 0 0 0-0.15039-2.4043l6.3984-8.1309-4-6.9297-10.236 1.4766a20 20 0 0 0-4.1699-2.4062l-3.8418-9.6055h-8z'/%3e %3ccircle cx='30' cy='70' r='10' fill='white'/%3e %3c/g%3e%3c/svg%3e";
22943
23204
 
22944
- var img$6 = "data:image/svg+xml,%3c%3fxml version='1.0' encoding='UTF-8'%3f%3e%3csvg width='100' height='100' version='1.1' viewBox='0 0 100 100' xmlns='http://www.w3.org/2000/svg'%3e %3cpath d='m49.589 66.422q-2.5459 3.3193-7.0576 5.0273-4.5117 1.708-10.248 1.708-5.8975 0-10.441-2.6748-4.5439-2.6748-7.0254-7.6377-2.4492-4.9951-2.5459-11.634v-3.6738q0-10.635 5.0918-16.597 5.0918-5.9941 14.212-5.9941 7.8311 0 12.439 3.8672 4.6084 3.8672 5.543 11.15h-7.9922q-1.3535-8.4756-9.8291-8.4756-5.4785 0-8.3467 3.9639-2.8359 3.9316-2.9326 11.569v3.6094q0 7.6055 3.1904 11.827 3.2227 4.1895 8.9268 4.1895 6.252 0 8.8945-2.8359v-9.1846h-9.668v-6.1875h17.789zm23.2-11.988h-9.0879v18.079h-8.1533v-46.922h16.5q8.1211 0 12.536 3.6416 4.415 3.6416 4.415 10.538 0 4.7051-2.2881 7.8955-2.2559 3.1582-6.3164 4.8662l10.538 19.562v0.41895h-8.7334zm-9.0879-6.542h8.3789q4.125 0 6.4453-2.0625 2.3203-2.0947 2.3203-5.7041 0-3.7705-2.1592-5.833-2.127-2.0625-6.3809-2.127h-8.6045z' fill='%235e5e5e' stroke-width='0' style='paint-order:markers fill stroke' aria-label='GR'/%3e%3c/svg%3e";
23205
+ var img$6 = "data:image/svg+xml,%3c%3fxml version='1.0' encoding='UTF-8'%3f%3e%3csvg width='100' height='100' version='1.1' viewBox='0 0 100 100' xmlns='http://www.w3.org/2000/svg'%3e %3cg stroke='black' stroke-linecap='round'%3e %3crect x='12' y='12' width='76' height='76' fill='none' stroke-width='5.0003'/%3e %3crect x='23' y='55' width='22' height='22' fill='%239c9c9c' stroke-width='5'/%3e %3crect x='55' y='55' width='22' height='22' fill='%239c9c9c' stroke-width='5'/%3e %3crect x='39' y='23' width='22' height='22' fill='%239c9c9c' stroke-width='5.0003'/%3e %3ccircle cx='12' cy='12' r='7' fill='white' stroke-width='5.0003'/%3e %3ccircle cx='88' cy='12' r='7' fill='white' stroke-width='5.0003'/%3e %3ccircle cx='12' cy='88' r='7' fill='white' stroke-width='5.0003'/%3e %3ccircle cx='88' cy='88' r='7' fill='white' stroke-width='5.0003'/%3e %3c/g%3e%3c/svg%3e";
22945
23206
 
22946
- var img$5 = "data:image/svg+xml,%3c%3fxml version='1.0' encoding='UTF-8'%3f%3e%3csvg width='100' height='100' version='1.1' viewBox='0 0 100 100' xmlns='http://www.w3.org/2000/svg'%3e %3cpath d='m27.153 65.412h21.302v6.5098h-29.455v-46.922h8.1533zm32.707-10.925v17.435h-8.1533v-46.922h17.95q7.8633 0 12.472 4.0928 4.6406 4.0928 4.6406 10.828 0 6.8965-4.5439 10.731-4.5117 3.835-12.665 3.835zm0-6.542h9.7969q4.3506 0 6.6387-2.0303 2.2881-2.0625 2.2881-5.9297 0-3.8027-2.3203-6.0586-2.3203-2.2881-6.3809-2.3525h-10.022z' fill='%235e5e5e' stroke-linecap='round' stroke-linejoin='round' stroke-width='5' style='paint-order:stroke markers fill' aria-label='LP'/%3e%3c/svg%3e";
23207
+ var img$5 = "data:image/svg+xml,%3c%3fxml version='1.0' encoding='UTF-8'%3f%3e%3csvg width='100' height='100' version='1.1' viewBox='0 0 100 100' xmlns='http://www.w3.org/2000/svg'%3e %3cg stroke='black' stroke-linecap='round' stroke-width='5'%3e %3cpath d='m29 71v-44h44v44z' fill='none'/%3e %3crect x='15' y='60' width='26' height='26' fill='%239c9c9c'/%3e %3crect x='15' y='15' width='26' height='26' fill='white'/%3e %3crect x='60' y='60' width='26' height='26' fill='white'/%3e %3crect x='60' y='15' width='26' height='26' fill='white'/%3e %3c/g%3e%3c/svg%3e";
22947
23208
 
22948
- var img$4 = "data:image/svg+xml,%3c%3fxml version='1.0' encoding='UTF-8'%3f%3e%3csvg width='100' height='100' version='1.1' viewBox='0 0 100 100' xmlns='http://www.w3.org/2000/svg'%3e %3cpath d='m49.786 56.646q-0.70898 7.5088-5.543 11.73-4.834 4.1895-12.858 4.1895-5.6074 0-9.8936-2.6426-4.2539-2.6748-6.5742-7.5732-2.3203-4.8984-2.417-11.376v-4.3828q0-6.6387 2.3525-11.698 2.3525-5.0596 6.7354-7.7988 4.415-2.7393 10.184-2.7393 7.7666 0 12.504 4.2217 4.7373 4.2217 5.5107 11.924h-8.1211q-0.58008-5.0596-2.9648-7.2832-2.3525-2.2559-6.9287-2.2559-5.3174 0-8.1855 3.8994-2.8359 3.8672-2.9004 11.376v4.1572q0 7.6055 2.707 11.602 2.7393 3.9961 7.9922 3.9961 4.8018 0 7.2188-2.1592 2.417-2.1592 3.0615-7.1865zm12.437-2.1592v17.435h-8.1533v-46.922h17.95q7.8633 0 12.472 4.0928 4.6406 4.0928 4.6406 10.828 0 6.8965-4.5439 10.731-4.5117 3.835-12.665 3.835zm0-6.542h9.7969q4.3506 0 6.6387-2.0303 2.2881-2.0625 2.2881-5.9297 0-3.8027-2.3203-6.0586-2.3203-2.2881-6.3809-2.3525h-10.022z' fill='%235e5e5e' stroke-linecap='round' stroke-linejoin='round' stroke-width='5' style='paint-order:stroke markers fill' aria-label='CP'/%3e%3c/svg%3e";
23209
+ var img$4 = "data:image/svg+xml,%3c%3fxml version='1.0' encoding='UTF-8'%3f%3e%3csvg width='100' height='100' version='1.1' viewBox='0 0 100 100' xmlns='http://www.w3.org/2000/svg'%3e %3cg stroke='black' stroke-linecap='round' stroke-width='5'%3e %3cpath d='m50 83a33 33 0 0 1-30.488-20.371 33 33 0 0 1 7.1535-35.963 33 33 0 0 1 35.963-7.1535 33 33 0 0 1 20.371 30.488' fill='none'/%3e %3crect x='68' y='38' width='24' height='24' fill='%239c9c9c'/%3e %3crect x='38' y='8' width='24' height='24' fill='white'/%3e %3crect x='8' y='38' width='24' height='24' fill='white'/%3e %3crect x='38' y='68' width='24' height='24' fill='white'/%3e %3ccircle cx='50' cy='50' r='4'/%3e %3c/g%3e%3c/svg%3e";
22949
23210
 
22950
23211
  const AssemblyModeCmds = (drawingId, rootId) => {
22951
23212
  const assemblyApi = classcad.ccAPI.assemblyBuilder;
@@ -22979,98 +23240,89 @@ const AssemblyModeCmds = (drawingId, rootId) => {
22979
23240
  const addLinearPattern = () => assemblyApi.create3DConstraint(drawingId, rootId, classcad.CCClasses.CCLinearPatternConstraint, 'Linear Pattern');
22980
23241
  const addCircularPattern = () => assemblyApi.create3DConstraint(drawingId, rootId, classcad.CCClasses.CCCircularPatternConstraint, 'Circular Pattern');
22981
23242
  const addGear = () => assemblyApi.create3DConstraint(drawingId, rootId, classcad.CCClasses.CCGearRelation, 'Gear');
22982
- return {
22983
- FastenedOrigin: {
22984
- label: 'Add Fastened Origin',
22985
- icon: /*#__PURE__*/React.createElement(Icon, {
22986
- url: img$e
22987
- }),
22988
- callback: wrapper(addFastenedOrigin)
22989
- },
22990
- Fastened: {
22991
- label: 'Add Fastened',
22992
- icon: /*#__PURE__*/React.createElement(Icon, {
22993
- url: img$d
22994
- }),
22995
- callback: wrapper(addFastened)
22996
- },
22997
- Slider: {
22998
- label: 'Add Slider',
22999
- icon: /*#__PURE__*/React.createElement(Icon, {
23000
- url: img$c
23001
- }),
23002
- callback: wrapper(addSlider)
23003
- },
23004
- Revolute: {
23005
- label: 'Add Revolute',
23006
- icon: /*#__PURE__*/React.createElement(Icon, {
23007
- url: img$D
23008
- }),
23009
- callback: wrapper(addRevolute)
23010
- },
23011
- Cylindrical: {
23012
- label: 'Add Cylindrical',
23013
- icon: /*#__PURE__*/React.createElement(Icon, {
23014
- url: img$b
23015
- }),
23016
- callback: wrapper(addCylindrical)
23017
- },
23018
- Planar: {
23019
- label: 'Add Planar',
23020
- icon: /*#__PURE__*/React.createElement(Icon, {
23021
- url: img$a
23022
- }),
23023
- callback: wrapper(addPlanar)
23024
- },
23025
- Parallel: {
23026
- label: 'Add Parallel',
23027
- icon: /*#__PURE__*/React.createElement(Icon, {
23028
- url: img$9
23029
- }),
23030
- callback: wrapper(addParallel)
23031
- },
23032
- Spherical: {
23033
- label: 'Add Spherical',
23034
- icon: /*#__PURE__*/React.createElement(Icon, {
23035
- url: img$8
23036
- }),
23037
- callback: wrapper(addSpherical)
23038
- },
23039
- Group: {
23040
- label: 'Add Group',
23041
- icon: /*#__PURE__*/React.createElement(Icon, {
23042
- url: img$6
23043
- }),
23044
- callback: wrapper(addGroup)
23045
- },
23046
- LinearPattern: {
23047
- label: 'Add Linear Pattern',
23048
- icon: /*#__PURE__*/React.createElement(Icon, {
23049
- url: img$5
23050
- }),
23051
- callback: wrapper(addLinearPattern)
23052
- },
23053
- CircularPattern: {
23054
- label: 'Add Circular Pattern',
23055
- icon: /*#__PURE__*/React.createElement(Icon, {
23056
- url: img$4
23057
- }),
23058
- callback: wrapper(addCircularPattern)
23059
- },
23060
- Gear: {
23061
- label: 'Add Gear',
23062
- icon: /*#__PURE__*/React.createElement(Icon, {
23063
- url: img$7
23064
- }),
23065
- callback: wrapper(addGear)
23066
- }
23067
- };
23243
+ return [{
23244
+ label: 'Add Fastened Origin',
23245
+ icon: /*#__PURE__*/React.createElement(Icon, {
23246
+ url: img$e
23247
+ }),
23248
+ callback: wrapper(addFastenedOrigin)
23249
+ }, {
23250
+ label: 'Add Fastened',
23251
+ icon: /*#__PURE__*/React.createElement(Icon, {
23252
+ url: img$d
23253
+ }),
23254
+ callback: wrapper(addFastened)
23255
+ }, {
23256
+ label: 'Add Slider',
23257
+ icon: /*#__PURE__*/React.createElement(Icon, {
23258
+ url: img$c
23259
+ }),
23260
+ callback: wrapper(addSlider)
23261
+ }, {
23262
+ label: 'Add Revolute',
23263
+ icon: /*#__PURE__*/React.createElement(Icon, {
23264
+ url: img$D
23265
+ }),
23266
+ callback: wrapper(addRevolute)
23267
+ }, {
23268
+ label: 'Add Cylindrical',
23269
+ icon: /*#__PURE__*/React.createElement(Icon, {
23270
+ url: img$b
23271
+ }),
23272
+ callback: wrapper(addCylindrical)
23273
+ }, {
23274
+ label: 'Add Planar',
23275
+ icon: /*#__PURE__*/React.createElement(Icon, {
23276
+ url: img$a
23277
+ }),
23278
+ callback: wrapper(addPlanar)
23279
+ }, {
23280
+ label: 'Add Parallel',
23281
+ icon: /*#__PURE__*/React.createElement(Icon, {
23282
+ url: img$9
23283
+ }),
23284
+ callback: wrapper(addParallel)
23285
+ }, {
23286
+ label: 'Add Spherical',
23287
+ icon: /*#__PURE__*/React.createElement(Icon, {
23288
+ url: img$8
23289
+ }),
23290
+ callback: wrapper(addSpherical)
23291
+ }, {
23292
+ type: 'divider'
23293
+ }, {
23294
+ label: 'Add Group',
23295
+ icon: /*#__PURE__*/React.createElement(Icon, {
23296
+ url: img$6
23297
+ }),
23298
+ callback: wrapper(addGroup)
23299
+ }, {
23300
+ label: 'Add Linear Pattern',
23301
+ icon: /*#__PURE__*/React.createElement(Icon, {
23302
+ url: img$5
23303
+ }),
23304
+ callback: wrapper(addLinearPattern)
23305
+ }, {
23306
+ label: 'Add Circular Pattern',
23307
+ icon: /*#__PURE__*/React.createElement(Icon, {
23308
+ url: img$4
23309
+ }),
23310
+ callback: wrapper(addCircularPattern)
23311
+ }, {
23312
+ type: 'divider'
23313
+ }, {
23314
+ label: 'Add Gear',
23315
+ icon: /*#__PURE__*/React.createElement(Icon, {
23316
+ url: img$7
23317
+ }),
23318
+ callback: wrapper(addGear)
23319
+ }];
23068
23320
  };
23069
23321
 
23070
23322
  function useCommands(drawingId, curProductClass) {
23071
23323
  const curProdId = react.useDrawing(drawingId, d => d.structure.currentProduct);
23072
23324
  const commands = React.useMemo(() => {
23073
- let res = {};
23325
+ let res = [];
23074
23326
  if (curProductClass && classcad.ccUtils.base.isA(curProductClass, classcad.CCClasses.CCPart)) {
23075
23327
  res = PartModeCmds(drawingId, curProdId);
23076
23328
  } else if (curProductClass && classcad.ccUtils.base.isA(curProductClass, classcad.CCClasses.CCAssembly)) {
@@ -23146,41 +23398,39 @@ const SubGroup = ({
23146
23398
  const Item = ({
23147
23399
  cmd: cmd
23148
23400
  }) => {
23149
- return Array.isArray(cmd) ? /*#__PURE__*/React.createElement(SubGroup, {
23150
- commands: cmd
23151
- }) : /*#__PURE__*/React.createElement(FButton, {
23401
+ if (Array.isArray(cmd)) {
23402
+ return /*#__PURE__*/React.createElement(SubGroup, {
23403
+ commands: cmd
23404
+ });
23405
+ }
23406
+ if (cmd.type === 'divider') {
23407
+ return /*#__PURE__*/React.createElement(Divider, {
23408
+ style: {
23409
+ height: '18px',
23410
+ marginBottom: '1px',
23411
+ borderColor: 'rgba(32,32,32,0.5)'
23412
+ },
23413
+ type: "vertical"
23414
+ });
23415
+ }
23416
+ return /*#__PURE__*/React.createElement(FButton, {
23152
23417
  command: cmd
23153
23418
  });
23154
23419
  };
23155
- const skeletonItems = Array(10).fill(0);
23420
+ const skeletonItems = Array(12).fill(0);
23156
23421
  const ToolBar = ({
23157
23422
  drawingId
23158
23423
  }) => {
23159
23424
  const curProductClass = react.useDrawing(drawingId, d => {
23160
23425
  var _d$structure$tree;
23161
23426
  return (_d$structure$tree = d.structure.tree[d.structure.currentProduct]) == null ? void 0 : _d$structure$tree.class;
23162
- }) || '';
23427
+ });
23163
23428
  const isDefined = curProductClass !== undefined;
23164
- const isPart = classcad.ccUtils.base.isA(curProductClass, classcad.CCClasses.CCPart);
23165
23429
  const commands = useCommands(drawingId, curProductClass);
23166
- const enableExpressions = React.useCallback(() => {
23167
- const gPlugins = core.getDrawing(drawingId).plugin.refs;
23168
- const exprPlugin = Object.values(gPlugins).find(p => p.name === 'Expressions');
23169
- const pApi = core.getDrawing(drawingId).api.plugin;
23170
- exprPlugin && pApi.setActiveGlobal(exprPlugin.id, true);
23171
- }, [drawingId]);
23172
- return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(antd.Space, null, isDefined && Object.keys(commands).map(key => /*#__PURE__*/React.createElement(Item, {
23173
- key: key,
23174
- cmd: commands[key]
23175
- })), isPart && /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(Divider, {
23176
- type: "vertical"
23177
- }), /*#__PURE__*/React.createElement(antd.Tooltip, {
23178
- title: "Expressions"
23179
- }, /*#__PURE__*/React.createElement(antd.Button, {
23180
- size: "small",
23181
- icon: /*#__PURE__*/React.createElement(icons.FontSizeOutlined, null),
23182
- onClick: () => enableExpressions()
23183
- }))), !isDefined && skeletonItems.map((a, i) => /*#__PURE__*/React.createElement(antd.Skeleton.Avatar, {
23430
+ return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(antd.Space, null, isDefined && commands.map((command, i) => /*#__PURE__*/React.createElement(Item, {
23431
+ key: i,
23432
+ cmd: command
23433
+ })), !isDefined && skeletonItems.map((a, i) => /*#__PURE__*/React.createElement(antd.Skeleton.Avatar, {
23184
23434
  key: i,
23185
23435
  size: "small",
23186
23436
  shape: "square",
@@ -26206,13 +26456,19 @@ const addProduct = (drawingId, prodId) => {
26206
26456
  }]).catch(console.warn);
26207
26457
  };
26208
26458
  const deleteProduct = (drawingId, pluginId, prodId) => {
26209
- const selected = core.getPlugin(drawingId, pluginId).state.selected;
26210
- const ids = selected.indexOf(prodId) === -1 ? [...selected, prodId] : selected;
26459
+ const drawing = core.getDrawing(drawingId);
26460
+ const tree = drawing.structure.tree;
26461
+ const selectedInfo = drawing.interaction.selected || [];
26462
+ const selectedProducts = selectedInfo.map(info => info.objectId).filter(id => {
26463
+ var _tree$id;
26464
+ return classcad.ccUtils.base.isA((_tree$id = tree[id]) == null ? void 0 : _tree$id.class, classcad.CCClasses.CCProduct);
26465
+ });
26466
+ const ids = selectedProducts.indexOf(prodId) === -1 ? [...selectedProducts, prodId] : selectedProducts;
26211
26467
  const idsSorted = ids.sort((a, b) => b - a);
26212
26468
  classcad.ccAPI.baseModeler.deleteObjects(drawingId, idsSorted).catch(console.warn);
26469
+ drawing.api.interaction.setSelected([]);
26213
26470
  core.getPlugin(drawingId, pluginId).set({
26214
- product: null,
26215
- selected: []
26471
+ product: null
26216
26472
  });
26217
26473
  };
26218
26474
  function useContextMenuItems(drawingId, pluginId, prodId, setEditName) {
@@ -26288,16 +26544,18 @@ const Prod = ({
26288
26544
  return (_d$structure$tree$pro = d.structure.tree[prodId]) == null ? void 0 : _d$structure$tree$pro.name;
26289
26545
  });
26290
26546
  const isCurrent = react.useDrawing(drawingId, d => d.structure.currentProduct === prodId);
26291
- const selected = react.usePlugin(drawingId, pluginId, p => p.state.selected);
26292
- const isSelected = (selected == null ? void 0 : selected.indexOf(prodId)) !== -1;
26547
+ const {
26548
+ isGSelected,
26549
+ handlers
26550
+ } = useTreeObjInteraction(drawingId, prodId);
26551
+ const onTreeObjClick = handlers.onClick;
26293
26552
  const onClick = React.useCallback(e => {
26553
+ onTreeObjClick(e);
26294
26554
  const set = core.getPlugin(drawingId, pluginId).set;
26295
- const multi = e.shiftKey;
26296
- set(state => ({
26297
- product: prodId,
26298
- selected: state.selected.indexOf(prodId) !== -1 ? state.selected.filter(id => id !== prodId) : multi ? [...state.selected, prodId] : [prodId]
26299
- }));
26300
- }, [drawingId, pluginId, prodId]);
26555
+ set({
26556
+ product: prodId
26557
+ });
26558
+ }, [drawingId, pluginId, prodId, onTreeObjClick]);
26301
26559
  const [rename, setRename] = React.useState(false);
26302
26560
  const menuItems = useContextMenuItems(drawingId, pluginId, prodId, setRename);
26303
26561
  const menuHeaderName = type === 'part' ? 'Part product' : 'Assembly product';
@@ -26337,7 +26595,7 @@ const Prod = ({
26337
26595
  height: '32px',
26338
26596
  minWidth: '0px'
26339
26597
  },
26340
- hovered: isSelected || isContextMenuActive,
26598
+ hovered: isGSelected || isContextMenuActive,
26341
26599
  onClick: onClick,
26342
26600
  onContextMenu: onContextMenu
26343
26601
  }, /*#__PURE__*/React.createElement("div", {
@@ -26425,16 +26683,14 @@ const ProdList = ({
26425
26683
  return () => {
26426
26684
  const plugin = core.getPlugin(drawingId, pluginId);
26427
26685
  plugin && plugin.set({
26428
- product: null,
26429
- selected: []
26686
+ product: null
26430
26687
  });
26431
26688
  };
26432
26689
  }, [drawingId, pluginId]);
26433
26690
  const keyHandler = React.useCallback(e => {
26434
26691
  if (e.key === 'Escape') {
26435
26692
  set({
26436
- product: null,
26437
- selected: []
26693
+ product: null
26438
26694
  });
26439
26695
  }
26440
26696
  }, [set]);
@@ -26442,6 +26698,11 @@ const ProdList = ({
26442
26698
  window.addEventListener('keydown', keyHandler);
26443
26699
  return () => window.removeEventListener('keydown', keyHandler);
26444
26700
  }, [keyHandler]);
26701
+ const createInfo_ = React.useCallback(objId => {
26702
+ return core.createInfo({
26703
+ objectId: objId
26704
+ });
26705
+ }, []);
26445
26706
  return /*#__PURE__*/React.createElement("div", {
26446
26707
  style: {
26447
26708
  minHeight: '145px',
@@ -26449,13 +26710,17 @@ const ProdList = ({
26449
26710
  paddingLeft: '8px',
26450
26711
  paddingRight: '8px'
26451
26712
  }
26713
+ }, /*#__PURE__*/React.createElement(MultiSelect, {
26714
+ drawingId: drawingId,
26715
+ items: prodIds,
26716
+ createInfo: createInfo_
26452
26717
  }, prodIds.map(prodId => /*#__PURE__*/React.createElement(Prod, {
26453
26718
  key: prodId,
26454
26719
  drawingId: drawingId,
26455
26720
  pluginId: pluginId,
26456
26721
  prodId: prodId,
26457
26722
  type: type
26458
- })), createMode && /*#__PURE__*/React.createElement(NewProd, {
26723
+ }))), createMode && /*#__PURE__*/React.createElement(NewProd, {
26459
26724
  drawingId: drawingId,
26460
26725
  setCreateMode: setCreateMode,
26461
26726
  type: type