hart-estate-widget 0.0.66 → 0.0.69

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 (45) hide show
  1. package/README.md +3 -0
  2. package/build/assets/css/index.css +2 -0
  3. package/build/assets/img/floor-dark.jpg +0 -0
  4. package/build/assets/img/floor-white.jpg +0 -0
  5. package/build/assets/img/grass.jpg +0 -0
  6. package/build/bundle.js +2 -0
  7. package/build/components/Application.js +2 -135
  8. package/build/components/Buttons/FullScreenButton.js +2 -50
  9. package/build/components/Buttons/TabButton.js +2 -24
  10. package/build/components/Instructions.js +2 -54
  11. package/build/components/Loader.js +2 -22
  12. package/build/components/ModelTab.js +2 -213
  13. package/build/components/PanoramaTab.js +2 -620
  14. package/build/components/RotationTab/DefaultView.js +2 -124
  15. package/build/components/RotationTab/ThreesixtyView.js +2 -45
  16. package/build/components/RotationTab/index.js +2 -194
  17. package/build/components/Widget.js +2 -110
  18. package/build/config/defaultConfig.js +2 -32
  19. package/build/enums/deviceOrientationStatuses.js +2 -11
  20. package/build/enums/deviceWidth.js +2 -21
  21. package/build/enums/imageExtentions.js +2 -16
  22. package/build/enums/rotationModes.js +2 -11
  23. package/build/index.css +1 -1
  24. package/build/index.js +2 -75
  25. package/build/locale/index.js +2 -71
  26. package/build/store/apiStore.js +2 -231
  27. package/build/store/deviceStore.js +2 -60
  28. package/build/store/fullScreenStore.js +2 -159
  29. package/build/store/houseStore.js +2 -952
  30. package/build/store/index.js +2 -124
  31. package/build/store/modelStore.js +2 -338
  32. package/build/threesixty/events.js +2 -220
  33. package/build/threesixty/index.js +2 -264
  34. package/build/utils/csg/csg-lib.js +2 -472
  35. package/build/utils/csg/csg-worker.js +2 -84
  36. package/build/utils/csg/three-csg.js +2 -277
  37. package/build/utils/helpers.js +2 -12
  38. package/build/utils/modelHelpers.js +2 -161
  39. package/build/utils/panoramaHelpers.js +2 -117
  40. package/package.json +17 -5
  41. package/build/assets/css/app.css +0 -1
  42. package/build/assets/css/app.css.map +0 -1
  43. package/build/assets/img/floor-dark.png +0 -0
  44. package/build/assets/img/floor-white.png +0 -0
  45. package/build/assets/img/grass.png +0 -0
@@ -1,124 +1,2 @@
1
- "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
6
- exports.default = void 0;
7
-
8
- var _react = _interopRequireDefault(require("react"));
9
-
10
- var _locale = _interopRequireDefault(require("../locale"));
11
-
12
- var _mobx = require("mobx");
13
-
14
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
15
-
16
- function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); }
17
-
18
- function _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
19
-
20
- function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
21
-
22
- function _iterableToArray(iter) { if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) return Array.from(iter); }
23
-
24
- function _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); }
25
-
26
- function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }
27
-
28
- function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
29
-
30
- function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
31
-
32
- function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, "prototype", { writable: false }); return Constructor; }
33
-
34
- function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
35
-
36
- (0, _mobx.configure)({
37
- useProxies: 'never'
38
- });
39
- var LivingRoomType = 'Living';
40
-
41
- var Store = /*#__PURE__*/function () {
42
- function Store() {
43
- _classCallCheck(this, Store);
44
-
45
- _defineProperty(this, "config", null);
46
-
47
- _defineProperty(this, "listeners", {
48
- 'resize': []
49
- });
50
-
51
- _defineProperty(this, "controlsVisible", true);
52
-
53
- (0, _mobx.makeAutoObservable)(this);
54
- }
55
-
56
- _createClass(Store, [{
57
- key: "initialPanoramaRoomId",
58
- get: function get() {
59
- var json = this.config.json;
60
- if (!json) return null;
61
- var Rooms = json.Floors[0].Units[0].Rooms;
62
- var livingRoom = Rooms.find(function (_ref) {
63
- var Type = _ref.Type;
64
- return Type === LivingRoomType;
65
- });
66
-
67
- var biggestRoom = _toConsumableArray(Rooms).sort(function (a, b) {
68
- return b.Area - a.Area;
69
- })[0];
70
-
71
- return (livingRoom === null || livingRoom === void 0 ? void 0 : livingRoom.ID) || (biggestRoom === null || biggestRoom === void 0 ? void 0 : biggestRoom.ID) || null;
72
- }
73
- }, {
74
- key: "isTabIncluded",
75
- value: function isTabIncluded(value) {
76
- return this.config.tabs.find(function (tab) {
77
- return tab === value;
78
- });
79
- }
80
- }, {
81
- key: "setConfig",
82
- value: function setConfig(config) {
83
- this.config = config;
84
-
85
- _locale.default.setCurrentLocale(config.locale);
86
-
87
- this.dispatchEvent('resize', {
88
- width: config.width,
89
- height: config.height
90
- });
91
- }
92
- }, {
93
- key: "hideControls",
94
- value: function hideControls() {
95
- this.controlsVisible = false;
96
- }
97
- }, {
98
- key: "showControls",
99
- value: function showControls() {
100
- this.controlsVisible = true;
101
- }
102
- }, {
103
- key: "addEventListener",
104
- value: function addEventListener(event, callback) {
105
- if (!this.listeners[event]) return;
106
- this.listeners[event].push(callback);
107
- }
108
- }, {
109
- key: "dispatchEvent",
110
- value: function dispatchEvent(event) {
111
- var value = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;
112
- if (!this.listeners[event]) return;
113
- this.listeners[event].forEach(function (callback) {
114
- return callback(value);
115
- });
116
- }
117
- }]);
118
-
119
- return Store;
120
- }();
121
-
122
- var _default = new Store();
123
-
124
- exports.default = _default;
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.default=void 0;var _react=_interopRequireDefault(require("react")),_locale=_interopRequireDefault(require("../locale")),_mobx=require("mobx");function _interopRequireDefault(e){return e&&e.__esModule?e:{default:e}}function _toConsumableArray(e){return _arrayWithoutHoles(e)||_iterableToArray(e)||_unsupportedIterableToArray(e)||_nonIterableSpread()}function _nonIterableSpread(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}function _unsupportedIterableToArray(e,r){if(e){if("string"==typeof e)return _arrayLikeToArray(e,r);var t=Object.prototype.toString.call(e).slice(8,-1);return"Map"===(t="Object"===t&&e.constructor?e.constructor.name:t)||"Set"===t?Array.from(e):"Arguments"===t||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t)?_arrayLikeToArray(e,r):void 0}}function _iterableToArray(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}function _arrayWithoutHoles(e){if(Array.isArray(e))return _arrayLikeToArray(e)}function _arrayLikeToArray(e,r){(null==r||r>e.length)&&(r=e.length);for(var t=0,n=new Array(r);t<r;t++)n[t]=e[t];return n}function _classCallCheck(e,r){if(!(e instanceof r))throw new TypeError("Cannot call a class as a function")}function _defineProperties(e,r){for(var t=0;t<r.length;t++){var n=r[t];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(e,n.key,n)}}function _createClass(e,r,t){return r&&_defineProperties(e.prototype,r),t&&_defineProperties(e,t),Object.defineProperty(e,"prototype",{writable:!1}),e}function _defineProperty(e,r,t){return r in e?Object.defineProperty(e,r,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[r]=t,e}(0,_mobx.configure)({useProxies:"never"});var LivingRoomType="Living",Store=function(){function e(){_classCallCheck(this,e),_defineProperty(this,"config",null),_defineProperty(this,"listeners",{resize:[]}),_defineProperty(this,"controlsVisible",!0),(0,_mobx.makeAutoObservable)(this)}return _createClass(e,[{key:"initialPanoramaRoomId",get:function(){var e=this.config.json;if(!e)return null;var e=e.Floors[0].Units[0].Rooms,r=e.find(function(e){return e.Type===LivingRoomType}),e=_toConsumableArray(e).sort(function(e,r){return r.Area-e.Area})[0];return(null==r?void 0:r.ID)||(null==e?void 0:e.ID)||null}},{key:"isTabIncluded",value:function(r){return this.config.tabs.find(function(e){return e===r})}},{key:"setConfig",value:function(e){this.config=e,_locale.default.setCurrentLocale(e.locale),this.dispatchEvent("resize",{width:e.width,height:e.height})}},{key:"hideControls",value:function(){this.controlsVisible=!1}},{key:"showControls",value:function(){this.controlsVisible=!0}},{key:"addEventListener",value:function(e,r){this.listeners[e]&&this.listeners[e].push(r)}},{key:"dispatchEvent",value:function(e){var r=1<arguments.length&&void 0!==arguments[1]?arguments[1]:null;this.listeners[e]&&this.listeners[e].forEach(function(e){return e(r)})}}]),e}(),_default=new Store;exports.default=_default;
2
+ //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInN0b3JlL2luZGV4LmpzIl0sIm5hbWVzIjpbIl9yZWFjdCIsIl9pbnRlcm9wUmVxdWlyZURlZmF1bHQiLCJyZXF1aXJlIiwiX2xvY2FsZSIsIl9tb2J4IiwiY29uZmlndXJlIiwidXNlUHJveGllcyIsIkxpdmluZ1Jvb21UeXBlIiwiU3RvcmUiLCJfY2xhc3NDYWxsQ2hlY2siLCJ0aGlzIiwiX2RlZmluZVByb3BlcnR5IiwicmVzaXplIiwibWFrZUF1dG9PYnNlcnZhYmxlIiwianNvbiIsImNvbmZpZyIsIlJvb21zIiwiRmxvb3JzIiwiVW5pdHMiLCJsaXZpbmdSb29tIiwiZmluZCIsIl9yZWYiLCJUeXBlIiwiYmlnZ2VzdFJvb20iLCJfdG9Db25zdW1hYmxlQXJyYXkiLCJzb3J0IiwiYSIsImIiLCJBcmVhIiwiSUQiLCJ2YWx1ZSIsInRhYnMiLCJ0YWIiLCJsb2NhbGVTdG9yZSIsInNldEN1cnJlbnRMb2NhbGUiLCJsb2NhbGUiLCJkaXNwYXRjaEV2ZW50Iiwid2lkdGgiLCJoZWlnaHQiLCJjb250cm9sc1Zpc2libGUiLCJldmVudCIsImNhbGxiYWNrIiwibGlzdGVuZXJzIiwicHVzaCIsImFyZ3VtZW50cyIsImxlbmd0aCIsInVuZGVmaW5lZCJdLCJtYXBwaW5ncyI6IjJGQUFBLElBQUFBLE9BQUFDLHVCQUFBQyxRQUFBLFVBQ0FDLFFBQUFGLHVCQUFBQyxRQUFBLGNBQ0FFLE1BQUFGLFFBQUEsUSwwbURBRUEsRUFBQUcsTUFBQUEsV0FBVSxDQUFFQyxXQUFZLFVBRXhCLElBQU1DLGVBQWlCLFNBRWpCQyxNLFdBU0osU0FBQUEsSUFBY0MsZ0JBQUFDLEtBQUFGLEdBQUFHLGdCQUFBRCxLQUFBLFNBaEJoQixNQWdCZ0JDLGdCQUFBRCxLQUFBLFlBZmhCLENBVUlFLE9BQVUsS0FLRUQsZ0JBQUFELEtBQUEsbUJBRkksSUFHaEIsRUFBQUcsTUFBQUEsb0JBQW1CSCxNLHdEQUdyQixXQUNFLElBQVFJLEVBQVNKLEtBQUtLLE9BQWRELEtBRVIsSUFBS0EsRUFBTSxPQUFPLEtBRWxCLElBQVFFLEVBQVVGLEVBQUtHLE9BQU8sR0FBR0MsTUFBTSxHQUEvQkYsTUFDRkcsRUFBYUgsRUFBTUksS0FBSyxTQUFBQyxHQUFBLE9BQUFBLEVBQUdDLE9BQW9CZixpQkFDL0NnQixFQUFjQyxtQkFBSVIsR0FBT1MsS0FBSyxTQUFDQyxFQUFHQyxHQUFKLE9BQVVBLEVBQUVDLEtBQU9GLEVBQUVFLE9BQU0sR0FFL0QsT0FBT1QsTUFBQUEsT0FBQSxFQUFBQSxFQUFZVSxNQUFNTixNQUFBQSxPQUFsQixFQUFrQkEsRUFBYU0sS0FBTSxPLDJCQUc5QyxTQUFjQyxHQUNaLE9BQU9wQixLQUFLSyxPQUFPZ0IsS0FBS1gsS0FBSyxTQUFDWSxHQUFELE9BQVNBLElBQVFGLE0sdUJBOUJsRCxTQUFBZixHQUVNUixLQUFBQSxPQUFjUSxFQWlDaEJrQixRQUFBQSxRQUFZQyxpQkFBaUJuQixFQUFPb0IsUUEvQmxDM0IsS0FnQ0c0QixjQUFjLFNBQVUsQ0FBRUMsTUFBT3RCLEVBQU9zQixNQUFPQyxPQUFRdkIsRUFBT3VCLFcsMEJBR3JFLFdBMUJjNUIsS0FBQTZCLGlCQUFBLEksMEJBOEJkLFdBcENZN0IsS0FNRTZCLGlCQUFBLEksOEJBa0NkLFNBQWlCQyxFQUFPQyxHQWpDdEI1QixLQUFBQSxVQUFBQSxJQUNESCxLQUFBZ0MsVUFBQUYsR0FBQUcsS0FBQUYsSywyQkFxQ0QsU0FBY0QsR0FBcUIsSUFBZFYsRUFBYyxFQUFBYyxVQUFBQyxhQUFBQyxJQUFBRixVQUFBLEdBQUFBLFVBQUEsR0FBTixLQW5DN0JsQyxLQUFBZ0MsVUFBNEJGLElBcUMxQjlCLEtBcENBZ0MsVUFBaUJGLEdBQUt6QixRQUF0QixTQUFBMEIsR0FBQSxPQUFBQSxFQUFBWCxTLGNBS2lDUixJQUFIZCIsImZpbGUiOiJzdG9yZS9pbmRleC5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgbG9jYWxlU3RvcmUgZnJvbSAnLi4vbG9jYWxlJztcbmltcG9ydCB7IGNvbmZpZ3VyZSwgbWFrZUF1dG9PYnNlcnZhYmxlIH0gZnJvbSAnbW9ieCc7XG5cbmNvbmZpZ3VyZSh7IHVzZVByb3hpZXM6ICduZXZlcicgfSk7XG5cbmNvbnN0IExpdmluZ1Jvb21UeXBlID0gJ0xpdmluZyc7XG5cbmNsYXNzIFN0b3JlIHtcbiAgY29uZmlnID0gbnVsbDtcblxuICBsaXN0ZW5lcnMgPSB7XG4gICAgJ3Jlc2l6ZSc6IFtdLFxuICB9O1xuXG4gIGNvbnRyb2xzVmlzaWJsZSA9IHRydWU7XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgbWFrZUF1dG9PYnNlcnZhYmxlKHRoaXMpO1xuICB9XG5cbiAgZ2V0IGluaXRpYWxQYW5vcmFtYVJvb21JZCgpIHtcbiAgICBjb25zdCB7IGpzb24gfSA9IHRoaXMuY29uZmlnO1xuXG4gICAgaWYgKCFqc29uKSByZXR1cm4gbnVsbDtcblxuICAgIGNvbnN0IHsgUm9vbXMgfSA9IGpzb24uRmxvb3JzWzBdLlVuaXRzWzBdO1xuICAgIGNvbnN0IGxpdmluZ1Jvb20gPSBSb29tcy5maW5kKCh7IFR5cGUgfSkgPT4gVHlwZSA9PT0gTGl2aW5nUm9vbVR5cGUpO1xuICAgIGNvbnN0IGJpZ2dlc3RSb29tID0gWy4uLlJvb21zXS5zb3J0KChhLCBiKSA9PiBiLkFyZWEgLSBhLkFyZWEpWzBdO1xuXG4gICAgcmV0dXJuIGxpdmluZ1Jvb20/LklEIHx8IGJpZ2dlc3RSb29tPy5JRCB8fCBudWxsO1xuICB9XG5cbiAgaXNUYWJJbmNsdWRlZCh2YWx1ZSkge1xuICAgIHJldHVybiB0aGlzLmNvbmZpZy50YWJzLmZpbmQoKHRhYikgPT4gdGFiID09PSB2YWx1ZSk7XG4gIH1cblxuICBzZXRDb25maWcoY29uZmlnKSB7XG4gICAgdGhpcy5jb25maWcgPSBjb25maWc7XG4gICAgbG9jYWxlU3RvcmUuc2V0Q3VycmVudExvY2FsZShjb25maWcubG9jYWxlKTtcbiAgICB0aGlzLmRpc3BhdGNoRXZlbnQoJ3Jlc2l6ZScsIHsgd2lkdGg6IGNvbmZpZy53aWR0aCwgaGVpZ2h0OiBjb25maWcuaGVpZ2h0IH0pO1xuICB9XG5cbiAgaGlkZUNvbnRyb2xzKCkge1xuICAgIHRoaXMuY29udHJvbHNWaXNpYmxlID0gZmFsc2U7XG4gIH1cblxuICBzaG93Q29udHJvbHMoKSB7XG4gICAgdGhpcy5jb250cm9sc1Zpc2libGUgPSB0cnVlO1xuICB9XG5cbiAgYWRkRXZlbnRMaXN0ZW5lcihldmVudCwgY2FsbGJhY2spIHtcbiAgICBpZiAoIXRoaXMubGlzdGVuZXJzW2V2ZW50XSkgcmV0dXJuO1xuICAgIHRoaXMubGlzdGVuZXJzW2V2ZW50XS5wdXNoKGNhbGxiYWNrKTtcbiAgfVxuXG4gIGRpc3BhdGNoRXZlbnQoZXZlbnQsIHZhbHVlID0gbnVsbCkge1xuICAgIGlmICghdGhpcy5saXN0ZW5lcnNbZXZlbnRdKSByZXR1cm47XG4gICAgdGhpcy5saXN0ZW5lcnNbZXZlbnRdLmZvckVhY2goKGNhbGxiYWNrKSA9PiBjYWxsYmFjayh2YWx1ZSkpO1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IG5ldyBTdG9yZSgpO1xuIl19
@@ -1,338 +1,2 @@
1
- "use strict";
2
-
3
- function _typeof(obj) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }, _typeof(obj); }
4
-
5
- Object.defineProperty(exports, "__esModule", {
6
- value: true
7
- });
8
- exports.default = void 0;
9
-
10
- var _react = _interopRequireDefault(require("react"));
11
-
12
- var _mobx = require("mobx");
13
-
14
- var THREE = _interopRequireWildcard(require("three"));
15
-
16
- var _cameraControls = _interopRequireDefault(require("camera-controls"));
17
-
18
- var _store = _interopRequireDefault(require("../store"));
19
-
20
- var _houseStore = _interopRequireDefault(require("../store/houseStore"));
21
-
22
- var _grass = _interopRequireDefault(require("../assets/img/grass.png"));
23
-
24
- var _modelHelpers = require("../utils/modelHelpers");
25
-
26
- var _defaultConfig = _interopRequireDefault(require("../config/defaultConfig"));
27
-
28
- function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
29
-
30
- function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
31
-
32
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
33
-
34
- function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
35
-
36
- function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
37
-
38
- function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, "prototype", { writable: false }); return Constructor; }
39
-
40
- function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
41
-
42
- (0, _mobx.configure)({
43
- useProxies: 'never'
44
- });
45
-
46
- var ModelStore = /*#__PURE__*/function () {
47
- function ModelStore() {
48
- var _this = this;
49
-
50
- _classCallCheck(this, ModelStore);
51
-
52
- _defineProperty(this, "json", null);
53
-
54
- _defineProperty(this, "initialized", false);
55
-
56
- _defineProperty(this, "textureLoader", new THREE.TextureLoader());
57
-
58
- _defineProperty(this, "clock", new THREE.Clock());
59
-
60
- _defineProperty(this, "scene", null);
61
-
62
- _defineProperty(this, "renderer", null);
63
-
64
- _defineProperty(this, "camera", null);
65
-
66
- _defineProperty(this, "controls", null);
67
-
68
- _defineProperty(this, "houseStore", null);
69
-
70
- _defineProperty(this, "sceneScale", 0.025);
71
-
72
- _defineProperty(this, "wallsHeight", 280 * this.sceneScale);
73
-
74
- _defineProperty(this, "currentControlsType", 'orbit');
75
-
76
- _defineProperty(this, "isJoystickActive", false);
77
-
78
- _defineProperty(this, "joystickDirections", []);
79
-
80
- _defineProperty(this, "init", function (json) {
81
- _this.json = json;
82
- _this.initialized = true;
83
- _this.houseStore = new _houseStore.default(_this);
84
-
85
- _this.scene.add(_this.houseStore.houseGroup);
86
- });
87
-
88
- _defineProperty(this, "removeHouse", function () {
89
- var selectedObject = _this.scene.getObjectByName('House-Group');
90
-
91
- _this.scene.remove(selectedObject);
92
-
93
- _this.initialized = false;
94
- });
95
-
96
- _defineProperty(this, "setJoystickState", function (value) {
97
- _this.isJoystickActive = value;
98
- });
99
-
100
- _defineProperty(this, "setJoystickDirections", function (directions) {
101
- _this.joystickDirections = directions;
102
- });
103
-
104
- _defineProperty(this, "setContainer", function (container) {
105
- _this.container = container;
106
-
107
- _this.updateRendererSize();
108
-
109
- _this.updateCameraSize();
110
- });
111
-
112
- _defineProperty(this, "createScene", function () {
113
- _this.scene = new THREE.Scene();
114
- _this.scene.rotation.x = -Math.PI / 2;
115
- _this.scene.scale.y = -1;
116
- _this.scene.background = new THREE.Color('#E7E7E7');
117
- _this.scene.fog = new THREE.Fog('#E7E7E7', 5, 200);
118
-
119
- _this.createGround();
120
-
121
- return _this;
122
- });
123
-
124
- _defineProperty(this, "createGround", function () {
125
- var textures = {};
126
- var assets = [new Promise(function (resolve) {
127
- return _this.loadTexture(_grass.default, [75, 75], function (texture) {
128
- textures.map = texture;
129
- resolve();
130
- });
131
- })];
132
- Promise.all(assets).then(function () {
133
- var groundMaterial = new THREE.MeshStandardMaterial({
134
- map: textures.map,
135
- normalMap: textures.normalMap,
136
- envMap: textures.envMap,
137
- color: 0xe7e7e7
138
- });
139
- var groundMesh = new THREE.Mesh(new THREE.CircleGeometry(250, 100), groundMaterial);
140
- groundMesh.position.z = -0.01;
141
- groundMesh.receiveShadow = true;
142
-
143
- _this.scene.add(groundMesh);
144
- });
145
- return _this;
146
- });
147
-
148
- _defineProperty(this, "createRenderer", function () {
149
- _this.renderer = new THREE.WebGLRenderer();
150
-
151
- _this.renderer.setPixelRatio(window.devicePixelRatio);
152
-
153
- _this.updateRendererSize();
154
-
155
- _this.renderer.localClippingEnabled = true;
156
- _this.renderer.shadowMap.enabled = true;
157
- _this.renderer.shadowMap.type = THREE.PCFSoftShadowMap;
158
- return _this;
159
- });
160
-
161
- _defineProperty(this, "updateRendererSize", function () {
162
- _this.renderer.setSize(_this.width, _this.height);
163
- });
164
-
165
- _defineProperty(this, "createCamera", function () {
166
- _this.camera = new THREE.PerspectiveCamera(75, _this.width / _this.height, 0.1, 1000);
167
-
168
- _this.camera.position.set(0, 0, 0);
169
-
170
- _store.default.addEventListener('resize', function () {
171
- _this.updateCameraSize();
172
-
173
- _this.updateRendererSize();
174
- });
175
-
176
- return _this;
177
- });
178
-
179
- _defineProperty(this, "updateCameraSize", function () {
180
- _this.camera.aspect = _this.width / _this.height;
181
-
182
- _this.camera.updateProjectionMatrix();
183
- });
184
-
185
- _defineProperty(this, "createControls", function () {
186
- _this.controls = new _cameraControls.default(_this.camera, _this.renderer.domElement);
187
- _this.controls.minDistance = 0.5;
188
- _this.controls.maxDistance = 50;
189
- _this.controls.maxPolarAngle = Math.PI / 2.1;
190
-
191
- _this.setDefaultControls(Math.PI / 4);
192
-
193
- _this.controls.verticalDragToForward = true;
194
- _this.currentControlsType = 'orbit';
195
-
196
- var animate = function animate() {
197
- _this.controls.update(_this.clock.getDelta());
198
-
199
- window.requestAnimationFrame(animate);
200
- var distance = 0.2;
201
-
202
- if (_this.isJoystickActive) {
203
- if (_this.joystickDirections.some(function (direction) {
204
- return direction === 'forward';
205
- })) {
206
- _this.controls.forward(distance, true);
207
- }
208
-
209
- if (_this.joystickDirections.some(function (direction) {
210
- return direction === 'backward';
211
- })) {
212
- _this.controls.forward(-distance, true);
213
- }
214
-
215
- if (_this.joystickDirections.some(function (direction) {
216
- return direction === 'right';
217
- })) {
218
- _this.controls.truck(distance, 0, true);
219
- }
220
-
221
- if (_this.joystickDirections.some(function (direction) {
222
- return direction === 'left';
223
- })) {
224
- _this.controls.truck(-distance, 0, true);
225
- }
226
- }
227
-
228
- _this.renderer.render(_this.scene, _this.camera);
229
- };
230
-
231
- animate();
232
- return _this;
233
- });
234
-
235
- _defineProperty(this, "setDefaultControls", function (angle) {
236
- _this.controls.dollyTo(20, true);
237
-
238
- _this.controls.moveTo(0, 0, 0, true);
239
-
240
- _this.controls.mouseButtons.wheel = _cameraControls.default.ACTION.DOLLY;
241
- _this.controls.touches.two = _cameraControls.default.ACTION.TOUCH_DOLLY_TRUCK;
242
-
243
- _this.controls.rotateTo(0, angle, true);
244
- });
245
-
246
- _defineProperty(this, "setCurrentControlsType", function (type) {
247
- _this.currentControlsType = type;
248
- var EPS = 1e-5;
249
-
250
- if (type === 'orbit') {
251
- _this.controls.maxPolarAngle = Math.PI / 2.1;
252
-
253
- _this.setDefaultControls(Math.PI / 4);
254
-
255
- return;
256
- }
257
-
258
- if (type === 'plan') {
259
- _this.setDefaultControls(0);
260
-
261
- _this.controls.maxPolarAngle = 0;
262
- return;
263
- }
264
-
265
- if (type === 'wasd') {
266
- _this.camera.position.set(0, 0, EPS);
267
-
268
- _this.controls.maxPolarAngle = Math.PI;
269
-
270
- _this.controls.dollyTo(0, true);
271
-
272
- _this.controls.moveTo(0, _this.wallsHeight / 2, 0, true);
273
-
274
- _this.controls.rotateTo(0, Math.PI / 2, true);
275
-
276
- _this.controls.mouseButtons.wheel = _cameraControls.default.ACTION.NONE;
277
- _this.controls.touches.two = _cameraControls.default.ACTION.NONE;
278
- }
279
- });
280
-
281
- _defineProperty(this, "addKeyEvents", function () {
282
- var keyEvents = (0, _modelHelpers.getKeyEvents)(_this.controls);
283
- keyEvents.forEach(function (_ref) {
284
- var keys = _ref.keys,
285
- callback = _ref.callback;
286
- keys.forEach(function (key) {
287
- return key.addEventListener('holding', function () {
288
- if (_this.currentControlsType !== 'wasd') return;
289
- callback();
290
- });
291
- });
292
- });
293
- return _this;
294
- });
295
-
296
- (0, _mobx.makeAutoObservable)(this);
297
-
298
- _cameraControls.default.install({
299
- THREE: THREE
300
- });
301
-
302
- this.createScene().createRenderer().createCamera().createControls().addKeyEvents();
303
- }
304
-
305
- _createClass(ModelStore, [{
306
- key: "width",
307
- get: function get() {
308
- var _store$config;
309
-
310
- return ((_store$config = _store.default.config) === null || _store$config === void 0 ? void 0 : _store$config.width) || _defaultConfig.default.width;
311
- }
312
- }, {
313
- key: "height",
314
- get: function get() {
315
- var _store$config2;
316
-
317
- return ((_store$config2 = _store.default.config) === null || _store$config2 === void 0 ? void 0 : _store$config2.height) || _defaultConfig.default.height;
318
- }
319
- }, {
320
- key: "loadTexture",
321
- value: function loadTexture(img) {
322
- var repeat = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [1, 1];
323
- var callback = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : function () {};
324
- this.textureLoader.load(img, function (texture) {
325
- texture.wrapS = texture.wrapT = THREE.RepeatWrapping;
326
- texture.repeat.set(repeat[0], repeat[1]);
327
- texture.flipY = false;
328
- callback(texture);
329
- });
330
- }
331
- }]);
332
-
333
- return ModelStore;
334
- }();
335
-
336
- var _default = new ModelStore();
337
-
338
- exports.default = _default;
1
+ "use strict";function _typeof(e){return(_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}Object.defineProperty(exports,"__esModule",{value:!0}),exports.default=void 0;var _react=_interopRequireDefault(require("react")),_mobx=require("mobx"),THREE=_interopRequireWildcard(require("three")),_cameraControls=_interopRequireDefault(require("camera-controls")),_store=_interopRequireDefault(require("../store")),_houseStore=_interopRequireDefault(require("../store/houseStore")),_grass=_interopRequireDefault(require("../assets/img/grass.jpg")),_modelHelpers=require("../utils/modelHelpers"),_defaultConfig=_interopRequireDefault(require("../config/defaultConfig"));function _getRequireWildcardCache(e){if("function"!=typeof WeakMap)return null;var t=new WeakMap,r=new WeakMap;return(_getRequireWildcardCache=function(e){return e?r:t})(e)}function _interopRequireWildcard(e,t){if(!t&&e&&e.__esModule)return e;if(null===e||"object"!==_typeof(e)&&"function"!=typeof e)return{default:e};t=_getRequireWildcardCache(t);if(t&&t.has(e))return t.get(e);var r,o,n={},i=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(r in e)"default"!==r&&Object.prototype.hasOwnProperty.call(e,r)&&((o=i?Object.getOwnPropertyDescriptor(e,r):null)&&(o.get||o.set)?Object.defineProperty(n,r,o):n[r]=e[r]);return n.default=e,t&&t.set(e,n),n}function _interopRequireDefault(e){return e&&e.__esModule?e:{default:e}}function _classCallCheck(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function _defineProperties(e,t){for(var r=0;r<t.length;r++){var o=t[r];o.enumerable=o.enumerable||!1,o.configurable=!0,"value"in o&&(o.writable=!0),Object.defineProperty(e,o.key,o)}}function _createClass(e,t,r){return t&&_defineProperties(e.prototype,t),r&&_defineProperties(e,r),Object.defineProperty(e,"prototype",{writable:!1}),e}function _defineProperty(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}(0,_mobx.configure)({useProxies:"never"});var ModelStore=function(){function e(){var o=this;_classCallCheck(this,e),_defineProperty(this,"json",null),_defineProperty(this,"initialized",!1),_defineProperty(this,"textureLoader",new THREE.TextureLoader),_defineProperty(this,"clock",new THREE.Clock),_defineProperty(this,"scene",null),_defineProperty(this,"renderer",null),_defineProperty(this,"camera",null),_defineProperty(this,"controls",null),_defineProperty(this,"houseStore",null),_defineProperty(this,"sceneScale",.025),_defineProperty(this,"wallsHeight",280*this.sceneScale),_defineProperty(this,"currentControlsType","orbit"),_defineProperty(this,"isJoystickActive",!1),_defineProperty(this,"joystickDirections",[]),_defineProperty(this,"init",function(e){o.json=e,o.initialized=!0,o.houseStore=new _houseStore.default(o),o.scene.add(o.houseStore.houseGroup)}),_defineProperty(this,"removeHouse",function(){var e=o.scene.getObjectByName("House-Group");o.scene.remove(e),o.initialized=!1}),_defineProperty(this,"setJoystickState",function(e){o.isJoystickActive=e}),_defineProperty(this,"setJoystickDirections",function(e){o.joystickDirections=e}),_defineProperty(this,"setContainer",function(e){o.container=e,o.updateRendererSize(),o.updateCameraSize()}),_defineProperty(this,"createScene",function(){return o.scene=new THREE.Scene,o.scene.rotation.x=-Math.PI/2,o.scene.scale.y=-1,o.scene.background=new THREE.Color("#E7E7E7"),o.scene.fog=new THREE.Fog("#E7E7E7",5,200),o.createGround(),o}),_defineProperty(this,"createGround",function(){var r={},e=[new Promise(function(t){return o.loadTexture(_grass.default,[75,75],function(e){r.map=e,t()})})];return Promise.all(e).then(function(){var e=new THREE.MeshStandardMaterial({map:r.map,normalMap:r.normalMap,envMap:r.envMap,color:15198183}),e=new THREE.Mesh(new THREE.CircleGeometry(250,100),e);e.position.z=-.01,e.receiveShadow=!0,o.scene.add(e)}),o}),_defineProperty(this,"createRenderer",function(){return o.renderer=new THREE.WebGLRenderer,o.renderer.setPixelRatio(window.devicePixelRatio),o.updateRendererSize(),o.renderer.localClippingEnabled=!0,o.renderer.shadowMap.enabled=!0,o.renderer.shadowMap.type=THREE.PCFSoftShadowMap,o}),_defineProperty(this,"updateRendererSize",function(){o.renderer.setSize(o.width,o.height)}),_defineProperty(this,"createCamera",function(){return o.camera=new THREE.PerspectiveCamera(75,o.width/o.height,.1,1e3),o.camera.position.set(0,0,0),_store.default.addEventListener("resize",function(){o.updateCameraSize(),o.updateRendererSize()}),o}),_defineProperty(this,"updateCameraSize",function(){o.camera.aspect=o.width/o.height,o.camera.updateProjectionMatrix()}),_defineProperty(this,"createControls",function(){return o.controls=new _cameraControls.default(o.camera,o.renderer.domElement),o.controls.minDistance=.5,o.controls.maxDistance=50,o.controls.maxPolarAngle=Math.PI/2.1,o.setDefaultControls(Math.PI/4),o.controls.verticalDragToForward=!0,o.currentControlsType="orbit",function e(){o.controls.update(o.clock.getDelta()),window.requestAnimationFrame(e);o.isJoystickActive&&(o.joystickDirections.some(function(e){return"forward"===e})&&o.controls.forward(.2,!0),o.joystickDirections.some(function(e){return"backward"===e})&&o.controls.forward(-.2,!0),o.joystickDirections.some(function(e){return"right"===e})&&o.controls.truck(.2,0,!0),o.joystickDirections.some(function(e){return"left"===e})&&o.controls.truck(-.2,0,!0)),o.renderer.render(o.scene,o.camera)}(),o}),_defineProperty(this,"setDefaultControls",function(e){o.controls.dollyTo(20,!0),o.controls.moveTo(0,0,0,!0),o.controls.mouseButtons.wheel=_cameraControls.default.ACTION.DOLLY,o.controls.touches.two=_cameraControls.default.ACTION.TOUCH_DOLLY_TRUCK,o.controls.rotateTo(0,e,!0)}),_defineProperty(this,"setCurrentControlsType",function(e){return"orbit"===(o.currentControlsType=e)?(o.controls.maxPolarAngle=Math.PI/2.1,void o.setDefaultControls(Math.PI/4)):"plan"===e?(o.setDefaultControls(0),void(o.controls.maxPolarAngle=0)):void("wasd"===e&&(o.camera.position.set(0,0,1e-5),o.controls.maxPolarAngle=Math.PI,o.controls.dollyTo(0,!0),o.controls.moveTo(0,o.wallsHeight/2,0,!0),o.controls.rotateTo(0,Math.PI/2,!0),o.controls.mouseButtons.wheel=_cameraControls.default.ACTION.NONE,o.controls.touches.two=_cameraControls.default.ACTION.NONE))}),_defineProperty(this,"addKeyEvents",function(){return(0,_modelHelpers.getKeyEvents)(o.controls).forEach(function(e){var t=e.keys,r=e.callback;t.forEach(function(e){return e.addEventListener("holding",function(){"wasd"===o.currentControlsType&&r()})})}),o}),(0,_mobx.makeAutoObservable)(this),_cameraControls.default.install({THREE:THREE}),this.createScene().createRenderer().createCamera().createControls().addKeyEvents()}return _createClass(e,[{key:"width",get:function(){var e;return(null==(e=_store.default.config)?void 0:e.width)||_defaultConfig.default.width}},{key:"height",get:function(){var e;return(null==(e=_store.default.config)?void 0:e.height)||_defaultConfig.default.height}},{key:"loadTexture",value:function(e){var t=1<arguments.length&&void 0!==arguments[1]?arguments[1]:[1,1],r=2<arguments.length&&void 0!==arguments[2]?arguments[2]:function(){};this.textureLoader.load(e,function(e){e.wrapS=e.wrapT=THREE.RepeatWrapping,e.repeat.set(t[0],t[1]),e.flipY=!1,r(e)})}}]),e}(),_default=new ModelStore;exports.default=_default;
2
+ //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInN0b3JlL21vZGVsU3RvcmUuanMiXSwibmFtZXMiOlsiX3JlYWN0IiwiX2ludGVyb3BSZXF1aXJlRGVmYXVsdCIsInJlcXVpcmUiLCJfbW9ieCIsIlRIUkVFIiwiX2ludGVyb3BSZXF1aXJlV2lsZGNhcmQiLCJfY2FtZXJhQ29udHJvbHMiLCJfc3RvcmUiLCJfaG91c2VTdG9yZSIsIl9ncmFzcyIsIl9tb2RlbEhlbHBlcnMiLCJfZGVmYXVsdENvbmZpZyIsImNvbmZpZ3VyZSIsInVzZVByb3hpZXMiLCJNb2RlbFN0b3JlIiwiX3RoaXMiLCJ0aGlzIiwiX2NsYXNzQ2FsbENoZWNrIiwiX2RlZmluZVByb3BlcnR5IiwiVGV4dHVyZUxvYWRlciIsIkNsb2NrIiwic2NlbmVTY2FsZSIsImpzb24iLCJpbml0aWFsaXplZCIsImhvdXNlU3RvcmUiLCJIb3VzZVN0b3JlIiwic2NlbmUiLCJhZGQiLCJob3VzZUdyb3VwIiwic2VsZWN0ZWRPYmplY3QiLCJnZXRPYmplY3RCeU5hbWUiLCJyZW1vdmUiLCJ2YWx1ZSIsImlzSm95c3RpY2tBY3RpdmUiLCJkaXJlY3Rpb25zIiwiam95c3RpY2tEaXJlY3Rpb25zIiwiY29udGFpbmVyIiwidXBkYXRlUmVuZGVyZXJTaXplIiwidXBkYXRlQ2FtZXJhU2l6ZSIsIlNjZW5lIiwicm90YXRpb24iLCJ4IiwiTWF0aCIsIlBJIiwic2NhbGUiLCJ5IiwiYmFja2dyb3VuZCIsIkNvbG9yIiwiRm9nIiwiY3JlYXRlR3JvdW5kIiwidGV4dHVyZXMiLCJhc3NldHMiLCJQcm9taXNlIiwicmVzb2x2ZSIsImxvYWRUZXh0dXJlIiwiR3JvdW5kVGV4dHVyZSIsInRleHR1cmUiLCJtYXAiLCJncm91bmRNYXRlcmlhbCIsIk1lc2hTdGFuZGFyZE1hdGVyaWFsIiwibm9ybWFsTWFwIiwiZW52TWFwIiwiY29sb3IiLCJncm91bmRNZXNoIiwiTWVzaCIsIkNpcmNsZUdlb21ldHJ5IiwicG9zaXRpb24iLCJyZWNlaXZlU2hhZG93IiwicmVuZGVyZXIiLCJXZWJHTFJlbmRlcmVyIiwic2V0UGl4ZWxSYXRpbyIsIndpbmRvdyIsImRldmljZVBpeGVsUmF0aW8iLCJsb2NhbENsaXBwaW5nRW5hYmxlZCIsInNoYWRvd01hcCIsIndpZHRoIiwiY2FtZXJhIiwiUGVyc3BlY3RpdmVDYW1lcmEiLCJoZWlnaHQiLCJzZXQiLCJzdG9yZSIsInVwZGF0ZVByb2plY3Rpb25NYXRyaXgiLCJjb250cm9scyIsIkNhbWVyYUNvbnRyb2xzIiwiZG9tRWxlbWVudCIsImVuYWJsZWQiLCJ0eXBlIiwiUENGU29mdFNoYWRvd01hcCIsInNldERlZmF1bHRDb250cm9scyIsInZlcnRpY2FsRHJhZ1RvRm9yd2FyZCIsImN1cnJlbnRDb250cm9sc1R5cGUiLCJhbmltYXRlIiwidXBkYXRlIiwiY2xvY2siLCJnZXREZWx0YSIsInJlcXVlc3RBbmltYXRpb25GcmFtZSIsInNvbWUiLCJkaXJlY3Rpb24iLCJhZGRFdmVudExpc3RlbmVyIiwidHJ1Y2siLCJyZW5kZXIiLCJhbmdsZSIsIm1vdmVUbyIsIkFDVElPTiIsIkRPTExZIiwiVE9VQ0hfRE9MTFlfVFJVQ0siLCJyb3RhdGVUbyIsIm1heFBvbGFyQW5nbGUiLCJmb3J3YXJkIiwiZGlzdGFuY2UiLCJkb2xseVRvIiwibW91c2VCdXR0b25zIiwid2hlZWwiLCJOT05FIiwiZ2V0S2V5RXZlbnRzIiwiZm9yRWFjaCIsIl9yZWYiLCJrZXlzIiwiY2FsbGJhY2siLCJrZXkiLCJpbnN0YWxsIiwiY3JlYXRlUmVuZGVyZXIiLCJjcmVhdGVDYW1lcmEiLCJjcmVhdGVDb250cm9scyIsImFkZEtleUV2ZW50cyIsIl9zdG9yZSRjb25maWciLCJjb25maWciLCJkZWZhdWx0Q29uZmlnIiwiX3N0b3JlJGNvbmZpZzIiLCJpbWciLCJyZXBlYXQiLCJhcmd1bWVudHMiLCJsZW5ndGgiLCJ1bmRlZmluZWQiLCJ0ZXh0dXJlTG9hZGVyIiwid3JhcFMiLCJ3cmFwVCIsIlJlcGVhdFdyYXBwaW5nIiwiZmxpcFkiXSwibWFwcGluZ3MiOiI0VUFBQSxJQUFB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QUEsRUFBQUQsRUFBQWxELFFBQUFvRCxlQUFBQSxRQUFBcEQsUSxrQkFZZCxXQUFhLElBQUFxRCxFQVpDLE9BQUEsT0FBQUEsRUFBQWhELE9BQUFBLFFBQUE4QyxhQUFBLEVBQUFFLEVBQUFsRCxTQUFBaUQsZUFBQUEsUUFBQWpELFMseUJBa01kLFNBbE1jbUQsR0FxSk8sSUFySlBDLEVBcUpPLEVBQUFDLFVBQUFDLGFBQUFDLElBQUFGLFVBQUEsR0FBQUEsVUFBQSxHQXJKUCxDQUFBLEVBQUEsR0FBQWIsRUFxSk8sRUFBQWEsVUFBQUMsYUFBQUMsSUFBQUYsVUFBQSxHQUFBQSxVQUFBLEdBckpQLGFBbU1abkgsS0E3Q0FzSCxjQUFjeEIsS0FBZG1CLEVBQTBCLFNBQUF6RSxHQThDeEJBLEVBQVErRSxNQUFRL0UsRUFBUWdGLE1BQVFwSSxNQUFNcUksZUE3Q3hDakYsRUFBSzBCLE9BQVNvQixJQUFBQSxFQUFkLEdBQUE0QixFQUFBLElBK0NFMUUsRUFBUWtGLE9BQVEsRUE3Q2xCcEIsRUFBS3BDLFMsY0F6Sk8sSUFBQXBFIiwiZmlsZSI6InN0b3JlL21vZGVsU3RvcmUuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgY29uZmlndXJlLCBtYWtlQXV0b09ic2VydmFibGUgfSBmcm9tICdtb2J4JztcbmltcG9ydCAqIGFzIFRIUkVFIGZyb20gJ3RocmVlJztcbmltcG9ydCBDYW1lcmFDb250cm9scyBmcm9tICdjYW1lcmEtY29udHJvbHMnO1xuaW1wb3J0IHN0b3JlIGZyb20gJy4uL3N0b3JlJztcbmltcG9ydCBIb3VzZVN0b3JlIGZyb20gJy4uL3N0b3JlL2hvdXNlU3RvcmUnO1xuaW1wb3J0IEdyb3VuZFRleHR1cmUgZnJvbSAnLi4vYXNzZXRzL2ltZy9ncmFzcy5qcGcnO1xuaW1wb3J0IHsgZ2V0S2V5RXZlbnRzIH0gZnJvbSAnLi4vdXRpbHMvbW9kZWxIZWxwZXJzJztcbmltcG9ydCBkZWZhdWx0Q29uZmlnIGZyb20gJy4uL2NvbmZpZy9kZWZhdWx0Q29uZmlnJztcblxuY29uZmlndXJlKHsgdXNlUHJveGllczogJ25ldmVyJyB9KTtcblxuY2xhc3MgTW9kZWxTdG9yZSB7XG4gIGpzb24gPSBudWxsO1xuXG4gIGluaXRpYWxpemVkID0gZmFsc2U7XG5cbiAgdGV4dHVyZUxvYWRlciA9IG5ldyBUSFJFRS5UZXh0dXJlTG9hZGVyKCk7XG5cbiAgY2xvY2sgPSBuZXcgVEhSRUUuQ2xvY2soKTtcblxuICBzY2VuZSA9IG51bGw7XG5cbiAgcmVuZGVyZXIgPSBudWxsO1xuXG4gIGNhbWVyYSA9IG51bGw7XG5cbiAgY29udHJvbHMgPSBudWxsO1xuXG4gIGhvdXNlU3RvcmUgPSBudWxsO1xuXG4gIHNjZW5lU2NhbGUgPSAwLjAyNTtcblxuICB3YWxsc0hlaWdodCA9IDI4MCAqIHRoaXMuc2NlbmVTY2FsZTtcblxuICBjdXJyZW50Q29udHJvbHNUeXBlID0gJ29yYml0JztcblxuICBpc0pveXN0aWNrQWN0aXZlID0gZmFsc2U7XG4gIGpveXN0aWNrRGlyZWN0aW9ucyA9IFtdO1xuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIG1ha2VBdXRvT2JzZXJ2YWJsZSh0aGlzKTtcblxuICAgIENhbWVyYUNvbnRyb2xzLmluc3RhbGwoeyBUSFJFRTogVEhSRUUgfSk7XG5cbiAgICB0aGlzLmNyZWF0ZVNjZW5lKCkuY3JlYXRlUmVuZGVyZXIoKS5jcmVhdGVDYW1lcmEoKS5jcmVhdGVDb250cm9scygpLmFkZEtleUV2ZW50cygpO1xuICB9XG5cbiAgZ2V0IHdpZHRoKCkge1xuICAgIHJldHVybiBzdG9yZS5jb25maWc/LndpZHRoIHx8IGRlZmF1bHRDb25maWcud2lkdGg7XG4gIH1cblxuICBnZXQgaGVpZ2h0KCkge1xuICAgIHJldHVybiBzdG9yZS5jb25maWc/LmhlaWdodCB8fCBkZWZhdWx0Q29uZmlnLmhlaWdodDtcbiAgfVxuXG4gIGluaXQgPSAoanNvbikgPT4ge1xuICAgIHRoaXMuanNvbiA9IGpzb247XG4gICAgdGhpcy5pbml0aWFsaXplZCA9IHRydWU7XG4gICAgdGhpcy5ob3VzZVN0b3JlID0gbmV3IEhvdXNlU3RvcmUodGhpcyk7XG4gICAgdGhpcy5zY2VuZS5hZGQodGhpcy5ob3VzZVN0b3JlLmhvdXNlR3JvdXApO1xuICB9O1xuXG4gIHJlbW92ZUhvdXNlID0gKCkgPT4ge1xuICAgIGNvbnN0IHNlbGVjdGVkT2JqZWN0ID0gdGhpcy5zY2VuZS5nZXRPYmplY3RCeU5hbWUoJ0hvdXNlLUdyb3VwJyk7XG4gICAgdGhpcy5zY2VuZS5yZW1vdmUoc2VsZWN0ZWRPYmplY3QpO1xuICAgIHRoaXMuaW5pdGlhbGl6ZWQgPSBmYWxzZTtcbiAgfTtcblxuICBzZXRKb3lzdGlja1N0YXRlID0gKHZhbHVlKSA9PiB7XG4gICAgdGhpcy5pc0pveXN0aWNrQWN0aXZlID0gdmFsdWU7XG4gIH07XG5cbiAgc2V0Sm95c3RpY2tEaXJlY3Rpb25zID0gKGRpcmVjdGlvbnMpID0+IHtcbiAgICB0aGlzLmpveXN0aWNrRGlyZWN0aW9ucyA9IGRpcmVjdGlvbnM7XG4gIH07XG5cbiAgc2V0Q29udGFpbmVyID0gKGNvbnRhaW5lcikgPT4ge1xuICAgIHRoaXMuY29udGFpbmVyID0gY29udGFpbmVyO1xuICAgIHRoaXMudXBkYXRlUmVuZGVyZXJTaXplKCk7XG4gICAgdGhpcy51cGRhdGVDYW1lcmFTaXplKCk7XG4gIH07XG5cbiAgY3JlYXRlU2NlbmUgPSAoKSA9PiB7XG4gICAgdGhpcy5zY2VuZSA9IG5ldyBUSFJFRS5TY2VuZSgpO1xuICAgIHRoaXMuc2NlbmUucm90YXRpb24ueCA9IC1NYXRoLlBJIC8gMjtcbiAgICB0aGlzLnNjZW5lLnNjYWxlLnkgPSAtMTtcbiAgICB0aGlzLnNjZW5lLmJhY2tncm91bmQgPSBuZXcgVEhSRUUuQ29sb3IoJyNFN0U3RTcnKTtcbiAgICB0aGlzLnNjZW5lLmZvZyA9IG5ldyBUSFJFRS5Gb2coJyNFN0U3RTcnLCA1LCAyMDApO1xuXG4gICAgdGhpcy5jcmVhdGVHcm91bmQoKTtcblxuICAgIHJldHVybiB0aGlzO1xuICB9O1xuXG4gIGNyZWF0ZUdyb3VuZCA9ICgpID0+IHtcbiAgICBjb25zdCB0ZXh0dXJlcyA9IHt9O1xuICAgIGNvbnN0IGFzc2V0cyA9IFtcbiAgICAgIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB0aGlzLmxvYWRUZXh0dXJlKEdyb3VuZFRleHR1cmUsIFs3NSwgNzVdLCAodGV4dHVyZSkgPT4ge1xuICAgICAgICB0ZXh0dXJlcy5tYXAgPSB0ZXh0dXJlO1xuICAgICAgICByZXNvbHZlKCk7XG4gICAgICB9KSksXG4gICAgXTtcblxuICAgIFByb21pc2UuYWxsKGFzc2V0cykudGhlbigoKSA9PiB7XG4gICAgICBsZXQgZ3JvdW5kTWF0ZXJpYWwgPSBuZXcgVEhSRUUuTWVzaFN0YW5kYXJkTWF0ZXJpYWwoe1xuICAgICAgICBtYXA6IHRleHR1cmVzLm1hcCxcbiAgICAgICAgbm9ybWFsTWFwOiB0ZXh0dXJlcy5ub3JtYWxNYXAsXG4gICAgICAgIGVudk1hcDogdGV4dHVyZXMuZW52TWFwLFxuICAgICAgICBjb2xvcjogMHhlN2U3ZTcsXG4gICAgICB9KTtcbiAgICAgIGxldCBncm91bmRNZXNoID0gbmV3IFRIUkVFLk1lc2gobmV3IFRIUkVFLkNpcmNsZUdlb21ldHJ5KDI1MCwgMTAwKSwgZ3JvdW5kTWF0ZXJpYWwpO1xuICAgICAgZ3JvdW5kTWVzaC5wb3NpdGlvbi56ID0gLTAuMDE7XG4gICAgICBncm91bmRNZXNoLnJlY2VpdmVTaGFkb3cgPSB0cnVlO1xuICAgICAgdGhpcy5zY2VuZS5hZGQoZ3JvdW5kTWVzaCk7XG4gICAgfSk7XG5cbiAgICByZXR1cm4gdGhpcztcbiAgfTtcblxuICBjcmVhdGVSZW5kZXJlciA9ICgpID0+IHtcbiAgICB0aGlzLnJlbmRlcmVyID0gbmV3IFRIUkVFLldlYkdMUmVuZGVyZXIoKTtcbiAgICB0aGlzLnJlbmRlcmVyLnNldFBpeGVsUmF0aW8od2luZG93LmRldmljZVBpeGVsUmF0aW8pO1xuICAgIHRoaXMudXBkYXRlUmVuZGVyZXJTaXplKCk7XG4gICAgdGhpcy5yZW5kZXJlci5sb2NhbENsaXBwaW5nRW5hYmxlZCA9IHRydWU7XG4gICAgdGhpcy5yZW5kZXJlci5zaGFkb3dNYXAuZW5hYmxlZCA9IHRydWU7XG4gICAgdGhpcy5yZW5kZXJlci5zaGFkb3dNYXAudHlwZSA9IFRIUkVFLlBDRlNvZnRTaGFkb3dNYXA7XG4gIFxuICAgIHJldHVybiB0aGlzO1xuICB9O1xuXG4gIHVwZGF0ZVJlbmRlcmVyU2l6ZSA9ICgpID0+IHtcbiAgICB0aGlzLnJlbmRlcmVyLnNldFNpemUodGhpcy53aWR0aCwgdGhpcy5oZWlnaHQpO1xuICB9O1xuXG4gIGNyZWF0ZUNhbWVyYSA9ICgpID0+IHtcbiAgICB0aGlzLmNhbWVyYSA9IG5ldyBUSFJFRS5QZXJzcGVjdGl2ZUNhbWVyYSg3NSwgdGhpcy53aWR0aCAvIHRoaXMuaGVpZ2h0LCAwLjEsIDEwMDApO1xuICAgIHRoaXMuY2FtZXJhLnBvc2l0aW9uLnNldCgwLCAwLCAwKTtcblxuICAgIHN0b3JlLmFkZEV2ZW50TGlzdGVuZXIoJ3Jlc2l6ZScsICgpID0+IHtcbiAgICAgIHRoaXMudXBkYXRlQ2FtZXJhU2l6ZSgpO1xuICAgICAgdGhpcy51cGRhdGVSZW5kZXJlclNpemUoKTtcbiAgICB9KTtcbiAgXG4gICAgcmV0dXJuIHRoaXM7XG4gIH07XG5cbiAgdXBkYXRlQ2FtZXJhU2l6ZSA9ICgpID0+IHtcbiAgICB0aGlzLmNhbWVyYS5hc3BlY3QgPSB0aGlzLndpZHRoIC8gdGhpcy5oZWlnaHQ7XG4gICAgdGhpcy5jYW1lcmEudXBkYXRlUHJvamVjdGlvbk1hdHJpeCgpO1xuICB9O1xuXG4gIGNyZWF0ZUNvbnRyb2xzID0gKCkgPT4ge1xuICAgIHRoaXMuY29udHJvbHMgPSBuZXcgQ2FtZXJhQ29udHJvbHModGhpcy5jYW1lcmEsIHRoaXMucmVuZGVyZXIuZG9tRWxlbWVudCk7XG4gICAgdGhpcy5jb250cm9scy5taW5EaXN0YW5jZSA9IDAuNTtcbiAgICB0aGlzLmNvbnRyb2xzLm1heERpc3RhbmNlID0gNTA7XG4gICAgdGhpcy5jb250cm9scy5tYXhQb2xhckFuZ2xlID0gTWF0aC5QSSAvIDIuMTtcbiAgICB0aGlzLnNldERlZmF1bHRDb250cm9scyhNYXRoLlBJIC8gNCk7XG4gICAgdGhpcy5jb250cm9scy52ZXJ0aWNhbERyYWdUb0ZvcndhcmQgPSB0cnVlO1xuICAgIHRoaXMuY3VycmVudENvbnRyb2xzVHlwZSA9ICdvcmJpdCc7XG5cbiAgICBjb25zdCBhbmltYXRlID0gKCkgPT4ge1xuICAgICAgdGhpcy5jb250cm9scy51cGRhdGUodGhpcy5jbG9jay5nZXREZWx0YSgpKTtcbiAgICAgIHdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUoYW5pbWF0ZSk7XG5cbiAgICAgIGNvbnN0IGRpc3RhbmNlID0gMC4yO1xuXG4gICAgICBpZiAodGhpcy5pc0pveXN0aWNrQWN0aXZlKSB7XG4gICAgICAgIGlmICh0aGlzLmpveXN0aWNrRGlyZWN0aW9ucy5zb21lKChkaXJlY3Rpb24pID0+IGRpcmVjdGlvbiA9PT0gJ2ZvcndhcmQnKSkge1xuICAgICAgICAgIHRoaXMuY29udHJvbHMuZm9yd2FyZChkaXN0YW5jZSwgdHJ1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuam95c3RpY2tEaXJlY3Rpb25zLnNvbWUoKGRpcmVjdGlvbikgPT4gZGlyZWN0aW9uID09PSAnYmFja3dhcmQnKSkge1xuICAgICAgICAgIHRoaXMuY29udHJvbHMuZm9yd2FyZCgtZGlzdGFuY2UsIHRydWUpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmpveXN0aWNrRGlyZWN0aW9ucy5zb21lKChkaXJlY3Rpb24pID0+IGRpcmVjdGlvbiA9PT0gJ3JpZ2h0JykpIHtcbiAgICAgICAgICB0aGlzLmNvbnRyb2xzLnRydWNrKGRpc3RhbmNlLCAwLCB0cnVlKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5qb3lzdGlja0RpcmVjdGlvbnMuc29tZSgoZGlyZWN0aW9uKSA9PiBkaXJlY3Rpb24gPT09ICdsZWZ0JykpIHtcbiAgICAgICAgICB0aGlzLmNvbnRyb2xzLnRydWNrKC1kaXN0YW5jZSwgMCwgdHJ1ZSk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgdGhpcy5yZW5kZXJlci5yZW5kZXIodGhpcy5zY2VuZSwgdGhpcy5jYW1lcmEpO1xuICAgIH07XG4gICAgYW5pbWF0ZSgpO1xuICBcbiAgICByZXR1cm4gdGhpcztcbiAgfTtcblxuICBzZXREZWZhdWx0Q29udHJvbHMgPSAoYW5nbGUpID0+IHtcbiAgICB0aGlzLmNvbnRyb2xzLmRvbGx5VG8oMjAsIHRydWUpO1xuICAgIHRoaXMuY29udHJvbHMubW92ZVRvKDAsIDAsIDAsIHRydWUpO1xuICAgIHRoaXMuY29udHJvbHMubW91c2VCdXR0b25zLndoZWVsID0gQ2FtZXJhQ29udHJvbHMuQUNUSU9OLkRPTExZO1xuICAgIHRoaXMuY29udHJvbHMudG91Y2hlcy50d28gPSBDYW1lcmFDb250cm9scy5BQ1RJT04uVE9VQ0hfRE9MTFlfVFJVQ0s7XG4gICAgdGhpcy5jb250cm9scy5yb3RhdGVUbygwLCBhbmdsZSwgdHJ1ZSk7XG4gIH07XG5cbiAgc2V0Q3VycmVudENvbnRyb2xzVHlwZSA9ICh0eXBlKSA9PiB7XG4gICAgdGhpcy5jdXJyZW50Q29udHJvbHNUeXBlID0gdHlwZTtcbiAgICBjb25zdCBFUFMgPSAxZS01O1xuICAgIGlmICh0eXBlID09PSAnb3JiaXQnKSB7XG4gICAgICB0aGlzLmNvbnRyb2xzLm1heFBvbGFyQW5nbGUgPSBNYXRoLlBJIC8gMi4xO1xuICAgICAgdGhpcy5zZXREZWZhdWx0Q29udHJvbHMoTWF0aC5QSSAvIDQpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAodHlwZSA9PT0gJ3BsYW4nKSB7XG4gICAgICB0aGlzLnNldERlZmF1bHRDb250cm9scygwKTtcbiAgICAgIHRoaXMuY29udHJvbHMubWF4UG9sYXJBbmdsZSA9IDA7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmICh0eXBlID09PSAnd2FzZCcpIHtcbiAgICAgIHRoaXMuY2FtZXJhLnBvc2l0aW9uLnNldCgwLCAwLCBFUFMpO1xuICAgICAgdGhpcy5jb250cm9scy5tYXhQb2xhckFuZ2xlID0gTWF0aC5QSTtcbiAgICAgIHRoaXMuY29udHJvbHMuZG9sbHlUbygwLCB0cnVlKTtcbiAgICAgIHRoaXMuY29udHJvbHMubW92ZVRvKDAsIHRoaXMud2FsbHNIZWlnaHQgLyAyLCAwLCB0cnVlKTtcbiAgICAgIHRoaXMuY29udHJvbHMucm90YXRlVG8oMCwgTWF0aC5QSSAvIDIsIHRydWUpO1xuICAgICAgdGhpcy5jb250cm9scy5tb3VzZUJ1dHRvbnMud2hlZWwgPSBDYW1lcmFDb250cm9scy5BQ1RJT04uTk9ORTtcbiAgICAgIHRoaXMuY29udHJvbHMudG91Y2hlcy50d28gPSBDYW1lcmFDb250cm9scy5BQ1RJT04uTk9ORTtcbiAgICB9XG4gIH07XG5cbiAgYWRkS2V5RXZlbnRzID0gKCkgPT4ge1xuICAgIGNvbnN0IGtleUV2ZW50cyA9IGdldEtleUV2ZW50cyh0aGlzLmNvbnRyb2xzKTtcbiAgXG4gICAga2V5RXZlbnRzLmZvckVhY2goKHsga2V5cywgY2FsbGJhY2sgfSkgPT4ge1xuICAgICAga2V5cy5mb3JFYWNoKChrZXkpID0+IGtleS5hZGRFdmVudExpc3RlbmVyKCdob2xkaW5nJywgKCkgPT4ge1xuICAgICAgICBpZiAodGhpcy5jdXJyZW50Q29udHJvbHNUeXBlICE9PSAnd2FzZCcpIHJldHVybjtcbiAgICAgICAgY2FsbGJhY2soKTtcbiAgICAgIH0pKTtcbiAgICB9KTtcblxuICAgIHJldHVybiB0aGlzO1xuICB9O1xuXG4gIGxvYWRUZXh0dXJlKGltZywgcmVwZWF0ID0gWzEsIDFdLCBjYWxsYmFjayA9ICgpID0+IHt9KSB7XG4gICAgdGhpcy50ZXh0dXJlTG9hZGVyLmxvYWQoaW1nLCAodGV4dHVyZSkgPT4ge1xuICAgICAgdGV4dHVyZS53cmFwUyA9IHRleHR1cmUud3JhcFQgPSBUSFJFRS5SZXBlYXRXcmFwcGluZztcbiAgICAgIHRleHR1cmUucmVwZWF0LnNldChyZXBlYXRbMF0sIHJlcGVhdFsxXSk7XG4gICAgICB0ZXh0dXJlLmZsaXBZID0gZmFsc2U7XG5cbiAgICAgIGNhbGxiYWNrKHRleHR1cmUpO1xuICAgIH0pO1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IG5ldyBNb2RlbFN0b3JlKCk7XG4iXX0=