kitchen-simulator 1.1.1-test.6 → 1.1.1-test.61

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 (337) hide show
  1. package/es/@history.js +10 -2
  2. package/es/AppContext.js +10 -3
  3. package/es/KitchenConfigurator.js +95 -106
  4. package/es/KitchenConfiguratorApp.js +145 -154
  5. package/es/actions/area-actions.js +12 -5
  6. package/es/actions/export.js +29 -12
  7. package/es/actions/groups-actions.js +45 -27
  8. package/es/actions/holes-actions.js +55 -34
  9. package/es/actions/items-actions.js +145 -94
  10. package/es/actions/lines-actions.js +36 -21
  11. package/es/actions/project-actions.js +145 -94
  12. package/es/actions/scene-actions.js +21 -11
  13. package/es/actions/vertices-actions.js +15 -7
  14. package/es/actions/viewer2d-actions.js +36 -21
  15. package/es/actions/viewer3d-actions.js +18 -9
  16. package/es/catalog/areas/area/planner-element.js +18 -8
  17. package/es/catalog/catalog.js +21 -24
  18. package/es/catalog/factories/area-factory-3d.js +31 -22
  19. package/es/catalog/factories/area-factory.js +20 -14
  20. package/es/catalog/factories/export.js +24 -6
  21. package/es/catalog/factories/wall-factory-3d.js +41 -31
  22. package/es/catalog/factories/wall-factory.js +31 -21
  23. package/es/catalog/holes/door-closet/planner-element.js +24 -15
  24. package/es/catalog/holes/door-double/planner-element.js +24 -15
  25. package/es/catalog/holes/door-exterior/planner-element.js +25 -16
  26. package/es/catalog/holes/door-interior/planner-element.js +25 -16
  27. package/es/catalog/holes/door-panic/planner-element.js +16 -7
  28. package/es/catalog/holes/door-panic-double/planner-element.js +24 -15
  29. package/es/catalog/holes/door-sliding/planner-element.js +25 -16
  30. package/es/catalog/holes/doorway-framed/planner-element.js +20 -11
  31. package/es/catalog/holes/doorway-frameless/planner-element.js +16 -7
  32. package/es/catalog/holes/export.js +97 -13
  33. package/es/catalog/holes/window-clear/planner-element.js +19 -10
  34. package/es/catalog/holes/window-cross/planner-element.js +19 -10
  35. package/es/catalog/holes/window-double-hung/planner-element.js +19 -10
  36. package/es/catalog/holes/window-vertical/planner-element.js +19 -10
  37. package/es/catalog/lines/wall/planner-element.js +21 -11
  38. package/es/catalog/molding/molding-dcm/planner-element.js +14 -5
  39. package/es/catalog/molding/molding-fbm/planner-element.js +14 -5
  40. package/es/catalog/molding/molding-lrm/planner-element.js +14 -5
  41. package/es/catalog/properties/export.js +80 -20
  42. package/es/catalog/properties/property-checkbox.js +84 -35
  43. package/es/catalog/properties/property-color.js +23 -16
  44. package/es/catalog/properties/property-enum.js +72 -28
  45. package/es/catalog/properties/property-hidden.js +16 -9
  46. package/es/catalog/properties/property-lenght-measure.js +45 -39
  47. package/es/catalog/properties/property-length-measure.js +84 -34
  48. package/es/catalog/properties/property-length-measure_hole.js +45 -39
  49. package/es/catalog/properties/property-number.js +24 -17
  50. package/es/catalog/properties/property-read-only.js +23 -16
  51. package/es/catalog/properties/property-string.js +23 -16
  52. package/es/catalog/properties/property-toggle.js +23 -16
  53. package/es/catalog/properties/shared-property-style.js +7 -1
  54. package/es/catalog/utils/FuseUtils.js +15 -11
  55. package/es/catalog/utils/exporter.js +15 -11
  56. package/es/catalog/utils/geom-utils.js +29 -13
  57. package/es/catalog/utils/item-loader.js +97 -91
  58. package/es/catalog/utils/load-obj.js +28 -20
  59. package/es/catalog/utils/mtl-loader.js +9 -3
  60. package/es/catalog/utils/obj-loader.js +9 -3
  61. package/es/class/FuseUtils.js +15 -11
  62. package/es/class/area.js +28 -26
  63. package/es/class/export.js +95 -23
  64. package/es/class/group.js +59 -62
  65. package/es/class/guide.js +21 -19
  66. package/es/class/hole.js +89 -88
  67. package/es/class/item.js +150 -155
  68. package/es/class/layer.js +65 -63
  69. package/es/class/line.js +143 -144
  70. package/es/class/project.js +98 -94
  71. package/es/class/vertex.js +35 -33
  72. package/es/components/content.js +29 -19
  73. package/es/components/disclaimer/disclaimer.js +80 -92
  74. package/es/components/export.js +32 -8
  75. package/es/components/style/button.js +31 -30
  76. package/es/components/style/cancel-button.js +14 -8
  77. package/es/components/style/content-container.js +16 -12
  78. package/es/components/style/content-title.js +20 -15
  79. package/es/components/style/delete-button.js +17 -9
  80. package/es/components/style/export.js +120 -30
  81. package/es/components/style/form-block.js +15 -12
  82. package/es/components/style/form-color-input.js +14 -8
  83. package/es/components/style/form-label.js +15 -12
  84. package/es/components/style/form-number-input.js +73 -47
  85. package/es/components/style/form-number-input_2.js +44 -42
  86. package/es/components/style/form-select.js +60 -14
  87. package/es/components/style/form-slider.js +38 -16
  88. package/es/components/style/form-submit-button.js +17 -9
  89. package/es/components/style/form-text-input.js +57 -37
  90. package/es/components/viewer2d/area.js +24 -17
  91. package/es/components/viewer2d/export.js +120 -30
  92. package/es/components/viewer2d/grids/grid-horizontal-streak.js +17 -11
  93. package/es/components/viewer2d/grids/grid-streak.js +17 -11
  94. package/es/components/viewer2d/grids/grid-vertical-streak.js +17 -11
  95. package/es/components/viewer2d/grids/grids.js +19 -15
  96. package/es/components/viewer2d/group.js +24 -15
  97. package/es/components/viewer2d/item.js +70 -68
  98. package/es/components/viewer2d/layer.js +30 -23
  99. package/es/components/viewer2d/line.js +111 -104
  100. package/es/components/viewer2d/ruler.js +29 -23
  101. package/es/components/viewer2d/rulerDist.js +28 -21
  102. package/es/components/viewer2d/rulerX.js +47 -45
  103. package/es/components/viewer2d/rulerY.js +45 -43
  104. package/es/components/viewer2d/scene.js +42 -46
  105. package/es/components/viewer2d/snap.js +22 -13
  106. package/es/components/viewer2d/state.js +27 -23
  107. package/es/components/viewer2d/utils.js +65 -21
  108. package/es/components/viewer2d/vertex.js +17 -8
  109. package/es/components/viewer2d/viewer2d.js +171 -166
  110. package/es/components/viewer3d/camera-controls-module/camera-controls.module.js +23 -24
  111. package/es/components/viewer3d/dcm.js +7 -1
  112. package/es/components/viewer3d/fbm.js +7 -1
  113. package/es/components/viewer3d/front3D.js +21 -17
  114. package/es/components/viewer3d/grid-creator.js +17 -8
  115. package/es/components/viewer3d/grids/grid-horizontal-streak.js +14 -6
  116. package/es/components/viewer3d/grids/grid-streak.js +13 -5
  117. package/es/components/viewer3d/grids/grid-vertical-streak.js +14 -6
  118. package/es/components/viewer3d/libs/first-person-controls.js +9 -2
  119. package/es/components/viewer3d/libs/helvetiker_regular.typeface.js +7 -1
  120. package/es/components/viewer3d/libs/mtl-loader.js +8 -2
  121. package/es/components/viewer3d/libs/obj-loader.js +8 -2
  122. package/es/components/viewer3d/libs/orbit-controls.js +12 -5
  123. package/es/components/viewer3d/libs/pointer-lock-controls.js +11 -4
  124. package/es/components/viewer3d/lrm.js +7 -1
  125. package/es/components/viewer3d/model.js +7 -1
  126. package/es/components/viewer3d/pointer-lock-navigation.js +10 -3
  127. package/es/components/viewer3d/ruler-utils/itemRect.js +25 -18
  128. package/es/components/viewer3d/ruler-utils/layer3D.js +66 -59
  129. package/es/components/viewer3d/ruler-utils/ruler3D.js +46 -42
  130. package/es/components/viewer3d/ruler-utils/scene3D.js +18 -11
  131. package/es/components/viewer3d/ruler-utils/state3D.js +11 -4
  132. package/es/components/viewer3d/scene-creator.js +227 -198
  133. package/es/components/viewer3d/three-memory-cleaner.js +12 -3
  134. package/es/components/viewer3d/viewer3d-first-person.js +46 -46
  135. package/es/components/viewer3d/viewer3d.js +208 -209
  136. package/es/constants.js +358 -349
  137. package/es/index.js +28 -15
  138. package/es/models.js +185 -183
  139. package/es/plugins/SVGLoader.js +53 -48
  140. package/es/plugins/autosave.js +9 -3
  141. package/es/plugins/console-debugger.js +12 -8
  142. package/es/plugins/export.js +32 -8
  143. package/es/plugins/keyboard.js +35 -29
  144. package/es/reducers/areas-reducer.js +13 -7
  145. package/es/reducers/export.js +96 -24
  146. package/es/reducers/groups-reducer.js +37 -31
  147. package/es/reducers/holes-reducer.js +49 -43
  148. package/es/reducers/items-reducer.js +112 -109
  149. package/es/reducers/lines-reducer.js +34 -28
  150. package/es/reducers/project-reducer.js +111 -105
  151. package/es/reducers/reducer.js +23 -16
  152. package/es/reducers/scene-reducer.js +21 -15
  153. package/es/reducers/user-reducer.js +11 -6
  154. package/es/reducers/vertices-reducer.js +17 -11
  155. package/es/reducers/viewer2d-reducer.js +24 -18
  156. package/es/reducers/viewer3d-reducer.js +22 -16
  157. package/es/shared-style.js +16 -10
  158. package/es/styles/export.js +11 -3
  159. package/es/translator/en.js +7 -1
  160. package/es/translator/it.js +7 -1
  161. package/es/translator/ru.js +7 -1
  162. package/es/translator/translator.js +19 -17
  163. package/es/utils/browser.js +9 -2
  164. package/es/utils/convert-units-lite.js +35 -0
  165. package/es/utils/email-validator.js +7 -1
  166. package/es/utils/export.js +46 -15
  167. package/es/utils/geometry.js +279 -191
  168. package/es/utils/get-edges-of-subgraphs.js +9 -1
  169. package/es/utils/graph-cycles.js +11 -9
  170. package/es/utils/graph-inner-cycles.js +18 -10
  171. package/es/utils/graph.js +17 -12
  172. package/es/utils/helper.js +63 -109
  173. package/es/utils/history.js +15 -8
  174. package/es/utils/id-broker.js +15 -12
  175. package/es/utils/logger.js +7 -1
  176. package/es/utils/math.js +12 -5
  177. package/es/utils/molding.js +177 -158
  178. package/es/utils/name-generator.js +13 -11
  179. package/es/utils/objects-utils.js +19 -7
  180. package/es/utils/phone-validator.js +7 -1
  181. package/es/utils/process-black-list.js +10 -6
  182. package/es/utils/react-if.js +12 -6
  183. package/es/utils/snap-scene.js +34 -32
  184. package/es/utils/snap.js +59 -51
  185. package/es/utils/summarizeCart.js +7 -1
  186. package/es/utils/threeCSG.es6.js +22 -17
  187. package/es/version.js +7 -1
  188. package/lib/@history.js +1 -1
  189. package/lib/AppContext.js +1 -1
  190. package/lib/KitchenConfigurator.js +68 -87
  191. package/lib/KitchenConfiguratorApp.js +94 -110
  192. package/lib/actions/export.js +1 -1
  193. package/lib/catalog/areas/area/planner-element.js +12 -8
  194. package/lib/catalog/catalog.js +7 -15
  195. package/lib/catalog/factories/area-factory-3d.js +1 -1
  196. package/lib/catalog/factories/area-factory.js +4 -6
  197. package/lib/catalog/factories/export.js +1 -1
  198. package/lib/catalog/factories/wall-factory-3d.js +4 -4
  199. package/lib/catalog/factories/wall-factory.js +2 -2
  200. package/lib/catalog/holes/door-closet/planner-element.js +2 -2
  201. package/lib/catalog/holes/door-double/planner-element.js +2 -2
  202. package/lib/catalog/holes/door-exterior/planner-element.js +2 -2
  203. package/lib/catalog/holes/door-interior/planner-element.js +2 -2
  204. package/lib/catalog/holes/door-panic/planner-element.js +2 -2
  205. package/lib/catalog/holes/door-panic-double/planner-element.js +2 -2
  206. package/lib/catalog/holes/door-sliding/planner-element.js +2 -2
  207. package/lib/catalog/holes/doorway-framed/planner-element.js +2 -2
  208. package/lib/catalog/holes/doorway-frameless/planner-element.js +2 -2
  209. package/lib/catalog/holes/export.js +14 -14
  210. package/lib/catalog/holes/window-clear/planner-element.js +2 -2
  211. package/lib/catalog/holes/window-cross/planner-element.js +2 -2
  212. package/lib/catalog/holes/window-double-hung/planner-element.js +2 -2
  213. package/lib/catalog/holes/window-vertical/planner-element.js +2 -2
  214. package/lib/catalog/lines/wall/planner-element.js +15 -11
  215. package/lib/catalog/molding/molding-dcm/planner-element.js +2 -2
  216. package/lib/catalog/molding/molding-fbm/planner-element.js +2 -2
  217. package/lib/catalog/molding/molding-lrm/planner-element.js +2 -2
  218. package/lib/catalog/properties/export.js +1 -1
  219. package/lib/catalog/properties/property-checkbox.js +66 -24
  220. package/lib/catalog/properties/property-color.js +1 -1
  221. package/lib/catalog/properties/property-enum.js +52 -15
  222. package/lib/catalog/properties/property-hidden.js +1 -1
  223. package/lib/catalog/properties/property-lenght-measure.js +8 -9
  224. package/lib/catalog/properties/property-length-measure.js +59 -16
  225. package/lib/catalog/properties/property-length-measure_hole.js +8 -9
  226. package/lib/catalog/properties/property-number.js +1 -1
  227. package/lib/catalog/properties/property-read-only.js +1 -1
  228. package/lib/catalog/properties/property-string.js +1 -1
  229. package/lib/catalog/properties/property-toggle.js +1 -1
  230. package/lib/catalog/utils/FuseUtils.js +8 -10
  231. package/lib/catalog/utils/exporter.js +8 -11
  232. package/lib/catalog/utils/geom-utils.js +1 -1
  233. package/lib/catalog/utils/item-loader.js +29 -35
  234. package/lib/catalog/utils/mtl-loader.js +7 -3
  235. package/lib/catalog/utils/obj-loader.js +7 -3
  236. package/lib/class/FuseUtils.js +8 -10
  237. package/lib/class/area.js +7 -10
  238. package/lib/class/export.js +1 -1
  239. package/lib/class/group.js +11 -19
  240. package/lib/class/guide.js +9 -12
  241. package/lib/class/hole.js +5 -8
  242. package/lib/class/item.js +23 -34
  243. package/lib/class/layer.js +5 -8
  244. package/lib/class/line.js +12 -19
  245. package/lib/class/project.js +8 -10
  246. package/lib/class/vertex.js +7 -10
  247. package/lib/components/content.js +3 -2
  248. package/lib/components/disclaimer/disclaimer.js +67 -87
  249. package/lib/components/export.js +1 -1
  250. package/lib/components/style/button.js +15 -21
  251. package/lib/components/style/cancel-button.js +5 -6
  252. package/lib/components/style/content-container.js +3 -6
  253. package/lib/components/style/content-title.js +8 -11
  254. package/lib/components/style/delete-button.js +6 -7
  255. package/lib/components/style/export.js +1 -1
  256. package/lib/components/style/form-block.js +7 -11
  257. package/lib/components/style/form-color-input.js +5 -6
  258. package/lib/components/style/form-label.js +7 -11
  259. package/lib/components/style/form-number-input.js +41 -22
  260. package/lib/components/style/form-number-input_2.js +13 -18
  261. package/lib/components/style/form-select.js +51 -14
  262. package/lib/components/style/form-slider.js +26 -11
  263. package/lib/components/style/form-submit-button.js +6 -7
  264. package/lib/components/style/form-text-input.js +44 -31
  265. package/lib/components/viewer2d/area.js +6 -6
  266. package/lib/components/viewer2d/export.js +1 -1
  267. package/lib/components/viewer2d/grids/grid-horizontal-streak.js +1 -2
  268. package/lib/components/viewer2d/grids/grid-streak.js +1 -2
  269. package/lib/components/viewer2d/grids/grid-vertical-streak.js +1 -2
  270. package/lib/components/viewer2d/grids/grids.js +4 -9
  271. package/lib/components/viewer2d/group.js +2 -2
  272. package/lib/components/viewer2d/item.js +12 -18
  273. package/lib/components/viewer2d/layer.js +1 -1
  274. package/lib/components/viewer2d/line.js +4 -7
  275. package/lib/components/viewer2d/ruler.js +7 -8
  276. package/lib/components/viewer2d/rulerDist.js +5 -5
  277. package/lib/components/viewer2d/rulerX.js +13 -18
  278. package/lib/components/viewer2d/rulerY.js +13 -18
  279. package/lib/components/viewer2d/scene.js +22 -33
  280. package/lib/components/viewer2d/snap.js +2 -2
  281. package/lib/components/viewer2d/state.js +5 -10
  282. package/lib/components/viewer2d/utils.js +35 -2
  283. package/lib/components/viewer2d/vertex.js +2 -2
  284. package/lib/components/viewer2d/viewer2d.js +38 -40
  285. package/lib/components/viewer3d/camera-controls-module/camera-controls.module.js +14 -20
  286. package/lib/components/viewer3d/front3D.js +4 -9
  287. package/lib/components/viewer3d/grid-creator.js +2 -2
  288. package/lib/components/viewer3d/grids/grid-horizontal-streak.js +1 -1
  289. package/lib/components/viewer3d/grids/grid-streak.js +1 -1
  290. package/lib/components/viewer3d/grids/grid-vertical-streak.js +1 -1
  291. package/lib/components/viewer3d/libs/mtl-loader.js +6 -2
  292. package/lib/components/viewer3d/libs/obj-loader.js +6 -2
  293. package/lib/components/viewer3d/libs/orbit-controls.js +10 -5
  294. package/lib/components/viewer3d/libs/pointer-lock-controls.js +9 -4
  295. package/lib/components/viewer3d/pointer-lock-navigation.js +1 -1
  296. package/lib/components/viewer3d/ruler-utils/itemRect.js +8 -8
  297. package/lib/components/viewer3d/ruler-utils/layer3D.js +33 -33
  298. package/lib/components/viewer3d/ruler-utils/ruler3D.js +3 -6
  299. package/lib/components/viewer3d/ruler-utils/scene3D.js +4 -5
  300. package/lib/components/viewer3d/ruler-utils/state3D.js +1 -1
  301. package/lib/components/viewer3d/scene-creator.js +40 -45
  302. package/lib/components/viewer3d/three-memory-cleaner.js +1 -1
  303. package/lib/components/viewer3d/viewer3d-first-person.js +11 -16
  304. package/lib/components/viewer3d/viewer3d.js +32 -37
  305. package/lib/index.js +22 -88
  306. package/lib/models.js +58 -63
  307. package/lib/plugins/console-debugger.js +3 -6
  308. package/lib/plugins/export.js +1 -1
  309. package/lib/reducers/export.js +1 -1
  310. package/lib/reducers/user-reducer.js +0 -1
  311. package/lib/reducers/viewer2d-reducer.js +3 -4
  312. package/lib/reducers/viewer3d-reducer.js +3 -4
  313. package/lib/styles/export.js +1 -1
  314. package/lib/translator/translator.js +5 -9
  315. package/lib/utils/convert-units-lite.js +35 -0
  316. package/lib/utils/export.js +2 -2
  317. package/lib/utils/geometry.js +20 -28
  318. package/lib/utils/get-edges-of-subgraphs.js +7 -1
  319. package/lib/utils/graph-cycles.js +9 -9
  320. package/lib/utils/graph-inner-cycles.js +1 -1
  321. package/lib/utils/graph.js +15 -12
  322. package/lib/utils/helper.js +14 -83
  323. package/lib/utils/history.js +1 -1
  324. package/lib/utils/id-broker.js +7 -10
  325. package/lib/utils/molding.js +66 -71
  326. package/lib/utils/name-generator.js +5 -8
  327. package/lib/utils/objects-utils.js +5 -3
  328. package/lib/utils/process-black-list.js +3 -5
  329. package/lib/utils/react-if.js +1 -1
  330. package/lib/utils/snap-scene.js +3 -7
  331. package/lib/utils/snap.js +22 -26
  332. package/lib/utils/threeCSG.es6.js +14 -14
  333. package/package.json +24 -54
  334. package/es/analytics/ga4.js +0 -191
  335. package/es/analytics/posthog.js +0 -60
  336. package/lib/analytics/ga4.js +0 -197
  337. package/lib/analytics/posthog.js +0 -68
@@ -1,10 +1,18 @@
1
1
  'use strict';
2
2
 
3
- function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); }
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+ var _typeof = require("@babel/runtime/helpers/typeof");
4
5
  Object.defineProperty(exports, "__esModule", {
5
6
  value: true
6
7
  });
7
8
  exports["default"] = void 0;
9
+ var _readOnlyError2 = _interopRequireDefault(require("@babel/runtime/helpers/readOnlyError"));
10
+ var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
11
+ var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
12
+ var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
13
+ var _possibleConstructorReturn2 = _interopRequireDefault(require("@babel/runtime/helpers/possibleConstructorReturn"));
14
+ var _getPrototypeOf2 = _interopRequireDefault(require("@babel/runtime/helpers/getPrototypeOf"));
15
+ var _inherits2 = _interopRequireDefault(require("@babel/runtime/helpers/inherits"));
8
16
  var _react = _interopRequireDefault(require("react"));
9
17
  var _propTypes = _interopRequireDefault(require("prop-types"));
10
18
  var _reactDom = _interopRequireDefault(require("react-dom"));
@@ -14,9 +22,8 @@ var _threeMemoryCleaner = require("./three-memory-cleaner");
14
22
  var _immutablediff = _interopRequireDefault(require("immutablediff"));
15
23
  var SharedStyle = _interopRequireWildcard(require("../../shared-style"));
16
24
  var _constants = require("../../constants");
17
- var _util = require("util");
18
25
  var _geometry = require("../../utils/geometry");
19
- var _convertUnits = _interopRequireDefault(require("convert-units"));
26
+ var _convertUnitsLite = require("../../utils/convert-units-lite");
20
27
  var _export = require("../../utils/export");
21
28
  var _helper = require("../../utils/helper");
22
29
  var _RGBELoader = require("three/examples/jsm/loaders/RGBELoader");
@@ -24,30 +31,17 @@ var _cameraControls = _interopRequireDefault(require("camera-controls"));
24
31
  var _utils = require("../viewer2d/utils");
25
32
  var _objectsUtils = require("../../utils/objects-utils");
26
33
  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); }
27
- function _interopRequireDefault(e) { return e && e.__esModule ? e : { "default": e }; }
28
- function _readOnlyError(r) { throw new TypeError('"' + r + '" is read-only'); }
29
34
  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; }
30
- 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; }
31
- function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
32
- function _classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError("Cannot call a class as a function"); }
33
- function _defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, "value" in o && (o.writable = !0), Object.defineProperty(e, _toPropertyKey(o.key), o); } }
34
- function _createClass(e, r, t) { return r && _defineProperties(e.prototype, r), t && _defineProperties(e, t), Object.defineProperty(e, "prototype", { writable: !1 }), e; }
35
- function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; }
36
- function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
37
- function _callSuper(t, o, e) { return o = _getPrototypeOf(o), _possibleConstructorReturn(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], _getPrototypeOf(t).constructor) : o.apply(t, e)); }
38
- function _possibleConstructorReturn(t, e) { if (e && ("object" == _typeof(e) || "function" == typeof e)) return e; if (void 0 !== e) throw new TypeError("Derived constructors may only return object or undefined"); return _assertThisInitialized(t); }
39
- function _assertThisInitialized(e) { if (void 0 === e) throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); return e; }
35
+ 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; }
36
+ 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)); }
40
37
  function _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); }
41
- function _getPrototypeOf(t) { return _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function (t) { return t.__proto__ || Object.getPrototypeOf(t); }, _getPrototypeOf(t); }
42
- function _inherits(t, e) { if ("function" != typeof e && null !== e) throw new TypeError("Super expression must either be null or a function"); t.prototype = Object.create(e && e.prototype, { constructor: { value: t, writable: !0, configurable: !0 } }), Object.defineProperty(t, "prototype", { writable: !1 }), e && _setPrototypeOf(t, e); }
43
- function _setPrototypeOf(t, e) { return _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function (t, e) { return t.__proto__ = e, t; }, _setPrototypeOf(t, e); }
44
38
  _cameraControls["default"].install({
45
39
  THREE: Three
46
40
  });
47
41
  var Scene3DViewer = exports["default"] = /*#__PURE__*/function (_React$Component) {
48
42
  function Scene3DViewer(props) {
49
43
  var _this;
50
- _classCallCheck(this, Scene3DViewer);
44
+ (0, _classCallCheck2["default"])(this, Scene3DViewer);
51
45
  _this = _callSuper(this, Scene3DViewer, [props]);
52
46
  _this.state = {
53
47
  isLoading: false,
@@ -109,8 +103,8 @@ var Scene3DViewer = exports["default"] = /*#__PURE__*/function (_React$Component
109
103
  _this.renderer.domElement.style.display = 'none';
110
104
  return _this;
111
105
  }
112
- _inherits(Scene3DViewer, _React$Component);
113
- return _createClass(Scene3DViewer, [{
106
+ (0, _inherits2["default"])(Scene3DViewer, _React$Component);
107
+ return (0, _createClass2["default"])(Scene3DViewer, [{
114
108
  key: "componentDidMount",
115
109
  value: function componentDidMount(nextProps) {
116
110
  var _this2 = this;
@@ -289,7 +283,7 @@ var Scene3DViewer = exports["default"] = /*#__PURE__*/function (_React$Component
289
283
  realVec.push(vec);
290
284
  });
291
285
  if (aVertices.includes(realVec[0]) && aVertices.includes(realVec[1])) {
292
- height = (0, _convertUnits["default"])(layer.ceilHeight).from(layer.unit).to(_constants.UNIT_CENTIMETER);
286
+ height = (0, _convertUnitsLite.convert)(layer.ceilHeight).from(layer.unit).to(_constants.UNIT_CENTIMETER);
293
287
  // height = data.properties.getIn(['height', 'length']);
294
288
  return 1; // break
295
289
  }
@@ -662,6 +656,7 @@ var Scene3DViewer = exports["default"] = /*#__PURE__*/function (_React$Component
662
656
  item: _item2,
663
657
  cat: ocat
664
658
  };
659
+ console.log('currentItem =>', currentItem);
665
660
  if (_export.GeometryUtils.needSnap(currentItem, otherItem) && otherItem.cat.type != 'cabinet') {
666
661
  var tRot = _item2.rotation;
667
662
  var tPos = new Three.Vector2(_item2.x, _item2.y);
@@ -834,7 +829,7 @@ var Scene3DViewer = exports["default"] = /*#__PURE__*/function (_React$Component
834
829
  var tRot = layer.getIn(['items', target.userData.itemId]) ? layer.getIn(['items', target.userData.itemId]).rotation : 0;
835
830
  var item = layer.getIn(['items', source.userData.itemId]);
836
831
  var layoutType = item.layoutpos;
837
- var altitudeLength = (0, _convertUnits["default"])(item.properties.getIn(['altitude', '_length'])).from('in').to('cm');
832
+ var altitudeLength = (0, _convertUnitsLite.convert)(item.properties.getIn(['altitude', '_length'])).from('in').to('cm');
838
833
  var sBounding = source.children[0].userData;
839
834
  var tBounding = target.children[0].userData;
840
835
  var tPos = target.position.clone();
@@ -935,7 +930,7 @@ var Scene3DViewer = exports["default"] = /*#__PURE__*/function (_React$Component
935
930
  return;
936
931
  } else {
937
932
  var _layoutType = _item3.layoutpos;
938
- var _altitudeLength = (0, _convertUnits["default"])(_item3.properties.getIn(['altitude', '_length'])).from('in').to('cm');
933
+ var _altitudeLength = (0, _convertUnitsLite.convert)(_item3.properties.getIn(['altitude', '_length'])).from('in').to('cm');
939
934
  var _sBounding = source.children[0].userData;
940
935
  var _width = _sBounding.max.x - _sBounding.min.x;
941
936
  var _height = _sBounding.max.y - _sBounding.min.y;
@@ -1200,7 +1195,7 @@ var Scene3DViewer = exports["default"] = /*#__PURE__*/function (_React$Component
1200
1195
  var properties = allItemRect.cur.itemInfo.properties;
1201
1196
  altitude = properties.getIn(['altitude', '_length']);
1202
1197
  var unit = properties.getIn(['altitude', '_unit']) || 'in';
1203
- altitude = (0, _convertUnits["default"])(altitude).from(unit).to(_this2.props.state.scene.unit);
1198
+ altitude = (0, _convertUnitsLite.convert)(altitude).from(unit).to(_this2.props.state.scene.unit);
1204
1199
  }
1205
1200
  getPoint(event, altitude);
1206
1201
  var state = _this2.props.state;
@@ -1292,13 +1287,13 @@ var Scene3DViewer = exports["default"] = /*#__PURE__*/function (_React$Component
1292
1287
  var _properties = allItemRect.cur.itemInfo.properties;
1293
1288
  alti = _properties.getIn(['altitude', '_length']);
1294
1289
  var _unit = _properties.getIn(['altitude', '_unit']) || 'in';
1295
- alti = (0, _convertUnits["default"])(alti).from(_unit).to(_this2.props.state.scene.unit);
1290
+ alti = (0, _convertUnitsLite.convert)(alti).from(_unit).to(_this2.props.state.scene.unit);
1296
1291
  }
1297
1292
  getPoint({
1298
1293
  offsetX: event.offsetX - 50,
1299
1294
  offsetY: event.offsetY
1300
1295
  }, alti);
1301
- if ((0, _util.isUndefined)(selectedItem)) return;
1296
+ if (!selectedItem) return;
1302
1297
  var selItem = _this2.props.state.scene.layers.get(selectedObject.layerID).items.get(selectedObject.itemID);
1303
1298
  lastAngle = 0;
1304
1299
  angleObj.position.set(planData.plan.position.x + Point.x, selItem.category === 'lighting' ? -planData.plan.position.y - selItem.properties.get('height').get('length') : selItem.properties.get('altitude').get('length') + planData.plan.position.y, planData.plan.position.z - Point.y);
@@ -1356,7 +1351,7 @@ var Scene3DViewer = exports["default"] = /*#__PURE__*/function (_React$Component
1356
1351
  var properties = allItemRect.cur.itemInfo.properties;
1357
1352
  altitude = properties.getIn(['altitude', '_length']);
1358
1353
  var unit = properties.getIn(['altitude', '_unit']) || 'in';
1359
- altitude = (0, _convertUnits["default"])(altitude).from(unit).to(_this2.props.state.scene.unit);
1354
+ altitude = (0, _convertUnitsLite.convert)(altitude).from(unit).to(_this2.props.state.scene.unit);
1360
1355
  }
1361
1356
  scene3D.remove(angleObj);
1362
1357
  scene3D.remove(toolObj);
@@ -1469,7 +1464,7 @@ var Scene3DViewer = exports["default"] = /*#__PURE__*/function (_React$Component
1469
1464
  setTimeout(function () {
1470
1465
  (0, _sceneCreator.getDistances)(layer);
1471
1466
  var selectedItem = planData.sceneGraph.layers[selectedObject.layerID].items[selectedObject.itemID];
1472
- if ((0, _util.isUndefined)(selectedItem)) return;
1467
+ if (!selectedItem) return;
1473
1468
  var selItem = _this2.props.state.scene.layers.get(selectedObject.layerID).items.get(selectedObject.itemID);
1474
1469
  var itemPos = selectedItem.position.clone();
1475
1470
  if (intersects[_i10].object.parent && intersects[_i10].object.parent.parent.userData.itemId === selectedItem.userData.itemId) {
@@ -1545,13 +1540,13 @@ var Scene3DViewer = exports["default"] = /*#__PURE__*/function (_React$Component
1545
1540
  var _properties2 = allItemRect.cur.itemInfo.properties;
1546
1541
  alti = _properties2.getIn(['altitude', '_length']);
1547
1542
  var _unit2 = _properties2.getIn(['altitude', '_unit']) || 'in';
1548
- alti = (0, _convertUnits["default"])(alti).from(_unit2).to(_this2.props.state.scene.unit);
1543
+ alti = (0, _convertUnitsLite.convert)(alti).from(_unit2).to(_this2.props.state.scene.unit);
1549
1544
  }
1550
1545
  getPoint(event, alti);
1551
1546
  if (bRotate) {
1552
1547
  var _intersects$_i;
1553
1548
  var selectedItem = planData.sceneGraph.layers[selectedObject.layerID].items[selectedObject.itemID];
1554
- if ((0, _util.isUndefined)(selectedItem)) return;
1549
+ if (!selectedItem) return;
1555
1550
  var selItem = _this2.props.state.scene.layers.get(selectedObject.layerID).items.get(selectedObject.itemID);
1556
1551
  var itemPos = selectedItem.position.clone();
1557
1552
  if (((_intersects$_i = intersects[_i10]) === null || _intersects$_i === void 0 || (_intersects$_i = _intersects$_i.object) === null || _intersects$_i === void 0 || (_intersects$_i = _intersects$_i.parent) === null || _intersects$_i === void 0 || (_intersects$_i = _intersects$_i.parent) === null || _intersects$_i === void 0 || (_intersects$_i = _intersects$_i.userData) === null || _intersects$_i === void 0 ? void 0 : _intersects$_i.itemId) === selectedItem.userData.itemId) {
@@ -1569,7 +1564,7 @@ var Scene3DViewer = exports["default"] = /*#__PURE__*/function (_React$Component
1569
1564
  if (bMove) {
1570
1565
  bMove = false;
1571
1566
  var _selectedItem = planData.sceneGraph.layers[selectedObject.layerID].items[selectedObject.itemID];
1572
- if ((0, _util.isUndefined)(_selectedItem)) return;
1567
+ if (!_selectedItem) return;
1573
1568
  var _selItem = _this2.props.state.scene.layers.get(selectedObject.layerID).items.get(selectedObject.itemID);
1574
1569
  var _itemPos = _selectedItem.position.clone();
1575
1570
  if (intersects[_i10].object.parent.parent.userData.itemId === _selectedItem.userData.itemId) {
@@ -1618,7 +1613,7 @@ var Scene3DViewer = exports["default"] = /*#__PURE__*/function (_React$Component
1618
1613
  var properties = allItemRect.cur.itemInfo.properties;
1619
1614
  altitude = properties.getIn(['altitude', '_length']);
1620
1615
  var unit = properties.getIn(['altitude', '_unit']) || 'in';
1621
- altitude = (0, _convertUnits["default"])(altitude).from(unit).to(_this2.props.state.scene.unit);
1616
+ altitude = (0, _convertUnitsLite.convert)(altitude).from(unit).to(_this2.props.state.scene.unit);
1622
1617
  }
1623
1618
  if (_this2.props.state.mode === _constants.MODE_DRAWING_HOLE_3D) {
1624
1619
  gridPlanOrigin = gridPlane.position;
@@ -2049,7 +2044,7 @@ var Scene3DViewer = exports["default"] = /*#__PURE__*/function (_React$Component
2049
2044
  setTimeout(function () {
2050
2045
  try {
2051
2046
  currentObject = planData.sceneGraph.layers[selectedObject.layerID].items[selectedObject.itemID];
2052
- if ((0, _util.isUndefined)(currentObject)) return;
2047
+ if (!currentObject) return;
2053
2048
  var selItem = _this2.props.state.scene.layers.get(selectedObject.layerID).items.get(selectedObject.itemID);
2054
2049
  var itemPos = currentObject.position.clone();
2055
2050
  toolObj.position.set(planData.plan.position.x + itemPos.x, selItem.category === 'lighting' ? -planData.plan.position.y - selItem.properties.get('height').get('length') : planData.plan.position.y + currentObject.children[0].position.y, planData.plan.position.z + itemPos.z);
@@ -2078,7 +2073,7 @@ var Scene3DViewer = exports["default"] = /*#__PURE__*/function (_React$Component
2078
2073
  // In elevation view, set Orthographic camera's position, angle and rotation about selected line
2079
2074
  var layers = scene.layers;
2080
2075
  var selectedLayer = layers.get(scene.selectedLayer);
2081
- var ceilHeight = (0, _convertUnits["default"])(selectedLayer.ceilHeight).from(selectedLayer.unit).to(scene.unit);
2076
+ var ceilHeight = (0, _convertUnitsLite.convert)(selectedLayer.ceilHeight).from(selectedLayer.unit).to(scene.unit);
2082
2077
  var lines = [];
2083
2078
  var selectedLine = selectedLayer.lines.get(selectedLayer.selected.lines.toJS()[0]);
2084
2079
  var vertex0 = selectedLayer.vertices.get(selectedLine.vertices.get(0));
@@ -2215,7 +2210,7 @@ var Scene3DViewer = exports["default"] = /*#__PURE__*/function (_React$Component
2215
2210
  var indexAttribute = line.geometry.getIndex();
2216
2211
  var firstFaceIndices = undefined;
2217
2212
  if (indexAttribute && indexAttribute.length > 0) {
2218
- [indexAttribute.getX(0), indexAttribute.getX(1), indexAttribute.getX(2)], _readOnlyError("firstFaceIndices");
2213
+ [indexAttribute.getX(0), indexAttribute.getX(1), indexAttribute.getX(2)], (0, _readOnlyError2["default"])("firstFaceIndices");
2219
2214
  }
2220
2215
  if (firstFaceIndices == undefined) return;
2221
2216
  // normal vector of the line
@@ -2312,7 +2307,7 @@ var Scene3DViewer = exports["default"] = /*#__PURE__*/function (_React$Component
2312
2307
  var width = nextProps.width,
2313
2308
  height = nextProps.height;
2314
2309
  var selectedLayer = nextProps.state.getIn(['scene', 'layers', nextProps.state.scene.selectedLayer]);
2315
- var ceilHeight = (0, _convertUnits["default"])(selectedLayer.ceilHeight).from(selectedLayer.unit).to(nextProps.state.scene.unit);
2310
+ var ceilHeight = (0, _convertUnitsLite.convert)(selectedLayer.ceilHeight).from(selectedLayer.unit).to(nextProps.state.scene.unit);
2316
2311
  var actions = {
2317
2312
  areaActions: this.context.areaActions,
2318
2313
  holesActions: this.context.holesActions,
package/lib/index.js CHANGED
@@ -1,94 +1,28 @@
1
1
  "use strict";
2
2
 
3
- function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); }
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
4
  Object.defineProperty(exports, "__esModule", {
5
5
  value: true
6
6
  });
7
- Object.defineProperty(exports, "Catalog", {
8
- enumerable: true,
9
- get: function get() {
10
- return _catalog["default"];
11
- }
12
- });
13
- Object.defineProperty(exports, "ElementsFactories", {
14
- enumerable: true,
15
- get: function get() {
16
- return _export6["default"];
17
- }
18
- });
19
- Object.defineProperty(exports, "KitchenConfiguratorActions", {
20
- enumerable: true,
21
- get: function get() {
22
- return _export3["default"];
23
- }
24
- });
25
- Object.defineProperty(exports, "KitchenConfiguratorApp", {
26
- enumerable: true,
27
- get: function get() {
28
- return _KitchenConfiguratorApp["default"];
29
- }
30
- });
31
- Object.defineProperty(exports, "KitchenConfiguratorClasses", {
32
- enumerable: true,
33
- get: function get() {
34
- return _export5["default"];
35
- }
36
- });
37
- Object.defineProperty(exports, "KitchenConfiguratorComponents", {
38
- enumerable: true,
39
- get: function get() {
40
- return _export2["default"];
41
- }
42
- });
43
- exports.KitchenConfiguratorConstants = void 0;
44
- Object.defineProperty(exports, "KitchenConfiguratorReducers", {
45
- enumerable: true,
46
- get: function get() {
47
- return _export4["default"];
48
- }
49
- });
50
- exports.KitchenConfiguratorSharedStyle = void 0;
51
- Object.defineProperty(exports, "KitchenConfiguratorUtils", {
52
- enumerable: true,
53
- get: function get() {
54
- return _export7["default"];
55
- }
56
- });
57
- exports.Models = void 0;
58
- Object.defineProperty(exports, "Plugins", {
59
- enumerable: true,
60
- get: function get() {
61
- return _export["default"];
62
- }
63
- });
64
- Object.defineProperty(exports, "Translator", {
65
- enumerable: true,
66
- get: function get() {
67
- return _translator["default"];
68
- }
69
- });
70
- Object.defineProperty(exports, "reducer", {
71
- enumerable: true,
72
- get: function get() {
73
- return _reducer["default"];
74
- }
75
- });
76
- var _catalog = _interopRequireDefault(require("./catalog/catalog"));
77
- var _translator = _interopRequireDefault(require("./translator/translator"));
78
- var Models = _interopRequireWildcard(require("./models"));
79
- exports.Models = Models;
80
- var _reducer = _interopRequireDefault(require("./reducers/reducer"));
7
+ exports["default"] = renderKitchenSimulator;
8
+ var _react = _interopRequireDefault(require("react"));
9
+ var _client = _interopRequireDefault(require("react-dom/client"));
81
10
  var _KitchenConfiguratorApp = _interopRequireDefault(require("./KitchenConfiguratorApp"));
82
- var _export = _interopRequireDefault(require("./plugins/export"));
83
- var KitchenConfiguratorConstants = _interopRequireWildcard(require("./constants"));
84
- exports.KitchenConfiguratorConstants = KitchenConfiguratorConstants;
85
- var KitchenConfiguratorSharedStyle = _interopRequireWildcard(require("./shared-style"));
86
- exports.KitchenConfiguratorSharedStyle = KitchenConfiguratorSharedStyle;
87
- var _export2 = _interopRequireDefault(require("./components/export"));
88
- var _export3 = _interopRequireDefault(require("./actions/export"));
89
- var _export4 = _interopRequireDefault(require("./reducers/export"));
90
- var _export5 = _interopRequireDefault(require("./class/export"));
91
- var _export6 = _interopRequireDefault(require("./catalog/factories/export"));
92
- var _export7 = _interopRequireDefault(require("./utils/export"));
93
- 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); }
94
- function _interopRequireDefault(e) { return e && e.__esModule ? e : { "default": e }; }
11
+ // src/index.js
12
+
13
+ /**
14
+ * Mounts the Kitchen Configurator micro-frontend into a DOM container.
15
+ * Returns an unmount() function for cleanup.
16
+ */
17
+ function renderKitchenSimulator(container) {
18
+ var props = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
19
+ if (!container) throw new Error('Container element is required');
20
+ var root = _client["default"].createRoot(container);
21
+ root.render(/*#__PURE__*/_react["default"].createElement(_KitchenConfiguratorApp["default"], props));
22
+ return {
23
+ root: root,
24
+ unmount: function unmount() {
25
+ root.unmount();
26
+ }
27
+ };
28
+ }