@roomle/embedding-lib 5.26.0-alpha.1 → 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 +2 -27
- package/package.json +1 -1
- package/packages/embedding-lib/src/examples/homag-intelligence-catalog-example.d.ts +12 -0
- package/packages/web-sdk/packages/common-core/src/rapi-access.d.ts +1 -0
- package/packages/web-sdk/packages/common-core/src/services/global-callback.d.ts +2 -0
- package/packages/web-sdk/packages/common-core/src/utils/common-utils.d.ts +1 -0
- package/packages/web-sdk/packages/common-core/src/view-model/configurator-view-model.d.ts +4 -0
- package/packages/web-sdk/packages/configurator-core/src/services/configurator-ui-callback.d.ts +5 -0
- package/packages/web-sdk/packages/configurator-core/src/webgl/configurator-scene-manager.d.ts +3 -0
- package/packages/web-sdk/packages/homag-intelligence/src/hi-tag-catalog-callbacks.d.ts +20 -0
- package/packages/web-sdk/packages/homag-intelligence/src/homag-intelligence.d.ts +10 -1
- package/packages/web-sdk/packages/homag-intelligence/src/loader.d.ts +1 -1
- package/packages/web-sdk/packages/planner-core/src/roomle-planner.d.ts +1 -0
- package/packages/web-sdk/packages/planner-core/src/services/planner-kernel-access.d.ts +2 -2
- package/packages/web-sdk/packages/typings/external-objects.d.ts +9 -0
- 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/RotationIndicator.vue.d.ts +1 -1
- 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,31 +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
|
-
* router based grid view concept ([18c7968](https://github.com/roomle-dev/roomle-ui/commit/18c79687167c6d05d1d7c549aea451c872d0a335))
|
|
8
|
-
* unregistering components ([8e707a0](https://github.com/roomle-dev/roomle-ui/commit/8e707a002cd822d57e9a87acd6073f5ce0319f5c))
|
|
9
|
-
* working router view layering system ([447b929](https://github.com/roomle-dev/roomle-ui/commit/447b929dad11aa98fb84e4f59e3fdba21d4d428f))
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
### Bug Fixes
|
|
13
|
-
|
|
14
|
-
* broken drawer behavior on stop configuring while grid view is open ([0c3ff29](https://github.com/roomle-dev/roomle-ui/commit/0c3ff29706ffbdc72be5896a192ac7e0e2cd1442))
|
|
15
|
-
* configurator sidebar addon panels ([c04cede](https://github.com/roomle-dev/roomle-ui/commit/c04cededcdc633a196841cac5cd1a89bebb223d3))
|
|
16
|
-
* decouple slider value and pause mobile sidebar rendering ([0133047](https://github.com/roomle-dev/roomle-ui/commit/0133047468667d3bc430b3d944b17941f808d8a1))
|
|
17
|
-
* e2e passing ([a3763a4](https://github.com/roomle-dev/roomle-ui/commit/a3763a466aadc7ea1f6488e2c6c4e2dafa79a975))
|
|
18
|
-
* failing tests ([bf62d13](https://github.com/roomle-dev/roomle-ui/commit/bf62d13b068e92ee124b155ed549f95eb7ff4646))
|
|
19
|
-
* grid view preview elements resorting ([f4f83fb](https://github.com/roomle-dev/roomle-ui/commit/f4f83fb88e0b1c03d0a7e4e99e8f6d9b69f75349))
|
|
20
|
-
* labels and interaction bugs ([3e7eedf](https://github.com/roomle-dev/roomle-ui/commit/3e7eedfec5fa8acdb97365db435dc29ce43051fa))
|
|
21
|
-
* loading states on variants, active tab bug ([7e8bd10](https://github.com/roomle-dev/roomle-ui/commit/7e8bd109199747f699fef8598892b44140525213))
|
|
22
|
-
* material picker ordering ([cc5dcc2](https://github.com/roomle-dev/roomle-ui/commit/cc5dcc2986801328c3603a546d1cbd82160d9f8f))
|
|
23
|
-
* mobile touch start on range sliders ([32ae540](https://github.com/roomle-dev/roomle-ui/commit/32ae540f64278b1b4c056907befa3e5cc764eec5))
|
|
24
|
-
* part list scrolling ([b536269](https://github.com/roomle-dev/roomle-ui/commit/b536269b0703ed276fe53f104848a37b889ef6d1))
|
|
25
|
-
* redo removal of uuid ([0cb2869](https://github.com/roomle-dev/roomle-ui/commit/0cb28693f43c1979969e8fbe26e8ae2f288383d4))
|
|
26
|
-
* redo removal of uuid ([474751e](https://github.com/roomle-dev/roomle-ui/commit/474751e01a0b8e48f53076324ccc0c77c47e9158))
|
|
27
|
-
* revert ([0c99e68](https://github.com/roomle-dev/roomle-ui/commit/0c99e68529b58ea0a10179ddd47025995630b7b5))
|
|
28
|
-
* tabbed nav ids ([64b6a6a](https://github.com/roomle-dev/roomle-ui/commit/64b6a6a84cf33d25000007666a50633a3218885b))
|
|
29
|
-
* tabbed nav scroller ([6b72823](https://github.com/roomle-dev/roomle-ui/commit/6b72823557e5cc543219fcd2dca3d3cb779c84a1))
|
|
30
|
-
* testparty mobile fixes pt 1 ([845ecba](https://github.com/roomle-dev/roomle-ui/commit/845ecba69ae7f705c0d7e17e84934a0895200d15))
|
|
31
|
-
* various ([b351a18](https://github.com/roomle-dev/roomle-ui/commit/b351a183eb8cd1c4617ac7f29d3efeeee605e57b))
|
|
6
|
+
* Desktop Room Designer - Catalog management new levels ([4eb4179](https://github.com/roomle-dev/roomle-ui/commit/4eb41797f5c032b75bf2b085f9c5d1e7a8287283))
|
package/package.json
CHANGED
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { Example } from '../example';
|
|
2
|
+
import { RoomDesignerApiType } from './utils/homag-intelligence/overlay';
|
|
3
|
+
|
|
4
|
+
export default class DragInExample implements Example {
|
|
5
|
+
private _abortController;
|
|
6
|
+
setupHtml(parent: HTMLElement): Promise<void>;
|
|
7
|
+
closeExample(): Promise<void>;
|
|
8
|
+
private start;
|
|
9
|
+
onRequestPlan(roomDesignerApi: RoomDesignerApiType): Promise<void>;
|
|
10
|
+
doPriceCalculation(roomDesignerApi: RoomDesignerApiType): Promise<void>;
|
|
11
|
+
runExample(): Promise<void>;
|
|
12
|
+
}
|
|
@@ -3,6 +3,7 @@ import { RapiJsonBox } from '../../../typings/rapi-types';
|
|
|
3
3
|
import { KernelMessageMetaInfo, KernelMessageType } from '../kernel-io';
|
|
4
4
|
import { ExternalResponseValidator, FetchOptions, RAPI_PATHS } from '../rapi-access';
|
|
5
5
|
import { UiCallback } from '../utils/ui-callback';
|
|
6
|
+
import { ExternalObjectOnFetchDataMap } from '../../../typings/external-objects';
|
|
6
7
|
|
|
7
8
|
export declare class GlobalCallback extends UiCallback {
|
|
8
9
|
/**
|
|
@@ -33,4 +34,5 @@ export declare class GlobalCallback extends UiCallback {
|
|
|
33
34
|
* is called the scene is ready for rendering it as an image
|
|
34
35
|
*/
|
|
35
36
|
onReadyForRender: () => void;
|
|
37
|
+
onFetchExternalData: <T extends keyof ExternalObjectOnFetchDataMap, K extends string | string[]>(_type: T, _ids: K) => Promise<K extends string ? ExternalObjectOnFetchDataMap[T] : K extends string[] ? Array<ExternalObjectOnFetchDataMap[T]> : never | undefined>;
|
|
36
38
|
}
|
|
@@ -116,3 +116,4 @@ export declare const isRecord: (value: any) => value is Record<string, any>;
|
|
|
116
116
|
export declare const getIdQueryParam: (urlString: string) => string | null;
|
|
117
117
|
export declare const isCtrlOrCmd: (event: KeyboardEvent) => boolean;
|
|
118
118
|
export declare const ctrlOrCmd: (event: KeyboardEvent, checkIfItIsTheOnlyKey?: boolean) => boolean;
|
|
119
|
+
export declare const runIfNotEmpty: <T extends any[]>(ids: string[], executor: () => Promise<T>) => Promise<T>;
|
|
@@ -9,6 +9,7 @@ import { default as InitData } from '../utils/init-data';
|
|
|
9
9
|
import { default as MeshGenerator } from '../webgl/mesh-generator';
|
|
10
10
|
import { default as PlannerKernelAccess } from '../../../planner-core/src/services/planner-kernel-access';
|
|
11
11
|
import { Box3, Mesh } from 'three';
|
|
12
|
+
import { ExternalConfiguration } from '../../../typings/external-objects';
|
|
12
13
|
|
|
13
14
|
export interface ConfiguratorViewModelCallbackI {
|
|
14
15
|
componentUpdated(component: RoomleComponent, kernelComponent: KernelComponent): void;
|
|
@@ -36,6 +37,7 @@ export default class ConfiguratorViewModel implements ConfiguratorKernelCallback
|
|
|
36
37
|
private _geometriesMerged;
|
|
37
38
|
private _subPartObject;
|
|
38
39
|
private _subPartGuard;
|
|
40
|
+
private _externalConfigurations;
|
|
39
41
|
protected _components: Map<number, RoomleComponent>;
|
|
40
42
|
private _previews;
|
|
41
43
|
protected _componentNumberOfPossibleChildren: Map<number, number>;
|
|
@@ -50,6 +52,8 @@ export default class ConfiguratorViewModel implements ConfiguratorKernelCallback
|
|
|
50
52
|
private _applyMeshUVTransform;
|
|
51
53
|
updateAnimationParameters(elementId: number | number[], parameters: KernelParameter[]): void;
|
|
52
54
|
changeAnimationValue(elementId: number, parameterKey: string, value: string, level: number, applyToChildren: boolean, animate: boolean): void;
|
|
55
|
+
saveExternalConfiguration(externalConfiguration: ExternalConfiguration): void;
|
|
56
|
+
getExternalConfigurationById(id: string): ExternalConfiguration;
|
|
53
57
|
private getComponentFromElementId;
|
|
54
58
|
private _addMeshToSubPart;
|
|
55
59
|
private _addMeshToComponent;
|
package/packages/web-sdk/packages/configurator-core/src/services/configurator-ui-callback.d.ts
CHANGED
|
@@ -8,6 +8,7 @@ import { PlannerKernelContainer } from '../../../typings/planner-kernel-containe
|
|
|
8
8
|
import { RoomleComponent } from '../../../common-core/src/webgl/roomle-component-factory';
|
|
9
9
|
import { ConfiguratorDebugCallbacks } from '../configurator-debug-api';
|
|
10
10
|
import { CancelSelectionReasons } from '../../../typings/planner';
|
|
11
|
+
import { ExternalConfiguration } from '../../../typings/external-objects';
|
|
11
12
|
|
|
12
13
|
export type ComponentAction = 'edit' | 'add';
|
|
13
14
|
export type ComponentType = 'preview' | 'component';
|
|
@@ -292,5 +293,9 @@ export default class ConfiguratorUiCallbacks extends UiCallback implements Confi
|
|
|
292
293
|
*/
|
|
293
294
|
onGeometryNotReady: (runtimeId: number) => void;
|
|
294
295
|
onValueMapChanged: (changes: DebugValueMapChange) => void;
|
|
296
|
+
/**
|
|
297
|
+
* is called when the external configuration should be saved
|
|
298
|
+
*/
|
|
299
|
+
onExternalConfigurationSaved: (configuration: ExternalConfiguration) => void;
|
|
295
300
|
constructor(creator: string);
|
|
296
301
|
}
|
package/packages/web-sdk/packages/configurator-core/src/webgl/configurator-scene-manager.d.ts
CHANGED
|
@@ -21,6 +21,7 @@ import { default as CameraBehaviour } from '../../../common-core/src/cameracontr
|
|
|
21
21
|
import { default as CameraBehaviour3d } from '../../../common-core/src/cameracontrol/camera-behaviour-3d';
|
|
22
22
|
import { default as GlobalInitData } from '../../../common-core/src/utils/global-init-data';
|
|
23
23
|
import { CancelSelectionReasons } from '../../../typings/planner';
|
|
24
|
+
import { ExternalConfiguration } from '../../../typings/external-objects';
|
|
24
25
|
|
|
25
26
|
export default class ConfiguratorSceneManager extends SceneManager implements ConfiguratorViewModelCallbackI {
|
|
26
27
|
_creator_: string;
|
|
@@ -48,6 +49,8 @@ export default class ConfiguratorSceneManager extends SceneManager implements Co
|
|
|
48
49
|
enableEvents(): void;
|
|
49
50
|
enableConfiguratorEvents(): void;
|
|
50
51
|
disableConfiguratorEvents(): void;
|
|
52
|
+
saveExternalConfiguration(externalConfiguration: ExternalConfiguration): void;
|
|
53
|
+
getExternalConfigurationById(id: string): ExternalConfiguration;
|
|
51
54
|
protected _getViewModel(): ConfiguratorViewModel;
|
|
52
55
|
protected _getKernelAccess(): PlannerKernelAccess;
|
|
53
56
|
private _showDockings;
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { Emulator } from './emulator';
|
|
2
|
+
import { Context } from '../../common-core/src/di/context';
|
|
3
|
+
|
|
4
|
+
export declare const FAKE_ROOT_TAG = "external:root-tag";
|
|
5
|
+
export declare class HiTagCatalogCallbacks implements Context {
|
|
6
|
+
_creator_: string;
|
|
7
|
+
private _emulator;
|
|
8
|
+
private _articlesPromise;
|
|
9
|
+
private _externalItems;
|
|
10
|
+
private _externalConfigurations;
|
|
11
|
+
private _tagIds;
|
|
12
|
+
private _globalCallback;
|
|
13
|
+
private _configuratorViewModel;
|
|
14
|
+
constructor(creator: string, articles: Promise<any>);
|
|
15
|
+
setEmulator(emulator: Emulator): void;
|
|
16
|
+
private _init;
|
|
17
|
+
private _onCheckExternalCache;
|
|
18
|
+
private _onFetchExternalData;
|
|
19
|
+
private _processedArticles;
|
|
20
|
+
}
|
|
@@ -3,6 +3,8 @@ import { Emulator } from './emulator';
|
|
|
3
3
|
import { ApiOptions } from './loader';
|
|
4
4
|
import { MasterData } from './model/oc-scripts-domain.model';
|
|
5
5
|
import { default as RoomlePlanner } from '../../planner-core/src/roomle-planner';
|
|
6
|
+
import { ExternalConfiguration, ExternalItem } from '../../typings/external-objects';
|
|
7
|
+
import { HiTagCatalogCallbacks } from './hi-tag-catalog-callbacks';
|
|
6
8
|
|
|
7
9
|
declare global {
|
|
8
10
|
interface Window {
|
|
@@ -10,6 +12,13 @@ declare global {
|
|
|
10
12
|
}
|
|
11
13
|
}
|
|
12
14
|
export declare const HOMAG_INTELLIGENCE_ENDPOINT = "https://europe-west3-rml-showcases.cloudfunctions.net/proxy_request?url=";
|
|
15
|
+
export type ExternalObjects = Map<string, {
|
|
16
|
+
id: string;
|
|
17
|
+
label: string;
|
|
18
|
+
items: any[];
|
|
19
|
+
}>;
|
|
20
|
+
export type ExternalItems = Map<string, ExternalItem>;
|
|
21
|
+
export type ExternalConfigurations = Map<string, ExternalConfiguration>;
|
|
13
22
|
export declare class HomagIntelligence extends RmlPlugin {
|
|
14
23
|
private _roomlePlanner;
|
|
15
24
|
private _api;
|
|
@@ -25,7 +34,7 @@ export declare class HomagIntelligence extends RmlPlugin {
|
|
|
25
34
|
masterData: MasterData;
|
|
26
35
|
calcScriptLoaded: boolean;
|
|
27
36
|
}>;
|
|
28
|
-
init(roomlePlanner: RoomlePlanner, libraryId: string, apiOptions: ApiOptions): Promise<this>;
|
|
37
|
+
init(articles: any, catalogCallbacks: HiTagCatalogCallbacks, roomlePlanner: RoomlePlanner, libraryId: string, apiOptions: ApiOptions): Promise<this>;
|
|
29
38
|
private _loadMasterData;
|
|
30
39
|
getEmulator(): Emulator;
|
|
31
40
|
sendToOM(withPrice?: boolean): Promise<void>;
|
|
@@ -17,8 +17,8 @@ export interface ApiOptions {
|
|
|
17
17
|
export declare const fetchDataWithAuthorization: (url: string, type: 'json' | 'text', apiOptions: ApiOptions, debug?: {
|
|
18
18
|
property: string;
|
|
19
19
|
}) => Promise<Response>;
|
|
20
|
+
export declare const loadArticleCatalog: (libraryId: string, apiOptions: ApiOptions) => Promise<any>;
|
|
20
21
|
export declare const loadHiLibrary: (libraryId: string, apiOptions: ApiOptions) => Promise<{
|
|
21
|
-
articles: any;
|
|
22
22
|
masterData: MasterData;
|
|
23
23
|
calcScriptLoaded: boolean;
|
|
24
24
|
}>;
|
|
@@ -524,5 +524,6 @@ export default class RoomlePlanner<P extends readonly PluginName[] = readonly []
|
|
|
524
524
|
newPosDataFromId(id: string): any;
|
|
525
525
|
sendToOM(withPrice?: boolean): Promise<void>;
|
|
526
526
|
fetchPrice(planId?: string): Promise<any>;
|
|
527
|
+
getOrderManagerGroupData(planId?: string): Promise<import('../../homag-intelligence/src/model/oc-scripts-domain.model').PosGroup>;
|
|
527
528
|
getRapiAccess(): RapiAccess;
|
|
528
529
|
}
|
|
@@ -101,8 +101,8 @@ export default class PlannerKernelAccess extends ConfiguratorKernelAccess {
|
|
|
101
101
|
protected _externalObjectConfigurationDeleted(groupId: string): void;
|
|
102
102
|
protected _externalObjectComponentDeleted(remainingGroupOrGroups: ExternalObjectGroup | ExternalObjectGroup[], deletedRootModuleId: string): void;
|
|
103
103
|
_externalObjectConfigurationDuplicated(sourceGroupId: string, newGroupPosition: ExternalObjectGroupPosition): void;
|
|
104
|
-
_externalObjectPlanChanged(movedGroup: ExternalObjectGroup): void
|
|
105
|
-
_externalObjectConfigurationsMerged(mergedGroup: ExternalObjectGroup, idsOfGroupsMerged: string | string[], targetRootModuleId: string): void
|
|
104
|
+
_externalObjectPlanChanged(movedGroup: ExternalObjectGroup): Promise<void>;
|
|
105
|
+
_externalObjectConfigurationsMerged(mergedGroup: ExternalObjectGroup, idsOfGroupsMerged: string | string[], targetRootModuleId: string): Promise<void>;
|
|
106
106
|
_externalObjectComponentSplitOff(splitGroups: ExternalObjectGroup[]): void;
|
|
107
107
|
_externalObjectArrangementChanged(changedGroup: ExternalObjectGroup): void;
|
|
108
108
|
planSnapshotCreated(planSnapshot: RapiPlanSnapshotPostData): void;
|
|
@@ -25,4 +25,13 @@ export type RoomleConfiguratorWithExtObjs = RoomleConfigurator<[
|
|
|
25
25
|
'external-objects'
|
|
26
26
|
]>;
|
|
27
27
|
export type RoomleConfiguratorType = RoomleConfigurator | RoomleConfiguratorWithExtObjs;
|
|
28
|
+
export interface ExternalDataResponse<T> {
|
|
29
|
+
data: T;
|
|
30
|
+
meta: Record<string, any>;
|
|
31
|
+
}
|
|
32
|
+
export interface ExternalObjectOnFetchDataMap {
|
|
33
|
+
'external-item': ExternalDataResponse<ExternalItem>;
|
|
34
|
+
'external-configuration': ExternalDataResponse<ExternalConfiguration>;
|
|
35
|
+
'external-tag': ExternalDataResponse<ExternalTag>;
|
|
36
|
+
}
|
|
28
37
|
export {};
|
|
@@ -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());
|
|
@@ -16,9 +16,9 @@ declare const _default: __VLS_WithTemplateSlots<import('vue').DefineComponent<{
|
|
|
16
16
|
rotationDegrees?: number;
|
|
17
17
|
}> & Readonly<{}>, {
|
|
18
18
|
progress: number;
|
|
19
|
+
radius: number;
|
|
19
20
|
stroke: number;
|
|
20
21
|
selectedObjCenter: PointCoords;
|
|
21
|
-
radius: number;
|
|
22
22
|
snapDegrees: number;
|
|
23
23
|
rotationDegrees: number;
|
|
24
24
|
}, {}, {}, {}, string, import('vue').ComponentProvideOptions, true, {}, any>, {
|
|
@@ -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;
|