hart-estate-widget 0.0.5 → 0.0.9
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.
- package/README.md +77 -4
- package/build/assets/sass/components/loader.sass +51 -0
- package/build/assets/sass/components/panorama.sass +98 -0
- package/build/assets/sass/index.sass +2 -0
- package/build/{Application.js → components/Application.js} +13 -7
- package/build/components/Loader.js +22 -0
- package/build/components/PanoramaTab.js +213 -0
- package/build/components/RotationTab.js +1 -1
- package/build/components/Widget.js +41 -0
- package/build/{defaultConfig.js → config/defaultConfig.js} +4 -1
- package/build/config/defaultJSON.js +2432 -0
- package/build/index.css +1 -0
- package/build/index.css.map +1 -0
- package/build/index.js +47 -5
- package/build/{lib/threesixty → threesixty}/events.js +0 -0
- package/build/{lib/threesixty → threesixty}/index.js +0 -0
- package/build/utils/helpers.js +79 -0
- package/package.json +16 -10
- package/build/Widget.js +0 -35
package/README.md
CHANGED
@@ -1,7 +1,80 @@
|
|
1
|
-
# Компонент HART Estate
|
1
|
+
# Компонент HART Estate Widget
|
2
2
|
|
3
|
-
## Список доступных команд
|
4
3
|
|
5
|
-
|
4
|
+
## Способ установки с помощью NPM:
|
5
|
+
|
6
|
+
`npm install hart-estate-widget --save`
|
7
|
+
|
8
|
+
## Пример использования:
|
9
|
+
|
10
|
+
```js
|
11
|
+
import React, { useEffect, useState } from 'react';
|
12
|
+
import { Widget } from 'hart-estate-widget';
|
13
|
+
|
14
|
+
const WIDGET_OPTIONS = {
|
15
|
+
tabs: ['planImage', 'topView', 'topDownView', 'rotation',],
|
16
|
+
tabPanes: true,
|
17
|
+
planImage: '/path/to/plan.jpg',
|
18
|
+
topView: '/path/to/top_view.jpg',
|
19
|
+
topDownView: '/path/to/top_down_view.jpg',
|
20
|
+
rotationImages: [
|
21
|
+
'/path/to/rotation_image_1.jpg',
|
22
|
+
'/path/to/rotation_image_2.jpg',
|
23
|
+
'/path/to/rotation_image_3.jpg',
|
24
|
+
'/path/to/rotation_image_4.jpg',
|
25
|
+
'/path/to/rotation_image_5.jpg',
|
26
|
+
],
|
27
|
+
};
|
28
|
+
|
29
|
+
const App = () => {
|
30
|
+
const [widget, setWidget] = useState(null);
|
31
|
+
|
32
|
+
useEffect(() => {
|
33
|
+
const createdWidget = new Widget('#widget-container', WIDGET_OPTIONS);
|
34
|
+
|
35
|
+
setState(createdWidget);
|
36
|
+
}, []);
|
37
|
+
|
38
|
+
return (
|
39
|
+
<div>
|
40
|
+
<div id="#widget-container" />
|
41
|
+
</div>
|
42
|
+
);
|
43
|
+
}
|
44
|
+
|
45
|
+
export App;
|
46
|
+
|
47
|
+
```
|
48
|
+
|
49
|
+
|
50
|
+
## Параметры:
|
51
|
+
|
52
|
+
```js
|
53
|
+
{
|
54
|
+
// элементы
|
55
|
+
tabs: ['planImage', 'topView', 'topDownView', 'rotation'], // включенные элементы
|
56
|
+
tabPanes: true,
|
57
|
+
|
58
|
+
// ширина/высота
|
59
|
+
width: 500,
|
60
|
+
height: 750,
|
61
|
+
|
62
|
+
// значения
|
63
|
+
planImage: '', // путь к изображению планировки
|
64
|
+
topView: '', // путь к изображению вида сверху
|
65
|
+
topDownView: '', // путь к изображению вида сверху под углом
|
66
|
+
rotationImages: [], // пути к изображениям кругового просмотра (порядок обязателен)
|
67
|
+
}
|
68
|
+
|
69
|
+
```
|
70
|
+
|
71
|
+
## Типы элементов
|
72
|
+
```js
|
73
|
+
tabs: [
|
74
|
+
'planImage', // изображение планировки
|
75
|
+
'topView', // изображение вида сверху
|
76
|
+
'topDownView', // изображение вида сверху под углом
|
77
|
+
'rotation', // изображения кругового просмотра (порядок обязателен)
|
78
|
+
]
|
79
|
+
```
|
6
80
|
|
7
|
-
### `npm run build` - билд приложения
|
@@ -0,0 +1,51 @@
|
|
1
|
+
@import '../vars'
|
2
|
+
|
3
|
+
.widget-loader
|
4
|
+
display: block
|
5
|
+
position: relative
|
6
|
+
width: 80px
|
7
|
+
height: 80px
|
8
|
+
&--absolute
|
9
|
+
position: absolute
|
10
|
+
left: 50%
|
11
|
+
top: 50%
|
12
|
+
transform: translate(-50%, -50%)
|
13
|
+
div
|
14
|
+
position: absolute
|
15
|
+
top: 33px
|
16
|
+
width: 13px
|
17
|
+
height: 13px
|
18
|
+
border-radius: 50%
|
19
|
+
background: $mainColor
|
20
|
+
animation-timing-function: cubic-bezier(0, 1, 1, 0)
|
21
|
+
&:nth-child(1)
|
22
|
+
left: 8px
|
23
|
+
animation: widget-loader-1 0.6s infinite
|
24
|
+
&:nth-child(2)
|
25
|
+
left: 8px
|
26
|
+
animation: widget-loader-2 0.6s infinite
|
27
|
+
&:nth-child(3)
|
28
|
+
left: 32px
|
29
|
+
animation: widget-loader-2 0.6s infinite
|
30
|
+
&:nth-child(4)
|
31
|
+
left: 56px
|
32
|
+
animation: widget-loader-3 0.6s infinite
|
33
|
+
|
34
|
+
@keyframes widget-loader-1
|
35
|
+
0%
|
36
|
+
transform: scale(0)
|
37
|
+
100%
|
38
|
+
transform: scale(1)
|
39
|
+
|
40
|
+
@keyframes widget-loader-3
|
41
|
+
0%
|
42
|
+
transform: scale(1)
|
43
|
+
100%
|
44
|
+
transform: scale(0)
|
45
|
+
|
46
|
+
@keyframes widget-loader-2
|
47
|
+
0%
|
48
|
+
transform: translate(0, 0)
|
49
|
+
|
50
|
+
100%
|
51
|
+
transform: translate(24px, 0)
|
@@ -0,0 +1,98 @@
|
|
1
|
+
@import '../vars'
|
2
|
+
|
3
|
+
.widget-application
|
4
|
+
.widget-tab
|
5
|
+
&__panorama
|
6
|
+
width: 100%
|
7
|
+
height: 100%
|
8
|
+
position: absolute
|
9
|
+
left: 0
|
10
|
+
top: 0
|
11
|
+
&-overlay
|
12
|
+
width: 100%
|
13
|
+
height: 100%
|
14
|
+
overflow: hidden
|
15
|
+
&-mode,
|
16
|
+
&-standart
|
17
|
+
position: absolute
|
18
|
+
right: 15px
|
19
|
+
bottom: 20px
|
20
|
+
color: $black
|
21
|
+
background-color: $mainColor
|
22
|
+
padding: 5px 15px
|
23
|
+
border-radius: 10px
|
24
|
+
font-size: 1rem
|
25
|
+
font-weight: bold
|
26
|
+
border: none
|
27
|
+
cursor: pointer
|
28
|
+
@include noSelect
|
29
|
+
&:hover
|
30
|
+
box-shadow: 1px 1px 10px rgba(0, 0, 0, .15)
|
31
|
+
&-standart
|
32
|
+
right: 100px
|
33
|
+
&-map
|
34
|
+
position: absolute
|
35
|
+
right: 15px
|
36
|
+
bottom: 70px
|
37
|
+
z-index: 10000
|
38
|
+
img
|
39
|
+
width: 100px
|
40
|
+
border-radius: 10px
|
41
|
+
&.active
|
42
|
+
width: 240px
|
43
|
+
&:hover
|
44
|
+
box-shadow: 1px 1px 10px rgba(0,0,0,0.15)
|
45
|
+
&__dot
|
46
|
+
position: absolute
|
47
|
+
left: 0
|
48
|
+
top: 0
|
49
|
+
transform: translate(-50%, -50%)
|
50
|
+
width: 5px
|
51
|
+
height: 5px
|
52
|
+
background-color: $mainColor
|
53
|
+
border-radius: 50%
|
54
|
+
cursor: pointer
|
55
|
+
z-index: 10
|
56
|
+
&--big
|
57
|
+
border: 2px solid $mainColor
|
58
|
+
box-shadow: inset 0 0 0 2px #ffffff
|
59
|
+
width: 15px
|
60
|
+
height: 15px
|
61
|
+
&--active
|
62
|
+
background-color: red
|
63
|
+
border: 2px solid red
|
64
|
+
&-menu
|
65
|
+
position: absolute
|
66
|
+
z-index: 3
|
67
|
+
left: 15px
|
68
|
+
top: 15px
|
69
|
+
max-height: 100%
|
70
|
+
overflow-y: auto
|
71
|
+
padding-bottom: 30px
|
72
|
+
ul
|
73
|
+
list-style-type: none
|
74
|
+
li
|
75
|
+
color: $black
|
76
|
+
background-color: $mainColor
|
77
|
+
padding: 5px 15px
|
78
|
+
border-radius: 10px
|
79
|
+
font-size: .8rem
|
80
|
+
border: none
|
81
|
+
cursor: pointer
|
82
|
+
margin-bottom: 15px
|
83
|
+
width: 150px
|
84
|
+
@include noSelect
|
85
|
+
&:hover
|
86
|
+
box-shadow: 1px 1px 10px rgba(0, 0, 0, .15)
|
87
|
+
&:nth-child(1)
|
88
|
+
position: relative
|
89
|
+
&::after
|
90
|
+
content: '|||'
|
91
|
+
transform: translateY(-50%) rotate(90deg)
|
92
|
+
font-size: 20px
|
93
|
+
line-height: 20px
|
94
|
+
margin-left: 10px
|
95
|
+
display: block
|
96
|
+
position: absolute
|
97
|
+
right: 10px
|
98
|
+
top: 50%
|
@@ -11,17 +11,19 @@ var _react = _interopRequireWildcard(require("react"));
|
|
11
11
|
|
12
12
|
var _mobxReactLite = require("mobx-react-lite");
|
13
13
|
|
14
|
-
var _store = _interopRequireDefault(require("
|
14
|
+
var _store = _interopRequireDefault(require("../store"));
|
15
15
|
|
16
|
-
var _TabPanes = _interopRequireDefault(require("./
|
16
|
+
var _TabPanes = _interopRequireDefault(require("./TabPanes"));
|
17
17
|
|
18
|
-
var _ImageTab = _interopRequireDefault(require("./
|
18
|
+
var _ImageTab = _interopRequireDefault(require("./ImageTab"));
|
19
19
|
|
20
|
-
var _RotationTab = _interopRequireDefault(require("./
|
20
|
+
var _RotationTab = _interopRequireDefault(require("./RotationTab"));
|
21
21
|
|
22
|
-
var
|
22
|
+
var _PanoramaTab = _interopRequireDefault(require("./PanoramaTab"));
|
23
23
|
|
24
|
-
var
|
24
|
+
var _TabWrapper = _interopRequireDefault(require("./TabWrapper"));
|
25
|
+
|
26
|
+
var _D = _interopRequireDefault(require("../assets/img/3D.jpg"));
|
25
27
|
|
26
28
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
27
29
|
|
@@ -69,7 +71,11 @@ const Application = (0, _mobxReactLite.observer)(_ref => {
|
|
69
71
|
title: "Panoramic tour",
|
70
72
|
text: ['Use mouse to rotate', 'To move through the rooms, click on the layout thumbnail'],
|
71
73
|
onStart: hideTabPanes
|
72
|
-
}, /*#__PURE__*/_react.default.createElement(
|
74
|
+
}, /*#__PURE__*/_react.default.createElement(_PanoramaTab.default, {
|
75
|
+
json: config.json,
|
76
|
+
planImage: config.planImage,
|
77
|
+
images: config.panoramaImages
|
78
|
+
})),
|
73
79
|
'model': /*#__PURE__*/_react.default.createElement(_TabWrapper.default, {
|
74
80
|
isActive: !isTabPanesVisible,
|
75
81
|
image: _D.default,
|
@@ -0,0 +1,22 @@
|
|
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
|
+
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
11
|
+
|
12
|
+
const Loader = _ref => {
|
13
|
+
let {
|
14
|
+
absolute
|
15
|
+
} = _ref;
|
16
|
+
return /*#__PURE__*/_react.default.createElement("div", {
|
17
|
+
className: "widget-loader ".concat(absolute ? 'widget-loader--absolute' : '')
|
18
|
+
}, /*#__PURE__*/_react.default.createElement("div", null), /*#__PURE__*/_react.default.createElement("div", null), /*#__PURE__*/_react.default.createElement("div", null), /*#__PURE__*/_react.default.createElement("div", null));
|
19
|
+
};
|
20
|
+
|
21
|
+
var _default = Loader;
|
22
|
+
exports.default = _default;
|
@@ -0,0 +1,213 @@
|
|
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.array.reduce.js");
|
9
|
+
|
10
|
+
require("core-js/modules/es.string.includes.js");
|
11
|
+
|
12
|
+
require("core-js/modules/web.dom-collections.iterator.js");
|
13
|
+
|
14
|
+
var _react = _interopRequireWildcard(require("react"));
|
15
|
+
|
16
|
+
var THREE = _interopRequireWildcard(require("three"));
|
17
|
+
|
18
|
+
var PANOLENS = _interopRequireWildcard(require("panolens"));
|
19
|
+
|
20
|
+
var _threeDeviceOrientation = _interopRequireDefault(require("three-device-orientation"));
|
21
|
+
|
22
|
+
var _Loader = _interopRequireDefault(require("./Loader"));
|
23
|
+
|
24
|
+
var _helpers = require("../utils/helpers");
|
25
|
+
|
26
|
+
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
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
|
+
const {
|
33
|
+
DEVICEORIENTATION,
|
34
|
+
ORBIT
|
35
|
+
} = PANOLENS.CONTROLS;
|
36
|
+
const pathName = 'Panorama_0_0_';
|
37
|
+
|
38
|
+
const getPanoramas = (json, images, setLoadingState) => {
|
39
|
+
return json.Floors[0].Units[0].Rooms.reduce((acc, jsonRoom, index) => {
|
40
|
+
const image = images.find(img => img.includes(pathName + index));
|
41
|
+
if (!image) return acc;
|
42
|
+
const panorama = new PANOLENS.ImagePanorama(image);
|
43
|
+
panorama['panorama_id'] = index + 1;
|
44
|
+
panorama['room_id'] = jsonRoom.ID;
|
45
|
+
panorama.addEventListener('progress', event => {
|
46
|
+
setLoadingState(true);
|
47
|
+
|
48
|
+
if (event.progress.loaded / event.progress.total * 100 === 100) {
|
49
|
+
setLoadingState(false);
|
50
|
+
}
|
51
|
+
});
|
52
|
+
panorama.addEventListener('enter', () => setLoadingState(false));
|
53
|
+
acc.push(panorama);
|
54
|
+
return acc;
|
55
|
+
}, []);
|
56
|
+
};
|
57
|
+
|
58
|
+
const getPanoramaRooms = (json, panoramas) => {
|
59
|
+
const {
|
60
|
+
Vertices,
|
61
|
+
Floors
|
62
|
+
} = json;
|
63
|
+
const {
|
64
|
+
Walls
|
65
|
+
} = Floors[0];
|
66
|
+
return panoramas.map((panorama, index) => {
|
67
|
+
const currentRoom = Floors[0].Units[0].Rooms.find(room => room.ID === panorama['room_id']);
|
68
|
+
const {
|
69
|
+
left,
|
70
|
+
top
|
71
|
+
} = (0, _helpers.findRoomCenter)(currentRoom, Walls, Vertices);
|
72
|
+
return {
|
73
|
+
type: currentRoom.Type,
|
74
|
+
id: index,
|
75
|
+
panorama,
|
76
|
+
left,
|
77
|
+
top
|
78
|
+
};
|
79
|
+
}, []);
|
80
|
+
};
|
81
|
+
|
82
|
+
const initPanorama = () => {
|
83
|
+
let camera = new THREE.PerspectiveCamera(75, window.innerWidth / window.innerHeight, 1, 1100);
|
84
|
+
let controls = new _threeDeviceOrientation.default(camera);
|
85
|
+
window.addEventListener('resize', () => {
|
86
|
+
camera.aspect = window.innerWidth / window.innerHeight;
|
87
|
+
camera.updateProjectionMatrix();
|
88
|
+
});
|
89
|
+
|
90
|
+
const animate = () => {
|
91
|
+
window.requestAnimationFrame(animate);
|
92
|
+
controls.update();
|
93
|
+
};
|
94
|
+
|
95
|
+
if (DeviceOrientationEvent.requestPermission) {
|
96
|
+
DeviceOrientationEvent.requestPermission().catch(() => console.log('Device motion not allowed'));
|
97
|
+
}
|
98
|
+
|
99
|
+
return {
|
100
|
+
camera,
|
101
|
+
controls
|
102
|
+
};
|
103
|
+
};
|
104
|
+
|
105
|
+
const PanoramaTab = _ref => {
|
106
|
+
let {
|
107
|
+
json,
|
108
|
+
planImage,
|
109
|
+
images
|
110
|
+
} = _ref;
|
111
|
+
const [menuState, setMenuState] = (0, _react.useState)(false);
|
112
|
+
const [loadingState, setLoadingState] = (0, _react.useState)(true);
|
113
|
+
const [isMapActive, setMapState] = (0, _react.useState)(false);
|
114
|
+
const [currentRoomIndex, setCurrentRoomIndex] = (0, _react.useState)(0);
|
115
|
+
const [panoramas] = (0, _react.useState)(getPanoramas(json, images, setLoadingState));
|
116
|
+
const [panoramaRooms] = (0, _react.useState)(getPanoramaRooms(json, panoramas));
|
117
|
+
const [viewer, setViewer] = (0, _react.useState)(null);
|
118
|
+
const [planScale, setPlanScale] = (0, _react.useState)({
|
119
|
+
X: 1,
|
120
|
+
Y: 1
|
121
|
+
});
|
122
|
+
|
123
|
+
const changePanorama = (panorama, index) => {
|
124
|
+
setCurrentRoomIndex(index);
|
125
|
+
viewer.setPanorama(panorama);
|
126
|
+
};
|
127
|
+
|
128
|
+
const toggleVrMode = () => {
|
129
|
+
if (viewer.mode === 3) {
|
130
|
+
viewer.disableEffect();
|
131
|
+
return;
|
132
|
+
}
|
133
|
+
|
134
|
+
viewer.enableEffect(PANOLENS.MODES.STEREO);
|
135
|
+
};
|
136
|
+
|
137
|
+
const toggleOrientationMode = () => {
|
138
|
+
if (viewer.control.id === 'orbit') {
|
139
|
+
viewer.enableControl(DEVICEORIENTATION);
|
140
|
+
return;
|
141
|
+
}
|
142
|
+
|
143
|
+
viewer.enableControl(ORBIT);
|
144
|
+
};
|
145
|
+
|
146
|
+
const toggleMap = () => setMapState(!isMapActive);
|
147
|
+
|
148
|
+
const setScale = () => {
|
149
|
+
const image = document.querySelector('.widget-tab__panorama-map img');
|
150
|
+
setPlanScale((0, _helpers.getScale)(image, json));
|
151
|
+
};
|
152
|
+
|
153
|
+
const getDotClassName = index => {
|
154
|
+
let className = 'widget-tab__panorama-map__dot';
|
155
|
+
if (isMapActive) className += ' widget-tab__panorama-map__dot--big';
|
156
|
+
if (currentRoomIndex === index) className += ' widget-tab__panorama-map__dot--active';
|
157
|
+
return className;
|
158
|
+
};
|
159
|
+
|
160
|
+
(0, _react.useEffect)(() => {
|
161
|
+
const newViewer = new PANOLENS.Viewer({
|
162
|
+
container: document.querySelector('.widget-tab__panorama-overlay'),
|
163
|
+
autoHideInfospot: false,
|
164
|
+
controlButtons: [],
|
165
|
+
cameraFov: 90
|
166
|
+
});
|
167
|
+
panoramas.forEach(panorama => {
|
168
|
+
if (!panorama.panorama_id) return;
|
169
|
+
newViewer.add(panorama);
|
170
|
+
});
|
171
|
+
setViewer(newViewer);
|
172
|
+
initPanorama();
|
173
|
+
}, [panoramas]);
|
174
|
+
(0, _react.useEffect)(setScale, [json, isMapActive]);
|
175
|
+
return /*#__PURE__*/_react.default.createElement("div", {
|
176
|
+
className: "widget-tab__panorama"
|
177
|
+
}, /*#__PURE__*/_react.default.createElement("div", {
|
178
|
+
className: "widget-tab__panorama-overlay"
|
179
|
+
}), loadingState && /*#__PURE__*/_react.default.createElement(_Loader.default, {
|
180
|
+
absolute: true
|
181
|
+
}), /*#__PURE__*/_react.default.createElement("div", {
|
182
|
+
className: "widget-tab__panorama-menu"
|
183
|
+
}, /*#__PURE__*/_react.default.createElement("ul", null, /*#__PURE__*/_react.default.createElement("li", {
|
184
|
+
onClick: () => setMenuState(!menuState)
|
185
|
+
}, "Rooms"), menuState && panoramaRooms.map((room, index) => /*#__PURE__*/_react.default.createElement("li", {
|
186
|
+
key: index,
|
187
|
+
onClick: () => changePanorama(room.panorama, index)
|
188
|
+
}, currentRoomIndex === index && '• ', " ", room.type)))), /*#__PURE__*/_react.default.createElement("div", {
|
189
|
+
className: "widget-tab__panorama-map"
|
190
|
+
}, /*#__PURE__*/_react.default.createElement("img", {
|
191
|
+
src: planImage,
|
192
|
+
className: isMapActive ? 'active' : '',
|
193
|
+
onClick: toggleMap,
|
194
|
+
alt: "plan"
|
195
|
+
}), panoramaRooms.map((room, index) => /*#__PURE__*/_react.default.createElement("div", {
|
196
|
+
key: index,
|
197
|
+
style: {
|
198
|
+
left: "".concat(room.left * planScale.X, "px"),
|
199
|
+
top: "".concat(room.top * planScale.Y, "px")
|
200
|
+
},
|
201
|
+
className: getDotClassName(index),
|
202
|
+
onClick: () => changePanorama(room.panorama, index)
|
203
|
+
}))), /*#__PURE__*/_react.default.createElement("button", {
|
204
|
+
className: "widget-tab__panorama-mode",
|
205
|
+
onClick: toggleVrMode
|
206
|
+
}, "VR"), /*#__PURE__*/_react.default.createElement("button", {
|
207
|
+
className: "widget-tab__panorama-standart",
|
208
|
+
onClick: toggleOrientationMode
|
209
|
+
}, "Standart"));
|
210
|
+
};
|
211
|
+
|
212
|
+
var _default = PanoramaTab;
|
213
|
+
exports.default = _default;
|
@@ -11,7 +11,7 @@ var _react = _interopRequireWildcard(require("react"));
|
|
11
11
|
|
12
12
|
var _panzoom = _interopRequireDefault(require("panzoom"));
|
13
13
|
|
14
|
-
var _threesixty = _interopRequireDefault(require("../
|
14
|
+
var _threesixty = _interopRequireDefault(require("../threesixty"));
|
15
15
|
|
16
16
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
17
17
|
|
@@ -0,0 +1,41 @@
|
|
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.object.assign.js");
|
9
|
+
|
10
|
+
var _react = _interopRequireDefault(require("react"));
|
11
|
+
|
12
|
+
var _reactDom = _interopRequireDefault(require("react-dom"));
|
13
|
+
|
14
|
+
var _store = _interopRequireDefault(require("../store"));
|
15
|
+
|
16
|
+
var _Application = _interopRequireDefault(require("./Application"));
|
17
|
+
|
18
|
+
var _defaultConfig = _interopRequireDefault(require("../config/defaultConfig"));
|
19
|
+
|
20
|
+
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
21
|
+
|
22
|
+
class Widget {
|
23
|
+
constructor(container) {
|
24
|
+
let options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
|
25
|
+
const config = Object.assign(_defaultConfig.default, options);
|
26
|
+
const widgetContainer = document.querySelector(container);
|
27
|
+
if (!widgetContainer) throw new Error("\u041D\u0435 \u0443\u0434\u0430\u043B\u043E\u0441\u044C \u043D\u0430\u0439\u0442\u0438 \u044D\u043B\u0435\u043C\u0435\u043D\u0442: #".concat(container));
|
28
|
+
config.containerElement = widgetContainer;
|
29
|
+
|
30
|
+
_store.default.setConfig(config);
|
31
|
+
|
32
|
+
_reactDom.default.render( /*#__PURE__*/_react.default.createElement(_Application.default, {
|
33
|
+
width: config.width,
|
34
|
+
height: config.height
|
35
|
+
}), widgetContainer);
|
36
|
+
}
|
37
|
+
|
38
|
+
}
|
39
|
+
|
40
|
+
var _default = Widget;
|
41
|
+
exports.default = _default;
|
@@ -7,6 +7,8 @@ exports.default = void 0;
|
|
7
7
|
|
8
8
|
var _react = _interopRequireDefault(require("react"));
|
9
9
|
|
10
|
+
var _defaultJSON = _interopRequireDefault(require("./defaultJSON"));
|
11
|
+
|
10
12
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
11
13
|
|
12
14
|
const defaultConfig = {
|
@@ -18,7 +20,8 @@ const defaultConfig = {
|
|
18
20
|
topView: 'https://backend-stage.estate.myhart.ru/storage/projects/202112/a5768629-fa1a-48f4-87de-15fea894deed/unreal/Style_2/TopView_0_0.png',
|
19
21
|
topDownView: 'https://backend-stage.estate.myhart.ru/storage/projects/202112/a5768629-fa1a-48f4-87de-15fea894deed/unreal/Style_2/MiddleCut_0_0_0.png',
|
20
22
|
rotationImages: ['https://backend-stage.estate.myhart.ru/storage/projects/202112/a5768629-fa1a-48f4-87de-15fea894deed/unreal/Style_2/TopDownView_0_0_0.png', 'https://backend-stage.estate.myhart.ru/storage/projects/202112/a5768629-fa1a-48f4-87de-15fea894deed/unreal/Style_2/TopDownView_0_0_1.png', 'https://backend-stage.estate.myhart.ru/storage/projects/202112/a5768629-fa1a-48f4-87de-15fea894deed/unreal/Style_2/TopDownView_0_0_2.png', 'https://backend-stage.estate.myhart.ru/storage/projects/202112/a5768629-fa1a-48f4-87de-15fea894deed/unreal/Style_2/TopDownView_0_0_3.png', 'https://backend-stage.estate.myhart.ru/storage/projects/202112/a5768629-fa1a-48f4-87de-15fea894deed/unreal/Style_2/TopDownView_0_0_4.png', 'https://backend-stage.estate.myhart.ru/storage/projects/202112/a5768629-fa1a-48f4-87de-15fea894deed/unreal/Style_2/TopDownView_0_0_5.png', 'https://backend-stage.estate.myhart.ru/storage/projects/202112/a5768629-fa1a-48f4-87de-15fea894deed/unreal/Style_2/TopDownView_0_0_6.png', 'https://backend-stage.estate.myhart.ru/storage/projects/202112/a5768629-fa1a-48f4-87de-15fea894deed/unreal/Style_2/TopDownView_0_0_7.png', 'https://backend-stage.estate.myhart.ru/storage/projects/202112/a5768629-fa1a-48f4-87de-15fea894deed/unreal/Style_2/TopDownView_0_0_8.png', 'https://backend-stage.estate.myhart.ru/storage/projects/202112/a5768629-fa1a-48f4-87de-15fea894deed/unreal/Style_2/TopDownView_0_0_9.png', 'https://backend-stage.estate.myhart.ru/storage/projects/202112/a5768629-fa1a-48f4-87de-15fea894deed/unreal/Style_2/TopDownView_0_0_10.png', 'https://backend-stage.estate.myhart.ru/storage/projects/202112/a5768629-fa1a-48f4-87de-15fea894deed/unreal/Style_2/TopDownView_0_0_11.png', 'https://backend-stage.estate.myhart.ru/storage/projects/202112/a5768629-fa1a-48f4-87de-15fea894deed/unreal/Style_2/TopDownView_0_0_12.png', 'https://backend-stage.estate.myhart.ru/storage/projects/202112/a5768629-fa1a-48f4-87de-15fea894deed/unreal/Style_2/TopDownView_0_0_13.png', 'https://backend-stage.estate.myhart.ru/storage/projects/202112/a5768629-fa1a-48f4-87de-15fea894deed/unreal/Style_2/TopDownView_0_0_14.png', 'https://backend-stage.estate.myhart.ru/storage/projects/202112/a5768629-fa1a-48f4-87de-15fea894deed/unreal/Style_2/TopDownView_0_0_15.png', 'https://backend-stage.estate.myhart.ru/storage/projects/202112/a5768629-fa1a-48f4-87de-15fea894deed/unreal/Style_2/TopDownView_0_0_16.png', 'https://backend-stage.estate.myhart.ru/storage/projects/202112/a5768629-fa1a-48f4-87de-15fea894deed/unreal/Style_2/TopDownView_0_0_17.png', 'https://backend-stage.estate.myhart.ru/storage/projects/202112/a5768629-fa1a-48f4-87de-15fea894deed/unreal/Style_2/TopDownView_0_0_18.png', 'https://backend-stage.estate.myhart.ru/storage/projects/202112/a5768629-fa1a-48f4-87de-15fea894deed/unreal/Style_2/TopDownView_0_0_19.png', 'https://backend-stage.estate.myhart.ru/storage/projects/202112/a5768629-fa1a-48f4-87de-15fea894deed/unreal/Style_2/TopDownView_0_0_20.png', 'https://backend-stage.estate.myhart.ru/storage/projects/202112/a5768629-fa1a-48f4-87de-15fea894deed/unreal/Style_2/TopDownView_0_0_21.png', 'https://backend-stage.estate.myhart.ru/storage/projects/202112/a5768629-fa1a-48f4-87de-15fea894deed/unreal/Style_2/TopDownView_0_0_22.png', 'https://backend-stage.estate.myhart.ru/storage/projects/202112/a5768629-fa1a-48f4-87de-15fea894deed/unreal/Style_2/TopDownView_0_0_23.png', 'https://backend-stage.estate.myhart.ru/storage/projects/202112/a5768629-fa1a-48f4-87de-15fea894deed/unreal/Style_2/TopDownView_0_0_24.png', 'https://backend-stage.estate.myhart.ru/storage/projects/202112/a5768629-fa1a-48f4-87de-15fea894deed/unreal/Style_2/TopDownView_0_0_25.png', 'https://backend-stage.estate.myhart.ru/storage/projects/202112/a5768629-fa1a-48f4-87de-15fea894deed/unreal/Style_2/TopDownView_0_0_26.png', 'https://backend-stage.estate.myhart.ru/storage/projects/202112/a5768629-fa1a-48f4-87de-15fea894deed/unreal/Style_2/TopDownView_0_0_27.png', 'https://backend-stage.estate.myhart.ru/storage/projects/202112/a5768629-fa1a-48f4-87de-15fea894deed/unreal/Style_2/TopDownView_0_0_28.png', 'https://backend-stage.estate.myhart.ru/storage/projects/202112/a5768629-fa1a-48f4-87de-15fea894deed/unreal/Style_2/TopDownView_0_0_29.png', 'https://backend-stage.estate.myhart.ru/storage/projects/202112/a5768629-fa1a-48f4-87de-15fea894deed/unreal/Style_2/TopDownView_0_0_30.png', 'https://backend-stage.estate.myhart.ru/storage/projects/202112/a5768629-fa1a-48f4-87de-15fea894deed/unreal/Style_2/TopDownView_0_0_31.png', 'https://backend-stage.estate.myhart.ru/storage/projects/202112/a5768629-fa1a-48f4-87de-15fea894deed/unreal/Style_2/TopDownView_0_0_32.png', 'https://backend-stage.estate.myhart.ru/storage/projects/202112/a5768629-fa1a-48f4-87de-15fea894deed/unreal/Style_2/TopDownView_0_0_33.png', 'https://backend-stage.estate.myhart.ru/storage/projects/202112/a5768629-fa1a-48f4-87de-15fea894deed/unreal/Style_2/TopDownView_0_0_34.png', 'https://backend-stage.estate.myhart.ru/storage/projects/202112/a5768629-fa1a-48f4-87de-15fea894deed/unreal/Style_2/TopDownView_0_0_35.png'],
|
21
|
-
panoramaImages: ['https://backend-stage.estate.myhart.ru/storage/projects/202112/a5768629-fa1a-48f4-87de-15fea894deed/unreal/Style_2/Panorama_0_0_0.png', 'https://backend-stage.estate.myhart.ru/storage/projects/202112/a5768629-fa1a-48f4-87de-15fea894deed/unreal/Style_2/Panorama_0_0_1.png', 'https://backend-stage.estate.myhart.ru/storage/projects/202112/a5768629-fa1a-48f4-87de-15fea894deed/unreal/Style_2/Panorama_0_0_2.png', 'https://backend-stage.estate.myhart.ru/storage/projects/202112/a5768629-fa1a-48f4-87de-15fea894deed/unreal/Style_2/Panorama_0_0_3.png', 'https://backend-stage.estate.myhart.ru/storage/projects/202112/a5768629-fa1a-48f4-87de-15fea894deed/unreal/Style_2/Panorama_0_0_4.png', 'https://backend-stage.estate.myhart.ru/storage/projects/202112/a5768629-fa1a-48f4-87de-15fea894deed/unreal/Style_2/Panorama_0_0_5.png', 'https://backend-stage.estate.myhart.ru/storage/projects/202112/a5768629-fa1a-48f4-87de-15fea894deed/unreal/Style_2/Panorama_0_0_6.png', 'https://backend-stage.estate.myhart.ru/storage/projects/202112/a5768629-fa1a-48f4-87de-15fea894deed/unreal/Style_2/Panorama_0_0_7.png']
|
23
|
+
panoramaImages: ['https://backend-stage.estate.myhart.ru/storage/projects/202112/a5768629-fa1a-48f4-87de-15fea894deed/unreal/Style_2/Panorama_0_0_0.png', 'https://backend-stage.estate.myhart.ru/storage/projects/202112/a5768629-fa1a-48f4-87de-15fea894deed/unreal/Style_2/Panorama_0_0_1.png', 'https://backend-stage.estate.myhart.ru/storage/projects/202112/a5768629-fa1a-48f4-87de-15fea894deed/unreal/Style_2/Panorama_0_0_2.png', 'https://backend-stage.estate.myhart.ru/storage/projects/202112/a5768629-fa1a-48f4-87de-15fea894deed/unreal/Style_2/Panorama_0_0_3.png', 'https://backend-stage.estate.myhart.ru/storage/projects/202112/a5768629-fa1a-48f4-87de-15fea894deed/unreal/Style_2/Panorama_0_0_4.png', 'https://backend-stage.estate.myhart.ru/storage/projects/202112/a5768629-fa1a-48f4-87de-15fea894deed/unreal/Style_2/Panorama_0_0_5.png', 'https://backend-stage.estate.myhart.ru/storage/projects/202112/a5768629-fa1a-48f4-87de-15fea894deed/unreal/Style_2/Panorama_0_0_6.png', 'https://backend-stage.estate.myhart.ru/storage/projects/202112/a5768629-fa1a-48f4-87de-15fea894deed/unreal/Style_2/Panorama_0_0_7.png'],
|
24
|
+
json: _defaultJSON.default
|
22
25
|
};
|
23
26
|
var _default = defaultConfig;
|
24
27
|
exports.default = _default;
|