@roomle/embedding-lib 6.3.0 → 6.4.0-alpha.12

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,55 +1,31 @@
1
- ## 6.3.0 (2026-02-12)
1
+ ## 6.4.0-alpha.12 (2026-03-02)
2
2
 
3
- * Apply suggestion from @Copilot ([390b011](https://github.com/roomle-dev/roomle-ui/commit/390b011))
4
- * Apply suggestion from @Copilot ([61c128b](https://github.com/roomle-dev/roomle-ui/commit/61c128b))
5
- * Apply suggestion from @Copilot ([86fd8a9](https://github.com/roomle-dev/roomle-ui/commit/86fd8a9))
6
- * Merge branch 'master' into chore/hi-examples ([1f06634](https://github.com/roomle-dev/roomle-ui/commit/1f06634))
7
- * Merge branch 'master' into chore/migrate-standard-components-to-script-setup ([9c056ae](https://github.com/roomle-dev/roomle-ui/commit/9c056ae))
8
- * Merge branch 'master' into feat/hi-change-property ([4047ae0](https://github.com/roomle-dev/roomle-ui/commit/4047ae0))
9
- * Merge branch 'master' into feat/hi-change-property ([62b4d6f](https://github.com/roomle-dev/roomle-ui/commit/62b4d6f))
10
- * Merge branch 'master' into fix/migration-cleanup-findings ([01aafa6](https://github.com/roomle-dev/roomle-ui/commit/01aafa6))
11
- * Merge branch 'master' into fix/migration-cleanup-findings ([d088258](https://github.com/roomle-dev/roomle-ui/commit/d088258))
12
- * Merge branch 'master' into hf/object-selection ([c1d8a0f](https://github.com/roomle-dev/roomle-ui/commit/c1d8a0f))
13
- * Merge branch 'master' into hf/object-selection ([e043c39](https://github.com/roomle-dev/roomle-ui/commit/e043c39))
14
- * Merge branch 'master' into refactor/batch2-composition-api-migration ([e18967a](https://github.com/roomle-dev/roomle-ui/commit/e18967a))
15
- * Merge branch 'master' into upgraded-by-ci/core-2.70.0-alpha.5 ([16087ec](https://github.com/roomle-dev/roomle-ui/commit/16087ec))
16
- * Merge pull request #2238 from roomle-dev/chore/hi-examples ([1640ee1](https://github.com/roomle-dev/roomle-ui/commit/1640ee1)), closes [#2238](https://github.com/roomle-dev/roomle-ui/issues/2238)
17
- * Merge pull request #2239 from roomle-dev/feat/hi-change-property ([7e22780](https://github.com/roomle-dev/roomle-ui/commit/7e22780)), closes [#2239](https://github.com/roomle-dev/roomle-ui/issues/2239)
18
- * Merge pull request #2241 from roomle-dev/chore/add-options-api-migration-workflow ([19ed3be](https://github.com/roomle-dev/roomle-ui/commit/19ed3be)), closes [#2241](https://github.com/roomle-dev/roomle-ui/issues/2241)
19
- * Merge pull request #2242 from roomle-dev/upgraded-by-ci/core-2.70.0-alpha.5 ([7c99bb9](https://github.com/roomle-dev/roomle-ui/commit/7c99bb9)), closes [#2242](https://github.com/roomle-dev/roomle-ui/issues/2242)
20
- * Merge pull request #2243 from roomle-dev/chore/migrate-standard-components-to-script-setup ([f9eb023](https://github.com/roomle-dev/roomle-ui/commit/f9eb023)), closes [#2243](https://github.com/roomle-dev/roomle-ui/issues/2243)
21
- * Merge pull request #2244 from roomle-dev/hf/object-selection ([fd18d10](https://github.com/roomle-dev/roomle-ui/commit/fd18d10)), closes [#2244](https://github.com/roomle-dev/roomle-ui/issues/2244)
22
- * Merge pull request #2245 from roomle-dev/chore/improve-migration-guidelines-in-refactoring-md ([8f5e78f](https://github.com/roomle-dev/roomle-ui/commit/8f5e78f)), closes [#2245](https://github.com/roomle-dev/roomle-ui/issues/2245)
23
- * Merge pull request #2247 from roomle-dev/fix/migration-cleanup-findings ([ef6e3b6](https://github.com/roomle-dev/roomle-ui/commit/ef6e3b6)), closes [#2247](https://github.com/roomle-dev/roomle-ui/issues/2247)
24
- * Merge pull request #2248 from roomle-dev/refactor/batch2-composition-api-migration ([1ac6f70](https://github.com/roomle-dev/roomle-ui/commit/1ac6f70)), closes [#2248](https://github.com/roomle-dev/roomle-ui/issues/2248)
25
- * Merge pull request #2249 from roomle-dev/chore/migration-cleanup-dead-code ([881a633](https://github.com/roomle-dev/roomle-ui/commit/881a633)), closes [#2249](https://github.com/roomle-dev/roomle-ui/issues/2249)
26
- * fix: address pr review - use script-local variables in templates ([94dcd85](https://github.com/roomle-dev/roomle-ui/commit/94dcd85))
27
- * fix: address PR review comments on migration example ([a34b9f8](https://github.com/roomle-dev/roomle-ui/commit/a34b9f8))
28
- * fix: address pre-existing issues found during options api migration ([53ee9ec](https://github.com/roomle-dev/roomle-ui/commit/53ee9ec))
29
- * fix: address second round of PR review comments ([f47d210](https://github.com/roomle-dev/roomle-ui/commit/f47d210))
30
- * fix: address third round of PR review comments ([76a2a25](https://github.com/roomle-dev/roomle-ui/commit/76a2a25))
31
- * fix(ProductRangeControl): clear longPressTimer on component unmount ([97f79ad](https://github.com/roomle-dev/roomle-ui/commit/97f79ad))
32
- * fix: correct ElementLengthScaling to use 1/2 matching downstream consumers ([0ab4a17](https://github.com/roomle-dev/roomle-ui/commit/0ab4a17))
33
- * fix: correct RoomlePlanner generic type mismatches across planner components ([78553e5](https://github.com/roomle-dev/roomle-ui/commit/78553e5))
34
- * fix: HF - disable bounding box meshes for Roomle configurations ([c5d0909](https://github.com/roomle-dev/roomle-ui/commit/c5d0909))
35
- * fix: HI api - restrict which properties are allowed to be updated ([f92b03d](https://github.com/roomle-dev/roomle-ui/commit/f92b03d))
36
- * fix: re-type Vuex store with StoreState, use localized unref for selectionElement ([3585ddd](https://github.com/roomle-dev/roomle-ui/commit/3585ddd))
37
- * fix: remove duplicated console error ([d57c88d](https://github.com/roomle-dev/roomle-ui/commit/d57c88d))
38
- * fix: remove unused imports from ProductVariant.vue and PlannerMain.vue ([1a26c7e](https://github.com/roomle-dev/roomle-ui/commit/1a26c7e))
39
- * fix: remove unused store import from ProductRangeControl.vue ([0f0b618](https://github.com/roomle-dev/roomle-ui/commit/0f0b618))
40
- * fix: replace $store global property with useStore() composable across all script setup components ([be2accf](https://github.com/roomle-dev/roomle-ui/commit/be2accf))
41
- * chore: add batching guidance for options api migrations ([557a6d0](https://github.com/roomle-dev/roomle-ui/commit/557a6d0))
42
- * chore: add before/after example for options api migration ([accaa8d](https://github.com/roomle-dev/roomle-ui/commit/accaa8d))
43
- * chore: add options api to composition api migration workflow ([f734ed9](https://github.com/roomle-dev/roomle-ui/commit/f734ed9))
44
- * chore: add post-migration checklist, test adaptation, and issue reporting guidelines ([9888e16](https://github.com/roomle-dev/roomle-ui/commit/9888e16)), closes [#2243](https://github.com/roomle-dev/roomle-ui/issues/2243)
45
- * chore: hi examples localisation ([1f1886e](https://github.com/roomle-dev/roomle-ui/commit/1f1886e))
46
- * chore: merge master into migration branch ([cb1a2cc](https://github.com/roomle-dev/roomle-ui/commit/cb1a2cc))
47
- * chore: migrate 38 standard components from Options API to script setup ([32a5c18](https://github.com/roomle-dev/roomle-ui/commit/32a5c18))
48
- * chore: remove dead code discovered during composition API migration ([3e9caac](https://github.com/roomle-dev/roomle-ui/commit/3e9caac))
49
- * test: adapt tests for composition api migration ([1089c8c](https://github.com/roomle-dev/roomle-ui/commit/1089c8c))
50
- * test: update playwright tests ([2cd82c3](https://github.com/roomle-dev/roomle-ui/commit/2cd82c3))
51
- * refactor: migrate 12 low-risk components to composition api ([1dd5a00](https://github.com/roomle-dev/roomle-ui/commit/1dd5a00))
52
- * refactor: migrate 4 medium-risk components to composition api ([2e76a2a](https://github.com/roomle-dev/roomle-ui/commit/2e76a2a))
53
- * feat: core api KernelPart ([32ff8b0](https://github.com/roomle-dev/roomle-ui/commit/32ff8b0))
54
- * feat: glue-logic CHANGEABLE_PROPERTIES ([93ac12f](https://github.com/roomle-dev/roomle-ui/commit/93ac12f))
55
- * feat(core): upgrade to version 2.70.0-alpha.5 ([ef8cfd5](https://github.com/roomle-dev/roomle-ui/commit/ef8cfd5))
3
+ * Merge branch 'master' into feat/hi-range-checkls ([e810b6e](https://github.com/roomle-dev/roomle-ui/commit/e810b6e))
4
+ * Merge branch 'master' into feat/hi-range-checkls ([9f3415f](https://github.com/roomle-dev/roomle-ui/commit/9f3415f))
5
+ * Merge branch 'master' into fix/hi-configuration-undo-redo ([73bfeba](https://github.com/roomle-dev/roomle-ui/commit/73bfeba))
6
+ * Merge branch 'master' into fix/hi-configuration-undo-redo ([4132920](https://github.com/roomle-dev/roomle-ui/commit/4132920))
7
+ * Merge branch 'master' into fix/hi-configuration-undo-redo ([424ea95](https://github.com/roomle-dev/roomle-ui/commit/424ea95))
8
+ * Merge branch 'master' into fix/multiple-undo-steps-overlapping-walls ([6f98828](https://github.com/roomle-dev/roomle-ui/commit/6f98828))
9
+ * Merge branch 'master' into fix/multiple-undo-steps-overlapping-walls ([ce388f8](https://github.com/roomle-dev/roomle-ui/commit/ce388f8))
10
+ * Merge branch 'master' into fix/multiple-undo-steps-overlapping-walls ([a08982f](https://github.com/roomle-dev/roomle-ui/commit/a08982f))
11
+ * Merge branch 'master' into fix/multiple-undo-steps-overlapping-walls ([0da2f28](https://github.com/roomle-dev/roomle-ui/commit/0da2f28))
12
+ * Merge branch 'master' into fix/multiple-undo-steps-overlapping-walls ([aa1bbb9](https://github.com/roomle-dev/roomle-ui/commit/aa1bbb9))
13
+ * Merge branch 'master' into fix/multiple-undo-steps-overlapping-walls ([528b29c](https://github.com/roomle-dev/roomle-ui/commit/528b29c))
14
+ * Merge branch 'master' into fix/vertical-scrolling-gridView-desktop ([af8ef3e](https://github.com/roomle-dev/roomle-ui/commit/af8ef3e))
15
+ * Merge pull request #2329 from roomle-dev/feat/hi-range-checkls ([4b29cda](https://github.com/roomle-dev/roomle-ui/commit/4b29cda)), closes [#2329](https://github.com/roomle-dev/roomle-ui/issues/2329)
16
+ * Merge pull request #2336 from roomle-dev/fix/multiple-undo-steps-overlapping-walls ([0b3d3e5](https://github.com/roomle-dev/roomle-ui/commit/0b3d3e5)), closes [#2336](https://github.com/roomle-dev/roomle-ui/issues/2336)
17
+ * Merge pull request #2337 from roomle-dev/fix/vertical-scrolling-gridView-desktop ([f598e3d](https://github.com/roomle-dev/roomle-ui/commit/f598e3d)), closes [#2337](https://github.com/roomle-dev/roomle-ui/issues/2337)
18
+ * Merge pull request #2339 from roomle-dev/fix/hi-configuration-undo-redo ([d6a0959](https://github.com/roomle-dev/roomle-ui/commit/d6a0959)), closes [#2339](https://github.com/roomle-dev/roomle-ui/issues/2339)
19
+ * Merge pull request #2341 from roomle-dev/upgraded-by-ci/core-2.71.0-alpha.9 ([7fd0a7a](https://github.com/roomle-dev/roomle-ui/commit/7fd0a7a)), closes [#2341](https://github.com/roomle-dev/roomle-ui/issues/2341)
20
+ * Merge pull request #2342 from roomle-dev/upgraded-by-ci/core-2.71.0-alpha.10 ([3d31e51](https://github.com/roomle-dev/roomle-ui/commit/3d31e51)), closes [#2342](https://github.com/roomle-dev/roomle-ui/issues/2342)
21
+ * feat: add hash to configuration history ([1cd9c39](https://github.com/roomle-dev/roomle-ui/commit/1cd9c39))
22
+ * feat: apply HI attribute range checks to parameters ([f0b88d1](https://github.com/roomle-dev/roomle-ui/commit/f0b88d1))
23
+ * feat: HI attribute range checks - glue logic ([9e39157](https://github.com/roomle-dev/roomle-ui/commit/9e39157))
24
+ * feat(core): upgrade to version 2.71.0-alpha.10 ([963b9c4](https://github.com/roomle-dev/roomle-ui/commit/963b9c4))
25
+ * feat(core): upgrade to version 2.71.0-alpha.9 ([95bf1df](https://github.com/roomle-dev/roomle-ui/commit/95bf1df))
26
+ * chore: accidental changes removed ([ded0709](https://github.com/roomle-dev/roomle-ui/commit/ded0709))
27
+ * chore: fix vertical scrolling on expanded view on desktop ([5fef4ce](https://github.com/roomle-dev/roomle-ui/commit/5fef4ce))
28
+ * chore: implement code review suggestions ([22501a1](https://github.com/roomle-dev/roomle-ui/commit/22501a1))
29
+ * chore: potential fix ([748c19a](https://github.com/roomle-dev/roomle-ui/commit/748c19a))
30
+ * style: fix excessive margins ([8b971f4](https://github.com/roomle-dev/roomle-ui/commit/8b971f4))
31
+ * docs: update HI embedding documentation ([1d84fd4](https://github.com/roomle-dev/roomle-ui/commit/1d84fd4))
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@roomle/embedding-lib",
3
- "version": "6.3.0",
3
+ "version": "6.4.0-alpha.12",
4
4
  "description": "This is a small library which can be used to communicate with the Roomle Configurator. ES modules only (browser-compatible).",
5
5
  "type": "module",
6
6
  "main": "./roomle-embedding-lib.js",
@@ -14,4 +14,5 @@ export { createHiLibraryCallbacks } from './homag-intelligence/hi-callbacks';
14
14
  export { libLoadArticleCatalog, libLoadMasterData, libLoadCalcScript, } from './homag-intelligence/hi-requests';
15
15
  export { omPostRequest, omGetRequest, } from './homag-intelligence/hi-order-manager';
16
16
  export { setupHi, cleanupHi } from './homag-intelligence/hi-setup';
17
+ export { type ExternalObjectSnapshotSaveResult, type HiContextAction, } from '../../web-sdk/packages';
17
18
  export { HI_PANEL_ACTION, type HiPanelActionType, type HiOrderHeader, type HiOrder, type HiOrderData, type HiPriceData, type HiCallbacks, } from '../../common/src/hi/hi-types';
@@ -192,7 +192,7 @@ const G = (s) => JSON.parse(JSON.stringify(s)), J = {
192
192
  const s = G(J);
193
193
  s.locale || (s.locale = P(null, !0)), s.id === V && delete s.id;
194
194
  const e = U();
195
- return e && k(e) && (s.configuratorId = "demoConfigurator"), s.customApiUrl = void 0, s.emails = !1, s;
195
+ return e && k(e) && (s.configuratorId = "demoConfigurator"), s.customApiUrl = "https://rubens.alpha.roomle.com/api/v2", s.emails = !1, s;
196
196
  }, Y = "<CONF_ID>", q = "#CONFIGURATIONID#", Q = (s) => {
197
197
  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);
198
198
  }, M = () => /(android)/i.test(navigator.userAgent);
@@ -1 +1 @@
1
- import{expose as e}from"./comlink-CmT64Qi3.mjs";import{g as t}from"./browser-BhHw2H1M.mjs";import{c as s}from"./utils-BqTPLNLs.mjs";class r{_side;_incomingMessageBus=null;_outgoingMessageBus=null;_execMessage=null;constructor(e,t,s,r){this._side=e,this._incomingMessageBus=t,this._outgoingMessageBus=s,this._execMessage=r,this._incomingMessageBus&&this._incomingMessageBus.addEventListener("message",this._handleMessage.bind(this))}setOutgoingMessageBus(e){this._outgoingMessageBus=e}setMessageExecution(e){this._execMessage=e}sendMessage(e,t=[]){return new Promise((s,r)=>{if(this._incomingMessageBus===this._outgoingMessageBus)return s(void 0);const i=new MessageChannel;i.port1.onmessage=e=>{if(!e||!e.data)return i.port1.close(),i.port2.close(),r(new Error(this._side+" received message but response can not be interpreted"));let t;try{t=JSON.parse(e.data)}catch(e){return i.port1.close(),i.port2.close(),this._prepareError(e),r(e)}t.error?r(t.error):void 0!==t.result?s(t.result):s(void 0),i.port1.close(),i.port2.close()};let a="";try{a=JSON.stringify({message:e,args:t})}catch{return r(new Error(this._side+": can not create command because it is not JSON.stringify able"))}if(!this._outgoingMessageBus)return r(new Error(this._side+": outgoing bus not set yet"));this._outgoingMessageBus.postMessage(a,"*",[i.port2])})}_handleMessage(e){const t=e.ports&&Array.isArray(e.ports)&&e.ports.length>0?e.ports[0]:null;if(e.data&&("string"==typeof e.data||"connect_hi"!==e.data.type)&&t)try{const s=JSON.parse(e.data);if(!this._execMessage)return t.postMessage(JSON.stringify({error:this._side+" is not ready to handle messages"}));Array.isArray(s.args)||(s.args=[s.args]);const r=this._execMessage(s,e);if(void 0===r)return;r.then((e={})=>{let s,r;"object"==typeof e&&null!==e&&(s=e.error,r=e.result),s?t.postMessage(JSON.stringify({error:s})):void 0!==r?t.postMessage(JSON.stringify({result:r})):t.postMessage(JSON.stringify({result:e}))},e=>{t.postMessage(JSON.stringify({error:this._prepareError(e)}))})}catch(e){t.postMessage(JSON.stringify({error:this._prepareError(e)}))}}_prepareError(e){return"string"==typeof e?this._side+": "+e:(e.message=this._side+": "+e.message,e.message)}}const i=["127.0.0.1","localhost","0.0.0.0"],a=(e,t)=>{for(const s in t)try{t[s].constructor===Object?e[s]=a(e[s],t[s]):e[s]=t[s]}catch{e[s]=t[s]}return e};var n=(e=>(e.BOTTOM_BAR="bottom_bar",e.PARTLIST_BOUNDS="partlist_bounds",e.INTERACTION_NOTES="interaction_notes",e.PARAMETER_GROUPS="parameter_groups",e))(n||{});const o={mobileLandscape:!0,floorMaterialRootTag:"materials_root",buttons:{renderimage:!0,requestproduct:!0,requestplan:!0,load_product:!0,partlist_print:!0},elements:{[n.INTERACTION_NOTES]:!0},helpcenter:{roomdesigner:!0,configurator:!1,disable:!1},firstPersonView:!0,saveToIdb:!0,featureFlags:{mocAr:!0,wallAutoHeight:!1,openCloseAnimation:!0,enableTwoLevelCatalog:!1,webGpu:!1,localExport3d:!1},rotationSnapDegrees:10,interactionsCollapsed:!1},l=e=>{if(!e)return;const t=Object.keys(e);for(const s of t){const t=e[s];if(!Array.isArray(t)&&"object"==typeof t&&null!==t&&l(t),Array.isArray(t))for(const e of t)l(e);("true"===t||"false"===t)&&(e[s]="true"===t)}},c=()=>/(android)/i.test(navigator.userAgent);class u{_messageHandler=null;isSetupDone=!1;viewName="main";plugins={};pluginsLoaded=[];ui={callbacks:null};extended={callbacks:null};configurator={callbacks:null};analytics={callbacks:{}};rapi={callbacks:{}};global={callbacks:{}};setMessageHandler(e){this._messageHandler=e}handleSetup(e){const{methods:t,callbacks:s}=e;t.forEach(e=>{const t=e.split(h),s=t[0],r=t[1];this[s]||(this[s]={}),this[s][r]=function(){if(this._messageHandler)return this._messageHandler.sendMessage(e,[...arguments])}.bind(this)}),s.forEach(e=>{const t=e.split(h),s=t[0],r=t[1],i=t[2];this[s]||(this[s]={}),this[s][r]||(this[s][r]={}),this[s][r][i]=()=>{}}),this.isSetupDone=!0}executeMessage({message:e,args:t}){const s=e.split(h),r=s[0],i=s[1],a=3===s.length?s[2]:null;if(a&&this[r][i][a]){const e=this[r][i][a](...t);return e instanceof Promise?e.then(e=>({result:e})):void 0!==e?Promise.resolve({result:e}):Promise.resolve({result:null})}return Promise.reject('Message "'+e+'" is unkown')}setupPlugins(e,t,s="website"){for(const r of e)"string"==typeof r&&"dragIn"===r?this.pluginsLoaded.push(new Promise((e,r)=>{try{import("./embedding-plugins-Dzhuj1By.mjs").then(e=>e.l).then(({DragIn:i})=>{const a=new i(this.ui,t,s,this.viewName);a.init().then(()=>{this.plugins.dragIn=a,e()},r)})}catch(e){r(e)}})):r.name&&r.loader&&this.pluginsLoaded.push(new Promise((e,i)=>{try{r.loader().then(a=>{const n=new a(this.ui,t,s,this.viewName);n.init().then(()=>{this.plugins[r.name]=n,e()},i)})}catch(e){i(e)}}))}}const d=()=>{let e,t;return{promise:new Promise((s,r)=>{e=s,t=r}),resolve:e,reject:t}},g={SDK:"extended",CONFIGURATOR_SDK:"configurator",CALLBACKS:"callbacks",UI:"ui",ANALYTICS:"analytics",GLOBAL:"global",RAPI:"rapi"},h=".",m=g.SDK+h+g.CALLBACKS,p={REQUEST_BOOT:"requestBoot",SETUP:"setup",WEBSITE_READY:"websiteReady"},_={GET_METHODS:"getMethods",RETURN_METHODS:"returnMethods",REGISTER_CUSTOM_VIEW:"registerCustomView",REGISTER_CUSTOM_VIEW_DONE:"registerCustomViewDone"},f=["constructor","callbacks"],w=e=>"_"!==e[0]&&!f.includes(e),E=(e,t,s=!1)=>{if(!e)return[];const r=Object.getOwnPropertyNames(e),i=s?g.CALLBACKS+h:"";return r.filter(w).map(e=>t+h+i+e)},S=async(e,t)=>{if("string"!=typeof e)throw new Error('Configurator ID is not a string type: "'+typeof e+'"');const s=t.customApiUrl?t.customApiUrl:"https://api.roomle.com/v2",r=t.overrideTenant||9,i=s+"/configurators/"+e,a="roomle_portal_v2",n="03-"+window.btoa((new Date).toISOString()+";anonymous;"+a),o=new Request(i,{method:"GET",headers:new Headers({apiKey:a,currentTenant:r,locale:"en",language:"en",device:1,token:n,platform:"web"}),mode:"cors",cache:"default"}),l=await fetch(o),{configurator:c}=await l.json();return c},M="data-rml-interaction-container",b=(e,t,s)=>{let r=null;Object.defineProperty(e,t,{get:()=>r||s,set(e){r=e?.mute?e.value:e}})},y=()=>.01*window.innerHeight+"px",T=e=>{e&&setTimeout(()=>e.style.setProperty(v,y()),0)},O="rml-styles",v="--rml-full-height",A="rml-container",N="rml-fill",R="rml-pos",I="rml-android-height",L="rml-overflow-hidden",C=new Map;class P extends u{static createPlanner(e,t,s,r=[]){return this._create(e,t,s,r)}static async connect(e,t=[]){const s=new u;s.viewName=e;const{resolve:i,promise:a}=d(),{resolve:n,promise:o}=d(),l=new r("custom-view-"+e,window,window.parent,({message:e,args:t})=>{switch(e){case _.REGISTER_CUSTOM_VIEW_DONE:i();break;case _.RETURN_METHODS:s.handleSetup(t[0]),n();break;default:if(s.isSetupDone)return s.executeMessage({message:e,args:t})}});s.setMessageHandler(l);const c=[e];return l.sendMessage(_.REGISTER_CUSTOM_VIEW,c),await a,l.sendMessage(_.GET_METHODS,c),await o,s.setupPlugins(t,document.body,"custom-view"),await Promise.allSettled(s.pluginsLoaded),s}static createConfigurator(e,t,s,r=[]){return this._create(e,t,s,r)}static create(e,t,s,r){return this._create(e,t,s,r)}static createViewer(e,t,s,r=[]){return this._create(e,t,s,r)}static hiMessageHandler=null;static setupHi(t){this.hiMessageHandler&&window.removeEventListener("message",this.hiMessageHandler),this.hiMessageHandler=r=>{if("connect_hi"===r.data.type&&r.data.port){const i=r.data.port;i.start?.(),e(s(t),i)}},window.addEventListener("message",this.hiMessageHandler)}static async _create(e,s,r,n){return new Promise(async(c,u)=>{try{const u=a((()=>{const e=(e=>JSON.parse(JSON.stringify(e)))(o);e.locale||(e.locale=t(null,!0)),"(idle)"===e.id&&delete e.id;const s=(()=>{const e=(()=>{try{return window.self!==window.top}catch{return!0}})();let t=window.location.href;if(e){if(!document.referrer)return null;t=document.referrer}const{hostname:s}=new URL(t);return s})();return s&&(e=>{const t=new RegExp(/^(10\.|172\.(1[6-9]|2\d|3[01])\.|192\.168\.)/);return!!(i.includes(e)||t.test(e)||e.endsWith("roomle.com")||e.endsWith("gitlab.io")||e.endsWith("gitlab.com"))})(s)&&(e.configuratorId="demoConfigurator"),e.customApiUrl=void 0,e.emails=!1,e})(),(l(d=r),d?.customApiUrl&&(d.customApiUrl=decodeURIComponent(d.customApiUrl)),d.shareUrl&&(d.deeplink=d.shareUrl.replace("<CONF_ID>","#CONFIGURATIONID#")),d));(e=>{e.featureFlags||(e.featureFlags={}),"boolean"!=typeof e.featureFlags.realPartList&&(e.featureFlags.realPartList=!0),"boolean"!=typeof e.featureFlags.globalCallbacks&&(e.featureFlags.globalCallbacks=!0),"boolean"!=typeof e.featureFlags.mocAr&&(e.featureFlags.mocAr=!1)})(u);const g=await S(e,u);r=((e,t)=>{t.configuratorId=e.id;const s=e.settings||{};return!t.overrideTenant&&e.tenant&&(t.overrideTenant=e.tenant),((e,t)=>{const s=JSON.parse(JSON.stringify(e));return a(s,t)})(s,t)})(g,u);const h=new this(g,s,r,n,c);return await Promise.allSettled(h.pluginsLoaded),h}catch(e){return u(e)}var d})}_waitForIframe;_container;_configuratorSettings;_initData={};_iframe;constructor(e,t,s,i,a){if(super(),!e||"string"!=typeof e.id)throw new Error("Please provide a correct configuratorId, you get the correct ID from your Roomle Contact Person");if(C.has(t))throw new Error("There is already an instance on this DOM element");if(!document.getElementById(O)){const e=s.zIndex||9999999,t=document.createElement("style");t.type="text/css",t.id=O;const r="transition:all ease-in-out 450ms;",i=["-webkit-","-o-"].reduce((e,t)=>e+(t+r),"")+r,a=y();t.innerHTML=`\n .${A}{${v}:${a};}\n .${R}{position:fixed;top:0;left:0;z-index:${e};opacity:0}\n .rml-transition{${i}}\n .${N}{width:100%;height:100%;opacity:1}\n .${I}{height:calc(var(${v},1vh)*100)}\n .${L}{overflow:hidden}\n `,document.head.appendChild(t)}this._executeMessage=this._executeMessage.bind(this);const n=new r("website",window,null,this._executeMessage);this.setMessageHandler(n),this._onResize=this._onResize.bind(this),c()&&window.addEventListener("resize",this._onResize),this._container=t,this._initData=s,this._configuratorSettings=e;const o=this._createIframe();this._onUseFullPage=this._onUseFullPage.bind(this),this._onBackToWebsite=this._onBackToWebsite.bind(this),this._waitForIframe=a,this._container.appendChild(o),this._iframe=o,this.setupPlugins(i,this._iframe),C.set(t,!0)}teardown(){this._container&&C.delete(this._container);const e=this._container.querySelector("iframe");e&&this._container.removeChild(e),window.removeEventListener("resize",this._onResize)}_createIframe(){const e=document.createElement("iframe");let t=this._configuratorSettings?.url||"https://www.roomle.com/t/cp/";return this._initData.useLocalRoomle&&(t=location.href.replace("embedding.html","")),location.href.includes("roomle.gitlab.io")&&(t=location.href.replace("embedding.html","index.html")),this._initData.overrideServerUrl&&(t=this._initData.overrideServerUrl),e.src=t,e.classList.add(A),e.classList.add(N),e}_onResize(){T(this._iframe)}_onUseFullPage(){this._iframe.classList.add(R),document.documentElement.classList.add(L),window.document.body.classList.add(L),c()&&(T(this._iframe),this._iframe.classList.add(I))}_onBackToWebsite(){this._iframe.classList.remove(R),this._iframe.classList.remove(I),document.documentElement.classList.remove(L),window.document.body.classList.remove(L)}_executeMessage({message:e,args:t},s){if(s.source&&s.source===this._iframe?.contentWindow)return e===p.REQUEST_BOOT?this._messageHandler?(this._messageHandler.setOutgoingMessageBus(s.source),Promise.resolve({result:this._initData})):Promise.resolve({error:"MessageHandler not set"}):e===p.SETUP?(this.handleSetup(t[0]),b(this.ui.callbacks,"onUseFullPage",this._onUseFullPage),b(this.ui.callbacks,"onBackToWebsite",this._onBackToWebsite),this._waitForIframe(this),setTimeout(()=>{this._messageHandler&&this._messageHandler.sendMessage(p.WEBSITE_READY)},0),Promise.resolve({result:null})):this.executeMessage({message:e,args:t})}}export{p as HANDSHAKE_MESSAGES,M as INTERACTION_CONTAINER_SELECTOR,g as NAMESPACE,h as NAMESPACE_SEPARATOR,m as SDK_CALLBACK,_ as WELL_KNOWN_MESSAGES,P as default,S as getConfiguratorSettings,E as getMethodNames,w as isExposable};
1
+ import{expose as e}from"./comlink-CmT64Qi3.mjs";import{g as t}from"./browser-BhHw2H1M.mjs";import{c as s}from"./utils-BqTPLNLs.mjs";class r{_side;_incomingMessageBus=null;_outgoingMessageBus=null;_execMessage=null;constructor(e,t,s,r){this._side=e,this._incomingMessageBus=t,this._outgoingMessageBus=s,this._execMessage=r,this._incomingMessageBus&&this._incomingMessageBus.addEventListener("message",this._handleMessage.bind(this))}setOutgoingMessageBus(e){this._outgoingMessageBus=e}setMessageExecution(e){this._execMessage=e}sendMessage(e,t=[]){return new Promise((s,r)=>{if(this._incomingMessageBus===this._outgoingMessageBus)return s(void 0);const i=new MessageChannel;i.port1.onmessage=e=>{if(!e||!e.data)return i.port1.close(),i.port2.close(),r(new Error(this._side+" received message but response can not be interpreted"));let t;try{t=JSON.parse(e.data)}catch(e){return i.port1.close(),i.port2.close(),this._prepareError(e),r(e)}t.error?r(t.error):void 0!==t.result?s(t.result):s(void 0),i.port1.close(),i.port2.close()};let a="";try{a=JSON.stringify({message:e,args:t})}catch{return r(new Error(this._side+": can not create command because it is not JSON.stringify able"))}if(!this._outgoingMessageBus)return r(new Error(this._side+": outgoing bus not set yet"));this._outgoingMessageBus.postMessage(a,"*",[i.port2])})}_handleMessage(e){const t=e.ports&&Array.isArray(e.ports)&&e.ports.length>0?e.ports[0]:null;if(e.data&&("string"==typeof e.data||"connect_hi"!==e.data.type)&&t)try{const s=JSON.parse(e.data);if(!this._execMessage)return t.postMessage(JSON.stringify({error:this._side+" is not ready to handle messages"}));Array.isArray(s.args)||(s.args=[s.args]);const r=this._execMessage(s,e);if(void 0===r)return;r.then((e={})=>{let s,r;"object"==typeof e&&null!==e&&(s=e.error,r=e.result),s?t.postMessage(JSON.stringify({error:s})):void 0!==r?t.postMessage(JSON.stringify({result:r})):t.postMessage(JSON.stringify({result:e}))},e=>{t.postMessage(JSON.stringify({error:this._prepareError(e)}))})}catch(e){t.postMessage(JSON.stringify({error:this._prepareError(e)}))}}_prepareError(e){return"string"==typeof e?this._side+": "+e:(e.message=this._side+": "+e.message,e.message)}}const i=["127.0.0.1","localhost","0.0.0.0"],a=(e,t)=>{for(const s in t)try{t[s].constructor===Object?e[s]=a(e[s],t[s]):e[s]=t[s]}catch{e[s]=t[s]}return e};var n=(e=>(e.BOTTOM_BAR="bottom_bar",e.PARTLIST_BOUNDS="partlist_bounds",e.INTERACTION_NOTES="interaction_notes",e.PARAMETER_GROUPS="parameter_groups",e))(n||{});const o={mobileLandscape:!0,floorMaterialRootTag:"materials_root",buttons:{renderimage:!0,requestproduct:!0,requestplan:!0,load_product:!0,partlist_print:!0},elements:{[n.INTERACTION_NOTES]:!0},helpcenter:{roomdesigner:!0,configurator:!1,disable:!1},firstPersonView:!0,saveToIdb:!0,featureFlags:{mocAr:!0,wallAutoHeight:!1,openCloseAnimation:!0,enableTwoLevelCatalog:!1,webGpu:!1,localExport3d:!1},rotationSnapDegrees:10,interactionsCollapsed:!1},l=e=>{if(!e)return;const t=Object.keys(e);for(const s of t){const t=e[s];if(!Array.isArray(t)&&"object"==typeof t&&null!==t&&l(t),Array.isArray(t))for(const e of t)l(e);("true"===t||"false"===t)&&(e[s]="true"===t)}},c=()=>/(android)/i.test(navigator.userAgent);class u{_messageHandler=null;isSetupDone=!1;viewName="main";plugins={};pluginsLoaded=[];ui={callbacks:null};extended={callbacks:null};configurator={callbacks:null};analytics={callbacks:{}};rapi={callbacks:{}};global={callbacks:{}};setMessageHandler(e){this._messageHandler=e}handleSetup(e){const{methods:t,callbacks:s}=e;t.forEach(e=>{const t=e.split(h),s=t[0],r=t[1];this[s]||(this[s]={}),this[s][r]=function(){if(this._messageHandler)return this._messageHandler.sendMessage(e,[...arguments])}.bind(this)}),s.forEach(e=>{const t=e.split(h),s=t[0],r=t[1],i=t[2];this[s]||(this[s]={}),this[s][r]||(this[s][r]={}),this[s][r][i]=()=>{}}),this.isSetupDone=!0}executeMessage({message:e,args:t}){const s=e.split(h),r=s[0],i=s[1],a=3===s.length?s[2]:null;if(a&&this[r][i][a]){const e=this[r][i][a](...t);return e instanceof Promise?e.then(e=>({result:e})):void 0!==e?Promise.resolve({result:e}):Promise.resolve({result:null})}return Promise.reject('Message "'+e+'" is unkown')}setupPlugins(e,t,s="website"){for(const r of e)"string"==typeof r&&"dragIn"===r?this.pluginsLoaded.push(new Promise((e,r)=>{try{import("./embedding-plugins-Dzhuj1By.mjs").then(e=>e.l).then(({DragIn:i})=>{const a=new i(this.ui,t,s,this.viewName);a.init().then(()=>{this.plugins.dragIn=a,e()},r)})}catch(e){r(e)}})):r.name&&r.loader&&this.pluginsLoaded.push(new Promise((e,i)=>{try{r.loader().then(a=>{const n=new a(this.ui,t,s,this.viewName);n.init().then(()=>{this.plugins[r.name]=n,e()},i)})}catch(e){i(e)}}))}}const d=()=>{let e,t;return{promise:new Promise((s,r)=>{e=s,t=r}),resolve:e,reject:t}},g={SDK:"extended",CONFIGURATOR_SDK:"configurator",CALLBACKS:"callbacks",UI:"ui",ANALYTICS:"analytics",GLOBAL:"global",RAPI:"rapi"},h=".",m=g.SDK+h+g.CALLBACKS,p={REQUEST_BOOT:"requestBoot",SETUP:"setup",WEBSITE_READY:"websiteReady"},_={GET_METHODS:"getMethods",RETURN_METHODS:"returnMethods",REGISTER_CUSTOM_VIEW:"registerCustomView",REGISTER_CUSTOM_VIEW_DONE:"registerCustomViewDone"},f=["constructor","callbacks"],w=e=>"_"!==e[0]&&!f.includes(e),E=(e,t,s=!1)=>{if(!e)return[];const r=Object.getOwnPropertyNames(e),i=s?g.CALLBACKS+h:"";return r.filter(w).map(e=>t+h+i+e)},S=async(e,t)=>{if("string"!=typeof e)throw new Error('Configurator ID is not a string type: "'+typeof e+'"');const s=t.customApiUrl?t.customApiUrl:"https://api.roomle.com/v2",r=t.overrideTenant||9,i=s+"/configurators/"+e,a="roomle_portal_v2",n="03-"+window.btoa((new Date).toISOString()+";anonymous;"+a),o=new Request(i,{method:"GET",headers:new Headers({apiKey:a,currentTenant:r,locale:"en",language:"en",device:1,token:n,platform:"web"}),mode:"cors",cache:"default"}),l=await fetch(o),{configurator:c}=await l.json();return c},M="data-rml-interaction-container",b=(e,t,s)=>{let r=null;Object.defineProperty(e,t,{get:()=>r||s,set(e){r=e?.mute?e.value:e}})},y=()=>.01*window.innerHeight+"px",T=e=>{e&&setTimeout(()=>e.style.setProperty(v,y()),0)},O="rml-styles",v="--rml-full-height",A="rml-container",N="rml-fill",R="rml-pos",I="rml-android-height",L="rml-overflow-hidden",C=new Map;class P extends u{static createPlanner(e,t,s,r=[]){return this._create(e,t,s,r)}static async connect(e,t=[]){const s=new u;s.viewName=e;const{resolve:i,promise:a}=d(),{resolve:n,promise:o}=d(),l=new r("custom-view-"+e,window,window.parent,({message:e,args:t})=>{switch(e){case _.REGISTER_CUSTOM_VIEW_DONE:i();break;case _.RETURN_METHODS:s.handleSetup(t[0]),n();break;default:if(s.isSetupDone)return s.executeMessage({message:e,args:t})}});s.setMessageHandler(l);const c=[e];return l.sendMessage(_.REGISTER_CUSTOM_VIEW,c),await a,l.sendMessage(_.GET_METHODS,c),await o,s.setupPlugins(t,document.body,"custom-view"),await Promise.allSettled(s.pluginsLoaded),s}static createConfigurator(e,t,s,r=[]){return this._create(e,t,s,r)}static create(e,t,s,r){return this._create(e,t,s,r)}static createViewer(e,t,s,r=[]){return this._create(e,t,s,r)}static hiMessageHandler=null;static setupHi(t){this.hiMessageHandler&&window.removeEventListener("message",this.hiMessageHandler),this.hiMessageHandler=r=>{if("connect_hi"===r.data.type&&r.data.port){const i=r.data.port;i.start?.(),e(s(t),i)}},window.addEventListener("message",this.hiMessageHandler)}static async _create(e,s,r,n){return new Promise(async(c,u)=>{try{const u=a((()=>{const e=(e=>JSON.parse(JSON.stringify(e)))(o);e.locale||(e.locale=t(null,!0)),"(idle)"===e.id&&delete e.id;const s=(()=>{const e=(()=>{try{return window.self!==window.top}catch{return!0}})();let t=window.location.href;if(e){if(!document.referrer)return null;t=document.referrer}const{hostname:s}=new URL(t);return s})();return s&&(e=>{const t=new RegExp(/^(10\.|172\.(1[6-9]|2\d|3[01])\.|192\.168\.)/);return!!(i.includes(e)||t.test(e)||e.endsWith("roomle.com")||e.endsWith("gitlab.io")||e.endsWith("gitlab.com"))})(s)&&(e.configuratorId="demoConfigurator"),e.customApiUrl="https://rubens.alpha.roomle.com/api/v2",e.emails=!1,e})(),(l(d=r),d?.customApiUrl&&(d.customApiUrl=decodeURIComponent(d.customApiUrl)),d.shareUrl&&(d.deeplink=d.shareUrl.replace("<CONF_ID>","#CONFIGURATIONID#")),d));(e=>{e.featureFlags||(e.featureFlags={}),"boolean"!=typeof e.featureFlags.realPartList&&(e.featureFlags.realPartList=!0),"boolean"!=typeof e.featureFlags.globalCallbacks&&(e.featureFlags.globalCallbacks=!0),"boolean"!=typeof e.featureFlags.mocAr&&(e.featureFlags.mocAr=!1)})(u);const g=await S(e,u);r=((e,t)=>{t.configuratorId=e.id;const s=e.settings||{};return!t.overrideTenant&&e.tenant&&(t.overrideTenant=e.tenant),((e,t)=>{const s=JSON.parse(JSON.stringify(e));return a(s,t)})(s,t)})(g,u);const h=new this(g,s,r,n,c);return await Promise.allSettled(h.pluginsLoaded),h}catch(e){return u(e)}var d})}_waitForIframe;_container;_configuratorSettings;_initData={};_iframe;constructor(e,t,s,i,a){if(super(),!e||"string"!=typeof e.id)throw new Error("Please provide a correct configuratorId, you get the correct ID from your Roomle Contact Person");if(C.has(t))throw new Error("There is already an instance on this DOM element");if(!document.getElementById(O)){const e=s.zIndex||9999999,t=document.createElement("style");t.type="text/css",t.id=O;const r="transition:all ease-in-out 450ms;",i=["-webkit-","-o-"].reduce((e,t)=>e+(t+r),"")+r,a=y();t.innerHTML=`\n .${A}{${v}:${a};}\n .${R}{position:fixed;top:0;left:0;z-index:${e};opacity:0}\n .rml-transition{${i}}\n .${N}{width:100%;height:100%;opacity:1}\n .${I}{height:calc(var(${v},1vh)*100)}\n .${L}{overflow:hidden}\n `,document.head.appendChild(t)}this._executeMessage=this._executeMessage.bind(this);const n=new r("website",window,null,this._executeMessage);this.setMessageHandler(n),this._onResize=this._onResize.bind(this),c()&&window.addEventListener("resize",this._onResize),this._container=t,this._initData=s,this._configuratorSettings=e;const o=this._createIframe();this._onUseFullPage=this._onUseFullPage.bind(this),this._onBackToWebsite=this._onBackToWebsite.bind(this),this._waitForIframe=a,this._container.appendChild(o),this._iframe=o,this.setupPlugins(i,this._iframe),C.set(t,!0)}teardown(){this._container&&C.delete(this._container);const e=this._container.querySelector("iframe");e&&this._container.removeChild(e),window.removeEventListener("resize",this._onResize)}_createIframe(){const e=document.createElement("iframe");let t=this._configuratorSettings?.url||"https://www.roomle.com/t/cp/";return this._initData.useLocalRoomle&&(t=location.href.replace("embedding.html","")),location.href.includes("roomle.gitlab.io")&&(t=location.href.replace("embedding.html","index.html")),this._initData.overrideServerUrl&&(t=this._initData.overrideServerUrl),e.src=t,e.classList.add(A),e.classList.add(N),e}_onResize(){T(this._iframe)}_onUseFullPage(){this._iframe.classList.add(R),document.documentElement.classList.add(L),window.document.body.classList.add(L),c()&&(T(this._iframe),this._iframe.classList.add(I))}_onBackToWebsite(){this._iframe.classList.remove(R),this._iframe.classList.remove(I),document.documentElement.classList.remove(L),window.document.body.classList.remove(L)}_executeMessage({message:e,args:t},s){if(s.source&&s.source===this._iframe?.contentWindow)return e===p.REQUEST_BOOT?this._messageHandler?(this._messageHandler.setOutgoingMessageBus(s.source),Promise.resolve({result:this._initData})):Promise.resolve({error:"MessageHandler not set"}):e===p.SETUP?(this.handleSetup(t[0]),b(this.ui.callbacks,"onUseFullPage",this._onUseFullPage),b(this.ui.callbacks,"onBackToWebsite",this._onBackToWebsite),this._waitForIframe(this),setTimeout(()=>{this._messageHandler&&this._messageHandler.sendMessage(p.WEBSITE_READY)},0),Promise.resolve({result:null})):this.executeMessage({message:e,args:t})}}export{p as HANDSHAKE_MESSAGES,M as INTERACTION_CONTAINER_SELECTOR,g as NAMESPACE,h as NAMESPACE_SEPARATOR,m as SDK_CALLBACK,_ as WELL_KNOWN_MESSAGES,P as default,S as getConfiguratorSettings,E as getMethodNames,w as isExposable};