kitchen-simulator 4.4.1 → 4.4.2-dynamic-holes

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.
@@ -7,13 +7,9 @@ Object.defineProperty(exports, "__esModule", {
7
7
  });
8
8
  exports["default"] = LiteRenderer;
9
9
  var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
10
- var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
11
10
  var _objectWithoutProperties2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutProperties"));
12
- var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
13
- var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
14
- var _possibleConstructorReturn2 = _interopRequireDefault(require("@babel/runtime/helpers/possibleConstructorReturn"));
15
- var _getPrototypeOf2 = _interopRequireDefault(require("@babel/runtime/helpers/getPrototypeOf"));
16
- var _inherits2 = _interopRequireDefault(require("@babel/runtime/helpers/inherits"));
11
+ var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
12
+ var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
17
13
  var _react = _interopRequireWildcard(require("react"));
18
14
  var _propTypes = _interopRequireDefault(require("prop-types"));
19
15
  var _reactRedux = require("react-redux");
@@ -31,15 +27,13 @@ var Lines = _interopRequireWildcard(require("./catalog/lines/wall/planner-elemen
31
27
  var Holes = _interopRequireWildcard(require("./catalog/holes/export"));
32
28
  var _export2 = require("./plugins/export");
33
29
  var _LiteKitchenConfigurator = _interopRequireDefault(require("./LiteKitchenConfigurator"));
34
- var _excluded = ["width", "height", "configData", "externalEvent", "onInternalEvent", "onError"];
30
+ var _excluded = ["width", "height", "configData", "externalEvent", "onInternalEvent", "onError", "holes"];
35
31
  function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function _interopRequireWildcard(e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, "default": e }; if (null === e || "object" != _typeof(e) && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (var _t in e) "default" !== _t && {}.hasOwnProperty.call(e, _t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, _t)) && (i.get || i.set) ? o(f, _t, i) : f[_t] = e[_t]); return f; })(e, t); }
36
- 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; }
37
- 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) { (0, _defineProperty2["default"])(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; }
38
32
  function _createForOfIteratorHelper(r, e) { var t = "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (!t) { if (Array.isArray(r) || (t = _unsupportedIterableToArray(r)) || e && r && "number" == typeof r.length) { t && (r = t); var _n = 0, F = function F() {}; return { s: F, n: function n() { return _n >= r.length ? { done: !0 } : { done: !1, value: r[_n++] }; }, e: function e(r) { throw r; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var o, a = !0, u = !1; return { s: function s() { t = t.call(r); }, n: function n() { var r = t.next(); return a = r.done, r; }, e: function e(r) { u = !0, o = r; }, f: function f() { try { a || null == t["return"] || t["return"](); } finally { if (u) throw o; } } }; }
39
33
  function _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }
40
34
  function _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }
41
- function _callSuper(t, o, e) { return o = (0, _getPrototypeOf2["default"])(o), (0, _possibleConstructorReturn2["default"])(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], (0, _getPrototypeOf2["default"])(t).constructor) : o.apply(t, e)); }
42
- function _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); } // LiteRenderer.jsx
35
+ 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; }
36
+ 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) { (0, _defineProperty2["default"])(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; } // LiteRenderer.jsx
43
37
  var isBrowser = typeof window !== 'undefined';
44
38
  if (isBrowser) window.THREE = THREE;
45
39
 
@@ -87,48 +81,147 @@ function serializeError(err) {
87
81
  };
88
82
  }
89
83
  }
90
-
91
- /* ---------- Error Boundary that pushes into buffer ---------- */
92
- var ToolErrorBoundary = /*#__PURE__*/function (_React$Component) {
93
- function ToolErrorBoundary() {
94
- (0, _classCallCheck2["default"])(this, ToolErrorBoundary);
95
- return _callSuper(this, ToolErrorBoundary, arguments);
84
+ var INCH_TO_CM = 2.54;
85
+ var normalizeKey = function normalizeKey(value) {
86
+ return (value !== null && value !== void 0 ? value : '').toString().toLowerCase().replace(/[^a-z0-9]+/g, '');
87
+ };
88
+ var safeParseJson = function safeParseJson(value) {
89
+ if (!value) return null;
90
+ try {
91
+ return JSON.parse(value);
92
+ } catch (_unused3) {
93
+ return null;
96
94
  }
97
- (0, _inherits2["default"])(ToolErrorBoundary, _React$Component);
98
- return (0, _createClass2["default"])(ToolErrorBoundary, [{
99
- key: "componentDidCatch",
100
- value: function componentDidCatch(error, info) {
101
- var pushError = this.props.pushError;
102
- pushError({
103
- type: 'render-error',
104
- error: serializeError(error),
105
- info: {
106
- componentStack: info === null || info === void 0 ? void 0 : info.componentStack
107
- }
108
- });
109
- }
110
- }, {
111
- key: "render",
112
- value: function render() {
113
- return this.props.children;
95
+ };
96
+ var toCatalogLength = function toCatalogLength(value, prop) {
97
+ var _prop$defaultValue;
98
+ if (value == null) return null;
99
+ var unit = prop === null || prop === void 0 || (_prop$defaultValue = prop.defaultValue) === null || _prop$defaultValue === void 0 ? void 0 : _prop$defaultValue.unit;
100
+ if (unit && unit.toLowerCase() === 'in') return value;
101
+ return value * INCH_TO_CM;
102
+ };
103
+ var overrideLengthProperty = function overrideLengthProperty(prop, value) {
104
+ if (!prop || value == null) return prop;
105
+ var length = toCatalogLength(value, prop);
106
+ if (length == null) return prop;
107
+ return _objectSpread(_objectSpread({}, prop), {}, {
108
+ defaultValue: _objectSpread(_objectSpread({}, prop.defaultValue), {}, {
109
+ length: length
110
+ })
111
+ });
112
+ };
113
+ var findBaseHoleTemplate = function findBaseHoleTemplate(hole, templates) {
114
+ var target = normalizeKey(hole === null || hole === void 0 ? void 0 : hole.name);
115
+ if (!target) return null;
116
+ return templates.find(function (template) {
117
+ var _template$info, _template$info2;
118
+ var candidates = [template === null || template === void 0 ? void 0 : template.name, template === null || template === void 0 || (_template$info = template.info) === null || _template$info === void 0 ? void 0 : _template$info.title, template === null || template === void 0 || (_template$info2 = template.info) === null || _template$info2 === void 0 ? void 0 : _template$info2.description].map(normalizeKey);
119
+ return candidates.includes(target);
120
+ }) || null;
121
+ };
122
+ var buildHoleElementFromTemplate = function buildHoleElementFromTemplate(hole, base) {
123
+ var _base$info, _base$info2, _base$info3, _base$info4, _base$info5, _base$structure_json;
124
+ if (!hole || !base) return null;
125
+ var nextInfo = _objectSpread(_objectSpread({}, base.info), {}, {
126
+ title: hole.name || ((_base$info = base.info) === null || _base$info === void 0 ? void 0 : _base$info.title),
127
+ description: ((_base$info2 = base.info) === null || _base$info2 === void 0 ? void 0 : _base$info2.description) || hole.name || ((_base$info3 = base.info) === null || _base$info3 === void 0 ? void 0 : _base$info3.title),
128
+ image: hole.menu_thumbnail || ((_base$info4 = base.info) === null || _base$info4 === void 0 ? void 0 : _base$info4.image),
129
+ url: hole.gltf || ((_base$info5 = base.info) === null || _base$info5 === void 0 ? void 0 : _base$info5.url)
130
+ });
131
+ var nextProperties = _objectSpread({}, base.properties);
132
+ if (nextProperties.width) {
133
+ nextProperties.width = overrideLengthProperty(nextProperties.width, hole.width);
134
+ }
135
+ if (nextProperties.height) {
136
+ nextProperties.height = overrideLengthProperty(nextProperties.height, hole.height);
137
+ }
138
+ if (nextProperties.length) {
139
+ nextProperties.length = overrideLengthProperty(nextProperties.length, hole.length);
140
+ }
141
+ var customConfig = safeParseJson(hole.custom_config);
142
+ var customProps = (customConfig === null || customConfig === void 0 ? void 0 : customConfig.properties) || {};
143
+ Object.keys(customProps).forEach(function (key) {
144
+ if (!nextProperties[key]) return;
145
+ nextProperties[key] = overrideLengthProperty(nextProperties[key], customProps[key]);
146
+ });
147
+ return _objectSpread(_objectSpread({}, base), {}, {
148
+ name: hole.name || base.name,
149
+ info: nextInfo,
150
+ properties: nextProperties,
151
+ structure_json: _objectSpread(_objectSpread({}, base.structure_json || {}), {}, {
152
+ hole_id: hole.id || ((_base$structure_json = base.structure_json) === null || _base$structure_json === void 0 ? void 0 : _base$structure_json.hole_id)
153
+ })
154
+ });
155
+ };
156
+ var buildHoleElements = function buildHoleElements(holes) {
157
+ var categories = {
158
+ Doors: [],
159
+ Windows: []
160
+ };
161
+ var elements = [];
162
+ if (!Array.isArray(holes)) return {
163
+ elements: elements,
164
+ categories: categories
165
+ };
166
+ var templates = Object.values(Holes);
167
+ var usedNames = new Set();
168
+ holes.forEach(function (hole) {
169
+ var _base$info6;
170
+ if (!hole || hole.is_deleted) return;
171
+ var base = findBaseHoleTemplate(hole, templates);
172
+ if (!base) return;
173
+ var element = buildHoleElementFromTemplate(hole, base);
174
+ if (!element || !element.name || usedNames.has(element.name)) return;
175
+ usedNames.add(element.name);
176
+ elements.push(element);
177
+ var typeKey = normalizeKey(hole.type);
178
+ if (typeKey === 'window') {
179
+ categories.Windows.push(element);
180
+ } else if (typeKey === 'door') {
181
+ categories.Doors.push(element);
182
+ } else if ((_base$info6 = base.info) !== null && _base$info6 !== void 0 && (_base$info6 = _base$info6.tag) !== null && _base$info6 !== void 0 && _base$info6.includes('window')) {
183
+ categories.Windows.push(element);
184
+ } else {
185
+ categories.Doors.push(element);
114
186
  }
115
- }]);
116
- }(_react["default"].Component);
117
- ToolErrorBoundary.propTypes = {
118
- pushError: _propTypes["default"].func.isRequired,
119
- children: _propTypes["default"].any
187
+ });
188
+ return {
189
+ elements: elements,
190
+ categories: categories
191
+ };
120
192
  };
121
193
 
122
194
  // ----------------- catalog init -----------------
123
- function initCatalogOnce(catalog) {
195
+ function initCatalogOnce(catalog, holePayload) {
124
196
  if (!catalog) return;
125
- if (catalog.__ksInitialized) return;
126
- for (var x in Areas) catalog.registerElement(Areas[x]);
127
- for (var _x in Lines) catalog.registerElement(Lines[_x]);
128
- for (var _x2 in Holes) catalog.registerElement(Holes[_x2]);
129
- catalog.registerCategory('Windows', 'Windows', [Holes.windowClear, Holes.windowCross, Holes.windowDoubleHung, Holes.windowVertical]);
130
- catalog.registerCategory('Doors', 'Doors', [Holes.doorInterior, Holes.doorExterior, Holes.doorCloset, Holes.doorSliding, Holes.doorwayFramed, Holes.doorwayFrameless]);
131
- catalog.__ksInitialized = true;
197
+ if (!catalog.__ksInitialized) {
198
+ for (var x in Areas) catalog.registerElement(Areas[x]);
199
+ for (var _x in Lines) catalog.registerElement(Lines[_x]);
200
+ catalog.__ksInitialized = true;
201
+ }
202
+ var holeElements = (holePayload === null || holePayload === void 0 ? void 0 : holePayload.elements) || [];
203
+ holeElements.forEach(function (element) {
204
+ if (!catalog.hasElement(element.name)) {
205
+ console.log(element);
206
+ catalog.registerElement(element);
207
+ }
208
+ });
209
+ var categories = (holePayload === null || holePayload === void 0 ? void 0 : holePayload.categories) || {};
210
+ Object.entries(categories).forEach(function (_ref) {
211
+ var _ref2 = (0, _slicedToArray2["default"])(_ref, 2),
212
+ name = _ref2[0],
213
+ elements = _ref2[1];
214
+ if (!elements.length) return;
215
+ if (!catalog.hasCategory(name)) {
216
+ catalog.registerCategory(name, name, elements);
217
+ return;
218
+ }
219
+ elements.forEach(function (element) {
220
+ if (!catalog.categoryHasElement(name, element.name)) {
221
+ catalog.addToCategory(name, element);
222
+ }
223
+ });
224
+ });
132
225
  }
133
226
 
134
227
  // ----------------- store factory -----------------
@@ -172,7 +265,11 @@ function LiteRenderer(props) {
172
265
  externalEvent = props.externalEvent,
173
266
  onInternalEvent = props.onInternalEvent,
174
267
  onError = props.onError,
268
+ holes = props.holes,
175
269
  passThrough = (0, _objectWithoutProperties2["default"])(props, _excluded);
270
+ var holePayload = (0, _react.useMemo)(function () {
271
+ return buildHoleElements(holes);
272
+ }, [holes]);
176
273
 
177
274
  // ✅ instance-scoped store (no module singleton)
178
275
  var storeRef = (0, _react.useRef)(null);
@@ -182,8 +279,8 @@ function LiteRenderer(props) {
182
279
  var catalogRef = (0, _react.useRef)(null);
183
280
  if (!catalogRef.current) {
184
281
  catalogRef.current = new _catalog["default"]();
185
- initCatalogOnce(catalogRef.current);
186
282
  }
283
+ initCatalogOnce(catalogRef.current, holePayload);
187
284
 
188
285
  // ✅ stable plugins array
189
286
  var plugins = (0, _react.useMemo)(function () {
@@ -206,7 +303,7 @@ function LiteRenderer(props) {
206
303
  try {
207
304
  var maybeCleanup = p === null || p === void 0 ? void 0 : p(store, stateExtractor);
208
305
  if (typeof maybeCleanup === 'function') cleanups.push(maybeCleanup);
209
- } catch (_unused4) {
306
+ } catch (_unused5) {
210
307
  // keep prior behavior: do not crash
211
308
  }
212
309
  }
@@ -224,7 +321,7 @@ function LiteRenderer(props) {
224
321
  var fn = _step2.value;
225
322
  try {
226
323
  fn();
227
- } catch (_unused3) {}
324
+ } catch (_unused4) {}
228
325
  }
229
326
  } catch (err) {
230
327
  _iterator2.e(err);
@@ -255,7 +352,7 @@ function LiteRenderer(props) {
255
352
  };
256
353
  try {
257
354
  onError === null || onError === void 0 || onError(payload);
258
- } catch (_unused5) {}
355
+ } catch (_unused6) {}
259
356
  // eslint-disable-next-line no-console
260
357
  console.debug('[LiteRenderer:onError]', payload);
261
358
  lastEmittedRef.current = payload;
@@ -316,13 +413,11 @@ function LiteRenderer(props) {
316
413
  emit(lastExternalEventRef.current, last.errors);
317
414
  }
318
415
  }, [externalEvent, emit]);
319
- var _ref = configData || {},
320
- logoImg = _ref.logoImg,
321
- companyUrl = _ref.companyUrl;
416
+ var _ref3 = configData || {},
417
+ logoImg = _ref3.logoImg,
418
+ companyUrl = _ref3.companyUrl;
322
419
  return /*#__PURE__*/_react["default"].createElement(_AppContext["default"].Provider, null, /*#__PURE__*/_react["default"].createElement(_reactRedux.Provider, {
323
420
  store: storeRef.current
324
- }, /*#__PURE__*/_react["default"].createElement(ToolErrorBoundary, {
325
- pushError: pushError
326
421
  }, /*#__PURE__*/_react["default"].createElement(_LiteKitchenConfigurator["default"], (0, _extends2["default"])({
327
422
  catalog: catalogRef.current,
328
423
  width: width,
@@ -336,7 +431,7 @@ function LiteRenderer(props) {
336
431
  configData: configData,
337
432
  externalEvent: externalEvent,
338
433
  onInternalEvent: onInternalEvent
339
- }, passThrough)))));
434
+ }, passThrough))));
340
435
  }
341
436
  LiteRenderer.propTypes = {
342
437
  width: _propTypes["default"].oneOfType([_propTypes["default"].number, _propTypes["default"].string]),
@@ -356,6 +451,7 @@ LiteRenderer.propTypes = {
356
451
  externalEvent: _propTypes["default"].object,
357
452
  onInternalEvent: _propTypes["default"].func,
358
453
  onError: _propTypes["default"].func,
454
+ holes: _propTypes["default"].array,
359
455
  store: _propTypes["default"].object
360
456
  };
361
457
  module.exports = exports.default;
Binary file
package/lib/constants.js CHANGED
@@ -667,16 +667,16 @@ var PROJECT_SETTING_OPTION = exports.PROJECT_SETTING_OPTION = {
667
667
  CHANGE_MEASUREMENT_UNIT: CHANGE_MEASUREMENT_UNIT
668
668
  };
669
669
  var HOLE_NAMES = exports.HOLE_NAMES = {
670
- WINDOW_CLEAR: 'Window',
671
- WINDOW_CROSS: 'Cross Window',
672
- WINDOW_DOUBLE_HUNG: 'Double Hung Window',
673
- WINDOW_VERTICAL: 'window-vertical',
670
+ WINDOW_CLEAR: 'Clear',
671
+ WINDOW_CROSS: 'Cross',
672
+ WINDOW_DOUBLE_HUNG: 'Double Hung',
673
+ WINDOW_VERTICAL: 'Vertical',
674
674
  DOOR_CLOSET: 'Closet',
675
675
  DOOR_EXTERIOR: 'Exterior',
676
676
  DOOR_INTERIOR: 'Interior',
677
677
  DOOR_SLIDING: 'Sliding',
678
678
  DOOR_FRAMED: 'Framed Doorway',
679
- DOOR_FRAMELESS: 'FrameLess Doorway'
679
+ DOOR_FRAMELESS: 'Frameless Doorway'
680
680
  };
681
681
 
682
682
  // direction type
@@ -21,6 +21,7 @@ var _furnishingPayload = _interopRequireDefault(require("./mocks/furnishingPaylo
21
21
  var _rectangleShape = _interopRequireDefault(require("./mocks/rectangleShape.json"));
22
22
  var _moldingPayload = _interopRequireDefault(require("./mocks/moldingPayload.json"));
23
23
  var _replaceCabinetPayload = _interopRequireDefault(require("./mocks/replaceCabinetPayload.json"));
24
+ var _holesPayload = _interopRequireDefault(require("./mocks/holesPayload.json"));
24
25
  var _reactDom = _interopRequireDefault(require("react-dom"));
25
26
  var _LiteRenderer = _interopRequireDefault(require("./LiteRenderer"));
26
27
  var _antd = require("antd");
@@ -864,6 +865,7 @@ function WorkSpace(props) {
864
865
  logoImg: "/assets/logo.png",
865
866
  companyUrl: "https://example.com",
866
867
  toolbarButtons: [],
868
+ holes: _holesPayload["default"],
867
869
  externalEvent: externalEvent,
868
870
  onInternalEvent: onInternalEvent,
869
871
  onError: function onError(payload) {