@roomle/embedding-lib 5.8.0-alpha.1 → 5.8.0-alpha.3
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.
|
@@ -1,12 +1,6 @@
|
|
|
1
|
-
## [5.8.0-alpha.
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
### Features
|
|
5
|
-
|
|
6
|
-
* Tooltip - interaction notes ([bdeff8b](https://github.com/roomle-dev/roomle-ui/commit/bdeff8bcea6b304db486c97c1f33c03fd611f748))
|
|
7
|
-
* **SDK:** upgrade to version 2.90.0-alpha.1 ([#1359](https://github.com/roomle-dev/roomle-ui/issues/1359)) ([be866f2](https://github.com/roomle-dev/roomle-ui/commit/be866f2492caf81a0efe3c31646aa2941813bd05))
|
|
1
|
+
## [5.8.0-alpha.3](https://github.com/roomle-dev/roomle-ui/compare/embedding-lib-v5.8.0-alpha.2...embedding-lib-v5.8.0-alpha.3) (2024-11-28)
|
|
8
2
|
|
|
9
3
|
|
|
10
4
|
### Bug Fixes
|
|
11
5
|
|
|
12
|
-
*
|
|
6
|
+
* embedding should also load when api=false ([cd5a54a](https://github.com/roomle-dev/roomle-ui/commit/cd5a54a9edc0d9b14dbb52e7ed0670615c3d8521))
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@roomle/embedding-lib",
|
|
3
|
-
"version": "5.8.0-alpha.
|
|
3
|
+
"version": "5.8.0-alpha.3",
|
|
4
4
|
"description": "This is a small library which can be used to communicate with the Roomle Configurator",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./roomle-embedding-lib.umd.js",
|
|
@@ -29,7 +29,7 @@
|
|
|
29
29
|
"npm": "8.3.1"
|
|
30
30
|
},
|
|
31
31
|
"devDependencies": {
|
|
32
|
-
"@roomle/web-sdk": "2.90.0-alpha.
|
|
32
|
+
"@roomle/web-sdk": "2.90.0-alpha.3"
|
|
33
33
|
},
|
|
34
34
|
"repository": {
|
|
35
35
|
"type": "git",
|
|
@@ -1,32 +1,32 @@
|
|
|
1
|
-
var
|
|
2
|
-
var
|
|
3
|
-
var c = (
|
|
4
|
-
class
|
|
5
|
-
constructor(
|
|
1
|
+
var F = Object.defineProperty;
|
|
2
|
+
var B = (e, t, s) => t in e ? F(e, t, { enumerable: !0, configurable: !0, writable: !0, value: s }) : e[t] = s;
|
|
3
|
+
var c = (e, t, s) => B(e, typeof t != "symbol" ? t + "" : t, s);
|
|
4
|
+
class R {
|
|
5
|
+
constructor(t, s, o, r) {
|
|
6
6
|
c(this, "_side");
|
|
7
7
|
// for better debugging (who handles message? iframe or website?)
|
|
8
8
|
c(this, "_incomingMessageBus", null);
|
|
9
9
|
c(this, "_outgoingMessageBus", null);
|
|
10
10
|
c(this, "_execMessage", null);
|
|
11
|
-
this._side =
|
|
11
|
+
this._side = t, this._incomingMessageBus = s, this._outgoingMessageBus = o, this._execMessage = r, this._incomingMessageBus && this._incomingMessageBus.addEventListener(
|
|
12
12
|
"message",
|
|
13
13
|
this._handleMessage.bind(this)
|
|
14
14
|
);
|
|
15
15
|
}
|
|
16
|
-
setOutgoingMessageBus(
|
|
17
|
-
this._outgoingMessageBus =
|
|
16
|
+
setOutgoingMessageBus(t) {
|
|
17
|
+
this._outgoingMessageBus = t;
|
|
18
18
|
}
|
|
19
|
-
setMessageExecution(
|
|
20
|
-
this._execMessage =
|
|
19
|
+
setMessageExecution(t) {
|
|
20
|
+
this._execMessage = t;
|
|
21
21
|
}
|
|
22
|
-
sendMessage(
|
|
23
|
-
return new Promise((
|
|
22
|
+
sendMessage(t, s = []) {
|
|
23
|
+
return new Promise((o, r) => {
|
|
24
24
|
if (this._incomingMessageBus === this._outgoingMessageBus)
|
|
25
|
-
return
|
|
26
|
-
const
|
|
27
|
-
|
|
25
|
+
return o(void 0);
|
|
26
|
+
const n = new MessageChannel();
|
|
27
|
+
n.port1.onmessage = (i) => {
|
|
28
28
|
if (!i || !i.data)
|
|
29
|
-
return
|
|
29
|
+
return n.port1.close(), n.port2.close(), r(
|
|
30
30
|
new Error(
|
|
31
31
|
this._side + " received message but response can not be interpreted"
|
|
32
32
|
)
|
|
@@ -35,75 +35,75 @@ class M {
|
|
|
35
35
|
try {
|
|
36
36
|
l = JSON.parse(i.data);
|
|
37
37
|
} catch (d) {
|
|
38
|
-
return
|
|
38
|
+
return n.port1.close(), n.port2.close(), this._prepareError(d), r(d);
|
|
39
39
|
}
|
|
40
|
-
l.error ?
|
|
40
|
+
l.error ? r(l.error) : l.result !== void 0 ? o(l.result) : o(void 0), n.port1.close(), n.port2.close();
|
|
41
41
|
};
|
|
42
42
|
let a = "";
|
|
43
43
|
try {
|
|
44
|
-
a = JSON.stringify({ message:
|
|
44
|
+
a = JSON.stringify({ message: t, args: s });
|
|
45
45
|
} catch {
|
|
46
|
-
return
|
|
46
|
+
return r(
|
|
47
47
|
new Error(
|
|
48
48
|
this._side + ": can not create command because it is not JSON.stringify able"
|
|
49
49
|
)
|
|
50
50
|
);
|
|
51
51
|
}
|
|
52
52
|
if (!this._outgoingMessageBus)
|
|
53
|
-
return
|
|
53
|
+
return r(new Error(this._side + ": outgoing bus not set yet"));
|
|
54
54
|
this._outgoingMessageBus.postMessage(a, "*", [
|
|
55
|
-
|
|
55
|
+
n.port2
|
|
56
56
|
]);
|
|
57
57
|
});
|
|
58
58
|
}
|
|
59
|
-
_handleMessage(
|
|
60
|
-
const
|
|
61
|
-
if (
|
|
59
|
+
_handleMessage(t) {
|
|
60
|
+
const s = t.ports && Array.isArray(t.ports) && t.ports.length > 0 ? t.ports[0] : null;
|
|
61
|
+
if (t.data && s)
|
|
62
62
|
try {
|
|
63
|
-
const
|
|
63
|
+
const o = JSON.parse(t.data);
|
|
64
64
|
if (!this._execMessage)
|
|
65
|
-
return
|
|
65
|
+
return s.postMessage(
|
|
66
66
|
JSON.stringify({
|
|
67
67
|
error: this._side + " is not ready to handle messages"
|
|
68
68
|
})
|
|
69
69
|
);
|
|
70
|
-
Array.isArray(
|
|
71
|
-
const
|
|
72
|
-
if (
|
|
70
|
+
Array.isArray(o.args) || (o.args = [o.args]);
|
|
71
|
+
const r = this._execMessage(o, t);
|
|
72
|
+
if (r === void 0)
|
|
73
73
|
return;
|
|
74
|
-
|
|
75
|
-
(
|
|
74
|
+
r.then(
|
|
75
|
+
(n = {}) => {
|
|
76
76
|
let a, i;
|
|
77
|
-
typeof
|
|
77
|
+
typeof n == "object" && n !== null && (a = n.error, i = n.result), a ? s.postMessage(
|
|
78
78
|
JSON.stringify({ error: a })
|
|
79
|
-
) : i !== void 0 ?
|
|
79
|
+
) : i !== void 0 ? s.postMessage(
|
|
80
80
|
JSON.stringify({ result: i })
|
|
81
|
-
) :
|
|
82
|
-
JSON.stringify({ result:
|
|
81
|
+
) : s.postMessage(
|
|
82
|
+
JSON.stringify({ result: n })
|
|
83
83
|
);
|
|
84
84
|
},
|
|
85
|
-
(
|
|
86
|
-
|
|
85
|
+
(n) => {
|
|
86
|
+
s.postMessage(
|
|
87
87
|
JSON.stringify({
|
|
88
|
-
error: this._prepareError(
|
|
88
|
+
error: this._prepareError(n)
|
|
89
89
|
})
|
|
90
90
|
);
|
|
91
91
|
}
|
|
92
92
|
);
|
|
93
|
-
} catch (
|
|
94
|
-
|
|
93
|
+
} catch (o) {
|
|
94
|
+
s.postMessage(
|
|
95
95
|
JSON.stringify({
|
|
96
|
-
error: this._prepareError(
|
|
96
|
+
error: this._prepareError(o)
|
|
97
97
|
})
|
|
98
98
|
);
|
|
99
99
|
}
|
|
100
100
|
}
|
|
101
|
-
_prepareError(
|
|
102
|
-
if (typeof
|
|
103
|
-
const
|
|
104
|
-
return console.error(
|
|
101
|
+
_prepareError(t) {
|
|
102
|
+
if (typeof t == "string") {
|
|
103
|
+
const s = this._side + ": " + t;
|
|
104
|
+
return console.error(s), s;
|
|
105
105
|
}
|
|
106
|
-
return
|
|
106
|
+
return t.message = this._side + ": " + t.message, console.error(t), t.message;
|
|
107
107
|
}
|
|
108
108
|
}
|
|
109
109
|
const p = ".", E = {
|
|
@@ -115,15 +115,15 @@ const p = ".", E = {
|
|
|
115
115
|
RETURN_METHODS: "returnMethods",
|
|
116
116
|
REGISTER_CUSTOM_VIEW: "registerCustomView",
|
|
117
117
|
REGISTER_CUSTOM_VIEW_DONE: "registerCustomViewDone"
|
|
118
|
-
}, U = async (
|
|
119
|
-
if (typeof
|
|
118
|
+
}, U = async (e, t) => {
|
|
119
|
+
if (typeof e != "string")
|
|
120
120
|
throw new Error(
|
|
121
|
-
'Configurator ID is not a string type: "' + typeof
|
|
121
|
+
'Configurator ID is not a string type: "' + typeof e + '"'
|
|
122
122
|
);
|
|
123
|
-
const
|
|
123
|
+
const s = t.customApiUrl ? t.customApiUrl : "https://api.roomle.com/v2", o = t.overrideTenant || 9, r = s + "/configurators/" + e, n = "roomle_portal_v2", a = "03-" + window.btoa((/* @__PURE__ */ new Date()).toISOString() + ";anonymous;" + n), i = () => {
|
|
124
124
|
const h = {
|
|
125
|
-
apiKey:
|
|
126
|
-
currentTenant:
|
|
125
|
+
apiKey: n,
|
|
126
|
+
currentTenant: o,
|
|
127
127
|
locale: "en",
|
|
128
128
|
language: "en",
|
|
129
129
|
device: 1,
|
|
@@ -131,60 +131,60 @@ const p = ".", E = {
|
|
|
131
131
|
platform: "web"
|
|
132
132
|
};
|
|
133
133
|
return new Headers(h);
|
|
134
|
-
}, l = new Request(
|
|
134
|
+
}, l = new Request(r, {
|
|
135
135
|
method: "GET",
|
|
136
136
|
headers: i(),
|
|
137
137
|
mode: "cors",
|
|
138
138
|
cache: "default"
|
|
139
139
|
}), d = await fetch(l), { configurator: g } = await d.json();
|
|
140
140
|
return g;
|
|
141
|
-
},
|
|
141
|
+
}, W = () => {
|
|
142
142
|
try {
|
|
143
143
|
return window.self !== window.top;
|
|
144
144
|
} catch {
|
|
145
145
|
return !0;
|
|
146
146
|
}
|
|
147
|
-
},
|
|
148
|
-
const
|
|
149
|
-
let
|
|
150
|
-
if (
|
|
147
|
+
}, x = ["127.0.0.1", "localhost", "0.0.0.0"], k = () => {
|
|
148
|
+
const e = W();
|
|
149
|
+
let t = window.location.href;
|
|
150
|
+
if (e) {
|
|
151
151
|
if (!document.referrer)
|
|
152
152
|
return null;
|
|
153
|
-
|
|
153
|
+
t = document.referrer;
|
|
154
154
|
}
|
|
155
|
-
const { hostname:
|
|
156
|
-
return
|
|
157
|
-
},
|
|
155
|
+
const { hostname: s } = new URL(t);
|
|
156
|
+
return s;
|
|
157
|
+
}, G = (e) => !!(x.includes(e) || e.endsWith("roomle.com") || e.endsWith("gitlab.io") || e.endsWith("gitlab.com")), I = [
|
|
158
158
|
"language",
|
|
159
159
|
"browserLanguage",
|
|
160
160
|
"userLanguage",
|
|
161
161
|
"systemLanguage"
|
|
162
|
-
],
|
|
163
|
-
const
|
|
164
|
-
if (
|
|
165
|
-
return
|
|
166
|
-
if (Array.isArray(
|
|
167
|
-
return
|
|
168
|
-
for (let
|
|
169
|
-
const
|
|
170
|
-
if (
|
|
171
|
-
return
|
|
162
|
+
], V = (e = null) => {
|
|
163
|
+
const t = window.navigator;
|
|
164
|
+
if (e)
|
|
165
|
+
return e.substr(0, 2);
|
|
166
|
+
if (Array.isArray(t.languages) && t.languages.length > 0)
|
|
167
|
+
return t.languages[0].substr(0, 2);
|
|
168
|
+
for (let s = 0, o = I.length; s < o; s++) {
|
|
169
|
+
const r = t[I[s]];
|
|
170
|
+
if (r)
|
|
171
|
+
return r.substr(0, 2);
|
|
172
172
|
}
|
|
173
173
|
return "en";
|
|
174
|
-
},
|
|
175
|
-
const
|
|
176
|
-
return
|
|
177
|
-
},
|
|
178
|
-
for (const
|
|
174
|
+
}, J = (e, t) => {
|
|
175
|
+
const s = JSON.parse(JSON.stringify(e));
|
|
176
|
+
return T(s, t);
|
|
177
|
+
}, T = (e, t) => {
|
|
178
|
+
for (const s in t)
|
|
179
179
|
try {
|
|
180
|
-
s
|
|
180
|
+
t[s].constructor === Object ? e[s] = T(e[s], t[s]) : e[s] = t[s];
|
|
181
181
|
} catch {
|
|
182
|
-
|
|
182
|
+
e[s] = t[s];
|
|
183
183
|
}
|
|
184
|
-
return
|
|
184
|
+
return e;
|
|
185
185
|
};
|
|
186
|
-
var
|
|
187
|
-
const
|
|
186
|
+
var v = /* @__PURE__ */ ((e) => (e.BOTTOM_BAR = "bottom_bar", e.PARTLIST_BOUNDS = "partlist_bounds", e.INTERACTION_NOTES = "interaction_notes", e))(v || {}), $ = { BASE_URL: "/", DEV: !1, MODE: "production", PROD: !0, SSR: !1 };
|
|
187
|
+
const z = {
|
|
188
188
|
mobileLandscape: !0,
|
|
189
189
|
floorMaterialRootTag: "materials_root",
|
|
190
190
|
buttons: {
|
|
@@ -194,6 +194,9 @@ const $ = {
|
|
|
194
194
|
load_product: !0,
|
|
195
195
|
partlist_print: !0
|
|
196
196
|
},
|
|
197
|
+
elements: {
|
|
198
|
+
[v.INTERACTION_NOTES]: !1
|
|
199
|
+
},
|
|
197
200
|
helpcenter: {
|
|
198
201
|
roomdesigner: !0,
|
|
199
202
|
configurator: !1,
|
|
@@ -206,33 +209,35 @@ const $ = {
|
|
|
206
209
|
wallAutoHeight: !1
|
|
207
210
|
},
|
|
208
211
|
rotationSnapDegrees: 10
|
|
209
|
-
},
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
)),
|
|
213
|
-
if (!
|
|
212
|
+
}, Y = "(idle)", q = (e) => (O(e), e != null && e.customApiUrl && (e.customApiUrl = decodeURIComponent(e.customApiUrl)), e.shareUrl && (e.deeplink = e.shareUrl.replace(
|
|
213
|
+
X,
|
|
214
|
+
Z
|
|
215
|
+
)), e), O = (e) => {
|
|
216
|
+
if (!e)
|
|
214
217
|
return;
|
|
215
|
-
const
|
|
216
|
-
for (const
|
|
217
|
-
const
|
|
218
|
-
if (!Array.isArray(
|
|
219
|
-
for (const
|
|
220
|
-
O(
|
|
221
|
-
(
|
|
218
|
+
const t = Object.keys(e);
|
|
219
|
+
for (const s of t) {
|
|
220
|
+
const o = e[s];
|
|
221
|
+
if (!Array.isArray(o) && typeof o == "object" && o !== null && O(o), Array.isArray(o))
|
|
222
|
+
for (const r of o)
|
|
223
|
+
O(r);
|
|
224
|
+
(o === "true" || o === "false") && (e[s] = o === "true");
|
|
222
225
|
}
|
|
223
|
-
},
|
|
224
|
-
|
|
225
|
-
const
|
|
226
|
-
return !
|
|
227
|
-
},
|
|
228
|
-
const
|
|
229
|
-
|
|
226
|
+
}, K = (e, t) => {
|
|
227
|
+
t.configuratorId = e.id;
|
|
228
|
+
const s = e.settings || {};
|
|
229
|
+
return !t.overrideTenant && e.tenant && (t.overrideTenant = e.tenant), J(s, t);
|
|
230
|
+
}, Q = () => {
|
|
231
|
+
const e = {
|
|
232
|
+
...z
|
|
230
233
|
};
|
|
231
|
-
|
|
232
|
-
const
|
|
233
|
-
return
|
|
234
|
-
},
|
|
235
|
-
|
|
234
|
+
e.locale || (e.locale = V()), e.id === Y && delete e.id;
|
|
235
|
+
const t = k();
|
|
236
|
+
return t && G(t) && (e.configuratorId = "demoConfigurator"), e.customApiUrl = $.VITE_RAPI_URL, e.emails = !1, e;
|
|
237
|
+
}, X = "<CONF_ID>", Z = "#CONFIGURATIONID#", j = (e) => {
|
|
238
|
+
e.featureFlags || (e.featureFlags = {}), typeof e.featureFlags.realPartList != "boolean" && (e.featureFlags.realPartList = !0), typeof e.featureFlags.globalCallbacks != "boolean" && (e.featureFlags.globalCallbacks = !0), typeof e.featureFlags.mocAr != "boolean" && (e.featureFlags.mocAr = !1);
|
|
239
|
+
}, M = () => /(android)/i.test(navigator.userAgent);
|
|
240
|
+
class y {
|
|
236
241
|
constructor() {
|
|
237
242
|
c(this, "_messageHandler", null);
|
|
238
243
|
c(this, "isSetupDone", !1);
|
|
@@ -255,51 +260,51 @@ class A {
|
|
|
255
260
|
callbacks: {}
|
|
256
261
|
});
|
|
257
262
|
}
|
|
258
|
-
setMessageHandler(
|
|
259
|
-
this._messageHandler =
|
|
263
|
+
setMessageHandler(t) {
|
|
264
|
+
this._messageHandler = t;
|
|
260
265
|
}
|
|
261
|
-
handleSetup(
|
|
262
|
-
const { methods:
|
|
263
|
-
|
|
264
|
-
const
|
|
266
|
+
handleSetup(t) {
|
|
267
|
+
const { methods: s, callbacks: o } = t;
|
|
268
|
+
s.forEach((r) => {
|
|
269
|
+
const n = r.split(p), a = n[0], i = n[1];
|
|
265
270
|
this[a] || (this[a] = {}), this[a][i] = (function() {
|
|
266
271
|
if (!this._messageHandler) {
|
|
267
272
|
console.error("MessageHandler not set");
|
|
268
273
|
return;
|
|
269
274
|
}
|
|
270
|
-
return this._messageHandler.sendMessage(
|
|
275
|
+
return this._messageHandler.sendMessage(r, [...arguments]);
|
|
271
276
|
}).bind(this);
|
|
272
|
-
}),
|
|
273
|
-
const
|
|
277
|
+
}), o.forEach((r) => {
|
|
278
|
+
const n = r.split(p), a = n[0], i = n[1], l = n[2];
|
|
274
279
|
this[a] || (this[a] = {}), this[a][i] || (this[a][i] = {}), this[a][i][l] = () => {
|
|
275
280
|
};
|
|
276
281
|
}), this.isSetupDone = !0;
|
|
277
282
|
}
|
|
278
|
-
executeMessage({ message:
|
|
279
|
-
const
|
|
280
|
-
if (a && this[
|
|
281
|
-
const i = this[
|
|
282
|
-
...
|
|
283
|
+
executeMessage({ message: t, args: s }) {
|
|
284
|
+
const o = t.split(p), r = o[0], n = o[1], a = o.length === 3 ? o[2] : null;
|
|
285
|
+
if (a && this[r][n][a]) {
|
|
286
|
+
const i = this[r][n][a](
|
|
287
|
+
...s
|
|
283
288
|
);
|
|
284
289
|
return i instanceof Promise ? i.then((l) => ({ result: l })) : i !== void 0 ? Promise.resolve({ result: i }) : Promise.resolve({ result: null });
|
|
285
290
|
}
|
|
286
|
-
return Promise.reject('Message "' +
|
|
291
|
+
return Promise.reject('Message "' + t + '" is unkown');
|
|
287
292
|
}
|
|
288
|
-
setupPlugins(
|
|
289
|
-
for (const
|
|
290
|
-
typeof
|
|
291
|
-
new Promise((
|
|
293
|
+
setupPlugins(t, s, o = "website") {
|
|
294
|
+
for (const r of t)
|
|
295
|
+
typeof r == "string" && r === "dragIn" ? this.pluginsLoaded.push(
|
|
296
|
+
new Promise((n, a) => {
|
|
292
297
|
try {
|
|
293
298
|
import("./drag-in-Do47zdKL.mjs").then((i) => i.l).then(
|
|
294
299
|
({ DragIn: i }) => {
|
|
295
300
|
const l = new i(
|
|
296
301
|
this.ui,
|
|
297
|
-
|
|
298
|
-
|
|
302
|
+
s,
|
|
303
|
+
o,
|
|
299
304
|
this.viewName
|
|
300
305
|
);
|
|
301
306
|
l.init().then(() => {
|
|
302
|
-
this.plugins.dragIn = l,
|
|
307
|
+
this.plugins.dragIn = l, n();
|
|
303
308
|
}, a);
|
|
304
309
|
}
|
|
305
310
|
);
|
|
@@ -307,18 +312,18 @@ class A {
|
|
|
307
312
|
a(i);
|
|
308
313
|
}
|
|
309
314
|
})
|
|
310
|
-
) :
|
|
311
|
-
new Promise((
|
|
315
|
+
) : r.name && r.loader && this.pluginsLoaded.push(
|
|
316
|
+
new Promise((n, a) => {
|
|
312
317
|
try {
|
|
313
|
-
|
|
318
|
+
r.loader().then((i) => {
|
|
314
319
|
const l = new i(
|
|
315
320
|
this.ui,
|
|
316
|
-
|
|
317
|
-
|
|
321
|
+
s,
|
|
322
|
+
o,
|
|
318
323
|
this.viewName
|
|
319
324
|
);
|
|
320
325
|
l.init().then(() => {
|
|
321
|
-
this.plugins[
|
|
326
|
+
this.plugins[r.name] = l, n();
|
|
322
327
|
}, a);
|
|
323
328
|
});
|
|
324
329
|
} catch (i) {
|
|
@@ -328,29 +333,29 @@ class A {
|
|
|
328
333
|
);
|
|
329
334
|
}
|
|
330
335
|
}
|
|
331
|
-
const
|
|
332
|
-
let
|
|
333
|
-
return { promise: new Promise((
|
|
334
|
-
|
|
335
|
-
}), resolve:
|
|
336
|
-
}, N = (
|
|
337
|
-
let
|
|
338
|
-
Object.defineProperty(
|
|
336
|
+
const A = () => {
|
|
337
|
+
let e, t;
|
|
338
|
+
return { promise: new Promise((o, r) => {
|
|
339
|
+
e = o, t = r;
|
|
340
|
+
}), resolve: e, reject: t };
|
|
341
|
+
}, N = (e, t, s) => {
|
|
342
|
+
let o = null;
|
|
343
|
+
Object.defineProperty(e, t, {
|
|
339
344
|
get() {
|
|
340
|
-
return
|
|
345
|
+
return o || s;
|
|
341
346
|
},
|
|
342
|
-
set(
|
|
343
|
-
|
|
347
|
+
set(r) {
|
|
348
|
+
r != null && r.mute ? o = r.value : (console.warn(
|
|
344
349
|
"You override Roomle defined behaviour. To disalbe this warning pass in an object with the following properties"
|
|
345
|
-
), console.warn("{ mute: true, value: () => void }"),
|
|
350
|
+
), console.warn("{ mute: true, value: () => void }"), o = r);
|
|
346
351
|
}
|
|
347
352
|
});
|
|
348
|
-
},
|
|
349
|
-
|
|
350
|
-
() =>
|
|
353
|
+
}, H = () => window.innerHeight * 0.01 + "px", L = (e) => {
|
|
354
|
+
e && setTimeout(
|
|
355
|
+
() => e.style.setProperty(S, H()),
|
|
351
356
|
0
|
|
352
357
|
);
|
|
353
|
-
},
|
|
358
|
+
}, b = "rml-styles", ee = 450, S = "--rml-full-height", u = {
|
|
354
359
|
CONTAINER: "rml-container",
|
|
355
360
|
FILL: "rml-fill",
|
|
356
361
|
POSITION: "rml-pos",
|
|
@@ -358,89 +363,89 @@ const T = () => {
|
|
|
358
363
|
ANDROID_HEIGHT: "rml-android-height",
|
|
359
364
|
OVERFLOW_HIDDEN: "rml-overflow-hidden"
|
|
360
365
|
}, w = /* @__PURE__ */ new Map();
|
|
361
|
-
class
|
|
362
|
-
constructor(
|
|
366
|
+
class te extends y {
|
|
367
|
+
constructor(s, o, r, n, a) {
|
|
363
368
|
super();
|
|
364
369
|
c(this, "_waitForIframe");
|
|
365
370
|
c(this, "_container");
|
|
366
371
|
c(this, "_configuratorSettings");
|
|
367
372
|
c(this, "_initData", {});
|
|
368
373
|
c(this, "_iframe");
|
|
369
|
-
if (!
|
|
374
|
+
if (!s || typeof s.id != "string")
|
|
370
375
|
throw new Error(
|
|
371
376
|
"Please provide a correct configuratorId, you get the correct ID from your Roomle Contact Person"
|
|
372
377
|
);
|
|
373
|
-
if (w.has(
|
|
378
|
+
if (w.has(o))
|
|
374
379
|
throw new Error("There is already an instance on this DOM element");
|
|
375
|
-
if (!!!document.getElementById(
|
|
376
|
-
const g =
|
|
377
|
-
h.type = "text/css", h.id =
|
|
378
|
-
const
|
|
379
|
-
(
|
|
380
|
+
if (!!!document.getElementById(b)) {
|
|
381
|
+
const g = r.zIndex || 9999999, h = document.createElement("style");
|
|
382
|
+
h.type = "text/css", h.id = b;
|
|
383
|
+
const m = "transition:all ease-in-out " + ee + "ms;", f = ["-webkit-", "-o-"].reduce(
|
|
384
|
+
(D, C) => D += C + m,
|
|
380
385
|
""
|
|
381
|
-
) +
|
|
386
|
+
) + m, P = H();
|
|
382
387
|
h.innerHTML = `
|
|
383
|
-
.${u.CONTAINER}{${
|
|
388
|
+
.${u.CONTAINER}{${S}:${P};}
|
|
384
389
|
.${u.POSITION}{position:fixed;top:0;left:0;z-index:${g};opacity:0}
|
|
385
|
-
.${u.TRANSITION}{${
|
|
390
|
+
.${u.TRANSITION}{${f}}
|
|
386
391
|
.${u.FILL}{width:100%;height:100%;opacity:1}
|
|
387
|
-
.${u.ANDROID_HEIGHT}{height:calc(var(${
|
|
392
|
+
.${u.ANDROID_HEIGHT}{height:calc(var(${S},1vh)*100)}
|
|
388
393
|
.${u.OVERFLOW_HIDDEN}{overflow:hidden}
|
|
389
394
|
`, document.head.appendChild(h);
|
|
390
395
|
}
|
|
391
396
|
this._executeMessage = this._executeMessage.bind(this);
|
|
392
|
-
const l = new
|
|
397
|
+
const l = new R(
|
|
393
398
|
"website",
|
|
394
399
|
window,
|
|
395
400
|
null,
|
|
396
401
|
this._executeMessage
|
|
397
402
|
);
|
|
398
|
-
this.setMessageHandler(l), this._onResize = this._onResize.bind(this),
|
|
403
|
+
this.setMessageHandler(l), this._onResize = this._onResize.bind(this), M() && window.addEventListener("resize", this._onResize), this._container = o, this._initData = r, this._configuratorSettings = s;
|
|
399
404
|
const d = this._createIframe();
|
|
400
|
-
this._onUseFullPage = this._onUseFullPage.bind(this), this._onBackToWebsite = this._onBackToWebsite.bind(this), this._waitForIframe = a, this._container.appendChild(d), this._iframe = d, this.setupPlugins(
|
|
405
|
+
this._onUseFullPage = this._onUseFullPage.bind(this), this._onBackToWebsite = this._onBackToWebsite.bind(this), this._waitForIframe = a, this._container.appendChild(d), this._iframe = d, this.setupPlugins(n, this._iframe), w.set(o, !0);
|
|
401
406
|
}
|
|
402
|
-
static createPlanner(
|
|
407
|
+
static createPlanner(s, o, r, n = []) {
|
|
403
408
|
return this._create(
|
|
404
|
-
|
|
405
|
-
|
|
406
|
-
|
|
407
|
-
|
|
409
|
+
s,
|
|
410
|
+
o,
|
|
411
|
+
r,
|
|
412
|
+
n
|
|
408
413
|
);
|
|
409
414
|
}
|
|
410
|
-
static async connect(
|
|
411
|
-
const
|
|
412
|
-
|
|
413
|
-
const { resolve:
|
|
414
|
-
message:
|
|
415
|
-
args:
|
|
415
|
+
static async connect(s, o = []) {
|
|
416
|
+
const r = new y();
|
|
417
|
+
r.viewName = s;
|
|
418
|
+
const { resolve: n, promise: a } = A(), { resolve: i, promise: l } = A(), d = ({
|
|
419
|
+
message: m,
|
|
420
|
+
args: f
|
|
416
421
|
}) => {
|
|
417
|
-
switch (
|
|
422
|
+
switch (m) {
|
|
418
423
|
case _.REGISTER_CUSTOM_VIEW_DONE:
|
|
419
|
-
|
|
424
|
+
n();
|
|
420
425
|
break;
|
|
421
426
|
case _.RETURN_METHODS:
|
|
422
|
-
|
|
427
|
+
r.handleSetup(f[0]), i();
|
|
423
428
|
break;
|
|
424
429
|
default:
|
|
425
|
-
if (
|
|
426
|
-
return
|
|
430
|
+
if (r.isSetupDone)
|
|
431
|
+
return r.executeMessage({ message: m, args: f });
|
|
427
432
|
}
|
|
428
|
-
}, g = new
|
|
429
|
-
"custom-view-" +
|
|
433
|
+
}, g = new R(
|
|
434
|
+
"custom-view-" + s,
|
|
430
435
|
window,
|
|
431
436
|
window.parent,
|
|
432
437
|
d
|
|
433
438
|
);
|
|
434
|
-
|
|
435
|
-
const h = [
|
|
439
|
+
r.setMessageHandler(g);
|
|
440
|
+
const h = [s];
|
|
436
441
|
return g.sendMessage(
|
|
437
442
|
_.REGISTER_CUSTOM_VIEW,
|
|
438
443
|
h
|
|
439
|
-
), await a, g.sendMessage(_.GET_METHODS, h), await l,
|
|
440
|
-
|
|
444
|
+
), await a, g.sendMessage(_.GET_METHODS, h), await l, r.setupPlugins(
|
|
445
|
+
o,
|
|
441
446
|
document.body,
|
|
442
447
|
"custom-view"
|
|
443
|
-
), await Promise.allSettled(
|
|
448
|
+
), await Promise.allSettled(r.pluginsLoaded), r;
|
|
444
449
|
}
|
|
445
450
|
/**
|
|
446
451
|
* Method to create a new instance of a Roomle Configurator
|
|
@@ -448,12 +453,12 @@ class ee extends A {
|
|
|
448
453
|
* @param container DOM container in which the configurator should be placed
|
|
449
454
|
* @param initData settings with which the configurator should be started
|
|
450
455
|
*/
|
|
451
|
-
static createConfigurator(
|
|
456
|
+
static createConfigurator(s, o, r, n = []) {
|
|
452
457
|
return this._create(
|
|
453
|
-
|
|
454
|
-
|
|
455
|
-
|
|
456
|
-
|
|
458
|
+
s,
|
|
459
|
+
o,
|
|
460
|
+
r,
|
|
461
|
+
n
|
|
457
462
|
);
|
|
458
463
|
}
|
|
459
464
|
/**
|
|
@@ -463,12 +468,12 @@ class ee extends A {
|
|
|
463
468
|
* @param container DOM container in which the configurator should be placed
|
|
464
469
|
* @param initData settings with which the configurator should be started
|
|
465
470
|
*/
|
|
466
|
-
static create(
|
|
471
|
+
static create(s, o, r, n) {
|
|
467
472
|
return this._create(
|
|
468
|
-
|
|
469
|
-
|
|
470
|
-
|
|
471
|
-
|
|
473
|
+
s,
|
|
474
|
+
o,
|
|
475
|
+
r,
|
|
476
|
+
n
|
|
472
477
|
);
|
|
473
478
|
}
|
|
474
479
|
/**
|
|
@@ -477,32 +482,32 @@ class ee extends A {
|
|
|
477
482
|
* @param container DOM container in which the configurator should be placed
|
|
478
483
|
* @param initData settings with which the configurator should be started
|
|
479
484
|
*/
|
|
480
|
-
static createViewer(
|
|
485
|
+
static createViewer(s, o, r, n = []) {
|
|
481
486
|
return this._create(
|
|
482
|
-
|
|
483
|
-
|
|
484
|
-
|
|
485
|
-
|
|
487
|
+
s,
|
|
488
|
+
o,
|
|
489
|
+
r,
|
|
490
|
+
n
|
|
486
491
|
);
|
|
487
492
|
}
|
|
488
|
-
static async _create(
|
|
493
|
+
static async _create(s, o, r, n) {
|
|
489
494
|
return new Promise(async (a, i) => {
|
|
490
495
|
try {
|
|
491
|
-
const l =
|
|
492
|
-
|
|
493
|
-
|
|
496
|
+
const l = T(
|
|
497
|
+
Q(),
|
|
498
|
+
q(r)
|
|
494
499
|
);
|
|
495
|
-
|
|
500
|
+
j(l);
|
|
496
501
|
const d = await U(
|
|
497
|
-
|
|
502
|
+
s,
|
|
498
503
|
l
|
|
499
504
|
);
|
|
500
|
-
|
|
505
|
+
r = K(d, l);
|
|
501
506
|
const g = new this(
|
|
502
507
|
d,
|
|
503
|
-
n,
|
|
504
|
-
t,
|
|
505
508
|
o,
|
|
509
|
+
r,
|
|
510
|
+
n,
|
|
506
511
|
a
|
|
507
512
|
);
|
|
508
513
|
return await Promise.allSettled(g.pluginsLoaded), g;
|
|
@@ -513,28 +518,28 @@ class ee extends A {
|
|
|
513
518
|
}
|
|
514
519
|
teardown() {
|
|
515
520
|
this._container && w.delete(this._container);
|
|
516
|
-
const
|
|
517
|
-
|
|
521
|
+
const s = this._container.querySelector("iframe");
|
|
522
|
+
s && this._container.removeChild(s), window.removeEventListener("resize", this._onResize);
|
|
518
523
|
}
|
|
519
524
|
_createIframe() {
|
|
520
|
-
var
|
|
521
|
-
const
|
|
522
|
-
let
|
|
523
|
-
return this._initData.useLocalRoomle && (
|
|
525
|
+
var r;
|
|
526
|
+
const s = document.createElement("iframe");
|
|
527
|
+
let o = ((r = this._configuratorSettings) == null ? void 0 : r.url) || "https://www.roomle.com/t/cp/";
|
|
528
|
+
return this._initData.useLocalRoomle && (o = location.href.replace("embedding.html", "")), location.href.includes("roomle.gitlab.io") && (o = location.href.replace("embedding.html", "index.html")), this._initData.overrideServerUrl && (o = this._initData.overrideServerUrl), s.src = o, s.classList.add(u.CONTAINER), s.classList.add(u.FILL), s;
|
|
524
529
|
}
|
|
525
530
|
_onResize() {
|
|
526
|
-
|
|
531
|
+
L(this._iframe);
|
|
527
532
|
}
|
|
528
533
|
_onUseFullPage() {
|
|
529
|
-
this._iframe.classList.add(u.POSITION), document.documentElement.classList.add(u.OVERFLOW_HIDDEN), window.document.body.classList.add(u.OVERFLOW_HIDDEN),
|
|
534
|
+
this._iframe.classList.add(u.POSITION), document.documentElement.classList.add(u.OVERFLOW_HIDDEN), window.document.body.classList.add(u.OVERFLOW_HIDDEN), M() && (L(this._iframe), this._iframe.classList.add(u.ANDROID_HEIGHT));
|
|
530
535
|
}
|
|
531
536
|
_onBackToWebsite() {
|
|
532
537
|
this._iframe.classList.remove(u.POSITION), this._iframe.classList.remove(u.ANDROID_HEIGHT), document.documentElement.classList.remove(u.OVERFLOW_HIDDEN), window.document.body.classList.remove(u.OVERFLOW_HIDDEN);
|
|
533
538
|
}
|
|
534
|
-
_executeMessage({ message:
|
|
535
|
-
var
|
|
536
|
-
if (
|
|
537
|
-
return
|
|
539
|
+
_executeMessage({ message: s, args: o }, r) {
|
|
540
|
+
var n;
|
|
541
|
+
if (r.source && r.source === ((n = this._iframe) == null ? void 0 : n.contentWindow))
|
|
542
|
+
return s === E.REQUEST_BOOT ? this._messageHandler ? (this._messageHandler.setOutgoingMessageBus(r.source), Promise.resolve({ result: this._initData })) : (console.error("MessageHandler not set"), Promise.resolve({ error: "MessageHandler not set" })) : s === E.SETUP ? (this.handleSetup(o[0]), N(
|
|
538
543
|
this.ui.callbacks,
|
|
539
544
|
"onUseFullPage",
|
|
540
545
|
this._onUseFullPage
|
|
@@ -548,9 +553,9 @@ class ee extends A {
|
|
|
548
553
|
return;
|
|
549
554
|
}
|
|
550
555
|
this._messageHandler.sendMessage(E.WEBSITE_READY);
|
|
551
|
-
}, 0), Promise.resolve({ result: null })) : this.executeMessage({ message:
|
|
556
|
+
}, 0), Promise.resolve({ result: null })) : this.executeMessage({ message: s, args: o });
|
|
552
557
|
}
|
|
553
558
|
}
|
|
554
559
|
export {
|
|
555
|
-
|
|
560
|
+
te as default
|
|
556
561
|
};
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
var H=Object.defineProperty,
|
|
2
|
-
.${g.CONTAINER}{${
|
|
1
|
+
var H=Object.defineProperty,U=(s,e,t)=>e in s?H(s,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):s[e]=t,c=(s,e,t)=>U(s,typeof e!="symbol"?e+"":e,t);class I{constructor(e,t,r,i){c(this,"_side"),c(this,"_incomingMessageBus",null),c(this,"_outgoingMessageBus",null),c(this,"_execMessage",null),this._side=e,this._incomingMessageBus=t,this._outgoingMessageBus=r,this._execMessage=i,this._incomingMessageBus&&this._incomingMessageBus.addEventListener("message",this._handleMessage.bind(this))}setOutgoingMessageBus(e){this._outgoingMessageBus=e}setMessageExecution(e){this._execMessage=e}sendMessage(e,t=[]){return new Promise((r,i)=>{if(this._incomingMessageBus===this._outgoingMessageBus)return r(void 0);const o=new MessageChannel;o.port1.onmessage=n=>{if(!n||!n.data)return o.port1.close(),o.port2.close(),i(new Error(this._side+" received message but response can not be interpreted"));let l;try{l=JSON.parse(n.data)}catch(u){return o.port1.close(),o.port2.close(),this._prepareError(u),i(u)}l.error?i(l.error):l.result!==void 0?r(l.result):r(void 0),o.port1.close(),o.port2.close()};let a="";try{a=JSON.stringify({message:e,args:t})}catch{return i(new Error(this._side+": can not create command because it is not JSON.stringify able"))}if(!this._outgoingMessageBus)return i(new Error(this._side+": outgoing bus not set yet"));this._outgoingMessageBus.postMessage(a,"*",[o.port2])})}_handleMessage(e){const t=e.ports&&Array.isArray(e.ports)&&e.ports.length>0?e.ports[0]:null;if(e.data&&t)try{const r=JSON.parse(e.data);if(!this._execMessage)return t.postMessage(JSON.stringify({error:this._side+" is not ready to handle messages"}));Array.isArray(r.args)||(r.args=[r.args]);const i=this._execMessage(r,e);if(i===void 0)return;i.then((o={})=>{let a,n;typeof o=="object"&&o!==null&&(a=o.error,n=o.result),a?t.postMessage(JSON.stringify({error:a})):n!==void 0?t.postMessage(JSON.stringify({result:n})):t.postMessage(JSON.stringify({result:o}))},o=>{t.postMessage(JSON.stringify({error:this._prepareError(o)}))})}catch(r){t.postMessage(JSON.stringify({error:this._prepareError(r)}))}}_prepareError(e){if(typeof e=="string"){const t=this._side+": "+e;return console.error(t),t}return e.message=this._side+": "+e.message,console.error(e),e.message}}const p=".",f={REQUEST_BOOT:"requestBoot",SETUP:"setup",WEBSITE_READY:"websiteReady"},_={GET_METHODS:"getMethods",RETURN_METHODS:"returnMethods",REGISTER_CUSTOM_VIEW:"registerCustomView",REGISTER_CUSTOM_VIEW_DONE:"registerCustomViewDone"},B=async(s,e)=>{if(typeof s!="string")throw new Error('Configurator ID is not a string type: "'+typeof s+'"');const t=e.customApiUrl?e.customApiUrl:"https://api.roomle.com/v2",r=e.overrideTenant||9,i=t+"/configurators/"+s,o="roomle_portal_v2",a="03-"+window.btoa(new Date().toISOString()+";anonymous;"+o),n=()=>{const d={apiKey:o,currentTenant:r,locale:"en",language:"en",device:1,token:a,platform:"web"};return new Headers(d)},l=new Request(i,{method:"GET",headers:n(),mode:"cors",cache:"default"}),u=await fetch(l),{configurator:h}=await u.json();return h},F=()=>{try{return window.self!==window.top}catch{return!0}},C=["127.0.0.1","localhost","0.0.0.0"],k=()=>{const s=F();let e=window.location.href;if(s){if(!document.referrer)return null;e=document.referrer}const{hostname:t}=new URL(e);return t},x=s=>!!(C.includes(s)||s.endsWith("roomle.com")||s.endsWith("gitlab.io")||s.endsWith("gitlab.com")),y=["language","browserLanguage","userLanguage","systemLanguage"],W=(s=null)=>{const e=window.navigator;if(s)return s.substr(0,2);if(Array.isArray(e.languages)&&e.languages.length>0)return e.languages[0].substr(0,2);for(let t=0,r=y.length;t<r;t++){const i=e[y[t]];if(i)return i.substr(0,2)}return"en"},V=(s,e)=>{const t=JSON.parse(JSON.stringify(s));return w(t,e)},w=(s,e)=>{for(const t in e)try{e[t].constructor===Object?s[t]=w(s[t],e[t]):s[t]=e[t]}catch{s[t]=e[t]}return s};var T=(s=>(s.BOTTOM_BAR="bottom_bar",s.PARTLIST_BOUNDS="partlist_bounds",s.INTERACTION_NOTES="interaction_notes",s))(T||{}),G={BASE_URL:"/",DEV:!1,MODE:"production",PROD:!0,SSR:!1};const J={mobileLandscape:!0,floorMaterialRootTag:"materials_root",buttons:{renderimage:!0,requestproduct:!0,requestplan:!0,load_product:!0,partlist_print:!0},elements:{[T.INTERACTION_NOTES]:!1},helpcenter:{roomdesigner:!0,configurator:!1,disable:!1},firstPersonView:!0,saveToIdb:!0,featureFlags:{mocAr:!0,wallAutoHeight:!1},rotationSnapDegrees:10},$="(idle)",j=s=>(E(s),s!=null&&s.customApiUrl&&(s.customApiUrl=decodeURIComponent(s.customApiUrl)),s.shareUrl&&(s.deeplink=s.shareUrl.replace(Y,Q)),s),E=s=>{if(!s)return;const e=Object.keys(s);for(const t of e){const r=s[t];if(!Array.isArray(r)&&typeof r=="object"&&r!==null&&E(r),Array.isArray(r))for(const i of r)E(i);(r==="true"||r==="false")&&(s[t]=r==="true")}},z=(s,e)=>{e.configuratorId=s.id;const t=s.settings||{};return!e.overrideTenant&&s.tenant&&(e.overrideTenant=s.tenant),V(t,e)},q=()=>{const s={...J};s.locale||(s.locale=W()),s.id===$&&delete s.id;const e=k();return e&&x(e)&&(s.configuratorId="demoConfigurator"),s.customApiUrl=G.VITE_RAPI_URL,s.emails=!1,s},Y="<CONF_ID>",Q="#CONFIGURATIONID#",K=s=>{s.featureFlags||(s.featureFlags={}),typeof s.featureFlags.realPartList!="boolean"&&(s.featureFlags.realPartList=!0),typeof s.featureFlags.globalCallbacks!="boolean"&&(s.featureFlags.globalCallbacks=!0),typeof s.featureFlags.mocAr!="boolean"&&(s.featureFlags.mocAr=!1)},M=()=>/(android)/i.test(navigator.userAgent);class v{constructor(){c(this,"_messageHandler",null),c(this,"isSetupDone",!1),c(this,"viewName","main"),c(this,"plugins",{}),c(this,"pluginsLoaded",[]),c(this,"ui",{callbacks:null}),c(this,"extended",{callbacks:null}),c(this,"configurator",{callbacks:null}),c(this,"analytics",{callbacks:{}}),c(this,"global",{callbacks:{}})}setMessageHandler(e){this._messageHandler=e}handleSetup(e){const{methods:t,callbacks:r}=e;t.forEach(i=>{const o=i.split(p),a=o[0],n=o[1];this[a]||(this[a]={}),this[a][n]=function(){if(!this._messageHandler){console.error("MessageHandler not set");return}return this._messageHandler.sendMessage(i,[...arguments])}.bind(this)}),r.forEach(i=>{const o=i.split(p),a=o[0],n=o[1],l=o[2];this[a]||(this[a]={}),this[a][n]||(this[a][n]={}),this[a][n][l]=()=>{}}),this.isSetupDone=!0}executeMessage({message:e,args:t}){const r=e.split(p),i=r[0],o=r[1],a=r.length===3?r[2]:null;if(a&&this[i][o][a]){const n=this[i][o][a](...t);return n instanceof Promise?n.then(l=>({result:l})):n!==void 0?Promise.resolve({result:n}):Promise.resolve({result:null})}return Promise.reject('Message "'+e+'" is unkown')}setupPlugins(e,t,r="website"){for(const i of e)typeof i=="string"&&i==="dragIn"?this.pluginsLoaded.push(new Promise((o,a)=>{try{import("./drag-in-CYmR1HFI.mjs").then(n=>n.l).then(({DragIn:n})=>{const l=new n(this.ui,t,r,this.viewName);l.init().then(()=>{this.plugins.dragIn=l,o()},a)})}catch(n){a(n)}})):i.name&&i.loader&&this.pluginsLoaded.push(new Promise((o,a)=>{try{i.loader().then(n=>{const l=new n(this.ui,t,r,this.viewName);l.init().then(()=>{this.plugins[i.name]=l,o()},a)})}catch(n){a(n)}}))}}const S=()=>{let s,e;return{promise:new Promise((t,r)=>{s=t,e=r}),resolve:s,reject:e}},N=(s,e,t)=>{let r=null;Object.defineProperty(s,e,{get(){return r||t},set(i){i!=null&&i.mute?r=i.value:(console.warn("You override Roomle defined behaviour. To disalbe this warning pass in an object with the following properties"),console.warn("{ mute: true, value: () => void }"),r=i)}})},R=()=>window.innerHeight*.01+"px",D=s=>{s&&setTimeout(()=>s.style.setProperty(O,R()),0)},L="rml-styles",X=450,O="--rml-full-height",g={CONTAINER:"rml-container",FILL:"rml-fill",POSITION:"rml-pos",TRANSITION:"rml-transition",ANDROID_HEIGHT:"rml-android-height",OVERFLOW_HIDDEN:"rml-overflow-hidden"},b=new Map;class Z extends v{constructor(e,t,r,i,o){if(super(),c(this,"_waitForIframe"),c(this,"_container"),c(this,"_configuratorSettings"),c(this,"_initData",{}),c(this,"_iframe"),!e||typeof e.id!="string")throw new Error("Please provide a correct configuratorId, you get the correct ID from your Roomle Contact Person");if(b.has(t))throw new Error("There is already an instance on this DOM element");if(!document.getElementById(L)){const l=r.zIndex||9999999,u=document.createElement("style");u.type="text/css",u.id=L;const h="transition:all ease-in-out "+X+"ms;",d=["-webkit-","-o-"].reduce((P,A)=>P+=A+h,"")+h,m=R();u.innerHTML=`
|
|
2
|
+
.${g.CONTAINER}{${O}:${m};}
|
|
3
3
|
.${g.POSITION}{position:fixed;top:0;left:0;z-index:${l};opacity:0}
|
|
4
4
|
.${g.TRANSITION}{${d}}
|
|
5
5
|
.${g.FILL}{width:100%;height:100%;opacity:1}
|
|
6
|
-
.${g.ANDROID_HEIGHT}{height:calc(var(${
|
|
6
|
+
.${g.ANDROID_HEIGHT}{height:calc(var(${O},1vh)*100)}
|
|
7
7
|
.${g.OVERFLOW_HIDDEN}{overflow:hidden}
|
|
8
|
-
`,document.head.appendChild(u)}this._executeMessage=this._executeMessage.bind(this);const a=new
|
|
8
|
+
`,document.head.appendChild(u)}this._executeMessage=this._executeMessage.bind(this);const a=new I("website",window,null,this._executeMessage);this.setMessageHandler(a),this._onResize=this._onResize.bind(this),M()&&window.addEventListener("resize",this._onResize),this._container=t,this._initData=r,this._configuratorSettings=e;const n=this._createIframe();this._onUseFullPage=this._onUseFullPage.bind(this),this._onBackToWebsite=this._onBackToWebsite.bind(this),this._waitForIframe=o,this._container.appendChild(n),this._iframe=n,this.setupPlugins(i,this._iframe),b.set(t,!0)}static createPlanner(e,t,r,i=[]){return this._create(e,t,r,i)}static async connect(e,t=[]){const r=new v;r.viewName=e;const{resolve:i,promise:o}=S(),{resolve:a,promise:n}=S(),l=({message:d,args:m})=>{switch(d){case _.REGISTER_CUSTOM_VIEW_DONE:i();break;case _.RETURN_METHODS:r.handleSetup(m[0]),a();break;default:if(r.isSetupDone)return r.executeMessage({message:d,args:m})}},u=new I("custom-view-"+e,window,window.parent,l);r.setMessageHandler(u);const h=[e];return u.sendMessage(_.REGISTER_CUSTOM_VIEW,h),await o,u.sendMessage(_.GET_METHODS,h),await n,r.setupPlugins(t,document.body,"custom-view"),await Promise.allSettled(r.pluginsLoaded),r}static createConfigurator(e,t,r,i=[]){return this._create(e,t,r,i)}static create(e,t,r,i){return this._create(e,t,r,i)}static createViewer(e,t,r,i=[]){return this._create(e,t,r,i)}static async _create(e,t,r,i){return new Promise(async(o,a)=>{try{const n=w(q(),j(r));K(n);const l=await B(e,n);r=z(l,n);const u=new this(l,t,r,i,o);return await Promise.allSettled(u.pluginsLoaded),u}catch(n){return a(n)}})}teardown(){this._container&&b.delete(this._container);const e=this._container.querySelector("iframe");e&&this._container.removeChild(e),window.removeEventListener("resize",this._onResize)}_createIframe(){var e;const t=document.createElement("iframe");let r=((e=this._configuratorSettings)==null?void 0:e.url)||"https://www.roomle.com/t/cp/";return this._initData.useLocalRoomle&&(r=location.href.replace("embedding.html","")),location.href.includes("roomle.gitlab.io")&&(r=location.href.replace("embedding.html","index.html")),this._initData.overrideServerUrl&&(r=this._initData.overrideServerUrl),t.src=r,t.classList.add(g.CONTAINER),t.classList.add(g.FILL),t}_onResize(){D(this._iframe)}_onUseFullPage(){this._iframe.classList.add(g.POSITION),document.documentElement.classList.add(g.OVERFLOW_HIDDEN),window.document.body.classList.add(g.OVERFLOW_HIDDEN),M()&&(D(this._iframe),this._iframe.classList.add(g.ANDROID_HEIGHT))}_onBackToWebsite(){this._iframe.classList.remove(g.POSITION),this._iframe.classList.remove(g.ANDROID_HEIGHT),document.documentElement.classList.remove(g.OVERFLOW_HIDDEN),window.document.body.classList.remove(g.OVERFLOW_HIDDEN)}_executeMessage({message:e,args:t},r){var i;if(r.source&&r.source===((i=this._iframe)==null?void 0:i.contentWindow))return e===f.REQUEST_BOOT?this._messageHandler?(this._messageHandler.setOutgoingMessageBus(r.source),Promise.resolve({result:this._initData})):(console.error("MessageHandler not set"),Promise.resolve({error:"MessageHandler not set"})):e===f.SETUP?(this.handleSetup(t[0]),N(this.ui.callbacks,"onUseFullPage",this._onUseFullPage),N(this.ui.callbacks,"onBackToWebsite",this._onBackToWebsite),this._waitForIframe(this),setTimeout(()=>{if(!this._messageHandler){console.error("MessageHandler not set");return}this._messageHandler.sendMessage(f.WEBSITE_READY)},0),Promise.resolve({result:null})):this.executeMessage({message:e,args:t})}}export{Z as default};
|
|
@@ -1,17 +1,17 @@
|
|
|
1
|
-
(function(_,p){typeof exports=="object"&&typeof module<"u"?module.exports=p():typeof define=="function"&&define.amd?define(p):(_=typeof globalThis<"u"?globalThis:_||self,_["roomle-embedding-lib"]=_["roomle-embedding-lib"]||{},_["roomle-embedding-lib"].umd=_["roomle-embedding-lib"].umd||{},_["roomle-embedding-lib"].umd.js=p())})(this,function(){"use strict";var
|
|
2
|
-
.${m.CONTAINER}{${N}:${
|
|
1
|
+
(function(_,p){typeof exports=="object"&&typeof module<"u"?module.exports=p():typeof define=="function"&&define.amd?define(p):(_=typeof globalThis<"u"?globalThis:_||self,_["roomle-embedding-lib"]=_["roomle-embedding-lib"]||{},_["roomle-embedding-lib"].umd=_["roomle-embedding-lib"].umd||{},_["roomle-embedding-lib"].umd.js=p())})(this,function(){"use strict";var te=Object.defineProperty;var ee=(_,p,E)=>p in _?te(_,p,{enumerable:!0,configurable:!0,writable:!0,value:E}):_[p]=E;var c=(_,p,E)=>ee(_,typeof p!="symbol"?p+"":p,E);class _{constructor(e,t,s,n){c(this,"_side");c(this,"_incomingMessageBus",null);c(this,"_outgoingMessageBus",null);c(this,"_execMessage",null);this._side=e,this._incomingMessageBus=t,this._outgoingMessageBus=s,this._execMessage=n,this._incomingMessageBus&&this._incomingMessageBus.addEventListener("message",this._handleMessage.bind(this))}setOutgoingMessageBus(e){this._outgoingMessageBus=e}setMessageExecution(e){this._execMessage=e}sendMessage(e,t=[]){return new Promise((s,n)=>{if(this._incomingMessageBus===this._outgoingMessageBus)return s(void 0);const i=new MessageChannel;i.port1.onmessage=a=>{if(!a||!a.data)return i.port1.close(),i.port2.close(),n(new Error(this._side+" received message but response can not be interpreted"));let l;try{l=JSON.parse(a.data)}catch(d){return i.port1.close(),i.port2.close(),this._prepareError(d),n(d)}l.error?n(l.error):l.result!==void 0?s(l.result):s(void 0),i.port1.close(),i.port2.close()};let o="";try{o=JSON.stringify({message:e,args:t})}catch{return n(new Error(this._side+": can not create command because it is not JSON.stringify able"))}if(!this._outgoingMessageBus)return n(new Error(this._side+": outgoing bus not set yet"));this._outgoingMessageBus.postMessage(o,"*",[i.port2])})}_handleMessage(e){const t=e.ports&&Array.isArray(e.ports)&&e.ports.length>0?e.ports[0]:null;if(e.data&&t)try{const s=JSON.parse(e.data);if(!this._execMessage)return t.postMessage(JSON.stringify({error:this._side+" is not ready to handle messages"}));Array.isArray(s.args)||(s.args=[s.args]);const n=this._execMessage(s,e);if(n===void 0)return;n.then((i={})=>{let o,a;typeof i=="object"&&i!==null&&(o=i.error,a=i.result),o?t.postMessage(JSON.stringify({error:o})):a!==void 0?t.postMessage(JSON.stringify({result:a})):t.postMessage(JSON.stringify({result:i}))},i=>{t.postMessage(JSON.stringify({error:this._prepareError(i)}))})}catch(s){t.postMessage(JSON.stringify({error:this._prepareError(s)}))}}_prepareError(e){if(typeof e=="string"){const t=this._side+": "+e;return console.error(t),t}return e.message=this._side+": "+e.message,console.error(e),e.message}}const p=".",E={REQUEST_BOOT:"requestBoot",SETUP:"setup",WEBSITE_READY:"websiteReady"},w={GET_METHODS:"getMethods",RETURN_METHODS:"returnMethods",REGISTER_CUSTOM_VIEW:"registerCustomView",REGISTER_CUSTOM_VIEW_DONE:"registerCustomViewDone"},pt=async(r,e)=>{if(typeof r!="string")throw new Error('Configurator ID is not a string type: "'+typeof r+'"');const t=e.customApiUrl?e.customApiUrl:"https://api.roomle.com/v2",s=e.overrideTenant||9,n=t+"/configurators/"+r,i="roomle_portal_v2",o="03-"+window.btoa(new Date().toISOString()+";anonymous;"+i),a=()=>{const u={apiKey:i,currentTenant:s,locale:"en",language:"en",device:1,token:o,platform:"web"};return new Headers(u)},l=new Request(n,{method:"GET",headers:a(),mode:"cors",cache:"default"}),d=await fetch(l),{configurator:h}=await d.json();return h},yt=()=>{try{return window.self!==window.top}catch{return!0}},Et=["127.0.0.1","localhost","0.0.0.0"],Dt=()=>{const r=yt();let e=window.location.href;if(r){if(!document.referrer)return null;e=document.referrer}const{hostname:t}=new URL(e);return t},Tt=r=>!!(Et.includes(r)||r.endsWith("roomle.com")||r.endsWith("gitlab.io")||r.endsWith("gitlab.com")),k=["language","browserLanguage","userLanguage","systemLanguage"],St=(r=null)=>{const e=window.navigator;if(r)return r.substr(0,2);if(Array.isArray(e.languages)&&e.languages.length>0)return e.languages[0].substr(0,2);for(let t=0,s=k.length;t<s;t++){const n=e[k[t]];if(n)return n.substr(0,2)}return"en"},It=(r,e)=>{const t=JSON.parse(JSON.stringify(r));return L(t,e)},L=(r,e)=>{for(const t in e)try{e[t].constructor===Object?r[t]=L(r[t],e[t]):r[t]=e[t]}catch{r[t]=e[t]}return r};var z=(r=>(r.BOTTOM_BAR="bottom_bar",r.PARTLIST_BOUNDS="partlist_bounds",r.INTERACTION_NOTES="interaction_notes",r))(z||{}),wt={BASE_URL:"/",DEV:!1,MODE:"production",PROD:!0,SSR:!1};const At={mobileLandscape:!0,floorMaterialRootTag:"materials_root",buttons:{renderimage:!0,requestproduct:!0,requestplan:!0,load_product:!0,partlist_print:!0},elements:{[z.INTERACTION_NOTES]:!1},helpcenter:{roomdesigner:!0,configurator:!1,disable:!1},firstPersonView:!0,saveToIdb:!0,featureFlags:{mocAr:!0,wallAutoHeight:!1},rotationSnapDegrees:10},bt="(idle)",Ot=r=>(C(r),r!=null&&r.customApiUrl&&(r.customApiUrl=decodeURIComponent(r.customApiUrl)),r.shareUrl&&(r.deeplink=r.shareUrl.replace(Mt,Lt)),r),C=r=>{if(!r)return;const e=Object.keys(r);for(const t of e){const s=r[t];if(!Array.isArray(s)&&typeof s=="object"&&s!==null&&C(s),Array.isArray(s))for(const n of s)C(n);(s==="true"||s==="false")&&(r[t]=s==="true")}},vt=(r,e)=>{e.configuratorId=r.id;const t=r.settings||{};return!e.overrideTenant&&r.tenant&&(e.overrideTenant=r.tenant),It(t,e)},Rt=()=>{const r={...At};r.locale||(r.locale=St()),r.id===bt&&delete r.id;const e=Dt();return e&&Tt(e)&&(r.configuratorId="demoConfigurator"),r.customApiUrl=wt.VITE_RAPI_URL,r.emails=!1,r},Mt="<CONF_ID>",Lt="#CONFIGURATIONID#",Ct=r=>{r.featureFlags||(r.featureFlags={}),typeof r.featureFlags.realPartList!="boolean"&&(r.featureFlags.realPartList=!0),typeof r.featureFlags.globalCallbacks!="boolean"&&(r.featureFlags.globalCallbacks=!0),typeof r.featureFlags.mocAr!="boolean"&&(r.featureFlags.mocAr=!1)},V=()=>/(android)/i.test(navigator.userAgent);class q{constructor(){c(this,"_messageHandler",null);c(this,"isSetupDone",!1);c(this,"viewName","main");c(this,"plugins",{});c(this,"pluginsLoaded",[]);c(this,"ui",{callbacks:null});c(this,"extended",{callbacks:null});c(this,"configurator",{callbacks:null});c(this,"analytics",{callbacks:{}});c(this,"global",{callbacks:{}})}setMessageHandler(e){this._messageHandler=e}handleSetup(e){const{methods:t,callbacks:s}=e;t.forEach(n=>{const i=n.split(p),o=i[0],a=i[1];this[o]||(this[o]={}),this[o][a]=(function(){if(!this._messageHandler){console.error("MessageHandler not set");return}return this._messageHandler.sendMessage(n,[...arguments])}).bind(this)}),s.forEach(n=>{const i=n.split(p),o=i[0],a=i[1],l=i[2];this[o]||(this[o]={}),this[o][a]||(this[o][a]={}),this[o][a][l]=()=>{}}),this.isSetupDone=!0}executeMessage({message:e,args:t}){const s=e.split(p),n=s[0],i=s[1],o=s.length===3?s[2]:null;if(o&&this[n][i][o]){const a=this[n][i][o](...t);return a instanceof Promise?a.then(l=>({result:l})):a!==void 0?Promise.resolve({result:a}):Promise.resolve({result:null})}return Promise.reject('Message "'+e+'" is unkown')}setupPlugins(e,t,s="website"){for(const n of e)typeof n=="string"&&n==="dragIn"?this.pluginsLoaded.push(new Promise((i,o)=>{try{Promise.resolve().then(()=>Pt).then(({DragIn:a})=>{const l=new a(this.ui,t,s,this.viewName);l.init().then(()=>{this.plugins.dragIn=l,i()},o)})}catch(a){o(a)}})):n.name&&n.loader&&this.pluginsLoaded.push(new Promise((i,o)=>{try{n.loader().then(a=>{const l=new a(this.ui,t,s,this.viewName);l.init().then(()=>{this.plugins[n.name]=l,i()},o)})}catch(a){o(a)}}))}}const K=()=>{let r,e;return{promise:new Promise((s,n)=>{r=s,e=n}),resolve:r,reject:e}},J=(r,e,t)=>{let s=null;Object.defineProperty(r,e,{get(){return s||t},set(n){n!=null&&n.mute?s=n.value:(console.warn("You override Roomle defined behaviour. To disalbe this warning pass in an object with the following properties"),console.warn("{ mute: true, value: () => void }"),s=n)}})},j=()=>window.innerHeight*.01+"px",Q=r=>{r&&setTimeout(()=>r.style.setProperty(N,j()),0)},Z="rml-styles",Nt=450,N="--rml-full-height",m={CONTAINER:"rml-container",FILL:"rml-fill",POSITION:"rml-pos",TRANSITION:"rml-transition",ANDROID_HEIGHT:"rml-android-height",OVERFLOW_HIDDEN:"rml-overflow-hidden"},x=new Map;class xt extends q{constructor(t,s,n,i,o){super();c(this,"_waitForIframe");c(this,"_container");c(this,"_configuratorSettings");c(this,"_initData",{});c(this,"_iframe");if(!t||typeof t.id!="string")throw new Error("Please provide a correct configuratorId, you get the correct ID from your Roomle Contact Person");if(x.has(s))throw new Error("There is already an instance on this DOM element");if(!!!document.getElementById(Z)){const h=n.zIndex||9999999,u=document.createElement("style");u.type="text/css",u.id=Z;const g="transition:all ease-in-out "+Nt+"ms;",f=["-webkit-","-o-"].reduce((D,y)=>D+=y+g,"")+g,S=j();u.innerHTML=`
|
|
2
|
+
.${m.CONTAINER}{${N}:${S};}
|
|
3
3
|
.${m.POSITION}{position:fixed;top:0;left:0;z-index:${h};opacity:0}
|
|
4
4
|
.${m.TRANSITION}{${f}}
|
|
5
5
|
.${m.FILL}{width:100%;height:100%;opacity:1}
|
|
6
6
|
.${m.ANDROID_HEIGHT}{height:calc(var(${N},1vh)*100)}
|
|
7
7
|
.${m.OVERFLOW_HIDDEN}{overflow:hidden}
|
|
8
|
-
`,document.head.appendChild(u)}this._executeMessage=this._executeMessage.bind(this);const
|
|
8
|
+
`,document.head.appendChild(u)}this._executeMessage=this._executeMessage.bind(this);const l=new _("website",window,null,this._executeMessage);this.setMessageHandler(l),this._onResize=this._onResize.bind(this),V()&&window.addEventListener("resize",this._onResize),this._container=s,this._initData=n,this._configuratorSettings=t;const d=this._createIframe();this._onUseFullPage=this._onUseFullPage.bind(this),this._onBackToWebsite=this._onBackToWebsite.bind(this),this._waitForIframe=o,this._container.appendChild(d),this._iframe=d,this.setupPlugins(i,this._iframe),x.set(s,!0)}static createPlanner(t,s,n,i=[]){return this._create(t,s,n,i)}static async connect(t,s=[]){const n=new q;n.viewName=t;const{resolve:i,promise:o}=K(),{resolve:a,promise:l}=K(),d=({message:g,args:f})=>{switch(g){case w.REGISTER_CUSTOM_VIEW_DONE:i();break;case w.RETURN_METHODS:n.handleSetup(f[0]),a();break;default:if(n.isSetupDone)return n.executeMessage({message:g,args:f})}},h=new _("custom-view-"+t,window,window.parent,d);n.setMessageHandler(h);const u=[t];return h.sendMessage(w.REGISTER_CUSTOM_VIEW,u),await o,h.sendMessage(w.GET_METHODS,u),await l,n.setupPlugins(s,document.body,"custom-view"),await Promise.allSettled(n.pluginsLoaded),n}static createConfigurator(t,s,n,i=[]){return this._create(t,s,n,i)}static create(t,s,n,i){return this._create(t,s,n,i)}static createViewer(t,s,n,i=[]){return this._create(t,s,n,i)}static async _create(t,s,n,i){return new Promise(async(o,a)=>{try{const l=L(Rt(),Ot(n));Ct(l);const d=await pt(t,l);n=vt(d,l);const h=new this(d,s,n,i,o);return await Promise.allSettled(h.pluginsLoaded),h}catch(l){return a(l)}})}teardown(){this._container&&x.delete(this._container);const t=this._container.querySelector("iframe");t&&this._container.removeChild(t),window.removeEventListener("resize",this._onResize)}_createIframe(){var n;const t=document.createElement("iframe");let s=((n=this._configuratorSettings)==null?void 0:n.url)||"https://www.roomle.com/t/cp/";return this._initData.useLocalRoomle&&(s=location.href.replace("embedding.html","")),location.href.includes("roomle.gitlab.io")&&(s=location.href.replace("embedding.html","index.html")),this._initData.overrideServerUrl&&(s=this._initData.overrideServerUrl),t.src=s,t.classList.add(m.CONTAINER),t.classList.add(m.FILL),t}_onResize(){Q(this._iframe)}_onUseFullPage(){this._iframe.classList.add(m.POSITION),document.documentElement.classList.add(m.OVERFLOW_HIDDEN),window.document.body.classList.add(m.OVERFLOW_HIDDEN),V()&&(Q(this._iframe),this._iframe.classList.add(m.ANDROID_HEIGHT))}_onBackToWebsite(){this._iframe.classList.remove(m.POSITION),this._iframe.classList.remove(m.ANDROID_HEIGHT),document.documentElement.classList.remove(m.OVERFLOW_HIDDEN),window.document.body.classList.remove(m.OVERFLOW_HIDDEN)}_executeMessage({message:t,args:s},n){var i;if(n.source&&n.source===((i=this._iframe)==null?void 0:i.contentWindow))return t===E.REQUEST_BOOT?this._messageHandler?(this._messageHandler.setOutgoingMessageBus(n.source),Promise.resolve({result:this._initData})):(console.error("MessageHandler not set"),Promise.resolve({error:"MessageHandler not set"})):t===E.SETUP?(this.handleSetup(s[0]),J(this.ui.callbacks,"onUseFullPage",this._onUseFullPage),J(this.ui.callbacks,"onBackToWebsite",this._onBackToWebsite),this._waitForIframe(this),setTimeout(()=>{if(!this._messageHandler){console.error("MessageHandler not set");return}this._messageHandler.sendMessage(E.WEBSITE_READY)},0),Promise.resolve({result:null})):this.executeMessage({message:t,args:s})}}class Gt{constructor(e,t,s,n){c(this,"_mainDomElement");c(this,"_instance");c(this,"_mode","website");c(this,"_viewName","main");this._instance=e,this._mainDomElement=t,this._mode=s,this._viewName=n}async init(){return Promise.resolve()}}const A="rml-drag-in-styles",b="rml-drag-in-drag-element",O="rml-drag-in-overlay",v="rml-drag-in-drag-ghost",tt="rml-drag-in-fade-in",et="rml-drag-in-fade-out",G={DISPLAY_NONE:"rml-display-none"},st=.5,rt="250ms",nt="forwards",it=`@keyframes ${tt} {from{opacity: 0;}to {opacity: ${st};}}`,ot=`@keyframes ${et} {from{opacity: ${st};}to {opacity: 0;}}`,at=`${tt} ${rt} ${nt}`,ct=`${et} ${rt} ${nt}`,R="https://res.cloudinary.com/roomle/image/upload/v1729679975/fallback_afpyqr.jpg",F=112,P=112;class Ft extends Gt{constructor(t,s,n,i){super(t,s,n,i);c(this,"options",{});c(this,"_customDragSignal",new AbortController);this._mainDomElement=s,this._injectStyles(),this._initializeDragGhost()}_injectStyles(){if(!!!document.getElementById(A)){const s=document.createElement("style");s.type="text/css",s.id=A,s.innerHTML=`
|
|
9
9
|
.${G.DISPLAY_NONE}{display:none}
|
|
10
10
|
.${O}{position:absolute;top:0;left:0;width:100%;height:100%;z-index:999;}
|
|
11
11
|
.${v}{position:absolute;top:0;left:0;width:1px;height:1px;z-index:999;pointer-events:none;background-color:transparent;}
|
|
12
|
-
${nt}
|
|
13
12
|
${it}
|
|
14
|
-
|
|
15
|
-
|
|
13
|
+
${ot}
|
|
14
|
+
`,document.head.appendChild(s)}}_initializeDragGhost(){const t=this._mainDomElement.parentNode;let s=t.querySelector("."+v);s||(s=document.createElement("div"),s.classList.add(v),s.innerText=" ",t.appendChild(s))}async init(){if(await super.init(),this._mode==="website")try{const{DragInFromWebsiteStrategy:t}=await Promise.resolve().then(()=>zt);this._strategy=new t(this._instance,this._mainDomElement,{settings:this.options,mode:"website"})}catch(t){throw console.error('Could not load Dragin strategy "FromWebsite"'),t}else if(this._mode==="custom-view")try{const{DragInFromCustomViewStrategy:t}=await Promise.resolve().then(()=>Zt);this._strategy=new t(this._instance,this.options,this._viewName)}catch(t){throw console.error('Could not load Dragin strategy "FromCustomView"'),t}else throw new Error("Unsupported mode")}get isDragging(){return this._strategy.isDragging}dragStart(t,s,n="rml_id"){this._strategy.dragStart(t,s,n)}dragUpdate(t){this._strategy.dragUpdate(t)}dragEnd(){this._strategy.dragEnd()}touchStart(t,s,n="rml_id"){this._strategy.touchStart(t,s,n)}touchMove(t){this._strategy.touchMove(t)}touchEnd(){this._strategy.touchEnd()}dispose(){this._strategy.dispose()}beforeUpdateGhost(t){this._strategy.beforeUpdateGhost(t)}registerCustomDrag({customDragStart:t,customDragEnd:s,customDragUpdate:n,beforeUpdateGhost:i}){i&&this._strategy.beforeUpdateGhost(i);const o=this._customDragSignal.signal,a=h=>{h.target.getAttribute("data-rml-draggable")==="true"&&t(h)},l=h=>{this._strategy.releaseInput(h),this._strategy.isDragging&&s(h)},d=h=>{n(h)};document.querySelectorAll('[data-rml-draggable="true"]').forEach(h=>{h.draggable=!1}),document.addEventListener("mousedown",a,{signal:o}),document.addEventListener("mouseup",l,{signal:o}),document.addEventListener("mousemove",d,{signal:o}),document.addEventListener("mouseleave",l,{signal:o}),document.addEventListener("touchstart",a,{signal:o}),document.addEventListener("touchend",l,{signal:o}),document.addEventListener("touchmove",d,{signal:o})}unregisterCustomDrag(){this._customDragSignal.abort(),this._customDragSignal=new AbortController}releaseInput(t){this._strategy.releaseInput(t)}}const Pt=Object.freeze(Object.defineProperty({__proto__:null,DragIn:Ft},Symbol.toStringTag,{value:"Module"}));class Ht{constructor(e=16){c(this,"_computedStyleCache",new Map);c(this,"_maxLifetime",16);c(this,"_cacheCleanInterval",null);this._maxLifetime=e}get(e){const t=this._computedStyleCache.get(e),s=Date.now();if(t&&s-t.updated<this._maxLifetime)return t.style;const n=getComputedStyle(e);return this._computedStyleCache.set(e,{style:n,updated:s}),this._cacheCleanInterval||(this._cacheCleanInterval=setInterval(()=>this._cleanUpCache,Math.max(this._maxLifetime*1e3,5e3))),n}_cleanUpCache(){const e=Date.now();for(const[t,{updated:s}]of this._computedStyleCache.entries())e-s>=this._maxLifetime&&this._computedStyleCache.delete(t);this._computedStyleCache.size===0&&this._cacheCleanInterval&&(clearInterval(this._cacheCleanInterval),this._cacheCleanInterval=null)}}const T=r=>window.TouchEvent&&r instanceof window.TouchEvent;let H;const M=r=>(H||(H=new Ht),H.get(r)),lt=(r,e,t)=>{const s=parseFloat(r),n=window.devicePixelRatio||1;if(e==="px")return s;if(e==="%"){const o=t===document.documentElement?window.innerWidth:t.offsetWidth;return s/100*o}if(e==="rem"){const o=parseFloat(M(document.documentElement).fontSize);return s*o}if(e==="em"){const o=parseFloat(M(t).fontSize);return s*o}if(e==="vh"||e==="vw"||e==="vmin"||e==="vmax"){const o={vh:window.innerHeight,vw:window.innerWidth,vmin:Math.min(window.innerWidth,window.innerHeight),vmax:Math.max(window.innerWidth,window.innerHeight)};return s/100*o[e]}const i={cm:37.7952755906,mm:3.77952755906,in:96};return e in i?s*i[e]*n:(console.warn("Unable to determine coordinates for drag-in. Therefore drag-in is not possible. Check the CSS that positions the iframe of Roomle"),0)},ht=(r,e,t={x:0,y:0})=>{const s=r.getBoundingClientRect(),i=M(r).transform;let o=0,a=0;if(i!=="none"){const g=/translate\(\s*([-+]?\d*\.?\d+|\d+)(px|%)?,?\s*([-+]?\d*\.?\d+|\d+)?(px|%)?\s*\)/,f=i.match(g);f&&(o=lt(f[1],f[2],r),a=lt(f[3],f[4],r))}const{clientX:l,clientY:d}=I(e,t),h=l-s.left-o+r.scrollLeft,u=d-s.top-a+r.scrollTop;return{x:h,y:u}},I=(r,e=null)=>{const{clientX:t,clientY:s}=T(r)?Ut(r):r,n=t>0?t:e?e.x:t,i=s>0?s:e?e.y:s;return{clientX:n,clientY:i}},Ut=r=>{if(r.touches.length){let{clientX:t,clientY:s}=r.touches[0];if(r.touches.length>1){const n=r.touches[1],i=n.clientX,o=n.clientY;t=(t+i)/2,s=(s+o)/2}return{clientX:t,clientY:s}}const e=r.changedTouches[0];return{clientX:e.clientX,clientY:e.clientY}},U=500,B=10,Bt=100,dt=15,Y=(r,e=0)=>T(r)?{clientX:r.touches[e].clientX,clientY:r.touches[e].clientY}:{clientX:r.clientX,clientY:r.clientY},ut=r=>r&&T(r)?r.touches.length>0:!0;class gt{constructor(e,{onTouchDragStart:t},s={}){c(this,"_touchDragTimeOut");c(this,"_onTouchDragStart");c(this,"_payload",null);c(this,"_delay",U);c(this,"_firstTouch",null);c(this,"_lastTouch",null);c(this,"_epsilon",B);this._payload=e,this._onTouchDragStart=t,this._delay=typeof s.delay=="number"?s.delay:U,this._epsilon=typeof s.epsilon=="number"?s.epsilon:B}onStart(e){ut(e)&&(this._touchDragTimeOut||(this._firstTouch=Y(e,T(e)?e.touches.length-1:0),this._touchDragTimeOut=setTimeout(()=>{this._clearTimeout(),this._lastTouch||(this._lastTouch=Y(e)),this._checkXDistance(e)()},this._delay)))}onEnd(){this._resetTouches()}onMove(e){ut(e)&&(this._lastTouch=Y(e))}_clearTimeout(){this._touchDragTimeOut&&(clearTimeout(this._touchDragTimeOut),this._touchDragTimeOut=null)}_resetTouches(){this._clearTimeout(),this._lastTouch=null,this._firstTouch=null,this._payload=null}_checkXDistance(e){return()=>{if(!this._firstTouch||!this._lastTouch)return;let t=!1;t=Math.abs(this._firstTouch.clientX-this._lastTouch.clientX)<this._epsilon,t&&(this._onTouchDragStart(this._payload,e),this._resetTouches())}}}const _t=(r,e,t=0,s=0)=>{const n=e.x+e.width+t,i=e.x-t,o=e.y+e.height+s,a=e.y-s,{x:l,y:d}=r;return l>=i&&l<=n&&d>=a&&d<=o},mt=(r,e,t,s=0,n=0)=>{if(!(!t||!t.hiddenIn&&!t.visibleIn))return t.visibleIn?_t({x:r,y:e},t.visibleIn,s,n):t.hiddenIn?!_t({x:r,y:e},t.hiddenIn,-s,-n):!1},Yt=()=>{if(!!!document.getElementById(A)){const e=document.createElement("style");e.type="text/css",e.id=A,e.innerHTML=`
|
|
16
15
|
${it}
|
|
17
|
-
`,document.head.appendChild(e)}},Bt=({x:n,y:e},t)=>{var r,i,o,c,a,d;let s=document.getElementById(A);if(!s){if(s=document.createElement("div"),(r=t.ghost)!=null&&r.element)s.appendChild(t.ghost.element);else{const h=document.createElement("img");h.src=((i=t.ghost)==null?void 0:i.url)||M,h.width=((o=t.ghost)==null?void 0:o.width)||F,h.height=((c=t.ghost)==null?void 0:c.height)||P,s.appendChild(h)}s.id=A,s.style.position="fixed",s.style.top="0",s.style.left="0",s.style.willChange="transform",s.style.transform="translate3d(0, 0, 0)",s.style.zIndex="9999",s.style.opacity="0.5",_t(n,e,t.ghost||{},(a=t.settings)==null?void 0:a.dragInOverlapX,(d=t.settings)==null?void 0:d.dragInOverlapY)||(s.style.display="none"),s.style.pointerEvents="none",document.body.appendChild(s)}},Yt=({x:n,y:e},t)=>{var a,d,h,u;const s=document.getElementById(A);if(!s)return;let r=(a=t.ghost)==null?void 0:a.width,i=(d=t.ghost)==null?void 0:d.height;typeof r>"u"&&(r=s.getBoundingClientRect().width||F),typeof i>"u"&&(i=s.getBoundingClientRect().height||P);const o=n-r/2,c=e-i/2;s.style.transform=`translate3d(${o}px, ${c}px, 0)`,t.ghost&&(_t(n,e,t.ghost,(h=t.settings)==null?void 0:h.dragInOverlapX,(u=t.settings)==null?void 0:u.dragInOverlapY)?s.style.animation!=ot&&(s.style.animation=ot):s.style.animation!=at&&(s.style.animation=at))};class Xt{constructor(e=null){l(this,"_dragGhostAnimationFrameId",null);l(this,"_dragGhostRemoveAnimationFrameId",null);l(this,"_dragGhostElement",null);this._dragGhostElement=e}updateDragGhost(e,t,s){var r;this._dragGhostRemoveAnimationFrameId&&(cancelAnimationFrame(this._dragGhostRemoveAnimationFrameId),this._dragGhostRemoveAnimationFrameId=null),!((r=s.ghost)!=null&&r.external)&&s.ghost&&(this._dragGhostAnimationFrameId||(this._dragGhostAnimationFrameId=requestAnimationFrame(()=>{Ut();const i={x:e,y:t};!s.ghost&&this._dragGhostElement&&(s.ghost={}),s.ghost&&!s.ghost.element&&this._dragGhostElement&&(s.ghost.element=this._dragGhostElement),Bt(i,s),Yt(i,s),this._dragGhostAnimationFrameId=null})))}removeDragGhost(){this._dragGhostAnimationFrameId&&(cancelAnimationFrame(this._dragGhostAnimationFrameId),this._dragGhostAnimationFrameId=null),this._dragGhostRemoveAnimationFrameId||(this._dragGhostRemoveAnimationFrameId=requestAnimationFrame(()=>{const e=document.getElementById(A);e&&document.body.removeChild(e),this._dragGhostRemoveAnimationFrameId=null}))}}class Wt{constructor(e,t,s){l(this,"_options",{});l(this,"_instance");l(this,"_mainDomElement");l(this,"_currentDrag",{});l(this,"_currentTouch",null);l(this,"_firefoxDragPosition",{x:0,y:0});l(this,"_onBeforeUpdateDrag",()=>({}));l(this,"isDragging",!1);l(this,"_firefoxFallback",e=>{if(!this._currentDrag.event)return;const t=e||window.event;this._firefoxDragPosition.x=t.pageX||0,this._firefoxDragPosition.y=t.pageY||0});this._instance=e,this._mainDomElement=t,this._options=s||{},this._firefoxFallback=this._firefoxFallback.bind(this),document.addEventListener("dragover",this._firefoxFallback)}beforeUpdateGhost(e){this._onBeforeUpdateDrag=e}dragStart(e,t,s="rml_id"){const r=this._mainDomElement.parentNode;if(R(r).position!=="relative"){console.warn("Parent of iframe should have position relative, otherwise drag-in can not detect the x/y coordinates correctly");return}this._mainDomElement.style.pointerEvents="none";let o=r.querySelector("."+O);o||(o=document.createElement("div"),o.classList.add(O),r.appendChild(o)),o.classList.remove(G.DISPLAY_NONE),t.target.getAttribute("draggable")||console.warn(`Draggable not detected correctly! Did you add draggable="true" to the element? In Sarafi only 'draggable' is too less`);const a=r.querySelector("."+v);this._currentDrag.event=t;const d=t.target,h=d.cloneNode(),u=d.getBoundingClientRect();h.style.width=`${u.width}px`,h.style.height=`${u.height}px`,this._currentDrag.ghost=new Xt(h),this._currentDrag.offset||(this._currentDrag.offset={x:0,y:0});const{clientX:g,clientY:f}=I(t,this._firefoxDragPosition);this._currentDrag.offset.x=g-u.left,this._currentDrag.offset.y=f-u.top,t instanceof DragEvent&&t.dataTransfer&&t.dataTransfer.setDragImage&&t.dataTransfer.setDragImage(a,0,0);const{x:T,y:E}=lt(r,this._currentDrag.event||t,this._firefoxDragPosition),y=Math.max(1,T),k=Math.max(1,E);this.isDragging=!0,this._instance.dragInObject(e,y,k,s)}dragUpdate(e){var E;const t=this._mainDomElement.parentNode,{x:s,y:r}=lt(t,e,this._firefoxDragPosition);if(s===0&&r===0)return;const i=Math.max(1,s),o=Math.max(1,r);if(i===1&&o===1)return;let c=i,a=o;if(S(e)){const y=((E=this._options.settings)==null?void 0:E.fingerSize)||0;c=Math.max(2,i+y),a=Math.max(2,o-y)}const{x:d,y:h,options:u}=this._onBeforeUpdateDrag(c,a,{}),g=u||{settings:{},ghost:{}};g.ghost||(g.ghost={}),g.ghost.visibleIn&&g.ghost.hiddenIn||(g.ghost.hiddenIn=this._mainDomElement.getBoundingClientRect());const f=typeof d=="number"?d:c,T=typeof h=="number"?h:a;if(this._currentDrag.ghost){const{clientX:y,clientY:k}=I(e,this._firefoxDragPosition);this._currentDrag.ghost.updateDragGhost(y,k,g)}this._instance.updateDrag(f,T,{})}dragEnd(){this._mainDomElement.style.pointerEvents="all";const e=this._mainDomElement.parentNode;this.isDragging=!1,this._instance.dragInObjectEnd(),this._currentDrag.ghost&&(this._currentDrag.ghost.removeDragGhost(),this._currentDrag.ghost=null),this._currentDrag={},this._firefoxDragPosition={x:0,y:0};const t=e.querySelector("."+O);t&&t.classList.add(G.DISPLAY_NONE)}touchStart(e,t,s="rml_id"){var o,c,a,d;t.preventDefault();const r=(h,u)=>{this.dragStart(e,u,s)},i={};typeof((c=(o=this._options)==null?void 0:o.settings)==null?void 0:c.touchDragDelay)=="number"&&(i.delay=this._options.settings.touchDragDelay),(d=(a=this._options)==null?void 0:a.settings)!=null&&d.touchDragEpsilon&&(i.epsilon=this._options.settings.touchDragEpsilon),this._currentTouch=new ut(void 0,{onTouchDragStart:r},i),this._currentTouch.onStart(t)}touchMove(e){this._currentTouch&&this._currentTouch.onMove(e),this._currentDrag.event&&this.dragUpdate(e)}touchEnd(){this._currentTouch&&this._currentTouch.onEnd(),this._currentTouch=null,this.dragEnd()}dispose(){document.removeEventListener("dragover",this._firefoxFallback)}releaseInput(e){}}const kt=Object.freeze(Object.defineProperty({__proto__:null,DragInFromWebsiteStrategy:Wt},Symbol.toStringTag,{value:"Module"})),$t=n=>`[data-rml-custom-view="${n}"]`,X=n=>{n.preventDefault(),n.stopPropagation()},zt=(n,e,t,s)=>{const r=t-n,i=s-e;return Math.sqrt(r*r+i*i)};class Vt{constructor({onCustomDragStart:e},t={}){l(this,"_startX",0);l(this,"_startY",0);l(this,"_lastX",0);l(this,"_lastY",0);l(this,"_epsilon");l(this,"_isWaiting",!1);l(this,"_onCustomDragStart");this._epsilon=typeof t.epsilon=="number"?t.epsilon:ht,this._onCustomDragStart=e}onMove(e){this._lastX=e.clientX,this._lastY=e.clientY,this._isWaiting&&zt(this._startX,this._startY,this._lastX,this._lastY)>this._epsilon&&(this._onCustomDragStart(e),this._isWaiting=!1)}onStart(e){this._startX=e.clientX,this._startY=e.clientY,this.onMove(e),this._isWaiting=!0}onEnd(){this._reset()}_reset(){this._startX=0,this._startY=0,this._lastX=0,this._lastY=0,this._isWaiting=!1}}const W="data-rml-old-draggable",qt=void 0,mt=(n,e)=>{const t=S(n),s={delay:t?U:Ht,epsilon:t?B:ht};if(!e)return s;if(!t&&!(n instanceof MouseEvent))return console.warn("Unsupported event! It is not TouchEvent and also not MouseEvent"),s;const{delayKey:r,epsilonKey:i}=t?{delayKey:"touchDragDelay",epsilonKey:"touchDragEpsilon"}:{delayKey:"customDragDelay",epsilonKey:"customDragEpsilon"};return typeof e[r]=="number"&&(s.delay=e.touchDragDelay),typeof e[i]=="number"&&(s.epsilon=e.touchDragEpsilon),s},Kt=n=>{let e="",t=F,s=P;if(!n)return{url:M,width:t,height:s};const r=n;if(r instanceof HTMLElement){const i=r.getBoundingClientRect(),o=r.getAttribute("data-rml-ghost-url"),c=r.getAttribute("data-rml-ghost-width"),a=r.getAttribute("data-rml-ghost-height");o?e=o:!o&&r instanceof HTMLImageElement&&r.src&&(e=r.src),e?(t=i.width,s=i.height):e=M,t=c?parseInt(c,10):t,s=a?parseInt(a,10):s}return{url:e||M,width:t,height:s}};class Jt{constructor(e,t,s){l(this,"_options",{});l(this,"_instance");l(this,"_viewName");l(this,"_currentCustomDrag",null);l(this,"_currentBb",null);l(this,"_startTarget",null);l(this,"_onBeforeUpdateDrag",()=>({}));l(this,"isDragging",!1);this._instance=e,this._options=t||{},this._viewName=s}beforeUpdateGhost(e){this._onBeforeUpdateDrag=e}async _dragStart(e,t,s="rml_id"){this._startTarget&&(this._startTarget.style.pointerEvents="none",this._startTarget.style.userSelect="none",this._startTarget.setAttribute(W,this._startTarget.draggable.toString()),this._startTarget.draggable=!1,this._startTarget.removeEventListener("dragstart",X),this._startTarget.addEventListener("dragstart",X)),this._currentBb=await this._instance.getBoundingClientRect($t(this._viewName));const{clientX:r,clientY:i}=I(t),o=this._currentBb.x+r,c=this._currentBb.y+i;this.isDragging=!0,this._instance.dragInObject(e,o,c,s)}_dragUpdate(e){if(document.body.focus(),this._currentCustomDrag&&this._currentCustomDrag.onMove(e),!this._currentBb||!this.isDragging)return;const{clientX:t,clientY:s}=I(e),{url:r,width:i,height:o}=Kt(this._startTarget),c=this._currentBb.x+t,a=this._currentBb.y+s,d=this._options||{},h={ghost:{visibleIn:{x:this._currentBb.x-(d.dragInOverlapX||0),y:this._currentBb.y+(d.dragInOverlapY||0),width:this._currentBb.width+(d.dragInOverlapX||0),height:this._currentBb.height+(d.dragInOverlapY||0)},url:r,width:i,height:o},mode:"custom-view"},{x:u,y:g,options:f}=this._onBeforeUpdateDrag(c,a,h),T=typeof u=="number"?u:c,E=typeof g=="number"?g:a,y=f||h;this._instance.updateDrag(T,E,y)}_dragEnd(){this._currentCustomDrag&&this._currentCustomDrag.onEnd(),this._currentCustomDrag=null,this.isDragging=!1,this._currentBb=null,this._resetStartTarget(),this._instance.enableEvents(),this._instance.dragInObjectEnd()}dragStart(e,t,s){this._instance.disableEvents(),this._startTarget=t.target;const r=(i,o)=>{this._dragStart(e,o,s)};this._currentCustomDrag=S(t)?new ut(qt,{onTouchDragStart:r},mt(t,this._options)):new Vt({onCustomDragStart:i=>this._dragStart(e,i,s)},mt(t,this._options)),this._currentCustomDrag.onStart(t)}dragEnd(){this._dragEnd()}dragUpdate(e){this._dragUpdate(e)}touchStart(e,t,s="rml_id"){this.dragStart(e,t,s)}touchMove(e){this.dragUpdate(e)}touchEnd(){this.dragEnd()}dispose(){}_resetStartTarget(){this._startTarget&&(this._startTarget.style.pointerEvents="",this._startTarget.style.userSelect="",this._startTarget.draggable=this._startTarget.getAttribute(W)==="true",this._startTarget.removeAttribute(W),this._startTarget.removeEventListener("dragstart",X))}releaseInput(e){this._currentCustomDrag&&this._currentCustomDrag.onEnd(),this._resetStartTarget()}}const jt=Object.freeze(Object.defineProperty({__proto__:null,DragInFromCustomViewStrategy:Jt},Symbol.toStringTag,{value:"Module"}));return Ct});
|
|
16
|
+
${ot}
|
|
17
|
+
`,document.head.appendChild(e)}},Xt=({x:r,y:e},t)=>{var n,i,o,a,l,d;let s=document.getElementById(b);if(!s){if(s=document.createElement("div"),(n=t.ghost)!=null&&n.element)s.appendChild(t.ghost.element);else{const h=document.createElement("img");h.src=((i=t.ghost)==null?void 0:i.url)||R,h.width=((o=t.ghost)==null?void 0:o.width)||F,h.height=((a=t.ghost)==null?void 0:a.height)||P,s.appendChild(h)}s.id=b,s.style.position="fixed",s.style.top="0",s.style.left="0",s.style.willChange="transform",s.style.transform="translate3d(0, 0, 0)",s.style.zIndex="9999",s.style.opacity="0.5",mt(r,e,t.ghost||{},(l=t.settings)==null?void 0:l.dragInOverlapX,(d=t.settings)==null?void 0:d.dragInOverlapY)||(s.style.display="none"),s.style.pointerEvents="none",document.body.appendChild(s)}},Wt=({x:r,y:e},t)=>{var l,d,h,u;const s=document.getElementById(b);if(!s)return;let n=(l=t.ghost)==null?void 0:l.width,i=(d=t.ghost)==null?void 0:d.height;typeof n>"u"&&(n=s.getBoundingClientRect().width||F),typeof i>"u"&&(i=s.getBoundingClientRect().height||P);const o=r-n/2,a=e-i/2;s.style.transform=`translate3d(${o}px, ${a}px, 0)`,t.ghost&&(mt(r,e,t.ghost,(h=t.settings)==null?void 0:h.dragInOverlapX,(u=t.settings)==null?void 0:u.dragInOverlapY)?s.style.animation!=at&&(s.style.animation=at):s.style.animation!=ct&&(s.style.animation=ct))};class $t{constructor(e=null){c(this,"_dragGhostAnimationFrameId",null);c(this,"_dragGhostRemoveAnimationFrameId",null);c(this,"_dragGhostElement",null);this._dragGhostElement=e}updateDragGhost(e,t,s){var n;this._dragGhostRemoveAnimationFrameId&&(cancelAnimationFrame(this._dragGhostRemoveAnimationFrameId),this._dragGhostRemoveAnimationFrameId=null),!((n=s.ghost)!=null&&n.external)&&s.ghost&&(this._dragGhostAnimationFrameId||(this._dragGhostAnimationFrameId=requestAnimationFrame(()=>{Yt();const i={x:e,y:t};!s.ghost&&this._dragGhostElement&&(s.ghost={}),s.ghost&&!s.ghost.element&&this._dragGhostElement&&(s.ghost.element=this._dragGhostElement),Xt(i,s),Wt(i,s),this._dragGhostAnimationFrameId=null})))}removeDragGhost(){this._dragGhostAnimationFrameId&&(cancelAnimationFrame(this._dragGhostAnimationFrameId),this._dragGhostAnimationFrameId=null),this._dragGhostRemoveAnimationFrameId||(this._dragGhostRemoveAnimationFrameId=requestAnimationFrame(()=>{const e=document.getElementById(b);e&&document.body.removeChild(e),this._dragGhostRemoveAnimationFrameId=null}))}}class kt{constructor(e,t,s){c(this,"_options",{});c(this,"_instance");c(this,"_mainDomElement");c(this,"_currentDrag",{});c(this,"_currentTouch",null);c(this,"_firefoxDragPosition",{x:0,y:0});c(this,"_onBeforeUpdateDrag",()=>({}));c(this,"isDragging",!1);c(this,"_firefoxFallback",e=>{if(!this._currentDrag.event)return;const t=e||window.event;this._firefoxDragPosition.x=t.pageX||0,this._firefoxDragPosition.y=t.pageY||0});this._instance=e,this._mainDomElement=t,this._options=s||{},this._firefoxFallback=this._firefoxFallback.bind(this),document.addEventListener("dragover",this._firefoxFallback)}beforeUpdateGhost(e){this._onBeforeUpdateDrag=e}dragStart(e,t,s="rml_id"){const n=this._mainDomElement.parentNode;if(M(n).position!=="relative"){console.warn("Parent of iframe should have position relative, otherwise drag-in can not detect the x/y coordinates correctly");return}this._mainDomElement.style.pointerEvents="none";let o=n.querySelector("."+O);o||(o=document.createElement("div"),o.classList.add(O),n.appendChild(o)),o.classList.remove(G.DISPLAY_NONE),t.target.getAttribute("draggable")||console.warn(`Draggable not detected correctly! Did you add draggable="true" to the element? In Sarafi only 'draggable' is too less`);const l=n.querySelector("."+v);this._currentDrag.event=t;const d=t.target,h=d.cloneNode(),u=d.getBoundingClientRect();h.style.width=`${u.width}px`,h.style.height=`${u.height}px`,this._currentDrag.ghost=new $t(h),this._currentDrag.offset||(this._currentDrag.offset={x:0,y:0});const{clientX:g,clientY:f}=I(t,this._firefoxDragPosition);this._currentDrag.offset.x=g-u.left,this._currentDrag.offset.y=f-u.top,t instanceof DragEvent&&t.dataTransfer&&t.dataTransfer.setDragImage&&t.dataTransfer.setDragImage(l,0,0);const{x:S,y:D}=ht(n,this._currentDrag.event||t,this._firefoxDragPosition),y=Math.max(1,S),$=Math.max(1,D);this.isDragging=!0,this._instance.dragInObject(e,y,$,s)}dragUpdate(e){var D;const t=this._mainDomElement.parentNode,{x:s,y:n}=ht(t,e,this._firefoxDragPosition);if(s===0&&n===0)return;const i=Math.max(1,s),o=Math.max(1,n);if(i===1&&o===1)return;let a=i,l=o;if(T(e)){const y=((D=this._options.settings)==null?void 0:D.fingerSize)||0;a=Math.max(2,i+y),l=Math.max(2,o-y)}const{x:d,y:h,options:u}=this._onBeforeUpdateDrag(a,l,{}),g=u||{settings:{},ghost:{}};g.ghost||(g.ghost={}),g.ghost.visibleIn&&g.ghost.hiddenIn||(g.ghost.hiddenIn=this._mainDomElement.getBoundingClientRect());const f=typeof d=="number"?d:a,S=typeof h=="number"?h:l;if(this._currentDrag.ghost){const{clientX:y,clientY:$}=I(e,this._firefoxDragPosition);this._currentDrag.ghost.updateDragGhost(y,$,g)}this._instance.updateDrag(f,S,{})}dragEnd(){this._mainDomElement.style.pointerEvents="all";const e=this._mainDomElement.parentNode;this.isDragging=!1,this._instance.dragInObjectEnd(),this._currentDrag.ghost&&(this._currentDrag.ghost.removeDragGhost(),this._currentDrag.ghost=null),this._currentDrag={},this._firefoxDragPosition={x:0,y:0};const t=e.querySelector("."+O);t&&t.classList.add(G.DISPLAY_NONE)}touchStart(e,t,s="rml_id"){var o,a,l,d;t.preventDefault();const n=(h,u)=>{this.dragStart(e,u,s)},i={};typeof((a=(o=this._options)==null?void 0:o.settings)==null?void 0:a.touchDragDelay)=="number"&&(i.delay=this._options.settings.touchDragDelay),(d=(l=this._options)==null?void 0:l.settings)!=null&&d.touchDragEpsilon&&(i.epsilon=this._options.settings.touchDragEpsilon),this._currentTouch=new gt(void 0,{onTouchDragStart:n},i),this._currentTouch.onStart(t)}touchMove(e){this._currentTouch&&this._currentTouch.onMove(e),this._currentDrag.event&&this.dragUpdate(e)}touchEnd(){this._currentTouch&&this._currentTouch.onEnd(),this._currentTouch=null,this.dragEnd()}dispose(){document.removeEventListener("dragover",this._firefoxFallback)}releaseInput(e){}}const zt=Object.freeze(Object.defineProperty({__proto__:null,DragInFromWebsiteStrategy:kt},Symbol.toStringTag,{value:"Module"})),Vt=r=>`[data-rml-custom-view="${r}"]`,X=r=>{r.preventDefault(),r.stopPropagation()},qt=(r,e,t,s)=>{const n=t-r,i=s-e;return Math.sqrt(n*n+i*i)};class Kt{constructor({onCustomDragStart:e},t={}){c(this,"_startX",0);c(this,"_startY",0);c(this,"_lastX",0);c(this,"_lastY",0);c(this,"_epsilon");c(this,"_isWaiting",!1);c(this,"_onCustomDragStart");this._epsilon=typeof t.epsilon=="number"?t.epsilon:dt,this._onCustomDragStart=e}onMove(e){this._lastX=e.clientX,this._lastY=e.clientY,this._isWaiting&&qt(this._startX,this._startY,this._lastX,this._lastY)>this._epsilon&&(this._onCustomDragStart(e),this._isWaiting=!1)}onStart(e){this._startX=e.clientX,this._startY=e.clientY,this.onMove(e),this._isWaiting=!0}onEnd(){this._reset()}_reset(){this._startX=0,this._startY=0,this._lastX=0,this._lastY=0,this._isWaiting=!1}}const W="data-rml-old-draggable",Jt=void 0,ft=(r,e)=>{const t=T(r),s={delay:t?U:Bt,epsilon:t?B:dt};if(!e)return s;if(!t&&!(r instanceof MouseEvent))return console.warn("Unsupported event! It is not TouchEvent and also not MouseEvent"),s;const{delayKey:n,epsilonKey:i}=t?{delayKey:"touchDragDelay",epsilonKey:"touchDragEpsilon"}:{delayKey:"customDragDelay",epsilonKey:"customDragEpsilon"};return typeof e[n]=="number"&&(s.delay=e.touchDragDelay),typeof e[i]=="number"&&(s.epsilon=e.touchDragEpsilon),s},jt=r=>{let e="",t=F,s=P;if(!r)return{url:R,width:t,height:s};const n=r;if(n instanceof HTMLElement){const i=n.getBoundingClientRect(),o=n.getAttribute("data-rml-ghost-url"),a=n.getAttribute("data-rml-ghost-width"),l=n.getAttribute("data-rml-ghost-height");o?e=o:!o&&n instanceof HTMLImageElement&&n.src&&(e=n.src),e?(t=i.width,s=i.height):e=R,t=a?parseInt(a,10):t,s=l?parseInt(l,10):s}return{url:e||R,width:t,height:s}};class Qt{constructor(e,t,s){c(this,"_options",{});c(this,"_instance");c(this,"_viewName");c(this,"_currentCustomDrag",null);c(this,"_currentBb",null);c(this,"_startTarget",null);c(this,"_onBeforeUpdateDrag",()=>({}));c(this,"isDragging",!1);this._instance=e,this._options=t||{},this._viewName=s}beforeUpdateGhost(e){this._onBeforeUpdateDrag=e}async _dragStart(e,t,s="rml_id"){this._startTarget&&(this._startTarget.style.pointerEvents="none",this._startTarget.style.userSelect="none",this._startTarget.setAttribute(W,this._startTarget.draggable.toString()),this._startTarget.draggable=!1,this._startTarget.removeEventListener("dragstart",X),this._startTarget.addEventListener("dragstart",X)),this._currentBb=await this._instance.getBoundingClientRect(Vt(this._viewName));const{clientX:n,clientY:i}=I(t),o=this._currentBb.x+n,a=this._currentBb.y+i;this.isDragging=!0,this._instance.dragInObject(e,o,a,s)}_dragUpdate(e){if(document.body.focus(),this._currentCustomDrag&&this._currentCustomDrag.onMove(e),!this._currentBb||!this.isDragging)return;const{clientX:t,clientY:s}=I(e),{url:n,width:i,height:o}=jt(this._startTarget),a=this._currentBb.x+t,l=this._currentBb.y+s,d=this._options||{},h={ghost:{visibleIn:{x:this._currentBb.x-(d.dragInOverlapX||0),y:this._currentBb.y+(d.dragInOverlapY||0),width:this._currentBb.width+(d.dragInOverlapX||0),height:this._currentBb.height+(d.dragInOverlapY||0)},url:n,width:i,height:o},mode:"custom-view"},{x:u,y:g,options:f}=this._onBeforeUpdateDrag(a,l,h),S=typeof u=="number"?u:a,D=typeof g=="number"?g:l,y=f||h;this._instance.updateDrag(S,D,y)}_dragEnd(){this._currentCustomDrag&&this._currentCustomDrag.onEnd(),this._currentCustomDrag=null,this.isDragging=!1,this._currentBb=null,this._resetStartTarget(),this._instance.enableEvents(),this._instance.dragInObjectEnd()}dragStart(e,t,s){this._instance.disableEvents(),this._startTarget=t.target;const n=(i,o)=>{this._dragStart(e,o,s)};this._currentCustomDrag=T(t)?new gt(Jt,{onTouchDragStart:n},ft(t,this._options)):new Kt({onCustomDragStart:i=>this._dragStart(e,i,s)},ft(t,this._options)),this._currentCustomDrag.onStart(t)}dragEnd(){this._dragEnd()}dragUpdate(e){this._dragUpdate(e)}touchStart(e,t,s="rml_id"){this.dragStart(e,t,s)}touchMove(e){this.dragUpdate(e)}touchEnd(){this.dragEnd()}dispose(){}_resetStartTarget(){this._startTarget&&(this._startTarget.style.pointerEvents="",this._startTarget.style.userSelect="",this._startTarget.draggable=this._startTarget.getAttribute(W)==="true",this._startTarget.removeAttribute(W),this._startTarget.removeEventListener("dragstart",X))}releaseInput(e){this._currentCustomDrag&&this._currentCustomDrag.onEnd(),this._resetStartTarget()}}const Zt=Object.freeze(Object.defineProperty({__proto__:null,DragInFromCustomViewStrategy:Qt},Symbol.toStringTag,{value:"Module"}));return xt});
|
|
@@ -1,17 +1,17 @@
|
|
|
1
|
-
(function(p,D){typeof exports=="object"&&typeof module<"u"?module.exports=D():typeof define=="function"&&define.amd?define(D):(p=typeof globalThis<"u"?globalThis:p||self,p["roomle-embedding-lib"]=p["roomle-embedding-lib"]||{},p["roomle-embedding-lib"].umd=p["roomle-embedding-lib"].umd||{},p["roomle-embedding-lib"].umd.min=p["roomle-embedding-lib"].umd.min||{},p["roomle-embedding-lib"].umd.min.js=D())})(this,function(){"use strict";var p=Object.defineProperty,D=(i,t,e)=>t in i?p(i,t,{enumerable:!0,configurable:!0,writable:!0,value:e}):i[t]=e,h=(i,t,e)=>D(i,typeof t!="symbol"?t+"":t,e);class ${constructor(t,e,s,
|
|
1
|
+
(function(p,D){typeof exports=="object"&&typeof module<"u"?module.exports=D():typeof define=="function"&&define.amd?define(D):(p=typeof globalThis<"u"?globalThis:p||self,p["roomle-embedding-lib"]=p["roomle-embedding-lib"]||{},p["roomle-embedding-lib"].umd=p["roomle-embedding-lib"].umd||{},p["roomle-embedding-lib"].umd.min=p["roomle-embedding-lib"].umd.min||{},p["roomle-embedding-lib"].umd.min.js=D())})(this,function(){"use strict";var p=Object.defineProperty,D=(i,t,e)=>t in i?p(i,t,{enumerable:!0,configurable:!0,writable:!0,value:e}):i[t]=e,h=(i,t,e)=>D(i,typeof t!="symbol"?t+"":t,e);class ${constructor(t,e,s,n){h(this,"_side"),h(this,"_incomingMessageBus",null),h(this,"_outgoingMessageBus",null),h(this,"_execMessage",null),this._side=t,this._incomingMessageBus=e,this._outgoingMessageBus=s,this._execMessage=n,this._incomingMessageBus&&this._incomingMessageBus.addEventListener("message",this._handleMessage.bind(this))}setOutgoingMessageBus(t){this._outgoingMessageBus=t}setMessageExecution(t){this._execMessage=t}sendMessage(t,e=[]){return new Promise((s,n)=>{if(this._incomingMessageBus===this._outgoingMessageBus)return s(void 0);const r=new MessageChannel;r.port1.onmessage=a=>{if(!a||!a.data)return r.port1.close(),r.port2.close(),n(new Error(this._side+" received message but response can not be interpreted"));let c;try{c=JSON.parse(a.data)}catch(l){return r.port1.close(),r.port2.close(),this._prepareError(l),n(l)}c.error?n(c.error):c.result!==void 0?s(c.result):s(void 0),r.port1.close(),r.port2.close()};let o="";try{o=JSON.stringify({message:t,args:e})}catch{return n(new Error(this._side+": can not create command because it is not JSON.stringify able"))}if(!this._outgoingMessageBus)return n(new Error(this._side+": outgoing bus not set yet"));this._outgoingMessageBus.postMessage(o,"*",[r.port2])})}_handleMessage(t){const e=t.ports&&Array.isArray(t.ports)&&t.ports.length>0?t.ports[0]:null;if(t.data&&e)try{const s=JSON.parse(t.data);if(!this._execMessage)return e.postMessage(JSON.stringify({error:this._side+" is not ready to handle messages"}));Array.isArray(s.args)||(s.args=[s.args]);const n=this._execMessage(s,t);if(n===void 0)return;n.then((r={})=>{let o,a;typeof r=="object"&&r!==null&&(o=r.error,a=r.result),o?e.postMessage(JSON.stringify({error:o})):a!==void 0?e.postMessage(JSON.stringify({result:a})):e.postMessage(JSON.stringify({result:r}))},r=>{e.postMessage(JSON.stringify({error:this._prepareError(r)}))})}catch(s){e.postMessage(JSON.stringify({error:this._prepareError(s)}))}}_prepareError(t){if(typeof t=="string"){const e=this._side+": "+t;return console.error(e),e}return t.message=this._side+": "+t.message,console.error(t),t.message}}const C=".",N={REQUEST_BOOT:"requestBoot",SETUP:"setup",WEBSITE_READY:"websiteReady"},E={GET_METHODS:"getMethods",RETURN_METHODS:"returnMethods",REGISTER_CUSTOM_VIEW:"registerCustomView",REGISTER_CUSTOM_VIEW_DONE:"registerCustomViewDone"},yt=async(i,t)=>{if(typeof i!="string")throw new Error('Configurator ID is not a string type: "'+typeof i+'"');const e=t.customApiUrl?t.customApiUrl:"https://api.roomle.com/v2",s=t.overrideTenant||9,n=e+"/configurators/"+i,r="roomle_portal_v2",o="03-"+window.btoa(new Date().toISOString()+";anonymous;"+r),a=()=>{const u={apiKey:r,currentTenant:s,locale:"en",language:"en",device:1,token:o,platform:"web"};return new Headers(u)},c=new Request(n,{method:"GET",headers:a(),mode:"cors",cache:"default"}),l=await fetch(c),{configurator:d}=await l.json();return d},vt=()=>{try{return window.self!==window.top}catch{return!0}},Dt=["127.0.0.1","localhost","0.0.0.0"],bt=()=>{const i=vt();let t=window.location.href;if(i){if(!document.referrer)return null;t=document.referrer}const{hostname:e}=new URL(t);return e},wt=i=>!!(Dt.includes(i)||i.endsWith("roomle.com")||i.endsWith("gitlab.io")||i.endsWith("gitlab.com")),j=["language","browserLanguage","userLanguage","systemLanguage"],Et=(i=null)=>{const t=window.navigator;if(i)return i.substr(0,2);if(Array.isArray(t.languages)&&t.languages.length>0)return t.languages[0].substr(0,2);for(let e=0,s=j.length;e<s;e++){const n=t[j[e]];if(n)return n.substr(0,2)}return"en"},Tt=(i,t)=>{const e=JSON.parse(JSON.stringify(i));return A(e,t)},A=(i,t)=>{for(const e in t)try{t[e].constructor===Object?i[e]=A(i[e],t[e]):i[e]=t[e]}catch{i[e]=t[e]}return i};var z=(i=>(i.BOTTOM_BAR="bottom_bar",i.PARTLIST_BOUNDS="partlist_bounds",i.INTERACTION_NOTES="interaction_notes",i))(z||{}),It={BASE_URL:"/",DEV:!1,MODE:"production",PROD:!0,SSR:!1};const St={mobileLandscape:!0,floorMaterialRootTag:"materials_root",buttons:{renderimage:!0,requestproduct:!0,requestplan:!0,load_product:!0,partlist_print:!0},elements:{[z.INTERACTION_NOTES]:!1},helpcenter:{roomdesigner:!0,configurator:!1,disable:!1},firstPersonView:!0,saveToIdb:!0,featureFlags:{mocAr:!0,wallAutoHeight:!1},rotationSnapDegrees:10},Ot="(idle)",xt=i=>(L(i),i!=null&&i.customApiUrl&&(i.customApiUrl=decodeURIComponent(i.customApiUrl)),i.shareUrl&&(i.deeplink=i.shareUrl.replace(Nt,At)),i),L=i=>{if(!i)return;const t=Object.keys(i);for(const e of t){const s=i[e];if(!Array.isArray(s)&&typeof s=="object"&&s!==null&&L(s),Array.isArray(s))for(const n of s)L(n);(s==="true"||s==="false")&&(i[e]=s==="true")}},Mt=(i,t)=>{t.configuratorId=i.id;const e=i.settings||{};return!t.overrideTenant&&i.tenant&&(t.overrideTenant=i.tenant),Tt(e,t)},Ct=()=>{const i={...St};i.locale||(i.locale=Et()),i.id===Ot&&delete i.id;const t=bt();return t&&wt(t)&&(i.configuratorId="demoConfigurator"),i.customApiUrl=It.VITE_RAPI_URL,i.emails=!1,i},Nt="<CONF_ID>",At="#CONFIGURATIONID#",Lt=i=>{i.featureFlags||(i.featureFlags={}),typeof i.featureFlags.realPartList!="boolean"&&(i.featureFlags.realPartList=!0),typeof i.featureFlags.globalCallbacks!="boolean"&&(i.featureFlags.globalCallbacks=!0),typeof i.featureFlags.mocAr!="boolean"&&(i.featureFlags.mocAr=!1)},V=()=>/(android)/i.test(navigator.userAgent);class q{constructor(){h(this,"_messageHandler",null),h(this,"isSetupDone",!1),h(this,"viewName","main"),h(this,"plugins",{}),h(this,"pluginsLoaded",[]),h(this,"ui",{callbacks:null}),h(this,"extended",{callbacks:null}),h(this,"configurator",{callbacks:null}),h(this,"analytics",{callbacks:{}}),h(this,"global",{callbacks:{}})}setMessageHandler(t){this._messageHandler=t}handleSetup(t){const{methods:e,callbacks:s}=t;e.forEach(n=>{const r=n.split(C),o=r[0],a=r[1];this[o]||(this[o]={}),this[o][a]=function(){if(!this._messageHandler){console.error("MessageHandler not set");return}return this._messageHandler.sendMessage(n,[...arguments])}.bind(this)}),s.forEach(n=>{const r=n.split(C),o=r[0],a=r[1],c=r[2];this[o]||(this[o]={}),this[o][a]||(this[o][a]={}),this[o][a][c]=()=>{}}),this.isSetupDone=!0}executeMessage({message:t,args:e}){const s=t.split(C),n=s[0],r=s[1],o=s.length===3?s[2]:null;if(o&&this[n][r][o]){const a=this[n][r][o](...e);return a instanceof Promise?a.then(c=>({result:c})):a!==void 0?Promise.resolve({result:a}):Promise.resolve({result:null})}return Promise.reject('Message "'+t+'" is unkown')}setupPlugins(t,e,s="website"){for(const n of t)typeof n=="string"&&n==="dragIn"?this.pluginsLoaded.push(new Promise((r,o)=>{try{Promise.resolve().then(()=>Ut).then(({DragIn:a})=>{const c=new a(this.ui,e,s,this.viewName);c.init().then(()=>{this.plugins.dragIn=c,r()},o)})}catch(a){o(a)}})):n.name&&n.loader&&this.pluginsLoaded.push(new Promise((r,o)=>{try{n.loader().then(a=>{const c=new a(this.ui,e,s,this.viewName);c.init().then(()=>{this.plugins[n.name]=c,r()},o)})}catch(a){o(a)}}))}}const J=()=>{let i,t;return{promise:new Promise((e,s)=>{i=e,t=s}),resolve:i,reject:t}},K=(i,t,e)=>{let s=null;Object.defineProperty(i,t,{get(){return s||e},set(n){n!=null&&n.mute?s=n.value:(console.warn("You override Roomle defined behaviour. To disalbe this warning pass in an object with the following properties"),console.warn("{ mute: true, value: () => void }"),s=n)}})},Q=()=>window.innerHeight*.01+"px",Z=i=>{i&&setTimeout(()=>i.style.setProperty(R,Q()),0)},tt="rml-styles",Rt=450,R="--rml-full-height",m={CONTAINER:"rml-container",FILL:"rml-fill",POSITION:"rml-pos",TRANSITION:"rml-transition",ANDROID_HEIGHT:"rml-android-height",OVERFLOW_HIDDEN:"rml-overflow-hidden"},P=new Map;class Pt extends q{constructor(t,e,s,n,r){if(super(),h(this,"_waitForIframe"),h(this,"_container"),h(this,"_configuratorSettings"),h(this,"_initData",{}),h(this,"_iframe"),!t||typeof t.id!="string")throw new Error("Please provide a correct configuratorId, you get the correct ID from your Roomle Contact Person");if(P.has(e))throw new Error("There is already an instance on this DOM element");if(!document.getElementById(tt)){const c=s.zIndex||9999999,l=document.createElement("style");l.type="text/css",l.id=tt;const d="transition:all ease-in-out "+Rt+"ms;",u=["-webkit-","-o-"].reduce((_,y)=>_+=y+d,"")+d,g=Q();l.innerHTML=`
|
|
2
2
|
.${m.CONTAINER}{${R}:${g};}
|
|
3
3
|
.${m.POSITION}{position:fixed;top:0;left:0;z-index:${c};opacity:0}
|
|
4
4
|
.${m.TRANSITION}{${u}}
|
|
5
5
|
.${m.FILL}{width:100%;height:100%;opacity:1}
|
|
6
6
|
.${m.ANDROID_HEIGHT}{height:calc(var(${R},1vh)*100)}
|
|
7
7
|
.${m.OVERFLOW_HIDDEN}{overflow:hidden}
|
|
8
|
-
`,document.head.appendChild(l)}this._executeMessage=this._executeMessage.bind(this);const
|
|
8
|
+
`,document.head.appendChild(l)}this._executeMessage=this._executeMessage.bind(this);const o=new $("website",window,null,this._executeMessage);this.setMessageHandler(o),this._onResize=this._onResize.bind(this),V()&&window.addEventListener("resize",this._onResize),this._container=e,this._initData=s,this._configuratorSettings=t;const a=this._createIframe();this._onUseFullPage=this._onUseFullPage.bind(this),this._onBackToWebsite=this._onBackToWebsite.bind(this),this._waitForIframe=r,this._container.appendChild(a),this._iframe=a,this.setupPlugins(n,this._iframe),P.set(e,!0)}static createPlanner(t,e,s,n=[]){return this._create(t,e,s,n)}static async connect(t,e=[]){const s=new q;s.viewName=t;const{resolve:n,promise:r}=J(),{resolve:o,promise:a}=J(),c=({message:u,args:g})=>{switch(u){case E.REGISTER_CUSTOM_VIEW_DONE:n();break;case E.RETURN_METHODS:s.handleSetup(g[0]),o();break;default:if(s.isSetupDone)return s.executeMessage({message:u,args:g})}},l=new $("custom-view-"+t,window,window.parent,c);s.setMessageHandler(l);const d=[t];return l.sendMessage(E.REGISTER_CUSTOM_VIEW,d),await r,l.sendMessage(E.GET_METHODS,d),await a,s.setupPlugins(e,document.body,"custom-view"),await Promise.allSettled(s.pluginsLoaded),s}static createConfigurator(t,e,s,n=[]){return this._create(t,e,s,n)}static create(t,e,s,n){return this._create(t,e,s,n)}static createViewer(t,e,s,n=[]){return this._create(t,e,s,n)}static async _create(t,e,s,n){return new Promise(async(r,o)=>{try{const a=A(Ct(),xt(s));Lt(a);const c=await yt(t,a);s=Mt(c,a);const l=new this(c,e,s,n,r);return await Promise.allSettled(l.pluginsLoaded),l}catch(a){return o(a)}})}teardown(){this._container&&P.delete(this._container);const t=this._container.querySelector("iframe");t&&this._container.removeChild(t),window.removeEventListener("resize",this._onResize)}_createIframe(){var t;const e=document.createElement("iframe");let s=((t=this._configuratorSettings)==null?void 0:t.url)||"https://www.roomle.com/t/cp/";return this._initData.useLocalRoomle&&(s=location.href.replace("embedding.html","")),location.href.includes("roomle.gitlab.io")&&(s=location.href.replace("embedding.html","index.html")),this._initData.overrideServerUrl&&(s=this._initData.overrideServerUrl),e.src=s,e.classList.add(m.CONTAINER),e.classList.add(m.FILL),e}_onResize(){Z(this._iframe)}_onUseFullPage(){this._iframe.classList.add(m.POSITION),document.documentElement.classList.add(m.OVERFLOW_HIDDEN),window.document.body.classList.add(m.OVERFLOW_HIDDEN),V()&&(Z(this._iframe),this._iframe.classList.add(m.ANDROID_HEIGHT))}_onBackToWebsite(){this._iframe.classList.remove(m.POSITION),this._iframe.classList.remove(m.ANDROID_HEIGHT),document.documentElement.classList.remove(m.OVERFLOW_HIDDEN),window.document.body.classList.remove(m.OVERFLOW_HIDDEN)}_executeMessage({message:t,args:e},s){var n;if(s.source&&s.source===((n=this._iframe)==null?void 0:n.contentWindow))return t===N.REQUEST_BOOT?this._messageHandler?(this._messageHandler.setOutgoingMessageBus(s.source),Promise.resolve({result:this._initData})):(console.error("MessageHandler not set"),Promise.resolve({error:"MessageHandler not set"})):t===N.SETUP?(this.handleSetup(e[0]),K(this.ui.callbacks,"onUseFullPage",this._onUseFullPage),K(this.ui.callbacks,"onBackToWebsite",this._onBackToWebsite),this._waitForIframe(this),setTimeout(()=>{if(!this._messageHandler){console.error("MessageHandler not set");return}this._messageHandler.sendMessage(N.WEBSITE_READY)},0),Promise.resolve({result:null})):this.executeMessage({message:t,args:e})}}class Ft{constructor(t,e,s,n){h(this,"_mainDomElement"),h(this,"_instance"),h(this,"_mode","website"),h(this,"_viewName","main"),this._instance=t,this._mainDomElement=e,this._mode=s,this._viewName=n}async init(){return Promise.resolve()}}const T="rml-drag-in-styles",I="rml-drag-in-drag-element",S="rml-drag-in-overlay",O="rml-drag-in-drag-ghost",et="rml-drag-in-fade-in",st="rml-drag-in-fade-out",F={DISPLAY_NONE:"rml-display-none"},it=.5,nt="250ms",rt="forwards",ot=`@keyframes ${et} {from{opacity: 0;}to {opacity: ${it};}}`,at=`@keyframes ${st} {from{opacity: ${it};}to {opacity: 0;}}`,lt=`${et} ${nt} ${rt}`,ht=`${st} ${nt} ${rt}`,x="https://res.cloudinary.com/roomle/image/upload/v1729679975/fallback_afpyqr.jpg",B=112,U=112;class Bt extends Ft{constructor(t,e,s,n){super(t,e,s,n),h(this,"options",{}),h(this,"_customDragSignal",new AbortController),this._mainDomElement=e,this._injectStyles(),this._initializeDragGhost()}_injectStyles(){if(!document.getElementById(T)){const t=document.createElement("style");t.type="text/css",t.id=T,t.innerHTML=`
|
|
9
9
|
.${F.DISPLAY_NONE}{display:none}
|
|
10
10
|
.${S}{position:absolute;top:0;left:0;width:100%;height:100%;z-index:999;}
|
|
11
11
|
.${O}{position:absolute;top:0;left:0;width:1px;height:1px;z-index:999;pointer-events:none;background-color:transparent;}
|
|
12
|
-
${nt}
|
|
13
12
|
${ot}
|
|
14
|
-
|
|
15
|
-
|
|
13
|
+
${at}
|
|
14
|
+
`,document.head.appendChild(t)}}_initializeDragGhost(){const t=this._mainDomElement.parentNode;let e=t.querySelector("."+O);e||(e=document.createElement("div"),e.classList.add(O),e.innerText=" ",t.appendChild(e))}async init(){if(await super.init(),this._mode==="website")try{const{DragInFromWebsiteStrategy:t}=await Promise.resolve().then(()=>zt);this._strategy=new t(this._instance,this._mainDomElement,{settings:this.options,mode:"website"})}catch(t){throw console.error('Could not load Dragin strategy "FromWebsite"'),t}else if(this._mode==="custom-view")try{const{DragInFromCustomViewStrategy:t}=await Promise.resolve().then(()=>te);this._strategy=new t(this._instance,this.options,this._viewName)}catch(t){throw console.error('Could not load Dragin strategy "FromCustomView"'),t}else throw new Error("Unsupported mode")}get isDragging(){return this._strategy.isDragging}dragStart(t,e,s="rml_id"){this._strategy.dragStart(t,e,s)}dragUpdate(t){this._strategy.dragUpdate(t)}dragEnd(){this._strategy.dragEnd()}touchStart(t,e,s="rml_id"){this._strategy.touchStart(t,e,s)}touchMove(t){this._strategy.touchMove(t)}touchEnd(){this._strategy.touchEnd()}dispose(){this._strategy.dispose()}beforeUpdateGhost(t){this._strategy.beforeUpdateGhost(t)}registerCustomDrag({customDragStart:t,customDragEnd:e,customDragUpdate:s,beforeUpdateGhost:n}){n&&this._strategy.beforeUpdateGhost(n);const r=this._customDragSignal.signal,o=l=>{l.target.getAttribute("data-rml-draggable")==="true"&&t(l)},a=l=>{this._strategy.releaseInput(l),this._strategy.isDragging&&e(l)},c=l=>{s(l)};document.querySelectorAll('[data-rml-draggable="true"]').forEach(l=>{l.draggable=!1}),document.addEventListener("mousedown",o,{signal:r}),document.addEventListener("mouseup",a,{signal:r}),document.addEventListener("mousemove",c,{signal:r}),document.addEventListener("mouseleave",a,{signal:r}),document.addEventListener("touchstart",o,{signal:r}),document.addEventListener("touchend",a,{signal:r}),document.addEventListener("touchmove",c,{signal:r})}unregisterCustomDrag(){this._customDragSignal.abort(),this._customDragSignal=new AbortController}releaseInput(t){this._strategy.releaseInput(t)}}const Ut=Object.freeze(Object.defineProperty({__proto__:null,DragIn:Bt},Symbol.toStringTag,{value:"Module"}));class Ht{constructor(t=16){h(this,"_computedStyleCache",new Map),h(this,"_maxLifetime",16),h(this,"_cacheCleanInterval",null),this._maxLifetime=t}get(t){const e=this._computedStyleCache.get(t),s=Date.now();if(e&&s-e.updated<this._maxLifetime)return e.style;const n=getComputedStyle(t);return this._computedStyleCache.set(t,{style:n,updated:s}),this._cacheCleanInterval||(this._cacheCleanInterval=setInterval(()=>this._cleanUpCache,Math.max(this._maxLifetime*1e3,5e3))),n}_cleanUpCache(){const t=Date.now();for(const[e,{updated:s}]of this._computedStyleCache.entries())t-s>=this._maxLifetime&&this._computedStyleCache.delete(e);this._computedStyleCache.size===0&&this._cacheCleanInterval&&(clearInterval(this._cacheCleanInterval),this._cacheCleanInterval=null)}}const f=i=>window.TouchEvent&&i instanceof window.TouchEvent;let H;const M=i=>(H||(H=new Ht),H.get(i)),ct=(i,t,e)=>{const s=parseFloat(i),n=window.devicePixelRatio||1;if(t==="px")return s;if(t==="%"){const o=e===document.documentElement?window.innerWidth:e.offsetWidth;return s/100*o}if(t==="rem"){const o=parseFloat(M(document.documentElement).fontSize);return s*o}if(t==="em"){const o=parseFloat(M(e).fontSize);return s*o}if(t==="vh"||t==="vw"||t==="vmin"||t==="vmax"){const o={vh:window.innerHeight,vw:window.innerWidth,vmin:Math.min(window.innerWidth,window.innerHeight),vmax:Math.max(window.innerWidth,window.innerHeight)};return s/100*o[t]}const r={cm:37.7952755906,mm:3.77952755906,in:96};return t in r?s*r[t]*n:(console.warn("Unable to determine coordinates for drag-in. Therefore drag-in is not possible. Check the CSS that positions the iframe of Roomle"),0)},dt=(i,t,e={x:0,y:0})=>{const s=i.getBoundingClientRect(),n=M(i).transform;let r=0,o=0;if(n!=="none"){const u=/translate\(\s*([-+]?\d*\.?\d+|\d+)(px|%)?,?\s*([-+]?\d*\.?\d+|\d+)?(px|%)?\s*\)/,g=n.match(u);g&&(r=ct(g[1],g[2],i),o=ct(g[3],g[4],i))}const{clientX:a,clientY:c}=b(t,e),l=a-s.left-r+i.scrollLeft,d=c-s.top-o+i.scrollTop;return{x:l,y:d}},b=(i,t=null)=>{const{clientX:e,clientY:s}=f(i)?Gt(i):i,n=e>0?e:t?t.x:e,r=s>0?s:t?t.y:s;return{clientX:n,clientY:r}},Gt=i=>{if(i.touches.length){let{clientX:e,clientY:s}=i.touches[0];if(i.touches.length>1){const n=i.touches[1],r=n.clientX,o=n.clientY;e=(e+r)/2,s=(s+o)/2}return{clientX:e,clientY:s}}const t=i.changedTouches[0];return{clientX:t.clientX,clientY:t.clientY}},G=500,Y=10,Yt=100,ut=15,X=(i,t=0)=>f(i)?{clientX:i.touches[t].clientX,clientY:i.touches[t].clientY}:{clientX:i.clientX,clientY:i.clientY},gt=i=>i&&f(i)?i.touches.length>0:!0;class mt{constructor(t,{onTouchDragStart:e},s={}){h(this,"_touchDragTimeOut"),h(this,"_onTouchDragStart"),h(this,"_payload",null),h(this,"_delay",G),h(this,"_firstTouch",null),h(this,"_lastTouch",null),h(this,"_epsilon",Y),this._payload=t,this._onTouchDragStart=e,this._delay=typeof s.delay=="number"?s.delay:G,this._epsilon=typeof s.epsilon=="number"?s.epsilon:Y}onStart(t){gt(t)&&(this._touchDragTimeOut||(this._firstTouch=X(t,f(t)?t.touches.length-1:0),this._touchDragTimeOut=setTimeout(()=>{this._clearTimeout(),this._lastTouch||(this._lastTouch=X(t)),this._checkXDistance(t)()},this._delay)))}onEnd(){this._resetTouches()}onMove(t){gt(t)&&(this._lastTouch=X(t))}_clearTimeout(){this._touchDragTimeOut&&(clearTimeout(this._touchDragTimeOut),this._touchDragTimeOut=null)}_resetTouches(){this._clearTimeout(),this._lastTouch=null,this._firstTouch=null,this._payload=null}_checkXDistance(t){return()=>{if(!this._firstTouch||!this._lastTouch)return;let e=!1;e=Math.abs(this._firstTouch.clientX-this._lastTouch.clientX)<this._epsilon,e&&(this._onTouchDragStart(this._payload,t),this._resetTouches())}}}const _t=(i,t,e=0,s=0)=>{const n=t.x+t.width+e,r=t.x-e,o=t.y+t.height+s,a=t.y-s,{x:c,y:l}=i;return c>=r&&c<=n&&l>=a&&l<=o},pt=(i,t,e,s=0,n=0)=>{if(!(!e||!e.hiddenIn&&!e.visibleIn))return e.visibleIn?_t({x:i,y:t},e.visibleIn,s,n):e.hiddenIn?!_t({x:i,y:t},e.hiddenIn,-s,-n):!1},Xt=()=>{if(!document.getElementById(T)){const i=document.createElement("style");i.type="text/css",i.id=T,i.innerHTML=`
|
|
16
15
|
${ot}
|
|
17
|
-
`,document.head.appendChild(i)}},Yt=({x:i,y:t},e)=>{var s,r,n,a,o,c;let l=document.getElementById(I);if(!l){if(l=document.createElement("div"),(s=e.ghost)!=null&&s.element)l.appendChild(e.ghost.element);else{const d=document.createElement("img");d.src=((r=e.ghost)==null?void 0:r.url)||x,d.width=((n=e.ghost)==null?void 0:n.width)||U,d.height=((a=e.ghost)==null?void 0:a.height)||B,l.appendChild(d)}l.id=I,l.style.position="fixed",l.style.top="0",l.style.left="0",l.style.willChange="transform",l.style.transform="translate3d(0, 0, 0)",l.style.zIndex="9999",l.style.opacity="0.5",_t(i,t,e.ghost||{},(o=e.settings)==null?void 0:o.dragInOverlapX,(c=e.settings)==null?void 0:c.dragInOverlapY)||(l.style.display="none"),l.style.pointerEvents="none",document.body.appendChild(l)}},kt=({x:i,y:t},e)=>{var s,r,n,a;const o=document.getElementById(I);if(!o)return;let c=(s=e.ghost)==null?void 0:s.width,l=(r=e.ghost)==null?void 0:r.height;typeof c>"u"&&(c=o.getBoundingClientRect().width||U),typeof l>"u"&&(l=o.getBoundingClientRect().height||B);const d=i-c/2,u=t-l/2;o.style.transform=`translate3d(${d}px, ${u}px, 0)`,e.ghost&&(_t(i,t,e.ghost,(n=e.settings)==null?void 0:n.dragInOverlapX,(a=e.settings)==null?void 0:a.dragInOverlapY)?o.style.animation!=at&&(o.style.animation=at):o.style.animation!=lt&&(o.style.animation=lt))};class Xt{constructor(t=null){h(this,"_dragGhostAnimationFrameId",null),h(this,"_dragGhostRemoveAnimationFrameId",null),h(this,"_dragGhostElement",null),this._dragGhostElement=t}updateDragGhost(t,e,s){var r;this._dragGhostRemoveAnimationFrameId&&(cancelAnimationFrame(this._dragGhostRemoveAnimationFrameId),this._dragGhostRemoveAnimationFrameId=null),!((r=s.ghost)!=null&&r.external)&&s.ghost&&(this._dragGhostAnimationFrameId||(this._dragGhostAnimationFrameId=requestAnimationFrame(()=>{Gt();const n={x:t,y:e};!s.ghost&&this._dragGhostElement&&(s.ghost={}),s.ghost&&!s.ghost.element&&this._dragGhostElement&&(s.ghost.element=this._dragGhostElement),Yt(n,s),kt(n,s),this._dragGhostAnimationFrameId=null})))}removeDragGhost(){this._dragGhostAnimationFrameId&&(cancelAnimationFrame(this._dragGhostAnimationFrameId),this._dragGhostAnimationFrameId=null),this._dragGhostRemoveAnimationFrameId||(this._dragGhostRemoveAnimationFrameId=requestAnimationFrame(()=>{const t=document.getElementById(I);t&&document.body.removeChild(t),this._dragGhostRemoveAnimationFrameId=null}))}}class Wt{constructor(t,e,s){h(this,"_options",{}),h(this,"_instance"),h(this,"_mainDomElement"),h(this,"_currentDrag",{}),h(this,"_currentTouch",null),h(this,"_firefoxDragPosition",{x:0,y:0}),h(this,"_onBeforeUpdateDrag",()=>({})),h(this,"isDragging",!1),h(this,"_firefoxFallback",r=>{if(!this._currentDrag.event)return;const n=r||window.event;this._firefoxDragPosition.x=n.pageX||0,this._firefoxDragPosition.y=n.pageY||0}),this._instance=t,this._mainDomElement=e,this._options=s||{},this._firefoxFallback=this._firefoxFallback.bind(this),document.addEventListener("dragover",this._firefoxFallback)}beforeUpdateGhost(t){this._onBeforeUpdateDrag=t}dragStart(t,e,s="rml_id"){const r=this._mainDomElement.parentNode;if(M(r).position!=="relative"){console.warn("Parent of iframe should have position relative, otherwise drag-in can not detect the x/y coordinates correctly");return}this._mainDomElement.style.pointerEvents="none";let n=r.querySelector("."+S);n||(n=document.createElement("div"),n.classList.add(S),r.appendChild(n)),n.classList.remove(F.DISPLAY_NONE),e.target.getAttribute("draggable")||console.warn(`Draggable not detected correctly! Did you add draggable="true" to the element? In Sarafi only 'draggable' is too less`);const a=r.querySelector("."+O);this._currentDrag.event=e;const o=e.target,c=o.cloneNode(),l=o.getBoundingClientRect();c.style.width=`${l.width}px`,c.style.height=`${l.height}px`,this._currentDrag.ghost=new Xt(c),this._currentDrag.offset||(this._currentDrag.offset={x:0,y:0});const{clientX:d,clientY:u}=w(e,this._firefoxDragPosition);this._currentDrag.offset.x=d-l.left,this._currentDrag.offset.y=u-l.top,e instanceof DragEvent&&e.dataTransfer&&e.dataTransfer.setDragImage&&e.dataTransfer.setDragImage(a,0,0);const{x:g,y:_}=ct(r,this._currentDrag.event||e,this._firefoxDragPosition),y=Math.max(1,g),b=Math.max(1,_);this.isDragging=!0,this._instance.dragInObject(t,y,b,s)}dragUpdate(t){var e;const s=this._mainDomElement.parentNode,{x:r,y:n}=ct(s,t,this._firefoxDragPosition);if(r===0&&n===0)return;const a=Math.max(1,r),o=Math.max(1,n);if(a===1&&o===1)return;let c=a,l=o;if(f(t)){const v=((e=this._options.settings)==null?void 0:e.fingerSize)||0;c=Math.max(2,a+v),l=Math.max(2,o-v)}const{x:d,y:u,options:g}=this._onBeforeUpdateDrag(c,l,{}),_=g||{settings:{},ghost:{}};_.ghost||(_.ghost={}),_.ghost.visibleIn&&_.ghost.hiddenIn||(_.ghost.hiddenIn=this._mainDomElement.getBoundingClientRect());const y=typeof d=="number"?d:c,b=typeof u=="number"?u:l;if(this._currentDrag.ghost){const{clientX:v,clientY:Zt}=w(t,this._firefoxDragPosition);this._currentDrag.ghost.updateDragGhost(v,Zt,_)}this._instance.updateDrag(y,b,{})}dragEnd(){this._mainDomElement.style.pointerEvents="all";const t=this._mainDomElement.parentNode;this.isDragging=!1,this._instance.dragInObjectEnd(),this._currentDrag.ghost&&(this._currentDrag.ghost.removeDragGhost(),this._currentDrag.ghost=null),this._currentDrag={},this._firefoxDragPosition={x:0,y:0};const e=t.querySelector("."+S);e&&e.classList.add(F.DISPLAY_NONE)}touchStart(t,e,s="rml_id"){var r,n,a,o;e.preventDefault();const c=(d,u)=>{this.dragStart(t,u,s)},l={};typeof((n=(r=this._options)==null?void 0:r.settings)==null?void 0:n.touchDragDelay)=="number"&&(l.delay=this._options.settings.touchDragDelay),(o=(a=this._options)==null?void 0:a.settings)!=null&&o.touchDragEpsilon&&(l.epsilon=this._options.settings.touchDragEpsilon),this._currentTouch=new gt(void 0,{onTouchDragStart:c},l),this._currentTouch.onStart(e)}touchMove(t){this._currentTouch&&this._currentTouch.onMove(t),this._currentDrag.event&&this.dragUpdate(t)}touchEnd(){this._currentTouch&&this._currentTouch.onEnd(),this._currentTouch=null,this.dragEnd()}dispose(){document.removeEventListener("dragover",this._firefoxFallback)}releaseInput(t){}}const $t=Object.freeze(Object.defineProperty({__proto__:null,DragInFromWebsiteStrategy:Wt},Symbol.toStringTag,{value:"Module"})),jt=i=>`[data-rml-custom-view="${i}"]`,X=i=>{i.preventDefault(),i.stopPropagation()},zt=(i,t,e,s)=>{const r=e-i,n=s-t;return Math.sqrt(r*r+n*n)};class Vt{constructor({onCustomDragStart:t},e={}){h(this,"_startX",0),h(this,"_startY",0),h(this,"_lastX",0),h(this,"_lastY",0),h(this,"_epsilon"),h(this,"_isWaiting",!1),h(this,"_onCustomDragStart"),this._epsilon=typeof e.epsilon=="number"?e.epsilon:dt,this._onCustomDragStart=t}onMove(t){this._lastX=t.clientX,this._lastY=t.clientY,this._isWaiting&&zt(this._startX,this._startY,this._lastX,this._lastY)>this._epsilon&&(this._onCustomDragStart(t),this._isWaiting=!1)}onStart(t){this._startX=t.clientX,this._startY=t.clientY,this.onMove(t),this._isWaiting=!0}onEnd(){this._reset()}_reset(){this._startX=0,this._startY=0,this._lastX=0,this._lastY=0,this._isWaiting=!1}}const W="data-rml-old-draggable",qt=void 0,pt=(i,t)=>{const e=f(i),s={delay:e?G:Ht,epsilon:e?Y:dt};if(!t)return s;if(!e&&!(i instanceof MouseEvent))return console.warn("Unsupported event! It is not TouchEvent and also not MouseEvent"),s;const{delayKey:r,epsilonKey:n}=e?{delayKey:"touchDragDelay",epsilonKey:"touchDragEpsilon"}:{delayKey:"customDragDelay",epsilonKey:"customDragEpsilon"};return typeof t[r]=="number"&&(s.delay=t.touchDragDelay),typeof t[n]=="number"&&(s.epsilon=t.touchDragEpsilon),s},Jt=i=>{let t="",e=U,s=B;if(!i)return{url:x,width:e,height:s};const r=i;if(r instanceof HTMLElement){const n=r.getBoundingClientRect(),a=r.getAttribute("data-rml-ghost-url"),o=r.getAttribute("data-rml-ghost-width"),c=r.getAttribute("data-rml-ghost-height");a?t=a:!a&&r instanceof HTMLImageElement&&r.src&&(t=r.src),t?(e=n.width,s=n.height):t=x,e=o?parseInt(o,10):e,s=c?parseInt(c,10):s}return{url:t||x,width:e,height:s}};class Kt{constructor(t,e,s){h(this,"_options",{}),h(this,"_instance"),h(this,"_viewName"),h(this,"_currentCustomDrag",null),h(this,"_currentBb",null),h(this,"_startTarget",null),h(this,"_onBeforeUpdateDrag",()=>({})),h(this,"isDragging",!1),this._instance=t,this._options=e||{},this._viewName=s}beforeUpdateGhost(t){this._onBeforeUpdateDrag=t}async _dragStart(t,e,s="rml_id"){this._startTarget&&(this._startTarget.style.pointerEvents="none",this._startTarget.style.userSelect="none",this._startTarget.setAttribute(W,this._startTarget.draggable.toString()),this._startTarget.draggable=!1,this._startTarget.removeEventListener("dragstart",X),this._startTarget.addEventListener("dragstart",X)),this._currentBb=await this._instance.getBoundingClientRect(jt(this._viewName));const{clientX:r,clientY:n}=w(e),a=this._currentBb.x+r,o=this._currentBb.y+n;this.isDragging=!0,this._instance.dragInObject(t,a,o,s)}_dragUpdate(t){if(document.body.focus(),this._currentCustomDrag&&this._currentCustomDrag.onMove(t),!this._currentBb||!this.isDragging)return;const{clientX:e,clientY:s}=w(t),{url:r,width:n,height:a}=Jt(this._startTarget),o=this._currentBb.x+e,c=this._currentBb.y+s,l=this._options||{},d={ghost:{visibleIn:{x:this._currentBb.x-(l.dragInOverlapX||0),y:this._currentBb.y+(l.dragInOverlapY||0),width:this._currentBb.width+(l.dragInOverlapX||0),height:this._currentBb.height+(l.dragInOverlapY||0)},url:r,width:n,height:a},mode:"custom-view"},{x:u,y:g,options:_}=this._onBeforeUpdateDrag(o,c,d),y=typeof u=="number"?u:o,b=typeof g=="number"?g:c,v=_||d;this._instance.updateDrag(y,b,v)}_dragEnd(){this._currentCustomDrag&&this._currentCustomDrag.onEnd(),this._currentCustomDrag=null,this.isDragging=!1,this._currentBb=null,this._resetStartTarget(),this._instance.enableEvents(),this._instance.dragInObjectEnd()}dragStart(t,e,s){this._instance.disableEvents(),this._startTarget=e.target;const r=(n,a)=>{this._dragStart(t,a,s)};this._currentCustomDrag=f(e)?new gt(qt,{onTouchDragStart:r},pt(e,this._options)):new Vt({onCustomDragStart:n=>this._dragStart(t,n,s)},pt(e,this._options)),this._currentCustomDrag.onStart(e)}dragEnd(){this._dragEnd()}dragUpdate(t){this._dragUpdate(t)}touchStart(t,e,s="rml_id"){this.dragStart(t,e,s)}touchMove(t){this.dragUpdate(t)}touchEnd(){this.dragEnd()}dispose(){}_resetStartTarget(){this._startTarget&&(this._startTarget.style.pointerEvents="",this._startTarget.style.userSelect="",this._startTarget.draggable=this._startTarget.getAttribute(W)==="true",this._startTarget.removeAttribute(W),this._startTarget.removeEventListener("dragstart",X))}releaseInput(t){this._currentCustomDrag&&this._currentCustomDrag.onEnd(),this._resetStartTarget()}}const Qt=Object.freeze(Object.defineProperty({__proto__:null,DragInFromCustomViewStrategy:Kt},Symbol.toStringTag,{value:"Module"}));return Nt});
|
|
16
|
+
${at}
|
|
17
|
+
`,document.head.appendChild(i)}},kt=({x:i,y:t},e)=>{var s,n,r,o,a,c;let l=document.getElementById(I);if(!l){if(l=document.createElement("div"),(s=e.ghost)!=null&&s.element)l.appendChild(e.ghost.element);else{const d=document.createElement("img");d.src=((n=e.ghost)==null?void 0:n.url)||x,d.width=((r=e.ghost)==null?void 0:r.width)||B,d.height=((o=e.ghost)==null?void 0:o.height)||U,l.appendChild(d)}l.id=I,l.style.position="fixed",l.style.top="0",l.style.left="0",l.style.willChange="transform",l.style.transform="translate3d(0, 0, 0)",l.style.zIndex="9999",l.style.opacity="0.5",pt(i,t,e.ghost||{},(a=e.settings)==null?void 0:a.dragInOverlapX,(c=e.settings)==null?void 0:c.dragInOverlapY)||(l.style.display="none"),l.style.pointerEvents="none",document.body.appendChild(l)}},Wt=({x:i,y:t},e)=>{var s,n,r,o;const a=document.getElementById(I);if(!a)return;let c=(s=e.ghost)==null?void 0:s.width,l=(n=e.ghost)==null?void 0:n.height;typeof c>"u"&&(c=a.getBoundingClientRect().width||B),typeof l>"u"&&(l=a.getBoundingClientRect().height||U);const d=i-c/2,u=t-l/2;a.style.transform=`translate3d(${d}px, ${u}px, 0)`,e.ghost&&(pt(i,t,e.ghost,(r=e.settings)==null?void 0:r.dragInOverlapX,(o=e.settings)==null?void 0:o.dragInOverlapY)?a.style.animation!=lt&&(a.style.animation=lt):a.style.animation!=ht&&(a.style.animation=ht))};class $t{constructor(t=null){h(this,"_dragGhostAnimationFrameId",null),h(this,"_dragGhostRemoveAnimationFrameId",null),h(this,"_dragGhostElement",null),this._dragGhostElement=t}updateDragGhost(t,e,s){var n;this._dragGhostRemoveAnimationFrameId&&(cancelAnimationFrame(this._dragGhostRemoveAnimationFrameId),this._dragGhostRemoveAnimationFrameId=null),!((n=s.ghost)!=null&&n.external)&&s.ghost&&(this._dragGhostAnimationFrameId||(this._dragGhostAnimationFrameId=requestAnimationFrame(()=>{Xt();const r={x:t,y:e};!s.ghost&&this._dragGhostElement&&(s.ghost={}),s.ghost&&!s.ghost.element&&this._dragGhostElement&&(s.ghost.element=this._dragGhostElement),kt(r,s),Wt(r,s),this._dragGhostAnimationFrameId=null})))}removeDragGhost(){this._dragGhostAnimationFrameId&&(cancelAnimationFrame(this._dragGhostAnimationFrameId),this._dragGhostAnimationFrameId=null),this._dragGhostRemoveAnimationFrameId||(this._dragGhostRemoveAnimationFrameId=requestAnimationFrame(()=>{const t=document.getElementById(I);t&&document.body.removeChild(t),this._dragGhostRemoveAnimationFrameId=null}))}}class jt{constructor(t,e,s){h(this,"_options",{}),h(this,"_instance"),h(this,"_mainDomElement"),h(this,"_currentDrag",{}),h(this,"_currentTouch",null),h(this,"_firefoxDragPosition",{x:0,y:0}),h(this,"_onBeforeUpdateDrag",()=>({})),h(this,"isDragging",!1),h(this,"_firefoxFallback",n=>{if(!this._currentDrag.event)return;const r=n||window.event;this._firefoxDragPosition.x=r.pageX||0,this._firefoxDragPosition.y=r.pageY||0}),this._instance=t,this._mainDomElement=e,this._options=s||{},this._firefoxFallback=this._firefoxFallback.bind(this),document.addEventListener("dragover",this._firefoxFallback)}beforeUpdateGhost(t){this._onBeforeUpdateDrag=t}dragStart(t,e,s="rml_id"){const n=this._mainDomElement.parentNode;if(M(n).position!=="relative"){console.warn("Parent of iframe should have position relative, otherwise drag-in can not detect the x/y coordinates correctly");return}this._mainDomElement.style.pointerEvents="none";let r=n.querySelector("."+S);r||(r=document.createElement("div"),r.classList.add(S),n.appendChild(r)),r.classList.remove(F.DISPLAY_NONE),e.target.getAttribute("draggable")||console.warn(`Draggable not detected correctly! Did you add draggable="true" to the element? In Sarafi only 'draggable' is too less`);const o=n.querySelector("."+O);this._currentDrag.event=e;const a=e.target,c=a.cloneNode(),l=a.getBoundingClientRect();c.style.width=`${l.width}px`,c.style.height=`${l.height}px`,this._currentDrag.ghost=new $t(c),this._currentDrag.offset||(this._currentDrag.offset={x:0,y:0});const{clientX:d,clientY:u}=b(e,this._firefoxDragPosition);this._currentDrag.offset.x=d-l.left,this._currentDrag.offset.y=u-l.top,e instanceof DragEvent&&e.dataTransfer&&e.dataTransfer.setDragImage&&e.dataTransfer.setDragImage(o,0,0);const{x:g,y:_}=dt(n,this._currentDrag.event||e,this._firefoxDragPosition),y=Math.max(1,g),w=Math.max(1,_);this.isDragging=!0,this._instance.dragInObject(t,y,w,s)}dragUpdate(t){var e;const s=this._mainDomElement.parentNode,{x:n,y:r}=dt(s,t,this._firefoxDragPosition);if(n===0&&r===0)return;const o=Math.max(1,n),a=Math.max(1,r);if(o===1&&a===1)return;let c=o,l=a;if(f(t)){const v=((e=this._options.settings)==null?void 0:e.fingerSize)||0;c=Math.max(2,o+v),l=Math.max(2,a-v)}const{x:d,y:u,options:g}=this._onBeforeUpdateDrag(c,l,{}),_=g||{settings:{},ghost:{}};_.ghost||(_.ghost={}),_.ghost.visibleIn&&_.ghost.hiddenIn||(_.ghost.hiddenIn=this._mainDomElement.getBoundingClientRect());const y=typeof d=="number"?d:c,w=typeof u=="number"?u:l;if(this._currentDrag.ghost){const{clientX:v,clientY:ee}=b(t,this._firefoxDragPosition);this._currentDrag.ghost.updateDragGhost(v,ee,_)}this._instance.updateDrag(y,w,{})}dragEnd(){this._mainDomElement.style.pointerEvents="all";const t=this._mainDomElement.parentNode;this.isDragging=!1,this._instance.dragInObjectEnd(),this._currentDrag.ghost&&(this._currentDrag.ghost.removeDragGhost(),this._currentDrag.ghost=null),this._currentDrag={},this._firefoxDragPosition={x:0,y:0};const e=t.querySelector("."+S);e&&e.classList.add(F.DISPLAY_NONE)}touchStart(t,e,s="rml_id"){var n,r,o,a;e.preventDefault();const c=(d,u)=>{this.dragStart(t,u,s)},l={};typeof((r=(n=this._options)==null?void 0:n.settings)==null?void 0:r.touchDragDelay)=="number"&&(l.delay=this._options.settings.touchDragDelay),(a=(o=this._options)==null?void 0:o.settings)!=null&&a.touchDragEpsilon&&(l.epsilon=this._options.settings.touchDragEpsilon),this._currentTouch=new mt(void 0,{onTouchDragStart:c},l),this._currentTouch.onStart(e)}touchMove(t){this._currentTouch&&this._currentTouch.onMove(t),this._currentDrag.event&&this.dragUpdate(t)}touchEnd(){this._currentTouch&&this._currentTouch.onEnd(),this._currentTouch=null,this.dragEnd()}dispose(){document.removeEventListener("dragover",this._firefoxFallback)}releaseInput(t){}}const zt=Object.freeze(Object.defineProperty({__proto__:null,DragInFromWebsiteStrategy:jt},Symbol.toStringTag,{value:"Module"})),Vt=i=>`[data-rml-custom-view="${i}"]`,k=i=>{i.preventDefault(),i.stopPropagation()},qt=(i,t,e,s)=>{const n=e-i,r=s-t;return Math.sqrt(n*n+r*r)};class Jt{constructor({onCustomDragStart:t},e={}){h(this,"_startX",0),h(this,"_startY",0),h(this,"_lastX",0),h(this,"_lastY",0),h(this,"_epsilon"),h(this,"_isWaiting",!1),h(this,"_onCustomDragStart"),this._epsilon=typeof e.epsilon=="number"?e.epsilon:ut,this._onCustomDragStart=t}onMove(t){this._lastX=t.clientX,this._lastY=t.clientY,this._isWaiting&&qt(this._startX,this._startY,this._lastX,this._lastY)>this._epsilon&&(this._onCustomDragStart(t),this._isWaiting=!1)}onStart(t){this._startX=t.clientX,this._startY=t.clientY,this.onMove(t),this._isWaiting=!0}onEnd(){this._reset()}_reset(){this._startX=0,this._startY=0,this._lastX=0,this._lastY=0,this._isWaiting=!1}}const W="data-rml-old-draggable",Kt=void 0,ft=(i,t)=>{const e=f(i),s={delay:e?G:Yt,epsilon:e?Y:ut};if(!t)return s;if(!e&&!(i instanceof MouseEvent))return console.warn("Unsupported event! It is not TouchEvent and also not MouseEvent"),s;const{delayKey:n,epsilonKey:r}=e?{delayKey:"touchDragDelay",epsilonKey:"touchDragEpsilon"}:{delayKey:"customDragDelay",epsilonKey:"customDragEpsilon"};return typeof t[n]=="number"&&(s.delay=t.touchDragDelay),typeof t[r]=="number"&&(s.epsilon=t.touchDragEpsilon),s},Qt=i=>{let t="",e=B,s=U;if(!i)return{url:x,width:e,height:s};const n=i;if(n instanceof HTMLElement){const r=n.getBoundingClientRect(),o=n.getAttribute("data-rml-ghost-url"),a=n.getAttribute("data-rml-ghost-width"),c=n.getAttribute("data-rml-ghost-height");o?t=o:!o&&n instanceof HTMLImageElement&&n.src&&(t=n.src),t?(e=r.width,s=r.height):t=x,e=a?parseInt(a,10):e,s=c?parseInt(c,10):s}return{url:t||x,width:e,height:s}};class Zt{constructor(t,e,s){h(this,"_options",{}),h(this,"_instance"),h(this,"_viewName"),h(this,"_currentCustomDrag",null),h(this,"_currentBb",null),h(this,"_startTarget",null),h(this,"_onBeforeUpdateDrag",()=>({})),h(this,"isDragging",!1),this._instance=t,this._options=e||{},this._viewName=s}beforeUpdateGhost(t){this._onBeforeUpdateDrag=t}async _dragStart(t,e,s="rml_id"){this._startTarget&&(this._startTarget.style.pointerEvents="none",this._startTarget.style.userSelect="none",this._startTarget.setAttribute(W,this._startTarget.draggable.toString()),this._startTarget.draggable=!1,this._startTarget.removeEventListener("dragstart",k),this._startTarget.addEventListener("dragstart",k)),this._currentBb=await this._instance.getBoundingClientRect(Vt(this._viewName));const{clientX:n,clientY:r}=b(e),o=this._currentBb.x+n,a=this._currentBb.y+r;this.isDragging=!0,this._instance.dragInObject(t,o,a,s)}_dragUpdate(t){if(document.body.focus(),this._currentCustomDrag&&this._currentCustomDrag.onMove(t),!this._currentBb||!this.isDragging)return;const{clientX:e,clientY:s}=b(t),{url:n,width:r,height:o}=Qt(this._startTarget),a=this._currentBb.x+e,c=this._currentBb.y+s,l=this._options||{},d={ghost:{visibleIn:{x:this._currentBb.x-(l.dragInOverlapX||0),y:this._currentBb.y+(l.dragInOverlapY||0),width:this._currentBb.width+(l.dragInOverlapX||0),height:this._currentBb.height+(l.dragInOverlapY||0)},url:n,width:r,height:o},mode:"custom-view"},{x:u,y:g,options:_}=this._onBeforeUpdateDrag(a,c,d),y=typeof u=="number"?u:a,w=typeof g=="number"?g:c,v=_||d;this._instance.updateDrag(y,w,v)}_dragEnd(){this._currentCustomDrag&&this._currentCustomDrag.onEnd(),this._currentCustomDrag=null,this.isDragging=!1,this._currentBb=null,this._resetStartTarget(),this._instance.enableEvents(),this._instance.dragInObjectEnd()}dragStart(t,e,s){this._instance.disableEvents(),this._startTarget=e.target;const n=(r,o)=>{this._dragStart(t,o,s)};this._currentCustomDrag=f(e)?new mt(Kt,{onTouchDragStart:n},ft(e,this._options)):new Jt({onCustomDragStart:r=>this._dragStart(t,r,s)},ft(e,this._options)),this._currentCustomDrag.onStart(e)}dragEnd(){this._dragEnd()}dragUpdate(t){this._dragUpdate(t)}touchStart(t,e,s="rml_id"){this.dragStart(t,e,s)}touchMove(t){this.dragUpdate(t)}touchEnd(){this.dragEnd()}dispose(){}_resetStartTarget(){this._startTarget&&(this._startTarget.style.pointerEvents="",this._startTarget.style.userSelect="",this._startTarget.draggable=this._startTarget.getAttribute(W)==="true",this._startTarget.removeAttribute(W),this._startTarget.removeEventListener("dragstart",k))}releaseInput(t){this._currentCustomDrag&&this._currentCustomDrag.onEnd(),this._resetStartTarget()}}const te=Object.freeze(Object.defineProperty({__proto__:null,DragInFromCustomViewStrategy:Zt},Symbol.toStringTag,{value:"Module"}));return Pt});
|