kitchen-simulator 11.27.0 → 11.28.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (93) hide show
  1. package/es/actions/items-actions.js +20 -2
  2. package/es/assets/img/svg/3d_item_move.svg +9 -105
  3. package/es/assets/img/svg/3d_item_rotation.svg +3 -75
  4. package/es/assets/img/svg/accessories.svg +4 -4
  5. package/es/assets/img/svg/bottombar/elevation-back.svg +6 -6
  6. package/es/assets/img/svg/bottombar/elevation-front.svg +6 -6
  7. package/es/assets/img/svg/bottombar/elevation-left.svg +6 -6
  8. package/es/assets/img/svg/bottombar/elevation-right.svg +7 -7
  9. package/es/assets/img/svg/bottombar/elevation.svg +13 -13
  10. package/es/assets/img/svg/delete.svg +6 -2
  11. package/es/assets/img/svg/detail.svg +77 -77
  12. package/es/assets/img/svg/duplicate.svg +6 -6
  13. package/es/assets/img/svg/filtersActive.svg +19 -19
  14. package/es/assets/img/svg/invert.svg +12 -127
  15. package/es/assets/img/svg/menubar/login.svg +84 -84
  16. package/es/assets/img/svg/menubar/my_projects.svg +85 -85
  17. package/es/assets/img/svg/menubar/new_project.svg +110 -110
  18. package/es/assets/img/svg/menubar/save_project.svg +84 -84
  19. package/es/assets/img/svg/options.svg +3 -3
  20. package/es/assets/img/svg/positioning.svg +3 -3
  21. package/es/assets/img/svg/toggleFilters.svg +19 -19
  22. package/es/assets/img/svg/toolbar/shopping-cart.svg +13 -13
  23. package/es/assets/img/svg/wizardstep/detail_view.svg +87 -87
  24. package/es/assets/img/svg/wizardstep/tile_view.svg +95 -95
  25. package/es/catalog/utils/exporter.js +4 -0
  26. package/es/catalog/utils/item-loader.js +18 -8
  27. package/es/class/item.js +80 -2
  28. package/es/components/viewer2d/item.js +139 -125
  29. package/es/components/viewer2d/viewer2d.js +7 -4
  30. package/es/components/viewer3d/camera-controls-module/camera-controls.module.js +556 -556
  31. package/es/components/viewer3d/scene-creator.js +18 -0
  32. package/es/components/viewer3d/viewer3d.js +137 -49
  33. package/es/constants.js +7 -1
  34. package/es/events/external/handleExternalEvent.js +36 -33
  35. package/es/events/external/handleExternalEvent.util.js +4 -2
  36. package/es/events/external/handlers.changeDoorStyle.js +28 -7
  37. package/es/events/external/handlers.elementOps.js +8 -0
  38. package/es/mappings/external-events/mapExternalEventPayload.js +4 -4
  39. package/es/mappings/external-events/mappers/addItemMapper.js +9 -9
  40. package/es/mappings/external-events/mappers/ccdfMapper.js +1 -1
  41. package/es/models.js +4 -0
  42. package/es/reducers/items-reducer.js +10 -1
  43. package/es/shared/domain/asset/sanitize-asset-url.js +5 -5
  44. package/es/shared/domain/cabinet-mirror.js +7 -0
  45. package/es/utils/geometry.js +5 -3
  46. package/es/utils/skinPanelEngine.js +14 -14
  47. package/lib/actions/items-actions.js +20 -0
  48. package/lib/assets/img/svg/3d_item_move.svg +9 -105
  49. package/lib/assets/img/svg/3d_item_rotation.svg +3 -75
  50. package/lib/assets/img/svg/accessories.svg +4 -4
  51. package/lib/assets/img/svg/bottombar/elevation-back.svg +6 -6
  52. package/lib/assets/img/svg/bottombar/elevation-front.svg +6 -6
  53. package/lib/assets/img/svg/bottombar/elevation-left.svg +6 -6
  54. package/lib/assets/img/svg/bottombar/elevation-right.svg +7 -7
  55. package/lib/assets/img/svg/bottombar/elevation.svg +13 -13
  56. package/lib/assets/img/svg/delete.svg +6 -2
  57. package/lib/assets/img/svg/detail.svg +77 -77
  58. package/lib/assets/img/svg/duplicate.svg +6 -6
  59. package/lib/assets/img/svg/filtersActive.svg +19 -19
  60. package/lib/assets/img/svg/invert.svg +12 -127
  61. package/lib/assets/img/svg/menubar/login.svg +84 -84
  62. package/lib/assets/img/svg/menubar/my_projects.svg +85 -85
  63. package/lib/assets/img/svg/menubar/new_project.svg +110 -110
  64. package/lib/assets/img/svg/menubar/save_project.svg +84 -84
  65. package/lib/assets/img/svg/options.svg +3 -3
  66. package/lib/assets/img/svg/positioning.svg +3 -3
  67. package/lib/assets/img/svg/toggleFilters.svg +19 -19
  68. package/lib/assets/img/svg/toolbar/shopping-cart.svg +13 -13
  69. package/lib/assets/img/svg/wizardstep/detail_view.svg +87 -87
  70. package/lib/assets/img/svg/wizardstep/tile_view.svg +95 -95
  71. package/lib/catalog/utils/exporter.js +4 -0
  72. package/lib/catalog/utils/item-loader.js +18 -8
  73. package/lib/class/item.js +79 -1
  74. package/lib/components/viewer2d/item.js +138 -124
  75. package/lib/components/viewer2d/viewer2d.js +7 -4
  76. package/lib/components/viewer3d/camera-controls-module/camera-controls.module.js +556 -556
  77. package/lib/components/viewer3d/scene-creator.js +18 -0
  78. package/lib/components/viewer3d/viewer3d.js +137 -49
  79. package/lib/constants.js +11 -5
  80. package/lib/events/external/handleExternalEvent.js +34 -31
  81. package/lib/events/external/handleExternalEvent.util.js +4 -2
  82. package/lib/events/external/handlers.changeDoorStyle.js +28 -7
  83. package/lib/events/external/handlers.elementOps.js +9 -0
  84. package/lib/mappings/external-events/mapExternalEventPayload.js +4 -4
  85. package/lib/mappings/external-events/mappers/addItemMapper.js +9 -9
  86. package/lib/mappings/external-events/mappers/ccdfMapper.js +1 -1
  87. package/lib/models.js +4 -0
  88. package/lib/reducers/items-reducer.js +9 -0
  89. package/lib/shared/domain/asset/sanitize-asset-url.js +5 -5
  90. package/lib/shared/domain/cabinet-mirror.js +13 -0
  91. package/lib/utils/geometry.js +5 -3
  92. package/lib/utils/skinPanelEngine.js +14 -14
  93. package/package.json +1 -1
@@ -1,11 +1,28 @@
1
1
  import _asyncToGenerator from "@babel/runtime/helpers/esm/asyncToGenerator";
2
2
  import _regeneratorRuntime from "@babel/runtime/regenerator";
3
+ function prepareMoldingCCDFList(doorStyle, moldingData) {
4
+ var moldingCCDFs = [];
5
+ for (var i = 0; i < moldingData.length; i++) {
6
+ var _molding$ccdf$catalog, _molding$ccdf, _molding$ccdf$cabinet, _molding$ccdf2, _doorStyle$id, _molding$long_name;
7
+ var molding = moldingData[i];
8
+ moldingCCDFs.push({
9
+ sizeinfo: molding.sizeinfo,
10
+ catalog_cabinet_sku: (_molding$ccdf$catalog = molding === null || molding === void 0 || (_molding$ccdf = molding.ccdf) === null || _molding$ccdf === void 0 ? void 0 : _molding$ccdf.catalog_cabinet_sku) !== null && _molding$ccdf$catalog !== void 0 ? _molding$ccdf$catalog : molding.sku_number,
11
+ cabinet_id: (_molding$ccdf$cabinet = molding === null || molding === void 0 || (_molding$ccdf2 = molding.ccdf) === null || _molding$ccdf2 === void 0 ? void 0 : _molding$ccdf2.cabinet_id) !== null && _molding$ccdf$cabinet !== void 0 ? _molding$ccdf$cabinet : molding.itemID,
12
+ ccdf: molding.ccdf,
13
+ target_door_finish_id: (_doorStyle$id = doorStyle === null || doorStyle === void 0 ? void 0 : doorStyle.id) !== null && _doorStyle$id !== void 0 ? _doorStyle$id : null,
14
+ long_name: (_molding$long_name = molding === null || molding === void 0 ? void 0 : molding.long_name) !== null && _molding$long_name !== void 0 ? _molding$long_name : null,
15
+ id: molding.itemID
16
+ });
17
+ }
18
+ return moldingCCDFs;
19
+ }
3
20
  export function handleChangeDoorStyleEvent(_x, _x2, _x3, _x4, _x5, _x6, _x7, _x8, _x9, _x0, _x1, _x10) {
4
21
  return _handleChangeDoorStyleEvent.apply(this, arguments);
5
22
  }
6
23
  function _handleChangeDoorStyleEvent() {
7
24
  _handleChangeDoorStyleEvent = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee2(props, state, layer, payload, DOORSTYLE_SCOPE_SINGLE, DOORSTYLE_SCOPE_MULTIPLE, DOORSTYLE_SCOPE_ALL, INTERNAL_EVENT_ITEMS_CATALOG, mapFromCCDFToCDS, ccdfMapper, mergeSameElements, addItemToCatalog) {
8
- var doorStyle, applyScope, _payload$itemIds, itemIds, itemCDS, layerId, allItems, targetItems, idSet, selectedItemIds, ccdf_list, _loop, i, _props$onInternalEven, _t;
25
+ var doorStyle, applyScope, _payload$itemIds, itemIds, itemCDS, layerId, allItems, moldingData, targetItems, idSet, selectedItemIds, ccdf_list, _loop, i, moldingCCDFList, _props$onInternalEven, _t;
9
26
  return _regeneratorRuntime.wrap(function (_context3) {
10
27
  while (1) switch (_context3.prev = _context3.next) {
11
28
  case 0:
@@ -13,6 +30,7 @@ function _handleChangeDoorStyleEvent() {
13
30
  itemCDS = [];
14
31
  layerId = state.getIn(['scene', 'selectedLayer']);
15
32
  allItems = state.getIn(['scene', 'layers', layerId, 'items']).toJS();
33
+ moldingData = state.getIn(['scene', 'layers', layerId, 'molding']);
16
34
  targetItems = []; // Prepare idSet for SINGLE or MULTIPLE
17
35
  idSet = null;
18
36
  if (applyScope === DOORSTYLE_SCOPE_SINGLE) {
@@ -40,7 +58,7 @@ function _handleChangeDoorStyleEvent() {
40
58
  case 4:
41
59
  ccdf_list = [];
42
60
  _loop = /*#__PURE__*/_regeneratorRuntime.mark(function _loop() {
43
- var item, _item$ccdf$catalog_ca, _item$ccdf, _item$ccdf$cabinet_id, _item$ccdf2, _doorStyle$id2, _item$long_name;
61
+ var item, _item$ccdf$catalog_ca, _item$ccdf, _item$ccdf$cabinet_id, _item$ccdf2, _doorStyle$id3, _item$long_name;
44
62
  return _regeneratorRuntime.wrap(function (_context2) {
45
63
  while (1) switch (_context2.prev = _context2.next) {
46
64
  case 0:
@@ -54,7 +72,7 @@ function _handleChangeDoorStyleEvent() {
54
72
  catalog_cabinet_sku: (_item$ccdf$catalog_ca = item === null || item === void 0 || (_item$ccdf = item.ccdf) === null || _item$ccdf === void 0 ? void 0 : _item$ccdf.catalog_cabinet_sku) !== null && _item$ccdf$catalog_ca !== void 0 ? _item$ccdf$catalog_ca : item.sku_number,
55
73
  cabinet_id: (_item$ccdf$cabinet_id = item === null || item === void 0 || (_item$ccdf2 = item.ccdf) === null || _item$ccdf2 === void 0 ? void 0 : _item$ccdf2.cabinet_id) !== null && _item$ccdf$cabinet_id !== void 0 ? _item$ccdf$cabinet_id : null,
56
74
  ccdf: item.ccdf,
57
- target_door_finish_id: (_doorStyle$id2 = doorStyle === null || doorStyle === void 0 ? void 0 : doorStyle.id) !== null && _doorStyle$id2 !== void 0 ? _doorStyle$id2 : null,
75
+ target_door_finish_id: (_doorStyle$id3 = doorStyle === null || doorStyle === void 0 ? void 0 : doorStyle.id) !== null && _doorStyle$id3 !== void 0 ? _doorStyle$id3 : null,
58
76
  long_name: (_item$long_name = item === null || item === void 0 ? void 0 : item.long_name) !== null && _item$long_name !== void 0 ? _item$long_name : null,
59
77
  scene_cabinet_id: item.id
60
78
  });
@@ -77,19 +95,21 @@ function _handleChangeDoorStyleEvent() {
77
95
  _context3.next = 5;
78
96
  break;
79
97
  case 7:
98
+ moldingCCDFList = prepareMoldingCCDFList(doorStyle, moldingData);
80
99
  if (ccdf_list.length > 0) {
81
100
  (_props$onInternalEven = props.onInternalEvent) === null || _props$onInternalEven === void 0 || _props$onInternalEven.call(props, {
82
101
  type: INTERNAL_EVENT_ITEMS_CATALOG,
83
102
  value: {
84
103
  event_type: 'change_door_style',
85
- ccdf_list: ccdf_list
104
+ ccdf_list: ccdf_list,
105
+ molding_ccdf_list: moldingCCDFList
86
106
  }
87
107
  },
88
108
  /*#__PURE__*/
89
109
  // result is ccdf_list
90
110
  function () {
91
111
  var _ref = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee(result) {
92
- var _result$ccdf_list, _doorStyle$id;
112
+ var _result$ccdf_list, _doorStyle$id2, _result$molding_ccdf_;
93
113
  var mappedCabinetDefinitionList, rt, _i;
94
114
  return _regeneratorRuntime.wrap(function (_context) {
95
115
  while (1) switch (_context.prev = _context.next) {
@@ -97,7 +117,7 @@ function _handleChangeDoorStyleEvent() {
97
117
  // Map CCDF rows back to placed items using stable identity (long_name),
98
118
  // because host `cabinet_id` can vary by doorstyle.
99
119
  itemCDS = mapFromCCDFToCDS(result === null || result === void 0 ? void 0 : result.ccdf_list, targetItems);
100
- mappedCabinetDefinitionList = ccdfMapper(result.ccdf_list, layer); // result: ccdf_list
120
+ mappedCabinetDefinitionList = ccdfMapper(result === null || result === void 0 ? void 0 : result.ccdf_list, layer); // result: ccdf_list
101
121
  rt = mergeSameElements(mappedCabinetDefinitionList);
102
122
  _i = 0;
103
123
  case 1:
@@ -115,7 +135,8 @@ function _handleChangeDoorStyleEvent() {
115
135
  // Persist ccdf on affected instances so SYNC includes the latest ccdf.id for each item.
116
136
  // IMPORTANT: host response `ccdf_list[]` may not include `door_finish_id`.
117
137
  // Use request door_finish_id (doorStyle.id) as the source of truth for door_finish_id.
118
- props.itemsActions.setItemsCCDF((_result$ccdf_list = result === null || result === void 0 ? void 0 : result.ccdf_list) !== null && _result$ccdf_list !== void 0 ? _result$ccdf_list : [], applyScope, itemIds, (_doorStyle$id = doorStyle === null || doorStyle === void 0 ? void 0 : doorStyle.id) !== null && _doorStyle$id !== void 0 ? _doorStyle$id : null);
138
+ props.itemsActions.setItemsCCDF((_result$ccdf_list = result === null || result === void 0 ? void 0 : result.ccdf_list) !== null && _result$ccdf_list !== void 0 ? _result$ccdf_list : [], applyScope, itemIds, (_doorStyle$id2 = doorStyle === null || doorStyle === void 0 ? void 0 : doorStyle.id) !== null && _doorStyle$id2 !== void 0 ? _doorStyle$id2 : null);
139
+ props.itemsActions.setMoldingsCCDF((_result$molding_ccdf_ = result === null || result === void 0 ? void 0 : result.molding_ccdf_list) !== null && _result$molding_ccdf_ !== void 0 ? _result$molding_ccdf_ : [], applyScope);
119
140
  props.itemsActions.setDoorStyle(doorStyle, itemCDS, applyScope, itemIds);
120
141
  case 4:
121
142
  case "end":
@@ -1,3 +1,4 @@
1
+ import { canMirrorCabinet } from "../../shared/domain/cabinet-mirror";
1
2
  export function handleDuplicateElement(props, getElement, payload, state) {
2
3
  var distElement = getElement(payload, state);
3
4
  if (distElement) props.itemsActions.duplicateSelected(distElement, props.onInternalEvent);
@@ -5,4 +6,11 @@ export function handleDuplicateElement(props, getElement, payload, state) {
5
6
  export function handleDeleteElement(props, getElement, payload, state) {
6
7
  var distElement = getElement(payload, state);
7
8
  if (distElement) props.projectActions.remove(distElement);
9
+ }
10
+ export function handleMirrorElement(props, getElement, payload, state) {
11
+ var distElement = getElement(payload, state);
12
+ if (!distElement || distElement.prototype !== 'items' || !canMirrorCabinet(distElement)) return;
13
+ var layerID = state.getIn(['scene', 'selectedLayer']);
14
+ var mirrored = typeof (payload === null || payload === void 0 ? void 0 : payload.mirrored) === 'boolean' ? payload.mirrored : null;
15
+ props.itemsActions.toggleItemMirror(layerID, distElement.id, mirrored, props.onInternalEvent);
8
16
  }
@@ -4,10 +4,10 @@ import { mapAddItemEvent } from "./mappers/addItemMapper";
4
4
  import { mapChangeDoorStyleEvent } from "./mappers/changeDoorStyleMapper";
5
5
  import { mapLoadProjectEvent } from "./mappers/loadProjectMapper";
6
6
 
7
- /**
8
- * Main dispatcher for external event payload mapping.
9
- * Converts new API formats into legacy internal formats (e.g. assets3d -> structure_json)
10
- * without changing the behavior of the existing 3D tool.
7
+ /**
8
+ * Main dispatcher for external event payload mapping.
9
+ * Converts new API formats into legacy internal formats (e.g. assets3d -> structure_json)
10
+ * without changing the behavior of the existing 3D tool.
11
11
  */
12
12
  export function mapExternalEventPayload(evt, state, defaultTextures) {
13
13
  if (isEmpty(evt)) return null;
@@ -5,15 +5,15 @@ function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t =
5
5
  import { ITEM_TYPE } from "../../../constants";
6
6
  import { isEmpty } from "../../../utils/helper";
7
7
 
8
- /**
9
- * Mapping logic for EXTERNAL_EVENT_ADD_ITEM.
10
- *
11
- * Converts the new assets3d payload shape into the legacy structure_json format
12
- * expected by the existing 3D tool.
13
- *
14
- * @param {Object} evt.payload External event payload
15
- * @param {Immutable.Map} state Planner state
16
- * @returns {Object|null} Updated event (or null when payload is empty)
8
+ /**
9
+ * Mapping logic for EXTERNAL_EVENT_ADD_ITEM.
10
+ *
11
+ * Converts the new assets3d payload shape into the legacy structure_json format
12
+ * expected by the existing 3D tool.
13
+ *
14
+ * @param {Object} evt.payload External event payload
15
+ * @param {Immutable.Map} state Planner state
16
+ * @returns {Object|null} Updated event (or null when payload is empty)
17
17
  */
18
18
  export function mapAddItemEvent(orgEvtPayload, state) {
19
19
  var _evtPayload, _evtPayload3;
@@ -70,7 +70,7 @@ export function ccdfMapper(ccdf_list, layer) {
70
70
  });
71
71
  }
72
72
  // make structure_json
73
- if (cd.category === 'cabinet' || cd.category === 'Base' /* TEMP fix: DIY-973, 'Base' should have not been set in 'category' */) structure_json = {
73
+ if (cd.category === 'cabinet' || cd.category === 'Base') structure_json = {
74
74
  tempPlaceholders: tempPlaceholders
75
75
  };else structure_json = structure;
76
76
  // make cabinet definition using structure_json and catalog
package/es/models.js CHANGED
@@ -208,6 +208,8 @@ export var Item = /*#__PURE__*/function (_Record7) {
208
208
  uri: ''
209
209
  },
210
210
  molding: [],
211
+ can_be_mirrored: false,
212
+ mirrored: false,
211
213
  isInitialPos: false,
212
214
  //current {x,y} is the initial position from host?
213
215
  backsplashVisible: false,
@@ -356,6 +358,8 @@ export var CatalogElement = /*#__PURE__*/function (_Record1) {
356
358
  type: '',
357
359
  cds: new Map(),
358
360
  ccdf_list: new List(),
361
+ can_be_mirrored: false,
362
+ mirrored: false,
359
363
  structure_json: {},
360
364
  gltf: ''
361
365
  }, 'CatalogElement'));
@@ -1,6 +1,7 @@
1
1
  import { Item, Area } from "../class/export";
2
2
  import { history } from "../utils/export";
3
- import { TOGGLE_LOADING_CABINET, SELECT_TOOL_DRAWING_ITEM, UPDATE_DRAWING_ITEM, END_DRAWING_ITEM, BEGIN_DRAGGING_ITEM, BEGIN_DRAGGING_ITEM_3D, UPDATE_DRAGGING_ITEM, UPDATE_DRAGGING_ITEM_CHANGED, UPDATE_DRAGGING_ITEM_3DX, UPDATE_DRAGGING_ITEM_3DY, END_DRAGGING_ITEM, END_DRAGGING_ITEM_3D, BEGIN_ROTATING_ITEM, BEGIN_ROTATING_ITEM_3D, UPDATE_ROTATING_ITEM, UPDATE_ROTATING_ITEM_CHANGED, END_ROTATING_ITEM, END_ROTATING_ITEM_3D, REPLACE_SUBMODULE, SELECT_ITEM, ANIMATE_OBJECT, REMOVE_REPLACE_SUBMODULE, ITEM_MOVE_UP, SELECT_TOOL_DRAWING_ITEM_3D, SET_DOOR_STYLE, SET_HANDLE_MATERIAL, SET_INITIAL_DOOR_STYLE, UPDATE_ITEM_POSITION, SET_DOOR_HANDLE, SET_WALL_COLOR, END_CREATING_CABINET, UPDATE_POPUP_OPEN, SET_MODELLING, SET_COUNTER_TOP, SET_BACKSPLASH, SET_BACKSPLASH_VISIBLE, SET_APPLIANCE_MATERIAL, DUPLICATE_SELECTED, EDIT_WIDTH, END_LOADING, SET_MOLDING, UPDATE_MOLDING, STORE_DIST_ARRAY, VALIDATE_ITEM_POSTIONS, REPLACE_ITEM, SET_ITEMS_CCDF
3
+ import { canMirrorCabinet } from "../shared/domain/cabinet-mirror";
4
+ import { TOGGLE_LOADING_CABINET, SELECT_TOOL_DRAWING_ITEM, UPDATE_DRAWING_ITEM, END_DRAWING_ITEM, BEGIN_DRAGGING_ITEM, BEGIN_DRAGGING_ITEM_3D, UPDATE_DRAGGING_ITEM, UPDATE_DRAGGING_ITEM_CHANGED, UPDATE_DRAGGING_ITEM_3DX, UPDATE_DRAGGING_ITEM_3DY, END_DRAGGING_ITEM, END_DRAGGING_ITEM_3D, BEGIN_ROTATING_ITEM, BEGIN_ROTATING_ITEM_3D, UPDATE_ROTATING_ITEM, UPDATE_ROTATING_ITEM_CHANGED, END_ROTATING_ITEM, END_ROTATING_ITEM_3D, REPLACE_SUBMODULE, SELECT_ITEM, ANIMATE_OBJECT, REMOVE_REPLACE_SUBMODULE, ITEM_MOVE_UP, SELECT_TOOL_DRAWING_ITEM_3D, SET_DOOR_STYLE, SET_HANDLE_MATERIAL, SET_INITIAL_DOOR_STYLE, UPDATE_ITEM_POSITION, SET_DOOR_HANDLE, SET_WALL_COLOR, END_CREATING_CABINET, UPDATE_POPUP_OPEN, SET_MODELLING, SET_COUNTER_TOP, SET_BACKSPLASH, SET_BACKSPLASH_VISIBLE, SET_APPLIANCE_MATERIAL, DUPLICATE_SELECTED, TOGGLE_ITEM_MIRROR, EDIT_WIDTH, END_LOADING, SET_MOLDING, UPDATE_MOLDING, STORE_DIST_ARRAY, VALIDATE_ITEM_POSTIONS, REPLACE_ITEM, SET_ITEMS_CCDF, SET_MOLDINGS_CCDF
4
5
  // SET_MOVE_STATUS,
5
6
  // SET_ROTATE_STATUS
6
7
  } from "../constants";
@@ -18,6 +19,12 @@ export default function (state, action) {
18
19
  return Item.editWidth(state, action.newWidth, action.layerID, action.itemID).updatedState;
19
20
  case DUPLICATE_SELECTED:
20
21
  return Item.duplicateSelected(state, action.currentObject, action.onInternalEvent).updatedState;
22
+ case TOGGLE_ITEM_MIRROR:
23
+ if (!canMirrorCabinet(state.getIn(['scene', 'layers', action.layerID, 'items', action.itemID]))) return state;
24
+ state = state.merge({
25
+ sceneHistory: history.historyPush(state.sceneHistory, state.scene)
26
+ });
27
+ return Item.toggleItemMirror(state, action.layerID, action.itemID, action.mirrored, action.onInternalEvent).updatedState;
21
28
  case END_CREATING_CABINET:
22
29
  return Item.endCreatingCabinet(state).updatedState;
23
30
  case UPDATE_POPUP_OPEN:
@@ -136,6 +143,8 @@ export default function (state, action) {
136
143
  return Item.setInitialDoorStyle(state, action.doorStyle).updatedState;
137
144
  case SET_ITEMS_CCDF:
138
145
  return Item.setItemsCCDF(state, action.ccdf_list, action.applyScope, action.itemIds, action.doorFinishId).updatedState;
146
+ case SET_MOLDINGS_CCDF:
147
+ return Item.setMoldingsCCDF(state, action.ccdf_list, action.applyScope).updatedState;
139
148
  case UPDATE_ITEM_POSITION:
140
149
  return Item.updateItemPosition(state, action.layerID, action.itemID, action.pos).updatedState;
141
150
  // case SET_MOVE_STATUS:
@@ -1,8 +1,8 @@
1
- /**
2
- * Strip stray dots from the **path portion** of a GLTF/BIN URL.
3
- * e.g. `…/B36_36x34.5x24.gltf` → `…/B36_36x345x24.gltf`
4
- *
5
- * Leaves the protocol/domain and the final file extension untouched.
1
+ /**
2
+ * Strip stray dots from the **path portion** of a GLTF/BIN URL.
3
+ * e.g. `…/B36_36x34.5x24.gltf` → `…/B36_36x345x24.gltf`
4
+ *
5
+ * Leaves the protocol/domain and the final file extension untouched.
6
6
  */
7
7
  export var sanitizeAssetUrl = function sanitizeAssetUrl(url) {
8
8
  if (!url) return url;
@@ -0,0 +1,7 @@
1
+ import { ITEM_TYPE } from "../../constants";
2
+ import { toJSIfNeeded } from "../objects/immutable";
3
+ export function canMirrorCabinet(item) {
4
+ var js = toJSIfNeeded(item);
5
+ var isCabinet = (js === null || js === void 0 ? void 0 : js.category) === ITEM_TYPE.CABINET || (js === null || js === void 0 ? void 0 : js.type) === ITEM_TYPE.CABINET;
6
+ return isCabinet && (js === null || js === void 0 ? void 0 : js.can_be_mirrored) === true;
7
+ }
@@ -1645,12 +1645,12 @@ export function calcSnap2(allItemRect, allItemSnap, allLineRects, allLineSnap, a
1645
1645
  }
1646
1646
  });
1647
1647
  }
1648
- if (allItemRect.cur.itemInfo.name.includes('Hood') || allItemRect.cur.itemInfo.name.includes('Range') || allItemRect.cur.itemInfo.name.includes('Cook Top')) {
1648
+ if (allItemRect.cur.itemInfo.name.includes('Hood') || allItemRect.cur.itemInfo.cabinet_category.toLowerCase().includes('hood') || allItemRect.cur.itemInfo.name.includes('Range') || allItemRect.cur.itemInfo.name.includes('Cook Top')) {
1649
1649
  var _intersects = allItemRect.others.filter(function (others) {
1650
1650
  return intersectRect(others.rect, curitem.rect);
1651
1651
  });
1652
1652
  _intersects.forEach(function (rect) {
1653
- if (isPointInArea(allArea, rect.itemInfo) || !allArea.length) if (rect.itemInfo.name.includes('Hood') || rect.itemInfo.name.includes('Range') || rect.itemInfo.name.includes('Cook Top')) {
1653
+ if (isPointInArea(allArea, rect.itemInfo) || !allArea.length) if (rect.itemInfo.name.includes('Hood') || rect.itemInfo.cabinet_category.toLowerCase().includes('hood') || rect.itemInfo.name.includes('Range') || rect.itemInfo.name.includes('Cook Top')) {
1654
1654
  nx = rect.itemInfo.x;
1655
1655
  ny = rect.itemInfo.y;
1656
1656
  rotRad = rect.itemInfo.rotation * Math.PI / 180;
@@ -2036,9 +2036,11 @@ export function needSnap(curItem, othItem) {
2036
2036
  var delta;
2037
2037
  curFloor > otherFloor ? delta = otherItem.height : delta = currentItem.height;
2038
2038
  if (Math.abs(curFloor - otherFloor) < delta) blSnap = true;
2039
+ var isBlsnapOth = othItem.item.category === 'cabinet' && othItem.item.layoutpos === BASE_CABINET_LAYOUTPOS && Math.abs(curFloor - otherFloor) >= delta;
2040
+ var isBlsnapCur = curItem.selectedItem.category === 'cabinet' && curItem.selectedItem.layoutpos === BASE_CABINET_LAYOUTPOS && Math.abs(curFloor - otherFloor) >= delta;
2039
2041
  if (curItem.cat.hasOwnProperty('long_name') || othItem.cat && othItem.cat.hasOwnProperty('long_name')) {
2040
2042
  if (curItem.cat.long_name.includes('Hood') || othItem.cat && othItem.cat.long_name.includes('Hood')) blSnap = true;
2041
- if (curItem.cat.long_name.includes('Hood') && othItem.cat && othItem.cat.long_name.includes('Base Cabinet') || curItem.cat.long_name.includes('Base Cabinet') && othItem.cat && othItem.cat.long_name.includes('Hood')) blSnap = false;
2043
+ if (curItem.cat.long_name.includes('Hood') && othItem.cat && isBlsnapOth || isBlsnapCur && othItem.cat.long_name.includes('Hood')) blSnap = false;
2042
2044
  if (curItem.cat.long_name.includes('Cook Top') && othItem.cat && othItem.cat.long_name.includes('Cabinet') || curItem.cat.long_name.includes('Cabinet') && othItem.cat && othItem.cat.long_name.includes('Cook Top')) blSnap = true;
2043
2045
  }
2044
2046
  return blSnap;
@@ -137,10 +137,10 @@ function isSnappedWithCornerCabient(srcItem, desItem) {
137
137
  } else return false;
138
138
  }
139
139
 
140
- /**
141
- * @param {*} faceSegs
142
- * @param {*} otherFaces
143
- * @returns
140
+ /**
141
+ * @param {*} faceSegs
142
+ * @param {*} otherFaces
143
+ * @returns
144
144
  */
145
145
  function getTrimmedFaceSegs(faceSegs, otherFaces, cnt) {
146
146
  try {
@@ -301,8 +301,8 @@ function applyGroupingRules(faces) {
301
301
  };
302
302
  }
303
303
 
304
- /**
305
- * Horizontal Grouping (for base cabinets back-to-back : BSV48 48" x 34.5")
304
+ /**
305
+ * Horizontal Grouping (for base cabinets back-to-back : BSV48 48" x 34.5")
306
306
  */
307
307
  function applyHorizontalGrouping(faces) {
308
308
  var removeIdxs = [];
@@ -344,8 +344,8 @@ function applyHorizontalGrouping(faces) {
344
344
  };
345
345
  }
346
346
 
347
- /**
348
- * Vertical Grouping (For CT3DR or CT2DR SKUs + stacked wall cabinets)
347
+ /**
348
+ * Vertical Grouping (For CT3DR or CT2DR SKUs + stacked wall cabinets)
349
349
  */
350
350
  function applyVerticalGrouping(faces) {
351
351
  var removeIdxs = [];
@@ -436,8 +436,8 @@ function buildMP3SkinPanelArray(bottomHeight, topHeight, mp3SkinPanelArray) {
436
436
  return skinPanelTypeArray;
437
437
  }
438
438
 
439
- /**
440
- * Decide which skin panel pieces are needed for a tall cabinet.
439
+ /**
440
+ * Decide which skin panel pieces are needed for a tall cabinet.
441
441
  */
442
442
  function resolveTallCabinetBundle(face) {
443
443
  var item = face.itemInfo;
@@ -457,8 +457,8 @@ function resolveTallCabinetBundle(face) {
457
457
  return face !== null && face !== void 0 && face.skinPanelSKU ? [face.skinPanelSKU] : [];
458
458
  }
459
459
 
460
- /**
461
- * Converts a face → list of SKUs
460
+ /**
461
+ * Converts a face → list of SKUs
462
462
  */
463
463
  function resolveSkinPanelSKU(face) {
464
464
  var layout = face.itemInfo.layoutpos;
@@ -468,8 +468,8 @@ function resolveSkinPanelSKU(face) {
468
468
  return [face.skinPanelSKU];
469
469
  }
470
470
 
471
- /**
472
- * Make skin panel data with grouping skinPanelSKU & doorStyle
471
+ /**
472
+ * Make skin panel data with grouping skinPanelSKU & doorStyle
473
473
  */
474
474
  function buildSkinPanelData(faces) {
475
475
  var tempResult = [];
@@ -34,10 +34,12 @@ exports.setInitialDoorStyle = setInitialDoorStyle;
34
34
  exports.setItemsCCDF = setItemsCCDF;
35
35
  exports.setModelling = setModelling;
36
36
  exports.setMolding = setMolding;
37
+ exports.setMoldingsCCDF = setMoldingsCCDF;
37
38
  exports.setMoveStatus = setMoveStatus;
38
39
  exports.setRotateStatus = setRotateStatus;
39
40
  exports.setWallColor = setWallColor;
40
41
  exports.storeDistArray = storeDistArray;
42
+ exports.toggleItemMirror = toggleItemMirror;
41
43
  exports.toggleLoadingCabinet = toggleLoadingCabinet;
42
44
  exports.updateDraggingItem = updateDraggingItem;
43
45
  exports.updateDraggingItem3DX = updateDraggingItem3DX;
@@ -91,6 +93,17 @@ function duplicateSelected(currentObject) {
91
93
  onInternalEvent: onInternalEvent
92
94
  };
93
95
  }
96
+ function toggleItemMirror(layerID, itemID) {
97
+ var mirrored = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null;
98
+ var onInternalEvent = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : null;
99
+ return {
100
+ type: _constants.TOGGLE_ITEM_MIRROR,
101
+ layerID: layerID,
102
+ itemID: itemID,
103
+ mirrored: mirrored,
104
+ onInternalEvent: onInternalEvent
105
+ };
106
+ }
94
107
  function replaceItem(selectedPos, currentObject, selectedObject) {
95
108
  return {
96
109
  type: _constants.REPLACE_ITEM,
@@ -380,4 +393,11 @@ function setItemsCCDF(ccdf_list, applyScope) {
380
393
  itemIds: itemIds,
381
394
  doorFinishId: doorFinishId
382
395
  };
396
+ }
397
+ function setMoldingsCCDF(ccdf_list, applyScope) {
398
+ return {
399
+ type: _constants.SET_MOLDINGS_CCDF,
400
+ ccdf_list: ccdf_list,
401
+ applyScope: applyScope
402
+ };
383
403
  }
@@ -1,106 +1,10 @@
1
- <?xml version="1.0" encoding="UTF-8" standalone="no"?>
2
- <!-- Created with Inkscape (http://www.inkscape.org/) -->
3
-
4
- <svg
5
- xmlns:dc="http://purl.org/dc/elements/1.1/"
6
- xmlns:cc="http://creativecommons.org/ns#"
7
- xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
8
- xmlns:svg="http://www.w3.org/2000/svg"
9
- xmlns="http://www.w3.org/2000/svg"
10
- xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
11
- xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
12
- width="20"
13
- height="20"
14
- id="svg2985"
15
- version="1.1"
16
- inkscape:version="0.48.4 r9939"
17
- sodipodi:docname="New document 2">
18
- <defs
19
- id="defs2987" />
20
- <sodipodi:namedview
21
- id="base"
22
- pagecolor="#ffffff"
23
- bordercolor="#666666"
24
- borderopacity="1.0"
25
- inkscape:pageopacity="0.0"
26
- inkscape:pageshadow="2"
27
- inkscape:zoom="11.197802"
28
- inkscape:cx="16"
29
- inkscape:cy="16"
30
- inkscape:current-layer="layer1"
31
- showgrid="true"
32
- inkscape:grid-bbox="true"
33
- inkscape:document-units="px"
34
- inkscape:window-width="1920"
35
- inkscape:window-height="1017"
36
- inkscape:window-x="-8"
37
- inkscape:window-y="-8"
38
- inkscape:window-maximized="1" />
39
- <metadata
40
- id="metadata2990">
41
- <rdf:RDF>
42
- <cc:Work
43
- rdf:about="">
44
- <dc:format>image/svg+xml</dc:format>
45
- <dc:type
46
- rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
47
- <dc:title></dc:title>
48
- </cc:Work>
49
- </rdf:RDF>
50
- </metadata>
51
- <g
52
- id="layer1"
53
- inkscape:label="Layer 1"
54
- inkscape:groupmode="layer"
55
- transform="translate(0,-12)">
56
- <g
57
- style="fill:none"
58
- id="g3059"
59
- transform="translate(-645,-367)">
60
- <g
61
- id="g3035"
62
- clip-path="url(#clip29_0_1)">
63
- <path
64
- id="path3037"
65
- d="m 661,386 3,3 -3,3"
66
- inkscape:connector-curvature="0"
67
- style="stroke:#4c12a1;stroke-width:2;stroke-linecap:round;stroke-linejoin:round" />
68
- <path
69
- id="path3039"
70
- d="m 658,389 h 6"
71
- inkscape:connector-curvature="0"
72
- style="stroke:#4c12a1;stroke-width:2;stroke-linecap:round;stroke-linejoin:round" />
73
- <path
74
- id="path3041"
75
- d="m 649,386 -3,3 3,3"
76
- inkscape:connector-curvature="0"
77
- style="stroke:#4c12a1;stroke-width:2;stroke-linecap:round;stroke-linejoin:round" />
78
- <path
79
- id="path3043"
80
- d="m 646,389 h 6"
81
- inkscape:connector-curvature="0"
82
- style="stroke:#4c12a1;stroke-width:2;stroke-linecap:round;stroke-linejoin:round" />
83
- <path
84
- id="path3045"
85
- d="m 652,395 3,3 3,-3"
86
- inkscape:connector-curvature="0"
87
- style="stroke:#4c12a1;stroke-width:2;stroke-linecap:round;stroke-linejoin:round" />
88
- <path
89
- id="path3047"
90
- d="m 655,392 v 6"
91
- inkscape:connector-curvature="0"
92
- style="stroke:#4c12a1;stroke-width:2;stroke-linecap:round;stroke-linejoin:round" />
93
- <path
94
- id="path3049"
95
- d="m 658,383 -3,-3 -3,3"
96
- inkscape:connector-curvature="0"
97
- style="stroke:#4c12a1;stroke-width:2;stroke-linecap:round;stroke-linejoin:round" />
98
- <path
99
- id="path3051"
100
- d="m 655,380 v 6"
101
- inkscape:connector-curvature="0"
102
- style="stroke:#4c12a1;stroke-width:2;stroke-linecap:round;stroke-linejoin:round" />
103
- </g>
104
- </g>
105
- </g>
1
+ <svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg">
2
+ <path d="M12 6L14 8L12 10" stroke="#3A0B80" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/>
3
+ <path d="M10 8H14" stroke="#3A0B80" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/>
4
+ <path d="M4 6L2 8L4 10" stroke="#3A0B80" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/>
5
+ <path d="M2 8H6" stroke="#3A0B80" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/>
6
+ <path d="M6 12L8 14L10 12" stroke="#3A0B80" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/>
7
+ <path d="M8 10V14" stroke="#3A0B80" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/>
8
+ <path d="M10 4L8 2L6 4" stroke="#3A0B80" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/>
9
+ <path d="M8 2V6" stroke="#3A0B80" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/>
106
10
  </svg>
@@ -1,76 +1,4 @@
1
- <?xml version="1.0" encoding="UTF-8" standalone="no"?>
2
- <!-- Created with Inkscape (http://www.inkscape.org/) -->
3
-
4
- <svg
5
- xmlns:dc="http://purl.org/dc/elements/1.1/"
6
- xmlns:cc="http://creativecommons.org/ns#"
7
- xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
8
- xmlns:svg="http://www.w3.org/2000/svg"
9
- xmlns="http://www.w3.org/2000/svg"
10
- xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
11
- xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
12
- width="20"
13
- height="20"
14
- id="svg2985"
15
- version="1.1"
16
- inkscape:version="0.48.4 r9939"
17
- sodipodi:docname="item_rotation.svg">
18
- <defs
19
- id="defs2987" />
20
- <sodipodi:namedview
21
- id="base"
22
- pagecolor="#ffffff"
23
- bordercolor="#666666"
24
- borderopacity="1.0"
25
- inkscape:pageopacity="0.0"
26
- inkscape:pageshadow="2"
27
- inkscape:zoom="7"
28
- inkscape:cx="24"
29
- inkscape:cy="24"
30
- inkscape:current-layer="layer1"
31
- showgrid="true"
32
- inkscape:grid-bbox="true"
33
- inkscape:document-units="px"
34
- inkscape:window-width="995"
35
- inkscape:window-height="660"
36
- inkscape:window-x="368"
37
- inkscape:window-y="198"
38
- inkscape:window-maximized="0" />
39
- <metadata
40
- id="metadata2990">
41
- <rdf:RDF>
42
- <cc:Work
43
- rdf:about="">
44
- <dc:format>image/svg+xml</dc:format>
45
- <dc:type
46
- rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
47
- <dc:title />
48
- </cc:Work>
49
- </rdf:RDF>
50
- </metadata>
51
- <g
52
- id="layer1"
53
- inkscape:label="Layer 1"
54
- inkscape:groupmode="layer"
55
- transform="translate(0,-28)">
56
- <g
57
- style="fill:none"
58
- id="g3009"
59
- transform="translate(-645,-307.5)">
60
- <g
61
- id="g2995"
62
- clip-path="url(#clip30_0_1)">
63
- <path
64
- id="path2999"
65
- d="m 660,347.328 c 2.414,-0.718 4,-1.94 4,-3.328 0,-2.21 -4.03,-4 -9,-4 -4.97,0 -9,1.79 -9,4 0,2.21 4.03,4 9,4"
66
- inkscape:connector-curvature="0"
67
- style="stroke:#4c12a1;stroke-width:2;stroke-linecap:round;stroke-linejoin:round" />
68
- <path
69
- id="path3001"
70
- d="m 652,345 3,3 -3,3"
71
- inkscape:connector-curvature="0"
72
- style="stroke:#4c12a1;stroke-width:2;stroke-linecap:round;stroke-linejoin:round" />
73
- </g>
74
- </g>
75
- </g>
1
+ <svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg">
2
+ <path d="M11.3333 10.2188C12.9427 9.74016 14 8.9255 14 8.00016C14 6.52683 11.3133 5.3335 8 5.3335C4.68667 5.3335 2 6.52683 2 8.00016C2 9.4735 4.68667 10.6668 8 10.6668" stroke="#3A0B80" stroke-width="1.33333" stroke-linecap="round" stroke-linejoin="round"/>
3
+ <path d="M6 8.6665L8 10.6665L6 12.6665" stroke="#3A0B80" stroke-width="1.33333" stroke-linecap="round" stroke-linejoin="round"/>
76
4
  </svg>
@@ -1,4 +1,4 @@
1
- <svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
2
- <path d="M11.05 5.47V20.18L8 20.96" stroke="#000F33" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
3
- <path d="M16.02 3V17.32L14.13 17.76" stroke="#000F33" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
4
- </svg>
1
+ <svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
2
+ <path d="M11.05 5.47V20.18L8 20.96" stroke="#000F33" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
3
+ <path d="M16.02 3V17.32L14.13 17.76" stroke="#000F33" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
4
+ </svg>
@@ -1,6 +1,6 @@
1
- <svg width="22" height="22" viewBox="0 0 22 22" fill="none" xmlns="http://www.w3.org/2000/svg">
2
- <path d="M14.5564 21L20.2416 14.9342L21.0051 2.53973L14.8952 6.34589" stroke="#C1CAE4" stroke-width="1.5" stroke-miterlimit="10" stroke-linecap="round" stroke-linejoin="round" stroke-dasharray="5 3"/>
3
- <path d="M8.91868 1L9.14126 12.3969L1.90534 17.3692L0.994629 4.08224L8.91868 1Z" stroke="#C1CAE4" stroke-width="1.5" stroke-miterlimit="10" stroke-linecap="round" stroke-linejoin="round" stroke-dasharray="5 3"/>
4
- <path d="M8.9187 1L21.0053 2.53972L20.2418 14.9342L9.14128 12.3969L8.9187 1Z" stroke="#C1CAE4" stroke-width="1.5" stroke-miterlimit="10" stroke-linecap="round" stroke-linejoin="round" stroke-dasharray="5 3"/>
5
- <path d="M14.5566 21L1.90534 17.3692L0.994629 4.08224L14.8953 6.34588L14.5566 21Z" fill="#4C12A1" fill-opacity="0.5" stroke="#4C12A1" stroke-width="1.5" stroke-miterlimit="10" stroke-linecap="round" stroke-linejoin="round"/>
6
- </svg>
1
+ <svg width="22" height="22" viewBox="0 0 22 22" fill="none" xmlns="http://www.w3.org/2000/svg">
2
+ <path d="M14.5564 21L20.2416 14.9342L21.0051 2.53973L14.8952 6.34589" stroke="#C1CAE4" stroke-width="1.5" stroke-miterlimit="10" stroke-linecap="round" stroke-linejoin="round" stroke-dasharray="5 3"/>
3
+ <path d="M8.91868 1L9.14126 12.3969L1.90534 17.3692L0.994629 4.08224L8.91868 1Z" stroke="#C1CAE4" stroke-width="1.5" stroke-miterlimit="10" stroke-linecap="round" stroke-linejoin="round" stroke-dasharray="5 3"/>
4
+ <path d="M8.9187 1L21.0053 2.53972L20.2418 14.9342L9.14128 12.3969L8.9187 1Z" stroke="#C1CAE4" stroke-width="1.5" stroke-miterlimit="10" stroke-linecap="round" stroke-linejoin="round" stroke-dasharray="5 3"/>
5
+ <path d="M14.5566 21L1.90534 17.3692L0.994629 4.08224L14.8953 6.34588L14.5566 21Z" fill="#4C12A1" fill-opacity="0.5" stroke="#4C12A1" stroke-width="1.5" stroke-miterlimit="10" stroke-linecap="round" stroke-linejoin="round"/>
6
+ </svg>
@@ -1,6 +1,6 @@
1
- <svg width="22" height="22" viewBox="0 0 22 22" fill="none" xmlns="http://www.w3.org/2000/svg">
2
- <path d="M8.9187 1L21.0053 2.53972L20.2418 14.9342L9.14128 12.3969L8.9187 1Z" fill="#4C12A1" fill-opacity="0.5" stroke="#4C12A1" stroke-width="1.5" stroke-miterlimit="10" stroke-linecap="round" stroke-linejoin="round"/>
3
- <path d="M14.5566 21L1.90534 17.3692L0.994629 4.08224L14.8953 6.34588L14.5566 21Z" stroke="#C1CAE4" stroke-width="1.5" stroke-miterlimit="10" stroke-linecap="round" stroke-linejoin="round" stroke-dasharray="5 3"/>
4
- <path d="M14.5564 21L20.2416 14.9342M21.0051 2.53973L14.8952 6.34589" stroke="#C1CAE4" stroke-width="1.5" stroke-miterlimit="10" stroke-linecap="round" stroke-linejoin="round" stroke-dasharray="5 3"/>
5
- <path d="M8.91868 1L0.994629 4.08224L1.90534 17.3692L9.14126 12.3969" stroke="#C1CAE4" stroke-width="1.5" stroke-miterlimit="10" stroke-linecap="round" stroke-linejoin="round" stroke-dasharray="5 3"/>
6
- </svg>
1
+ <svg width="22" height="22" viewBox="0 0 22 22" fill="none" xmlns="http://www.w3.org/2000/svg">
2
+ <path d="M8.9187 1L21.0053 2.53972L20.2418 14.9342L9.14128 12.3969L8.9187 1Z" fill="#4C12A1" fill-opacity="0.5" stroke="#4C12A1" stroke-width="1.5" stroke-miterlimit="10" stroke-linecap="round" stroke-linejoin="round"/>
3
+ <path d="M14.5566 21L1.90534 17.3692L0.994629 4.08224L14.8953 6.34588L14.5566 21Z" stroke="#C1CAE4" stroke-width="1.5" stroke-miterlimit="10" stroke-linecap="round" stroke-linejoin="round" stroke-dasharray="5 3"/>
4
+ <path d="M14.5564 21L20.2416 14.9342M21.0051 2.53973L14.8952 6.34589" stroke="#C1CAE4" stroke-width="1.5" stroke-miterlimit="10" stroke-linecap="round" stroke-linejoin="round" stroke-dasharray="5 3"/>
5
+ <path d="M8.91868 1L0.994629 4.08224L1.90534 17.3692L9.14126 12.3969" stroke="#C1CAE4" stroke-width="1.5" stroke-miterlimit="10" stroke-linecap="round" stroke-linejoin="round" stroke-dasharray="5 3"/>
6
+ </svg>