hart-estate-widget 0.0.41 → 0.0.44

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 (74) hide show
  1. package/README.md +16 -4
  2. package/build/assets/fonts/RobotoMono/RobotoMono-Bold.eot +0 -0
  3. package/build/assets/fonts/RobotoMono/RobotoMono-Bold.ttf +0 -0
  4. package/build/assets/fonts/RobotoMono/RobotoMono-Bold.woff +0 -0
  5. package/build/assets/fonts/RobotoMono/RobotoMono-Bold.woff2 +0 -0
  6. package/build/assets/fonts/RobotoMono/RobotoMono-BoldItalic.eot +0 -0
  7. package/build/assets/fonts/RobotoMono/RobotoMono-BoldItalic.ttf +0 -0
  8. package/build/assets/fonts/RobotoMono/RobotoMono-BoldItalic.woff +0 -0
  9. package/build/assets/fonts/RobotoMono/RobotoMono-BoldItalic.woff2 +0 -0
  10. package/build/assets/fonts/RobotoMono/RobotoMono-Italic.eot +0 -0
  11. package/build/assets/fonts/RobotoMono/RobotoMono-Italic.ttf +0 -0
  12. package/build/assets/fonts/RobotoMono/RobotoMono-Italic.woff +0 -0
  13. package/build/assets/fonts/RobotoMono/RobotoMono-Italic.woff2 +0 -0
  14. package/build/assets/fonts/RobotoMono/RobotoMono-Light.eot +0 -0
  15. package/build/assets/fonts/RobotoMono/RobotoMono-Light.ttf +0 -0
  16. package/build/assets/fonts/RobotoMono/RobotoMono-Light.woff +0 -0
  17. package/build/assets/fonts/RobotoMono/RobotoMono-Light.woff2 +0 -0
  18. package/build/assets/fonts/RobotoMono/RobotoMono-LightItalic.eot +0 -0
  19. package/build/assets/fonts/RobotoMono/RobotoMono-LightItalic.ttf +0 -0
  20. package/build/assets/fonts/RobotoMono/RobotoMono-LightItalic.woff +0 -0
  21. package/build/assets/fonts/RobotoMono/RobotoMono-LightItalic.woff2 +0 -0
  22. package/build/assets/fonts/RobotoMono/RobotoMono-Medium.eot +0 -0
  23. package/build/assets/fonts/RobotoMono/RobotoMono-Medium.ttf +0 -0
  24. package/build/assets/fonts/RobotoMono/RobotoMono-Medium.woff +0 -0
  25. package/build/assets/fonts/RobotoMono/RobotoMono-Medium.woff2 +0 -0
  26. package/build/assets/fonts/RobotoMono/RobotoMono-MediumItalic.eot +0 -0
  27. package/build/assets/fonts/RobotoMono/RobotoMono-MediumItalic.ttf +0 -0
  28. package/build/assets/fonts/RobotoMono/RobotoMono-MediumItalic.woff +0 -0
  29. package/build/assets/fonts/RobotoMono/RobotoMono-MediumItalic.woff2 +0 -0
  30. package/build/assets/fonts/RobotoMono/RobotoMono-Regular.eot +0 -0
  31. package/build/assets/fonts/RobotoMono/RobotoMono-Regular.ttf +0 -0
  32. package/build/assets/fonts/RobotoMono/RobotoMono-Regular.woff +0 -0
  33. package/build/assets/fonts/RobotoMono/RobotoMono-Regular.woff2 +0 -0
  34. package/build/assets/fonts/RobotoMono/RobotoMono-Thin.eot +0 -0
  35. package/build/assets/fonts/RobotoMono/RobotoMono-Thin.ttf +0 -0
  36. package/build/assets/fonts/RobotoMono/RobotoMono-Thin.woff +0 -0
  37. package/build/assets/fonts/RobotoMono/RobotoMono-Thin.woff2 +0 -0
  38. package/build/assets/fonts/RobotoMono/RobotoMono.css +108 -0
  39. package/build/assets/icons/1x.svg +4 -0
  40. package/build/assets/icons/2x.svg +4 -0
  41. package/build/assets/icons/bullet.png +0 -0
  42. package/build/assets/icons/close.svg +4 -0
  43. package/build/assets/icons/enter-fullscreen.svg +6 -0
  44. package/build/assets/icons/hand-move.svg +15 -0
  45. package/build/assets/icons/hand-research.svg +12 -0
  46. package/build/assets/icons/rotation-close.svg +6 -0
  47. package/build/assets/icons/rotation.svg +4 -0
  48. package/build/assets/img/logo.svg +11 -0
  49. package/build/assets/sass/components/instructions.sass +51 -33
  50. package/build/assets/sass/components/model.sass +1 -0
  51. package/build/assets/sass/components/panorama.sass +95 -31
  52. package/build/assets/sass/components/tabs.sass +90 -91
  53. package/build/assets/sass/index.sass +44 -2
  54. package/build/assets/sass/mixin.sass +12 -0
  55. package/build/assets/sass/vars.sass +4 -1
  56. package/build/components/Application.js +48 -71
  57. package/build/components/Buttons/FullScreenButton.js +46 -0
  58. package/build/components/Buttons/TabButton.js +26 -0
  59. package/build/components/Instructions.js +26 -15
  60. package/build/components/ModelTab.js +62 -39
  61. package/build/components/PanoramaTab.js +262 -161
  62. package/build/components/RotationTab.js +40 -10
  63. package/build/config/defaultConfig.js +5 -2
  64. package/build/enums/deviceOrientationStatus.js +11 -0
  65. package/build/enums/imageExtentions.js +21 -0
  66. package/build/index.js +8 -12
  67. package/build/store/fullScreenStore.js +54 -0
  68. package/build/store/index.js +17 -29
  69. package/build/utils/panoramaHelpers.js +45 -2
  70. package/package.json +6 -4
  71. package/build/components/TabPanes.js +0 -96
  72. package/build/components/TabWrapper.js +0 -42
  73. package/build/index.css +0 -1
  74. package/build/index.css.map +0 -1
@@ -7,11 +7,14 @@ exports.default = void 0;
7
7
 
8
8
  var _react = _interopRequireDefault(require("react"));
9
9
 
10
+ var _logo = _interopRequireDefault(require("../assets/img/logo.svg"));
11
+
10
12
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
11
13
 
12
14
  const defaultConfig = {
13
- tabs: ['planImage', 'topView', 'topDownView', 'rotation', 'panorama', 'model'],
14
- tabPanes: true,
15
+ tabs: ['rotation', 'panorama'],
16
+ logo: _logo.default,
17
+ logoUrl: null,
15
18
  width: null,
16
19
  height: null,
17
20
  planImage: null,
@@ -0,0 +1,11 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.deviceOrientationStatus = void 0;
7
+ const deviceOrientationStatus = {
8
+ GRANTED: 'granted',
9
+ DENIED: 'denied'
10
+ };
11
+ exports.deviceOrientationStatus = deviceOrientationStatus;
@@ -0,0 +1,21 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.removeExtention = exports.imgExtentions = void 0;
7
+
8
+ require("core-js/modules/es.array.reduce.js");
9
+
10
+ require("core-js/modules/es.regexp.exec.js");
11
+
12
+ require("core-js/modules/es.string.replace.js");
13
+
14
+ const imgExtentions = ['.png', '.PNG', '.jpg', '.JPG'];
15
+ exports.imgExtentions = imgExtentions;
16
+
17
+ const removeExtention = str => imgExtentions.reduce((acc, extention) => {
18
+ return acc.replace(extention, '');
19
+ }, str);
20
+
21
+ exports.removeExtention = removeExtention;
package/build/index.js CHANGED
@@ -45,12 +45,6 @@ Object.defineProperty(exports, "RotationTab", {
45
45
  return _RotationTab.default;
46
46
  }
47
47
  });
48
- Object.defineProperty(exports, "TabWrapper", {
49
- enumerable: true,
50
- get: function get() {
51
- return _TabWrapper.default;
52
- }
53
- });
54
48
  Object.defineProperty(exports, "Widget", {
55
49
  enumerable: true,
56
50
  get: function get() {
@@ -60,8 +54,16 @@ Object.defineProperty(exports, "Widget", {
60
54
 
61
55
  var _react = _interopRequireDefault(require("react"));
62
56
 
57
+ require("./assets/fonts/RobotoMono/RobotoMono.css");
58
+
59
+ require("./assets/sass/index.sass");
60
+
61
+ var _apiStore = _interopRequireDefault(require("./store/apiStore"));
62
+
63
63
  var _Widget = _interopRequireDefault(require("./components/Widget"));
64
64
 
65
+ var _Loader = _interopRequireDefault(require("./components/Loader"));
66
+
65
67
  var _ImageTab = _interopRequireDefault(require("./components/ImageTab"));
66
68
 
67
69
  var _Instructions = _interopRequireDefault(require("./components/Instructions"));
@@ -70,12 +72,6 @@ var _RotationTab = _interopRequireDefault(require("./components/RotationTab"));
70
72
 
71
73
  var _PanoramaTab = _interopRequireDefault(require("./components/PanoramaTab"));
72
74
 
73
- var _TabWrapper = _interopRequireDefault(require("./components/TabWrapper"));
74
-
75
75
  var _ModelTab = _interopRequireDefault(require("./components/ModelTab"));
76
76
 
77
- var _Loader = _interopRequireDefault(require("./components/Loader"));
78
-
79
- var _apiStore = _interopRequireDefault(require("./store/apiStore"));
80
-
81
77
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
@@ -0,0 +1,54 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = void 0;
7
+
8
+ require("core-js/modules/es.promise.js");
9
+
10
+ var _react = _interopRequireDefault(require("react"));
11
+
12
+ var _screenfull = _interopRequireDefault(require("screenfull"));
13
+
14
+ var _mobx = require("mobx");
15
+
16
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
17
+
18
+ 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; }
19
+
20
+ (0, _mobx.configure)({
21
+ useProxies: 'never'
22
+ });
23
+
24
+ class FullscreenStore {
25
+ constructor() {
26
+ _defineProperty(this, "enabled", _screenfull.default.isEnabled);
27
+
28
+ _defineProperty(this, "active", false);
29
+
30
+ _defineProperty(this, "element", null);
31
+
32
+ (0, _mobx.makeAutoObservable)(this);
33
+ }
34
+
35
+ init() {
36
+ this.element = document.querySelector('#widget-application');
37
+ if (!this.enabled) return;
38
+
39
+ _screenfull.default.on('change', () => this.active = _screenfull.default.isFullscreen);
40
+ }
41
+
42
+ async enter() {
43
+ return await _screenfull.default.request(this.element);
44
+ }
45
+
46
+ async exit() {
47
+ return await _screenfull.default.exit();
48
+ }
49
+
50
+ }
51
+
52
+ var _default = new FullscreenStore();
53
+
54
+ exports.default = _default;
@@ -5,7 +5,9 @@ Object.defineProperty(exports, "__esModule", {
5
5
  });
6
6
  exports.default = void 0;
7
7
 
8
- require("core-js/modules/es.string.includes.js");
8
+ require("core-js/modules/es.array.sort.js");
9
+
10
+ require("core-js/modules/web.dom-collections.iterator.js");
9
11
 
10
12
  var _react = _interopRequireDefault(require("react"));
11
13
 
@@ -18,51 +20,37 @@ function _defineProperty(obj, key, value) { if (key in obj) { Object.definePrope
18
20
  (0, _mobx.configure)({
19
21
  useProxies: 'never'
20
22
  });
23
+ const LivingRoomType = 'Living';
21
24
 
22
25
  class Store {
23
26
  constructor() {
24
27
  _defineProperty(this, "config", null);
25
28
 
26
- _defineProperty(this, "listeners", {
27
- 'enterComponent': [],
28
- 'exitComponent': []
29
- });
29
+ _defineProperty(this, "listeners", {});
30
30
 
31
31
  (0, _mobx.makeAutoObservable)(this);
32
32
  }
33
33
 
34
- get hallRoomId() {
34
+ get initialPanoramaRoomId() {
35
35
  const {
36
36
  json
37
37
  } = this.config;
38
- if (!json) return 0;
39
- const exteriorWallWithDoor = json.Floors[0].ExteriorWalls.find(wallId => {
40
- return json.Floors[0].Doors.some(door => door.Walls.some(doorWallId => doorWallId === wallId));
41
- });
42
- const exteriorDoor = json.Floors[0].Doors.find(door => {
43
- const isSameDoor = door.Walls.some(doorWallId => doorWallId === exteriorWallWithDoor);
44
- const isExterior = door.Walls.some(doorWallId => json.Floors[0].ExteriorWalls.some(exteriorWallId => exteriorWallId === doorWallId));
45
- return isSameDoor && isExterior;
46
- });
47
- const wallWithExteriorDoor = exteriorDoor.Walls.find(wallId => wallId !== exteriorWallWithDoor);
48
- const room = json.Floors[0].Units[0].Rooms.find(_ref => {
38
+ if (!json) return null;
39
+ const {
40
+ Rooms
41
+ } = json.Floors[0].Units[0];
42
+ const livingRoom = Rooms.find(_ref => {
49
43
  let {
50
- Walls
44
+ Type
51
45
  } = _ref;
52
- return Walls.some(wallId => wallId === wallWithExteriorDoor);
46
+ return Type === LivingRoomType;
53
47
  });
54
- return room.ID;
48
+ const biggestRoom = [...Rooms].sort((a, b) => b.Area - a.Area)[0];
49
+ return (livingRoom === null || livingRoom === void 0 ? void 0 : livingRoom.ID) || (biggestRoom === null || biggestRoom === void 0 ? void 0 : biggestRoom.ID) || null;
55
50
  }
56
51
 
57
- get hallRoomImage() {
58
- const {
59
- json,
60
- panoramaImages
61
- } = this.config;
62
- if (!json) return panoramaImages[0] || null;
63
- const roomIndex = json.Floors[0].Units[0].Rooms.findIndex(room => room.ID === this.hallRoomId);
64
- const image = panoramaImages.find(url => url.includes("".concat(roomIndex, ".png")));
65
- return image || panoramaImages[0] || null;
52
+ isTabIncluded(value) {
53
+ return this.config.tabs.find(tab => tab === value);
66
54
  }
67
55
 
68
56
  setConfig(config) {
@@ -3,7 +3,7 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- exports.getScale = exports.getRoomCoordinates = exports.getArrayFromNumber = exports.findWallVertices = void 0;
6
+ exports.getScale = exports.getRoomCoordinates = exports.getClosestPanorama = exports.getCameraFromSrc = exports.getArrayFromNumber = exports.findWallVertices = exports.cameraIdBeginning = void 0;
7
7
 
8
8
  require("core-js/modules/web.dom-collections.iterator.js");
9
9
 
@@ -11,8 +11,15 @@ require("core-js/modules/es.array.reduce.js");
11
11
 
12
12
  var _react = _interopRequireDefault(require("react"));
13
13
 
14
+ var _geometric = require("geometric");
15
+
16
+ var _imageExtentions = require("../enums/imageExtentions");
17
+
14
18
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
15
19
 
20
+ const cameraIdBeginning = 'CameraId';
21
+ exports.cameraIdBeginning = cameraIdBeginning;
22
+
16
23
  const getArrayFromNumber = num => [...Array(num).keys()];
17
24
 
18
25
  exports.getArrayFromNumber = getArrayFromNumber;
@@ -55,4 +62,40 @@ const getScale = (image, json) => {
55
62
  };
56
63
  };
57
64
 
58
- exports.getScale = getScale;
65
+ exports.getScale = getScale;
66
+
67
+ const getCameraFromSrc = (json, src) => {
68
+ var _json$Floors$0$Camera;
69
+
70
+ const cameraIdIndex = src.indexOf(cameraIdBeginning);
71
+ if (cameraIdIndex === -1) return null;
72
+ const cameraId = (0, _imageExtentions.removeExtention)(src.substring(cameraIdIndex));
73
+ return ((_json$Floors$0$Camera = json.Floors[0].CameraPoints) === null || _json$Floors$0$Camera === void 0 ? void 0 : _json$Floors$0$Camera.find(_ref => {
74
+ let {
75
+ ID
76
+ } = _ref;
77
+ return ID === cameraId;
78
+ })) || null;
79
+ };
80
+
81
+ exports.getCameraFromSrc = getCameraFromSrc;
82
+
83
+ const getClosestPanorama = (point, panoramas) => {
84
+ return panoramas.reduce((closest, current) => {
85
+ const length = (0, _geometric.lineLength)([point, [current.userData.left, current.userData.top]]);
86
+
87
+ if (length < closest.length) {
88
+ return {
89
+ panorama: current,
90
+ length
91
+ };
92
+ }
93
+
94
+ return closest;
95
+ }, {
96
+ length: Infinity,
97
+ panorama: null
98
+ });
99
+ };
100
+
101
+ exports.getClosestPanorama = getClosestPanorama;
package/package.json CHANGED
@@ -3,7 +3,7 @@
3
3
  "description": "HART Estate widget",
4
4
  "author": "HART",
5
5
  "keywords": [],
6
- "version": "0.0.41",
6
+ "version": "0.0.44",
7
7
  "private": false,
8
8
  "main": "build/index.js",
9
9
  "module": "build/index.js",
@@ -12,10 +12,11 @@
12
12
  "README.md"
13
13
  ],
14
14
  "scripts": {
15
- "start": "babel src --watch --out-dir build --copy-files",
15
+ "babel": "babel src --out-dir build --copy-files",
16
+ "start": "npm run babel -- --watch",
16
17
  "start-example": "cd ./example && npm run start",
17
- "build": "rm -rf build && NODE_ENV=production babel src --out-dir build --copy-files && npm run build:sass",
18
- "build:sass": "sass src/assets/sass/index.sass:build/index.css --style compressed"
18
+ "build": "rm -rf build && NODE_ENV=production npm run babel",
19
+ "local-tunnel": "Lt --port 9000 --subdomain estate-widget --local-host localhost"
19
20
  },
20
21
  "dependencies": {
21
22
  "camera-controls": "^1.34.1",
@@ -29,6 +30,7 @@
29
30
  "panzoom": "^9.4.2",
30
31
  "react": "^17.0.2",
31
32
  "react-dom": "^17.0.2",
33
+ "screenfull": "^6.0.1",
32
34
  "three": "^0.137.5",
33
35
  "three-device-orientation": "^1.0.3"
34
36
  },
@@ -1,96 +0,0 @@
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 _mobxReactLite = require("mobx-react-lite");
11
-
12
- var _store = _interopRequireDefault(require("../store"));
13
-
14
- var _Loader = _interopRequireDefault(require("./Loader"));
15
-
16
- var _refreshIcon = _interopRequireDefault(require("../assets/img/refresh-icon.svg"));
17
-
18
- var _D = _interopRequireDefault(require("../assets/img/3D.jpg"));
19
-
20
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
21
-
22
- const TabPanes = (0, _mobxReactLite.observer)(_ref => {
23
- let {
24
- currentTab,
25
- setCurrentTab
26
- } = _ref;
27
- const {
28
- planImage,
29
- topView,
30
- topDownView,
31
- rotationImages,
32
- tabs
33
- } = _store.default.config;
34
- const images = {
35
- 'planImage': {
36
- img: planImage,
37
- icon: null
38
- },
39
- 'topView': {
40
- img: topView,
41
- icon: null
42
- },
43
- 'topDownView': {
44
- img: topDownView,
45
- icon: null
46
- },
47
- 'panorama': {
48
- img: _store.default.hallRoomImage,
49
- icon: null
50
- },
51
- 'rotation': {
52
- img: rotationImages[0],
53
- icon: _refreshIcon.default
54
- },
55
- 'model': {
56
- img: _D.default,
57
- icon: null
58
- }
59
- };
60
- return /*#__PURE__*/_react.default.createElement("div", {
61
- className: "widget-tab-panes"
62
- }, tabs.map((tab, index) => /*#__PURE__*/_react.default.createElement(TabPane, {
63
- key: index,
64
- icon: images[tab].icon,
65
- image: images[tab].img,
66
- active: currentTab === tab,
67
- onClick: () => setCurrentTab(tab)
68
- })));
69
- });
70
-
71
- const TabPane = _ref2 => {
72
- let {
73
- active,
74
- icon,
75
- image,
76
- onClick
77
- } = _ref2;
78
- return /*#__PURE__*/_react.default.createElement("div", {
79
- className: "widget-tab-pane ".concat(active ? 'widget-tab-pane--active' : ''),
80
- onClick: onClick
81
- }, !image && /*#__PURE__*/_react.default.createElement(_Loader.default, {
82
- absolute: true,
83
- size: "sm"
84
- }), image && /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement("img", {
85
- className: "widget-tab-pane__image",
86
- src: image,
87
- alt: "tab-pane"
88
- }), icon && /*#__PURE__*/_react.default.createElement("img", {
89
- className: "widget-tab-pane__icon",
90
- src: icon,
91
- alt: "tab-pane-icon"
92
- })));
93
- };
94
-
95
- var _default = TabPanes;
96
- exports.default = _default;
@@ -1,42 +0,0 @@
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 _ImageTab = _interopRequireDefault(require("./ImageTab"));
11
-
12
- var _Instructions = _interopRequireDefault(require("./Instructions"));
13
-
14
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
15
-
16
- const TabWrapper = _ref => {
17
- let {
18
- isActive,
19
- image,
20
- title,
21
- text,
22
- disabled,
23
- onStart,
24
- children
25
- } = _ref;
26
-
27
- if (!isActive) {
28
- return /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement(_ImageTab.default, {
29
- image: image
30
- }), /*#__PURE__*/_react.default.createElement(_Instructions.default, {
31
- disabled: disabled,
32
- title: title,
33
- text: text,
34
- onClick: onStart
35
- }));
36
- }
37
-
38
- return children;
39
- };
40
-
41
- var _default = TabWrapper;
42
- exports.default = _default;
package/build/index.css DELETED
@@ -1 +0,0 @@
1
- *,*:before,*:after{box-sizing:border-box;-webkit-box-sizing:border-box;margin:0;padding:0}html,body{font-size:20px}.widget-application{--vh: 100vh;width:100%;height:calc(100*var(--vh));overflow:hidden;position:relative;z-index:1}.widget-application *,.widget-application *:before,.widget-application *:after{font-family:"Lato",sans-serif;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;outline:none;font-weight:400;text-decoration:none}.widget-application .widget-close{position:absolute;display:flex;align-items:center;justify-content:center;z-index:3;right:15px;top:15px;color:#000;background-color:#fad436;padding:5px 15px;border-radius:10px;font-size:.8rem;border:none;cursor:pointer}.widget-application .widget-close:hover{box-shadow:1px 1px 10px rgba(0,0,0,.15)}.widget-application .widget-tab{width:100%;height:100%;display:flex;align-items:center;justify-content:center;padding:60px 30px 125px 30px}@media(max-width: 630px){.widget-application .widget-tab{padding:60px 15px 90px 15px}}.widget-application .widget-tab--panes-hidden{padding:60px 30px}.widget-application .widget-tab__image{max-width:100%;max-height:100%;object-fit:contain;display:block}.widget-application .widget-tab__threesixty{width:100%;height:100%;touch-action:none;-webkit-touch-action:none}.widget-application .widget-tab__threesixty-container{width:100% !important;height:100% !important;position:relative;cursor:move;background-image:none !important}.widget-application .widget-tab__threesixty-container img{position:absolute;left:50%;top:50%;transform:translate(-50%, -50%);max-width:100%;max-height:100%;object-fit:contain;user-select:none;-webkit-user-select:none;user-drag:none;-webkit-user-drag:none}.widget-application .widget-tab--panorama .widget-tab__image,.widget-application .widget-tab--model .widget-tab__image{position:absolute;z-index:1;left:0;top:0;width:100%;height:100%;object-fit:cover}.widget-application .widget-tab-menu{position:absolute;z-index:3;left:15px;top:15px;max-height:100%;overflow-y:auto;padding-bottom:30px}.widget-application .widget-tab-menu__wallpapers{display:flex;flex-wrap:wrap;align-items:flex-start;margin-top:10px;width:100%}.widget-application .widget-tab-menu__wallpapers img{width:30px;height:30px;display:block;object-fit:cover;cursor:pointer;margin-right:10px;margin-block-end:10px}.widget-application .widget-tab-menu ul{list-style-type:none}.widget-application .widget-tab-menu ul li{color:#000;background-color:#fad436;padding:5px 15px;border-radius:10px;font-size:.8rem;border:none;cursor:pointer;margin-bottom:15px;width:200px;user-select:none;-webkit-user-select:none;user-drag:none;-webkit-user-drag:none}.widget-application .widget-tab-menu ul li label{display:flex;cursor:inherit;width:100%}.widget-application .widget-tab-menu ul li input[type=color]{cursor:pointer;margin-left:auto;width:50px;height:20px;border:0;border-radius:5px}.widget-application .widget-tab-menu ul li input[type=color]::-webkit-color-swatch-wrapper{display:none !important}.widget-application .widget-tab-menu ul li input[type=file]{display:none}.widget-application .widget-tab-menu ul li:hover{box-shadow:1px 1px 10px rgba(0,0,0,.15)}.widget-application .widget-tab-menu ul li:nth-child(1){position:relative}.widget-application .widget-tab-menu ul li:nth-child(1)::after{content:"|||";transform:translateY(-50%) rotate(90deg);font-size:20px;line-height:20px;margin-left:10px;display:block;position:absolute;right:10px;top:50%}.widget-application .widget-tab-panes{position:absolute;z-index:3;left:50%;bottom:5px;max-width:100%;padding:0 30px 15px 30px;transform:translateX(-50%);display:flex;align-items:center;justify-content:flex-start;overflow-x:auto}@media(max-width: 630px){.widget-application .widget-tab-panes{padding:0 15px 15px 15px}}.widget-application .widget-tab-panes .widget-tab-pane{width:85px;height:85px;border-radius:5px;margin:0 10px;background-color:#f4f7f7;cursor:pointer;border-width:3px;border-style:solid;border-color:#f4f7f7;overflow:hidden;display:flex;align-items:center;justify-content:center;flex:none;transition:border .3s ease;position:relative;user-select:none;-webkit-user-select:none;user-drag:none;-webkit-user-drag:none}@media(max-width: 630px){.widget-application .widget-tab-panes .widget-tab-pane{width:50px;height:50px;margin:0 5px}}.widget-application .widget-tab-panes .widget-tab-pane::before{content:"";position:absolute;left:0;top:0;width:100%;height:100%;box-shadow:inset 1px 1px 10px rgba(0,0,0,.3)}.widget-application .widget-tab-panes .widget-tab-pane--active,.widget-application .widget-tab-panes .widget-tab-pane:hover{border-color:#fad436}.widget-application .widget-tab-panes .widget-tab-pane__image{width:100%;height:100%;object-fit:cover;object-position:center;display:block}.widget-application .widget-tab-panes .widget-tab-pane__icon{width:16px;height:16px;object-fit:contain;object-position:center;display:block;position:absolute;left:10px;bottom:8px}@media(max-width: 630px){.widget-application .widget-tab-panes .widget-tab-pane__icon{width:12px;height:12px;left:5px;bottom:3px}}.widget-application .widget-instructions{position:absolute;z-index:2;left:0;top:0;width:100%;height:100%;display:flex;align-items:center;justify-content:center;background-color:rgba(0,0,0,.3)}.widget-application .widget-instructions__content{display:flex;flex-direction:column;align-items:flex-start;justify-content:flex-start;background-color:#fff;box-shadow:1px 1px 10px rgba(0,0,0,.5);border-radius:5px;overflow:hidden;width:350px}.widget-application .widget-instructions__head{width:100%;padding:10px;border-bottom:1px solid #d1d1d1;color:rgba(74,74,74,.7);text-align:center;font-size:.8rem}.widget-application .widget-instructions__body{width:100%;padding:10px;text-align:center;font-size:.7rem}.widget-application .widget-instructions__body p{margin:10px 0}.widget-application .widget-instructions__footer{width:100%}.widget-application .widget-instructions__footer button{width:100%;background-color:#fad436;font-size:.8rem;font-weight:500;text-align:center;color:#000;cursor:pointer;border:none;padding:10px 5px}.widget-application .widget-instructions__footer button:disabled{opacity:.75;cursor:not-allowed}.widget-application .widget-tab__panorama{width:100%;height:100%;position:absolute;left:0;top:0}.widget-application .widget-tab__panorama-overlay{width:100%;height:100%;overflow:hidden}.widget-application .widget-tab__panorama-mode,.widget-application .widget-tab__panorama-standart{position:absolute;right:15px;bottom:20px;color:#000;background-color:#fad436;padding:5px 15px;border-radius:10px;font-size:1rem;font-weight:bold;border:none;cursor:pointer;user-select:none;-webkit-user-select:none;user-drag:none;-webkit-user-drag:none}.widget-application .widget-tab__panorama-mode:hover,.widget-application .widget-tab__panorama-standart:hover{box-shadow:1px 1px 10px rgba(0,0,0,.15)}.widget-application .widget-tab__panorama-standart{right:100px}.widget-application .widget-tab__panorama-map{position:absolute;right:15px;bottom:70px;z-index:10000}.widget-application .widget-tab__panorama-map--hidden{display:none !important}.widget-application .widget-tab__panorama-map img{width:100px;border-radius:10px;cursor:zoom-in}.widget-application .widget-tab__panorama-map img.active{width:240px;cursor:zoom-out}.widget-application .widget-tab__panorama-map img:hover{box-shadow:1px 1px 10px rgba(0,0,0,.15)}.widget-application .widget-tab__panorama-map__dot{position:absolute;left:0;top:0;transform:translate(-50%, -50%);width:5px;height:5px;background-color:#fad436;border-radius:50%;cursor:pointer;z-index:10}.widget-application .widget-tab__panorama-map__dot--big{border:2px solid #fad436;box-shadow:inset 0 0 0 2px #fff;width:15px;height:15px}.widget-application .widget-tab__panorama-map__dot--active{background-color:red;border:2px solid red}.widget-loader{display:block;position:relative;width:80px;height:80px}.widget-loader--absolute{position:absolute;left:50%;top:50%;transform:translate(-50%, -50%)}.widget-loader--sm{transform:translate(-50%, -50%) scale(0.75)}.widget-loader div{position:absolute;top:33px;width:13px;height:13px;border-radius:50%;background:#fad436;animation-timing-function:cubic-bezier(0, 1, 1, 0)}.widget-loader div:nth-child(1){left:8px;animation:widget-loader-1 .6s infinite}.widget-loader div:nth-child(2){left:8px;animation:widget-loader-2 .6s infinite}.widget-loader div:nth-child(3){left:32px;animation:widget-loader-2 .6s infinite}.widget-loader div:nth-child(4){left:56px;animation:widget-loader-3 .6s infinite}@keyframes widget-loader-1{0%{transform:scale(0)}100%{transform:scale(1)}}@keyframes widget-loader-3{0%{transform:scale(1)}100%{transform:scale(0)}}@keyframes widget-loader-2{0%{transform:translate(0, 0)}100%{transform:translate(24px, 0)}}.widget-application .widget-tab__model{width:100%;height:100%;position:absolute;left:0;top:0}.widget-application .widget-tab__model-scene{width:100%;height:100%;display:block}.widget-application .widget-tab__model-joystick{position:absolute;left:100px;bottom:100px;opacity:0;pointer-events:none}@media only screen and (max-width: 545px){.widget-application .widget-tab__model-joystick{left:50%;transform:translateX(-50%)}}.widget-application .widget-tab__model-joystick--active{opacity:1;pointer-events:unset}/*# sourceMappingURL=index.css.map */
@@ -1 +0,0 @@
1
- {"version":3,"sourceRoot":"","sources":["../src/assets/sass/index.sass","../src/assets/sass/vars.sass","../src/assets/sass/components/tabs.sass","../src/assets/sass/components/instructions.sass","../src/assets/sass/components/panorama.sass","../src/assets/sass/components/loader.sass","../src/assets/sass/components/model.sass"],"names":[],"mappings":"AAEA,mBACE,sBACA,8BACA,SACA,UAEF,UACE,eAEF,oBACE,YAEA,WACA,2BACA,gBACA,kBACA,UAEA,+EACE,8BACA,mCACA,kCACA,aACA,gBACA,qBAEF,kCACE,kBACA,aACA,mBACA,uBACA,UACA,WACA,SACA,MC9BI,KD+BJ,iBC7BQ,QD8BR,iBACA,mBACA,gBACA,YACA,eACA,wCACE,wCEzCJ,gCACE,WACA,YACA,aACA,mBACA,uBACA,6BACA,yBAPF,gCAQI,6BACF,8CACE,kBACF,uCACE,eACA,gBACA,mBACA,cACF,4CACE,WACA,YACA,kBACA,0BACA,sDACE,sBACA,uBACA,kBACA,YACA,iCACA,0DACE,kBACA,SACA,QACA,gCACA,eACA,gBACA,mBD1BR,iBACA,yBACA,eACA,uBC2BI,uHACE,kBACA,UACA,OACA,MACA,WACA,YACA,iBAEJ,qCACE,kBACA,UACA,UACA,SACA,gBACA,gBACA,oBACA,iDACE,aACA,eACA,uBACA,gBACA,WACA,qDACE,WACA,YACA,cACA,iBACA,eACA,kBACA,sBACJ,wCACE,qBACA,2CACE,MDrEF,KCsEE,iBDpEE,QCqEF,iBACA,mBACA,gBACA,YACA,eACA,mBACA,YDxER,iBACA,yBACA,eACA,uBCuEQ,iDACE,aACA,eACA,WAEA,6DACE,eACA,iBACA,WACA,YACA,SACA,kBACA,2FACE,wBACJ,4DACE,aACJ,iDACE,wCACF,wDACE,kBACA,+DACE,cACA,yCACA,eACA,iBACA,iBACA,cACA,kBACA,WACA,QAEZ,sCACE,kBACA,UACA,SACA,WACA,eACA,yBACA,2BACA,aACA,mBACA,2BACA,gBACA,yBAZF,sCAaI,0BACF,uDACE,WACA,YACA,kBACA,cACA,iBDhIM,QCiIN,eACA,iBACA,mBACA,aDpIM,QCqIN,gBACA,aACA,mBACA,uBACA,UACA,2BACA,kBDvIJ,iBACA,yBACA,eACA,uBCsII,yBAlBF,uDAmBI,WACA,YACA,cACF,+DACE,WACA,kBACA,OACA,MACA,WACA,YACA,6CACF,4HAEE,aD1JI,QC2JN,8DACE,WACA,YACA,iBACA,uBACA,cACF,6DACE,WACA,YACA,mBACA,uBACA,cACA,kBACA,UACA,WACA,yBATF,6DAUI,WACA,YACA,SACA,YCnLR,yCACE,kBACA,UACA,OACA,MACA,WACA,YACA,aACA,mBACA,uBACA,gCACA,kDACE,aACA,sBACA,uBACA,2BACA,iBFdE,KEeF,uCACA,kBACA,gBACA,YACF,+CACE,WACA,aACA,gCACA,wBACA,kBACA,gBACF,+CACE,WACA,aACA,kBACA,gBACA,iDACE,cACJ,iDACE,WACA,wDACE,WACA,iBFlCI,QEmCJ,gBACA,gBACA,kBACA,WACA,eACA,YACA,iBACA,iEACE,YACA,mBChDN,0CACE,WACA,YACA,kBACA,OACA,MACA,kDACE,WACA,YACA,gBACF,kGAEE,kBACA,WACA,YACA,MHbA,KGcA,iBHZI,QGaJ,iBACA,mBACA,eACA,iBACA,YACA,eHfN,iBACA,yBACA,eACA,uBGcM,8GACE,wCACJ,mDACE,YACF,8CACE,kBACA,WACA,YACA,cACA,sDACE,wBACF,kDACE,YACA,mBACA,eACA,yDACE,YACA,gBACF,wDACE,wCACJ,mDACE,kBACA,OACA,MACA,gCACA,UACA,WACA,iBH/CE,QGgDF,kBACA,eACA,WACA,wDACE,yBACA,gCACA,WACA,YACF,2DACE,qBACA,qBChEZ,eACE,cACA,kBACA,WACA,YACA,yBACE,kBACA,SACA,QACA,gCACF,mBACE,4CACF,mBACE,kBACA,SACA,WACA,YACA,kBACA,WJZQ,QIaR,mDACA,gCACE,SACA,uCACF,gCACE,SACA,uCACF,gCACE,UACA,uCACF,gCACE,UACA,uCAEN,2BACE,GACE,mBACF,KACE,oBAEJ,2BACE,GACE,mBACF,KACE,oBAEJ,2BACE,GACE,0BAEF,KACE,8BChDA,uCACE,WACA,YACA,kBACA,OACA,MACA,6CACE,WACA,YACA,cACF,gDACE,kBACA,WACA,aACA,UACA,oBACA,0CANF,gDAOI,SACA,4BACF,wDACE,UACA","file":"index.css"}