hart-estate-widget 0.0.8 → 0.0.11
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 +68 -13
- package/build/api/index.js +24 -0
- package/build/assets/img/bricks.jpeg +0 -0
- package/build/assets/img/door-texture.jpeg +0 -0
- package/build/assets/img/door.jpeg +0 -0
- package/build/assets/img/exterior-wall-texture.jpeg +0 -0
- package/build/assets/img/floor-bathroom.jpg +0 -0
- package/build/assets/img/floor-dark.png +0 -0
- package/build/assets/img/floor-white.png +0 -0
- package/build/assets/img/floor.jpg +0 -0
- package/build/assets/img/grass.png +0 -0
- package/build/assets/img/ground.svg +9 -0
- package/build/assets/img/wall-texture.jpg +0 -0
- package/build/assets/sass/animation.sass +5 -0
- package/build/assets/sass/components/loader.sass +51 -0
- package/build/assets/sass/components/model.sass +14 -0
- package/build/assets/sass/components/panorama.sass +65 -0
- package/build/assets/sass/components/tabs.sass +66 -0
- package/build/assets/sass/index.sass +3 -0
- package/build/components/Application.js +12 -2
- package/build/components/Loader.js +22 -0
- package/build/components/ModelTab.js +120 -0
- package/build/components/PanoramaTab.js +215 -0
- package/build/config/defaultConfig.js +4 -1
- package/build/config/defaultJSON.js +2432 -0
- package/build/index.css +1 -1
- package/build/index.css.map +1 -1
- package/build/index.js +32 -8
- package/build/store/houseStore.js +675 -0
- package/build/store/modelStore.js +196 -0
- package/build/utils/csg/csg-lib.js +387 -0
- package/build/utils/csg/csg-worker.js +94 -0
- package/build/utils/csg/three-csg.js +280 -0
- package/build/utils/modelHelpers.js +125 -0
- package/build/utils/panoramaHelpers.js +83 -0
- package/package.json +17 -3
@@ -0,0 +1,215 @@
|
|
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 _panoramaHelpers = require("../utils/panoramaHelpers");
|
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, _panoramaHelpers.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
|
+
animate();
|
96
|
+
|
97
|
+
if (DeviceOrientationEvent.requestPermission) {
|
98
|
+
DeviceOrientationEvent.requestPermission().catch(() => console.log('Device motion not allowed'));
|
99
|
+
}
|
100
|
+
|
101
|
+
return {
|
102
|
+
camera,
|
103
|
+
controls
|
104
|
+
};
|
105
|
+
};
|
106
|
+
|
107
|
+
const PanoramaTab = _ref => {
|
108
|
+
let {
|
109
|
+
json,
|
110
|
+
planImage,
|
111
|
+
images
|
112
|
+
} = _ref;
|
113
|
+
const [menuState, setMenuState] = (0, _react.useState)(false);
|
114
|
+
const [loadingState, setLoadingState] = (0, _react.useState)(true);
|
115
|
+
const [isMapActive, setMapState] = (0, _react.useState)(false);
|
116
|
+
const [currentRoomIndex, setCurrentRoomIndex] = (0, _react.useState)(0);
|
117
|
+
const [panoramas] = (0, _react.useState)(getPanoramas(json, images, setLoadingState));
|
118
|
+
const [panoramaRooms] = (0, _react.useState)(getPanoramaRooms(json, panoramas));
|
119
|
+
const [viewer, setViewer] = (0, _react.useState)(null);
|
120
|
+
const [planScale, setPlanScale] = (0, _react.useState)({
|
121
|
+
X: 1,
|
122
|
+
Y: 1
|
123
|
+
});
|
124
|
+
|
125
|
+
const changePanorama = (panorama, index) => {
|
126
|
+
setCurrentRoomIndex(index);
|
127
|
+
viewer.setPanorama(panorama);
|
128
|
+
};
|
129
|
+
|
130
|
+
const toggleVrMode = () => {
|
131
|
+
if (viewer.mode === 3) {
|
132
|
+
viewer.disableEffect();
|
133
|
+
return;
|
134
|
+
}
|
135
|
+
|
136
|
+
viewer.enableEffect(PANOLENS.MODES.STEREO);
|
137
|
+
};
|
138
|
+
|
139
|
+
const toggleOrientationMode = () => {
|
140
|
+
if (viewer.control.id === 'orbit') {
|
141
|
+
viewer.enableControl(DEVICEORIENTATION);
|
142
|
+
return;
|
143
|
+
}
|
144
|
+
|
145
|
+
viewer.enableControl(ORBIT);
|
146
|
+
};
|
147
|
+
|
148
|
+
const toggleMap = () => setMapState(!isMapActive);
|
149
|
+
|
150
|
+
const setScale = () => {
|
151
|
+
const image = document.querySelector('.widget-tab__panorama-map img');
|
152
|
+
setPlanScale((0, _panoramaHelpers.getScale)(image, json));
|
153
|
+
};
|
154
|
+
|
155
|
+
const getDotClassName = index => {
|
156
|
+
let className = 'widget-tab__panorama-map__dot';
|
157
|
+
if (isMapActive) className += ' widget-tab__panorama-map__dot--big';
|
158
|
+
if (currentRoomIndex === index) className += ' widget-tab__panorama-map__dot--active';
|
159
|
+
return className;
|
160
|
+
};
|
161
|
+
|
162
|
+
(0, _react.useEffect)(() => {
|
163
|
+
const newViewer = new PANOLENS.Viewer({
|
164
|
+
container: document.querySelector('.widget-tab__panorama-overlay'),
|
165
|
+
autoHideInfospot: false,
|
166
|
+
controlButtons: [],
|
167
|
+
cameraFov: 90
|
168
|
+
});
|
169
|
+
panoramas.forEach(panorama => {
|
170
|
+
if (!panorama.panorama_id) return;
|
171
|
+
newViewer.add(panorama);
|
172
|
+
});
|
173
|
+
setViewer(newViewer);
|
174
|
+
initPanorama();
|
175
|
+
}, [panoramas]);
|
176
|
+
(0, _react.useEffect)(setScale, [json, isMapActive]);
|
177
|
+
return /*#__PURE__*/_react.default.createElement("div", {
|
178
|
+
className: "widget-tab__panorama"
|
179
|
+
}, /*#__PURE__*/_react.default.createElement("div", {
|
180
|
+
className: "widget-tab__panorama-overlay"
|
181
|
+
}), loadingState && /*#__PURE__*/_react.default.createElement(_Loader.default, {
|
182
|
+
absolute: true
|
183
|
+
}), /*#__PURE__*/_react.default.createElement("div", {
|
184
|
+
className: "widget-tab-menu"
|
185
|
+
}, /*#__PURE__*/_react.default.createElement("ul", null, /*#__PURE__*/_react.default.createElement("li", {
|
186
|
+
onClick: () => setMenuState(!menuState)
|
187
|
+
}, "Rooms"), menuState && panoramaRooms.map((room, index) => /*#__PURE__*/_react.default.createElement("li", {
|
188
|
+
key: index,
|
189
|
+
onClick: () => changePanorama(room.panorama, index)
|
190
|
+
}, currentRoomIndex === index && '• ', " ", room.type)))), /*#__PURE__*/_react.default.createElement("div", {
|
191
|
+
className: "widget-tab__panorama-map ".concat(planImage ? '' : 'widget-tab__panorama-map--hidden')
|
192
|
+
}, /*#__PURE__*/_react.default.createElement("img", {
|
193
|
+
src: planImage,
|
194
|
+
className: isMapActive ? 'active' : '',
|
195
|
+
onClick: toggleMap,
|
196
|
+
alt: "plan"
|
197
|
+
}), panoramaRooms.map((room, index) => /*#__PURE__*/_react.default.createElement("div", {
|
198
|
+
key: index,
|
199
|
+
style: {
|
200
|
+
left: "".concat(room.left * planScale.X, "px"),
|
201
|
+
top: "".concat(room.top * planScale.Y, "px")
|
202
|
+
},
|
203
|
+
className: getDotClassName(index),
|
204
|
+
onClick: () => changePanorama(room.panorama, index)
|
205
|
+
}))), /*#__PURE__*/_react.default.createElement("button", {
|
206
|
+
className: "widget-tab__panorama-mode",
|
207
|
+
onClick: toggleVrMode
|
208
|
+
}, "VR"), /*#__PURE__*/_react.default.createElement("button", {
|
209
|
+
className: "widget-tab__panorama-standart",
|
210
|
+
onClick: toggleOrientationMode
|
211
|
+
}, "Standart"));
|
212
|
+
};
|
213
|
+
|
214
|
+
var _default = PanoramaTab;
|
215
|
+
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;
|