kitchen-simulator 3.0.3 → 3.1.0-alpha.13

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 (41) hide show
  1. package/es/LiteKitchenConfigurator.js +52 -29
  2. package/es/LiteRenderer.js +5 -8
  3. package/es/actions/lines-actions.js +3 -1
  4. package/es/assets/img/png/helper/video_preview_start.png +0 -0
  5. package/es/catalog/factories/area-factory-3d.js +17 -17
  6. package/es/catalog/holes/window-clear/planner-element.js +2 -2
  7. package/es/catalog/utils/item-loader.js +198 -197
  8. package/es/class/item.js +8 -0
  9. package/es/class/line.js +14 -2
  10. package/es/components/viewer2d/item.js +36 -12
  11. package/es/components/viewer2d/utils.js +2 -2
  12. package/es/components/viewer2d/viewer2d.js +12 -10
  13. package/es/components/viewer3d/viewer3d.js +66 -74
  14. package/es/constants.js +6 -2
  15. package/es/devLiteRenderer.js +192 -98
  16. package/es/index.js +104 -14
  17. package/es/reducers/lines-reducer.js +1 -1
  18. package/es/utils/geometry.js +161 -0
  19. package/es/utils/isolate-event-handler.js +268 -114
  20. package/es/utils/molding.js +234 -2
  21. package/lib/LiteKitchenConfigurator.js +52 -29
  22. package/lib/LiteRenderer.js +5 -8
  23. package/lib/actions/lines-actions.js +3 -1
  24. package/lib/assets/img/png/helper/video_preview_start.png +0 -0
  25. package/lib/catalog/factories/area-factory-3d.js +14 -14
  26. package/lib/catalog/holes/window-clear/planner-element.js +2 -2
  27. package/lib/catalog/utils/item-loader.js +195 -194
  28. package/lib/class/item.js +8 -0
  29. package/lib/class/line.js +13 -1
  30. package/lib/components/viewer2d/item.js +36 -12
  31. package/lib/components/viewer2d/utils.js +2 -2
  32. package/lib/components/viewer2d/viewer2d.js +12 -10
  33. package/lib/components/viewer3d/viewer3d.js +66 -74
  34. package/lib/constants.js +11 -7
  35. package/lib/devLiteRenderer.js +186 -92
  36. package/lib/index.js +104 -14
  37. package/lib/reducers/lines-reducer.js +1 -1
  38. package/lib/utils/geometry.js +162 -0
  39. package/lib/utils/isolate-event-handler.js +267 -113
  40. package/lib/utils/molding.js +233 -0
  41. package/package.json +1 -1
@@ -1,12 +1,13 @@
1
1
  import _slicedToArray from "@babel/runtime/helpers/esm/slicedToArray";
2
2
  import _asyncToGenerator from "@babel/runtime/helpers/esm/asyncToGenerator";
3
3
  import _regeneratorRuntime from "@babel/runtime/regenerator";
4
- import React, { useState, useEffect } from 'react';
5
- import { Map } from 'immutable';
6
- import ContainerDimensions from 'react-container-dimensions';
4
+ import React, { useState, useEffect } from "react";
5
+ import { Map } from "immutable";
6
+ import ContainerDimensions from "react-container-dimensions";
7
7
  import projectItemsCatalog from "./mocks/projectItemsCatalog.json";
8
8
  import mockProps from "./mocks/mockProps.json";
9
9
  import cabinetPaylod from "./mocks/cabinetPayload2.json";
10
+ import cabinetW0940Payload from "./mocks/cabinetPayload.json";
10
11
  import appliancePaylod from "./mocks/appliancePayload.json";
11
12
  import doorStylePaylod2 from "./mocks/doorStylePayload2.json";
12
13
  import roomShapePayload from "./mocks/roomShapePayload.json";
@@ -16,14 +17,15 @@ import furnishingPayload from "./mocks/furnishingPayload.json";
16
17
  import rectangleData from "./mocks/rectangleShape.json";
17
18
  import moldingPayload from "./mocks/moldingPayload.json";
18
19
  import replaceCabinetPayload from "./mocks/replaceCabinetPayload.json";
19
- import ReactDOM from 'react-dom';
20
+ import ReactDOM from "react-dom";
20
21
  import LiteRenderer from "./LiteRenderer";
21
- import { Button } from 'antd';
22
- import { LEFT, RIGHT, TOP, BOTTOM, EXTERNAL_EVENT_ADD_ITEM, EXTERNAL_EVENT_ADD_WALL, EXTERNAL_EVENT_TOGGLE_TO_3D, EXTERNAL_EVENT_TOGGLE_TO_2D, EXTERNAL_EVENT_TOGGLE_TO_ELEVATION, EXTERNAL_EVENT_MOVE_PAN, EXTERNAL_EVENT_NEW_PROJECT, EXTERNAL_EVENT_CHANGE_DOORSTYLE, EXTERNAL_EVENT_ADD_ROOM_SHAPE, EXTERNAL_EVENT_ZOOM_IN, EXTERNAL_EVENT_ZOOM_OUT, EXTERNAL_EVENT_UNDO, EXTERNAL_EVENT_REDO, EXTERNAL_EVENT_SET_MOLDING, EXTERNAL_EVENT_PROJECT_SETTING, PROJECT_SETTING_OPTION, EXTERNAL_EVENT_SYNC_SCENE, EXTERNAL_EVENT_UPDATE_ATTRIBUTE, BACK_DIST_ANG, ATT_ITEM_POS, ATT_ITEM_ROTATION, ATT_LINE_LENGTH, EXTERNAL_EVENT_UPDATE_PROPERTY, PROP_FLIP_DOOR_HANDLE, PROP_OPEN_DOORS, EXTERNAL_EVENT_LOAD_PROJECT, INTERNAL_EVENT_ITEMS_CATALOG, EXTERNAL_EVENT_ADD_HOLE, HOLE_NAMES, EXTERNAL_EVENT_CENTERING_2D, PROP_ALTITUDE, EXTERNAL_EVENT_DUPLICATE_ELEMENT, ELEMENT_ITEM, EXTERNAL_EVENT_DELETE_ELEMENT, PROP_RESIZE_WIDTH, EXTERNAL_EVENT_REPLACE_CABINET, EXTERNAL_EVENT_SET_FINISHING, FINISHING_TYPE } from "./constants";
22
+ import { Button } from "antd";
23
+ import { LEFT, RIGHT, TOP, BOTTOM, EXTERNAL_EVENT_ADD_ITEM, EXTERNAL_EVENT_ADD_WALL, EXTERNAL_EVENT_TOGGLE_TO_3D, EXTERNAL_EVENT_TOGGLE_TO_2D, EXTERNAL_EVENT_TOGGLE_TO_ELEVATION, EXTERNAL_EVENT_MOVE_PAN, EXTERNAL_EVENT_NEW_PROJECT, EXTERNAL_EVENT_CHANGE_DOORSTYLE, EXTERNAL_EVENT_ADD_ROOM_SHAPE, EXTERNAL_EVENT_ZOOM_IN, EXTERNAL_EVENT_ZOOM_OUT, EXTERNAL_EVENT_UNDO, EXTERNAL_EVENT_REDO, EXTERNAL_EVENT_SET_MOLDING, EXTERNAL_EVENT_PROJECT_SETTING, PROJECT_SETTING_OPTION, EXTERNAL_EVENT_SYNC_SCENE, EXTERNAL_EVENT_UPDATE_ATTRIBUTE, BACK_DIST_ANG, ATT_ITEM_POS, ATT_ITEM_ROTATION, ATT_LINE_LENGTH, EXTERNAL_EVENT_UPDATE_PROPERTY, PROP_FLIP_DOOR_HANDLE, PROP_OPEN_DOORS, EXTERNAL_EVENT_LOAD_PROJECT, INTERNAL_EVENT_ITEMS_CATALOG, EXTERNAL_EVENT_ADD_HOLE, HOLE_NAMES, EXTERNAL_EVENT_CENTERING_2D, PROP_ALTITUDE, EXTERNAL_EVENT_DUPLICATE_ELEMENT, ELEMENT_ITEM, EXTERNAL_EVENT_DELETE_ELEMENT, PROP_RESIZE_WIDTH, EXTERNAL_EVENT_REPLACE_CABINET, EXTERNAL_EVENT_SET_FINISHING, FINISHING_TYPE, EXTERNAL_EVENT_ROTATE_PAN } from "./constants";
24
+ import { convert } from "./utils/convert-units-lite";
23
25
 
24
26
  // --- renderer props ---
25
27
  var options = {
26
- unit: 'in',
28
+ unit: "in",
27
29
  enable3D: true
28
30
  };
29
31
  var onInternalEvent = /*#__PURE__*/function () {
@@ -32,7 +34,7 @@ var onInternalEvent = /*#__PURE__*/function () {
32
34
  return _regeneratorRuntime.wrap(function (_context) {
33
35
  while (1) switch (_context.prev = _context.next) {
34
36
  case 0:
35
- console.log('EVENT:', evt.type, evt.value);
37
+ console.log("EVENT:", evt.type, evt.value);
36
38
  _t = evt.type;
37
39
  _context.next = _t === INTERNAL_EVENT_ITEMS_CATALOG ? 1 : 3;
38
40
  break;
@@ -51,7 +53,7 @@ var onInternalEvent = /*#__PURE__*/function () {
51
53
  return _ref.apply(this, arguments);
52
54
  };
53
55
  }();
54
- document.getElementById('app').style.display = 'block';
56
+ document.getElementById("app").style.display = "block";
55
57
  function WorkSpace(props) {
56
58
  var _useState = useState(null),
57
59
  _useState2 = _slicedToArray(_useState, 2),
@@ -213,6 +215,15 @@ function WorkSpace(props) {
213
215
  setExternalEvent(evt);
214
216
  }
215
217
  }, "Add B12 Cabinet"), /*#__PURE__*/React.createElement(Button, {
218
+ actionType: "danger",
219
+ onClick: function onClick() {
220
+ var evt = {
221
+ type: EXTERNAL_EVENT_ADD_ITEM,
222
+ payload: cabinetW0940Payload
223
+ };
224
+ setExternalEvent(evt);
225
+ }
226
+ }, "Add W0930 Cabinet"), /*#__PURE__*/React.createElement(Button, {
216
227
  actionType: "danger",
217
228
  onClick: function onClick() {
218
229
  var evt = {
@@ -231,91 +242,91 @@ function WorkSpace(props) {
231
242
  var evt = {
232
243
  type: EXTERNAL_EVENT_ADD_ROOM_SHAPE,
233
244
  payload: {
234
- roomShapeType: 'rectangle',
245
+ roomShapeType: "rectangle",
235
246
  width: 250,
236
247
  height: 100,
237
248
  doorStyle: {
238
249
  id: 36,
239
- type: 'door',
240
- name: 'Brilliant White Shaker',
241
- thumbnail: 'https://media.test.diydesignspace.com/uploads/DoorColor/202105065453_36/thumbnail/Brilliant%20White%20Shaker%20-%20RTA.jpg',
242
- texture: 'https://media.test.diydesignspace.com/uploads/DoorColor/202105065453_36/texture/White1px.jpeg',
243
- color: '#ffffff',
250
+ type: "door",
251
+ name: "Brilliant White Shaker",
252
+ thumbnail: "https://media.test.diydesignspace.com/uploads/DoorColor/202105065453_36/thumbnail/Brilliant%20White%20Shaker%20-%20RTA.jpg",
253
+ texture: "https://media.test.diydesignspace.com/uploads/DoorColor/202105065453_36/texture/White1px.jpeg",
254
+ color: "#ffffff",
244
255
  glossness: 1,
245
256
  door_style_id: 42,
246
257
  brightness: 1,
247
- sku: 'SW',
248
- color_family: ',10,',
249
- color_sku_alias: 'SW',
250
- door_style_name: 'Shaker',
251
- install: '',
258
+ sku: "SW",
259
+ color_family: ",10,",
260
+ color_sku_alias: "SW",
261
+ door_style_name: "Shaker",
262
+ install: "",
252
263
  doorStyles: {
253
- base: 'https://media.test.diydesignspace.com/uploads/DoorColor/202105065453_36/texture/White1px.jpeg',
254
- counttop: 'https://media.test.diydesignspace.com/uploads/CountTop/202105074107_5/texture/Unique_Calcatta_texture.jpg',
255
- interior: 'https://media.test.diydesignspace.com/uploads/assets/default/maple.jpg',
256
- base_door_1: 'https://media.test.diydesignspace.com/uploads/DoorColor/202105065453_36/texture/White1px.jpeg',
257
- base_fixed_drawer_door_1: 'https://media.test.diydesignspace.com/uploads/DoorColor/202105065453_36/texture/White1px.jpeg',
258
- base_drawer_1: 'https://media.test.diydesignspace.com/uploads/DoorColor/202105065453_36/texture/White1px.jpeg',
259
- base_drawer_door_1: 'https://media.test.diydesignspace.com/uploads/DoorColor/202105065453_36/texture/White1px.jpeg',
260
- door_handle_1: 'https://media.test.diydesignspace.com/uploads/assets/default/steel.jpg',
261
- fixed_drawer_door_handle_1: 'https://media.test.diydesignspace.com/uploads/assets/default/steel.jpg',
262
- drawer_door_handle_1: 'https://media.test.diydesignspace.com/uploads/assets/default/steel.jpg',
263
- base_door_2: 'https://media.test.diydesignspace.com/uploads/DoorColor/202105065453_36/texture/White1px.jpeg',
264
- base_fixed_drawer_door_2: 'https://media.test.diydesignspace.com/uploads/DoorColor/202105065453_36/texture/White1px.jpeg',
265
- base_drawer_2: 'https://media.test.diydesignspace.com/uploads/DoorColor/202105065453_36/texture/White1px.jpeg',
266
- base_drawer_door_2: 'https://media.test.diydesignspace.com/uploads/DoorColor/202105065453_36/texture/White1px.jpeg',
267
- door_handle_2: 'https://media.test.diydesignspace.com/uploads/assets/default/steel.jpg',
268
- fixed_drawer_door_handle_2: 'https://media.test.diydesignspace.com/uploads/assets/default/steel.jpg',
269
- drawer_door_handle_2: 'https://media.test.diydesignspace.com/uploads/assets/default/steel.jpg',
270
- base_door_3: 'https://media.test.diydesignspace.com/uploads/DoorColor/202105065453_36/texture/White1px.jpeg',
271
- base_fixed_drawer_door_3: 'https://media.test.diydesignspace.com/uploads/DoorColor/202105065453_36/texture/White1px.jpeg',
272
- base_drawer_3: 'https://media.test.diydesignspace.com/uploads/DoorColor/202105065453_36/texture/White1px.jpeg',
273
- base_drawer_door_3: 'https://media.test.diydesignspace.com/uploads/DoorColor/202105065453_36/texture/White1px.jpeg',
274
- door_handle_3: 'https://media.test.diydesignspace.com/uploads/assets/default/steel.jpg',
275
- fixed_drawer_door_handle_3: 'https://media.test.diydesignspace.com/uploads/assets/default/steel.jpg',
276
- drawer_door_handle_3: 'https://media.test.diydesignspace.com/uploads/assets/default/steel.jpg',
277
- base_door_4: 'https://media.test.diydesignspace.com/uploads/DoorColor/202105065453_36/texture/White1px.jpeg',
278
- base_fixed_drawer_door_4: 'https://media.test.diydesignspace.com/uploads/DoorColor/202105065453_36/texture/White1px.jpeg',
279
- base_drawer_4: 'https://media.test.diydesignspace.com/uploads/DoorColor/202105065453_36/texture/White1px.jpeg',
280
- base_drawer_door_4: 'https://media.test.diydesignspace.com/uploads/DoorColor/202105065453_36/texture/White1px.jpeg',
281
- door_handle_4: 'https://media.test.diydesignspace.com/uploads/assets/default/steel.jpg',
282
- fixed_drawer_door_handle_4: 'https://media.test.diydesignspace.com/uploads/assets/default/steel.jpg',
283
- drawer_door_handle_4: 'https://media.test.diydesignspace.com/uploads/assets/default/steel.jpg',
284
- base_door_5: 'https://media.test.diydesignspace.com/uploads/DoorColor/202105065453_36/texture/White1px.jpeg',
285
- base_fixed_drawer_door_5: 'https://media.test.diydesignspace.com/uploads/DoorColor/202105065453_36/texture/White1px.jpeg',
286
- base_drawer_5: 'https://media.test.diydesignspace.com/uploads/DoorColor/202105065453_36/texture/White1px.jpeg',
287
- base_drawer_door_5: 'https://media.test.diydesignspace.com/uploads/DoorColor/202105065453_36/texture/White1px.jpeg',
288
- door_handle_5: 'https://media.test.diydesignspace.com/uploads/assets/default/steel.jpg',
289
- fixed_drawer_door_handle_5: 'https://media.test.diydesignspace.com/uploads/assets/default/steel.jpg',
290
- drawer_door_handle_5: 'https://media.test.diydesignspace.com/uploads/assets/default/steel.jpg',
291
- base_door_6: 'https://media.test.diydesignspace.com/uploads/DoorColor/202105065453_36/texture/White1px.jpeg',
292
- base_fixed_drawer_door_6: 'https://media.test.diydesignspace.com/uploads/DoorColor/202105065453_36/texture/White1px.jpeg',
293
- base_drawer_6: 'https://media.test.diydesignspace.com/uploads/DoorColor/202105065453_36/texture/White1px.jpeg',
294
- base_drawer_door_6: 'https://media.test.diydesignspace.com/uploads/DoorColor/202105065453_36/texture/White1px.jpeg',
295
- door_handle_6: 'https://media.test.diydesignspace.com/uploads/assets/default/steel.jpg',
296
- fixed_drawer_door_handle_6: 'https://media.test.diydesignspace.com/uploads/assets/default/steel.jpg',
297
- drawer_door_handle_6: 'https://media.test.diydesignspace.com/uploads/assets/default/steel.jpg',
298
- base_door_7: 'https://media.test.diydesignspace.com/uploads/DoorColor/202105065453_36/texture/White1px.jpeg',
299
- base_fixed_drawer_door_7: 'https://media.test.diydesignspace.com/uploads/DoorColor/202105065453_36/texture/White1px.jpeg',
300
- base_drawer_7: 'https://media.test.diydesignspace.com/uploads/DoorColor/202105065453_36/texture/White1px.jpeg',
301
- base_drawer_door_7: 'https://media.test.diydesignspace.com/uploads/DoorColor/202105065453_36/texture/White1px.jpeg',
302
- door_handle_7: 'https://media.test.diydesignspace.com/uploads/assets/default/steel.jpg',
303
- fixed_drawer_door_handle_7: 'https://media.test.diydesignspace.com/uploads/assets/default/steel.jpg',
304
- drawer_door_handle_7: 'https://media.test.diydesignspace.com/uploads/assets/default/steel.jpg',
305
- base_door_8: 'https://media.test.diydesignspace.com/uploads/DoorColor/202105065453_36/texture/White1px.jpeg',
306
- base_fixed_drawer_door_8: 'https://media.test.diydesignspace.com/uploads/DoorColor/202105065453_36/texture/White1px.jpeg',
307
- base_drawer_8: 'https://media.test.diydesignspace.com/uploads/DoorColor/202105065453_36/texture/White1px.jpeg',
308
- base_drawer_door_8: 'https://media.test.diydesignspace.com/uploads/DoorColor/202105065453_36/texture/White1px.jpeg',
309
- door_handle_8: 'https://media.test.diydesignspace.com/uploads/assets/default/steel.jpg',
310
- fixed_drawer_door_handle_8: 'https://media.test.diydesignspace.com/uploads/assets/default/steel.jpg',
311
- drawer_door_handle_8: 'https://media.test.diydesignspace.com/uploads/assets/default/steel.jpg',
312
- base_door_9: 'https://media.test.diydesignspace.com/uploads/DoorColor/202105065453_36/texture/White1px.jpeg',
313
- base_fixed_drawer_door_9: 'https://media.test.diydesignspace.com/uploads/DoorColor/202105065453_36/texture/White1px.jpeg',
314
- base_drawer_9: 'https://media.test.diydesignspace.com/uploads/DoorColor/202105065453_36/texture/White1px.jpeg',
315
- base_drawer_door_9: 'https://media.test.diydesignspace.com/uploads/DoorColor/202105065453_36/texture/White1px.jpeg',
316
- door_handle_9: 'https://media.test.diydesignspace.com/uploads/assets/default/steel.jpg',
317
- fixed_drawer_door_handle_9: 'https://media.test.diydesignspace.com/uploads/assets/default/steel.jpg',
318
- drawer_door_handle_9: 'https://media.test.diydesignspace.com/uploads/assets/default/steel.jpg'
264
+ base: "https://media.test.diydesignspace.com/uploads/DoorColor/202105065453_36/texture/White1px.jpeg",
265
+ counttop: "https://media.test.diydesignspace.com/uploads/CountTop/202105074107_5/texture/Unique_Calcatta_texture.jpg",
266
+ interior: "http://127.0.0.1:4002/uploads/assets/default/maple.jpg",
267
+ base_door_1: "https://media.test.diydesignspace.com/uploads/DoorColor/202105065453_36/texture/White1px.jpeg",
268
+ base_fixed_drawer_door_1: "https://media.test.diydesignspace.com/uploads/DoorColor/202105065453_36/texture/White1px.jpeg",
269
+ base_drawer_1: "https://media.test.diydesignspace.com/uploads/DoorColor/202105065453_36/texture/White1px.jpeg",
270
+ base_drawer_door_1: "https://media.test.diydesignspace.com/uploads/DoorColor/202105065453_36/texture/White1px.jpeg",
271
+ door_handle_1: "http://127.0.0.1:4002/uploads/assets/default/steel.jpg",
272
+ fixed_drawer_door_handle_1: "http://127.0.0.1:4002/uploads/assets/default/steel.jpg",
273
+ drawer_door_handle_1: "http://127.0.0.1:4002/uploads/assets/default/steel.jpg",
274
+ base_door_2: "https://media.test.diydesignspace.com/uploads/DoorColor/202105065453_36/texture/White1px.jpeg",
275
+ base_fixed_drawer_door_2: "https://media.test.diydesignspace.com/uploads/DoorColor/202105065453_36/texture/White1px.jpeg",
276
+ base_drawer_2: "https://media.test.diydesignspace.com/uploads/DoorColor/202105065453_36/texture/White1px.jpeg",
277
+ base_drawer_door_2: "https://media.test.diydesignspace.com/uploads/DoorColor/202105065453_36/texture/White1px.jpeg",
278
+ door_handle_2: "http://127.0.0.1:4002/uploads/assets/default/steel.jpg",
279
+ fixed_drawer_door_handle_2: "http://127.0.0.1:4002/uploads/assets/default/steel.jpg",
280
+ drawer_door_handle_2: "http://127.0.0.1:4002/uploads/assets/default/steel.jpg",
281
+ base_door_3: "https://media.test.diydesignspace.com/uploads/DoorColor/202105065453_36/texture/White1px.jpeg",
282
+ base_fixed_drawer_door_3: "https://media.test.diydesignspace.com/uploads/DoorColor/202105065453_36/texture/White1px.jpeg",
283
+ base_drawer_3: "https://media.test.diydesignspace.com/uploads/DoorColor/202105065453_36/texture/White1px.jpeg",
284
+ base_drawer_door_3: "https://media.test.diydesignspace.com/uploads/DoorColor/202105065453_36/texture/White1px.jpeg",
285
+ door_handle_3: "http://127.0.0.1:4002/uploads/assets/default/steel.jpg",
286
+ fixed_drawer_door_handle_3: "http://127.0.0.1:4002/uploads/assets/default/steel.jpg",
287
+ drawer_door_handle_3: "http://127.0.0.1:4002/uploads/assets/default/steel.jpg",
288
+ base_door_4: "https://media.test.diydesignspace.com/uploads/DoorColor/202105065453_36/texture/White1px.jpeg",
289
+ base_fixed_drawer_door_4: "https://media.test.diydesignspace.com/uploads/DoorColor/202105065453_36/texture/White1px.jpeg",
290
+ base_drawer_4: "https://media.test.diydesignspace.com/uploads/DoorColor/202105065453_36/texture/White1px.jpeg",
291
+ base_drawer_door_4: "https://media.test.diydesignspace.com/uploads/DoorColor/202105065453_36/texture/White1px.jpeg",
292
+ door_handle_4: "http://127.0.0.1:4002/uploads/assets/default/steel.jpg",
293
+ fixed_drawer_door_handle_4: "http://127.0.0.1:4002/uploads/assets/default/steel.jpg",
294
+ drawer_door_handle_4: "http://127.0.0.1:4002/uploads/assets/default/steel.jpg",
295
+ base_door_5: "https://media.test.diydesignspace.com/uploads/DoorColor/202105065453_36/texture/White1px.jpeg",
296
+ base_fixed_drawer_door_5: "https://media.test.diydesignspace.com/uploads/DoorColor/202105065453_36/texture/White1px.jpeg",
297
+ base_drawer_5: "https://media.test.diydesignspace.com/uploads/DoorColor/202105065453_36/texture/White1px.jpeg",
298
+ base_drawer_door_5: "https://media.test.diydesignspace.com/uploads/DoorColor/202105065453_36/texture/White1px.jpeg",
299
+ door_handle_5: "http://127.0.0.1:4002/uploads/assets/default/steel.jpg",
300
+ fixed_drawer_door_handle_5: "http://127.0.0.1:4002/uploads/assets/default/steel.jpg",
301
+ drawer_door_handle_5: "http://127.0.0.1:4002/uploads/assets/default/steel.jpg",
302
+ base_door_6: "https://media.test.diydesignspace.com/uploads/DoorColor/202105065453_36/texture/White1px.jpeg",
303
+ base_fixed_drawer_door_6: "https://media.test.diydesignspace.com/uploads/DoorColor/202105065453_36/texture/White1px.jpeg",
304
+ base_drawer_6: "https://media.test.diydesignspace.com/uploads/DoorColor/202105065453_36/texture/White1px.jpeg",
305
+ base_drawer_door_6: "https://media.test.diydesignspace.com/uploads/DoorColor/202105065453_36/texture/White1px.jpeg",
306
+ door_handle_6: "http://127.0.0.1:4002/uploads/assets/default/steel.jpg",
307
+ fixed_drawer_door_handle_6: "http://127.0.0.1:4002/uploads/assets/default/steel.jpg",
308
+ drawer_door_handle_6: "http://127.0.0.1:4002/uploads/assets/default/steel.jpg",
309
+ base_door_7: "https://media.test.diydesignspace.com/uploads/DoorColor/202105065453_36/texture/White1px.jpeg",
310
+ base_fixed_drawer_door_7: "https://media.test.diydesignspace.com/uploads/DoorColor/202105065453_36/texture/White1px.jpeg",
311
+ base_drawer_7: "https://media.test.diydesignspace.com/uploads/DoorColor/202105065453_36/texture/White1px.jpeg",
312
+ base_drawer_door_7: "https://media.test.diydesignspace.com/uploads/DoorColor/202105065453_36/texture/White1px.jpeg",
313
+ door_handle_7: "http://127.0.0.1:4002/uploads/assets/default/steel.jpg",
314
+ fixed_drawer_door_handle_7: "http://127.0.0.1:4002/uploads/assets/default/steel.jpg",
315
+ drawer_door_handle_7: "http://127.0.0.1:4002/uploads/assets/default/steel.jpg",
316
+ base_door_8: "https://media.test.diydesignspace.com/uploads/DoorColor/202105065453_36/texture/White1px.jpeg",
317
+ base_fixed_drawer_door_8: "https://media.test.diydesignspace.com/uploads/DoorColor/202105065453_36/texture/White1px.jpeg",
318
+ base_drawer_8: "https://media.test.diydesignspace.com/uploads/DoorColor/202105065453_36/texture/White1px.jpeg",
319
+ base_drawer_door_8: "https://media.test.diydesignspace.com/uploads/DoorColor/202105065453_36/texture/White1px.jpeg",
320
+ door_handle_8: "http://127.0.0.1:4002/uploads/assets/default/steel.jpg",
321
+ fixed_drawer_door_handle_8: "http://127.0.0.1:4002/uploads/assets/default/steel.jpg",
322
+ drawer_door_handle_8: "http://127.0.0.1:4002/uploads/assets/default/steel.jpg",
323
+ base_door_9: "https://media.test.diydesignspace.com/uploads/DoorColor/202105065453_36/texture/White1px.jpeg",
324
+ base_fixed_drawer_door_9: "https://media.test.diydesignspace.com/uploads/DoorColor/202105065453_36/texture/White1px.jpeg",
325
+ base_drawer_9: "https://media.test.diydesignspace.com/uploads/DoorColor/202105065453_36/texture/White1px.jpeg",
326
+ base_drawer_door_9: "https://media.test.diydesignspace.com/uploads/DoorColor/202105065453_36/texture/White1px.jpeg",
327
+ door_handle_9: "http://127.0.0.1:4002/uploads/assets/default/steel.jpg",
328
+ fixed_drawer_door_handle_9: "http://127.0.0.1:4002/uploads/assets/default/steel.jpg",
329
+ drawer_door_handle_9: "http://127.0.0.1:4002/uploads/assets/default/steel.jpg"
319
330
  },
320
331
  installation_types: [125, 124]
321
332
  }
@@ -474,7 +485,7 @@ function WorkSpace(props) {
474
485
  // cm
475
486
  _length: 10,
476
487
  // inch
477
- _unit: 'in'
488
+ _unit: "in"
478
489
  })
479
490
  }
480
491
  };
@@ -487,7 +498,7 @@ function WorkSpace(props) {
487
498
  type: EXTERNAL_EVENT_DUPLICATE_ELEMENT,
488
499
  payload: {
489
500
  elementPrototype: ELEMENT_ITEM,
490
- elementId: '' // id of current operating element
501
+ elementId: "" // id of current operating element
491
502
  }
492
503
  };
493
504
  setExternalEvent(evt);
@@ -499,7 +510,7 @@ function WorkSpace(props) {
499
510
  type: EXTERNAL_EVENT_DELETE_ELEMENT,
500
511
  payload: {
501
512
  elementPrototype: ELEMENT_ITEM,
502
- elementId: '' // id of current operating element
513
+ elementId: "" // id of current operating element
503
514
  }
504
515
  };
505
516
  setExternalEvent(evt);
@@ -560,7 +571,7 @@ function WorkSpace(props) {
560
571
  type: EXTERNAL_EVENT_SET_FINISHING,
561
572
  payload: {
562
573
  category: FINISHING_TYPE.COUNTER_TOP,
563
- texture: 'https://media.test.diydesignspace.com/uploads/CountTop/202111302746_7/texture/Arabescato_texture.jpg'
574
+ texture: "https://media.test.diydesignspace.com/uploads/CountTop/202111302746_7/texture/Arabescato_texture.jpg"
564
575
  }
565
576
  };
566
577
  setExternalEvent(evt);
@@ -572,7 +583,7 @@ function WorkSpace(props) {
572
583
  type: EXTERNAL_EVENT_SET_FINISHING,
573
584
  payload: {
574
585
  category: FINISHING_TYPE.BACKSPLASH,
575
- texture: 'https://media.test.diydesignspace.com/uploads/CountTop/202305225249_14/texture/Unique_Marquina_texture.jpg'
586
+ texture: "https://media.test.diydesignspace.com/uploads/CountTop/202305225249_14/texture/Unique_Marquina_texture.jpg"
576
587
  }
577
588
  };
578
589
  setExternalEvent(evt);
@@ -584,7 +595,7 @@ function WorkSpace(props) {
584
595
  type: EXTERNAL_EVENT_SET_FINISHING,
585
596
  payload: {
586
597
  category: FINISHING_TYPE.FLOOR_STYLE,
587
- texture: 'https://media.test.diydesignspace.com/uploads/CountTop/202203163338_3/texture/oak-chestnut.webp'
598
+ texture: "https://media.test.diydesignspace.com/uploads/CountTop/202203163338_3/texture/oak-chestnut.webp"
588
599
  }
589
600
  };
590
601
  setExternalEvent(evt);
@@ -596,7 +607,7 @@ function WorkSpace(props) {
596
607
  type: EXTERNAL_EVENT_SET_FINISHING,
597
608
  payload: {
598
609
  category: FINISHING_TYPE.WALL_COLOR,
599
- color: '#bab863'
610
+ color: "#bab863"
600
611
  }
601
612
  };
602
613
  setExternalEvent(evt);
@@ -608,7 +619,7 @@ function WorkSpace(props) {
608
619
  type: EXTERNAL_EVENT_SET_FINISHING,
609
620
  payload: {
610
621
  category: FINISHING_TYPE.DOOR_HANDLE,
611
- gltf: 'https://media.test.diydesignspace.com/uploads/DoorHandle/202107294150_29/gltf/Handle1.gltf'
622
+ gltf: "https://media.test.diydesignspace.com/uploads/DoorHandle/202107294150_29/gltf/Handle1.gltf"
612
623
  }
613
624
  };
614
625
  setExternalEvent(evt);
@@ -635,7 +646,7 @@ function WorkSpace(props) {
635
646
  // cm
636
647
  _length: 27,
637
648
  // inch
638
- _unit: 'in'
649
+ _unit: "in"
639
650
  })
640
651
  }
641
652
  };
@@ -659,7 +670,90 @@ function WorkSpace(props) {
659
670
  };
660
671
  setExternalEvent(evt);
661
672
  }
662
- }, "Add room shape from width, height")), /*#__PURE__*/React.createElement(LiteRenderer, {
673
+ }, "Add room shape from width, height"), /*#__PURE__*/React.createElement(Button, {
674
+ actionType: "danger",
675
+ onClick: function onClick() {
676
+ var _tl = Math.floor(Math.random() * 50);
677
+ var tl = convert(_tl).from("in").to("cm");
678
+ var evt = {
679
+ type: EXTERNAL_EVENT_UPDATE_PROPERTY,
680
+ payload: {
681
+ propertyName: PROP_RESIZE_WIDTH,
682
+ value: new Map({
683
+ _length: _tl,
684
+ // inch
685
+ _unit: "in",
686
+ length: tl // cm
687
+ })
688
+ }
689
+ };
690
+ setExternalEvent(evt);
691
+ }
692
+ }, "random width"), /*#__PURE__*/React.createElement(Button, {
693
+ actionType: "primary",
694
+ onClick: function onClick() {
695
+ var evt = {
696
+ type: EXTERNAL_EVENT_ROTATE_PAN,
697
+ payload: {
698
+ rotateType: RIGHT
699
+ }
700
+ };
701
+ setExternalEvent(evt);
702
+ }
703
+ }, /*#__PURE__*/React.createElement("img", {
704
+ src: "/assets/img/svg/bottombar/spin-right.svg"
705
+ })), /*#__PURE__*/React.createElement(Button, {
706
+ actionType: "primary",
707
+ onClick: function onClick() {
708
+ var evt = {
709
+ type: EXTERNAL_EVENT_ROTATE_PAN,
710
+ payload: {
711
+ rotateType: LEFT
712
+ }
713
+ };
714
+ setExternalEvent(evt);
715
+ }
716
+ }, /*#__PURE__*/React.createElement("img", {
717
+ src: "/assets/img/svg/bottombar/spin-left.svg"
718
+ })), /*#__PURE__*/React.createElement(Button, {
719
+ actionType: "primary",
720
+ onClick: function onClick() {
721
+ var evt = {
722
+ type: EXTERNAL_EVENT_ROTATE_PAN,
723
+ payload: {
724
+ rotateType: TOP
725
+ }
726
+ };
727
+ setExternalEvent(evt);
728
+ }
729
+ }, /*#__PURE__*/React.createElement("img", {
730
+ src: "/assets/img/svg/bottombar/spin-up.svg"
731
+ })), /*#__PURE__*/React.createElement(Button, {
732
+ actionType: "primary",
733
+ onClick: function onClick() {
734
+ var evt = {
735
+ type: EXTERNAL_EVENT_ROTATE_PAN,
736
+ payload: {
737
+ rotateType: BOTTOM
738
+ }
739
+ };
740
+ setExternalEvent(evt);
741
+ }
742
+ }, /*#__PURE__*/React.createElement("img", {
743
+ src: "/assets/img/svg/bottombar/spin-down.svg"
744
+ })), /*#__PURE__*/React.createElement(Button, {
745
+ actionType: "danger",
746
+ onClick: function onClick() {
747
+ var evt = {
748
+ type: EXTERNAL_EVENT_PROJECT_SETTING,
749
+ payload: {
750
+ option: PROJECT_SETTING_OPTION.CHANGE_MEASUREMENT_UNIT,
751
+ value: "cm"
752
+ }
753
+ };
754
+ setExternalEvent(evt);
755
+ }
756
+ }, "Setting-MeasurementUnit-'cm'")), /*#__PURE__*/React.createElement(LiteRenderer, {
663
757
  width: props.width,
664
758
  height: props.height,
665
759
  configData: mockProps.configData,
@@ -677,7 +771,7 @@ function WorkSpace(props) {
677
771
  // externalEvent: { id?, type, payload } | null,
678
772
  // meta?: { filename?, lineno?, colno? }
679
773
  // }
680
- console.error('TOOL ERROR:', payload);
774
+ console.error("TOOL ERROR:", payload);
681
775
  }
682
776
  }));
683
777
  }
@@ -688,4 +782,4 @@ ReactDOM.render(/*#__PURE__*/React.createElement(ContainerDimensions, null, func
688
782
  width: width,
689
783
  height: height
690
784
  });
691
- }), document.getElementById('app') && document.getElementById('app'));
785
+ }), document.getElementById("app") && document.getElementById("app"));
package/es/index.js CHANGED
@@ -4,52 +4,142 @@ import _createClass from "@babel/runtime/helpers/esm/createClass";
4
4
  import _possibleConstructorReturn from "@babel/runtime/helpers/esm/possibleConstructorReturn";
5
5
  import _getPrototypeOf from "@babel/runtime/helpers/esm/getPrototypeOf";
6
6
  import _inherits from "@babel/runtime/helpers/esm/inherits";
7
+ import _defineProperty from "@babel/runtime/helpers/esm/defineProperty";
8
+ function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
9
+ function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
7
10
  function _callSuper(t, o, e) { return o = _getPrototypeOf(o), _possibleConstructorReturn(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], _getPrototypeOf(t).constructor) : o.apply(t, e)); }
8
11
  function _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); }
9
12
  import React from 'react';
10
13
  import ReactDOM from 'react-dom';
11
14
  import LiteRenderer from "./LiteRenderer";
15
+ import { createRoot } from 'react-dom/client';
12
16
  export function renderKitchenSimulator(container) {
13
17
  var props = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
14
- var setExternalEventFn = null;
15
-
16
- // Internal wrapper that exposes a state setter
18
+ var apiRef = null;
19
+ var idSeq = 0;
17
20
  var Wrapper = /*#__PURE__*/function (_React$Component) {
18
21
  function Wrapper(p) {
19
22
  var _this;
20
23
  _classCallCheck(this, Wrapper);
21
24
  _this = _callSuper(this, Wrapper, [p]);
25
+ _defineProperty(_this, "onExternalEventProcessed", function (eventId) {
26
+ // Resolve only if it matches the current event in flight
27
+ if (eventId === _this._currentId) {
28
+ try {
29
+ var _this$_currentResolve, _this2;
30
+ (_this$_currentResolve = (_this2 = _this)._currentResolve) === null || _this$_currentResolve === void 0 || _this$_currentResolve.call(_this2);
31
+ } finally {
32
+ _this._currentResolve = null;
33
+ _this._currentId = null;
34
+ _this.processing = false;
35
+ _this.processNext();
36
+ }
37
+ }
38
+ });
22
39
  _this.state = {
23
- externalEvent: p.externalEvent || null
40
+ externalEvent: null
41
+ };
42
+ _this.queue = [];
43
+ _this.processing = false;
44
+ _this._currentResolve = null;
45
+ _this._currentId = null;
46
+ apiRef = {
47
+ enqueueExternalEvent: function enqueueExternalEvent(ev) {
48
+ return _this.enqueue(ev);
49
+ }
24
50
  };
25
- setExternalEventFn = _this.setExternalEvent.bind(_this);
26
51
  return _this;
27
52
  }
28
53
  _inherits(Wrapper, _React$Component);
29
54
  return _createClass(Wrapper, [{
30
- key: "setExternalEvent",
31
- value: function setExternalEvent(newEvent) {
55
+ key: "enqueue",
56
+ value: function enqueue(ev) {
57
+ var _ev$waitForAckMs,
58
+ _this3 = this;
59
+ if (!ev) return Promise.resolve();
60
+ var id = ++idSeq;
61
+ var _resolve;
62
+ var promise = new Promise(function (res) {
63
+ return _resolve = res;
64
+ });
65
+
66
+ // failsafe: resolve after X ms no matter what (avoid host deadlock)
67
+ var timeoutMs = (_ev$waitForAckMs = ev === null || ev === void 0 ? void 0 : ev.waitForAckMs) !== null && _ev$waitForAckMs !== void 0 ? _ev$waitForAckMs : 15000;
68
+ var t = setTimeout(function () {
69
+ if (_this3._currentId === id) {
70
+ console.warn('External event ack timeout', id, ev);
71
+ _this3.onExternalEventProcessed(id); // force-drain
72
+ }
73
+ }, timeoutMs);
74
+ this.queue.push({
75
+ id: id,
76
+ ev: ev,
77
+ resolve: function resolve() {
78
+ clearTimeout(t);
79
+ _resolve();
80
+ }
81
+ });
82
+ if (!this.processing) this.processNext();
83
+ return promise;
84
+ }
85
+ }, {
86
+ key: "processNext",
87
+ value: function processNext() {
88
+ var _this4 = this;
89
+ var next = this.queue.shift();
90
+ if (!next) {
91
+ this.processing = false;
92
+ return;
93
+ }
94
+ this.processing = true;
95
+
96
+ // Tool assigns __eventId (do NOT rely on host for this)
97
+ var payload = _objectSpread(_objectSpread({}, next.ev), {}, {
98
+ __eventId: next.id
99
+ });
100
+
101
+ // Edge trigger: clear then set so downstream sees prop change reliably
32
102
  this.setState({
33
- externalEvent: newEvent
103
+ externalEvent: null
104
+ }, function () {
105
+ _this4._currentResolve = next.resolve;
106
+ _this4._currentId = next.id;
107
+ _this4.setState({
108
+ externalEvent: payload
109
+ });
34
110
  });
35
111
  }
36
112
  }, {
37
113
  key: "render",
38
114
  value: function render() {
39
115
  return /*#__PURE__*/React.createElement(LiteRenderer, _extends({}, this.props, {
40
- externalEvent: this.state.externalEvent
116
+ externalEvent: this.state.externalEvent,
117
+ onExternalEventProcessed: this.onExternalEventProcessed
41
118
  }));
42
119
  }
43
120
  }]);
44
- }(React.Component); // Mount once
45
- ReactDOM.render(/*#__PURE__*/React.createElement(Wrapper, props), container);
121
+ }(React.Component);
122
+ var ROOT_KEY = '__kitchenSimulatorRoot__';
123
+ var root = container[ROOT_KEY];
124
+ if (!root) {
125
+ root = createRoot(container);
126
+ container[ROOT_KEY] = root;
127
+ }
128
+ root.render(/*#__PURE__*/React.createElement(Wrapper, props), container);
46
129
  return {
47
- updateExternalEvent: function updateExternalEvent(newExternalEvent) {
48
- var _setExternalEventFn;
49
- (_setExternalEventFn = setExternalEventFn) === null || _setExternalEventFn === void 0 || _setExternalEventFn(newExternalEvent);
130
+ // Promise-based API (use this from host)
131
+ enqueueExternalEvent: function enqueueExternalEvent(ev) {
132
+ var _apiRef$enqueueExtern, _apiRef, _apiRef$enqueueExtern2;
133
+ return (_apiRef$enqueueExtern = (_apiRef = apiRef) === null || _apiRef === void 0 || (_apiRef$enqueueExtern2 = _apiRef.enqueueExternalEvent) === null || _apiRef$enqueueExtern2 === void 0 ? void 0 : _apiRef$enqueueExtern2.call(_apiRef, ev)) !== null && _apiRef$enqueueExtern !== void 0 ? _apiRef$enqueueExtern : Promise.resolve();
134
+ },
135
+ // old API still works, but no await possible
136
+ updateExternalEvent: function updateExternalEvent(ev) {
137
+ var _apiRef2, _apiRef2$enqueueExter;
138
+ (_apiRef2 = apiRef) === null || _apiRef2 === void 0 || (_apiRef2$enqueueExter = _apiRef2.enqueueExternalEvent) === null || _apiRef2$enqueueExter === void 0 || _apiRef2$enqueueExter.call(_apiRef2, ev);
50
139
  },
51
140
  unmount: function unmount() {
52
141
  ReactDOM.unmountComponentAtNode(container);
142
+ apiRef = null;
53
143
  }
54
144
  };
55
145
  }
@@ -13,7 +13,7 @@ export default function (state, action) {
13
13
  state = state.merge({
14
14
  sceneHistory: history.historyPush(state.sceneHistory, state.scene)
15
15
  });
16
- return Line.beginDrawingLine(state, action.layerID, action.x, action.y).updatedState;
16
+ return Line.beginDrawingLine(state, action.layerID, action.x, action.y, action.onInternalEvent).updatedState;
17
17
  case UPDATE_DRAWING_LINE:
18
18
  return Line.updateDrawingLine(state, action.x, action.y, action.relatedLines).updatedState;
19
19
  case STOP_DRAWING_LINE: