@roomle/embedding-lib 5.11.1 → 5.12.0-alpha.10

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.
Files changed (36) hide show
  1. package/docs/md/web/embedding/CHANGELOG.md +3 -3
  2. package/package.json +2 -2
  3. package/packages/build-tools/src/vite-translations-plugin.d.ts +6 -0
  4. package/packages/common/src/utils/configurations.d.ts +4 -0
  5. package/packages/common/src/utils/init-data.d.ts +1 -0
  6. package/roomle-embedding-lib.es.js +2 -1
  7. package/roomle-embedding-lib.es.min.js +1 -1
  8. package/roomle-embedding-lib.umd.js +2 -2
  9. package/roomle-embedding-lib.umd.min.js +1 -1
  10. package/src/common/components/SelectionButtons.vue.d.ts +4 -1
  11. package/src/common/components/ToggleButtons.vue.d.ts +8 -4
  12. package/src/common/components/drawer-layout/DrawerElement.vue.d.ts +1 -1
  13. package/src/common/components/utils/QRCode.vue.d.ts +14 -134
  14. package/src/common/composables/use-configurator-actions-visibility.d.ts +5 -0
  15. package/src/common/composables/use-event-emitter-listener.d.ts +4 -0
  16. package/src/common/composables/use-item-variants.d.ts +2 -2
  17. package/src/common/composables/use-planner-actions-visibility.d.ts +1 -0
  18. package/src/common/composables/use-shared-sidebar-setup.d.ts +1 -0
  19. package/src/common/translations/local-translation-source.d.ts +1 -2
  20. package/src/common/utils/dom.d.ts +1 -1
  21. package/src/common/utils/types.d.ts +1 -0
  22. package/src/configurator/business-logic/sdk-connector.d.ts +1 -0
  23. package/src/configurator/components/utils/RadioButton.vue.d.ts +16 -22
  24. package/src/configurator/components/utils/ScrollHint.vue.d.ts +30 -12
  25. package/src/configurator/embedding/exposed-api.d.ts +3 -0
  26. package/src/configurator/embedding/exposed-callbacks.d.ts +1 -0
  27. package/src/configurator/embedding/helper.d.ts +1 -1
  28. package/src/configurator/embedding/types.d.ts +27 -3
  29. package/src/planner/business-logic/sdk-connector-planner.d.ts +9 -3
  30. package/src/planner/components/overlays/ProductSettings.vue.d.ts +1 -1
  31. package/src/planner/components/overlays/rooms/DoorParametersSetting.vue.d.ts +19 -19
  32. package/src/planner/components/overlays/rooms/FloorColor.vue.d.ts +19 -19
  33. package/src/planner/components/overlays/rooms/SlopingRoof.vue.d.ts +12 -0
  34. package/src/planner/components/overlays/rooms/SlopingRoofDirection.vue.d.ts +15 -0
  35. package/src/planner/components/utils/WallSideIcon.vue.d.ts +11 -1
  36. package/src/planner/utils/planner-sidebar.d.ts +0 -1
@@ -1,6 +1,6 @@
1
- ## [5.11.1](https://github.com/roomle-dev/roomle-ui/compare/embedding-lib-v5.11.0...embedding-lib-v5.11.1) (2025-02-17)
1
+ ## [5.12.0-alpha.10](https://github.com/roomle-dev/roomle-ui/compare/embedding-lib-v5.12.0-alpha.9...embedding-lib-v5.12.0-alpha.10) (2025-03-05)
2
2
 
3
3
 
4
- ### Bug Fixes
4
+ ### Features
5
5
 
6
- * add a core version that serializes json correctly also if a string contains JSON ([b05e1eb](https://github.com/roomle-dev/roomle-ui/commit/b05e1ebc6677df064e6ae89d0eb3100381d6baff))
6
+ * add wall plasterings among options for wall materials ([35fa3c3](https://github.com/roomle-dev/roomle-ui/commit/35fa3c32d3d702c0cca1a41fd477317426445d6e))
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@roomle/embedding-lib",
3
- "version": "5.11.1",
3
+ "version": "5.12.0-alpha.10",
4
4
  "description": "This is a small library which can be used to communicate with the Roomle Configurator",
5
5
  "type": "module",
6
6
  "main": "./roomle-embedding-lib.umd.js",
@@ -29,7 +29,7 @@
29
29
  "npm": "8.3.1"
30
30
  },
31
31
  "devDependencies": {
32
- "@roomle/web-sdk": "2.94.0"
32
+ "@roomle/web-sdk": "2.94.0-alpha.25"
33
33
  },
34
34
  "repository": {
35
35
  "type": "git",
@@ -0,0 +1,6 @@
1
+ import { Plugin } from 'vite';
2
+
3
+ export default function translationsPlugin(options: {
4
+ include: string;
5
+ accessiblePath: string;
6
+ }): Plugin;
@@ -0,0 +1,4 @@
1
+ import { Nullable } from '../../../../src/common/utils/types';
2
+ import { SelectionType } from '../../../../src/planner/store/planner-ui-state';
3
+
4
+ export declare const isConfigurationSelected: (selectionType: Nullable<SelectionType>) => boolean;
@@ -30,6 +30,7 @@ export declare const FALLBACK_INIT_DATA: {
30
30
  wallAutoHeight: boolean;
31
31
  };
32
32
  rotationSnapDegrees: number;
33
+ interactionsCollapsed: boolean;
33
34
  };
34
35
  export declare const CONFIGURATOR_IDLE = "(idle)";
35
36
  export declare const getInitData: (useFallbackId?: boolean) => UiInitData;
@@ -208,7 +208,8 @@ const z = {
208
208
  mocAr: !0,
209
209
  wallAutoHeight: !1
210
210
  },
211
- rotationSnapDegrees: 10
211
+ rotationSnapDegrees: 10,
212
+ interactionsCollapsed: !1
212
213
  }, Y = "(idle)", q = (e) => (O(e), e != null && e.customApiUrl && (e.customApiUrl = decodeURIComponent(e.customApiUrl)), e.shareUrl && (e.deeplink = e.shareUrl.replace(
213
214
  X,
214
215
  Z
@@ -1,4 +1,4 @@
1
- var H=Object.defineProperty,U=(s,e,t)=>e in s?H(s,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):s[e]=t,c=(s,e,t)=>U(s,typeof e!="symbol"?e+"":e,t);class I{constructor(e,t,r,i){c(this,"_side"),c(this,"_incomingMessageBus",null),c(this,"_outgoingMessageBus",null),c(this,"_execMessage",null),this._side=e,this._incomingMessageBus=t,this._outgoingMessageBus=r,this._execMessage=i,this._incomingMessageBus&&this._incomingMessageBus.addEventListener("message",this._handleMessage.bind(this))}setOutgoingMessageBus(e){this._outgoingMessageBus=e}setMessageExecution(e){this._execMessage=e}sendMessage(e,t=[]){return new Promise((r,i)=>{if(this._incomingMessageBus===this._outgoingMessageBus)return r(void 0);const o=new MessageChannel;o.port1.onmessage=n=>{if(!n||!n.data)return o.port1.close(),o.port2.close(),i(new Error(this._side+" received message but response can not be interpreted"));let l;try{l=JSON.parse(n.data)}catch(u){return o.port1.close(),o.port2.close(),this._prepareError(u),i(u)}l.error?i(l.error):l.result!==void 0?r(l.result):r(void 0),o.port1.close(),o.port2.close()};let a="";try{a=JSON.stringify({message:e,args:t})}catch{return i(new Error(this._side+": can not create command because it is not JSON.stringify able"))}if(!this._outgoingMessageBus)return i(new Error(this._side+": outgoing bus not set yet"));this._outgoingMessageBus.postMessage(a,"*",[o.port2])})}_handleMessage(e){const t=e.ports&&Array.isArray(e.ports)&&e.ports.length>0?e.ports[0]:null;if(e.data&&t)try{const r=JSON.parse(e.data);if(!this._execMessage)return t.postMessage(JSON.stringify({error:this._side+" is not ready to handle messages"}));Array.isArray(r.args)||(r.args=[r.args]);const i=this._execMessage(r,e);if(i===void 0)return;i.then((o={})=>{let a,n;typeof o=="object"&&o!==null&&(a=o.error,n=o.result),a?t.postMessage(JSON.stringify({error:a})):n!==void 0?t.postMessage(JSON.stringify({result:n})):t.postMessage(JSON.stringify({result:o}))},o=>{t.postMessage(JSON.stringify({error:this._prepareError(o)}))})}catch(r){t.postMessage(JSON.stringify({error:this._prepareError(r)}))}}_prepareError(e){if(typeof e=="string"){const t=this._side+": "+e;return console.error(t),t}return e.message=this._side+": "+e.message,console.error(e),e.message}}const p=".",f={REQUEST_BOOT:"requestBoot",SETUP:"setup",WEBSITE_READY:"websiteReady"},_={GET_METHODS:"getMethods",RETURN_METHODS:"returnMethods",REGISTER_CUSTOM_VIEW:"registerCustomView",REGISTER_CUSTOM_VIEW_DONE:"registerCustomViewDone"},B=async(s,e)=>{if(typeof s!="string")throw new Error('Configurator ID is not a string type: "'+typeof s+'"');const t=e.customApiUrl?e.customApiUrl:"https://api.roomle.com/v2",r=e.overrideTenant||9,i=t+"/configurators/"+s,o="roomle_portal_v2",a="03-"+window.btoa(new Date().toISOString()+";anonymous;"+o),n=()=>{const d={apiKey:o,currentTenant:r,locale:"en",language:"en",device:1,token:a,platform:"web"};return new Headers(d)},l=new Request(i,{method:"GET",headers:n(),mode:"cors",cache:"default"}),u=await fetch(l),{configurator:h}=await u.json();return h},F=()=>{try{return window.self!==window.top}catch{return!0}},C=["127.0.0.1","localhost","0.0.0.0"],k=()=>{const s=F();let e=window.location.href;if(s){if(!document.referrer)return null;e=document.referrer}const{hostname:t}=new URL(e);return t},x=s=>!!(C.includes(s)||s.endsWith("roomle.com")||s.endsWith("gitlab.io")||s.endsWith("gitlab.com")),y=["language","browserLanguage","userLanguage","systemLanguage"],W=(s=null)=>{const e=window.navigator;if(s)return s.substr(0,2);if(Array.isArray(e.languages)&&e.languages.length>0)return e.languages[0].substr(0,2);for(let t=0,r=y.length;t<r;t++){const i=e[y[t]];if(i)return i.substr(0,2)}return"en"},V=(s,e)=>{const t=JSON.parse(JSON.stringify(s));return w(t,e)},w=(s,e)=>{for(const t in e)try{e[t].constructor===Object?s[t]=w(s[t],e[t]):s[t]=e[t]}catch{s[t]=e[t]}return s};var T=(s=>(s.BOTTOM_BAR="bottom_bar",s.PARTLIST_BOUNDS="partlist_bounds",s.INTERACTION_NOTES="interaction_notes",s))(T||{}),G={BASE_URL:"/",DEV:!1,MODE:"production",PROD:!0,SSR:!1};const J={mobileLandscape:!0,floorMaterialRootTag:"materials_root",buttons:{renderimage:!0,requestproduct:!0,requestplan:!0,load_product:!0,partlist_print:!0},elements:{[T.INTERACTION_NOTES]:!0},helpcenter:{roomdesigner:!0,configurator:!1,disable:!1},firstPersonView:!0,saveToIdb:!0,featureFlags:{mocAr:!0,wallAutoHeight:!1},rotationSnapDegrees:10},$="(idle)",j=s=>(E(s),s!=null&&s.customApiUrl&&(s.customApiUrl=decodeURIComponent(s.customApiUrl)),s.shareUrl&&(s.deeplink=s.shareUrl.replace(Y,Q)),s),E=s=>{if(!s)return;const e=Object.keys(s);for(const t of e){const r=s[t];if(!Array.isArray(r)&&typeof r=="object"&&r!==null&&E(r),Array.isArray(r))for(const i of r)E(i);(r==="true"||r==="false")&&(s[t]=r==="true")}},z=(s,e)=>{e.configuratorId=s.id;const t=s.settings||{};return!e.overrideTenant&&s.tenant&&(e.overrideTenant=s.tenant),V(t,e)},q=()=>{const s={...J};s.locale||(s.locale=W()),s.id===$&&delete s.id;const e=k();return e&&x(e)&&(s.configuratorId="demoConfigurator"),s.customApiUrl=G.VITE_RAPI_URL,s.emails=!1,s},Y="<CONF_ID>",Q="#CONFIGURATIONID#",K=s=>{s.featureFlags||(s.featureFlags={}),typeof s.featureFlags.realPartList!="boolean"&&(s.featureFlags.realPartList=!0),typeof s.featureFlags.globalCallbacks!="boolean"&&(s.featureFlags.globalCallbacks=!0),typeof s.featureFlags.mocAr!="boolean"&&(s.featureFlags.mocAr=!1)},M=()=>/(android)/i.test(navigator.userAgent);class v{constructor(){c(this,"_messageHandler",null),c(this,"isSetupDone",!1),c(this,"viewName","main"),c(this,"plugins",{}),c(this,"pluginsLoaded",[]),c(this,"ui",{callbacks:null}),c(this,"extended",{callbacks:null}),c(this,"configurator",{callbacks:null}),c(this,"analytics",{callbacks:{}}),c(this,"global",{callbacks:{}})}setMessageHandler(e){this._messageHandler=e}handleSetup(e){const{methods:t,callbacks:r}=e;t.forEach(i=>{const o=i.split(p),a=o[0],n=o[1];this[a]||(this[a]={}),this[a][n]=function(){if(!this._messageHandler){console.error("MessageHandler not set");return}return this._messageHandler.sendMessage(i,[...arguments])}.bind(this)}),r.forEach(i=>{const o=i.split(p),a=o[0],n=o[1],l=o[2];this[a]||(this[a]={}),this[a][n]||(this[a][n]={}),this[a][n][l]=()=>{}}),this.isSetupDone=!0}executeMessage({message:e,args:t}){const r=e.split(p),i=r[0],o=r[1],a=r.length===3?r[2]:null;if(a&&this[i][o][a]){const n=this[i][o][a](...t);return n instanceof Promise?n.then(l=>({result:l})):n!==void 0?Promise.resolve({result:n}):Promise.resolve({result:null})}return Promise.reject('Message "'+e+'" is unkown')}setupPlugins(e,t,r="website"){for(const i of e)typeof i=="string"&&i==="dragIn"?this.pluginsLoaded.push(new Promise((o,a)=>{try{import("./drag-in-CYmR1HFI.mjs").then(n=>n.l).then(({DragIn:n})=>{const l=new n(this.ui,t,r,this.viewName);l.init().then(()=>{this.plugins.dragIn=l,o()},a)})}catch(n){a(n)}})):i.name&&i.loader&&this.pluginsLoaded.push(new Promise((o,a)=>{try{i.loader().then(n=>{const l=new n(this.ui,t,r,this.viewName);l.init().then(()=>{this.plugins[i.name]=l,o()},a)})}catch(n){a(n)}}))}}const S=()=>{let s,e;return{promise:new Promise((t,r)=>{s=t,e=r}),resolve:s,reject:e}},N=(s,e,t)=>{let r=null;Object.defineProperty(s,e,{get(){return r||t},set(i){i!=null&&i.mute?r=i.value:(console.warn("You override Roomle defined behaviour. To disalbe this warning pass in an object with the following properties"),console.warn("{ mute: true, value: () => void }"),r=i)}})},R=()=>window.innerHeight*.01+"px",D=s=>{s&&setTimeout(()=>s.style.setProperty(O,R()),0)},L="rml-styles",X=450,O="--rml-full-height",g={CONTAINER:"rml-container",FILL:"rml-fill",POSITION:"rml-pos",TRANSITION:"rml-transition",ANDROID_HEIGHT:"rml-android-height",OVERFLOW_HIDDEN:"rml-overflow-hidden"},b=new Map;class Z extends v{constructor(e,t,r,i,o){if(super(),c(this,"_waitForIframe"),c(this,"_container"),c(this,"_configuratorSettings"),c(this,"_initData",{}),c(this,"_iframe"),!e||typeof e.id!="string")throw new Error("Please provide a correct configuratorId, you get the correct ID from your Roomle Contact Person");if(b.has(t))throw new Error("There is already an instance on this DOM element");if(!document.getElementById(L)){const l=r.zIndex||9999999,u=document.createElement("style");u.type="text/css",u.id=L;const h="transition:all ease-in-out "+X+"ms;",d=["-webkit-","-o-"].reduce((P,A)=>P+=A+h,"")+h,m=R();u.innerHTML=`
1
+ var H=Object.defineProperty,U=(s,e,t)=>e in s?H(s,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):s[e]=t,c=(s,e,t)=>U(s,typeof e!="symbol"?e+"":e,t);class I{constructor(e,t,r,i){c(this,"_side"),c(this,"_incomingMessageBus",null),c(this,"_outgoingMessageBus",null),c(this,"_execMessage",null),this._side=e,this._incomingMessageBus=t,this._outgoingMessageBus=r,this._execMessage=i,this._incomingMessageBus&&this._incomingMessageBus.addEventListener("message",this._handleMessage.bind(this))}setOutgoingMessageBus(e){this._outgoingMessageBus=e}setMessageExecution(e){this._execMessage=e}sendMessage(e,t=[]){return new Promise((r,i)=>{if(this._incomingMessageBus===this._outgoingMessageBus)return r(void 0);const o=new MessageChannel;o.port1.onmessage=n=>{if(!n||!n.data)return o.port1.close(),o.port2.close(),i(new Error(this._side+" received message but response can not be interpreted"));let l;try{l=JSON.parse(n.data)}catch(u){return o.port1.close(),o.port2.close(),this._prepareError(u),i(u)}l.error?i(l.error):l.result!==void 0?r(l.result):r(void 0),o.port1.close(),o.port2.close()};let a="";try{a=JSON.stringify({message:e,args:t})}catch{return i(new Error(this._side+": can not create command because it is not JSON.stringify able"))}if(!this._outgoingMessageBus)return i(new Error(this._side+": outgoing bus not set yet"));this._outgoingMessageBus.postMessage(a,"*",[o.port2])})}_handleMessage(e){const t=e.ports&&Array.isArray(e.ports)&&e.ports.length>0?e.ports[0]:null;if(e.data&&t)try{const r=JSON.parse(e.data);if(!this._execMessage)return t.postMessage(JSON.stringify({error:this._side+" is not ready to handle messages"}));Array.isArray(r.args)||(r.args=[r.args]);const i=this._execMessage(r,e);if(i===void 0)return;i.then((o={})=>{let a,n;typeof o=="object"&&o!==null&&(a=o.error,n=o.result),a?t.postMessage(JSON.stringify({error:a})):n!==void 0?t.postMessage(JSON.stringify({result:n})):t.postMessage(JSON.stringify({result:o}))},o=>{t.postMessage(JSON.stringify({error:this._prepareError(o)}))})}catch(r){t.postMessage(JSON.stringify({error:this._prepareError(r)}))}}_prepareError(e){if(typeof e=="string"){const t=this._side+": "+e;return console.error(t),t}return e.message=this._side+": "+e.message,console.error(e),e.message}}const p=".",f={REQUEST_BOOT:"requestBoot",SETUP:"setup",WEBSITE_READY:"websiteReady"},_={GET_METHODS:"getMethods",RETURN_METHODS:"returnMethods",REGISTER_CUSTOM_VIEW:"registerCustomView",REGISTER_CUSTOM_VIEW_DONE:"registerCustomViewDone"},B=async(s,e)=>{if(typeof s!="string")throw new Error('Configurator ID is not a string type: "'+typeof s+'"');const t=e.customApiUrl?e.customApiUrl:"https://api.roomle.com/v2",r=e.overrideTenant||9,i=t+"/configurators/"+s,o="roomle_portal_v2",a="03-"+window.btoa(new Date().toISOString()+";anonymous;"+o),n=()=>{const d={apiKey:o,currentTenant:r,locale:"en",language:"en",device:1,token:a,platform:"web"};return new Headers(d)},l=new Request(i,{method:"GET",headers:n(),mode:"cors",cache:"default"}),u=await fetch(l),{configurator:h}=await u.json();return h},F=()=>{try{return window.self!==window.top}catch{return!0}},C=["127.0.0.1","localhost","0.0.0.0"],k=()=>{const s=F();let e=window.location.href;if(s){if(!document.referrer)return null;e=document.referrer}const{hostname:t}=new URL(e);return t},x=s=>!!(C.includes(s)||s.endsWith("roomle.com")||s.endsWith("gitlab.io")||s.endsWith("gitlab.com")),y=["language","browserLanguage","userLanguage","systemLanguage"],W=(s=null)=>{const e=window.navigator;if(s)return s.substr(0,2);if(Array.isArray(e.languages)&&e.languages.length>0)return e.languages[0].substr(0,2);for(let t=0,r=y.length;t<r;t++){const i=e[y[t]];if(i)return i.substr(0,2)}return"en"},V=(s,e)=>{const t=JSON.parse(JSON.stringify(s));return w(t,e)},w=(s,e)=>{for(const t in e)try{e[t].constructor===Object?s[t]=w(s[t],e[t]):s[t]=e[t]}catch{s[t]=e[t]}return s};var T=(s=>(s.BOTTOM_BAR="bottom_bar",s.PARTLIST_BOUNDS="partlist_bounds",s.INTERACTION_NOTES="interaction_notes",s))(T||{}),G={BASE_URL:"/",DEV:!1,MODE:"production",PROD:!0,SSR:!1};const J={mobileLandscape:!0,floorMaterialRootTag:"materials_root",buttons:{renderimage:!0,requestproduct:!0,requestplan:!0,load_product:!0,partlist_print:!0},elements:{[T.INTERACTION_NOTES]:!0},helpcenter:{roomdesigner:!0,configurator:!1,disable:!1},firstPersonView:!0,saveToIdb:!0,featureFlags:{mocAr:!0,wallAutoHeight:!1},rotationSnapDegrees:10,interactionsCollapsed:!1},$="(idle)",j=s=>(E(s),s!=null&&s.customApiUrl&&(s.customApiUrl=decodeURIComponent(s.customApiUrl)),s.shareUrl&&(s.deeplink=s.shareUrl.replace(Y,Q)),s),E=s=>{if(!s)return;const e=Object.keys(s);for(const t of e){const r=s[t];if(!Array.isArray(r)&&typeof r=="object"&&r!==null&&E(r),Array.isArray(r))for(const i of r)E(i);(r==="true"||r==="false")&&(s[t]=r==="true")}},z=(s,e)=>{e.configuratorId=s.id;const t=s.settings||{};return!e.overrideTenant&&s.tenant&&(e.overrideTenant=s.tenant),V(t,e)},q=()=>{const s={...J};s.locale||(s.locale=W()),s.id===$&&delete s.id;const e=k();return e&&x(e)&&(s.configuratorId="demoConfigurator"),s.customApiUrl=G.VITE_RAPI_URL,s.emails=!1,s},Y="<CONF_ID>",Q="#CONFIGURATIONID#",K=s=>{s.featureFlags||(s.featureFlags={}),typeof s.featureFlags.realPartList!="boolean"&&(s.featureFlags.realPartList=!0),typeof s.featureFlags.globalCallbacks!="boolean"&&(s.featureFlags.globalCallbacks=!0),typeof s.featureFlags.mocAr!="boolean"&&(s.featureFlags.mocAr=!1)},M=()=>/(android)/i.test(navigator.userAgent);class v{constructor(){c(this,"_messageHandler",null),c(this,"isSetupDone",!1),c(this,"viewName","main"),c(this,"plugins",{}),c(this,"pluginsLoaded",[]),c(this,"ui",{callbacks:null}),c(this,"extended",{callbacks:null}),c(this,"configurator",{callbacks:null}),c(this,"analytics",{callbacks:{}}),c(this,"global",{callbacks:{}})}setMessageHandler(e){this._messageHandler=e}handleSetup(e){const{methods:t,callbacks:r}=e;t.forEach(i=>{const o=i.split(p),a=o[0],n=o[1];this[a]||(this[a]={}),this[a][n]=function(){if(!this._messageHandler){console.error("MessageHandler not set");return}return this._messageHandler.sendMessage(i,[...arguments])}.bind(this)}),r.forEach(i=>{const o=i.split(p),a=o[0],n=o[1],l=o[2];this[a]||(this[a]={}),this[a][n]||(this[a][n]={}),this[a][n][l]=()=>{}}),this.isSetupDone=!0}executeMessage({message:e,args:t}){const r=e.split(p),i=r[0],o=r[1],a=r.length===3?r[2]:null;if(a&&this[i][o][a]){const n=this[i][o][a](...t);return n instanceof Promise?n.then(l=>({result:l})):n!==void 0?Promise.resolve({result:n}):Promise.resolve({result:null})}return Promise.reject('Message "'+e+'" is unkown')}setupPlugins(e,t,r="website"){for(const i of e)typeof i=="string"&&i==="dragIn"?this.pluginsLoaded.push(new Promise((o,a)=>{try{import("./drag-in-CYmR1HFI.mjs").then(n=>n.l).then(({DragIn:n})=>{const l=new n(this.ui,t,r,this.viewName);l.init().then(()=>{this.plugins.dragIn=l,o()},a)})}catch(n){a(n)}})):i.name&&i.loader&&this.pluginsLoaded.push(new Promise((o,a)=>{try{i.loader().then(n=>{const l=new n(this.ui,t,r,this.viewName);l.init().then(()=>{this.plugins[i.name]=l,o()},a)})}catch(n){a(n)}}))}}const S=()=>{let s,e;return{promise:new Promise((t,r)=>{s=t,e=r}),resolve:s,reject:e}},N=(s,e,t)=>{let r=null;Object.defineProperty(s,e,{get(){return r||t},set(i){i!=null&&i.mute?r=i.value:(console.warn("You override Roomle defined behaviour. To disalbe this warning pass in an object with the following properties"),console.warn("{ mute: true, value: () => void }"),r=i)}})},R=()=>window.innerHeight*.01+"px",D=s=>{s&&setTimeout(()=>s.style.setProperty(O,R()),0)},L="rml-styles",X=450,O="--rml-full-height",g={CONTAINER:"rml-container",FILL:"rml-fill",POSITION:"rml-pos",TRANSITION:"rml-transition",ANDROID_HEIGHT:"rml-android-height",OVERFLOW_HIDDEN:"rml-overflow-hidden"},b=new Map;class Z extends v{constructor(e,t,r,i,o){if(super(),c(this,"_waitForIframe"),c(this,"_container"),c(this,"_configuratorSettings"),c(this,"_initData",{}),c(this,"_iframe"),!e||typeof e.id!="string")throw new Error("Please provide a correct configuratorId, you get the correct ID from your Roomle Contact Person");if(b.has(t))throw new Error("There is already an instance on this DOM element");if(!document.getElementById(L)){const l=r.zIndex||9999999,u=document.createElement("style");u.type="text/css",u.id=L;const h="transition:all ease-in-out "+X+"ms;",d=["-webkit-","-o-"].reduce((P,A)=>P+=A+h,"")+h,m=R();u.innerHTML=`
2
2
  .${g.CONTAINER}{${O}:${m};}
3
3
  .${g.POSITION}{position:fixed;top:0;left:0;z-index:${l};opacity:0}
4
4
  .${g.TRANSITION}{${d}}
@@ -1,11 +1,11 @@
1
- (function(_,p){typeof exports=="object"&&typeof module<"u"?module.exports=p():typeof define=="function"&&define.amd?define(p):(_=typeof globalThis<"u"?globalThis:_||self,_["roomle-embedding-lib"]=_["roomle-embedding-lib"]||{},_["roomle-embedding-lib"].umd=_["roomle-embedding-lib"].umd||{},_["roomle-embedding-lib"].umd.js=p())})(this,function(){"use strict";var te=Object.defineProperty;var ee=(_,p,E)=>p in _?te(_,p,{enumerable:!0,configurable:!0,writable:!0,value:E}):_[p]=E;var c=(_,p,E)=>ee(_,typeof p!="symbol"?p+"":p,E);class _{constructor(e,t,s,n){c(this,"_side");c(this,"_incomingMessageBus",null);c(this,"_outgoingMessageBus",null);c(this,"_execMessage",null);this._side=e,this._incomingMessageBus=t,this._outgoingMessageBus=s,this._execMessage=n,this._incomingMessageBus&&this._incomingMessageBus.addEventListener("message",this._handleMessage.bind(this))}setOutgoingMessageBus(e){this._outgoingMessageBus=e}setMessageExecution(e){this._execMessage=e}sendMessage(e,t=[]){return new Promise((s,n)=>{if(this._incomingMessageBus===this._outgoingMessageBus)return s(void 0);const i=new MessageChannel;i.port1.onmessage=a=>{if(!a||!a.data)return i.port1.close(),i.port2.close(),n(new Error(this._side+" received message but response can not be interpreted"));let l;try{l=JSON.parse(a.data)}catch(d){return i.port1.close(),i.port2.close(),this._prepareError(d),n(d)}l.error?n(l.error):l.result!==void 0?s(l.result):s(void 0),i.port1.close(),i.port2.close()};let o="";try{o=JSON.stringify({message:e,args:t})}catch{return n(new Error(this._side+": can not create command because it is not JSON.stringify able"))}if(!this._outgoingMessageBus)return n(new Error(this._side+": outgoing bus not set yet"));this._outgoingMessageBus.postMessage(o,"*",[i.port2])})}_handleMessage(e){const t=e.ports&&Array.isArray(e.ports)&&e.ports.length>0?e.ports[0]:null;if(e.data&&t)try{const s=JSON.parse(e.data);if(!this._execMessage)return t.postMessage(JSON.stringify({error:this._side+" is not ready to handle messages"}));Array.isArray(s.args)||(s.args=[s.args]);const n=this._execMessage(s,e);if(n===void 0)return;n.then((i={})=>{let o,a;typeof i=="object"&&i!==null&&(o=i.error,a=i.result),o?t.postMessage(JSON.stringify({error:o})):a!==void 0?t.postMessage(JSON.stringify({result:a})):t.postMessage(JSON.stringify({result:i}))},i=>{t.postMessage(JSON.stringify({error:this._prepareError(i)}))})}catch(s){t.postMessage(JSON.stringify({error:this._prepareError(s)}))}}_prepareError(e){if(typeof e=="string"){const t=this._side+": "+e;return console.error(t),t}return e.message=this._side+": "+e.message,console.error(e),e.message}}const p=".",E={REQUEST_BOOT:"requestBoot",SETUP:"setup",WEBSITE_READY:"websiteReady"},w={GET_METHODS:"getMethods",RETURN_METHODS:"returnMethods",REGISTER_CUSTOM_VIEW:"registerCustomView",REGISTER_CUSTOM_VIEW_DONE:"registerCustomViewDone"},pt=async(r,e)=>{if(typeof r!="string")throw new Error('Configurator ID is not a string type: "'+typeof r+'"');const t=e.customApiUrl?e.customApiUrl:"https://api.roomle.com/v2",s=e.overrideTenant||9,n=t+"/configurators/"+r,i="roomle_portal_v2",o="03-"+window.btoa(new Date().toISOString()+";anonymous;"+i),a=()=>{const u={apiKey:i,currentTenant:s,locale:"en",language:"en",device:1,token:o,platform:"web"};return new Headers(u)},l=new Request(n,{method:"GET",headers:a(),mode:"cors",cache:"default"}),d=await fetch(l),{configurator:h}=await d.json();return h},yt=()=>{try{return window.self!==window.top}catch{return!0}},Et=["127.0.0.1","localhost","0.0.0.0"],Dt=()=>{const r=yt();let e=window.location.href;if(r){if(!document.referrer)return null;e=document.referrer}const{hostname:t}=new URL(e);return t},Tt=r=>!!(Et.includes(r)||r.endsWith("roomle.com")||r.endsWith("gitlab.io")||r.endsWith("gitlab.com")),k=["language","browserLanguage","userLanguage","systemLanguage"],St=(r=null)=>{const e=window.navigator;if(r)return r.substr(0,2);if(Array.isArray(e.languages)&&e.languages.length>0)return e.languages[0].substr(0,2);for(let t=0,s=k.length;t<s;t++){const n=e[k[t]];if(n)return n.substr(0,2)}return"en"},It=(r,e)=>{const t=JSON.parse(JSON.stringify(r));return L(t,e)},L=(r,e)=>{for(const t in e)try{e[t].constructor===Object?r[t]=L(r[t],e[t]):r[t]=e[t]}catch{r[t]=e[t]}return r};var z=(r=>(r.BOTTOM_BAR="bottom_bar",r.PARTLIST_BOUNDS="partlist_bounds",r.INTERACTION_NOTES="interaction_notes",r))(z||{}),wt={BASE_URL:"/",DEV:!1,MODE:"production",PROD:!0,SSR:!1};const At={mobileLandscape:!0,floorMaterialRootTag:"materials_root",buttons:{renderimage:!0,requestproduct:!0,requestplan:!0,load_product:!0,partlist_print:!0},elements:{[z.INTERACTION_NOTES]:!0},helpcenter:{roomdesigner:!0,configurator:!1,disable:!1},firstPersonView:!0,saveToIdb:!0,featureFlags:{mocAr:!0,wallAutoHeight:!1},rotationSnapDegrees:10},bt="(idle)",Ot=r=>(C(r),r!=null&&r.customApiUrl&&(r.customApiUrl=decodeURIComponent(r.customApiUrl)),r.shareUrl&&(r.deeplink=r.shareUrl.replace(Mt,Lt)),r),C=r=>{if(!r)return;const e=Object.keys(r);for(const t of e){const s=r[t];if(!Array.isArray(s)&&typeof s=="object"&&s!==null&&C(s),Array.isArray(s))for(const n of s)C(n);(s==="true"||s==="false")&&(r[t]=s==="true")}},vt=(r,e)=>{e.configuratorId=r.id;const t=r.settings||{};return!e.overrideTenant&&r.tenant&&(e.overrideTenant=r.tenant),It(t,e)},Rt=()=>{const r={...At};r.locale||(r.locale=St()),r.id===bt&&delete r.id;const e=Dt();return e&&Tt(e)&&(r.configuratorId="demoConfigurator"),r.customApiUrl=wt.VITE_RAPI_URL,r.emails=!1,r},Mt="<CONF_ID>",Lt="#CONFIGURATIONID#",Ct=r=>{r.featureFlags||(r.featureFlags={}),typeof r.featureFlags.realPartList!="boolean"&&(r.featureFlags.realPartList=!0),typeof r.featureFlags.globalCallbacks!="boolean"&&(r.featureFlags.globalCallbacks=!0),typeof r.featureFlags.mocAr!="boolean"&&(r.featureFlags.mocAr=!1)},V=()=>/(android)/i.test(navigator.userAgent);class q{constructor(){c(this,"_messageHandler",null);c(this,"isSetupDone",!1);c(this,"viewName","main");c(this,"plugins",{});c(this,"pluginsLoaded",[]);c(this,"ui",{callbacks:null});c(this,"extended",{callbacks:null});c(this,"configurator",{callbacks:null});c(this,"analytics",{callbacks:{}});c(this,"global",{callbacks:{}})}setMessageHandler(e){this._messageHandler=e}handleSetup(e){const{methods:t,callbacks:s}=e;t.forEach(n=>{const i=n.split(p),o=i[0],a=i[1];this[o]||(this[o]={}),this[o][a]=(function(){if(!this._messageHandler){console.error("MessageHandler not set");return}return this._messageHandler.sendMessage(n,[...arguments])}).bind(this)}),s.forEach(n=>{const i=n.split(p),o=i[0],a=i[1],l=i[2];this[o]||(this[o]={}),this[o][a]||(this[o][a]={}),this[o][a][l]=()=>{}}),this.isSetupDone=!0}executeMessage({message:e,args:t}){const s=e.split(p),n=s[0],i=s[1],o=s.length===3?s[2]:null;if(o&&this[n][i][o]){const a=this[n][i][o](...t);return a instanceof Promise?a.then(l=>({result:l})):a!==void 0?Promise.resolve({result:a}):Promise.resolve({result:null})}return Promise.reject('Message "'+e+'" is unkown')}setupPlugins(e,t,s="website"){for(const n of e)typeof n=="string"&&n==="dragIn"?this.pluginsLoaded.push(new Promise((i,o)=>{try{Promise.resolve().then(()=>Pt).then(({DragIn:a})=>{const l=new a(this.ui,t,s,this.viewName);l.init().then(()=>{this.plugins.dragIn=l,i()},o)})}catch(a){o(a)}})):n.name&&n.loader&&this.pluginsLoaded.push(new Promise((i,o)=>{try{n.loader().then(a=>{const l=new a(this.ui,t,s,this.viewName);l.init().then(()=>{this.plugins[n.name]=l,i()},o)})}catch(a){o(a)}}))}}const K=()=>{let r,e;return{promise:new Promise((s,n)=>{r=s,e=n}),resolve:r,reject:e}},J=(r,e,t)=>{let s=null;Object.defineProperty(r,e,{get(){return s||t},set(n){n!=null&&n.mute?s=n.value:(console.warn("You override Roomle defined behaviour. To disalbe this warning pass in an object with the following properties"),console.warn("{ mute: true, value: () => void }"),s=n)}})},j=()=>window.innerHeight*.01+"px",Q=r=>{r&&setTimeout(()=>r.style.setProperty(N,j()),0)},Z="rml-styles",Nt=450,N="--rml-full-height",m={CONTAINER:"rml-container",FILL:"rml-fill",POSITION:"rml-pos",TRANSITION:"rml-transition",ANDROID_HEIGHT:"rml-android-height",OVERFLOW_HIDDEN:"rml-overflow-hidden"},x=new Map;class xt extends q{constructor(t,s,n,i,o){super();c(this,"_waitForIframe");c(this,"_container");c(this,"_configuratorSettings");c(this,"_initData",{});c(this,"_iframe");if(!t||typeof t.id!="string")throw new Error("Please provide a correct configuratorId, you get the correct ID from your Roomle Contact Person");if(x.has(s))throw new Error("There is already an instance on this DOM element");if(!!!document.getElementById(Z)){const h=n.zIndex||9999999,u=document.createElement("style");u.type="text/css",u.id=Z;const g="transition:all ease-in-out "+Nt+"ms;",f=["-webkit-","-o-"].reduce((D,y)=>D+=y+g,"")+g,S=j();u.innerHTML=`
1
+ (function(_,p){typeof exports=="object"&&typeof module<"u"?module.exports=p():typeof define=="function"&&define.amd?define(p):(_=typeof globalThis<"u"?globalThis:_||self,_["roomle-embedding-lib"]=_["roomle-embedding-lib"]||{},_["roomle-embedding-lib"].umd=_["roomle-embedding-lib"].umd||{},_["roomle-embedding-lib"].umd.js=p())})(this,function(){"use strict";var te=Object.defineProperty;var ee=(_,p,E)=>p in _?te(_,p,{enumerable:!0,configurable:!0,writable:!0,value:E}):_[p]=E;var c=(_,p,E)=>ee(_,typeof p!="symbol"?p+"":p,E);class _{constructor(e,t,s,n){c(this,"_side");c(this,"_incomingMessageBus",null);c(this,"_outgoingMessageBus",null);c(this,"_execMessage",null);this._side=e,this._incomingMessageBus=t,this._outgoingMessageBus=s,this._execMessage=n,this._incomingMessageBus&&this._incomingMessageBus.addEventListener("message",this._handleMessage.bind(this))}setOutgoingMessageBus(e){this._outgoingMessageBus=e}setMessageExecution(e){this._execMessage=e}sendMessage(e,t=[]){return new Promise((s,n)=>{if(this._incomingMessageBus===this._outgoingMessageBus)return s(void 0);const i=new MessageChannel;i.port1.onmessage=a=>{if(!a||!a.data)return i.port1.close(),i.port2.close(),n(new Error(this._side+" received message but response can not be interpreted"));let l;try{l=JSON.parse(a.data)}catch(d){return i.port1.close(),i.port2.close(),this._prepareError(d),n(d)}l.error?n(l.error):l.result!==void 0?s(l.result):s(void 0),i.port1.close(),i.port2.close()};let o="";try{o=JSON.stringify({message:e,args:t})}catch{return n(new Error(this._side+": can not create command because it is not JSON.stringify able"))}if(!this._outgoingMessageBus)return n(new Error(this._side+": outgoing bus not set yet"));this._outgoingMessageBus.postMessage(o,"*",[i.port2])})}_handleMessage(e){const t=e.ports&&Array.isArray(e.ports)&&e.ports.length>0?e.ports[0]:null;if(e.data&&t)try{const s=JSON.parse(e.data);if(!this._execMessage)return t.postMessage(JSON.stringify({error:this._side+" is not ready to handle messages"}));Array.isArray(s.args)||(s.args=[s.args]);const n=this._execMessage(s,e);if(n===void 0)return;n.then((i={})=>{let o,a;typeof i=="object"&&i!==null&&(o=i.error,a=i.result),o?t.postMessage(JSON.stringify({error:o})):a!==void 0?t.postMessage(JSON.stringify({result:a})):t.postMessage(JSON.stringify({result:i}))},i=>{t.postMessage(JSON.stringify({error:this._prepareError(i)}))})}catch(s){t.postMessage(JSON.stringify({error:this._prepareError(s)}))}}_prepareError(e){if(typeof e=="string"){const t=this._side+": "+e;return console.error(t),t}return e.message=this._side+": "+e.message,console.error(e),e.message}}const p=".",E={REQUEST_BOOT:"requestBoot",SETUP:"setup",WEBSITE_READY:"websiteReady"},w={GET_METHODS:"getMethods",RETURN_METHODS:"returnMethods",REGISTER_CUSTOM_VIEW:"registerCustomView",REGISTER_CUSTOM_VIEW_DONE:"registerCustomViewDone"},pt=async(r,e)=>{if(typeof r!="string")throw new Error('Configurator ID is not a string type: "'+typeof r+'"');const t=e.customApiUrl?e.customApiUrl:"https://api.roomle.com/v2",s=e.overrideTenant||9,n=t+"/configurators/"+r,i="roomle_portal_v2",o="03-"+window.btoa(new Date().toISOString()+";anonymous;"+i),a=()=>{const u={apiKey:i,currentTenant:s,locale:"en",language:"en",device:1,token:o,platform:"web"};return new Headers(u)},l=new Request(n,{method:"GET",headers:a(),mode:"cors",cache:"default"}),d=await fetch(l),{configurator:h}=await d.json();return h},yt=()=>{try{return window.self!==window.top}catch{return!0}},Et=["127.0.0.1","localhost","0.0.0.0"],Dt=()=>{const r=yt();let e=window.location.href;if(r){if(!document.referrer)return null;e=document.referrer}const{hostname:t}=new URL(e);return t},Tt=r=>!!(Et.includes(r)||r.endsWith("roomle.com")||r.endsWith("gitlab.io")||r.endsWith("gitlab.com")),k=["language","browserLanguage","userLanguage","systemLanguage"],St=(r=null)=>{const e=window.navigator;if(r)return r.substr(0,2);if(Array.isArray(e.languages)&&e.languages.length>0)return e.languages[0].substr(0,2);for(let t=0,s=k.length;t<s;t++){const n=e[k[t]];if(n)return n.substr(0,2)}return"en"},It=(r,e)=>{const t=JSON.parse(JSON.stringify(r));return C(t,e)},C=(r,e)=>{for(const t in e)try{e[t].constructor===Object?r[t]=C(r[t],e[t]):r[t]=e[t]}catch{r[t]=e[t]}return r};var z=(r=>(r.BOTTOM_BAR="bottom_bar",r.PARTLIST_BOUNDS="partlist_bounds",r.INTERACTION_NOTES="interaction_notes",r))(z||{}),wt={BASE_URL:"/",DEV:!1,MODE:"production",PROD:!0,SSR:!1};const At={mobileLandscape:!0,floorMaterialRootTag:"materials_root",buttons:{renderimage:!0,requestproduct:!0,requestplan:!0,load_product:!0,partlist_print:!0},elements:{[z.INTERACTION_NOTES]:!0},helpcenter:{roomdesigner:!0,configurator:!1,disable:!1},firstPersonView:!0,saveToIdb:!0,featureFlags:{mocAr:!0,wallAutoHeight:!1},rotationSnapDegrees:10,interactionsCollapsed:!1},bt="(idle)",Ot=r=>(L(r),r!=null&&r.customApiUrl&&(r.customApiUrl=decodeURIComponent(r.customApiUrl)),r.shareUrl&&(r.deeplink=r.shareUrl.replace(Mt,Ct)),r),L=r=>{if(!r)return;const e=Object.keys(r);for(const t of e){const s=r[t];if(!Array.isArray(s)&&typeof s=="object"&&s!==null&&L(s),Array.isArray(s))for(const n of s)L(n);(s==="true"||s==="false")&&(r[t]=s==="true")}},vt=(r,e)=>{e.configuratorId=r.id;const t=r.settings||{};return!e.overrideTenant&&r.tenant&&(e.overrideTenant=r.tenant),It(t,e)},Rt=()=>{const r={...At};r.locale||(r.locale=St()),r.id===bt&&delete r.id;const e=Dt();return e&&Tt(e)&&(r.configuratorId="demoConfigurator"),r.customApiUrl=wt.VITE_RAPI_URL,r.emails=!1,r},Mt="<CONF_ID>",Ct="#CONFIGURATIONID#",Lt=r=>{r.featureFlags||(r.featureFlags={}),typeof r.featureFlags.realPartList!="boolean"&&(r.featureFlags.realPartList=!0),typeof r.featureFlags.globalCallbacks!="boolean"&&(r.featureFlags.globalCallbacks=!0),typeof r.featureFlags.mocAr!="boolean"&&(r.featureFlags.mocAr=!1)},V=()=>/(android)/i.test(navigator.userAgent);class q{constructor(){c(this,"_messageHandler",null);c(this,"isSetupDone",!1);c(this,"viewName","main");c(this,"plugins",{});c(this,"pluginsLoaded",[]);c(this,"ui",{callbacks:null});c(this,"extended",{callbacks:null});c(this,"configurator",{callbacks:null});c(this,"analytics",{callbacks:{}});c(this,"global",{callbacks:{}})}setMessageHandler(e){this._messageHandler=e}handleSetup(e){const{methods:t,callbacks:s}=e;t.forEach(n=>{const i=n.split(p),o=i[0],a=i[1];this[o]||(this[o]={}),this[o][a]=(function(){if(!this._messageHandler){console.error("MessageHandler not set");return}return this._messageHandler.sendMessage(n,[...arguments])}).bind(this)}),s.forEach(n=>{const i=n.split(p),o=i[0],a=i[1],l=i[2];this[o]||(this[o]={}),this[o][a]||(this[o][a]={}),this[o][a][l]=()=>{}}),this.isSetupDone=!0}executeMessage({message:e,args:t}){const s=e.split(p),n=s[0],i=s[1],o=s.length===3?s[2]:null;if(o&&this[n][i][o]){const a=this[n][i][o](...t);return a instanceof Promise?a.then(l=>({result:l})):a!==void 0?Promise.resolve({result:a}):Promise.resolve({result:null})}return Promise.reject('Message "'+e+'" is unkown')}setupPlugins(e,t,s="website"){for(const n of e)typeof n=="string"&&n==="dragIn"?this.pluginsLoaded.push(new Promise((i,o)=>{try{Promise.resolve().then(()=>Pt).then(({DragIn:a})=>{const l=new a(this.ui,t,s,this.viewName);l.init().then(()=>{this.plugins.dragIn=l,i()},o)})}catch(a){o(a)}})):n.name&&n.loader&&this.pluginsLoaded.push(new Promise((i,o)=>{try{n.loader().then(a=>{const l=new a(this.ui,t,s,this.viewName);l.init().then(()=>{this.plugins[n.name]=l,i()},o)})}catch(a){o(a)}}))}}const K=()=>{let r,e;return{promise:new Promise((s,n)=>{r=s,e=n}),resolve:r,reject:e}},J=(r,e,t)=>{let s=null;Object.defineProperty(r,e,{get(){return s||t},set(n){n!=null&&n.mute?s=n.value:(console.warn("You override Roomle defined behaviour. To disalbe this warning pass in an object with the following properties"),console.warn("{ mute: true, value: () => void }"),s=n)}})},j=()=>window.innerHeight*.01+"px",Q=r=>{r&&setTimeout(()=>r.style.setProperty(N,j()),0)},Z="rml-styles",Nt=450,N="--rml-full-height",m={CONTAINER:"rml-container",FILL:"rml-fill",POSITION:"rml-pos",TRANSITION:"rml-transition",ANDROID_HEIGHT:"rml-android-height",OVERFLOW_HIDDEN:"rml-overflow-hidden"},x=new Map;class xt extends q{constructor(t,s,n,i,o){super();c(this,"_waitForIframe");c(this,"_container");c(this,"_configuratorSettings");c(this,"_initData",{});c(this,"_iframe");if(!t||typeof t.id!="string")throw new Error("Please provide a correct configuratorId, you get the correct ID from your Roomle Contact Person");if(x.has(s))throw new Error("There is already an instance on this DOM element");if(!!!document.getElementById(Z)){const h=n.zIndex||9999999,u=document.createElement("style");u.type="text/css",u.id=Z;const g="transition:all ease-in-out "+Nt+"ms;",f=["-webkit-","-o-"].reduce((D,y)=>D+=y+g,"")+g,S=j();u.innerHTML=`
2
2
  .${m.CONTAINER}{${N}:${S};}
3
3
  .${m.POSITION}{position:fixed;top:0;left:0;z-index:${h};opacity:0}
4
4
  .${m.TRANSITION}{${f}}
5
5
  .${m.FILL}{width:100%;height:100%;opacity:1}
6
6
  .${m.ANDROID_HEIGHT}{height:calc(var(${N},1vh)*100)}
7
7
  .${m.OVERFLOW_HIDDEN}{overflow:hidden}
8
- `,document.head.appendChild(u)}this._executeMessage=this._executeMessage.bind(this);const l=new _("website",window,null,this._executeMessage);this.setMessageHandler(l),this._onResize=this._onResize.bind(this),V()&&window.addEventListener("resize",this._onResize),this._container=s,this._initData=n,this._configuratorSettings=t;const d=this._createIframe();this._onUseFullPage=this._onUseFullPage.bind(this),this._onBackToWebsite=this._onBackToWebsite.bind(this),this._waitForIframe=o,this._container.appendChild(d),this._iframe=d,this.setupPlugins(i,this._iframe),x.set(s,!0)}static createPlanner(t,s,n,i=[]){return this._create(t,s,n,i)}static async connect(t,s=[]){const n=new q;n.viewName=t;const{resolve:i,promise:o}=K(),{resolve:a,promise:l}=K(),d=({message:g,args:f})=>{switch(g){case w.REGISTER_CUSTOM_VIEW_DONE:i();break;case w.RETURN_METHODS:n.handleSetup(f[0]),a();break;default:if(n.isSetupDone)return n.executeMessage({message:g,args:f})}},h=new _("custom-view-"+t,window,window.parent,d);n.setMessageHandler(h);const u=[t];return h.sendMessage(w.REGISTER_CUSTOM_VIEW,u),await o,h.sendMessage(w.GET_METHODS,u),await l,n.setupPlugins(s,document.body,"custom-view"),await Promise.allSettled(n.pluginsLoaded),n}static createConfigurator(t,s,n,i=[]){return this._create(t,s,n,i)}static create(t,s,n,i){return this._create(t,s,n,i)}static createViewer(t,s,n,i=[]){return this._create(t,s,n,i)}static async _create(t,s,n,i){return new Promise(async(o,a)=>{try{const l=L(Rt(),Ot(n));Ct(l);const d=await pt(t,l);n=vt(d,l);const h=new this(d,s,n,i,o);return await Promise.allSettled(h.pluginsLoaded),h}catch(l){return a(l)}})}teardown(){this._container&&x.delete(this._container);const t=this._container.querySelector("iframe");t&&this._container.removeChild(t),window.removeEventListener("resize",this._onResize)}_createIframe(){var n;const t=document.createElement("iframe");let s=((n=this._configuratorSettings)==null?void 0:n.url)||"https://www.roomle.com/t/cp/";return this._initData.useLocalRoomle&&(s=location.href.replace("embedding.html","")),location.href.includes("roomle.gitlab.io")&&(s=location.href.replace("embedding.html","index.html")),this._initData.overrideServerUrl&&(s=this._initData.overrideServerUrl),t.src=s,t.classList.add(m.CONTAINER),t.classList.add(m.FILL),t}_onResize(){Q(this._iframe)}_onUseFullPage(){this._iframe.classList.add(m.POSITION),document.documentElement.classList.add(m.OVERFLOW_HIDDEN),window.document.body.classList.add(m.OVERFLOW_HIDDEN),V()&&(Q(this._iframe),this._iframe.classList.add(m.ANDROID_HEIGHT))}_onBackToWebsite(){this._iframe.classList.remove(m.POSITION),this._iframe.classList.remove(m.ANDROID_HEIGHT),document.documentElement.classList.remove(m.OVERFLOW_HIDDEN),window.document.body.classList.remove(m.OVERFLOW_HIDDEN)}_executeMessage({message:t,args:s},n){var i;if(n.source&&n.source===((i=this._iframe)==null?void 0:i.contentWindow))return t===E.REQUEST_BOOT?this._messageHandler?(this._messageHandler.setOutgoingMessageBus(n.source),Promise.resolve({result:this._initData})):(console.error("MessageHandler not set"),Promise.resolve({error:"MessageHandler not set"})):t===E.SETUP?(this.handleSetup(s[0]),J(this.ui.callbacks,"onUseFullPage",this._onUseFullPage),J(this.ui.callbacks,"onBackToWebsite",this._onBackToWebsite),this._waitForIframe(this),setTimeout(()=>{if(!this._messageHandler){console.error("MessageHandler not set");return}this._messageHandler.sendMessage(E.WEBSITE_READY)},0),Promise.resolve({result:null})):this.executeMessage({message:t,args:s})}}class Gt{constructor(e,t,s,n){c(this,"_mainDomElement");c(this,"_instance");c(this,"_mode","website");c(this,"_viewName","main");this._instance=e,this._mainDomElement=t,this._mode=s,this._viewName=n}async init(){return Promise.resolve()}}const A="rml-drag-in-styles",b="rml-drag-in-drag-element",O="rml-drag-in-overlay",v="rml-drag-in-drag-ghost",tt="rml-drag-in-fade-in",et="rml-drag-in-fade-out",G={DISPLAY_NONE:"rml-display-none"},st=.5,rt="250ms",nt="forwards",it=`@keyframes ${tt} {from{opacity: 0;}to {opacity: ${st};}}`,ot=`@keyframes ${et} {from{opacity: ${st};}to {opacity: 0;}}`,at=`${tt} ${rt} ${nt}`,ct=`${et} ${rt} ${nt}`,R="https://res.cloudinary.com/roomle/image/upload/v1729679975/fallback_afpyqr.jpg",F=112,P=112;class Ft extends Gt{constructor(t,s,n,i){super(t,s,n,i);c(this,"options",{});c(this,"_customDragSignal",new AbortController);this._mainDomElement=s,this._injectStyles(),this._initializeDragGhost()}_injectStyles(){if(!!!document.getElementById(A)){const s=document.createElement("style");s.type="text/css",s.id=A,s.innerHTML=`
8
+ `,document.head.appendChild(u)}this._executeMessage=this._executeMessage.bind(this);const l=new _("website",window,null,this._executeMessage);this.setMessageHandler(l),this._onResize=this._onResize.bind(this),V()&&window.addEventListener("resize",this._onResize),this._container=s,this._initData=n,this._configuratorSettings=t;const d=this._createIframe();this._onUseFullPage=this._onUseFullPage.bind(this),this._onBackToWebsite=this._onBackToWebsite.bind(this),this._waitForIframe=o,this._container.appendChild(d),this._iframe=d,this.setupPlugins(i,this._iframe),x.set(s,!0)}static createPlanner(t,s,n,i=[]){return this._create(t,s,n,i)}static async connect(t,s=[]){const n=new q;n.viewName=t;const{resolve:i,promise:o}=K(),{resolve:a,promise:l}=K(),d=({message:g,args:f})=>{switch(g){case w.REGISTER_CUSTOM_VIEW_DONE:i();break;case w.RETURN_METHODS:n.handleSetup(f[0]),a();break;default:if(n.isSetupDone)return n.executeMessage({message:g,args:f})}},h=new _("custom-view-"+t,window,window.parent,d);n.setMessageHandler(h);const u=[t];return h.sendMessage(w.REGISTER_CUSTOM_VIEW,u),await o,h.sendMessage(w.GET_METHODS,u),await l,n.setupPlugins(s,document.body,"custom-view"),await Promise.allSettled(n.pluginsLoaded),n}static createConfigurator(t,s,n,i=[]){return this._create(t,s,n,i)}static create(t,s,n,i){return this._create(t,s,n,i)}static createViewer(t,s,n,i=[]){return this._create(t,s,n,i)}static async _create(t,s,n,i){return new Promise(async(o,a)=>{try{const l=C(Rt(),Ot(n));Lt(l);const d=await pt(t,l);n=vt(d,l);const h=new this(d,s,n,i,o);return await Promise.allSettled(h.pluginsLoaded),h}catch(l){return a(l)}})}teardown(){this._container&&x.delete(this._container);const t=this._container.querySelector("iframe");t&&this._container.removeChild(t),window.removeEventListener("resize",this._onResize)}_createIframe(){var n;const t=document.createElement("iframe");let s=((n=this._configuratorSettings)==null?void 0:n.url)||"https://www.roomle.com/t/cp/";return this._initData.useLocalRoomle&&(s=location.href.replace("embedding.html","")),location.href.includes("roomle.gitlab.io")&&(s=location.href.replace("embedding.html","index.html")),this._initData.overrideServerUrl&&(s=this._initData.overrideServerUrl),t.src=s,t.classList.add(m.CONTAINER),t.classList.add(m.FILL),t}_onResize(){Q(this._iframe)}_onUseFullPage(){this._iframe.classList.add(m.POSITION),document.documentElement.classList.add(m.OVERFLOW_HIDDEN),window.document.body.classList.add(m.OVERFLOW_HIDDEN),V()&&(Q(this._iframe),this._iframe.classList.add(m.ANDROID_HEIGHT))}_onBackToWebsite(){this._iframe.classList.remove(m.POSITION),this._iframe.classList.remove(m.ANDROID_HEIGHT),document.documentElement.classList.remove(m.OVERFLOW_HIDDEN),window.document.body.classList.remove(m.OVERFLOW_HIDDEN)}_executeMessage({message:t,args:s},n){var i;if(n.source&&n.source===((i=this._iframe)==null?void 0:i.contentWindow))return t===E.REQUEST_BOOT?this._messageHandler?(this._messageHandler.setOutgoingMessageBus(n.source),Promise.resolve({result:this._initData})):(console.error("MessageHandler not set"),Promise.resolve({error:"MessageHandler not set"})):t===E.SETUP?(this.handleSetup(s[0]),J(this.ui.callbacks,"onUseFullPage",this._onUseFullPage),J(this.ui.callbacks,"onBackToWebsite",this._onBackToWebsite),this._waitForIframe(this),setTimeout(()=>{if(!this._messageHandler){console.error("MessageHandler not set");return}this._messageHandler.sendMessage(E.WEBSITE_READY)},0),Promise.resolve({result:null})):this.executeMessage({message:t,args:s})}}class Gt{constructor(e,t,s,n){c(this,"_mainDomElement");c(this,"_instance");c(this,"_mode","website");c(this,"_viewName","main");this._instance=e,this._mainDomElement=t,this._mode=s,this._viewName=n}async init(){return Promise.resolve()}}const A="rml-drag-in-styles",b="rml-drag-in-drag-element",O="rml-drag-in-overlay",v="rml-drag-in-drag-ghost",tt="rml-drag-in-fade-in",et="rml-drag-in-fade-out",G={DISPLAY_NONE:"rml-display-none"},st=.5,rt="250ms",nt="forwards",it=`@keyframes ${tt} {from{opacity: 0;}to {opacity: ${st};}}`,ot=`@keyframes ${et} {from{opacity: ${st};}to {opacity: 0;}}`,at=`${tt} ${rt} ${nt}`,ct=`${et} ${rt} ${nt}`,R="https://res.cloudinary.com/roomle/image/upload/v1729679975/fallback_afpyqr.jpg",F=112,P=112;class Ft extends Gt{constructor(t,s,n,i){super(t,s,n,i);c(this,"options",{});c(this,"_customDragSignal",new AbortController);this._mainDomElement=s,this._injectStyles(),this._initializeDragGhost()}_injectStyles(){if(!!!document.getElementById(A)){const s=document.createElement("style");s.type="text/css",s.id=A,s.innerHTML=`
9
9
  .${G.DISPLAY_NONE}{display:none}
10
10
  .${O}{position:absolute;top:0;left:0;width:100%;height:100%;z-index:999;}
11
11
  .${v}{position:absolute;top:0;left:0;width:1px;height:1px;z-index:999;pointer-events:none;background-color:transparent;}
@@ -1,4 +1,4 @@
1
- (function(p,D){typeof exports=="object"&&typeof module<"u"?module.exports=D():typeof define=="function"&&define.amd?define(D):(p=typeof globalThis<"u"?globalThis:p||self,p["roomle-embedding-lib"]=p["roomle-embedding-lib"]||{},p["roomle-embedding-lib"].umd=p["roomle-embedding-lib"].umd||{},p["roomle-embedding-lib"].umd.min=p["roomle-embedding-lib"].umd.min||{},p["roomle-embedding-lib"].umd.min.js=D())})(this,function(){"use strict";var p=Object.defineProperty,D=(i,t,e)=>t in i?p(i,t,{enumerable:!0,configurable:!0,writable:!0,value:e}):i[t]=e,h=(i,t,e)=>D(i,typeof t!="symbol"?t+"":t,e);class ${constructor(t,e,s,n){h(this,"_side"),h(this,"_incomingMessageBus",null),h(this,"_outgoingMessageBus",null),h(this,"_execMessage",null),this._side=t,this._incomingMessageBus=e,this._outgoingMessageBus=s,this._execMessage=n,this._incomingMessageBus&&this._incomingMessageBus.addEventListener("message",this._handleMessage.bind(this))}setOutgoingMessageBus(t){this._outgoingMessageBus=t}setMessageExecution(t){this._execMessage=t}sendMessage(t,e=[]){return new Promise((s,n)=>{if(this._incomingMessageBus===this._outgoingMessageBus)return s(void 0);const r=new MessageChannel;r.port1.onmessage=a=>{if(!a||!a.data)return r.port1.close(),r.port2.close(),n(new Error(this._side+" received message but response can not be interpreted"));let c;try{c=JSON.parse(a.data)}catch(l){return r.port1.close(),r.port2.close(),this._prepareError(l),n(l)}c.error?n(c.error):c.result!==void 0?s(c.result):s(void 0),r.port1.close(),r.port2.close()};let o="";try{o=JSON.stringify({message:t,args:e})}catch{return n(new Error(this._side+": can not create command because it is not JSON.stringify able"))}if(!this._outgoingMessageBus)return n(new Error(this._side+": outgoing bus not set yet"));this._outgoingMessageBus.postMessage(o,"*",[r.port2])})}_handleMessage(t){const e=t.ports&&Array.isArray(t.ports)&&t.ports.length>0?t.ports[0]:null;if(t.data&&e)try{const s=JSON.parse(t.data);if(!this._execMessage)return e.postMessage(JSON.stringify({error:this._side+" is not ready to handle messages"}));Array.isArray(s.args)||(s.args=[s.args]);const n=this._execMessage(s,t);if(n===void 0)return;n.then((r={})=>{let o,a;typeof r=="object"&&r!==null&&(o=r.error,a=r.result),o?e.postMessage(JSON.stringify({error:o})):a!==void 0?e.postMessage(JSON.stringify({result:a})):e.postMessage(JSON.stringify({result:r}))},r=>{e.postMessage(JSON.stringify({error:this._prepareError(r)}))})}catch(s){e.postMessage(JSON.stringify({error:this._prepareError(s)}))}}_prepareError(t){if(typeof t=="string"){const e=this._side+": "+t;return console.error(e),e}return t.message=this._side+": "+t.message,console.error(t),t.message}}const C=".",N={REQUEST_BOOT:"requestBoot",SETUP:"setup",WEBSITE_READY:"websiteReady"},E={GET_METHODS:"getMethods",RETURN_METHODS:"returnMethods",REGISTER_CUSTOM_VIEW:"registerCustomView",REGISTER_CUSTOM_VIEW_DONE:"registerCustomViewDone"},yt=async(i,t)=>{if(typeof i!="string")throw new Error('Configurator ID is not a string type: "'+typeof i+'"');const e=t.customApiUrl?t.customApiUrl:"https://api.roomle.com/v2",s=t.overrideTenant||9,n=e+"/configurators/"+i,r="roomle_portal_v2",o="03-"+window.btoa(new Date().toISOString()+";anonymous;"+r),a=()=>{const u={apiKey:r,currentTenant:s,locale:"en",language:"en",device:1,token:o,platform:"web"};return new Headers(u)},c=new Request(n,{method:"GET",headers:a(),mode:"cors",cache:"default"}),l=await fetch(c),{configurator:d}=await l.json();return d},vt=()=>{try{return window.self!==window.top}catch{return!0}},Dt=["127.0.0.1","localhost","0.0.0.0"],bt=()=>{const i=vt();let t=window.location.href;if(i){if(!document.referrer)return null;t=document.referrer}const{hostname:e}=new URL(t);return e},wt=i=>!!(Dt.includes(i)||i.endsWith("roomle.com")||i.endsWith("gitlab.io")||i.endsWith("gitlab.com")),j=["language","browserLanguage","userLanguage","systemLanguage"],Et=(i=null)=>{const t=window.navigator;if(i)return i.substr(0,2);if(Array.isArray(t.languages)&&t.languages.length>0)return t.languages[0].substr(0,2);for(let e=0,s=j.length;e<s;e++){const n=t[j[e]];if(n)return n.substr(0,2)}return"en"},Tt=(i,t)=>{const e=JSON.parse(JSON.stringify(i));return A(e,t)},A=(i,t)=>{for(const e in t)try{t[e].constructor===Object?i[e]=A(i[e],t[e]):i[e]=t[e]}catch{i[e]=t[e]}return i};var z=(i=>(i.BOTTOM_BAR="bottom_bar",i.PARTLIST_BOUNDS="partlist_bounds",i.INTERACTION_NOTES="interaction_notes",i))(z||{}),It={BASE_URL:"/",DEV:!1,MODE:"production",PROD:!0,SSR:!1};const St={mobileLandscape:!0,floorMaterialRootTag:"materials_root",buttons:{renderimage:!0,requestproduct:!0,requestplan:!0,load_product:!0,partlist_print:!0},elements:{[z.INTERACTION_NOTES]:!0},helpcenter:{roomdesigner:!0,configurator:!1,disable:!1},firstPersonView:!0,saveToIdb:!0,featureFlags:{mocAr:!0,wallAutoHeight:!1},rotationSnapDegrees:10},Ot="(idle)",xt=i=>(L(i),i!=null&&i.customApiUrl&&(i.customApiUrl=decodeURIComponent(i.customApiUrl)),i.shareUrl&&(i.deeplink=i.shareUrl.replace(Nt,At)),i),L=i=>{if(!i)return;const t=Object.keys(i);for(const e of t){const s=i[e];if(!Array.isArray(s)&&typeof s=="object"&&s!==null&&L(s),Array.isArray(s))for(const n of s)L(n);(s==="true"||s==="false")&&(i[e]=s==="true")}},Mt=(i,t)=>{t.configuratorId=i.id;const e=i.settings||{};return!t.overrideTenant&&i.tenant&&(t.overrideTenant=i.tenant),Tt(e,t)},Ct=()=>{const i={...St};i.locale||(i.locale=Et()),i.id===Ot&&delete i.id;const t=bt();return t&&wt(t)&&(i.configuratorId="demoConfigurator"),i.customApiUrl=It.VITE_RAPI_URL,i.emails=!1,i},Nt="<CONF_ID>",At="#CONFIGURATIONID#",Lt=i=>{i.featureFlags||(i.featureFlags={}),typeof i.featureFlags.realPartList!="boolean"&&(i.featureFlags.realPartList=!0),typeof i.featureFlags.globalCallbacks!="boolean"&&(i.featureFlags.globalCallbacks=!0),typeof i.featureFlags.mocAr!="boolean"&&(i.featureFlags.mocAr=!1)},V=()=>/(android)/i.test(navigator.userAgent);class q{constructor(){h(this,"_messageHandler",null),h(this,"isSetupDone",!1),h(this,"viewName","main"),h(this,"plugins",{}),h(this,"pluginsLoaded",[]),h(this,"ui",{callbacks:null}),h(this,"extended",{callbacks:null}),h(this,"configurator",{callbacks:null}),h(this,"analytics",{callbacks:{}}),h(this,"global",{callbacks:{}})}setMessageHandler(t){this._messageHandler=t}handleSetup(t){const{methods:e,callbacks:s}=t;e.forEach(n=>{const r=n.split(C),o=r[0],a=r[1];this[o]||(this[o]={}),this[o][a]=function(){if(!this._messageHandler){console.error("MessageHandler not set");return}return this._messageHandler.sendMessage(n,[...arguments])}.bind(this)}),s.forEach(n=>{const r=n.split(C),o=r[0],a=r[1],c=r[2];this[o]||(this[o]={}),this[o][a]||(this[o][a]={}),this[o][a][c]=()=>{}}),this.isSetupDone=!0}executeMessage({message:t,args:e}){const s=t.split(C),n=s[0],r=s[1],o=s.length===3?s[2]:null;if(o&&this[n][r][o]){const a=this[n][r][o](...e);return a instanceof Promise?a.then(c=>({result:c})):a!==void 0?Promise.resolve({result:a}):Promise.resolve({result:null})}return Promise.reject('Message "'+t+'" is unkown')}setupPlugins(t,e,s="website"){for(const n of t)typeof n=="string"&&n==="dragIn"?this.pluginsLoaded.push(new Promise((r,o)=>{try{Promise.resolve().then(()=>Ut).then(({DragIn:a})=>{const c=new a(this.ui,e,s,this.viewName);c.init().then(()=>{this.plugins.dragIn=c,r()},o)})}catch(a){o(a)}})):n.name&&n.loader&&this.pluginsLoaded.push(new Promise((r,o)=>{try{n.loader().then(a=>{const c=new a(this.ui,e,s,this.viewName);c.init().then(()=>{this.plugins[n.name]=c,r()},o)})}catch(a){o(a)}}))}}const J=()=>{let i,t;return{promise:new Promise((e,s)=>{i=e,t=s}),resolve:i,reject:t}},K=(i,t,e)=>{let s=null;Object.defineProperty(i,t,{get(){return s||e},set(n){n!=null&&n.mute?s=n.value:(console.warn("You override Roomle defined behaviour. To disalbe this warning pass in an object with the following properties"),console.warn("{ mute: true, value: () => void }"),s=n)}})},Q=()=>window.innerHeight*.01+"px",Z=i=>{i&&setTimeout(()=>i.style.setProperty(R,Q()),0)},tt="rml-styles",Rt=450,R="--rml-full-height",m={CONTAINER:"rml-container",FILL:"rml-fill",POSITION:"rml-pos",TRANSITION:"rml-transition",ANDROID_HEIGHT:"rml-android-height",OVERFLOW_HIDDEN:"rml-overflow-hidden"},P=new Map;class Pt extends q{constructor(t,e,s,n,r){if(super(),h(this,"_waitForIframe"),h(this,"_container"),h(this,"_configuratorSettings"),h(this,"_initData",{}),h(this,"_iframe"),!t||typeof t.id!="string")throw new Error("Please provide a correct configuratorId, you get the correct ID from your Roomle Contact Person");if(P.has(e))throw new Error("There is already an instance on this DOM element");if(!document.getElementById(tt)){const c=s.zIndex||9999999,l=document.createElement("style");l.type="text/css",l.id=tt;const d="transition:all ease-in-out "+Rt+"ms;",u=["-webkit-","-o-"].reduce((_,y)=>_+=y+d,"")+d,g=Q();l.innerHTML=`
1
+ (function(p,D){typeof exports=="object"&&typeof module<"u"?module.exports=D():typeof define=="function"&&define.amd?define(D):(p=typeof globalThis<"u"?globalThis:p||self,p["roomle-embedding-lib"]=p["roomle-embedding-lib"]||{},p["roomle-embedding-lib"].umd=p["roomle-embedding-lib"].umd||{},p["roomle-embedding-lib"].umd.min=p["roomle-embedding-lib"].umd.min||{},p["roomle-embedding-lib"].umd.min.js=D())})(this,function(){"use strict";var p=Object.defineProperty,D=(i,t,e)=>t in i?p(i,t,{enumerable:!0,configurable:!0,writable:!0,value:e}):i[t]=e,h=(i,t,e)=>D(i,typeof t!="symbol"?t+"":t,e);class ${constructor(t,e,s,n){h(this,"_side"),h(this,"_incomingMessageBus",null),h(this,"_outgoingMessageBus",null),h(this,"_execMessage",null),this._side=t,this._incomingMessageBus=e,this._outgoingMessageBus=s,this._execMessage=n,this._incomingMessageBus&&this._incomingMessageBus.addEventListener("message",this._handleMessage.bind(this))}setOutgoingMessageBus(t){this._outgoingMessageBus=t}setMessageExecution(t){this._execMessage=t}sendMessage(t,e=[]){return new Promise((s,n)=>{if(this._incomingMessageBus===this._outgoingMessageBus)return s(void 0);const r=new MessageChannel;r.port1.onmessage=a=>{if(!a||!a.data)return r.port1.close(),r.port2.close(),n(new Error(this._side+" received message but response can not be interpreted"));let c;try{c=JSON.parse(a.data)}catch(l){return r.port1.close(),r.port2.close(),this._prepareError(l),n(l)}c.error?n(c.error):c.result!==void 0?s(c.result):s(void 0),r.port1.close(),r.port2.close()};let o="";try{o=JSON.stringify({message:t,args:e})}catch{return n(new Error(this._side+": can not create command because it is not JSON.stringify able"))}if(!this._outgoingMessageBus)return n(new Error(this._side+": outgoing bus not set yet"));this._outgoingMessageBus.postMessage(o,"*",[r.port2])})}_handleMessage(t){const e=t.ports&&Array.isArray(t.ports)&&t.ports.length>0?t.ports[0]:null;if(t.data&&e)try{const s=JSON.parse(t.data);if(!this._execMessage)return e.postMessage(JSON.stringify({error:this._side+" is not ready to handle messages"}));Array.isArray(s.args)||(s.args=[s.args]);const n=this._execMessage(s,t);if(n===void 0)return;n.then((r={})=>{let o,a;typeof r=="object"&&r!==null&&(o=r.error,a=r.result),o?e.postMessage(JSON.stringify({error:o})):a!==void 0?e.postMessage(JSON.stringify({result:a})):e.postMessage(JSON.stringify({result:r}))},r=>{e.postMessage(JSON.stringify({error:this._prepareError(r)}))})}catch(s){e.postMessage(JSON.stringify({error:this._prepareError(s)}))}}_prepareError(t){if(typeof t=="string"){const e=this._side+": "+t;return console.error(e),e}return t.message=this._side+": "+t.message,console.error(t),t.message}}const C=".",N={REQUEST_BOOT:"requestBoot",SETUP:"setup",WEBSITE_READY:"websiteReady"},E={GET_METHODS:"getMethods",RETURN_METHODS:"returnMethods",REGISTER_CUSTOM_VIEW:"registerCustomView",REGISTER_CUSTOM_VIEW_DONE:"registerCustomViewDone"},yt=async(i,t)=>{if(typeof i!="string")throw new Error('Configurator ID is not a string type: "'+typeof i+'"');const e=t.customApiUrl?t.customApiUrl:"https://api.roomle.com/v2",s=t.overrideTenant||9,n=e+"/configurators/"+i,r="roomle_portal_v2",o="03-"+window.btoa(new Date().toISOString()+";anonymous;"+r),a=()=>{const u={apiKey:r,currentTenant:s,locale:"en",language:"en",device:1,token:o,platform:"web"};return new Headers(u)},c=new Request(n,{method:"GET",headers:a(),mode:"cors",cache:"default"}),l=await fetch(c),{configurator:d}=await l.json();return d},vt=()=>{try{return window.self!==window.top}catch{return!0}},Dt=["127.0.0.1","localhost","0.0.0.0"],bt=()=>{const i=vt();let t=window.location.href;if(i){if(!document.referrer)return null;t=document.referrer}const{hostname:e}=new URL(t);return e},wt=i=>!!(Dt.includes(i)||i.endsWith("roomle.com")||i.endsWith("gitlab.io")||i.endsWith("gitlab.com")),j=["language","browserLanguage","userLanguage","systemLanguage"],Et=(i=null)=>{const t=window.navigator;if(i)return i.substr(0,2);if(Array.isArray(t.languages)&&t.languages.length>0)return t.languages[0].substr(0,2);for(let e=0,s=j.length;e<s;e++){const n=t[j[e]];if(n)return n.substr(0,2)}return"en"},Tt=(i,t)=>{const e=JSON.parse(JSON.stringify(i));return A(e,t)},A=(i,t)=>{for(const e in t)try{t[e].constructor===Object?i[e]=A(i[e],t[e]):i[e]=t[e]}catch{i[e]=t[e]}return i};var z=(i=>(i.BOTTOM_BAR="bottom_bar",i.PARTLIST_BOUNDS="partlist_bounds",i.INTERACTION_NOTES="interaction_notes",i))(z||{}),It={BASE_URL:"/",DEV:!1,MODE:"production",PROD:!0,SSR:!1};const St={mobileLandscape:!0,floorMaterialRootTag:"materials_root",buttons:{renderimage:!0,requestproduct:!0,requestplan:!0,load_product:!0,partlist_print:!0},elements:{[z.INTERACTION_NOTES]:!0},helpcenter:{roomdesigner:!0,configurator:!1,disable:!1},firstPersonView:!0,saveToIdb:!0,featureFlags:{mocAr:!0,wallAutoHeight:!1},rotationSnapDegrees:10,interactionsCollapsed:!1},Ot="(idle)",xt=i=>(L(i),i!=null&&i.customApiUrl&&(i.customApiUrl=decodeURIComponent(i.customApiUrl)),i.shareUrl&&(i.deeplink=i.shareUrl.replace(Nt,At)),i),L=i=>{if(!i)return;const t=Object.keys(i);for(const e of t){const s=i[e];if(!Array.isArray(s)&&typeof s=="object"&&s!==null&&L(s),Array.isArray(s))for(const n of s)L(n);(s==="true"||s==="false")&&(i[e]=s==="true")}},Mt=(i,t)=>{t.configuratorId=i.id;const e=i.settings||{};return!t.overrideTenant&&i.tenant&&(t.overrideTenant=i.tenant),Tt(e,t)},Ct=()=>{const i={...St};i.locale||(i.locale=Et()),i.id===Ot&&delete i.id;const t=bt();return t&&wt(t)&&(i.configuratorId="demoConfigurator"),i.customApiUrl=It.VITE_RAPI_URL,i.emails=!1,i},Nt="<CONF_ID>",At="#CONFIGURATIONID#",Lt=i=>{i.featureFlags||(i.featureFlags={}),typeof i.featureFlags.realPartList!="boolean"&&(i.featureFlags.realPartList=!0),typeof i.featureFlags.globalCallbacks!="boolean"&&(i.featureFlags.globalCallbacks=!0),typeof i.featureFlags.mocAr!="boolean"&&(i.featureFlags.mocAr=!1)},V=()=>/(android)/i.test(navigator.userAgent);class q{constructor(){h(this,"_messageHandler",null),h(this,"isSetupDone",!1),h(this,"viewName","main"),h(this,"plugins",{}),h(this,"pluginsLoaded",[]),h(this,"ui",{callbacks:null}),h(this,"extended",{callbacks:null}),h(this,"configurator",{callbacks:null}),h(this,"analytics",{callbacks:{}}),h(this,"global",{callbacks:{}})}setMessageHandler(t){this._messageHandler=t}handleSetup(t){const{methods:e,callbacks:s}=t;e.forEach(n=>{const r=n.split(C),o=r[0],a=r[1];this[o]||(this[o]={}),this[o][a]=function(){if(!this._messageHandler){console.error("MessageHandler not set");return}return this._messageHandler.sendMessage(n,[...arguments])}.bind(this)}),s.forEach(n=>{const r=n.split(C),o=r[0],a=r[1],c=r[2];this[o]||(this[o]={}),this[o][a]||(this[o][a]={}),this[o][a][c]=()=>{}}),this.isSetupDone=!0}executeMessage({message:t,args:e}){const s=t.split(C),n=s[0],r=s[1],o=s.length===3?s[2]:null;if(o&&this[n][r][o]){const a=this[n][r][o](...e);return a instanceof Promise?a.then(c=>({result:c})):a!==void 0?Promise.resolve({result:a}):Promise.resolve({result:null})}return Promise.reject('Message "'+t+'" is unkown')}setupPlugins(t,e,s="website"){for(const n of t)typeof n=="string"&&n==="dragIn"?this.pluginsLoaded.push(new Promise((r,o)=>{try{Promise.resolve().then(()=>Ut).then(({DragIn:a})=>{const c=new a(this.ui,e,s,this.viewName);c.init().then(()=>{this.plugins.dragIn=c,r()},o)})}catch(a){o(a)}})):n.name&&n.loader&&this.pluginsLoaded.push(new Promise((r,o)=>{try{n.loader().then(a=>{const c=new a(this.ui,e,s,this.viewName);c.init().then(()=>{this.plugins[n.name]=c,r()},o)})}catch(a){o(a)}}))}}const J=()=>{let i,t;return{promise:new Promise((e,s)=>{i=e,t=s}),resolve:i,reject:t}},K=(i,t,e)=>{let s=null;Object.defineProperty(i,t,{get(){return s||e},set(n){n!=null&&n.mute?s=n.value:(console.warn("You override Roomle defined behaviour. To disalbe this warning pass in an object with the following properties"),console.warn("{ mute: true, value: () => void }"),s=n)}})},Q=()=>window.innerHeight*.01+"px",Z=i=>{i&&setTimeout(()=>i.style.setProperty(R,Q()),0)},tt="rml-styles",Rt=450,R="--rml-full-height",m={CONTAINER:"rml-container",FILL:"rml-fill",POSITION:"rml-pos",TRANSITION:"rml-transition",ANDROID_HEIGHT:"rml-android-height",OVERFLOW_HIDDEN:"rml-overflow-hidden"},P=new Map;class Pt extends q{constructor(t,e,s,n,r){if(super(),h(this,"_waitForIframe"),h(this,"_container"),h(this,"_configuratorSettings"),h(this,"_initData",{}),h(this,"_iframe"),!t||typeof t.id!="string")throw new Error("Please provide a correct configuratorId, you get the correct ID from your Roomle Contact Person");if(P.has(e))throw new Error("There is already an instance on this DOM element");if(!document.getElementById(tt)){const c=s.zIndex||9999999,l=document.createElement("style");l.type="text/css",l.id=tt;const d="transition:all ease-in-out "+Rt+"ms;",u=["-webkit-","-o-"].reduce((_,y)=>_+=y+d,"")+d,g=Q();l.innerHTML=`
2
2
  .${m.CONTAINER}{${R}:${g};}
3
3
  .${m.POSITION}{position:fixed;top:0;left:0;z-index:${c};opacity:0}
4
4
  .${m.TRANSITION}{${u}}
@@ -1,7 +1,10 @@
1
+ import { SharedUiState } from '../store';
2
+
1
3
  declare const _default: import('vue').DefineComponent<import('vue').ExtractPropTypes<{
2
4
  rise: BooleanConstructor;
3
5
  }>, {}, {}, {
4
- isFullscreen(): boolean;
6
+ sharedUiState(): SharedUiState;
7
+ isExpanded(): boolean;
5
8
  }, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {}, string, import('vue').PublicProps, Readonly<import('vue').ExtractPropTypes<{
6
9
  rise: BooleanConstructor;
7
10
  }>> & Readonly<{}>, {
@@ -1,11 +1,15 @@
1
1
  declare const _default: import('vue').DefineComponent<{
2
- firstIconName: string;
3
- secondIconName: string;
2
+ firstIconName?: string;
3
+ secondIconName?: string;
4
+ firstLabel?: string;
5
+ secondLabel?: string;
4
6
  isActive: boolean;
5
7
  toggle: () => void;
6
8
  }, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {}, string, import('vue').PublicProps, Readonly<{
7
- firstIconName: string;
8
- secondIconName: string;
9
+ firstIconName?: string;
10
+ secondIconName?: string;
11
+ firstLabel?: string;
12
+ secondLabel?: string;
9
13
  isActive: boolean;
10
14
  toggle: () => void;
11
15
  }> & Readonly<{}>, {}, {}, {}, {}, string, import('vue').ComponentProvideOptions, false, {}, any>;
@@ -67,8 +67,8 @@ declare const _default: __VLS_WithTemplateSlots<import('vue').DefineComponent<im
67
67
  element: any;
68
68
  }>>> & Readonly<{}>, {
69
69
  label: string;
70
- element: CollectionViewElement<CollectionViewElementPossibleTypes>;
71
70
  type: string;
71
+ element: CollectionViewElement<CollectionViewElementPossibleTypes>;
72
72
  isLast: boolean;
73
73
  elemKey: string;
74
74
  hideBottomBorder: boolean;
@@ -1,139 +1,19 @@
1
- import { PropType } from 'vue';
2
-
3
- declare const _default: import('vue').DefineComponent<import('vue').ExtractPropTypes<{
4
- text: {
5
- type: StringConstructor;
6
- required: true;
7
- };
8
- size: {
9
- type: NumberConstructor;
10
- required: false;
11
- default: number;
12
- };
13
- color: {
14
- type: StringConstructor;
15
- required: false;
16
- default: string;
17
- };
18
- bgColor: {
19
- type: StringConstructor;
20
- required: false;
21
- default: string;
22
- };
23
- errorLevel: {
24
- type: PropType<"M" | "L" | "Q" | "H">;
25
- validator: (value: string) => boolean;
26
- required: false;
27
- default: string;
28
- };
29
- }>, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {}, string, import('vue').PublicProps, Readonly<import('vue').ExtractPropTypes<{
30
- text: {
31
- type: StringConstructor;
32
- required: true;
33
- };
34
- size: {
35
- type: NumberConstructor;
36
- required: false;
37
- default: number;
38
- };
39
- color: {
40
- type: StringConstructor;
41
- required: false;
42
- default: string;
43
- };
44
- bgColor: {
45
- type: StringConstructor;
46
- required: false;
47
- default: string;
48
- };
49
- errorLevel: {
50
- type: PropType<"M" | "L" | "Q" | "H">;
51
- validator: (value: string) => boolean;
52
- required: false;
53
- default: string;
54
- };
55
- }>> & Readonly<{}>, {
1
+ declare const _default: import('vue').DefineComponent<{
2
+ text: string;
56
3
  size: number;
57
4
  color: string;
58
5
  bgColor: string;
59
6
  errorLevel: "M" | "L" | "Q" | "H";
60
- }, {}, {
61
- QrcodeVue: import('vue').DefineComponent<{
62
- renderAs: {
63
- type: PropType<import('qrcode.vue').RenderAs>;
64
- required: boolean;
65
- default: string;
66
- validator: (as: any) => boolean;
67
- };
68
- value: {
69
- type: StringConstructor;
70
- required: boolean;
71
- default: string;
72
- };
73
- size: {
74
- type: NumberConstructor;
75
- default: number;
76
- };
77
- level: {
78
- type: PropType<import('qrcode.vue').Level>;
79
- default: string;
80
- validator: (l: any) => boolean;
81
- };
82
- background: {
83
- type: StringConstructor;
84
- default: string;
85
- };
86
- foreground: {
87
- type: StringConstructor;
88
- default: string;
89
- };
90
- margin: {
91
- type: NumberConstructor;
92
- required: boolean;
93
- default: number;
94
- };
95
- }, unknown, unknown, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {}, string, import('vue').VNodeProps & import('vue').AllowedComponentProps & import('vue').ComponentCustomProps, Readonly<import('vue').ExtractPropTypes<{
96
- renderAs: {
97
- type: PropType<import('qrcode.vue').RenderAs>;
98
- required: boolean;
99
- default: string;
100
- validator: (as: any) => boolean;
101
- };
102
- value: {
103
- type: StringConstructor;
104
- required: boolean;
105
- default: string;
106
- };
107
- size: {
108
- type: NumberConstructor;
109
- default: number;
110
- };
111
- level: {
112
- type: PropType<import('qrcode.vue').Level>;
113
- default: string;
114
- validator: (l: any) => boolean;
115
- };
116
- background: {
117
- type: StringConstructor;
118
- default: string;
119
- };
120
- foreground: {
121
- type: StringConstructor;
122
- default: string;
123
- };
124
- margin: {
125
- type: NumberConstructor;
126
- required: boolean;
127
- default: number;
128
- };
129
- }>>, {
130
- value: string;
131
- size: number;
132
- level: import('qrcode.vue').Level;
133
- background: string;
134
- foreground: string;
135
- margin: number;
136
- renderAs: import('qrcode.vue').RenderAs;
137
- }, {}, {}, {}, string, import('vue').ComponentProvideOptions, true, {}, any>;
138
- }, {}, string, import('vue').ComponentProvideOptions, true, {}, any>;
7
+ }, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {}, string, import('vue').PublicProps, Readonly<{
8
+ text: string;
9
+ size: number;
10
+ color: string;
11
+ bgColor: string;
12
+ errorLevel: "M" | "L" | "Q" | "H";
13
+ }> & Readonly<{}>, {
14
+ size: number;
15
+ color: string;
16
+ bgColor: string;
17
+ errorLevel: "M" | "L" | "Q" | "H";
18
+ }, {}, {}, {}, string, import('vue').ComponentProvideOptions, false, {}, any>;
139
19
  export default _default;
@@ -1,3 +1,8 @@
1
+ import { SceneSelection } from '../../configurator/store/ui-state';
2
+ import { Nullable } from '../utils/types';
3
+
4
+ export declare const isExternalModuleSelection: (currentSelection: Nullable<SceneSelection>) => boolean;
5
+ export declare const isDeletePossible: (currentSelection: Nullable<SceneSelection>) => boolean;
1
6
  export declare const useConfiguratorActionsVisibility: () => {
2
7
  showStartConfiguring: import('vue').ComputedRef<boolean>;
3
8
  showDelete: import('vue').ComputedRef<any>;
@@ -23,11 +23,13 @@ export declare const SIDEBAR_EVENTS: {
23
23
  readonly SET_SIDEBAR: "set-sidebar";
24
24
  readonly POP_SIDEBAR: "pop-sidebar";
25
25
  readonly TOGGLE_SIDEBAR: "toggle-sidebar";
26
+ readonly ACTIVATE_SIDEBAR: "activate-sidebar";
26
27
  };
27
28
  export interface SidebarEventTypes {
28
29
  [SIDEBAR_EVENTS.SET_SIDEBAR]: SidebarType;
29
30
  [SIDEBAR_EVENTS.POP_SIDEBAR]: void;
30
31
  [SIDEBAR_EVENTS.TOGGLE_SIDEBAR]: void;
32
+ [SIDEBAR_EVENTS.ACTIVATE_SIDEBAR]: SidebarType;
31
33
  }
32
34
  export declare const NOTIFICATION_EVENTS: {
33
35
  readonly SET_NOTIFICATION_STATE: "set-notification-state";
@@ -44,6 +46,7 @@ export interface UpdateEventTypes {
44
46
  export declare const CUSTOM_VIEW_EVENTS: {
45
47
  readonly SHOW: "show-custom-view";
46
48
  readonly HIDE: "hide-custom-view";
49
+ readonly ATTIC_UPDATED: "attic-updated";
47
50
  };
48
51
  export interface CustomViewEventTypes {
49
52
  [CUSTOM_VIEW_EVENTS.SHOW]: {
@@ -54,6 +57,7 @@ export interface CustomViewEventTypes {
54
57
  viewName: PossibleCustomViews;
55
58
  options: PossibleCustomViewSettings;
56
59
  };
60
+ [CUSTOM_VIEW_EVENTS.ATTIC_UPDATED]: boolean;
57
61
  }
58
62
  interface EventEmitterTypes extends SidebarEventTypes, UpdateEventTypes, NotificationEventTypes, CustomViewEventTypes {
59
63
  }
@@ -1,7 +1,7 @@
1
1
  import { SdkConnector } from '../../configurator/business-logic/sdk-connector';
2
- import { RapiTag } from '@roomle/web-sdk/lib/definitions/typings/rapi-types';
2
+ import { RapiTag, RapiId } from '@roomle/web-sdk/lib/definitions/typings/rapi-types';
3
3
  import { ComputedRef, Ref } from 'vue';
4
4
  import { Enumify, PLAN_OBJECT_TYPES } from '../utils/types';
5
5
  import { UseAsyncData } from '../utils/composable-helpers';
6
6
 
7
- export declare const useItemVariants: (tagIdsRef: Ref<string[]> | ComputedRef<string[]>, sdkConnector: SdkConnector, filteredVariantType: Enumify<typeof PLAN_OBJECT_TYPES>) => ComputedRef<UseAsyncData<RapiTag[]>>;
7
+ export declare const useItemVariants: (tagIdsRef: Ref<string[]> | ComputedRef<string[]>, sdkConnector: SdkConnector, filteredVariantType: Enumify<typeof PLAN_OBJECT_TYPES> | Ref<Enumify<typeof PLAN_OBJECT_TYPES>>, rootTags?: RapiId | RapiId[]) => ComputedRef<UseAsyncData<RapiTag[]>>;
@@ -8,4 +8,5 @@ export declare const usePlannerActionsVisibility: () => {
8
8
  showSwitchProduct: import('vue').ComputedRef<boolean>;
9
9
  showProductFlip: import('vue').ComputedRef<boolean>;
10
10
  selectionIsConstructionElement: import('vue').ComputedRef<boolean>;
11
+ showSlopingButton: import('vue').ComputedRef<any>;
11
12
  };
@@ -34,6 +34,7 @@ export declare const useSharedSidebarSetup: (topBar: Ref<HTMLElement> | null) =>
34
34
  tooltip: string;
35
35
  }[];
36
36
  checkboxToggle: Ref<HTMLInputElement, HTMLInputElement>;
37
+ isLandscape: import('vue').ComputedRef<any>;
37
38
  currentViewMode: import('vue').ComputedRef<any>;
38
39
  isPartlistShown: import('vue').ComputedRef<any>;
39
40
  areDimensionsVisible: import('vue').ComputedRef<any>;
@@ -2,8 +2,7 @@ import { TranslationSource } from '../composables/use-intl';
2
2
 
3
3
  export default class LocalTranslationSource implements TranslationSource {
4
4
  private _locale;
5
- private _overrideTranslation;
5
+ private _overrideTranslation?;
6
6
  constructor(locale: string, overrideTranslation?: any);
7
7
  getTranslations(): Promise<any>;
8
- private _getFallbackTranslations;
9
8
  }
@@ -13,7 +13,7 @@ export declare const removeLoadingScreen: (e2e: boolean | undefined) => Promise<
13
13
  export declare const hasLoadingScreen: () => boolean;
14
14
  export declare const hasLoadingScreenIntend: () => boolean;
15
15
  export declare const showLoadingScreen: (e2e: boolean | undefined, delay?: number) => Promise<void>;
16
- export declare const copyToClipboard: (text: string) => void;
16
+ export declare const copyToClipboard: (text: string) => Promise<void>;
17
17
  export declare const setLoadingProgress: (percent: number) => void;
18
18
  export declare const hideLoadingCircle: () => void;
19
19
  export declare const scrollElement: (selectedElement: Element) => void;
@@ -51,6 +51,7 @@ export declare const DEMO_SCOPES: Record<string, CustomTutorialScope>;
51
51
  export declare const DEMO_PLATFORMS: Record<string, CustomTutorialPlatform>;
52
52
  export declare const PLAN_OBJECT_TYPES: {
53
53
  readonly CONFIGURATION: "configuration";
54
+ readonly EXTERNAL_CONFIGURATION: "external-configuration";
54
55
  readonly STATIC: "static";
55
56
  readonly WALL: "wall";
56
57
  readonly WINDOW: "window";
@@ -122,6 +122,7 @@ export declare class SdkConnector {
122
122
  initConfigurator(): Promise<void>;
123
123
  getTenant(): Promise<import('@roomle/web-sdk/lib/definitions/typings/rapi-types').RapiTenant>;
124
124
  saveCurrentConfiguration(): Promise<RapiConfigurationEnhanced>;
125
+ saveCurrentPlanOrConfiguration(): Promise<RapiConfigurationEnhanced | RapiPlanSnapshotGetData>;
125
126
  giveGaConsent(): void;
126
127
  get hasPlanner(): boolean;
127
128
  saveCurrentObject(): Promise<RapiPlan | RapiPlanSnapshotGetData | RapiConfigurationEnhanced>;
@@ -1,25 +1,19 @@
1
- import { PropType } from 'vue';
2
-
3
- declare const _default: import('vue').DefineComponent<import('vue').ExtractPropTypes<{
4
- text: StringConstructor;
5
- checked: BooleanConstructor;
6
- value: StringConstructor;
7
- onClick: PropType<(_payload: MouseEvent) => void>;
8
- name: {
9
- type: StringConstructor;
10
- default: string;
11
- };
12
- }>, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {}, string, import('vue').PublicProps, Readonly<import('vue').ExtractPropTypes<{
13
- text: StringConstructor;
14
- checked: BooleanConstructor;
15
- value: StringConstructor;
16
- onClick: PropType<(_payload: MouseEvent) => void>;
17
- name: {
18
- type: StringConstructor;
19
- default: string;
20
- };
21
- }>> & Readonly<{}>, {
1
+ declare const _default: import('vue').DefineComponent<{
2
+ checked: boolean;
3
+ value: string;
22
4
  name: string;
5
+ onClick: (_payload: MouseEvent) => void;
6
+ text?: string;
7
+ size?: string;
8
+ }, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {}, string, import('vue').PublicProps, Readonly<{
23
9
  checked: boolean;
24
- }, {}, {}, {}, string, import('vue').ComponentProvideOptions, true, {}, any>;
10
+ value: string;
11
+ name: string;
12
+ onClick: (_payload: MouseEvent) => void;
13
+ text?: string;
14
+ size?: string;
15
+ }> & Readonly<{}>, {
16
+ size: string;
17
+ name: string;
18
+ }, {}, {}, {}, string, import('vue').ComponentProvideOptions, false, {}, any>;
25
19
  export default _default;
@@ -1,13 +1,31 @@
1
- declare const _default: import('vue').DefineComponent<{}, {}, {
2
- hint: {
3
- top: boolean;
4
- right: boolean;
5
- bottom: boolean;
6
- left: boolean;
7
- };
8
- }, {}, {
9
- scrollRight(): void;
10
- scrollLeft(): void;
11
- toggleHints(): void;
12
- }, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {}, string, import('vue').PublicProps, Readonly<{}> & Readonly<{}>, {}, {}, {}, {}, string, import('vue').ComponentProvideOptions, true, {}, any>;
1
+ declare const _default: __VLS_WithTemplateSlots<import('vue').DefineComponent<{}, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {}, string, import('vue').PublicProps, Readonly<{}> & Readonly<{}>, {}, {}, {}, {}, string, import('vue').ComponentProvideOptions, true, {}, any>, Readonly<{
2
+ 'scroll-content'(_props: {
3
+ setTarget: (el: HTMLElement) => void;
4
+ }): any;
5
+ 'left-indicator'(_props: {
6
+ hint: Record<string, boolean>;
7
+ scrollLeft: () => void;
8
+ }): any;
9
+ 'right-indicator'(_props: {
10
+ hint: Record<string, boolean>;
11
+ scrollRight: () => void;
12
+ }): any;
13
+ }> & {
14
+ 'scroll-content'(_props: {
15
+ setTarget: (el: HTMLElement) => void;
16
+ }): any;
17
+ 'left-indicator'(_props: {
18
+ hint: Record<string, boolean>;
19
+ scrollLeft: () => void;
20
+ }): any;
21
+ 'right-indicator'(_props: {
22
+ hint: Record<string, boolean>;
23
+ scrollRight: () => void;
24
+ }): any;
25
+ }>;
13
26
  export default _default;
27
+ type __VLS_WithTemplateSlots<T, S> = T & {
28
+ new (): {
29
+ $slots: S;
30
+ };
31
+ };
@@ -16,6 +16,7 @@ import { Libs } from '../plugins/libs-plugin';
16
16
  import { ExposedOverlays } from '../../common/components/utils/-utils/overlays';
17
17
  import { default as EventEmitter } from '../../common/business-logic/event-emitter';
18
18
  import { DragInOptions } from '../../../packages/embedding-lib/src/plugins/types';
19
+ import { CustomViewSettingsForIframe, PossibleCustomViews } from './types';
19
20
 
20
21
  export declare class ExposedApi {
21
22
  private _sdk;
@@ -163,6 +164,8 @@ export declare class ExposedApi {
163
164
  disableEvents(): void;
164
165
  enableEvents(): void;
165
166
  toggleDrawer(): void;
167
+ activateCustomView(viewName: PossibleCustomViews, options: CustomViewSettingsForIframe<any>): void;
168
+ deactivateCustomView(viewName: PossibleCustomViews, options: CustomViewSettingsForIframe<any>): void;
166
169
  private _websiteReady;
167
170
  private _handleMessage;
168
171
  private _forwardSdkCallbacks;
@@ -80,4 +80,5 @@ export declare class ExposedCallbacks {
80
80
  onHideCustomView: (...[viewName, data]: CustomViewCallbackInfo) => void;
81
81
  onCollapseDrawer: () => void;
82
82
  onExpandDrawer: () => void;
83
+ onSidebarEvent: (...[type, params]: SidebarEventCallbackInfo) => void;
83
84
  }
@@ -14,7 +14,7 @@ import { SelectionPayload } from '@roomle/web-sdk/lib/definitions/planner-core/s
14
14
 
15
15
  export declare const startConfiguring: (store: Store<StoreState>, exposedCallbacks: ExposedCallbacks) => void;
16
16
  export declare const resetCollectionViewStates: (store: Store<StoreState>) => void;
17
- export declare const stopConfiguring: (store: Store<StoreState>, sdkConnector: SdkConnector, embeddingCallbacks: ExposedCallbacks) => Promise<void>;
17
+ export declare const stopConfiguring: (store: Store<StoreState>, sdkConnector: SdkConnector, embeddingCallbacks?: ExposedCallbacks) => Promise<void>;
18
18
  export declare const triggerRequestProduct: (embeddingCallbacks: ExposedCallbacks, sdkConnector: SdkConnector, store: Store<StoreState>, analytics: Analytics) => Promise<void>;
19
19
  export declare const sendSaveDraft: (sdkConnector: SdkConnector, store: Store<StoreState>, currentConfiguration: RapiConfigurationEnhanced | Nullable<RapiPlanSnapshotGetData | RapiPlan>) => Promise<import('@roomle/web-sdk/lib/definitions/typings/rapi-types').RapiJson>;
20
20
  export declare function handleSave(embeddingCallbacks: ExposedCallbacks, sdkConnector: SdkConnector, store: Store<StoreState>, analytics: Analytics, email?: string): Promise<SaveDraft>;
@@ -4,6 +4,7 @@ import { Enumify, MEASUREMENT_UNIT, MEASUREMENT_SYSTEM, Nullable, TutorialData }
4
4
  import { ViewTypeState } from '../../common/store/collection-view-state';
5
5
  import { KernelPartList } from '@roomle/web-sdk/lib/definitions/typings/kernel';
6
6
  import { INTERACTION_NOTIFICATIONS, NOTIFICATIONS } from '../../common/components/utils/-utils/notifications';
7
+ import { SidebarEventTypes } from '../../common/composables/use-event-emitter-listener';
7
8
 
8
9
  export interface ThumbnailsSettings {
9
10
  collapsed: {
@@ -48,7 +49,8 @@ export declare enum UI_BUTTON {
48
49
  ADD_MEASUREMENT_LINE = "add_measurement_line",
49
50
  HELP_CENTER = "help_center",
50
51
  LOAD_PRODUCT = "load_product",
51
- CONFIGURE_IN_ROOM = "configure_in_room"
52
+ CONFIGURE_IN_ROOM = "configure_in_room",
53
+ SWAP_PRODUCT = "swap_product"
52
54
  }
53
55
  export declare enum UI_ELEMENTS {
54
56
  BOTTOM_BAR = "bottom_bar",
@@ -65,6 +67,16 @@ interface UiFeatureFlags extends FeatureFlags {
65
67
  globalCallbacks?: boolean;
66
68
  mocAr?: boolean;
67
69
  wallAutoHeight?: boolean;
70
+ /**
71
+ * @hidden
72
+ * @description ...
73
+ */
74
+ imosix?: boolean;
75
+ /**
76
+ * @hidden
77
+ * @description ...
78
+ */
79
+ prodmanager?: boolean;
68
80
  }
69
81
  export interface VariantsMap {
70
82
  [key: string]: RapiId;
@@ -108,6 +120,7 @@ export interface UiInitData extends InitDataDefinition, GlobalInitDataDefinition
108
120
  [UI_BUTTON.ADD_MEASUREMENT_LINE]?: boolean;
109
121
  [UI_BUTTON.HELP_CENTER]?: boolean;
110
122
  [UI_BUTTON.CONFIGURE_IN_ROOM]?: boolean;
123
+ [UI_BUTTON.SWAP_PRODUCT]?: boolean;
111
124
  [key: string]: boolean | undefined;
112
125
  };
113
126
  /**
@@ -409,8 +422,10 @@ export interface UiInitData extends InitDataDefinition, GlobalInitDataDefinition
409
422
  /**
410
423
  * @description when the configurator/Room Designer is embedded into a too small space we start it in view
411
424
  * only mode, then the user has to click the "start" button and the configurator/Room Designer expands over
412
- * the whole window. This is great for UX but it's not always ideal in every use case. Therefore you can
413
- * turn on/off this behavior now with this toggle.
425
+ * the whole window. This is great for UX, but it's not always ideal in every use case. Therefore, you can
426
+ * force either behaviour by setting autoStart to true or false.
427
+ *
428
+ * default: true if screen with is bigger than 1024px otherwise false
414
429
  */
415
430
  autoStart?: boolean;
416
431
  /**
@@ -422,6 +437,12 @@ export interface UiInitData extends InitDataDefinition, GlobalInitDataDefinition
422
437
  * @description For use with planner only, if set to true the room will be shown while configuring a configurable object.
423
438
  */
424
439
  configureInRoom?: boolean;
440
+ /**
441
+ * @internal
442
+ * @description Keeps the interaction container collapsed.
443
+ * This is only used if the room designer is embedded in the technical configurator. (BO PoC 2)
444
+ */
445
+ interactionsCollapsed?: boolean;
425
446
  /**
426
447
  * @description define when you want to show the search bar, currently we hide the search bar until there are more than 10 elements.
427
448
  * since it is a query param the value is a string. Please only provide a string that can be parseInt(x,10) otherwise it will be
@@ -502,4 +523,7 @@ export type CustomViewCallbackInfo = {
502
523
  export type PossibleCustomViewSettings = CustomViews[keyof CustomViews];
503
524
  export type PossibleCustomViews = keyof CustomViews;
504
525
  export type PossibleCustomViewsAndMain = PossibleCustomViews | 'main';
526
+ export type SidebarEventCallbackInfo = {
527
+ [K in keyof SidebarEventTypes]: SidebarEventTypes[K] extends void ? [viewName: K] | [viewName: K, viewArgs: void] : [viewName: K, viewArgs: SidebarEventTypes[K]];
528
+ }[keyof SidebarEventTypes];
505
529
  export {};
@@ -6,12 +6,13 @@ import { RoomleSdkWrapper } from '../../configurator/business-logic/roomle-sdk-w
6
6
  import { UiInitData } from '../../configurator/embedding/types';
7
7
  import { default as RoomlePlanner } from '@roomle/web-sdk/lib/definitions/planner-core/src/roomle-planner';
8
8
  import { PLAN_ELEMENT_CHANGE_TYPES, SelectionPayload } from '@roomle/web-sdk/lib/definitions/planner-core/src/roomle-planner-ui-callback';
9
- import { RapiId, RapiPlan, RapiPlanSnapshotGetData } from '@roomle/web-sdk/lib/definitions/typings/rapi-types';
9
+ import { RapiConfigurationEnhanced, RapiId, RapiPlan, RapiPlanSnapshotGetData } from '@roomle/web-sdk/lib/definitions/typings/rapi-types';
10
10
  import { CancelSelectionReasons } from '@roomle/web-sdk/lib/definitions/typings/planner';
11
11
  import { Connector } from '../../common/business-logic/connector';
12
12
  import { default as PlanElementViewModel } from '@roomle/web-sdk/lib/definitions/common-core/src/view-model/plan-element-view-model';
13
13
  import { RuntimeId } from '@roomle/web-sdk/lib/definitions/typings/kernel';
14
14
  import { default as EventEmitter } from '../../common/business-logic/event-emitter';
15
+ import { SdkConnector } from '../../configurator/business-logic/sdk-connector';
15
16
 
16
17
  export declare const getConstructionWallAngle: (selectionElement: Nullable<PlanElementViewModel>) => Nullable<number>;
17
18
  export declare class SdkConnectorPlanner extends Connector {
@@ -22,10 +23,13 @@ export declare class SdkConnectorPlanner extends Connector {
22
23
  private _analytics;
23
24
  private _eventEmitter;
24
25
  private _lastPlanId;
26
+ private _lastPlanWithSingleObjectId;
25
27
  private _currentPlan;
28
+ private _currentPlanWithSingleObject;
26
29
  private _loadedLocalPlan;
27
30
  private _initData;
28
- constructor(store: Store<StoreState>, analytics?: Nullable<Analytics>, eventEmitter?: Nullable<EventEmitter>);
31
+ private _sdkConnector;
32
+ constructor(store: Store<StoreState>, analytics?: Nullable<Analytics>, eventEmitter?: Nullable<EventEmitter>, sdkConnector?: Nullable<SdkConnector>);
29
33
  get api(): Promise<RoomlePlanner>;
30
34
  init(sdkWrapper: RoomleSdkWrapper, element: HTMLElement, initData: UiInitData): Promise<void>;
31
35
  initPlanner(planner: RoomlePlanner): Promise<void>;
@@ -36,13 +40,14 @@ export declare class SdkConnectorPlanner extends Connector {
36
40
  onSelectionCancel(reason: CancelSelectionReasons): Promise<void>;
37
41
  private _checkForVisibleDrawer;
38
42
  saveCurrentPlan(): Promise<Nullable<RapiPlanSnapshotGetData | RapiPlan>>;
43
+ saveCurrentConfigurationInPlanSnapshot(configuration: RapiConfigurationEnhanced): Promise<Nullable<RapiPlanSnapshotGetData | RapiPlan>>;
39
44
  private _disableWallDrawingState;
40
45
  private _enableWallDrawingState;
41
46
  switch2D(): Promise<void>;
42
47
  switch3D(): Promise<void>;
43
48
  switchFp(): Promise<void>;
44
49
  confirmRoom(switchTo2D: boolean): Promise<void>;
45
- cancelSelection(): Promise<void>;
50
+ cancelSelection(reason: CancelSelectionReasons): Promise<void>;
46
51
  private _toggleFirstPersonControlsNotification;
47
52
  private popSidebar;
48
53
  onSelectionChange(_mode: string, objectType: Enumify<typeof PLAN_OBJECT_TYPES>, payload: SelectionPayload, payloadPromise: Promise<SelectionPayload>, planElementViewModel: PlanElementViewModel): void;
@@ -62,6 +67,7 @@ export declare class SdkConnectorPlanner extends Connector {
62
67
  private _setSidebarViewNameState;
63
68
  preparePartListData(selectedItemPayload: SelectionPayload): Promise<void>;
64
69
  private _getCurrentPlanXML;
70
+ private _getPlanXmlWithSingleObject;
65
71
  onPlanElementChanged(changeType: Enumify<typeof PLAN_ELEMENT_CHANGE_TYPES>): Promise<void>;
66
72
  private _emitConstructionAttachedWallAngle;
67
73
  }
@@ -1,6 +1,6 @@
1
- import { CloseReason, ToggleCallback } from '../../../common/utils/types';
2
1
  import { default as RoomlePlanner } from '@roomle/web-sdk/lib/definitions/planner-core/src/roomle-planner';
3
2
  import { BUTTON_ACTIONS } from '../../../configurator/store/ui-state';
3
+ import { CloseReason, ToggleCallback } from '../../../common/utils/types';
4
4
 
5
5
  declare const _default: import('vue').DefineComponent<{
6
6
  onClose: (_action: BUTTON_ACTIONS, _reason: CloseReason) => void;
@@ -2386,14 +2386,14 @@ declare const _default: import('vue').DefineComponent<import('vue').ExtractPropT
2386
2386
  isDesktop: {
2387
2387
  type: PropType<boolean>;
2388
2388
  };
2389
- element: {
2390
- type: PropType<import('../../../../common/components/collection-view/-utils/types').CollectionViewElement<import('../../../../common/components/collection-view/-utils/types').CollectionViewElementPossibleTypes>>;
2391
- default: any;
2392
- };
2393
2389
  type: {
2394
2390
  type: PropType<string>;
2395
2391
  default: string;
2396
2392
  };
2393
+ element: {
2394
+ type: PropType<import('../../../../common/components/collection-view/-utils/types').CollectionViewElement<import('../../../../common/components/collection-view/-utils/types').CollectionViewElementPossibleTypes>>;
2395
+ default: any;
2396
+ };
2397
2397
  onSelect: {
2398
2398
  type: PropType<(element: import('../../../../common/components/collection-view/-utils/types').CollectionViewElement<import('../../../../common/components/collection-view/-utils/types').CollectionViewElementPossibleTypes>) => void>;
2399
2399
  };
@@ -2465,14 +2465,14 @@ declare const _default: import('vue').DefineComponent<import('vue').ExtractPropT
2465
2465
  isDesktop: {
2466
2466
  type: PropType<boolean>;
2467
2467
  };
2468
- element: {
2469
- type: PropType<import('../../../../common/components/collection-view/-utils/types').CollectionViewElement<import('../../../../common/components/collection-view/-utils/types').CollectionViewElementPossibleTypes>>;
2470
- default: any;
2471
- };
2472
2468
  type: {
2473
2469
  type: PropType<string>;
2474
2470
  default: string;
2475
2471
  };
2472
+ element: {
2473
+ type: PropType<import('../../../../common/components/collection-view/-utils/types').CollectionViewElement<import('../../../../common/components/collection-view/-utils/types').CollectionViewElementPossibleTypes>>;
2474
+ default: any;
2475
+ };
2476
2476
  onSelect: {
2477
2477
  type: PropType<(element: import('../../../../common/components/collection-view/-utils/types').CollectionViewElement<import('../../../../common/components/collection-view/-utils/types').CollectionViewElementPossibleTypes>) => void>;
2478
2478
  };
@@ -2532,8 +2532,8 @@ declare const _default: import('vue').DefineComponent<import('vue').ExtractPropT
2532
2532
  };
2533
2533
  }>> & Readonly<{}>, {
2534
2534
  label: string;
2535
- element: import('../../../../common/components/collection-view/-utils/types').CollectionViewElement<import('../../../../common/components/collection-view/-utils/types').CollectionViewElementPossibleTypes>;
2536
2535
  type: string;
2536
+ element: import('../../../../common/components/collection-view/-utils/types').CollectionViewElement<import('../../../../common/components/collection-view/-utils/types').CollectionViewElementPossibleTypes>;
2537
2537
  isLast: boolean;
2538
2538
  elemKey: string;
2539
2539
  hideBottomBorder: boolean;
@@ -2558,14 +2558,14 @@ declare const _default: import('vue').DefineComponent<import('vue').ExtractPropT
2558
2558
  isDesktop: {
2559
2559
  type: PropType<boolean>;
2560
2560
  };
2561
- element: {
2562
- type: PropType<import('../../../../common/components/collection-view/-utils/types').CollectionViewElement<import('../../../../common/components/collection-view/-utils/types').CollectionViewElementPossibleTypes>>;
2563
- default: any;
2564
- };
2565
2561
  type: {
2566
2562
  type: PropType<string>;
2567
2563
  default: string;
2568
2564
  };
2565
+ element: {
2566
+ type: PropType<import('../../../../common/components/collection-view/-utils/types').CollectionViewElement<import('../../../../common/components/collection-view/-utils/types').CollectionViewElementPossibleTypes>>;
2567
+ default: any;
2568
+ };
2569
2569
  onSelect: {
2570
2570
  type: PropType<(element: import('../../../../common/components/collection-view/-utils/types').CollectionViewElement<import('../../../../common/components/collection-view/-utils/types').CollectionViewElementPossibleTypes>) => void>;
2571
2571
  };
@@ -2625,8 +2625,8 @@ declare const _default: import('vue').DefineComponent<import('vue').ExtractPropT
2625
2625
  };
2626
2626
  }>> & Readonly<{}>, {}, {}, {}, {}, {
2627
2627
  label: string;
2628
- element: import('../../../../common/components/collection-view/-utils/types').CollectionViewElement<import('../../../../common/components/collection-view/-utils/types').CollectionViewElementPossibleTypes>;
2629
2628
  type: string;
2629
+ element: import('../../../../common/components/collection-view/-utils/types').CollectionViewElement<import('../../../../common/components/collection-view/-utils/types').CollectionViewElementPossibleTypes>;
2630
2630
  isLast: boolean;
2631
2631
  elemKey: string;
2632
2632
  hideBottomBorder: boolean;
@@ -2648,14 +2648,14 @@ declare const _default: import('vue').DefineComponent<import('vue').ExtractPropT
2648
2648
  isDesktop: {
2649
2649
  type: PropType<boolean>;
2650
2650
  };
2651
- element: {
2652
- type: PropType<import('../../../../common/components/collection-view/-utils/types').CollectionViewElement<import('../../../../common/components/collection-view/-utils/types').CollectionViewElementPossibleTypes>>;
2653
- default: any;
2654
- };
2655
2651
  type: {
2656
2652
  type: PropType<string>;
2657
2653
  default: string;
2658
2654
  };
2655
+ element: {
2656
+ type: PropType<import('../../../../common/components/collection-view/-utils/types').CollectionViewElement<import('../../../../common/components/collection-view/-utils/types').CollectionViewElementPossibleTypes>>;
2657
+ default: any;
2658
+ };
2659
2659
  onSelect: {
2660
2660
  type: PropType<(element: import('../../../../common/components/collection-view/-utils/types').CollectionViewElement<import('../../../../common/components/collection-view/-utils/types').CollectionViewElementPossibleTypes>) => void>;
2661
2661
  };
@@ -2715,8 +2715,8 @@ declare const _default: import('vue').DefineComponent<import('vue').ExtractPropT
2715
2715
  };
2716
2716
  }>> & Readonly<{}>, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {}, string, {
2717
2717
  label: string;
2718
- element: import('../../../../common/components/collection-view/-utils/types').CollectionViewElement<import('../../../../common/components/collection-view/-utils/types').CollectionViewElementPossibleTypes>;
2719
2718
  type: string;
2719
+ element: import('../../../../common/components/collection-view/-utils/types').CollectionViewElement<import('../../../../common/components/collection-view/-utils/types').CollectionViewElementPossibleTypes>;
2720
2720
  isLast: boolean;
2721
2721
  elemKey: string;
2722
2722
  hideBottomBorder: boolean;
@@ -1258,14 +1258,14 @@ declare const _default: import('vue').DefineComponent<import('vue').ExtractPropT
1258
1258
  isDesktop: {
1259
1259
  type: PropType<boolean>;
1260
1260
  };
1261
- element: {
1262
- type: PropType<import('../../../../common/components/collection-view/-utils/types').CollectionViewElement<import('../../../../common/components/collection-view/-utils/types').CollectionViewElementPossibleTypes>>;
1263
- default: any;
1264
- };
1265
1261
  type: {
1266
1262
  type: PropType<string>;
1267
1263
  default: string;
1268
1264
  };
1265
+ element: {
1266
+ type: PropType<import('../../../../common/components/collection-view/-utils/types').CollectionViewElement<import('../../../../common/components/collection-view/-utils/types').CollectionViewElementPossibleTypes>>;
1267
+ default: any;
1268
+ };
1269
1269
  onSelect: {
1270
1270
  type: PropType<(element: import('../../../../common/components/collection-view/-utils/types').CollectionViewElement<import('../../../../common/components/collection-view/-utils/types').CollectionViewElementPossibleTypes>) => void>;
1271
1271
  };
@@ -1337,14 +1337,14 @@ declare const _default: import('vue').DefineComponent<import('vue').ExtractPropT
1337
1337
  isDesktop: {
1338
1338
  type: PropType<boolean>;
1339
1339
  };
1340
- element: {
1341
- type: PropType<import('../../../../common/components/collection-view/-utils/types').CollectionViewElement<import('../../../../common/components/collection-view/-utils/types').CollectionViewElementPossibleTypes>>;
1342
- default: any;
1343
- };
1344
1340
  type: {
1345
1341
  type: PropType<string>;
1346
1342
  default: string;
1347
1343
  };
1344
+ element: {
1345
+ type: PropType<import('../../../../common/components/collection-view/-utils/types').CollectionViewElement<import('../../../../common/components/collection-view/-utils/types').CollectionViewElementPossibleTypes>>;
1346
+ default: any;
1347
+ };
1348
1348
  onSelect: {
1349
1349
  type: PropType<(element: import('../../../../common/components/collection-view/-utils/types').CollectionViewElement<import('../../../../common/components/collection-view/-utils/types').CollectionViewElementPossibleTypes>) => void>;
1350
1350
  };
@@ -1404,8 +1404,8 @@ declare const _default: import('vue').DefineComponent<import('vue').ExtractPropT
1404
1404
  };
1405
1405
  }>> & Readonly<{}>, {
1406
1406
  label: string;
1407
- element: import('../../../../common/components/collection-view/-utils/types').CollectionViewElement<import('../../../../common/components/collection-view/-utils/types').CollectionViewElementPossibleTypes>;
1408
1407
  type: string;
1408
+ element: import('../../../../common/components/collection-view/-utils/types').CollectionViewElement<import('../../../../common/components/collection-view/-utils/types').CollectionViewElementPossibleTypes>;
1409
1409
  isLast: boolean;
1410
1410
  elemKey: string;
1411
1411
  hideBottomBorder: boolean;
@@ -1430,14 +1430,14 @@ declare const _default: import('vue').DefineComponent<import('vue').ExtractPropT
1430
1430
  isDesktop: {
1431
1431
  type: PropType<boolean>;
1432
1432
  };
1433
- element: {
1434
- type: PropType<import('../../../../common/components/collection-view/-utils/types').CollectionViewElement<import('../../../../common/components/collection-view/-utils/types').CollectionViewElementPossibleTypes>>;
1435
- default: any;
1436
- };
1437
1433
  type: {
1438
1434
  type: PropType<string>;
1439
1435
  default: string;
1440
1436
  };
1437
+ element: {
1438
+ type: PropType<import('../../../../common/components/collection-view/-utils/types').CollectionViewElement<import('../../../../common/components/collection-view/-utils/types').CollectionViewElementPossibleTypes>>;
1439
+ default: any;
1440
+ };
1441
1441
  onSelect: {
1442
1442
  type: PropType<(element: import('../../../../common/components/collection-view/-utils/types').CollectionViewElement<import('../../../../common/components/collection-view/-utils/types').CollectionViewElementPossibleTypes>) => void>;
1443
1443
  };
@@ -1497,8 +1497,8 @@ declare const _default: import('vue').DefineComponent<import('vue').ExtractPropT
1497
1497
  };
1498
1498
  }>> & Readonly<{}>, {}, {}, {}, {}, {
1499
1499
  label: string;
1500
- element: import('../../../../common/components/collection-view/-utils/types').CollectionViewElement<import('../../../../common/components/collection-view/-utils/types').CollectionViewElementPossibleTypes>;
1501
1500
  type: string;
1501
+ element: import('../../../../common/components/collection-view/-utils/types').CollectionViewElement<import('../../../../common/components/collection-view/-utils/types').CollectionViewElementPossibleTypes>;
1502
1502
  isLast: boolean;
1503
1503
  elemKey: string;
1504
1504
  hideBottomBorder: boolean;
@@ -1520,14 +1520,14 @@ declare const _default: import('vue').DefineComponent<import('vue').ExtractPropT
1520
1520
  isDesktop: {
1521
1521
  type: PropType<boolean>;
1522
1522
  };
1523
- element: {
1524
- type: PropType<import('../../../../common/components/collection-view/-utils/types').CollectionViewElement<import('../../../../common/components/collection-view/-utils/types').CollectionViewElementPossibleTypes>>;
1525
- default: any;
1526
- };
1527
1523
  type: {
1528
1524
  type: PropType<string>;
1529
1525
  default: string;
1530
1526
  };
1527
+ element: {
1528
+ type: PropType<import('../../../../common/components/collection-view/-utils/types').CollectionViewElement<import('../../../../common/components/collection-view/-utils/types').CollectionViewElementPossibleTypes>>;
1529
+ default: any;
1530
+ };
1531
1531
  onSelect: {
1532
1532
  type: PropType<(element: import('../../../../common/components/collection-view/-utils/types').CollectionViewElement<import('../../../../common/components/collection-view/-utils/types').CollectionViewElementPossibleTypes>) => void>;
1533
1533
  };
@@ -1587,8 +1587,8 @@ declare const _default: import('vue').DefineComponent<import('vue').ExtractPropT
1587
1587
  };
1588
1588
  }>> & Readonly<{}>, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {}, string, {
1589
1589
  label: string;
1590
- element: import('../../../../common/components/collection-view/-utils/types').CollectionViewElement<import('../../../../common/components/collection-view/-utils/types').CollectionViewElementPossibleTypes>;
1591
1590
  type: string;
1591
+ element: import('../../../../common/components/collection-view/-utils/types').CollectionViewElement<import('../../../../common/components/collection-view/-utils/types').CollectionViewElementPossibleTypes>;
1592
1592
  isLast: boolean;
1593
1593
  elemKey: string;
1594
1594
  hideBottomBorder: boolean;
@@ -0,0 +1,12 @@
1
+ import { default as RoomlePlanner } from '@roomle/web-sdk/lib/definitions/planner-core/src/roomle-planner';
2
+
3
+ declare const _default: import('vue').DefineComponent<{
4
+ api: RoomlePlanner;
5
+ hideInputs?: boolean;
6
+ hideDirection?: boolean;
7
+ }, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {}, string, import('vue').PublicProps, Readonly<{
8
+ api: RoomlePlanner;
9
+ hideInputs?: boolean;
10
+ hideDirection?: boolean;
11
+ }> & Readonly<{}>, {}, {}, {}, {}, string, import('vue').ComponentProvideOptions, false, {}, any>;
12
+ export default _default;
@@ -0,0 +1,15 @@
1
+ import { KernelAttic } from '@roomle/web-sdk/lib/definitions/typings/planner';
2
+ import { default as RoomlePlanner } from '@roomle/web-sdk/lib/definitions/planner-core/src/roomle-planner';
3
+
4
+ declare const _default: import('vue').DefineComponent<{
5
+ isActive: boolean;
6
+ attachedAttic: KernelAttic;
7
+ api: RoomlePlanner;
8
+ }, {
9
+ direction: import('vue').Ref<"left" | "right", "left" | "right">;
10
+ }, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {}, string, import('vue').PublicProps, Readonly<{
11
+ isActive: boolean;
12
+ attachedAttic: KernelAttic;
13
+ api: RoomlePlanner;
14
+ }> & Readonly<{}>, {}, {}, {}, {}, string, import('vue').ComponentProvideOptions, false, {}, any>;
15
+ export default _default;
@@ -5,13 +5,23 @@ declare const _default: import('vue').DefineComponent<import('vue').ExtractPropT
5
5
  props: {
6
6
  type: PropType<WallSideIconProps>;
7
7
  };
8
+ flip: {
9
+ type: BooleanConstructor;
10
+ default: boolean;
11
+ };
8
12
  }>, {
9
13
  wallIconAngle: import('vue').ComputedRef<string>;
10
14
  }, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {}, string, import('vue').PublicProps, Readonly<import('vue').ExtractPropTypes<{
11
15
  props: {
12
16
  type: PropType<WallSideIconProps>;
13
17
  };
14
- }>> & Readonly<{}>, {}, {}, {
18
+ flip: {
19
+ type: BooleanConstructor;
20
+ default: boolean;
21
+ };
22
+ }>> & Readonly<{}>, {
23
+ flip: boolean;
24
+ }, {}, {
15
25
  SvgIcon: import('vue').DefineComponent<{
16
26
  icon: string;
17
27
  }, {
@@ -9,7 +9,6 @@ export interface XYZCoords {
9
9
  z: number;
10
10
  }
11
11
  export interface ProductListItem extends UiPlanObject {
12
- configurationRuntimeId: number;
13
12
  quantity: number;
14
13
  runtimeIds?: number[];
15
14
  }