@roomle/embedding-lib 5.26.0-alpha.2 → 5.26.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.
- package/docs/md/web/embedding/CHANGELOG.md +3 -6
- package/package.json +1 -1
- package/packages/web-sdk/packages/typings/kernel.d.ts +1 -0
- package/packages/web-sdk/packages/typings/rapi-types.d.ts +2 -1
- package/roomle-embedding-lib.es.js +80 -79
- package/roomle-embedding-lib.es.min.js +1 -1
- package/roomle-embedding-lib.umd.js +1 -1
- package/roomle-embedding-lib.umd.min.js +1 -1
- package/src/configurator/embedding/types.d.ts +1 -0
- package/src/planner/components/catalog/CatalogBreadcrumb.vue.d.ts +18 -0
- package/src/planner/components/catalog/CatalogEmptyState.vue.d.ts +10 -0
- package/src/planner/components/catalog/CatalogLevels.vue.d.ts +20 -0
- package/src/planner/components/catalog/CatalogNavigation.vue.d.ts +42 -0
- package/src/planner/components/catalog/CatalogProducts.vue.d.ts +24 -0
- package/src/planner/components/catalog/ProductCard.vue.d.ts +14 -0
- package/src/planner/components/catalog/ProductGrid.vue.d.ts +14 -0
|
@@ -1,9 +1,6 @@
|
|
|
1
|
-
## [5.26.0-alpha.
|
|
1
|
+
## [5.26.0-alpha.3](https://github.com/roomle-dev/roomle-ui/compare/embedding-lib-v5.26.0-alpha.2...embedding-lib-v5.26.0-alpha.3) (2025-08-19)
|
|
2
2
|
|
|
3
3
|
|
|
4
|
-
###
|
|
4
|
+
### Features
|
|
5
5
|
|
|
6
|
-
*
|
|
7
|
-
* get the catalog showing in the demo ([1138ea6](https://github.com/roomle-dev/roomle-ui/commit/1138ea60ec99043b5776bda25d622a6b509715e2))
|
|
8
|
-
* infinite loop on dragging ext obj ([0f925f7](https://github.com/roomle-dev/roomle-ui/commit/0f925f741013ff7ab0bff11aeb3383c8d2c74456))
|
|
9
|
-
* removal of unused code ([e184154](https://github.com/roomle-dev/roomle-ui/commit/e184154b89ba598376f06373934316b736fe94ce))
|
|
6
|
+
* Desktop Room Designer - Catalog management new levels ([4eb4179](https://github.com/roomle-dev/roomle-ui/commit/4eb41797f5c032b75bf2b085f9c5d1e7a8287283))
|
package/package.json
CHANGED
|
@@ -147,6 +147,7 @@ export interface UiPossibleChild extends RapiElement {
|
|
|
147
147
|
isComponent: boolean;
|
|
148
148
|
group: string;
|
|
149
149
|
possible: boolean;
|
|
150
|
+
subTags: UiPossibleChild[];
|
|
150
151
|
}
|
|
151
152
|
export interface UiPossibleChildTag extends RapiTag {
|
|
152
153
|
possibleChildren: UiPossibleChild[];
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { Enumify } from '../common-core/src/types';
|
|
2
2
|
import { InitDataDefinition } from '../common-core/src/utils/shims';
|
|
3
|
+
import { UiPossibleChild } from './kernel';
|
|
3
4
|
|
|
4
5
|
export type RapiId = string;
|
|
5
6
|
export type AssetUrl = string;
|
|
@@ -357,7 +358,7 @@ export interface RapiElement extends RapiJson, RoomleSortable, Element {
|
|
|
357
358
|
configuration?: ConfigurationString;
|
|
358
359
|
externalIdentifier: string;
|
|
359
360
|
tags: RapiId[];
|
|
360
|
-
[key: string]: string | number | boolean | AssetUrl | RapiId | RapiId[] | LinksCollection | AdditionalInfo[] | AssetItem;
|
|
361
|
+
[key: string]: string | number | boolean | AssetUrl | RapiId | RapiId[] | LinksCollection | AdditionalInfo[] | UiPossibleChild[] | AssetItem;
|
|
361
362
|
}
|
|
362
363
|
export declare const CATALOG_INFOS_TYPES: {
|
|
363
364
|
readonly PARAMETER: "parameter";
|
|
@@ -4,8 +4,8 @@ class S {
|
|
|
4
4
|
_incomingMessageBus = null;
|
|
5
5
|
_outgoingMessageBus = null;
|
|
6
6
|
_execMessage = null;
|
|
7
|
-
constructor(e, t, r,
|
|
8
|
-
this._side = e, this._incomingMessageBus = t, this._outgoingMessageBus = r, this._execMessage =
|
|
7
|
+
constructor(e, t, r, o) {
|
|
8
|
+
this._side = e, this._incomingMessageBus = t, this._outgoingMessageBus = r, this._execMessage = o, this._incomingMessageBus && this._incomingMessageBus.addEventListener(
|
|
9
9
|
"message",
|
|
10
10
|
this._handleMessage.bind(this)
|
|
11
11
|
);
|
|
@@ -17,37 +17,37 @@ class S {
|
|
|
17
17
|
this._execMessage = e;
|
|
18
18
|
}
|
|
19
19
|
sendMessage(e, t = []) {
|
|
20
|
-
return new Promise((r,
|
|
20
|
+
return new Promise((r, o) => {
|
|
21
21
|
if (this._incomingMessageBus === this._outgoingMessageBus)
|
|
22
22
|
return r(void 0);
|
|
23
23
|
const i = new MessageChannel();
|
|
24
|
-
i.port1.onmessage = (
|
|
25
|
-
if (!
|
|
26
|
-
return i.port1.close(), i.port2.close(),
|
|
24
|
+
i.port1.onmessage = (n) => {
|
|
25
|
+
if (!n || !n.data)
|
|
26
|
+
return i.port1.close(), i.port2.close(), o(
|
|
27
27
|
new Error(
|
|
28
28
|
this._side + " received message but response can not be interpreted"
|
|
29
29
|
)
|
|
30
30
|
);
|
|
31
31
|
let l;
|
|
32
32
|
try {
|
|
33
|
-
l = JSON.parse(
|
|
33
|
+
l = JSON.parse(n.data);
|
|
34
34
|
} catch (u) {
|
|
35
|
-
return i.port1.close(), i.port2.close(), this._prepareError(u),
|
|
35
|
+
return i.port1.close(), i.port2.close(), this._prepareError(u), o(u);
|
|
36
36
|
}
|
|
37
|
-
l.error ?
|
|
37
|
+
l.error ? o(l.error) : l.result !== void 0 ? r(l.result) : r(void 0), i.port1.close(), i.port2.close();
|
|
38
38
|
};
|
|
39
39
|
let a = "";
|
|
40
40
|
try {
|
|
41
41
|
a = JSON.stringify({ message: e, args: t });
|
|
42
42
|
} catch {
|
|
43
|
-
return
|
|
43
|
+
return o(
|
|
44
44
|
new Error(
|
|
45
45
|
this._side + ": can not create command because it is not JSON.stringify able"
|
|
46
46
|
)
|
|
47
47
|
);
|
|
48
48
|
}
|
|
49
49
|
if (!this._outgoingMessageBus)
|
|
50
|
-
return
|
|
50
|
+
return o(new Error(this._side + ": outgoing bus not set yet"));
|
|
51
51
|
this._outgoingMessageBus.postMessage(a, "*", [
|
|
52
52
|
i.port2
|
|
53
53
|
]);
|
|
@@ -65,16 +65,16 @@ class S {
|
|
|
65
65
|
})
|
|
66
66
|
);
|
|
67
67
|
Array.isArray(r.args) || (r.args = [r.args]);
|
|
68
|
-
const
|
|
69
|
-
if (
|
|
68
|
+
const o = this._execMessage(r, e);
|
|
69
|
+
if (o === void 0)
|
|
70
70
|
return;
|
|
71
|
-
|
|
71
|
+
o.then(
|
|
72
72
|
(i = {}) => {
|
|
73
|
-
let a,
|
|
74
|
-
typeof i == "object" && i !== null && (a = i.error,
|
|
73
|
+
let a, n;
|
|
74
|
+
typeof i == "object" && i !== null && (a = i.error, n = i.result), a ? t.postMessage(
|
|
75
75
|
JSON.stringify({ error: a })
|
|
76
|
-
) :
|
|
77
|
-
JSON.stringify({ result:
|
|
76
|
+
) : n !== void 0 ? t.postMessage(
|
|
77
|
+
JSON.stringify({ result: n })
|
|
78
78
|
) : t.postMessage(
|
|
79
79
|
JSON.stringify({ result: i })
|
|
80
80
|
);
|
|
@@ -117,7 +117,7 @@ const f = ".", _ = {
|
|
|
117
117
|
throw new Error(
|
|
118
118
|
'Configurator ID is not a string type: "' + typeof s + '"'
|
|
119
119
|
);
|
|
120
|
-
const t = e.customApiUrl ? e.customApiUrl : "https://api.roomle.com/v2", r = e.overrideTenant || 9,
|
|
120
|
+
const t = e.customApiUrl ? e.customApiUrl : "https://api.roomle.com/v2", r = e.overrideTenant || 9, o = t + "/configurators/" + s, i = "roomle_portal_v2", a = "03-" + window.btoa((/* @__PURE__ */ new Date()).toISOString() + ";anonymous;" + i), n = () => {
|
|
121
121
|
const g = {
|
|
122
122
|
apiKey: i,
|
|
123
123
|
currentTenant: r,
|
|
@@ -128,9 +128,9 @@ const f = ".", _ = {
|
|
|
128
128
|
platform: "web"
|
|
129
129
|
};
|
|
130
130
|
return new Headers(g);
|
|
131
|
-
}, l = new Request(
|
|
131
|
+
}, l = new Request(o, {
|
|
132
132
|
method: "GET",
|
|
133
|
-
headers:
|
|
133
|
+
headers: n(),
|
|
134
134
|
mode: "cors",
|
|
135
135
|
cache: "default"
|
|
136
136
|
}), u = await fetch(l), { configurator: d } = await u.json();
|
|
@@ -163,9 +163,9 @@ const f = ".", _ = {
|
|
|
163
163
|
if (Array.isArray(e.languages) && e.languages.length > 0)
|
|
164
164
|
return e.languages[0].substr(0, 2);
|
|
165
165
|
for (let t = 0, r = T.length; t < r; t++) {
|
|
166
|
-
const
|
|
167
|
-
if (
|
|
168
|
-
return
|
|
166
|
+
const o = e[T[t]];
|
|
167
|
+
if (o)
|
|
168
|
+
return o.substr(0, 2);
|
|
169
169
|
}
|
|
170
170
|
return "en";
|
|
171
171
|
}, x = (s, e) => {
|
|
@@ -204,7 +204,8 @@ const k = (s) => JSON.parse(JSON.stringify(s)), G = {
|
|
|
204
204
|
featureFlags: {
|
|
205
205
|
mocAr: !0,
|
|
206
206
|
wallAutoHeight: !1,
|
|
207
|
-
openCloseAnimation: !1
|
|
207
|
+
openCloseAnimation: !1,
|
|
208
|
+
enableTwoLevelCatalog: !1
|
|
208
209
|
},
|
|
209
210
|
rotationSnapDegrees: 10,
|
|
210
211
|
interactionsCollapsed: !1
|
|
@@ -218,8 +219,8 @@ const k = (s) => JSON.parse(JSON.stringify(s)), G = {
|
|
|
218
219
|
for (const t of e) {
|
|
219
220
|
const r = s[t];
|
|
220
221
|
if (!Array.isArray(r) && typeof r == "object" && r !== null && E(r), Array.isArray(r))
|
|
221
|
-
for (const
|
|
222
|
-
E(
|
|
222
|
+
for (const o of r)
|
|
223
|
+
E(o);
|
|
223
224
|
(r === "true" || r === "false") && (s[t] = r === "true");
|
|
224
225
|
}
|
|
225
226
|
}, $ = (s, e) => {
|
|
@@ -263,39 +264,39 @@ class A {
|
|
|
263
264
|
}
|
|
264
265
|
handleSetup(e) {
|
|
265
266
|
const { methods: t, callbacks: r } = e;
|
|
266
|
-
t.forEach((
|
|
267
|
-
const i =
|
|
268
|
-
this[a] || (this[a] = {}), this[a][
|
|
267
|
+
t.forEach((o) => {
|
|
268
|
+
const i = o.split(f), a = i[0], n = i[1];
|
|
269
|
+
this[a] || (this[a] = {}), this[a][n] = (function() {
|
|
269
270
|
if (!this._messageHandler) {
|
|
270
271
|
console.error("MessageHandler not set");
|
|
271
272
|
return;
|
|
272
273
|
}
|
|
273
|
-
return this._messageHandler.sendMessage(
|
|
274
|
+
return this._messageHandler.sendMessage(o, [...arguments]);
|
|
274
275
|
}).bind(this);
|
|
275
|
-
}), r.forEach((
|
|
276
|
-
const i =
|
|
277
|
-
this[a] || (this[a] = {}), this[a][
|
|
276
|
+
}), r.forEach((o) => {
|
|
277
|
+
const i = o.split(f), a = i[0], n = i[1], l = i[2];
|
|
278
|
+
this[a] || (this[a] = {}), this[a][n] || (this[a][n] = {}), this[a][n][l] = () => {
|
|
278
279
|
};
|
|
279
280
|
}), this.isSetupDone = !0;
|
|
280
281
|
}
|
|
281
282
|
executeMessage({ message: e, args: t }) {
|
|
282
|
-
const r = e.split(f),
|
|
283
|
-
if (a && this[
|
|
284
|
-
const
|
|
283
|
+
const r = e.split(f), o = r[0], i = r[1], a = r.length === 3 ? r[2] : null;
|
|
284
|
+
if (a && this[o][i][a]) {
|
|
285
|
+
const n = this[o][i][a](
|
|
285
286
|
...t
|
|
286
287
|
);
|
|
287
|
-
return
|
|
288
|
+
return n instanceof Promise ? n.then((l) => ({ result: l })) : n !== void 0 ? Promise.resolve({ result: n }) : Promise.resolve({ result: null });
|
|
288
289
|
}
|
|
289
290
|
return Promise.reject('Message "' + e + '" is unkown');
|
|
290
291
|
}
|
|
291
292
|
setupPlugins(e, t, r = "website") {
|
|
292
|
-
for (const
|
|
293
|
-
typeof
|
|
293
|
+
for (const o of e)
|
|
294
|
+
typeof o == "string" && o === "dragIn" ? this.pluginsLoaded.push(
|
|
294
295
|
new Promise((i, a) => {
|
|
295
296
|
try {
|
|
296
|
-
import("./drag-in-DuufO5eB.mjs").then((
|
|
297
|
-
({ DragIn:
|
|
298
|
-
const l = new
|
|
297
|
+
import("./drag-in-DuufO5eB.mjs").then((n) => n.l).then(
|
|
298
|
+
({ DragIn: n }) => {
|
|
299
|
+
const l = new n(
|
|
299
300
|
this.ui,
|
|
300
301
|
t,
|
|
301
302
|
r,
|
|
@@ -306,26 +307,26 @@ class A {
|
|
|
306
307
|
}, a);
|
|
307
308
|
}
|
|
308
309
|
);
|
|
309
|
-
} catch (
|
|
310
|
-
a(
|
|
310
|
+
} catch (n) {
|
|
311
|
+
a(n);
|
|
311
312
|
}
|
|
312
313
|
})
|
|
313
|
-
) :
|
|
314
|
+
) : o.name && o.loader && this.pluginsLoaded.push(
|
|
314
315
|
new Promise((i, a) => {
|
|
315
316
|
try {
|
|
316
|
-
|
|
317
|
-
const l = new
|
|
317
|
+
o.loader().then((n) => {
|
|
318
|
+
const l = new n(
|
|
318
319
|
this.ui,
|
|
319
320
|
t,
|
|
320
321
|
r,
|
|
321
322
|
this.viewName
|
|
322
323
|
);
|
|
323
324
|
l.init().then(() => {
|
|
324
|
-
this.plugins[
|
|
325
|
+
this.plugins[o.name] = l, i();
|
|
325
326
|
}, a);
|
|
326
327
|
});
|
|
327
|
-
} catch (
|
|
328
|
-
a(
|
|
328
|
+
} catch (n) {
|
|
329
|
+
a(n);
|
|
329
330
|
}
|
|
330
331
|
})
|
|
331
332
|
);
|
|
@@ -333,8 +334,8 @@ class A {
|
|
|
333
334
|
}
|
|
334
335
|
const M = () => {
|
|
335
336
|
let s, e;
|
|
336
|
-
return { promise: new Promise((r,
|
|
337
|
-
s = r, e =
|
|
337
|
+
return { promise: new Promise((r, o) => {
|
|
338
|
+
s = r, e = o;
|
|
338
339
|
}), resolve: s, reject: e };
|
|
339
340
|
}, R = (s, e, t) => {
|
|
340
341
|
let r = null;
|
|
@@ -342,10 +343,10 @@ const M = () => {
|
|
|
342
343
|
get() {
|
|
343
344
|
return r || t;
|
|
344
345
|
},
|
|
345
|
-
set(
|
|
346
|
-
|
|
346
|
+
set(o) {
|
|
347
|
+
o?.mute ? r = o.value : (console.warn(
|
|
347
348
|
"You override Roomle defined behaviour. To disalbe this warning pass in an object with the following properties"
|
|
348
|
-
), console.warn("{ mute: true, value: () => void }"), r =
|
|
349
|
+
), console.warn("{ mute: true, value: () => void }"), r = o);
|
|
349
350
|
}
|
|
350
351
|
});
|
|
351
352
|
}, L = () => window.innerHeight * 0.01 + "px", I = (s) => {
|
|
@@ -362,24 +363,24 @@ const M = () => {
|
|
|
362
363
|
OVERFLOW_HIDDEN: "rml-overflow-hidden"
|
|
363
364
|
}, p = /* @__PURE__ */ new Map();
|
|
364
365
|
class X extends A {
|
|
365
|
-
static createPlanner(e, t, r,
|
|
366
|
+
static createPlanner(e, t, r, o = []) {
|
|
366
367
|
return this._create(
|
|
367
368
|
e,
|
|
368
369
|
t,
|
|
369
370
|
r,
|
|
370
|
-
|
|
371
|
+
o
|
|
371
372
|
);
|
|
372
373
|
}
|
|
373
374
|
static async connect(e, t = []) {
|
|
374
375
|
const r = new A();
|
|
375
376
|
r.viewName = e;
|
|
376
|
-
const { resolve:
|
|
377
|
+
const { resolve: o, promise: i } = M(), { resolve: a, promise: n } = M(), l = ({
|
|
377
378
|
message: g,
|
|
378
379
|
args: h
|
|
379
380
|
}) => {
|
|
380
381
|
switch (g) {
|
|
381
382
|
case m.REGISTER_CUSTOM_VIEW_DONE:
|
|
382
|
-
|
|
383
|
+
o();
|
|
383
384
|
break;
|
|
384
385
|
case m.RETURN_METHODS:
|
|
385
386
|
r.handleSetup(h[0]), a();
|
|
@@ -399,7 +400,7 @@ class X extends A {
|
|
|
399
400
|
return u.sendMessage(
|
|
400
401
|
m.REGISTER_CUSTOM_VIEW,
|
|
401
402
|
d
|
|
402
|
-
), await i, u.sendMessage(m.GET_METHODS, d), await
|
|
403
|
+
), await i, u.sendMessage(m.GET_METHODS, d), await n, r.setupPlugins(
|
|
403
404
|
t,
|
|
404
405
|
document.body,
|
|
405
406
|
"custom-view"
|
|
@@ -411,12 +412,12 @@ class X extends A {
|
|
|
411
412
|
* @param container DOM container in which the configurator should be placed
|
|
412
413
|
* @param initData settings with which the configurator should be started
|
|
413
414
|
*/
|
|
414
|
-
static createConfigurator(e, t, r,
|
|
415
|
+
static createConfigurator(e, t, r, o = []) {
|
|
415
416
|
return this._create(
|
|
416
417
|
e,
|
|
417
418
|
t,
|
|
418
419
|
r,
|
|
419
|
-
|
|
420
|
+
o
|
|
420
421
|
);
|
|
421
422
|
}
|
|
422
423
|
/**
|
|
@@ -426,12 +427,12 @@ class X extends A {
|
|
|
426
427
|
* @param container DOM container in which the configurator should be placed
|
|
427
428
|
* @param initData settings with which the configurator should be started
|
|
428
429
|
*/
|
|
429
|
-
static create(e, t, r,
|
|
430
|
+
static create(e, t, r, o) {
|
|
430
431
|
return this._create(
|
|
431
432
|
e,
|
|
432
433
|
t,
|
|
433
434
|
r,
|
|
434
|
-
|
|
435
|
+
o
|
|
435
436
|
);
|
|
436
437
|
}
|
|
437
438
|
/**
|
|
@@ -440,37 +441,37 @@ class X extends A {
|
|
|
440
441
|
* @param container DOM container in which the configurator should be placed
|
|
441
442
|
* @param initData settings with which the configurator should be started
|
|
442
443
|
*/
|
|
443
|
-
static createViewer(e, t, r,
|
|
444
|
+
static createViewer(e, t, r, o = []) {
|
|
444
445
|
return this._create(
|
|
445
446
|
e,
|
|
446
447
|
t,
|
|
447
448
|
r,
|
|
448
|
-
|
|
449
|
+
o
|
|
449
450
|
);
|
|
450
451
|
}
|
|
451
|
-
static async _create(e, t, r,
|
|
452
|
+
static async _create(e, t, r, o) {
|
|
452
453
|
return new Promise(async (i, a) => {
|
|
453
454
|
try {
|
|
454
|
-
const
|
|
455
|
+
const n = O(
|
|
455
456
|
z(),
|
|
456
457
|
V(r)
|
|
457
458
|
);
|
|
458
|
-
K(
|
|
459
|
+
K(n);
|
|
459
460
|
const l = await C(
|
|
460
461
|
e,
|
|
461
|
-
|
|
462
|
+
n
|
|
462
463
|
);
|
|
463
|
-
r = $(l,
|
|
464
|
+
r = $(l, n);
|
|
464
465
|
const u = new this(
|
|
465
466
|
l,
|
|
466
467
|
t,
|
|
467
468
|
r,
|
|
468
|
-
|
|
469
|
+
o,
|
|
469
470
|
i
|
|
470
471
|
);
|
|
471
472
|
return await Promise.allSettled(u.pluginsLoaded), u;
|
|
472
|
-
} catch (
|
|
473
|
-
return a(
|
|
473
|
+
} catch (n) {
|
|
474
|
+
return a(n);
|
|
474
475
|
}
|
|
475
476
|
});
|
|
476
477
|
}
|
|
@@ -479,7 +480,7 @@ class X extends A {
|
|
|
479
480
|
_configuratorSettings;
|
|
480
481
|
_initData = {};
|
|
481
482
|
_iframe;
|
|
482
|
-
constructor(e, t, r,
|
|
483
|
+
constructor(e, t, r, o, i) {
|
|
483
484
|
if (super(), !e || typeof e.id != "string")
|
|
484
485
|
throw new Error(
|
|
485
486
|
"Please provide a correct configuratorId, you get the correct ID from your Roomle Contact Person"
|
|
@@ -503,15 +504,15 @@ class X extends A {
|
|
|
503
504
|
`, document.head.appendChild(d);
|
|
504
505
|
}
|
|
505
506
|
this._executeMessage = this._executeMessage.bind(this);
|
|
506
|
-
const
|
|
507
|
+
const n = new S(
|
|
507
508
|
"website",
|
|
508
509
|
window,
|
|
509
510
|
null,
|
|
510
511
|
this._executeMessage
|
|
511
512
|
);
|
|
512
|
-
this.setMessageHandler(
|
|
513
|
+
this.setMessageHandler(n), this._onResize = this._onResize.bind(this), y() && window.addEventListener("resize", this._onResize), this._container = t, this._initData = r, this._configuratorSettings = e;
|
|
513
514
|
const l = this._createIframe();
|
|
514
|
-
this._onUseFullPage = this._onUseFullPage.bind(this), this._onBackToWebsite = this._onBackToWebsite.bind(this), this._waitForIframe = i, this._container.appendChild(l), this._iframe = l, this.setupPlugins(
|
|
515
|
+
this._onUseFullPage = this._onUseFullPage.bind(this), this._onBackToWebsite = this._onBackToWebsite.bind(this), this._waitForIframe = i, this._container.appendChild(l), this._iframe = l, this.setupPlugins(o, this._iframe), p.set(t, !0);
|
|
515
516
|
}
|
|
516
517
|
teardown() {
|
|
517
518
|
this._container && p.delete(this._container);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
class e{_side;_incomingMessageBus=null;_outgoingMessageBus=null;_execMessage=null;constructor(e,t,s,r){this._side=e,this._incomingMessageBus=t,this._outgoingMessageBus=s,this._execMessage=r,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,r)=>{if(this._incomingMessageBus===this._outgoingMessageBus)return s(void 0);const i=new MessageChannel;i.port1.onmessage=e=>{if(!e||!e.data)return i.port1.close(),i.port2.close(),r(new Error(this._side+" received message but response can not be interpreted"));let t;try{t=JSON.parse(e.data)}catch(e){return i.port1.close(),i.port2.close(),this._prepareError(e),r(e)}t.error?r(t.error):void 0!==t.result?s(t.result):s(void 0),i.port1.close(),i.port2.close()};let n="";try{n=JSON.stringify({message:e,args:t})}catch{return r(new Error(this._side+": can not create command because it is not JSON.stringify able"))}if(!this._outgoingMessageBus)return r(new Error(this._side+": outgoing bus not set yet"));this._outgoingMessageBus.postMessage(n,"*",[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 r=this._execMessage(s,e);if(void 0===r)return;r.then((e={})=>{let s,r;"object"==typeof e&&null!==e&&(s=e.error,r=e.result),s?t.postMessage(JSON.stringify({error:s})):void 0!==r?t.postMessage(JSON.stringify({result:r})):t.postMessage(JSON.stringify({result:e}))},e=>{t.postMessage(JSON.stringify({error:this._prepareError(e)}))})}catch(e){t.postMessage(JSON.stringify({error:this._prepareError(e)}))}}_prepareError(e){return"string"==typeof e?this._side+": "+e:(e.message=this._side+": "+e.message,e.message)}}const t=["127.0.0.1","localhost","0.0.0.0"],s=["language","browserLanguage","userLanguage","systemLanguage"],r=(e,t)=>{for(const s in t)try{t[s].constructor===Object?e[s]=r(e[s],t[s]):e[s]=t[s]}catch{e[s]=t[s]}return e};var i=(e=>(e.BOTTOM_BAR="bottom_bar",e.PARTLIST_BOUNDS="partlist_bounds",e.INTERACTION_NOTES="interaction_notes",e.PARAMETER_GROUPS="parameter_groups",e))(i||{});const n={mobileLandscape:!0,floorMaterialRootTag:"materials_root",buttons:{renderimage:!0,requestproduct:!0,requestplan:!0,load_product:!0,partlist_print:!0},elements:{[i.INTERACTION_NOTES]:!0},helpcenter:{roomdesigner:!0,configurator:!1,disable:!1},firstPersonView:!0,saveToIdb:!0,featureFlags:{mocAr:!0,wallAutoHeight:!1,openCloseAnimation:!1},rotationSnapDegrees:10,interactionsCollapsed:!1},a=e=>{if(!e)return;const t=Object.keys(e);for(const s of t){const t=e[s];if(!Array.isArray(t)&&"object"==typeof t&&null!==t&&a(t),Array.isArray(t))for(const e of t)a(e);("true"===t||"false"===t)&&(e[s]="true"===t)}},o=()=>/(android)/i.test(navigator.userAgent);class l{_messageHandler=null;isSetupDone=!1;viewName="main";plugins={};pluginsLoaded=[];ui={callbacks:null};extended={callbacks:null};configurator={callbacks:null};analytics={callbacks:{}};rapi={callbacks:{}};global={callbacks:{}};setMessageHandler(e){this._messageHandler=e}handleSetup(e){const{methods:t,callbacks:s}=e;t.forEach(e=>{const t=e.split("."),s=t[0],r=t[1];this[s]||(this[s]={}),this[s][r]=function(){if(this._messageHandler)return this._messageHandler.sendMessage(e,[...arguments])}.bind(this)}),s.forEach(e=>{const t=e.split("."),s=t[0],r=t[1],i=t[2];this[s]||(this[s]={}),this[s][r]||(this[s][r]={}),this[s][r][i]=()=>{}}),this.isSetupDone=!0}executeMessage({message:e,args:t}){const s=e.split("."),r=s[0],i=s[1],n=3===s.length?s[2]:null;if(n&&this[r][i][n]){const e=this[r][i][n](...t);return e instanceof Promise?e.then(e=>({result:e})):void 0!==e?Promise.resolve({result:e}):Promise.resolve({result:null})}return Promise.reject('Message "'+e+'" is unkown')}setupPlugins(e,t,s="website"){for(const r of e)"string"==typeof r&&"dragIn"===r?this.pluginsLoaded.push(new Promise((e,r)=>{try{import("./drag-in-DTA1FCDc.mjs").then(e=>e.l).then(({DragIn:i})=>{const n=new i(this.ui,t,s,this.viewName);n.init().then(()=>{this.plugins.dragIn=n,e()},r)})}catch(e){r(e)}})):r.name&&r.loader&&this.pluginsLoaded.push(new Promise((e,i)=>{try{r.loader().then(n=>{const a=new n(this.ui,t,s,this.viewName);a.init().then(()=>{this.plugins[r.name]=a,e()},i)})}catch(e){i(e)}}))}}const c=()=>{let e,t;return{promise:new Promise((s,r)=>{e=s,t=r}),resolve:e,reject:t}},u=(e,t,s)=>{let r=null;Object.defineProperty(e,t,{get:()=>r||s,set(e){r=e?.mute?e.value:e}})},g=()=>.01*window.innerHeight+"px",d=e=>{e&&setTimeout(()=>e.style.setProperty(m,g()),0)},h="rml-styles",m="--rml-full-height",p="rml-container",f="rml-fill",_="rml-pos",w="rml-android-height",y="rml-overflow-hidden",b=new Map;class M extends l{static createPlanner(e,t,s,r=[]){return this._create(e,t,s,r)}static async connect(t,s=[]){const r=new l;r.viewName=t;const{resolve:i,promise:n}=c(),{resolve:a,promise:o}=c(),u=new e("custom-view-"+t,window,window.parent,({message:e,args:t})=>{switch(e){case"registerCustomViewDone":i();break;case"returnMethods":r.handleSetup(t[0]),a();break;default:if(r.isSetupDone)return r.executeMessage({message:e,args:t})}});r.setMessageHandler(u);const g=[t];return u.sendMessage("registerCustomView",g),await n,u.sendMessage("getMethods",g),await o,r.setupPlugins(s,document.body,"custom-view"),await Promise.allSettled(r.pluginsLoaded),r}static createConfigurator(e,t,s,r=[]){return this._create(e,t,s,r)}static create(e,t,s,r){return this._create(e,t,s,r)}static createViewer(e,t,s,r=[]){return this._create(e,t,s,r)}static async _create(e,i,o,l){return new Promise(async(c,u)=>{try{const u=r((()=>{const e=(e=>JSON.parse(JSON.stringify(e)))(n);e.locale||(e.locale=((e=null)=>{const t=window.navigator;if(e)return e.substr(0,2);if(Array.isArray(t.languages)&&t.languages.length>0)return t.languages[0].substr(0,2);for(let e=0,r=s.length;e<r;e++){const r=t[s[e]];if(r)return r.substr(0,2)}return"en"})()),"(idle)"===e.id&&delete e.id;const r=(()=>{const e=(()=>{try{return window.self!==window.top}catch{return!0}})();let t=window.location.href;if(e){if(!document.referrer)return null;t=document.referrer}const{hostname:s}=new URL(t);return s})();return r&&(e=>!!(t.includes(e)||e.endsWith("roomle.com")||e.endsWith("gitlab.io")||e.endsWith("gitlab.com")))(r)&&(e.configuratorId="demoConfigurator"),e.customApiUrl=void 0,e.emails=!1,e})(),(a(g=o),g?.customApiUrl&&(g.customApiUrl=decodeURIComponent(g.customApiUrl)),g.shareUrl&&(g.deeplink=g.shareUrl.replace("<CONF_ID>","#CONFIGURATIONID#")),g));(e=>{e.featureFlags||(e.featureFlags={}),"boolean"!=typeof e.featureFlags.realPartList&&(e.featureFlags.realPartList=!0),"boolean"!=typeof e.featureFlags.globalCallbacks&&(e.featureFlags.globalCallbacks=!0),"boolean"!=typeof e.featureFlags.mocAr&&(e.featureFlags.mocAr=!1)})(u);const d=await(async(e,t)=>{if("string"!=typeof e)throw new Error('Configurator ID is not a string type: "'+typeof e+'"');const s=t.customApiUrl?t.customApiUrl:"https://api.roomle.com/v2",r=t.overrideTenant||9,i=s+"/configurators/"+e,n="roomle_portal_v2",a="03-"+window.btoa((new Date).toISOString()+";anonymous;"+n),o=new Request(i,{method:"GET",headers:new Headers({apiKey:n,currentTenant:r,locale:"en",language:"en",device:1,token:a,platform:"web"}),mode:"cors",cache:"default"}),l=await fetch(o),{configurator:c}=await l.json();return c})(e,u);o=((e,t)=>{t.configuratorId=e.id;const s=e.settings||{};return!t.overrideTenant&&e.tenant&&(t.overrideTenant=e.tenant),((e,t)=>{const s=JSON.parse(JSON.stringify(e));return r(s,t)})(s,t)})(d,u);const h=new this(d,i,o,l,c);return await Promise.allSettled(h.pluginsLoaded),h}catch(e){return u(e)}var g})}_waitForIframe;_container;_configuratorSettings;_initData={};_iframe;constructor(t,s,r,i,n){if(super(),!t||"string"!=typeof t.id)throw new Error("Please provide a correct configuratorId, you get the correct ID from your Roomle Contact Person");if(b.has(s))throw new Error("There is already an instance on this DOM element");if(!document.getElementById(h)){const e=r.zIndex||9999999,t=document.createElement("style");t.type="text/css",t.id=h;const s="transition:all ease-in-out 450ms;",i=["-webkit-","-o-"].reduce((e,t)=>e+(t+s),"")+s,n=g();t.innerHTML=`\n .${p}{${m}:${n};}\n .${_}{position:fixed;top:0;left:0;z-index:${e};opacity:0}\n .rml-transition{${i}}\n .${f}{width:100%;height:100%;opacity:1}\n .${w}{height:calc(var(${m},1vh)*100)}\n .${y}{overflow:hidden}\n `,document.head.appendChild(t)}this._executeMessage=this._executeMessage.bind(this);const a=new e("website",window,null,this._executeMessage);this.setMessageHandler(a),this._onResize=this._onResize.bind(this),o()&&window.addEventListener("resize",this._onResize),this._container=s,this._initData=r,this._configuratorSettings=t;const l=this._createIframe();this._onUseFullPage=this._onUseFullPage.bind(this),this._onBackToWebsite=this._onBackToWebsite.bind(this),this._waitForIframe=n,this._container.appendChild(l),this._iframe=l,this.setupPlugins(i,this._iframe),b.set(s,!0)}teardown(){this._container&&b.delete(this._container);const e=this._container.querySelector("iframe");e&&this._container.removeChild(e),window.removeEventListener("resize",this._onResize)}_createIframe(){const e=document.createElement("iframe");let t=this._configuratorSettings?.url||"https://www.roomle.com/t/cp/";return this._initData.useLocalRoomle&&(t=location.href.replace("embedding.html","")),location.href.includes("roomle.gitlab.io")&&(t=location.href.replace("embedding.html","index.html")),this._initData.overrideServerUrl&&(t=this._initData.overrideServerUrl),e.src=t,e.classList.add(p),e.classList.add(f),e}_onResize(){d(this._iframe)}_onUseFullPage(){this._iframe.classList.add(_),document.documentElement.classList.add(y),window.document.body.classList.add(y),o()&&(d(this._iframe),this._iframe.classList.add(w))}_onBackToWebsite(){this._iframe.classList.remove(_),this._iframe.classList.remove(w),document.documentElement.classList.remove(y),window.document.body.classList.remove(y)}_executeMessage({message:e,args:t},s){if(s.source&&s.source===this._iframe?.contentWindow)return"requestBoot"===e?this._messageHandler?(this._messageHandler.setOutgoingMessageBus(s.source),Promise.resolve({result:this._initData})):Promise.resolve({error:"MessageHandler not set"}):"setup"===e?(this.handleSetup(t[0]),u(this.ui.callbacks,"onUseFullPage",this._onUseFullPage),u(this.ui.callbacks,"onBackToWebsite",this._onBackToWebsite),this._waitForIframe(this),setTimeout(()=>{this._messageHandler&&this._messageHandler.sendMessage("websiteReady")},0),Promise.resolve({result:null})):this.executeMessage({message:e,args:t})}}export{M as default};
|
|
1
|
+
class e{_side;_incomingMessageBus=null;_outgoingMessageBus=null;_execMessage=null;constructor(e,t,s,r){this._side=e,this._incomingMessageBus=t,this._outgoingMessageBus=s,this._execMessage=r,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,r)=>{if(this._incomingMessageBus===this._outgoingMessageBus)return s(void 0);const i=new MessageChannel;i.port1.onmessage=e=>{if(!e||!e.data)return i.port1.close(),i.port2.close(),r(new Error(this._side+" received message but response can not be interpreted"));let t;try{t=JSON.parse(e.data)}catch(e){return i.port1.close(),i.port2.close(),this._prepareError(e),r(e)}t.error?r(t.error):void 0!==t.result?s(t.result):s(void 0),i.port1.close(),i.port2.close()};let n="";try{n=JSON.stringify({message:e,args:t})}catch{return r(new Error(this._side+": can not create command because it is not JSON.stringify able"))}if(!this._outgoingMessageBus)return r(new Error(this._side+": outgoing bus not set yet"));this._outgoingMessageBus.postMessage(n,"*",[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 r=this._execMessage(s,e);if(void 0===r)return;r.then((e={})=>{let s,r;"object"==typeof e&&null!==e&&(s=e.error,r=e.result),s?t.postMessage(JSON.stringify({error:s})):void 0!==r?t.postMessage(JSON.stringify({result:r})):t.postMessage(JSON.stringify({result:e}))},e=>{t.postMessage(JSON.stringify({error:this._prepareError(e)}))})}catch(e){t.postMessage(JSON.stringify({error:this._prepareError(e)}))}}_prepareError(e){return"string"==typeof e?this._side+": "+e:(e.message=this._side+": "+e.message,e.message)}}const t=["127.0.0.1","localhost","0.0.0.0"],s=["language","browserLanguage","userLanguage","systemLanguage"],r=(e,t)=>{for(const s in t)try{t[s].constructor===Object?e[s]=r(e[s],t[s]):e[s]=t[s]}catch{e[s]=t[s]}return e};var i=(e=>(e.BOTTOM_BAR="bottom_bar",e.PARTLIST_BOUNDS="partlist_bounds",e.INTERACTION_NOTES="interaction_notes",e.PARAMETER_GROUPS="parameter_groups",e))(i||{});const n={mobileLandscape:!0,floorMaterialRootTag:"materials_root",buttons:{renderimage:!0,requestproduct:!0,requestplan:!0,load_product:!0,partlist_print:!0},elements:{[i.INTERACTION_NOTES]:!0},helpcenter:{roomdesigner:!0,configurator:!1,disable:!1},firstPersonView:!0,saveToIdb:!0,featureFlags:{mocAr:!0,wallAutoHeight:!1,openCloseAnimation:!1,enableTwoLevelCatalog:!1},rotationSnapDegrees:10,interactionsCollapsed:!1},a=e=>{if(!e)return;const t=Object.keys(e);for(const s of t){const t=e[s];if(!Array.isArray(t)&&"object"==typeof t&&null!==t&&a(t),Array.isArray(t))for(const e of t)a(e);("true"===t||"false"===t)&&(e[s]="true"===t)}},o=()=>/(android)/i.test(navigator.userAgent);class l{_messageHandler=null;isSetupDone=!1;viewName="main";plugins={};pluginsLoaded=[];ui={callbacks:null};extended={callbacks:null};configurator={callbacks:null};analytics={callbacks:{}};rapi={callbacks:{}};global={callbacks:{}};setMessageHandler(e){this._messageHandler=e}handleSetup(e){const{methods:t,callbacks:s}=e;t.forEach(e=>{const t=e.split("."),s=t[0],r=t[1];this[s]||(this[s]={}),this[s][r]=function(){if(this._messageHandler)return this._messageHandler.sendMessage(e,[...arguments])}.bind(this)}),s.forEach(e=>{const t=e.split("."),s=t[0],r=t[1],i=t[2];this[s]||(this[s]={}),this[s][r]||(this[s][r]={}),this[s][r][i]=()=>{}}),this.isSetupDone=!0}executeMessage({message:e,args:t}){const s=e.split("."),r=s[0],i=s[1],n=3===s.length?s[2]:null;if(n&&this[r][i][n]){const e=this[r][i][n](...t);return e instanceof Promise?e.then(e=>({result:e})):void 0!==e?Promise.resolve({result:e}):Promise.resolve({result:null})}return Promise.reject('Message "'+e+'" is unkown')}setupPlugins(e,t,s="website"){for(const r of e)"string"==typeof r&&"dragIn"===r?this.pluginsLoaded.push(new Promise((e,r)=>{try{import("./drag-in-DTA1FCDc.mjs").then(e=>e.l).then(({DragIn:i})=>{const n=new i(this.ui,t,s,this.viewName);n.init().then(()=>{this.plugins.dragIn=n,e()},r)})}catch(e){r(e)}})):r.name&&r.loader&&this.pluginsLoaded.push(new Promise((e,i)=>{try{r.loader().then(n=>{const a=new n(this.ui,t,s,this.viewName);a.init().then(()=>{this.plugins[r.name]=a,e()},i)})}catch(e){i(e)}}))}}const c=()=>{let e,t;return{promise:new Promise((s,r)=>{e=s,t=r}),resolve:e,reject:t}},u=(e,t,s)=>{let r=null;Object.defineProperty(e,t,{get:()=>r||s,set(e){r=e?.mute?e.value:e}})},g=()=>.01*window.innerHeight+"px",d=e=>{e&&setTimeout(()=>e.style.setProperty(m,g()),0)},h="rml-styles",m="--rml-full-height",p="rml-container",f="rml-fill",_="rml-pos",w="rml-android-height",y="rml-overflow-hidden",b=new Map;class M extends l{static createPlanner(e,t,s,r=[]){return this._create(e,t,s,r)}static async connect(t,s=[]){const r=new l;r.viewName=t;const{resolve:i,promise:n}=c(),{resolve:a,promise:o}=c(),u=new e("custom-view-"+t,window,window.parent,({message:e,args:t})=>{switch(e){case"registerCustomViewDone":i();break;case"returnMethods":r.handleSetup(t[0]),a();break;default:if(r.isSetupDone)return r.executeMessage({message:e,args:t})}});r.setMessageHandler(u);const g=[t];return u.sendMessage("registerCustomView",g),await n,u.sendMessage("getMethods",g),await o,r.setupPlugins(s,document.body,"custom-view"),await Promise.allSettled(r.pluginsLoaded),r}static createConfigurator(e,t,s,r=[]){return this._create(e,t,s,r)}static create(e,t,s,r){return this._create(e,t,s,r)}static createViewer(e,t,s,r=[]){return this._create(e,t,s,r)}static async _create(e,i,o,l){return new Promise(async(c,u)=>{try{const u=r((()=>{const e=(e=>JSON.parse(JSON.stringify(e)))(n);e.locale||(e.locale=((e=null)=>{const t=window.navigator;if(e)return e.substr(0,2);if(Array.isArray(t.languages)&&t.languages.length>0)return t.languages[0].substr(0,2);for(let e=0,r=s.length;e<r;e++){const r=t[s[e]];if(r)return r.substr(0,2)}return"en"})()),"(idle)"===e.id&&delete e.id;const r=(()=>{const e=(()=>{try{return window.self!==window.top}catch{return!0}})();let t=window.location.href;if(e){if(!document.referrer)return null;t=document.referrer}const{hostname:s}=new URL(t);return s})();return r&&(e=>!!(t.includes(e)||e.endsWith("roomle.com")||e.endsWith("gitlab.io")||e.endsWith("gitlab.com")))(r)&&(e.configuratorId="demoConfigurator"),e.customApiUrl=void 0,e.emails=!1,e})(),(a(g=o),g?.customApiUrl&&(g.customApiUrl=decodeURIComponent(g.customApiUrl)),g.shareUrl&&(g.deeplink=g.shareUrl.replace("<CONF_ID>","#CONFIGURATIONID#")),g));(e=>{e.featureFlags||(e.featureFlags={}),"boolean"!=typeof e.featureFlags.realPartList&&(e.featureFlags.realPartList=!0),"boolean"!=typeof e.featureFlags.globalCallbacks&&(e.featureFlags.globalCallbacks=!0),"boolean"!=typeof e.featureFlags.mocAr&&(e.featureFlags.mocAr=!1)})(u);const d=await(async(e,t)=>{if("string"!=typeof e)throw new Error('Configurator ID is not a string type: "'+typeof e+'"');const s=t.customApiUrl?t.customApiUrl:"https://api.roomle.com/v2",r=t.overrideTenant||9,i=s+"/configurators/"+e,n="roomle_portal_v2",a="03-"+window.btoa((new Date).toISOString()+";anonymous;"+n),o=new Request(i,{method:"GET",headers:new Headers({apiKey:n,currentTenant:r,locale:"en",language:"en",device:1,token:a,platform:"web"}),mode:"cors",cache:"default"}),l=await fetch(o),{configurator:c}=await l.json();return c})(e,u);o=((e,t)=>{t.configuratorId=e.id;const s=e.settings||{};return!t.overrideTenant&&e.tenant&&(t.overrideTenant=e.tenant),((e,t)=>{const s=JSON.parse(JSON.stringify(e));return r(s,t)})(s,t)})(d,u);const h=new this(d,i,o,l,c);return await Promise.allSettled(h.pluginsLoaded),h}catch(e){return u(e)}var g})}_waitForIframe;_container;_configuratorSettings;_initData={};_iframe;constructor(t,s,r,i,n){if(super(),!t||"string"!=typeof t.id)throw new Error("Please provide a correct configuratorId, you get the correct ID from your Roomle Contact Person");if(b.has(s))throw new Error("There is already an instance on this DOM element");if(!document.getElementById(h)){const e=r.zIndex||9999999,t=document.createElement("style");t.type="text/css",t.id=h;const s="transition:all ease-in-out 450ms;",i=["-webkit-","-o-"].reduce((e,t)=>e+(t+s),"")+s,n=g();t.innerHTML=`\n .${p}{${m}:${n};}\n .${_}{position:fixed;top:0;left:0;z-index:${e};opacity:0}\n .rml-transition{${i}}\n .${f}{width:100%;height:100%;opacity:1}\n .${w}{height:calc(var(${m},1vh)*100)}\n .${y}{overflow:hidden}\n `,document.head.appendChild(t)}this._executeMessage=this._executeMessage.bind(this);const a=new e("website",window,null,this._executeMessage);this.setMessageHandler(a),this._onResize=this._onResize.bind(this),o()&&window.addEventListener("resize",this._onResize),this._container=s,this._initData=r,this._configuratorSettings=t;const l=this._createIframe();this._onUseFullPage=this._onUseFullPage.bind(this),this._onBackToWebsite=this._onBackToWebsite.bind(this),this._waitForIframe=n,this._container.appendChild(l),this._iframe=l,this.setupPlugins(i,this._iframe),b.set(s,!0)}teardown(){this._container&&b.delete(this._container);const e=this._container.querySelector("iframe");e&&this._container.removeChild(e),window.removeEventListener("resize",this._onResize)}_createIframe(){const e=document.createElement("iframe");let t=this._configuratorSettings?.url||"https://www.roomle.com/t/cp/";return this._initData.useLocalRoomle&&(t=location.href.replace("embedding.html","")),location.href.includes("roomle.gitlab.io")&&(t=location.href.replace("embedding.html","index.html")),this._initData.overrideServerUrl&&(t=this._initData.overrideServerUrl),e.src=t,e.classList.add(p),e.classList.add(f),e}_onResize(){d(this._iframe)}_onUseFullPage(){this._iframe.classList.add(_),document.documentElement.classList.add(y),window.document.body.classList.add(y),o()&&(d(this._iframe),this._iframe.classList.add(w))}_onBackToWebsite(){this._iframe.classList.remove(_),this._iframe.classList.remove(w),document.documentElement.classList.remove(y),window.document.body.classList.remove(y)}_executeMessage({message:e,args:t},s){if(s.source&&s.source===this._iframe?.contentWindow)return"requestBoot"===e?this._messageHandler?(this._messageHandler.setOutgoingMessageBus(s.source),Promise.resolve({result:this._initData})):Promise.resolve({error:"MessageHandler not set"}):"setup"===e?(this.handleSetup(t[0]),u(this.ui.callbacks,"onUseFullPage",this._onUseFullPage),u(this.ui.callbacks,"onBackToWebsite",this._onBackToWebsite),this._waitForIframe(this),setTimeout(()=>{this._messageHandler&&this._messageHandler.sendMessage("websiteReady")},0),Promise.resolve({result:null})):this.executeMessage({message:e,args:t})}}export{M as default};
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
(function(m,p){typeof exports=="object"&&typeof module<"u"?module.exports=p():typeof define=="function"&&define.amd?define(p):(m=typeof globalThis<"u"?globalThis:m||self,m["roomle-embedding-lib"]=m["roomle-embedding-lib"]||{},m["roomle-embedding-lib"].umd=m["roomle-embedding-lib"].umd||{},m["roomle-embedding-lib"].umd.js=p())})(this,function(){"use strict";class m{_side;_incomingMessageBus=null;_outgoingMessageBus=null;_execMessage=null;constructor(t,e,s,n){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 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 c;try{c=JSON.parse(a.data)}catch(l){return i.port1.close(),i.port2.close(),this._prepareError(l),n(l)}c.error?n(c.error):c.result!==void 0?s(c.result):s(void 0),i.port1.close(),i.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,"*",[i.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((i={})=>{let o,a;typeof i=="object"&&i!==null&&(o=i.error,a=i.result),o?e.postMessage(JSON.stringify({error:o})):a!==void 0?e.postMessage(JSON.stringify({result:a})):e.postMessage(JSON.stringify({result:i}))},i=>{e.postMessage(JSON.stringify({error:this._prepareError(i)}))})}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 p=".",R={REQUEST_BOOT:"requestBoot",SETUP:"setup",WEBSITE_READY:"websiteReady"},S={GET_METHODS:"getMethods",RETURN_METHODS:"returnMethods",REGISTER_CUSTOM_VIEW:"registerCustomView",REGISTER_CUSTOM_VIEW_DONE:"registerCustomViewDone"},mt=async(r,t)=>{if(typeof r!="string")throw new Error('Configurator ID is not a string type: "'+typeof r+'"');const e=t.customApiUrl?t.customApiUrl:"https://api.roomle.com/v2",s=t.overrideTenant||9,n=e+"/configurators/"+r,i="roomle_portal_v2",o="03-"+window.btoa(new Date().toISOString()+";anonymous;"+i),a=()=>{const d={apiKey:i,currentTenant:s,locale:"en",language:"en",device:1,token:o,platform:"web"};return new Headers(d)},c=new Request(n,{method:"GET",headers:a(),mode:"cors",cache:"default"}),l=await fetch(c),{configurator:h}=await l.json();return h},ft=()=>{try{return window.self!==window.top}catch{return!0}},pt=["127.0.0.1","localhost","0.0.0.0"],yt=()=>{const r=ft();let t=window.location.href;if(r){if(!document.referrer)return null;t=document.referrer}const{hostname:e}=new URL(t);return e},Dt=r=>!!(pt.includes(r)||r.endsWith("roomle.com")||r.endsWith("gitlab.io")||r.endsWith("gitlab.com")),W=["language","browserLanguage","userLanguage","systemLanguage"],Et=(r=null)=>{const t=window.navigator;if(r)return r.substr(0,2);if(Array.isArray(t.languages)&&t.languages.length>0)return t.languages[0].substr(0,2);for(let e=0,s=W.length;e<s;e++){const n=t[W[e]];if(n)return n.substr(0,2)}return"en"},Tt=(r,t)=>{const e=JSON.parse(JSON.stringify(r));return M(e,t)},M=(r,t)=>{for(const e in t)try{t[e].constructor===Object?r[e]=M(r[e],t[e]):r[e]=t[e]}catch{r[e]=t[e]}return r};var $=(r=>(r.BOTTOM_BAR="bottom_bar",r.PARTLIST_BOUNDS="partlist_bounds",r.INTERACTION_NOTES="interaction_notes",r.PARAMETER_GROUPS="parameter_groups",r))($||{});const St=r=>JSON.parse(JSON.stringify(r)),It={mobileLandscape:!0,floorMaterialRootTag:"materials_root",buttons:{renderimage:!0,requestproduct:!0,requestplan:!0,load_product:!0,partlist_print:!0},elements:{[$.INTERACTION_NOTES]:!0},helpcenter:{roomdesigner:!0,configurator:!1,disable:!1},firstPersonView:!0,saveToIdb:!0,featureFlags:{mocAr:!0,wallAutoHeight:!1,openCloseAnimation:!1},rotationSnapDegrees:10,interactionsCollapsed:!1},wt="(idle)",At=r=>(C(r),r?.customApiUrl&&(r.customApiUrl=decodeURIComponent(r.customApiUrl)),r.shareUrl&&(r.deeplink=r.shareUrl.replace(vt,Rt)),r),C=r=>{if(!r)return;const t=Object.keys(r);for(const e of t){const s=r[e];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[e]=s==="true")}},bt=(r,t)=>{t.configuratorId=r.id;const e=r.settings||{};return!t.overrideTenant&&r.tenant&&(t.overrideTenant=r.tenant),Tt(e,t)},Ot=()=>{const r=St(It);r.locale||(r.locale=Et()),r.id===wt&&delete r.id;const t=yt();return t&&Dt(t)&&(r.configuratorId="demoConfigurator"),r.customApiUrl=void 0,r.emails=!1,r},vt="<CONF_ID>",Rt="#CONFIGURATIONID#",Mt=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)},k=()=>/(android)/i.test(navigator.userAgent);class z{_messageHandler=null;isSetupDone=!1;viewName="main";plugins={};pluginsLoaded=[];ui={callbacks:null};extended={callbacks:null};configurator={callbacks:null};analytics={callbacks:{}};rapi={callbacks:{}};global={callbacks:{}};setMessageHandler(t){this._messageHandler=t}handleSetup(t){const{methods:e,callbacks:s}=t;e.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],c=i[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(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](...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((i,o)=>{try{Promise.resolve().then(()=>Gt).then(({DragIn:a})=>{const c=new a(this.ui,e,s,this.viewName);c.init().then(()=>{this.plugins.dragIn=c,i()},o)})}catch(a){o(a)}})):n.name&&n.loader&&this.pluginsLoaded.push(new Promise((i,o)=>{try{n.loader().then(a=>{const c=new a(this.ui,e,s,this.viewName);c.init().then(()=>{this.plugins[n.name]=c,i()},o)})}catch(a){o(a)}}))}}const V=()=>{let r,t;return{promise:new Promise((s,n)=>{r=s,t=n}),resolve:r,reject:t}},q=(r,t,e)=>{let s=null;Object.defineProperty(r,t,{get(){return s||e},set(n){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)}})},K=()=>window.innerHeight*.01+"px",J=r=>{r&&setTimeout(()=>r.style.setProperty(L,K()),0)},j="rml-styles",Ct=450,L="--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"},N=new Map;class Lt extends z{static createPlanner(t,e,s,n=[]){return this._create(t,e,s,n)}static async connect(t,e=[]){const s=new z;s.viewName=t;const{resolve:n,promise:i}=V(),{resolve:o,promise:a}=V(),c=({message:d,args:u})=>{switch(d){case S.REGISTER_CUSTOM_VIEW_DONE:n();break;case S.RETURN_METHODS:s.handleSetup(u[0]),o();break;default:if(s.isSetupDone)return s.executeMessage({message:d,args:u})}},l=new m("custom-view-"+t,window,window.parent,c);s.setMessageHandler(l);const h=[t];return l.sendMessage(S.REGISTER_CUSTOM_VIEW,h),await i,l.sendMessage(S.GET_METHODS,h),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(i,o)=>{try{const a=M(Ot(),At(s));Mt(a);const c=await mt(t,a);s=bt(c,a);const l=new this(c,e,s,n,i);return await Promise.allSettled(l.pluginsLoaded),l}catch(a){return o(a)}})}_waitForIframe;_container;_configuratorSettings;_initData={};_iframe;constructor(t,e,s,n,i){if(super(),!t||typeof t.id!="string")throw new Error("Please provide a correct configuratorId, you get the correct ID from your Roomle Contact Person");if(N.has(e))throw new Error("There is already an instance on this DOM element");if(!!!document.getElementById(j)){const l=s.zIndex||9999999,h=document.createElement("style");h.type="text/css",h.id=j;const d="transition:all ease-in-out "+Ct+"ms;",u=["-webkit-","-o-"].reduce((D,f)=>D+=f+d,"")+d,_=K();h.innerHTML=`
|
|
1
|
+
(function(m,p){typeof exports=="object"&&typeof module<"u"?module.exports=p():typeof define=="function"&&define.amd?define(p):(m=typeof globalThis<"u"?globalThis:m||self,m["roomle-embedding-lib"]=m["roomle-embedding-lib"]||{},m["roomle-embedding-lib"].umd=m["roomle-embedding-lib"].umd||{},m["roomle-embedding-lib"].umd.js=p())})(this,function(){"use strict";class m{_side;_incomingMessageBus=null;_outgoingMessageBus=null;_execMessage=null;constructor(t,e,s,n){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 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 c;try{c=JSON.parse(a.data)}catch(l){return i.port1.close(),i.port2.close(),this._prepareError(l),n(l)}c.error?n(c.error):c.result!==void 0?s(c.result):s(void 0),i.port1.close(),i.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,"*",[i.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((i={})=>{let o,a;typeof i=="object"&&i!==null&&(o=i.error,a=i.result),o?e.postMessage(JSON.stringify({error:o})):a!==void 0?e.postMessage(JSON.stringify({result:a})):e.postMessage(JSON.stringify({result:i}))},i=>{e.postMessage(JSON.stringify({error:this._prepareError(i)}))})}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 p=".",R={REQUEST_BOOT:"requestBoot",SETUP:"setup",WEBSITE_READY:"websiteReady"},S={GET_METHODS:"getMethods",RETURN_METHODS:"returnMethods",REGISTER_CUSTOM_VIEW:"registerCustomView",REGISTER_CUSTOM_VIEW_DONE:"registerCustomViewDone"},mt=async(r,t)=>{if(typeof r!="string")throw new Error('Configurator ID is not a string type: "'+typeof r+'"');const e=t.customApiUrl?t.customApiUrl:"https://api.roomle.com/v2",s=t.overrideTenant||9,n=e+"/configurators/"+r,i="roomle_portal_v2",o="03-"+window.btoa(new Date().toISOString()+";anonymous;"+i),a=()=>{const d={apiKey:i,currentTenant:s,locale:"en",language:"en",device:1,token:o,platform:"web"};return new Headers(d)},c=new Request(n,{method:"GET",headers:a(),mode:"cors",cache:"default"}),l=await fetch(c),{configurator:h}=await l.json();return h},ft=()=>{try{return window.self!==window.top}catch{return!0}},pt=["127.0.0.1","localhost","0.0.0.0"],yt=()=>{const r=ft();let t=window.location.href;if(r){if(!document.referrer)return null;t=document.referrer}const{hostname:e}=new URL(t);return e},Dt=r=>!!(pt.includes(r)||r.endsWith("roomle.com")||r.endsWith("gitlab.io")||r.endsWith("gitlab.com")),W=["language","browserLanguage","userLanguage","systemLanguage"],Et=(r=null)=>{const t=window.navigator;if(r)return r.substr(0,2);if(Array.isArray(t.languages)&&t.languages.length>0)return t.languages[0].substr(0,2);for(let e=0,s=W.length;e<s;e++){const n=t[W[e]];if(n)return n.substr(0,2)}return"en"},Tt=(r,t)=>{const e=JSON.parse(JSON.stringify(r));return M(e,t)},M=(r,t)=>{for(const e in t)try{t[e].constructor===Object?r[e]=M(r[e],t[e]):r[e]=t[e]}catch{r[e]=t[e]}return r};var $=(r=>(r.BOTTOM_BAR="bottom_bar",r.PARTLIST_BOUNDS="partlist_bounds",r.INTERACTION_NOTES="interaction_notes",r.PARAMETER_GROUPS="parameter_groups",r))($||{});const St=r=>JSON.parse(JSON.stringify(r)),It={mobileLandscape:!0,floorMaterialRootTag:"materials_root",buttons:{renderimage:!0,requestproduct:!0,requestplan:!0,load_product:!0,partlist_print:!0},elements:{[$.INTERACTION_NOTES]:!0},helpcenter:{roomdesigner:!0,configurator:!1,disable:!1},firstPersonView:!0,saveToIdb:!0,featureFlags:{mocAr:!0,wallAutoHeight:!1,openCloseAnimation:!1,enableTwoLevelCatalog:!1},rotationSnapDegrees:10,interactionsCollapsed:!1},wt="(idle)",At=r=>(C(r),r?.customApiUrl&&(r.customApiUrl=decodeURIComponent(r.customApiUrl)),r.shareUrl&&(r.deeplink=r.shareUrl.replace(vt,Rt)),r),C=r=>{if(!r)return;const t=Object.keys(r);for(const e of t){const s=r[e];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[e]=s==="true")}},bt=(r,t)=>{t.configuratorId=r.id;const e=r.settings||{};return!t.overrideTenant&&r.tenant&&(t.overrideTenant=r.tenant),Tt(e,t)},Ot=()=>{const r=St(It);r.locale||(r.locale=Et()),r.id===wt&&delete r.id;const t=yt();return t&&Dt(t)&&(r.configuratorId="demoConfigurator"),r.customApiUrl=void 0,r.emails=!1,r},vt="<CONF_ID>",Rt="#CONFIGURATIONID#",Mt=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)},k=()=>/(android)/i.test(navigator.userAgent);class z{_messageHandler=null;isSetupDone=!1;viewName="main";plugins={};pluginsLoaded=[];ui={callbacks:null};extended={callbacks:null};configurator={callbacks:null};analytics={callbacks:{}};rapi={callbacks:{}};global={callbacks:{}};setMessageHandler(t){this._messageHandler=t}handleSetup(t){const{methods:e,callbacks:s}=t;e.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],c=i[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(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](...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((i,o)=>{try{Promise.resolve().then(()=>Gt).then(({DragIn:a})=>{const c=new a(this.ui,e,s,this.viewName);c.init().then(()=>{this.plugins.dragIn=c,i()},o)})}catch(a){o(a)}})):n.name&&n.loader&&this.pluginsLoaded.push(new Promise((i,o)=>{try{n.loader().then(a=>{const c=new a(this.ui,e,s,this.viewName);c.init().then(()=>{this.plugins[n.name]=c,i()},o)})}catch(a){o(a)}}))}}const V=()=>{let r,t;return{promise:new Promise((s,n)=>{r=s,t=n}),resolve:r,reject:t}},q=(r,t,e)=>{let s=null;Object.defineProperty(r,t,{get(){return s||e},set(n){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)}})},K=()=>window.innerHeight*.01+"px",J=r=>{r&&setTimeout(()=>r.style.setProperty(L,K()),0)},j="rml-styles",Ct=450,L="--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"},N=new Map;class Lt extends z{static createPlanner(t,e,s,n=[]){return this._create(t,e,s,n)}static async connect(t,e=[]){const s=new z;s.viewName=t;const{resolve:n,promise:i}=V(),{resolve:o,promise:a}=V(),c=({message:d,args:u})=>{switch(d){case S.REGISTER_CUSTOM_VIEW_DONE:n();break;case S.RETURN_METHODS:s.handleSetup(u[0]),o();break;default:if(s.isSetupDone)return s.executeMessage({message:d,args:u})}},l=new m("custom-view-"+t,window,window.parent,c);s.setMessageHandler(l);const h=[t];return l.sendMessage(S.REGISTER_CUSTOM_VIEW,h),await i,l.sendMessage(S.GET_METHODS,h),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(i,o)=>{try{const a=M(Ot(),At(s));Mt(a);const c=await mt(t,a);s=bt(c,a);const l=new this(c,e,s,n,i);return await Promise.allSettled(l.pluginsLoaded),l}catch(a){return o(a)}})}_waitForIframe;_container;_configuratorSettings;_initData={};_iframe;constructor(t,e,s,n,i){if(super(),!t||typeof t.id!="string")throw new Error("Please provide a correct configuratorId, you get the correct ID from your Roomle Contact Person");if(N.has(e))throw new Error("There is already an instance on this DOM element");if(!!!document.getElementById(j)){const l=s.zIndex||9999999,h=document.createElement("style");h.type="text/css",h.id=j;const d="transition:all ease-in-out "+Ct+"ms;",u=["-webkit-","-o-"].reduce((D,f)=>D+=f+d,"")+d,_=K();h.innerHTML=`
|
|
2
2
|
.${g.CONTAINER}{${L}:${_};}
|
|
3
3
|
.${g.POSITION}{position:fixed;top:0;left:0;z-index:${l};opacity:0}
|
|
4
4
|
.${g.TRANSITION}{${u}}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
var t,e;t=this,e=function(){"use strict";class t{_side;_incomingMessageBus=null;_outgoingMessageBus=null;_execMessage=null;constructor(t,e,s,n){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 i=new MessageChannel;i.port1.onmessage=t=>{if(!t||!t.data)return i.port1.close(),i.port2.close(),n(new Error(this._side+" received message but response can not be interpreted"));let e;try{e=JSON.parse(t.data)}catch(t){return i.port1.close(),i.port2.close(),this._prepareError(t),n(t)}e.error?n(e.error):void 0!==e.result?s(e.result):s(void 0),i.port1.close(),i.port2.close()};let r="";try{r=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(r,"*",[i.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(void 0===n)return;n.then((t={})=>{let s,n;"object"==typeof t&&null!==t&&(s=t.error,n=t.result),s?e.postMessage(JSON.stringify({error:s})):void 0!==n?e.postMessage(JSON.stringify({result:n})):e.postMessage(JSON.stringify({result:t}))},t=>{e.postMessage(JSON.stringify({error:this._prepareError(t)}))})}catch(t){e.postMessage(JSON.stringify({error:this._prepareError(t)}))}}_prepareError(t){return"string"==typeof t?this._side+": "+t:(t.message=this._side+": "+t.message,t.message)}}const e=["127.0.0.1","localhost","0.0.0.0"],s=["language","browserLanguage","userLanguage","systemLanguage"],n=(t,e)=>{for(const s in e)try{e[s].constructor===Object?t[s]=n(t[s],e[s]):t[s]=e[s]}catch{t[s]=e[s]}return t};var i,r=((i=r||{}).BOTTOM_BAR="bottom_bar",i.PARTLIST_BOUNDS="partlist_bounds",i.INTERACTION_NOTES="interaction_notes",i.PARAMETER_GROUPS="parameter_groups",i);const a={mobileLandscape:!0,floorMaterialRootTag:"materials_root",buttons:{renderimage:!0,requestproduct:!0,requestplan:!0,load_product:!0,partlist_print:!0},elements:{[r.INTERACTION_NOTES]:!0},helpcenter:{roomdesigner:!0,configurator:!1,disable:!1},firstPersonView:!0,saveToIdb:!0,featureFlags:{mocAr:!0,wallAutoHeight:!1,openCloseAnimation:!1},rotationSnapDegrees:10,interactionsCollapsed:!1},o=t=>{if(!t)return;const e=Object.keys(t);for(const s of e){const e=t[s];if(!Array.isArray(e)&&"object"==typeof e&&null!==e&&o(e),Array.isArray(e))for(const t of e)o(t);("true"===e||"false"===e)&&(t[s]="true"===e)}},l=()=>/(android)/i.test(navigator.userAgent);class h{_messageHandler=null;isSetupDone=!1;viewName="main";plugins={};pluginsLoaded=[];ui={callbacks:null};extended={callbacks:null};configurator={callbacks:null};analytics={callbacks:{}};rapi={callbacks:{}};global={callbacks:{}};setMessageHandler(t){this._messageHandler=t}handleSetup(t){const{methods:e,callbacks:s}=t;e.forEach(t=>{const e=t.split("."),s=e[0],n=e[1];this[s]||(this[s]={}),this[s][n]=function(){if(this._messageHandler)return this._messageHandler.sendMessage(t,[...arguments])}.bind(this)}),s.forEach(t=>{const e=t.split("."),s=e[0],n=e[1],i=e[2];this[s]||(this[s]={}),this[s][n]||(this[s][n]={}),this[s][n][i]=()=>{}}),this.isSetupDone=!0}executeMessage({message:t,args:e}){const s=t.split("."),n=s[0],i=s[1],r=3===s.length?s[2]:null;if(r&&this[n][i][r]){const t=this[n][i][r](...e);return t instanceof Promise?t.then(t=>({result:t})):void 0!==t?Promise.resolve({result:t}):Promise.resolve({result:null})}return Promise.reject('Message "'+t+'" is unkown')}setupPlugins(t,e,s="website"){for(const n of t)"string"==typeof n&&"dragIn"===n?this.pluginsLoaded.push(new Promise((t,n)=>{try{Promise.resolve().then(()=>N).then(({DragIn:i})=>{const r=new i(this.ui,e,s,this.viewName);r.init().then(()=>{this.plugins.dragIn=r,t()},n)})}catch(t){n(t)}})):n.name&&n.loader&&this.pluginsLoaded.push(new Promise((t,i)=>{try{n.loader().then(r=>{const a=new r(this.ui,e,s,this.viewName);a.init().then(()=>{this.plugins[n.name]=a,t()},i)})}catch(t){i(t)}}))}}const c=()=>{let t,e;return{promise:new Promise((s,n)=>{t=s,e=n}),resolve:t,reject:e}},g=(t,e,s)=>{let n=null;Object.defineProperty(t,e,{get:()=>n||s,set(t){n=t?.mute?t.value:t}})},d=()=>.01*window.innerHeight+"px",u=t=>{t&&setTimeout(()=>t.style.setProperty(_,d()),0)},m="rml-styles",_="--rml-full-height",p="rml-container",f="rml-fill",y="rml-pos",v="rml-android-height",b="rml-overflow-hidden",w=new Map;class D{_mainDomElement;_instance;_mode="website";_viewName="main";constructor(t,e,s,n){this._instance=t,this._mainDomElement=e,this._mode=s,this._viewName=n}async init(){return Promise.resolve()}}const E="rml-drag-in-styles",T="rml-drag-in-drag-element",S="rml-drag-in-overlay",x="rml-drag-in-drag-ghost",I="rml-drag-in-fade-in",M="rml-drag-in-fade-out",C="rml-display-none",A="250ms",L="forwards",O=`@keyframes ${I} {from{opacity: 0;}to {opacity: 0.5;}}`,B=`@keyframes ${M} {from{opacity: 0.5;}to {opacity: 0;}}`,P=`${I} ${A} ${L}`,F=`${M} ${A} ${L}`,U="https://res.cloudinary.com/roomle/image/upload/v1729679975/fallback_afpyqr.jpg",N=Object.freeze(Object.defineProperty({__proto__:null,DragIn:class extends D{options={};_customDragSignal=new AbortController;_injectStyles(){if(!document.getElementById(E)){const t=document.createElement("style");t.type="text/css",t.id=E,t.innerHTML=`\n .${C}{display:none}\n .${S}{position:absolute;top:0;left:0;width:100%;height:100%;z-index:999;}\n .${x}{position:absolute;top:0;left:0;width:1px;height:1px;z-index:999;pointer-events:none;background-color:transparent;}\n ${O}\n ${B}\n `,document.head.appendChild(t)}}_initializeDragGhost(){const t=this._mainDomElement.parentNode;let e=t.querySelector("."+x);e||(e=document.createElement("div"),e.classList.add(x),e.innerText=" ",t.appendChild(e))}constructor(t,e,s,n){super(t,e,s,n),this._mainDomElement=e,this._injectStyles(),this._initializeDragGhost()}async init(){if(await super.init(),"website"===this._mode)try{const{DragInFromWebsiteStrategy:t}=await Promise.resolve().then(()=>Q);this._strategy=new t(this._instance,this._mainDomElement,{settings:this.options,mode:"website"})}catch(t){throw t}else{if("custom-view"!==this._mode)throw new Error("Unsupported mode");try{const{DragInFromCustomViewStrategy:t}=await Promise.resolve().then(()=>nt);this._strategy=new t(this._instance,this._mainDomElement,this.options,this._viewName)}catch(t){throw t}}}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 i=this._customDragSignal.signal,r=e=>{"true"===e.target.getAttribute("data-rml-draggable")&&t(e)},a=t=>{this._strategy.releaseInput(t),this._strategy.isDragging&&e(t)},o=t=>{s(t)};document.querySelectorAll('[data-rml-draggable="true"]').forEach(t=>{t.draggable=!1}),document.addEventListener("mousedown",r,{signal:i}),document.addEventListener("mouseup",a,{signal:i}),document.addEventListener("mousemove",o,{signal:i}),document.addEventListener("mouseleave",a,{signal:i}),document.addEventListener("touchstart",r,{signal:i}),document.addEventListener("touchend",a,{signal:i}),document.addEventListener("touchmove",o,{signal:i})}unregisterCustomDrag(){this._customDragSignal.abort(),this._customDragSignal=new AbortController}releaseInput(t){this._strategy.releaseInput(t)}}},Symbol.toStringTag,{value:"Module"}));class R{_computedStyleCache=new Map;_maxLifetime=16;_cacheCleanInterval=null;constructor(t=16){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(1e3*this._maxLifetime,5e3))),n}_cleanUpCache(){const t=Date.now();for(const[e,{updated:s}]of this._computedStyleCache.entries())t-s>=this._maxLifetime&&this._computedStyleCache.delete(e);0===this._computedStyleCache.size&&this._cacheCleanInterval&&(clearInterval(this._cacheCleanInterval),this._cacheCleanInterval=null)}}const X=t=>window.TouchEvent&&t instanceof window.TouchEvent;let k;const G=t=>(k||(k=new R),k.get(t)),Y=(t,e,s)=>{const n=parseFloat(t),i=window.devicePixelRatio||1;if("px"===e)return n;if("%"===e)return n/100*(s===document.documentElement?window.innerWidth:s.offsetWidth);if("rem"===e)return n*parseFloat(G(document.documentElement).fontSize);if("em"===e)return n*parseFloat(G(s).fontSize);if("vh"===e||"vw"===e||"vmin"===e||"vmax"===e)return n/100*{vh:window.innerHeight,vw:window.innerWidth,vmin:Math.min(window.innerWidth,window.innerHeight),vmax:Math.max(window.innerWidth,window.innerHeight)}[e];const r={cm:37.7952755906,mm:3.77952755906,in:96};return e in r?n*r[e]*i:0},$=(t,e,s={x:0,y:0})=>{const n=t.getBoundingClientRect(),i=G(t).transform;let r=0,a=0;if("none"!==i){const e=/translate\(\s*([-+]?\d*\.?\d+|\d+)(px|%)?,?\s*([-+]?\d*\.?\d+|\d+)?(px|%)?\s*\)/,s=i.match(e);s&&(r=Y(s[1],s[2],t),a=Y(s[3],s[4],t))}const{clientX:o,clientY:l}=j(e,s);return{x:o-n.left-r+t.scrollLeft,y:l-n.top-a+t.scrollTop}},j=(t,e=null)=>{const{clientX:s,clientY:n}=X(t)?H(t):t;return{clientX:s>0?s:e?e.x:s,clientY:n>0?n:e?e.y:n}},H=t=>{if(t.touches.length){let{clientX:e,clientY:s}=t.touches[0];if(t.touches.length>1){const n=t.touches[1];e=(e+n.clientX)/2,s=(s+n.clientY)/2}return{clientX:e,clientY:s}}const e=t.changedTouches[0];return{clientX:e.clientX,clientY:e.clientY}},z=(t,e=0)=>X(t)?{clientX:t.touches[e].clientX,clientY:t.touches[e].clientY}:{clientX:t.clientX,clientY:t.clientY},W=t=>!t||!X(t)||t.touches.length>0;class q{_touchDragTimeOut;_onTouchDragStart;_payload=null;_delay=500;_firstTouch=null;_lastTouch=null;_epsilon=10;constructor(t,{onTouchDragStart:e},s={}){this._payload=t,this._onTouchDragStart=e,this._delay="number"==typeof s.delay?s.delay:500,this._epsilon="number"==typeof s.epsilon?s.epsilon:10}onStart(t){W(t)&&(this._touchDragTimeOut||(this._firstTouch=z(t,X(t)?t.touches.length-1:0),this._touchDragTimeOut=setTimeout(()=>{this._clearTimeout(),this._lastTouch||(this._lastTouch=z(t)),this._checkXDistance(t)()},this._delay)))}onEnd(){this._resetTouches()}onMove(t){W(t)&&(this._lastTouch=z(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 J=(t,e,s=0,n=0)=>{const i=e.x+e.width+s,r=e.x-s,a=e.y+e.height+n,o=e.y-n,{x:l,y:h}=t;return l>=r&&l<=i&&h>=o&&h<=a},K=(t,e,s,n=0,i=0)=>{if(s&&(s.hiddenIn||s.visibleIn))return s.visibleIn?J({x:t,y:e},s.visibleIn,n,i):!!s.hiddenIn&&!J({x:t,y:e},s.hiddenIn,-n,-i)};class V{_dragGhostAnimationFrameId=null;_dragGhostRemoveAnimationFrameId=null;_dragGhostElement=null;constructor(t=null){this._dragGhostElement=t}updateDragGhost(t,e,s){this._dragGhostRemoveAnimationFrameId&&(cancelAnimationFrame(this._dragGhostRemoveAnimationFrameId),this._dragGhostRemoveAnimationFrameId=null),!s.ghost?.external&&s.ghost&&(this._dragGhostAnimationFrameId||(this._dragGhostAnimationFrameId=requestAnimationFrame(()=>{(()=>{if(!document.getElementById(E)){const t=document.createElement("style");t.type="text/css",t.id=E,t.innerHTML=`\n ${O}\n ${B}\n `,document.head.appendChild(t)}})();const n={x:t,y:e};!s.ghost&&this._dragGhostElement&&(s.ghost={}),s.ghost&&!s.ghost.element&&this._dragGhostElement&&(s.ghost.element=this._dragGhostElement),(({x:t,y:e},s)=>{let n=document.getElementById(T);if(!n){if(n=document.createElement("div"),s.ghost?.element)n.appendChild(s.ghost.element);else{const t=document.createElement("img");t.src=s.ghost?.url||U,t.width=s.ghost?.width||112,t.height=s.ghost?.height||112,n.appendChild(t)}n.id=T,n.style.position="fixed",n.style.top="0",n.style.left="0",n.style.willChange="transform",n.style.transform="translate3d(0, 0, 0)",n.style.zIndex="9999",n.style.opacity="0.5",K(t,e,s.ghost||{},s.settings?.dragInOverlapX,s.settings?.dragInOverlapY)||(n.style.display="none"),n.style.pointerEvents="none",document.body.appendChild(n)}})(n,s),(({x:t,y:e},s)=>{const n=document.getElementById(T);if(!n)return;let i=s.ghost?.width,r=s.ghost?.height;typeof i>"u"&&(i=n.getBoundingClientRect().width||112),typeof r>"u"&&(r=n.getBoundingClientRect().height||112);const a=t-i/2,o=e-r/2;n.style.transform=`translate3d(${a}px, ${o}px, 0)`,s.ghost&&(K(t,e,s.ghost,s.settings?.dragInOverlapX,s.settings?.dragInOverlapY)?n.style.animation!=P&&(n.style.animation=P):n.style.animation!=F&&(n.style.animation=F))})(n,s),this._dragGhostAnimationFrameId=null})))}removeDragGhost(){this._dragGhostAnimationFrameId&&(cancelAnimationFrame(this._dragGhostAnimationFrameId),this._dragGhostAnimationFrameId=null),this._dragGhostRemoveAnimationFrameId||(this._dragGhostRemoveAnimationFrameId=requestAnimationFrame(()=>{const t=document.getElementById(T);t&&document.body.removeChild(t),this._dragGhostRemoveAnimationFrameId=null}))}}const Q=Object.freeze(Object.defineProperty({__proto__:null,DragInFromWebsiteStrategy:class{_options={};_instance;_mainDomElement;_currentDrag={};_currentTouch=null;_firefoxDragPosition={x:0,y:0};_onBeforeUpdateDrag=()=>({});isDragging=!1;_firefoxFallback=t=>{if(!this._currentDrag.event)return;t.preventDefault();const e=t||window.event;this._firefoxDragPosition.x=e.pageX||0,this._firefoxDragPosition.y=e.pageY||0};constructor(t,e,s){this._instance=t,this._mainDomElement=e,this._options=s||{},this._firefoxFallback=this._firefoxFallback.bind(this),document.addEventListener("dragover",this._firefoxFallback),this._mainDomElement.parentElement?.addEventListener("dragleave",()=>{this._instance.cancelDragIn()})}beforeUpdateGhost(t){this._onBeforeUpdateDrag=t}dragStart(t,e,s="rml_id"){const n=this._mainDomElement.parentNode;if("relative"!==G(n).position)return;this._mainDomElement.style.pointerEvents="none";let i=n.querySelector("."+S);i||(i=document.createElement("div"),i.classList.add(S),n.appendChild(i)),i.classList.remove(C),e.target.getAttribute("draggable");const r=n.querySelector("."+x);this._currentDrag.event=e;const a=e.target,o=a.cloneNode(!0),l=a.getBoundingClientRect();o.style.width=`${l.width}px`,o.style.height=`${l.height}px`,this._currentDrag.ghost=new V(o),this._currentDrag.offset||(this._currentDrag.offset={x:0,y:0});const{clientX:h,clientY:c}=j(e,this._firefoxDragPosition);this._currentDrag.offset.x=h-l.left,this._currentDrag.offset.y=c-l.top,e instanceof DragEvent&&e.dataTransfer&&e.dataTransfer.setDragImage&&e.dataTransfer.setDragImage(r,0,0);const{x:g,y:d}=$(n,this._currentDrag.event||e,this._firefoxDragPosition),u=Math.max(1,g),m=Math.max(1,d);this.isDragging=!0,this._instance.dragInObject(t,u,m,s)}dragUpdate(t){const e=this._mainDomElement.parentNode,{x:s,y:n}=$(e,t,this._firefoxDragPosition);if(0===s&&0===n)return;const i=Math.max(1,s),r=Math.max(1,n);if(1===i&&1===r)return;let a=i,o=r;if(X(t)){const t=this._options.settings?.fingerSize||0;a=Math.max(2,i+t),o=Math.max(2,r-t)}const{x:l,y:h,options:c}=this._onBeforeUpdateDrag(a,o,{}),g=c||{settings:{},ghost:{}};g.ghost||(g.ghost={}),g.ghost.visibleIn&&g.ghost.hiddenIn||(g.ghost.hiddenIn=this._mainDomElement.getBoundingClientRect());const d="number"==typeof l?l:a,u="number"==typeof h?h:o;if(this._currentDrag.ghost){const{clientX:e,clientY:s}=j(t,this._firefoxDragPosition);this._currentDrag.ghost.updateDragGhost(e,s,g)}this._instance.updateDrag(d,u,{})}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(C)}touchStart(t,e,s="rml_id"){e.preventDefault();const n={};"number"==typeof this._options?.settings?.touchDragDelay&&(n.delay=this._options.settings.touchDragDelay),this._options?.settings?.touchDragEpsilon&&(n.epsilon=this._options.settings.touchDragEpsilon),this._currentTouch=new q(void 0,{onTouchDragStart:(e,n)=>{this.dragStart(t,n,s)}},n),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){}}},Symbol.toStringTag,{value:"Module"})),Z=t=>{t.preventDefault(),t.stopPropagation()};class tt{_startX=0;_startY=0;_lastX=0;_lastY=0;_epsilon;_isWaiting=!1;_onCustomDragStart;constructor({onCustomDragStart:t},e={}){this._epsilon="number"==typeof e.epsilon?e.epsilon:15,this._onCustomDragStart=t}onMove(t){this._lastX=t.clientX,this._lastY=t.clientY,this._isWaiting&&((t,e)=>{const s=this._lastX-t,n=this._lastY-e;return Math.sqrt(s*s+n*n)})(this._startX,this._startY)>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 et="data-rml-old-draggable",st=(t,e)=>{const s=X(t),n={delay:s?500:100,epsilon:s?10:15};if(!e)return n;if(!(s||t instanceof MouseEvent))return n;const{delayKey:i,epsilonKey:r}=s?{delayKey:"touchDragDelay",epsilonKey:"touchDragEpsilon"}:{delayKey:"customDragDelay",epsilonKey:"customDragEpsilon"};return"number"==typeof e[i]&&(n.delay=e.touchDragDelay),"number"==typeof e[r]&&(n.epsilon=e.touchDragEpsilon),n},nt=Object.freeze(Object.defineProperty({__proto__:null,DragInFromCustomViewStrategy:class{_options={};_instance;_mainDomElement;_viewName;_currentCustomDrag=null;_currentBb=null;_startTarget=null;_onBeforeUpdateDrag=()=>({});isDragging=!1;constructor(t,e,s){this._instance=t,this._options=e||{},this._viewName=s,this._mainDomElement=mainDomElement,this._mainDomElement.parentElement?.addEventListener("dragleave",()=>{this._instance.cancelDragIn()})}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(et,this._startTarget.draggable.toString()),this._startTarget.draggable=!1,this._startTarget.removeEventListener("dragstart",Z),this._startTarget.addEventListener("dragstart",Z)),this._currentBb=await this._instance.getBoundingClientRect((()=>`[data-rml-custom-view="${this._viewName}"]`)());const{clientX:n,clientY:i}=j(e),r=this._currentBb.x+n,a=this._currentBb.y+i;this.isDragging=!0,this._instance.dragInObject(t,r,a,s)}_dragUpdate(t){if(document.body.focus(),this._currentCustomDrag&&this._currentCustomDrag.onMove(t),!this._currentBb||!this.isDragging)return;const{clientX:e,clientY:s}=j(t),{url:n,width:i,height:r}=(t=>{let e="",s=112,n=112;if(!t)return{url:U,width:s,height:n};const i=t;if(i instanceof HTMLElement){const t=i.getBoundingClientRect(),r=i.getAttribute("data-rml-ghost-url"),a=i.getAttribute("data-rml-ghost-width"),o=i.getAttribute("data-rml-ghost-height");r?e=r:!r&&i instanceof HTMLImageElement&&i.src&&(e=i.src),e?(s=t.width,n=t.height):e=U,s=a?parseInt(a,10):s,n=o?parseInt(o,10):n}return{url:e||U,width:s,height:n}})(this._startTarget),a=this._currentBb.x+e,o=this._currentBb.y+s,l=this._options||{},h={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:i,height:r},mode:"custom-view"},{x:c,y:g,options:d}=this._onBeforeUpdateDrag(a,o,h),u="number"==typeof c?c:a,m="number"==typeof g?g:o,_=d||h;this._instance.updateDrag(u,m,_)}_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,this._currentCustomDrag=X(e)?new q(void 0,{onTouchDragStart:(e,n)=>{this._dragStart(t,n,s)}},st(e,this._options)):new tt({onCustomDragStart:e=>this._dragStart(t,e,s)},st(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="true"===this._startTarget.getAttribute(et),this._startTarget.removeAttribute(et),this._startTarget.removeEventListener("dragstart",Z))}releaseInput(t){this._currentCustomDrag&&this._currentCustomDrag.onEnd(),this._resetStartTarget()}}},Symbol.toStringTag,{value:"Module"}));return class extends h{static createPlanner(t,e,s,n=[]){return this._create(t,e,s,n)}static async connect(e,s=[]){const n=new h;n.viewName=e;const{resolve:i,promise:r}=c(),{resolve:a,promise:o}=c(),l=new t("custom-view-"+e,window,window.parent,({message:t,args:e})=>{switch(t){case"registerCustomViewDone":i();break;case"returnMethods":n.handleSetup(e[0]),a();break;default:if(n.isSetupDone)return n.executeMessage({message:t,args:e})}});n.setMessageHandler(l);const g=[e];return l.sendMessage("registerCustomView",g),await r,l.sendMessage("getMethods",g),await o,n.setupPlugins(s,document.body,"custom-view"),await Promise.allSettled(n.pluginsLoaded),n}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,i,r,l){return new Promise(async(h,c)=>{try{const c=n((()=>{const t=(t=>JSON.parse(JSON.stringify(t)))(a);t.locale||(t.locale=((t=null)=>{const e=window.navigator;if(t)return t.substr(0,2);if(Array.isArray(e.languages)&&e.languages.length>0)return e.languages[0].substr(0,2);for(let t=0,n=s.length;t<n;t++){const n=e[s[t]];if(n)return n.substr(0,2)}return"en"})()),"(idle)"===t.id&&delete t.id;const n=(()=>{const t=(()=>{try{return window.self!==window.top}catch{return!0}})();let e=window.location.href;if(t){if(!document.referrer)return null;e=document.referrer}const{hostname:s}=new URL(e);return s})();return n&&(t=>!!(e.includes(t)||t.endsWith("roomle.com")||t.endsWith("gitlab.io")||t.endsWith("gitlab.com")))(n)&&(t.configuratorId="demoConfigurator"),t.customApiUrl=void 0,t.emails=!1,t})(),(t=>(o(t),t?.customApiUrl&&(t.customApiUrl=decodeURIComponent(t.customApiUrl)),t.shareUrl&&(t.deeplink=t.shareUrl.replace("<CONF_ID>","#CONFIGURATIONID#")),t))(r));(t=>{t.featureFlags||(t.featureFlags={}),"boolean"!=typeof t.featureFlags.realPartList&&(t.featureFlags.realPartList=!0),"boolean"!=typeof t.featureFlags.globalCallbacks&&(t.featureFlags.globalCallbacks=!0),"boolean"!=typeof t.featureFlags.mocAr&&(t.featureFlags.mocAr=!1)})(c);const g=await(async(t,e)=>{if("string"!=typeof t)throw new Error('Configurator ID is not a string type: "'+typeof t+'"');const s=e.customApiUrl?e.customApiUrl:"https://api.roomle.com/v2",n=e.overrideTenant||9,i=s+"/configurators/"+t,r="roomle_portal_v2",a="03-"+window.btoa((new Date).toISOString()+";anonymous;"+r),o=new Request(i,{method:"GET",headers:new Headers({apiKey:r,currentTenant:n,locale:"en",language:"en",device:1,token:a,platform:"web"}),mode:"cors",cache:"default"}),l=await fetch(o),{configurator:h}=await l.json();return h})(t,c);r=((t,e)=>{e.configuratorId=t.id;const s=t.settings||{};return!e.overrideTenant&&t.tenant&&(e.overrideTenant=t.tenant),((t,e)=>{const s=JSON.parse(JSON.stringify(t));return n(s,e)})(s,e)})(g,c);const d=new this(g,i,r,l,h);return await Promise.allSettled(d.pluginsLoaded),d}catch(t){return c(t)}})}_waitForIframe;_container;_configuratorSettings;_initData={};_iframe;constructor(e,s,n,i,r){if(super(),!e||"string"!=typeof e.id)throw new Error("Please provide a correct configuratorId, you get the correct ID from your Roomle Contact Person");if(w.has(s))throw new Error("There is already an instance on this DOM element");if(!document.getElementById(m)){const t=n.zIndex||9999999,e=document.createElement("style");e.type="text/css",e.id=m;const s="transition:all ease-in-out 450ms;",i=["-webkit-","-o-"].reduce((t,e)=>t+(e+s),"")+s,r=d();e.innerHTML=`\n .${p}{${_}:${r};}\n .${y}{position:fixed;top:0;left:0;z-index:${t};opacity:0}\n .rml-transition{${i}}\n .${f}{width:100%;height:100%;opacity:1}\n .${v}{height:calc(var(${_},1vh)*100)}\n .${b}{overflow:hidden}\n `,document.head.appendChild(e)}this._executeMessage=this._executeMessage.bind(this);const a=new t("website",window,null,this._executeMessage);this.setMessageHandler(a),this._onResize=this._onResize.bind(this),l()&&window.addEventListener("resize",this._onResize),this._container=s,this._initData=n,this._configuratorSettings=e;const o=this._createIframe();this._onUseFullPage=this._onUseFullPage.bind(this),this._onBackToWebsite=this._onBackToWebsite.bind(this),this._waitForIframe=r,this._container.appendChild(o),this._iframe=o,this.setupPlugins(i,this._iframe),w.set(s,!0)}teardown(){this._container&&w.delete(this._container);const t=this._container.querySelector("iframe");t&&this._container.removeChild(t),window.removeEventListener("resize",this._onResize)}_createIframe(){const t=document.createElement("iframe");let e=this._configuratorSettings?.url||"https://www.roomle.com/t/cp/";return this._initData.useLocalRoomle&&(e=location.href.replace("embedding.html","")),location.href.includes("roomle.gitlab.io")&&(e=location.href.replace("embedding.html","index.html")),this._initData.overrideServerUrl&&(e=this._initData.overrideServerUrl),t.src=e,t.classList.add(p),t.classList.add(f),t}_onResize(){u(this._iframe)}_onUseFullPage(){this._iframe.classList.add(y),document.documentElement.classList.add(b),window.document.body.classList.add(b),l()&&(u(this._iframe),this._iframe.classList.add(v))}_onBackToWebsite(){this._iframe.classList.remove(y),this._iframe.classList.remove(v),document.documentElement.classList.remove(b),window.document.body.classList.remove(b)}_executeMessage({message:t,args:e},s){if(s.source&&s.source===this._iframe?.contentWindow)return"requestBoot"===t?this._messageHandler?(this._messageHandler.setOutgoingMessageBus(s.source),Promise.resolve({result:this._initData})):Promise.resolve({error:"MessageHandler not set"}):"setup"===t?(this.handleSetup(e[0]),g(this.ui.callbacks,"onUseFullPage",this._onUseFullPage),g(this.ui.callbacks,"onBackToWebsite",this._onBackToWebsite),this._waitForIframe(this),setTimeout(()=>{this._messageHandler&&this._messageHandler.sendMessage("websiteReady")},0),Promise.resolve({result:null})):this.executeMessage({message:t,args:e})}}},"object"==typeof exports&&typeof module<"u"?module.exports=e():"function"==typeof define&&define.amd?define(e):((t=typeof globalThis<"u"?globalThis:t||self)["roomle-embedding-lib"]=t["roomle-embedding-lib"]||{},t["roomle-embedding-lib"].umd=t["roomle-embedding-lib"].umd||{},t["roomle-embedding-lib"].umd.min=t["roomle-embedding-lib"].umd.min||{},t["roomle-embedding-lib"].umd.min.js=e());
|
|
1
|
+
var t,e;t=this,e=function(){"use strict";class t{_side;_incomingMessageBus=null;_outgoingMessageBus=null;_execMessage=null;constructor(t,e,s,n){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 i=new MessageChannel;i.port1.onmessage=t=>{if(!t||!t.data)return i.port1.close(),i.port2.close(),n(new Error(this._side+" received message but response can not be interpreted"));let e;try{e=JSON.parse(t.data)}catch(t){return i.port1.close(),i.port2.close(),this._prepareError(t),n(t)}e.error?n(e.error):void 0!==e.result?s(e.result):s(void 0),i.port1.close(),i.port2.close()};let r="";try{r=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(r,"*",[i.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(void 0===n)return;n.then((t={})=>{let s,n;"object"==typeof t&&null!==t&&(s=t.error,n=t.result),s?e.postMessage(JSON.stringify({error:s})):void 0!==n?e.postMessage(JSON.stringify({result:n})):e.postMessage(JSON.stringify({result:t}))},t=>{e.postMessage(JSON.stringify({error:this._prepareError(t)}))})}catch(t){e.postMessage(JSON.stringify({error:this._prepareError(t)}))}}_prepareError(t){return"string"==typeof t?this._side+": "+t:(t.message=this._side+": "+t.message,t.message)}}const e=["127.0.0.1","localhost","0.0.0.0"],s=["language","browserLanguage","userLanguage","systemLanguage"],n=(t,e)=>{for(const s in e)try{e[s].constructor===Object?t[s]=n(t[s],e[s]):t[s]=e[s]}catch{t[s]=e[s]}return t};var i,r=((i=r||{}).BOTTOM_BAR="bottom_bar",i.PARTLIST_BOUNDS="partlist_bounds",i.INTERACTION_NOTES="interaction_notes",i.PARAMETER_GROUPS="parameter_groups",i);const a={mobileLandscape:!0,floorMaterialRootTag:"materials_root",buttons:{renderimage:!0,requestproduct:!0,requestplan:!0,load_product:!0,partlist_print:!0},elements:{[r.INTERACTION_NOTES]:!0},helpcenter:{roomdesigner:!0,configurator:!1,disable:!1},firstPersonView:!0,saveToIdb:!0,featureFlags:{mocAr:!0,wallAutoHeight:!1,openCloseAnimation:!1,enableTwoLevelCatalog:!1},rotationSnapDegrees:10,interactionsCollapsed:!1},o=t=>{if(!t)return;const e=Object.keys(t);for(const s of e){const e=t[s];if(!Array.isArray(e)&&"object"==typeof e&&null!==e&&o(e),Array.isArray(e))for(const t of e)o(t);("true"===e||"false"===e)&&(t[s]="true"===e)}},l=()=>/(android)/i.test(navigator.userAgent);class h{_messageHandler=null;isSetupDone=!1;viewName="main";plugins={};pluginsLoaded=[];ui={callbacks:null};extended={callbacks:null};configurator={callbacks:null};analytics={callbacks:{}};rapi={callbacks:{}};global={callbacks:{}};setMessageHandler(t){this._messageHandler=t}handleSetup(t){const{methods:e,callbacks:s}=t;e.forEach(t=>{const e=t.split("."),s=e[0],n=e[1];this[s]||(this[s]={}),this[s][n]=function(){if(this._messageHandler)return this._messageHandler.sendMessage(t,[...arguments])}.bind(this)}),s.forEach(t=>{const e=t.split("."),s=e[0],n=e[1],i=e[2];this[s]||(this[s]={}),this[s][n]||(this[s][n]={}),this[s][n][i]=()=>{}}),this.isSetupDone=!0}executeMessage({message:t,args:e}){const s=t.split("."),n=s[0],i=s[1],r=3===s.length?s[2]:null;if(r&&this[n][i][r]){const t=this[n][i][r](...e);return t instanceof Promise?t.then(t=>({result:t})):void 0!==t?Promise.resolve({result:t}):Promise.resolve({result:null})}return Promise.reject('Message "'+t+'" is unkown')}setupPlugins(t,e,s="website"){for(const n of t)"string"==typeof n&&"dragIn"===n?this.pluginsLoaded.push(new Promise((t,n)=>{try{Promise.resolve().then(()=>N).then(({DragIn:i})=>{const r=new i(this.ui,e,s,this.viewName);r.init().then(()=>{this.plugins.dragIn=r,t()},n)})}catch(t){n(t)}})):n.name&&n.loader&&this.pluginsLoaded.push(new Promise((t,i)=>{try{n.loader().then(r=>{const a=new r(this.ui,e,s,this.viewName);a.init().then(()=>{this.plugins[n.name]=a,t()},i)})}catch(t){i(t)}}))}}const c=()=>{let t,e;return{promise:new Promise((s,n)=>{t=s,e=n}),resolve:t,reject:e}},g=(t,e,s)=>{let n=null;Object.defineProperty(t,e,{get:()=>n||s,set(t){n=t?.mute?t.value:t}})},d=()=>.01*window.innerHeight+"px",u=t=>{t&&setTimeout(()=>t.style.setProperty(_,d()),0)},m="rml-styles",_="--rml-full-height",p="rml-container",f="rml-fill",y="rml-pos",v="rml-android-height",b="rml-overflow-hidden",w=new Map;class D{_mainDomElement;_instance;_mode="website";_viewName="main";constructor(t,e,s,n){this._instance=t,this._mainDomElement=e,this._mode=s,this._viewName=n}async init(){return Promise.resolve()}}const E="rml-drag-in-styles",T="rml-drag-in-drag-element",S="rml-drag-in-overlay",x="rml-drag-in-drag-ghost",I="rml-drag-in-fade-in",M="rml-drag-in-fade-out",C="rml-display-none",A="250ms",L="forwards",O=`@keyframes ${I} {from{opacity: 0;}to {opacity: 0.5;}}`,B=`@keyframes ${M} {from{opacity: 0.5;}to {opacity: 0;}}`,P=`${I} ${A} ${L}`,F=`${M} ${A} ${L}`,U="https://res.cloudinary.com/roomle/image/upload/v1729679975/fallback_afpyqr.jpg",N=Object.freeze(Object.defineProperty({__proto__:null,DragIn:class extends D{options={};_customDragSignal=new AbortController;_injectStyles(){if(!document.getElementById(E)){const t=document.createElement("style");t.type="text/css",t.id=E,t.innerHTML=`\n .${C}{display:none}\n .${S}{position:absolute;top:0;left:0;width:100%;height:100%;z-index:999;}\n .${x}{position:absolute;top:0;left:0;width:1px;height:1px;z-index:999;pointer-events:none;background-color:transparent;}\n ${O}\n ${B}\n `,document.head.appendChild(t)}}_initializeDragGhost(){const t=this._mainDomElement.parentNode;let e=t.querySelector("."+x);e||(e=document.createElement("div"),e.classList.add(x),e.innerText=" ",t.appendChild(e))}constructor(t,e,s,n){super(t,e,s,n),this._mainDomElement=e,this._injectStyles(),this._initializeDragGhost()}async init(){if(await super.init(),"website"===this._mode)try{const{DragInFromWebsiteStrategy:t}=await Promise.resolve().then(()=>Q);this._strategy=new t(this._instance,this._mainDomElement,{settings:this.options,mode:"website"})}catch(t){throw t}else{if("custom-view"!==this._mode)throw new Error("Unsupported mode");try{const{DragInFromCustomViewStrategy:t}=await Promise.resolve().then(()=>nt);this._strategy=new t(this._instance,this._mainDomElement,this.options,this._viewName)}catch(t){throw t}}}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 i=this._customDragSignal.signal,r=e=>{"true"===e.target.getAttribute("data-rml-draggable")&&t(e)},a=t=>{this._strategy.releaseInput(t),this._strategy.isDragging&&e(t)},o=t=>{s(t)};document.querySelectorAll('[data-rml-draggable="true"]').forEach(t=>{t.draggable=!1}),document.addEventListener("mousedown",r,{signal:i}),document.addEventListener("mouseup",a,{signal:i}),document.addEventListener("mousemove",o,{signal:i}),document.addEventListener("mouseleave",a,{signal:i}),document.addEventListener("touchstart",r,{signal:i}),document.addEventListener("touchend",a,{signal:i}),document.addEventListener("touchmove",o,{signal:i})}unregisterCustomDrag(){this._customDragSignal.abort(),this._customDragSignal=new AbortController}releaseInput(t){this._strategy.releaseInput(t)}}},Symbol.toStringTag,{value:"Module"}));class R{_computedStyleCache=new Map;_maxLifetime=16;_cacheCleanInterval=null;constructor(t=16){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(1e3*this._maxLifetime,5e3))),n}_cleanUpCache(){const t=Date.now();for(const[e,{updated:s}]of this._computedStyleCache.entries())t-s>=this._maxLifetime&&this._computedStyleCache.delete(e);0===this._computedStyleCache.size&&this._cacheCleanInterval&&(clearInterval(this._cacheCleanInterval),this._cacheCleanInterval=null)}}const X=t=>window.TouchEvent&&t instanceof window.TouchEvent;let k;const G=t=>(k||(k=new R),k.get(t)),Y=(t,e,s)=>{const n=parseFloat(t),i=window.devicePixelRatio||1;if("px"===e)return n;if("%"===e)return n/100*(s===document.documentElement?window.innerWidth:s.offsetWidth);if("rem"===e)return n*parseFloat(G(document.documentElement).fontSize);if("em"===e)return n*parseFloat(G(s).fontSize);if("vh"===e||"vw"===e||"vmin"===e||"vmax"===e)return n/100*{vh:window.innerHeight,vw:window.innerWidth,vmin:Math.min(window.innerWidth,window.innerHeight),vmax:Math.max(window.innerWidth,window.innerHeight)}[e];const r={cm:37.7952755906,mm:3.77952755906,in:96};return e in r?n*r[e]*i:0},$=(t,e,s={x:0,y:0})=>{const n=t.getBoundingClientRect(),i=G(t).transform;let r=0,a=0;if("none"!==i){const e=/translate\(\s*([-+]?\d*\.?\d+|\d+)(px|%)?,?\s*([-+]?\d*\.?\d+|\d+)?(px|%)?\s*\)/,s=i.match(e);s&&(r=Y(s[1],s[2],t),a=Y(s[3],s[4],t))}const{clientX:o,clientY:l}=j(e,s);return{x:o-n.left-r+t.scrollLeft,y:l-n.top-a+t.scrollTop}},j=(t,e=null)=>{const{clientX:s,clientY:n}=X(t)?H(t):t;return{clientX:s>0?s:e?e.x:s,clientY:n>0?n:e?e.y:n}},H=t=>{if(t.touches.length){let{clientX:e,clientY:s}=t.touches[0];if(t.touches.length>1){const n=t.touches[1];e=(e+n.clientX)/2,s=(s+n.clientY)/2}return{clientX:e,clientY:s}}const e=t.changedTouches[0];return{clientX:e.clientX,clientY:e.clientY}},z=(t,e=0)=>X(t)?{clientX:t.touches[e].clientX,clientY:t.touches[e].clientY}:{clientX:t.clientX,clientY:t.clientY},W=t=>!t||!X(t)||t.touches.length>0;class q{_touchDragTimeOut;_onTouchDragStart;_payload=null;_delay=500;_firstTouch=null;_lastTouch=null;_epsilon=10;constructor(t,{onTouchDragStart:e},s={}){this._payload=t,this._onTouchDragStart=e,this._delay="number"==typeof s.delay?s.delay:500,this._epsilon="number"==typeof s.epsilon?s.epsilon:10}onStart(t){W(t)&&(this._touchDragTimeOut||(this._firstTouch=z(t,X(t)?t.touches.length-1:0),this._touchDragTimeOut=setTimeout(()=>{this._clearTimeout(),this._lastTouch||(this._lastTouch=z(t)),this._checkXDistance(t)()},this._delay)))}onEnd(){this._resetTouches()}onMove(t){W(t)&&(this._lastTouch=z(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 J=(t,e,s=0,n=0)=>{const i=e.x+e.width+s,r=e.x-s,a=e.y+e.height+n,o=e.y-n,{x:l,y:h}=t;return l>=r&&l<=i&&h>=o&&h<=a},K=(t,e,s,n=0,i=0)=>{if(s&&(s.hiddenIn||s.visibleIn))return s.visibleIn?J({x:t,y:e},s.visibleIn,n,i):!!s.hiddenIn&&!J({x:t,y:e},s.hiddenIn,-n,-i)};class V{_dragGhostAnimationFrameId=null;_dragGhostRemoveAnimationFrameId=null;_dragGhostElement=null;constructor(t=null){this._dragGhostElement=t}updateDragGhost(t,e,s){this._dragGhostRemoveAnimationFrameId&&(cancelAnimationFrame(this._dragGhostRemoveAnimationFrameId),this._dragGhostRemoveAnimationFrameId=null),!s.ghost?.external&&s.ghost&&(this._dragGhostAnimationFrameId||(this._dragGhostAnimationFrameId=requestAnimationFrame(()=>{(()=>{if(!document.getElementById(E)){const t=document.createElement("style");t.type="text/css",t.id=E,t.innerHTML=`\n ${O}\n ${B}\n `,document.head.appendChild(t)}})();const n={x:t,y:e};!s.ghost&&this._dragGhostElement&&(s.ghost={}),s.ghost&&!s.ghost.element&&this._dragGhostElement&&(s.ghost.element=this._dragGhostElement),(({x:t,y:e},s)=>{let n=document.getElementById(T);if(!n){if(n=document.createElement("div"),s.ghost?.element)n.appendChild(s.ghost.element);else{const t=document.createElement("img");t.src=s.ghost?.url||U,t.width=s.ghost?.width||112,t.height=s.ghost?.height||112,n.appendChild(t)}n.id=T,n.style.position="fixed",n.style.top="0",n.style.left="0",n.style.willChange="transform",n.style.transform="translate3d(0, 0, 0)",n.style.zIndex="9999",n.style.opacity="0.5",K(t,e,s.ghost||{},s.settings?.dragInOverlapX,s.settings?.dragInOverlapY)||(n.style.display="none"),n.style.pointerEvents="none",document.body.appendChild(n)}})(n,s),(({x:t,y:e},s)=>{const n=document.getElementById(T);if(!n)return;let i=s.ghost?.width,r=s.ghost?.height;typeof i>"u"&&(i=n.getBoundingClientRect().width||112),typeof r>"u"&&(r=n.getBoundingClientRect().height||112);const a=t-i/2,o=e-r/2;n.style.transform=`translate3d(${a}px, ${o}px, 0)`,s.ghost&&(K(t,e,s.ghost,s.settings?.dragInOverlapX,s.settings?.dragInOverlapY)?n.style.animation!=P&&(n.style.animation=P):n.style.animation!=F&&(n.style.animation=F))})(n,s),this._dragGhostAnimationFrameId=null})))}removeDragGhost(){this._dragGhostAnimationFrameId&&(cancelAnimationFrame(this._dragGhostAnimationFrameId),this._dragGhostAnimationFrameId=null),this._dragGhostRemoveAnimationFrameId||(this._dragGhostRemoveAnimationFrameId=requestAnimationFrame(()=>{const t=document.getElementById(T);t&&document.body.removeChild(t),this._dragGhostRemoveAnimationFrameId=null}))}}const Q=Object.freeze(Object.defineProperty({__proto__:null,DragInFromWebsiteStrategy:class{_options={};_instance;_mainDomElement;_currentDrag={};_currentTouch=null;_firefoxDragPosition={x:0,y:0};_onBeforeUpdateDrag=()=>({});isDragging=!1;_firefoxFallback=t=>{if(!this._currentDrag.event)return;t.preventDefault();const e=t||window.event;this._firefoxDragPosition.x=e.pageX||0,this._firefoxDragPosition.y=e.pageY||0};constructor(t,e,s){this._instance=t,this._mainDomElement=e,this._options=s||{},this._firefoxFallback=this._firefoxFallback.bind(this),document.addEventListener("dragover",this._firefoxFallback),this._mainDomElement.parentElement?.addEventListener("dragleave",()=>{this._instance.cancelDragIn()})}beforeUpdateGhost(t){this._onBeforeUpdateDrag=t}dragStart(t,e,s="rml_id"){const n=this._mainDomElement.parentNode;if("relative"!==G(n).position)return;this._mainDomElement.style.pointerEvents="none";let i=n.querySelector("."+S);i||(i=document.createElement("div"),i.classList.add(S),n.appendChild(i)),i.classList.remove(C),e.target.getAttribute("draggable");const r=n.querySelector("."+x);this._currentDrag.event=e;const a=e.target,o=a.cloneNode(!0),l=a.getBoundingClientRect();o.style.width=`${l.width}px`,o.style.height=`${l.height}px`,this._currentDrag.ghost=new V(o),this._currentDrag.offset||(this._currentDrag.offset={x:0,y:0});const{clientX:h,clientY:c}=j(e,this._firefoxDragPosition);this._currentDrag.offset.x=h-l.left,this._currentDrag.offset.y=c-l.top,e instanceof DragEvent&&e.dataTransfer&&e.dataTransfer.setDragImage&&e.dataTransfer.setDragImage(r,0,0);const{x:g,y:d}=$(n,this._currentDrag.event||e,this._firefoxDragPosition),u=Math.max(1,g),m=Math.max(1,d);this.isDragging=!0,this._instance.dragInObject(t,u,m,s)}dragUpdate(t){const e=this._mainDomElement.parentNode,{x:s,y:n}=$(e,t,this._firefoxDragPosition);if(0===s&&0===n)return;const i=Math.max(1,s),r=Math.max(1,n);if(1===i&&1===r)return;let a=i,o=r;if(X(t)){const t=this._options.settings?.fingerSize||0;a=Math.max(2,i+t),o=Math.max(2,r-t)}const{x:l,y:h,options:c}=this._onBeforeUpdateDrag(a,o,{}),g=c||{settings:{},ghost:{}};g.ghost||(g.ghost={}),g.ghost.visibleIn&&g.ghost.hiddenIn||(g.ghost.hiddenIn=this._mainDomElement.getBoundingClientRect());const d="number"==typeof l?l:a,u="number"==typeof h?h:o;if(this._currentDrag.ghost){const{clientX:e,clientY:s}=j(t,this._firefoxDragPosition);this._currentDrag.ghost.updateDragGhost(e,s,g)}this._instance.updateDrag(d,u,{})}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(C)}touchStart(t,e,s="rml_id"){e.preventDefault();const n={};"number"==typeof this._options?.settings?.touchDragDelay&&(n.delay=this._options.settings.touchDragDelay),this._options?.settings?.touchDragEpsilon&&(n.epsilon=this._options.settings.touchDragEpsilon),this._currentTouch=new q(void 0,{onTouchDragStart:(e,n)=>{this.dragStart(t,n,s)}},n),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){}}},Symbol.toStringTag,{value:"Module"})),Z=t=>{t.preventDefault(),t.stopPropagation()};class tt{_startX=0;_startY=0;_lastX=0;_lastY=0;_epsilon;_isWaiting=!1;_onCustomDragStart;constructor({onCustomDragStart:t},e={}){this._epsilon="number"==typeof e.epsilon?e.epsilon:15,this._onCustomDragStart=t}onMove(t){this._lastX=t.clientX,this._lastY=t.clientY,this._isWaiting&&((t,e)=>{const s=this._lastX-t,n=this._lastY-e;return Math.sqrt(s*s+n*n)})(this._startX,this._startY)>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 et="data-rml-old-draggable",st=(t,e)=>{const s=X(t),n={delay:s?500:100,epsilon:s?10:15};if(!e)return n;if(!(s||t instanceof MouseEvent))return n;const{delayKey:i,epsilonKey:r}=s?{delayKey:"touchDragDelay",epsilonKey:"touchDragEpsilon"}:{delayKey:"customDragDelay",epsilonKey:"customDragEpsilon"};return"number"==typeof e[i]&&(n.delay=e.touchDragDelay),"number"==typeof e[r]&&(n.epsilon=e.touchDragEpsilon),n},nt=Object.freeze(Object.defineProperty({__proto__:null,DragInFromCustomViewStrategy:class{_options={};_instance;_mainDomElement;_viewName;_currentCustomDrag=null;_currentBb=null;_startTarget=null;_onBeforeUpdateDrag=()=>({});isDragging=!1;constructor(t,e,s){this._instance=t,this._options=e||{},this._viewName=s,this._mainDomElement=mainDomElement,this._mainDomElement.parentElement?.addEventListener("dragleave",()=>{this._instance.cancelDragIn()})}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(et,this._startTarget.draggable.toString()),this._startTarget.draggable=!1,this._startTarget.removeEventListener("dragstart",Z),this._startTarget.addEventListener("dragstart",Z)),this._currentBb=await this._instance.getBoundingClientRect((()=>`[data-rml-custom-view="${this._viewName}"]`)());const{clientX:n,clientY:i}=j(e),r=this._currentBb.x+n,a=this._currentBb.y+i;this.isDragging=!0,this._instance.dragInObject(t,r,a,s)}_dragUpdate(t){if(document.body.focus(),this._currentCustomDrag&&this._currentCustomDrag.onMove(t),!this._currentBb||!this.isDragging)return;const{clientX:e,clientY:s}=j(t),{url:n,width:i,height:r}=(t=>{let e="",s=112,n=112;if(!t)return{url:U,width:s,height:n};const i=t;if(i instanceof HTMLElement){const t=i.getBoundingClientRect(),r=i.getAttribute("data-rml-ghost-url"),a=i.getAttribute("data-rml-ghost-width"),o=i.getAttribute("data-rml-ghost-height");r?e=r:!r&&i instanceof HTMLImageElement&&i.src&&(e=i.src),e?(s=t.width,n=t.height):e=U,s=a?parseInt(a,10):s,n=o?parseInt(o,10):n}return{url:e||U,width:s,height:n}})(this._startTarget),a=this._currentBb.x+e,o=this._currentBb.y+s,l=this._options||{},h={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:i,height:r},mode:"custom-view"},{x:c,y:g,options:d}=this._onBeforeUpdateDrag(a,o,h),u="number"==typeof c?c:a,m="number"==typeof g?g:o,_=d||h;this._instance.updateDrag(u,m,_)}_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,this._currentCustomDrag=X(e)?new q(void 0,{onTouchDragStart:(e,n)=>{this._dragStart(t,n,s)}},st(e,this._options)):new tt({onCustomDragStart:e=>this._dragStart(t,e,s)},st(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="true"===this._startTarget.getAttribute(et),this._startTarget.removeAttribute(et),this._startTarget.removeEventListener("dragstart",Z))}releaseInput(t){this._currentCustomDrag&&this._currentCustomDrag.onEnd(),this._resetStartTarget()}}},Symbol.toStringTag,{value:"Module"}));return class extends h{static createPlanner(t,e,s,n=[]){return this._create(t,e,s,n)}static async connect(e,s=[]){const n=new h;n.viewName=e;const{resolve:i,promise:r}=c(),{resolve:a,promise:o}=c(),l=new t("custom-view-"+e,window,window.parent,({message:t,args:e})=>{switch(t){case"registerCustomViewDone":i();break;case"returnMethods":n.handleSetup(e[0]),a();break;default:if(n.isSetupDone)return n.executeMessage({message:t,args:e})}});n.setMessageHandler(l);const g=[e];return l.sendMessage("registerCustomView",g),await r,l.sendMessage("getMethods",g),await o,n.setupPlugins(s,document.body,"custom-view"),await Promise.allSettled(n.pluginsLoaded),n}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,i,r,l){return new Promise(async(h,c)=>{try{const c=n((()=>{const t=(t=>JSON.parse(JSON.stringify(t)))(a);t.locale||(t.locale=((t=null)=>{const e=window.navigator;if(t)return t.substr(0,2);if(Array.isArray(e.languages)&&e.languages.length>0)return e.languages[0].substr(0,2);for(let t=0,n=s.length;t<n;t++){const n=e[s[t]];if(n)return n.substr(0,2)}return"en"})()),"(idle)"===t.id&&delete t.id;const n=(()=>{const t=(()=>{try{return window.self!==window.top}catch{return!0}})();let e=window.location.href;if(t){if(!document.referrer)return null;e=document.referrer}const{hostname:s}=new URL(e);return s})();return n&&(t=>!!(e.includes(t)||t.endsWith("roomle.com")||t.endsWith("gitlab.io")||t.endsWith("gitlab.com")))(n)&&(t.configuratorId="demoConfigurator"),t.customApiUrl=void 0,t.emails=!1,t})(),(t=>(o(t),t?.customApiUrl&&(t.customApiUrl=decodeURIComponent(t.customApiUrl)),t.shareUrl&&(t.deeplink=t.shareUrl.replace("<CONF_ID>","#CONFIGURATIONID#")),t))(r));(t=>{t.featureFlags||(t.featureFlags={}),"boolean"!=typeof t.featureFlags.realPartList&&(t.featureFlags.realPartList=!0),"boolean"!=typeof t.featureFlags.globalCallbacks&&(t.featureFlags.globalCallbacks=!0),"boolean"!=typeof t.featureFlags.mocAr&&(t.featureFlags.mocAr=!1)})(c);const g=await(async(t,e)=>{if("string"!=typeof t)throw new Error('Configurator ID is not a string type: "'+typeof t+'"');const s=e.customApiUrl?e.customApiUrl:"https://api.roomle.com/v2",n=e.overrideTenant||9,i=s+"/configurators/"+t,r="roomle_portal_v2",a="03-"+window.btoa((new Date).toISOString()+";anonymous;"+r),o=new Request(i,{method:"GET",headers:new Headers({apiKey:r,currentTenant:n,locale:"en",language:"en",device:1,token:a,platform:"web"}),mode:"cors",cache:"default"}),l=await fetch(o),{configurator:h}=await l.json();return h})(t,c);r=((t,e)=>{e.configuratorId=t.id;const s=t.settings||{};return!e.overrideTenant&&t.tenant&&(e.overrideTenant=t.tenant),((t,e)=>{const s=JSON.parse(JSON.stringify(t));return n(s,e)})(s,e)})(g,c);const d=new this(g,i,r,l,h);return await Promise.allSettled(d.pluginsLoaded),d}catch(t){return c(t)}})}_waitForIframe;_container;_configuratorSettings;_initData={};_iframe;constructor(e,s,n,i,r){if(super(),!e||"string"!=typeof e.id)throw new Error("Please provide a correct configuratorId, you get the correct ID from your Roomle Contact Person");if(w.has(s))throw new Error("There is already an instance on this DOM element");if(!document.getElementById(m)){const t=n.zIndex||9999999,e=document.createElement("style");e.type="text/css",e.id=m;const s="transition:all ease-in-out 450ms;",i=["-webkit-","-o-"].reduce((t,e)=>t+(e+s),"")+s,r=d();e.innerHTML=`\n .${p}{${_}:${r};}\n .${y}{position:fixed;top:0;left:0;z-index:${t};opacity:0}\n .rml-transition{${i}}\n .${f}{width:100%;height:100%;opacity:1}\n .${v}{height:calc(var(${_},1vh)*100)}\n .${b}{overflow:hidden}\n `,document.head.appendChild(e)}this._executeMessage=this._executeMessage.bind(this);const a=new t("website",window,null,this._executeMessage);this.setMessageHandler(a),this._onResize=this._onResize.bind(this),l()&&window.addEventListener("resize",this._onResize),this._container=s,this._initData=n,this._configuratorSettings=e;const o=this._createIframe();this._onUseFullPage=this._onUseFullPage.bind(this),this._onBackToWebsite=this._onBackToWebsite.bind(this),this._waitForIframe=r,this._container.appendChild(o),this._iframe=o,this.setupPlugins(i,this._iframe),w.set(s,!0)}teardown(){this._container&&w.delete(this._container);const t=this._container.querySelector("iframe");t&&this._container.removeChild(t),window.removeEventListener("resize",this._onResize)}_createIframe(){const t=document.createElement("iframe");let e=this._configuratorSettings?.url||"https://www.roomle.com/t/cp/";return this._initData.useLocalRoomle&&(e=location.href.replace("embedding.html","")),location.href.includes("roomle.gitlab.io")&&(e=location.href.replace("embedding.html","index.html")),this._initData.overrideServerUrl&&(e=this._initData.overrideServerUrl),t.src=e,t.classList.add(p),t.classList.add(f),t}_onResize(){u(this._iframe)}_onUseFullPage(){this._iframe.classList.add(y),document.documentElement.classList.add(b),window.document.body.classList.add(b),l()&&(u(this._iframe),this._iframe.classList.add(v))}_onBackToWebsite(){this._iframe.classList.remove(y),this._iframe.classList.remove(v),document.documentElement.classList.remove(b),window.document.body.classList.remove(b)}_executeMessage({message:t,args:e},s){if(s.source&&s.source===this._iframe?.contentWindow)return"requestBoot"===t?this._messageHandler?(this._messageHandler.setOutgoingMessageBus(s.source),Promise.resolve({result:this._initData})):Promise.resolve({error:"MessageHandler not set"}):"setup"===t?(this.handleSetup(e[0]),g(this.ui.callbacks,"onUseFullPage",this._onUseFullPage),g(this.ui.callbacks,"onBackToWebsite",this._onBackToWebsite),this._waitForIframe(this),setTimeout(()=>{this._messageHandler&&this._messageHandler.sendMessage("websiteReady")},0),Promise.resolve({result:null})):this.executeMessage({message:t,args:e})}}},"object"==typeof exports&&typeof module<"u"?module.exports=e():"function"==typeof define&&define.amd?define(e):((t=typeof globalThis<"u"?globalThis:t||self)["roomle-embedding-lib"]=t["roomle-embedding-lib"]||{},t["roomle-embedding-lib"].umd=t["roomle-embedding-lib"].umd||{},t["roomle-embedding-lib"].umd.min=t["roomle-embedding-lib"].umd.min||{},t["roomle-embedding-lib"].umd.min.js=e());
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
declare const _default: import('vue').DefineComponent<{
|
|
2
|
+
selectedCategory: any;
|
|
3
|
+
selectedSubCategory: any;
|
|
4
|
+
categories: any[];
|
|
5
|
+
showFilterDropdown: boolean;
|
|
6
|
+
}, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {
|
|
7
|
+
"navigate-back": (...args: any[]) => void;
|
|
8
|
+
"toggle-filter": (...args: any[]) => void;
|
|
9
|
+
}, string, import('vue').PublicProps, Readonly<{
|
|
10
|
+
selectedCategory: any;
|
|
11
|
+
selectedSubCategory: any;
|
|
12
|
+
categories: any[];
|
|
13
|
+
showFilterDropdown: boolean;
|
|
14
|
+
}> & Readonly<{
|
|
15
|
+
"onNavigate-back"?: (...args: any[]) => any;
|
|
16
|
+
"onToggle-filter"?: (...args: any[]) => any;
|
|
17
|
+
}>, {}, {}, {}, {}, string, import('vue').ComponentProvideOptions, false, {}, any>;
|
|
18
|
+
export default _default;
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
declare const _default: import('vue').DefineComponent<{
|
|
2
|
+
searchString: string;
|
|
3
|
+
hasNoResults: boolean;
|
|
4
|
+
emptyMessage: string;
|
|
5
|
+
}, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {}, string, import('vue').PublicProps, Readonly<{
|
|
6
|
+
searchString: string;
|
|
7
|
+
hasNoResults: boolean;
|
|
8
|
+
emptyMessage: string;
|
|
9
|
+
}> & Readonly<{}>, {}, {}, {}, {}, string, import('vue').ComponentProvideOptions, false, {}, any>;
|
|
10
|
+
export default _default;
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { ParameterData } from '../../../common/components/side-bar/utils/types';
|
|
2
|
+
|
|
3
|
+
declare const _default: import('vue').DefineComponent<{
|
|
4
|
+
catalogTags: ParameterData<UiPossibleChildTag>[];
|
|
5
|
+
isExpanded?: boolean;
|
|
6
|
+
onExpand: () => void;
|
|
7
|
+
onCollapse: () => void;
|
|
8
|
+
isDesktop: boolean;
|
|
9
|
+
sidebarHeader?: string;
|
|
10
|
+
onClose?: () => void;
|
|
11
|
+
}, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {}, string, import('vue').PublicProps, Readonly<{
|
|
12
|
+
catalogTags: ParameterData<UiPossibleChildTag>[];
|
|
13
|
+
isExpanded?: boolean;
|
|
14
|
+
onExpand: () => void;
|
|
15
|
+
onCollapse: () => void;
|
|
16
|
+
isDesktop: boolean;
|
|
17
|
+
sidebarHeader?: string;
|
|
18
|
+
onClose?: () => void;
|
|
19
|
+
}> & Readonly<{}>, {}, {}, {}, {}, string, import('vue').ComponentProvideOptions, false, {}, any>;
|
|
20
|
+
export default _default;
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
declare const _default: import('vue').DefineComponent<{
|
|
2
|
+
showBreadcrumb?: boolean;
|
|
3
|
+
selectedCategory: any;
|
|
4
|
+
selectedSubCategory: any;
|
|
5
|
+
categories: any[];
|
|
6
|
+
visibleCategories?: any[];
|
|
7
|
+
expandedCategories: Set<string>;
|
|
8
|
+
showFilterDropdown: boolean;
|
|
9
|
+
showMobileMenu?: boolean;
|
|
10
|
+
showAllCategories?: boolean;
|
|
11
|
+
isFilterMode?: boolean;
|
|
12
|
+
viewMode?: string;
|
|
13
|
+
isDesktop?: boolean;
|
|
14
|
+
}, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {
|
|
15
|
+
"navigate-back": (...args: any[]) => void;
|
|
16
|
+
"select-category": (...args: any[]) => void;
|
|
17
|
+
"select-sub-category": (...args: any[]) => void;
|
|
18
|
+
"toggle-dropdown": (...args: any[]) => void;
|
|
19
|
+
"toggle-filter-dropdown": (...args: any[]) => void;
|
|
20
|
+
"toggle-show-all": (...args: any[]) => void;
|
|
21
|
+
}, string, import('vue').PublicProps, Readonly<{
|
|
22
|
+
showBreadcrumb?: boolean;
|
|
23
|
+
selectedCategory: any;
|
|
24
|
+
selectedSubCategory: any;
|
|
25
|
+
categories: any[];
|
|
26
|
+
visibleCategories?: any[];
|
|
27
|
+
expandedCategories: Set<string>;
|
|
28
|
+
showFilterDropdown: boolean;
|
|
29
|
+
showMobileMenu?: boolean;
|
|
30
|
+
showAllCategories?: boolean;
|
|
31
|
+
isFilterMode?: boolean;
|
|
32
|
+
viewMode?: string;
|
|
33
|
+
isDesktop?: boolean;
|
|
34
|
+
}> & Readonly<{
|
|
35
|
+
"onNavigate-back"?: (...args: any[]) => any;
|
|
36
|
+
"onSelect-category"?: (...args: any[]) => any;
|
|
37
|
+
"onSelect-sub-category"?: (...args: any[]) => any;
|
|
38
|
+
"onToggle-dropdown"?: (...args: any[]) => any;
|
|
39
|
+
"onToggle-filter-dropdown"?: (...args: any[]) => any;
|
|
40
|
+
"onToggle-show-all"?: (...args: any[]) => any;
|
|
41
|
+
}>, {}, {}, {}, {}, string, import('vue').ComponentProvideOptions, false, {}, any>;
|
|
42
|
+
export default _default;
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
declare const _default: import('vue').DefineComponent<{
|
|
2
|
+
viewMode: string;
|
|
3
|
+
selectedCategory: any;
|
|
4
|
+
selectedSubCategory: any;
|
|
5
|
+
categories: any[];
|
|
6
|
+
viewType: string;
|
|
7
|
+
searchString: string;
|
|
8
|
+
}, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {
|
|
9
|
+
"select-item": (...args: any[]) => void;
|
|
10
|
+
"drag-start": (...args: any[]) => void;
|
|
11
|
+
"drag-end": (...args: any[]) => void;
|
|
12
|
+
}, string, import('vue').PublicProps, Readonly<{
|
|
13
|
+
viewMode: string;
|
|
14
|
+
selectedCategory: any;
|
|
15
|
+
selectedSubCategory: any;
|
|
16
|
+
categories: any[];
|
|
17
|
+
viewType: string;
|
|
18
|
+
searchString: string;
|
|
19
|
+
}> & Readonly<{
|
|
20
|
+
"onSelect-item"?: (...args: any[]) => any;
|
|
21
|
+
"onDrag-start"?: (...args: any[]) => any;
|
|
22
|
+
"onDrag-end"?: (...args: any[]) => any;
|
|
23
|
+
}>, {}, {}, {}, {}, string, import('vue').ComponentProvideOptions, false, {}, any>;
|
|
24
|
+
export default _default;
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
declare const _default: import('vue').DefineComponent<{
|
|
2
|
+
item: RapiItem;
|
|
3
|
+
onClick?: (item: RapiItem) => void;
|
|
4
|
+
onEdit?: (item: RapiItem) => void;
|
|
5
|
+
onDragStart?: (event: TouchEvent | DragEvent) => void;
|
|
6
|
+
onDragEnd?: () => void;
|
|
7
|
+
}, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {}, string, import('vue').PublicProps, Readonly<{
|
|
8
|
+
item: RapiItem;
|
|
9
|
+
onClick?: (item: RapiItem) => void;
|
|
10
|
+
onEdit?: (item: RapiItem) => void;
|
|
11
|
+
onDragStart?: (event: TouchEvent | DragEvent) => void;
|
|
12
|
+
onDragEnd?: () => void;
|
|
13
|
+
}> & Readonly<{}>, {}, {}, {}, {}, string, import('vue').ComponentProvideOptions, false, {}, any>;
|
|
14
|
+
export default _default;
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
declare const _default: import('vue').DefineComponent<{
|
|
2
|
+
items: any[];
|
|
3
|
+
viewType: string;
|
|
4
|
+
onSelectItem: (item: any) => void;
|
|
5
|
+
onDragStart: (item: any, event: TouchEvent | DragEvent) => void;
|
|
6
|
+
onDragEnd: () => void;
|
|
7
|
+
}, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {}, string, import('vue').PublicProps, Readonly<{
|
|
8
|
+
items: any[];
|
|
9
|
+
viewType: string;
|
|
10
|
+
onSelectItem: (item: any) => void;
|
|
11
|
+
onDragStart: (item: any, event: TouchEvent | DragEvent) => void;
|
|
12
|
+
onDragEnd: () => void;
|
|
13
|
+
}> & Readonly<{}>, {}, {}, {}, {}, string, import('vue').ComponentProvideOptions, false, {}, any>;
|
|
14
|
+
export default _default;
|