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.
- package/es/actions/items-actions.js +20 -2
- package/es/assets/img/svg/3d_item_move.svg +9 -105
- package/es/assets/img/svg/3d_item_rotation.svg +3 -75
- package/es/assets/img/svg/accessories.svg +4 -4
- package/es/assets/img/svg/bottombar/elevation-back.svg +6 -6
- package/es/assets/img/svg/bottombar/elevation-front.svg +6 -6
- package/es/assets/img/svg/bottombar/elevation-left.svg +6 -6
- package/es/assets/img/svg/bottombar/elevation-right.svg +7 -7
- package/es/assets/img/svg/bottombar/elevation.svg +13 -13
- package/es/assets/img/svg/delete.svg +6 -2
- package/es/assets/img/svg/detail.svg +77 -77
- package/es/assets/img/svg/duplicate.svg +6 -6
- package/es/assets/img/svg/filtersActive.svg +19 -19
- package/es/assets/img/svg/invert.svg +12 -127
- package/es/assets/img/svg/menubar/login.svg +84 -84
- package/es/assets/img/svg/menubar/my_projects.svg +85 -85
- package/es/assets/img/svg/menubar/new_project.svg +110 -110
- package/es/assets/img/svg/menubar/save_project.svg +84 -84
- package/es/assets/img/svg/options.svg +3 -3
- package/es/assets/img/svg/positioning.svg +3 -3
- package/es/assets/img/svg/toggleFilters.svg +19 -19
- package/es/assets/img/svg/toolbar/shopping-cart.svg +13 -13
- package/es/assets/img/svg/wizardstep/detail_view.svg +87 -87
- package/es/assets/img/svg/wizardstep/tile_view.svg +95 -95
- package/es/catalog/utils/exporter.js +4 -0
- package/es/catalog/utils/item-loader.js +18 -8
- package/es/class/item.js +80 -2
- package/es/components/viewer2d/item.js +139 -125
- package/es/components/viewer2d/viewer2d.js +7 -4
- package/es/components/viewer3d/camera-controls-module/camera-controls.module.js +556 -556
- package/es/components/viewer3d/scene-creator.js +18 -0
- package/es/components/viewer3d/viewer3d.js +137 -49
- package/es/constants.js +7 -1
- package/es/events/external/handleExternalEvent.js +36 -33
- package/es/events/external/handleExternalEvent.util.js +4 -2
- package/es/events/external/handlers.changeDoorStyle.js +28 -7
- package/es/events/external/handlers.elementOps.js +8 -0
- package/es/mappings/external-events/mapExternalEventPayload.js +4 -4
- package/es/mappings/external-events/mappers/addItemMapper.js +9 -9
- package/es/mappings/external-events/mappers/ccdfMapper.js +1 -1
- package/es/models.js +4 -0
- package/es/reducers/items-reducer.js +10 -1
- package/es/shared/domain/asset/sanitize-asset-url.js +5 -5
- package/es/shared/domain/cabinet-mirror.js +7 -0
- package/es/utils/geometry.js +5 -3
- package/es/utils/skinPanelEngine.js +14 -14
- package/lib/actions/items-actions.js +20 -0
- package/lib/assets/img/svg/3d_item_move.svg +9 -105
- package/lib/assets/img/svg/3d_item_rotation.svg +3 -75
- package/lib/assets/img/svg/accessories.svg +4 -4
- package/lib/assets/img/svg/bottombar/elevation-back.svg +6 -6
- package/lib/assets/img/svg/bottombar/elevation-front.svg +6 -6
- package/lib/assets/img/svg/bottombar/elevation-left.svg +6 -6
- package/lib/assets/img/svg/bottombar/elevation-right.svg +7 -7
- package/lib/assets/img/svg/bottombar/elevation.svg +13 -13
- package/lib/assets/img/svg/delete.svg +6 -2
- package/lib/assets/img/svg/detail.svg +77 -77
- package/lib/assets/img/svg/duplicate.svg +6 -6
- package/lib/assets/img/svg/filtersActive.svg +19 -19
- package/lib/assets/img/svg/invert.svg +12 -127
- package/lib/assets/img/svg/menubar/login.svg +84 -84
- package/lib/assets/img/svg/menubar/my_projects.svg +85 -85
- package/lib/assets/img/svg/menubar/new_project.svg +110 -110
- package/lib/assets/img/svg/menubar/save_project.svg +84 -84
- package/lib/assets/img/svg/options.svg +3 -3
- package/lib/assets/img/svg/positioning.svg +3 -3
- package/lib/assets/img/svg/toggleFilters.svg +19 -19
- package/lib/assets/img/svg/toolbar/shopping-cart.svg +13 -13
- package/lib/assets/img/svg/wizardstep/detail_view.svg +87 -87
- package/lib/assets/img/svg/wizardstep/tile_view.svg +95 -95
- package/lib/catalog/utils/exporter.js +4 -0
- package/lib/catalog/utils/item-loader.js +18 -8
- package/lib/class/item.js +79 -1
- package/lib/components/viewer2d/item.js +138 -124
- package/lib/components/viewer2d/viewer2d.js +7 -4
- package/lib/components/viewer3d/camera-controls-module/camera-controls.module.js +556 -556
- package/lib/components/viewer3d/scene-creator.js +18 -0
- package/lib/components/viewer3d/viewer3d.js +137 -49
- package/lib/constants.js +11 -5
- package/lib/events/external/handleExternalEvent.js +34 -31
- package/lib/events/external/handleExternalEvent.util.js +4 -2
- package/lib/events/external/handlers.changeDoorStyle.js +28 -7
- package/lib/events/external/handlers.elementOps.js +9 -0
- package/lib/mappings/external-events/mapExternalEventPayload.js +4 -4
- package/lib/mappings/external-events/mappers/addItemMapper.js +9 -9
- package/lib/mappings/external-events/mappers/ccdfMapper.js +1 -1
- package/lib/models.js +4 -0
- package/lib/reducers/items-reducer.js +9 -0
- package/lib/shared/domain/asset/sanitize-asset-url.js +5 -5
- package/lib/shared/domain/cabinet-mirror.js +13 -0
- package/lib/utils/geometry.js +5 -3
- package/lib/utils/skinPanelEngine.js +14 -14
- 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$
|
|
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$
|
|
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$
|
|
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$
|
|
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'
|
|
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 {
|
|
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
|
+
}
|
package/es/utils/geometry.js
CHANGED
|
@@ -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 &&
|
|
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
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
<
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
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
|
-
|
|
2
|
-
|
|
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>
|