@roomle/embedding-lib 6.5.0 → 6.6.0-alpha.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/browser-C_Dfiou7.mjs +18 -0
- package/browser-DRgK3Fk8.mjs +16 -0
- package/comlink-BipJ8Ikr.mjs +237 -0
- package/comlink-Dds_bpug.mjs +220 -0
- package/docs/md/web/embedding/CHANGELOG.md +32 -150
- package/drag-ghost-BGZWgVa7.mjs +60 -0
- package/drag-ghost-DGgvJ4Lm.mjs +65 -0
- package/drag-in-AFSAsnAN.mjs +102 -0
- package/drag-in-BwqVwCBp.mjs +96 -0
- package/embedding-plugins.js +2 -14
- package/embedding-plugins.min.js +2 -1
- package/from-custom-view-B-eXMXF1.mjs +207 -0
- package/from-custom-view-tZcYF-zX.mjs +206 -0
- package/from-website--UCl1aQs.mjs +113 -0
- package/from-website-BesXdvcV.mjs +118 -0
- package/hi.js +72 -119
- package/hi.min.js +71 -1
- package/package.json +1 -1
- package/rolldown-runtime-C-QNzSnW.mjs +11 -0
- package/rolldown-runtime-C017PlDO.mjs +9 -0
- package/roomle-embedding-lib.js +394 -576
- package/roomle-embedding-lib.min.js +365 -1
- package/utils-BnWKaFPc.mjs +126 -0
- package/utils-DfC2ZLUc.mjs +118 -0
- package/browser-BhHw2H1M.mjs +0 -1
- package/browser-CUgD7zyH.mjs +0 -21
- package/comlink-BAiXCcU9.mjs +0 -258
- package/comlink-CmT64Qi3.mjs +0 -1
- package/drag-ghost-B7UAYefM.mjs +0 -1
- package/drag-ghost-DHrf_Evu.mjs +0 -81
- package/embedding-plugins-DLVs7ER4.mjs +0 -1
- package/embedding-plugins-DqMSzAJe.mjs +0 -140
- package/from-custom-view-CaDOooe4.mjs +0 -1
- package/from-custom-view-T67aFIDR.mjs +0 -249
- package/from-website-Bvd5Pi0i.mjs +0 -134
- package/from-website-nKwD78_u.mjs +0 -1
- package/utils-BqTPLNLs.mjs +0 -1
- package/utils-Dav4kGNW.mjs +0 -150
|
@@ -1 +1,365 @@
|
|
|
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-DLVs7ER4.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 { n as e } from "./comlink-Dds_bpug.mjs";
|
|
2
|
+
import { t } from "./browser-DRgK3Fk8.mjs";
|
|
3
|
+
import { t as n } from "./utils-DfC2ZLUc.mjs";
|
|
4
|
+
var r = class {
|
|
5
|
+
_side;
|
|
6
|
+
_incomingMessageBus = null;
|
|
7
|
+
_outgoingMessageBus = null;
|
|
8
|
+
_execMessage = null;
|
|
9
|
+
constructor(e, t, n, r) {
|
|
10
|
+
this._side = e, this._incomingMessageBus = t, this._outgoingMessageBus = n, this._execMessage = r, this._incomingMessageBus && this._incomingMessageBus.addEventListener("message", this._handleMessage.bind(this));
|
|
11
|
+
}
|
|
12
|
+
setOutgoingMessageBus(e) {
|
|
13
|
+
this._outgoingMessageBus = e;
|
|
14
|
+
}
|
|
15
|
+
setMessageExecution(e) {
|
|
16
|
+
this._execMessage = e;
|
|
17
|
+
}
|
|
18
|
+
sendMessage(e, t = []) {
|
|
19
|
+
return new Promise((n, r) => {
|
|
20
|
+
if (this._incomingMessageBus === this._outgoingMessageBus) return n(void 0);
|
|
21
|
+
let i = new MessageChannel();
|
|
22
|
+
i.port1.onmessage = (e) => {
|
|
23
|
+
if (!e || !e.data) return i.port1.close(), i.port2.close(), r(/* @__PURE__ */ Error(this._side + " received message but response can not be interpreted"));
|
|
24
|
+
let t;
|
|
25
|
+
try {
|
|
26
|
+
t = JSON.parse(e.data);
|
|
27
|
+
} catch (e) {
|
|
28
|
+
return i.port1.close(), i.port2.close(), this._prepareError(e), r(e);
|
|
29
|
+
}
|
|
30
|
+
t.error ? r(t.error) : t.result === void 0 ? n(void 0) : n(t.result), i.port1.close(), i.port2.close();
|
|
31
|
+
};
|
|
32
|
+
let a = "";
|
|
33
|
+
try {
|
|
34
|
+
a = JSON.stringify({
|
|
35
|
+
message: e,
|
|
36
|
+
args: t
|
|
37
|
+
});
|
|
38
|
+
} catch {
|
|
39
|
+
return r(/* @__PURE__ */ Error(this._side + ": can not create command because it is not JSON.stringify able"));
|
|
40
|
+
}
|
|
41
|
+
if (!this._outgoingMessageBus) return r(/* @__PURE__ */ Error(this._side + ": outgoing bus not set yet"));
|
|
42
|
+
this._outgoingMessageBus.postMessage(a, "*", [i.port2]);
|
|
43
|
+
});
|
|
44
|
+
}
|
|
45
|
+
_handleMessage(e) {
|
|
46
|
+
let t = e.ports && Array.isArray(e.ports) && e.ports.length > 0 ? e.ports[0] : null;
|
|
47
|
+
if (e.data && (typeof e.data == "string" || e.data.type !== "connect_hi") && t) try {
|
|
48
|
+
let n = JSON.parse(e.data);
|
|
49
|
+
if (!this._execMessage) return t.postMessage(JSON.stringify({ error: this._side + " is not ready to handle messages" }));
|
|
50
|
+
Array.isArray(n.args) || (n.args = [n.args]);
|
|
51
|
+
let r = this._execMessage(n, e);
|
|
52
|
+
if (r === void 0) return;
|
|
53
|
+
r.then((e = {}) => {
|
|
54
|
+
let n, r;
|
|
55
|
+
typeof e == "object" && e && (n = e.error, r = e.result), n ? t.postMessage(JSON.stringify({ error: n })) : r === void 0 ? t.postMessage(JSON.stringify({ result: e })) : t.postMessage(JSON.stringify({ result: r }));
|
|
56
|
+
}, (e) => {
|
|
57
|
+
t.postMessage(JSON.stringify({ error: this._prepareError(e) }));
|
|
58
|
+
});
|
|
59
|
+
} catch (e) {
|
|
60
|
+
t.postMessage(JSON.stringify({ error: this._prepareError(e) }));
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
_prepareError(e) {
|
|
64
|
+
return typeof e == "string" ? this._side + ": " + e : (e.message = this._side + ": " + e.message, e.message);
|
|
65
|
+
}
|
|
66
|
+
}, i = [
|
|
67
|
+
"127.0.0.1",
|
|
68
|
+
"localhost",
|
|
69
|
+
"0.0.0.0"
|
|
70
|
+
], a = (e, t) => o(JSON.parse(JSON.stringify(e)), t), o = (e, t) => {
|
|
71
|
+
for (let n in t) try {
|
|
72
|
+
t[n].constructor === Object ? e[n] = o(e[n], t[n]) : e[n] = t[n];
|
|
73
|
+
} catch {
|
|
74
|
+
e[n] = t[n];
|
|
75
|
+
}
|
|
76
|
+
return e;
|
|
77
|
+
}, s = function(e) {
|
|
78
|
+
return e.BOTTOM_BAR = "bottom_bar", e.PARTLIST_BOUNDS = "partlist_bounds", e.INTERACTION_NOTES = "interaction_notes", e.PARAMETER_GROUPS = "parameter_groups", e;
|
|
79
|
+
}({}), c = (e) => JSON.parse(JSON.stringify(e)), l = {
|
|
80
|
+
mobileLandscape: !0,
|
|
81
|
+
floorMaterialRootTag: "materials_root",
|
|
82
|
+
buttons: {
|
|
83
|
+
renderimage: !0,
|
|
84
|
+
requestproduct: !0,
|
|
85
|
+
requestplan: !0,
|
|
86
|
+
load_product: !0,
|
|
87
|
+
partlist_print: !0
|
|
88
|
+
},
|
|
89
|
+
elements: { [s.INTERACTION_NOTES]: !0 },
|
|
90
|
+
helpcenter: {
|
|
91
|
+
roomdesigner: !0,
|
|
92
|
+
configurator: !1,
|
|
93
|
+
disable: !1
|
|
94
|
+
},
|
|
95
|
+
firstPersonView: !0,
|
|
96
|
+
saveToIdb: !0,
|
|
97
|
+
featureFlags: {
|
|
98
|
+
mocAr: !0,
|
|
99
|
+
wallAutoHeight: !1,
|
|
100
|
+
openCloseAnimation: !0,
|
|
101
|
+
enableTwoLevelCatalog: !1,
|
|
102
|
+
webGpu: !1,
|
|
103
|
+
localExport3d: !1
|
|
104
|
+
},
|
|
105
|
+
rotationSnapDegrees: 10,
|
|
106
|
+
interactionsCollapsed: !1
|
|
107
|
+
}, u = (e) => {
|
|
108
|
+
if (!e) return;
|
|
109
|
+
let t = Object.keys(e);
|
|
110
|
+
for (let n of t) {
|
|
111
|
+
let t = e[n];
|
|
112
|
+
if (Array.isArray(t) || typeof t != "object" || !t || u(t), Array.isArray(t)) for (let e of t) u(e);
|
|
113
|
+
t !== "true" && t !== "false" || (e[n] = t === "true");
|
|
114
|
+
}
|
|
115
|
+
}, d = () => {
|
|
116
|
+
let e = c(l);
|
|
117
|
+
e.locale ||= t(null, !0), e.id === "(idle)" && delete e.id;
|
|
118
|
+
let n = (() => {
|
|
119
|
+
let e = (() => {
|
|
120
|
+
try {
|
|
121
|
+
return window.self !== window.top;
|
|
122
|
+
} catch {
|
|
123
|
+
return !0;
|
|
124
|
+
}
|
|
125
|
+
})(), t = window.location.href;
|
|
126
|
+
if (e) {
|
|
127
|
+
if (!document.referrer) return null;
|
|
128
|
+
t = document.referrer;
|
|
129
|
+
}
|
|
130
|
+
let { hostname: n } = new URL(t);
|
|
131
|
+
return n;
|
|
132
|
+
})();
|
|
133
|
+
return n && ((e) => {
|
|
134
|
+
let t = /* @__PURE__ */ new RegExp(/^(10\.|172\.(1[6-9]|2\d|3[01])\.|192\.168\.)/);
|
|
135
|
+
return !!(i.includes(e) || t.test(e) || e.endsWith("roomle.com") || e.endsWith("gitlab.io") || e.endsWith("gitlab.com"));
|
|
136
|
+
})(n) && (e.configuratorId = "demoConfigurator"), e.customApiUrl = "https://rubens.alpha.roomle.com/api/v2", e.emails = !1, e;
|
|
137
|
+
}, f = (e) => {
|
|
138
|
+
e.featureFlags ||= {}, typeof e.featureFlags.realPartList != "boolean" && (e.featureFlags.realPartList = !0), typeof e.featureFlags.globalCallbacks != "boolean" && (e.featureFlags.globalCallbacks = !0), typeof e.featureFlags.mocAr != "boolean" && (e.featureFlags.mocAr = !1);
|
|
139
|
+
}, p = () => /(android)/i.test(navigator.userAgent), m = class {
|
|
140
|
+
_messageHandler = null;
|
|
141
|
+
isSetupDone = !1;
|
|
142
|
+
viewName = "main";
|
|
143
|
+
plugins = {};
|
|
144
|
+
pluginsLoaded = [];
|
|
145
|
+
ui = { callbacks: null };
|
|
146
|
+
extended = { callbacks: null };
|
|
147
|
+
configurator = { callbacks: null };
|
|
148
|
+
analytics = { callbacks: {} };
|
|
149
|
+
rapi = { callbacks: {} };
|
|
150
|
+
global = { callbacks: {} };
|
|
151
|
+
setMessageHandler(e) {
|
|
152
|
+
this._messageHandler = e;
|
|
153
|
+
}
|
|
154
|
+
handleSetup(e) {
|
|
155
|
+
let { methods: t, callbacks: n } = e;
|
|
156
|
+
t.forEach((e) => {
|
|
157
|
+
let t = e.split("."), n = t[0], r = t[1];
|
|
158
|
+
this[n] || (this[n] = {}), this[n][r] = function() {
|
|
159
|
+
if (this._messageHandler) return this._messageHandler.sendMessage(e, [...arguments]);
|
|
160
|
+
}.bind(this);
|
|
161
|
+
}), n.forEach((e) => {
|
|
162
|
+
let t = e.split("."), n = t[0], r = t[1], i = t[2];
|
|
163
|
+
this[n] || (this[n] = {}), this[n][r] || (this[n][r] = {}), this[n][r][i] = () => {};
|
|
164
|
+
}), this.isSetupDone = !0;
|
|
165
|
+
}
|
|
166
|
+
executeMessage({ message: e, args: t }) {
|
|
167
|
+
let n = e.split("."), r = n[0], i = n[1], a = n.length === 3 ? n[2] : null;
|
|
168
|
+
if (a && this[r][i][a]) {
|
|
169
|
+
let e = this[r][i][a](...t);
|
|
170
|
+
return e instanceof Promise ? e.then((e) => ({ result: e })) : e === void 0 ? Promise.resolve({ result: null }) : Promise.resolve({ result: e });
|
|
171
|
+
}
|
|
172
|
+
return Promise.reject("Message \"" + e + "\" is unkown");
|
|
173
|
+
}
|
|
174
|
+
setupPlugins(e, t, n = "website") {
|
|
175
|
+
for (let r of e) typeof r == "string" && r === "dragIn" ? this.pluginsLoaded.push(new Promise((e, r) => {
|
|
176
|
+
try {
|
|
177
|
+
import("./drag-in-BwqVwCBp.mjs").then((e) => e.n).then(({ DragIn: i }) => {
|
|
178
|
+
let a = new i(this.ui, t, n, this.viewName);
|
|
179
|
+
a.init().then(() => {
|
|
180
|
+
this.plugins.dragIn = a, e();
|
|
181
|
+
}, r);
|
|
182
|
+
});
|
|
183
|
+
} catch (e) {
|
|
184
|
+
r(e);
|
|
185
|
+
}
|
|
186
|
+
})) : r.name && r.loader && this.pluginsLoaded.push(new Promise((e, i) => {
|
|
187
|
+
try {
|
|
188
|
+
r.loader().then((a) => {
|
|
189
|
+
let o = new a(this.ui, t, n, this.viewName);
|
|
190
|
+
o.init().then(() => {
|
|
191
|
+
this.plugins[r.name] = o, e();
|
|
192
|
+
}, i);
|
|
193
|
+
});
|
|
194
|
+
} catch (e) {
|
|
195
|
+
i(e);
|
|
196
|
+
}
|
|
197
|
+
}));
|
|
198
|
+
}
|
|
199
|
+
}, h = () => {
|
|
200
|
+
let e, t;
|
|
201
|
+
return {
|
|
202
|
+
promise: new Promise((n, r) => {
|
|
203
|
+
e = n, t = r;
|
|
204
|
+
}),
|
|
205
|
+
resolve: e,
|
|
206
|
+
reject: t
|
|
207
|
+
};
|
|
208
|
+
}, g = {
|
|
209
|
+
SDK: "extended",
|
|
210
|
+
CONFIGURATOR_SDK: "configurator",
|
|
211
|
+
CALLBACKS: "callbacks",
|
|
212
|
+
UI: "ui",
|
|
213
|
+
ANALYTICS: "analytics",
|
|
214
|
+
GLOBAL: "global",
|
|
215
|
+
RAPI: "rapi"
|
|
216
|
+
}, _ = ".", v = g.SDK + "." + g.CALLBACKS, y = {
|
|
217
|
+
REQUEST_BOOT: "requestBoot",
|
|
218
|
+
SETUP: "setup",
|
|
219
|
+
WEBSITE_READY: "websiteReady"
|
|
220
|
+
}, b = {
|
|
221
|
+
GET_METHODS: "getMethods",
|
|
222
|
+
RETURN_METHODS: "returnMethods",
|
|
223
|
+
REGISTER_CUSTOM_VIEW: "registerCustomView",
|
|
224
|
+
REGISTER_CUSTOM_VIEW_DONE: "registerCustomViewDone"
|
|
225
|
+
}, x = ["constructor", "callbacks"], S = (e) => e[0] !== "_" && !x.includes(e), C = (e, t, n = !1) => {
|
|
226
|
+
if (!e) return [];
|
|
227
|
+
let r = Object.getOwnPropertyNames(e), i = n ? g.CALLBACKS + "." : "";
|
|
228
|
+
return r.filter(S).map((e) => t + "." + i + e);
|
|
229
|
+
}, w = async (e, t) => {
|
|
230
|
+
if (typeof e != "string") throw Error("Configurator ID is not a string type: \"" + typeof e + "\"");
|
|
231
|
+
let n = t.customApiUrl ? t.customApiUrl : "https://api.roomle.com/v2", r = t.overrideTenant || 9, i = n + "/configurators/" + e, a = "03-" + window.btoa((/* @__PURE__ */ new Date()).toISOString() + ";anonymous;roomle_portal_v2"), o = new Request(i, {
|
|
232
|
+
method: "GET",
|
|
233
|
+
headers: new Headers({
|
|
234
|
+
apiKey: "roomle_portal_v2",
|
|
235
|
+
currentTenant: r,
|
|
236
|
+
locale: "en",
|
|
237
|
+
language: "en",
|
|
238
|
+
device: 1,
|
|
239
|
+
token: a,
|
|
240
|
+
platform: "web"
|
|
241
|
+
}),
|
|
242
|
+
mode: "cors",
|
|
243
|
+
cache: "default"
|
|
244
|
+
}), { configurator: s } = await (await fetch(o)).json();
|
|
245
|
+
return s;
|
|
246
|
+
}, T = "data-rml-interaction-container", E = (e, t, n) => {
|
|
247
|
+
let r = null;
|
|
248
|
+
Object.defineProperty(e, t, {
|
|
249
|
+
get: () => r || n,
|
|
250
|
+
set(e) {
|
|
251
|
+
r = e?.mute ? e.value : e;
|
|
252
|
+
}
|
|
253
|
+
});
|
|
254
|
+
}, D = () => .01 * window.innerHeight + "px", O = (e) => {
|
|
255
|
+
e && setTimeout(() => e.style.setProperty(A, D()), 0);
|
|
256
|
+
}, k = "rml-styles", A = "--rml-full-height", j = "rml-container", M = "rml-fill", N = "rml-pos", P = "rml-android-height", F = "rml-overflow-hidden", I = /* @__PURE__ */ new Map(), L = class extends m {
|
|
257
|
+
static createPlanner(e, t, n, r = []) {
|
|
258
|
+
return this._create(e, t, n, r);
|
|
259
|
+
}
|
|
260
|
+
static async connect(e, t = []) {
|
|
261
|
+
let n = new m();
|
|
262
|
+
n.viewName = e;
|
|
263
|
+
let { resolve: i, promise: a } = h(), { resolve: o, promise: s } = h(), c = new r("custom-view-" + e, window, window.parent, ({ message: e, args: t }) => {
|
|
264
|
+
switch (e) {
|
|
265
|
+
case b.REGISTER_CUSTOM_VIEW_DONE:
|
|
266
|
+
i();
|
|
267
|
+
break;
|
|
268
|
+
case b.RETURN_METHODS:
|
|
269
|
+
n.handleSetup(t[0]), o();
|
|
270
|
+
break;
|
|
271
|
+
default: if (n.isSetupDone) return n.executeMessage({
|
|
272
|
+
message: e,
|
|
273
|
+
args: t
|
|
274
|
+
});
|
|
275
|
+
}
|
|
276
|
+
});
|
|
277
|
+
n.setMessageHandler(c);
|
|
278
|
+
let l = [e];
|
|
279
|
+
return c.sendMessage(b.REGISTER_CUSTOM_VIEW, l), await a, c.sendMessage(b.GET_METHODS, l), await s, n.setupPlugins(t, document.body, "custom-view"), await Promise.allSettled(n.pluginsLoaded), n;
|
|
280
|
+
}
|
|
281
|
+
static createConfigurator(e, t, n, r = []) {
|
|
282
|
+
return this._create(e, t, n, r);
|
|
283
|
+
}
|
|
284
|
+
static create(e, t, n, r) {
|
|
285
|
+
return this._create(e, t, n, r);
|
|
286
|
+
}
|
|
287
|
+
static createViewer(e, t, n, r = []) {
|
|
288
|
+
return this._create(e, t, n, r);
|
|
289
|
+
}
|
|
290
|
+
static hiMessageHandler = null;
|
|
291
|
+
static setupHi(t) {
|
|
292
|
+
this.hiMessageHandler && window.removeEventListener("message", this.hiMessageHandler), this.hiMessageHandler = (r) => {
|
|
293
|
+
if (r.data.type === "connect_hi" && r.data.port) {
|
|
294
|
+
let i = r.data.port;
|
|
295
|
+
i.start?.(), e(n(t), i);
|
|
296
|
+
}
|
|
297
|
+
}, window.addEventListener("message", this.hiMessageHandler);
|
|
298
|
+
}
|
|
299
|
+
static async _create(e, t, n, r) {
|
|
300
|
+
return new Promise(async (i, o) => {
|
|
301
|
+
try {
|
|
302
|
+
let o = ((e) => (u(e), e?.customApiUrl && (e.customApiUrl = decodeURIComponent(e.customApiUrl)), e.shareUrl && (e.deeplink = e.shareUrl.replace("<CONF_ID>", "#CONFIGURATIONID#")), e))(n), s = d();
|
|
303
|
+
f(s);
|
|
304
|
+
let l = await w(e, a(s, o));
|
|
305
|
+
n = ((e, t) => {
|
|
306
|
+
let n = c(t), r = d();
|
|
307
|
+
f(r);
|
|
308
|
+
let i = a(a(r, e.settings || {}), n);
|
|
309
|
+
return i.configuratorId = e.id, !i.overrideTenant && e.tenant && (i.overrideTenant = e.tenant), i;
|
|
310
|
+
})(l, o);
|
|
311
|
+
let p = new this(l, t, n, r, i);
|
|
312
|
+
return await Promise.allSettled(p.pluginsLoaded), p;
|
|
313
|
+
} catch (e) {
|
|
314
|
+
return o(e);
|
|
315
|
+
}
|
|
316
|
+
});
|
|
317
|
+
}
|
|
318
|
+
_waitForIframe;
|
|
319
|
+
_container;
|
|
320
|
+
_configuratorSettings;
|
|
321
|
+
_initData = {};
|
|
322
|
+
_iframe;
|
|
323
|
+
constructor(e, t, n, i, a) {
|
|
324
|
+
if (super(), !e || typeof e.id != "string") throw Error("Please provide a correct configuratorId, you get the correct ID from your Roomle Contact Person");
|
|
325
|
+
if (I.has(t)) throw Error("There is already an instance on this DOM element");
|
|
326
|
+
if (!document.getElementById(k)) {
|
|
327
|
+
let e = n.zIndex || 9999999, t = document.createElement("style");
|
|
328
|
+
t.type = "text/css", t.id = k;
|
|
329
|
+
let r = "transition:all ease-in-out 450ms;", i = ["-webkit-", "-o-"].reduce((e, t) => e + (t + r), "") + r;
|
|
330
|
+
t.innerHTML = `\n .${j}{${A}:${D()};}\n .${N}{position:fixed;top:0;left:0;z-index:${e};opacity:0}\n .rml-transition{${i}}\n .${M}{width:100%;height:100%;opacity:1}\n .${P}{height:calc(var(${A},1vh)*100)}\n .${F}{overflow:hidden}\n `, document.head.appendChild(t);
|
|
331
|
+
}
|
|
332
|
+
this._executeMessage = this._executeMessage.bind(this);
|
|
333
|
+
let o = new r("website", window, null, this._executeMessage);
|
|
334
|
+
this.setMessageHandler(o), this._onResize = this._onResize.bind(this), p() && window.addEventListener("resize", this._onResize), this._container = t, this._initData = n, this._configuratorSettings = e;
|
|
335
|
+
let s = this._createIframe();
|
|
336
|
+
this._onUseFullPage = this._onUseFullPage.bind(this), this._onBackToWebsite = this._onBackToWebsite.bind(this), this._waitForIframe = a, this._container.appendChild(s), this._iframe = s, this.setupPlugins(i, this._iframe), I.set(t, !0);
|
|
337
|
+
}
|
|
338
|
+
teardown() {
|
|
339
|
+
this._container && I.delete(this._container);
|
|
340
|
+
let e = this._container.querySelector("iframe");
|
|
341
|
+
e && this._container.removeChild(e), window.removeEventListener("resize", this._onResize);
|
|
342
|
+
}
|
|
343
|
+
_createIframe() {
|
|
344
|
+
let e = document.createElement("iframe"), t = this._configuratorSettings?.url || "https://www.roomle.com/t/cp/";
|
|
345
|
+
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(j), e.classList.add(M), e;
|
|
346
|
+
}
|
|
347
|
+
_onResize() {
|
|
348
|
+
O(this._iframe);
|
|
349
|
+
}
|
|
350
|
+
_onUseFullPage() {
|
|
351
|
+
this._iframe.classList.add(N), document.documentElement.classList.add(F), window.document.body.classList.add(F), p() && (O(this._iframe), this._iframe.classList.add(P));
|
|
352
|
+
}
|
|
353
|
+
_onBackToWebsite() {
|
|
354
|
+
this._iframe.classList.remove(N), this._iframe.classList.remove(P), document.documentElement.classList.remove(F), window.document.body.classList.remove(F);
|
|
355
|
+
}
|
|
356
|
+
_executeMessage({ message: e, args: t }, n) {
|
|
357
|
+
if (n.source && n.source === this._iframe?.contentWindow) return e === y.REQUEST_BOOT ? this._messageHandler ? (this._messageHandler.setOutgoingMessageBus(n.source), Promise.resolve({ result: this._initData })) : Promise.resolve({ error: "MessageHandler not set" }) : e === y.SETUP ? (this.handleSetup(t[0]), E(this.ui.callbacks, "onUseFullPage", this._onUseFullPage), E(this.ui.callbacks, "onBackToWebsite", this._onBackToWebsite), this._waitForIframe(this), setTimeout(() => {
|
|
358
|
+
this._messageHandler && this._messageHandler.sendMessage(y.WEBSITE_READY);
|
|
359
|
+
}, 0), Promise.resolve({ result: null })) : this.executeMessage({
|
|
360
|
+
message: e,
|
|
361
|
+
args: t
|
|
362
|
+
});
|
|
363
|
+
}
|
|
364
|
+
};
|
|
365
|
+
export { y as HANDSHAKE_MESSAGES, T as INTERACTION_CONTAINER_SELECTOR, g as NAMESPACE, _ as NAMESPACE_SEPARATOR, v as SDK_CALLBACK, b as WELL_KNOWN_MESSAGES, L as default, w as getConfiguratorSettings, C as getMethodNames, S as isExposable };
|
|
@@ -0,0 +1,126 @@
|
|
|
1
|
+
//#region packages/common/src/utils/get-computed-style-cached.ts
|
|
2
|
+
var e = class {
|
|
3
|
+
_computedStyleCache = /* @__PURE__ */ new Map();
|
|
4
|
+
_maxLifetime = 16;
|
|
5
|
+
_cacheCleanInterval = null;
|
|
6
|
+
constructor(e = 16) {
|
|
7
|
+
this._maxLifetime = e;
|
|
8
|
+
}
|
|
9
|
+
get(e) {
|
|
10
|
+
let t = this._computedStyleCache.get(e), n = Date.now();
|
|
11
|
+
if (t && n - t.updated < this._maxLifetime) return t.style;
|
|
12
|
+
let r = getComputedStyle(e);
|
|
13
|
+
return this._computedStyleCache.set(e, {
|
|
14
|
+
style: r,
|
|
15
|
+
updated: n
|
|
16
|
+
}), this._cacheCleanInterval ||= setInterval(() => this._cleanUpCache, Math.max(this._maxLifetime * 1e3, 5e3)), r;
|
|
17
|
+
}
|
|
18
|
+
_cleanUpCache() {
|
|
19
|
+
let e = Date.now();
|
|
20
|
+
for (let [t, { updated: n }] of this._computedStyleCache.entries()) e - n >= this._maxLifetime && this._computedStyleCache.delete(t);
|
|
21
|
+
this._computedStyleCache.size === 0 && this._cacheCleanInterval && (clearInterval(this._cacheCleanInterval), this._cacheCleanInterval = null);
|
|
22
|
+
}
|
|
23
|
+
}, t = (e) => window.TouchEvent && e instanceof window.TouchEvent, n, r = (t) => (n ||= new e(), n.get(t)), i = (e, t, n) => {
|
|
24
|
+
let i = parseFloat(e), a = window.devicePixelRatio || 1;
|
|
25
|
+
if (t === "px") return i;
|
|
26
|
+
if (t === "%") {
|
|
27
|
+
let e = n === document.documentElement ? window.innerWidth : n.offsetWidth;
|
|
28
|
+
return i / 100 * e;
|
|
29
|
+
}
|
|
30
|
+
if (t === "rem") return i * parseFloat(r(document.documentElement).fontSize);
|
|
31
|
+
if (t === "em") return i * parseFloat(r(n).fontSize);
|
|
32
|
+
if (t === "vh" || t === "vw" || t === "vmin" || t === "vmax") {
|
|
33
|
+
let e = {
|
|
34
|
+
vh: window.innerHeight,
|
|
35
|
+
vw: window.innerWidth,
|
|
36
|
+
vmin: Math.min(window.innerWidth, window.innerHeight),
|
|
37
|
+
vmax: Math.max(window.innerWidth, window.innerHeight)
|
|
38
|
+
};
|
|
39
|
+
return i / 100 * e[t];
|
|
40
|
+
}
|
|
41
|
+
let o = {
|
|
42
|
+
cm: 37.7952755906,
|
|
43
|
+
mm: 3.77952755906,
|
|
44
|
+
in: 96
|
|
45
|
+
};
|
|
46
|
+
return t in o ? i * o[t] * a : (console.warn("Unable to determine coordinates for drag-in. Therefore drag-in is not possible. Check the CSS that positions the iframe of Roomle"), 0);
|
|
47
|
+
}, a = (e, t, n = {
|
|
48
|
+
x: 0,
|
|
49
|
+
y: 0
|
|
50
|
+
}) => {
|
|
51
|
+
let a = e.getBoundingClientRect(), s = r(e).transform, c = 0, l = 0;
|
|
52
|
+
if (s !== "none") {
|
|
53
|
+
let t = s.match(/translate\(\s*([-+]?\d*\.?\d+|\d+)(px|%)?,?\s*([-+]?\d*\.?\d+|\d+)?(px|%)?\s*\)/);
|
|
54
|
+
t && (c = i(t[1], t[2], e), l = i(t[3], t[4], e));
|
|
55
|
+
}
|
|
56
|
+
let { clientX: u, clientY: d } = o(t, n);
|
|
57
|
+
return {
|
|
58
|
+
x: u - a.left - c + e.scrollLeft,
|
|
59
|
+
y: d - a.top - l + e.scrollTop
|
|
60
|
+
};
|
|
61
|
+
}, o = (e, n = null) => {
|
|
62
|
+
let { clientX: r, clientY: i } = t(e) ? s(e) : e;
|
|
63
|
+
return {
|
|
64
|
+
clientX: r > 0 ? r : n ? n.x : r,
|
|
65
|
+
clientY: i > 0 ? i : n ? n.y : i
|
|
66
|
+
};
|
|
67
|
+
}, s = (e) => {
|
|
68
|
+
if (e.touches.length) {
|
|
69
|
+
let { clientX: t, clientY: n } = e.touches[0];
|
|
70
|
+
if (e.touches.length > 1) {
|
|
71
|
+
let r = e.touches[1], i = r.clientX, a = r.clientY;
|
|
72
|
+
t = (t + i) / 2, n = (n + a) / 2;
|
|
73
|
+
}
|
|
74
|
+
return {
|
|
75
|
+
clientX: t,
|
|
76
|
+
clientY: n
|
|
77
|
+
};
|
|
78
|
+
}
|
|
79
|
+
let t = e.changedTouches[0];
|
|
80
|
+
return {
|
|
81
|
+
clientX: t.clientX,
|
|
82
|
+
clientY: t.clientY
|
|
83
|
+
};
|
|
84
|
+
}, c = (e) => new Proxy(e, { get(e, t, n) {
|
|
85
|
+
let r = Reflect.get(e, t, n);
|
|
86
|
+
return r === void 0 ? (console.warn(`[Homag Intelligence Callbacks] Method '${String(t)}' is not implemented. Executing a no-op.`), (...e) => void 0) : r;
|
|
87
|
+
} }), l = (e, t, n) => e >= n.left && e <= n.right && t >= n.top && t <= n.bottom, u = (e, t, n, r, i, a) => {
|
|
88
|
+
let o = !1;
|
|
89
|
+
n && (o = a ? l(e, t, {
|
|
90
|
+
left: a.left + n.x,
|
|
91
|
+
right: a.left + n.x + n.width,
|
|
92
|
+
top: a.top + n.y,
|
|
93
|
+
bottom: a.top + n.y + n.height
|
|
94
|
+
}) : l(e, t, {
|
|
95
|
+
left: n.x,
|
|
96
|
+
right: n.x + n.width,
|
|
97
|
+
top: n.y,
|
|
98
|
+
bottom: n.y + n.height
|
|
99
|
+
}));
|
|
100
|
+
let s = !1;
|
|
101
|
+
r && (s = a ? l(e, t, {
|
|
102
|
+
left: a.left + r.x,
|
|
103
|
+
right: a.left + r.x + r.width,
|
|
104
|
+
top: a.top + r.y,
|
|
105
|
+
bottom: a.top + r.y + r.height
|
|
106
|
+
}) : l(e, t, {
|
|
107
|
+
left: r.x,
|
|
108
|
+
right: r.x + r.width,
|
|
109
|
+
top: r.y,
|
|
110
|
+
bottom: r.y + r.height
|
|
111
|
+
}));
|
|
112
|
+
let c = !1;
|
|
113
|
+
return i && (c = a ? l(e, t, {
|
|
114
|
+
left: a.left + i.x,
|
|
115
|
+
right: a.left + i.x + i.width,
|
|
116
|
+
top: a.top + i.y,
|
|
117
|
+
bottom: a.top + i.y + i.height
|
|
118
|
+
}) : l(e, t, {
|
|
119
|
+
left: i.x,
|
|
120
|
+
right: i.x + i.width,
|
|
121
|
+
top: i.y,
|
|
122
|
+
bottom: i.y + i.height
|
|
123
|
+
})), o && !s && !c;
|
|
124
|
+
};
|
|
125
|
+
//#endregion
|
|
126
|
+
export { u as a, a as i, o as n, t as o, r, c as t };
|
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
var e, t = class {
|
|
2
|
+
_computedStyleCache = /* @__PURE__ */ new Map();
|
|
3
|
+
_maxLifetime = 16;
|
|
4
|
+
_cacheCleanInterval = null;
|
|
5
|
+
constructor(e = 16) {
|
|
6
|
+
this._maxLifetime = e;
|
|
7
|
+
}
|
|
8
|
+
get(e) {
|
|
9
|
+
let t = this._computedStyleCache.get(e), n = Date.now();
|
|
10
|
+
if (t && n - t.updated < this._maxLifetime) return t.style;
|
|
11
|
+
let r = getComputedStyle(e);
|
|
12
|
+
return this._computedStyleCache.set(e, {
|
|
13
|
+
style: r,
|
|
14
|
+
updated: n
|
|
15
|
+
}), this._cacheCleanInterval ||= setInterval(() => this._cleanUpCache, Math.max(1e3 * this._maxLifetime, 5e3)), r;
|
|
16
|
+
}
|
|
17
|
+
_cleanUpCache() {
|
|
18
|
+
let e = Date.now();
|
|
19
|
+
for (let [t, { updated: n }] of this._computedStyleCache.entries()) e - n >= this._maxLifetime && this._computedStyleCache.delete(t);
|
|
20
|
+
this._computedStyleCache.size === 0 && this._cacheCleanInterval && (clearInterval(this._cacheCleanInterval), this._cacheCleanInterval = null);
|
|
21
|
+
}
|
|
22
|
+
}, n = (e) => window.TouchEvent && e instanceof window.TouchEvent, r = (n) => (e ||= new t(), e.get(n)), i = (e, t, n) => {
|
|
23
|
+
let i = parseFloat(e), a = window.devicePixelRatio || 1;
|
|
24
|
+
if (t === "px") return i;
|
|
25
|
+
if (t === "%") return i / 100 * (n === document.documentElement ? window.innerWidth : n.offsetWidth);
|
|
26
|
+
if (t === "rem") return i * parseFloat(r(document.documentElement).fontSize);
|
|
27
|
+
if (t === "em") return i * parseFloat(r(n).fontSize);
|
|
28
|
+
if (t === "vh" || t === "vw" || t === "vmin" || t === "vmax") return i / 100 * {
|
|
29
|
+
vh: window.innerHeight,
|
|
30
|
+
vw: window.innerWidth,
|
|
31
|
+
vmin: Math.min(window.innerWidth, window.innerHeight),
|
|
32
|
+
vmax: Math.max(window.innerWidth, window.innerHeight)
|
|
33
|
+
}[t];
|
|
34
|
+
let o = {
|
|
35
|
+
cm: 37.7952755906,
|
|
36
|
+
mm: 3.77952755906,
|
|
37
|
+
in: 96
|
|
38
|
+
};
|
|
39
|
+
return t in o ? i * o[t] * a : 0;
|
|
40
|
+
}, a = (e, t, n = {
|
|
41
|
+
x: 0,
|
|
42
|
+
y: 0
|
|
43
|
+
}) => {
|
|
44
|
+
let a = e.getBoundingClientRect(), s = r(e).transform, c = 0, l = 0;
|
|
45
|
+
if (s !== "none") {
|
|
46
|
+
let t = s.match(/translate\(\s*([-+]?\d*\.?\d+|\d+)(px|%)?,?\s*([-+]?\d*\.?\d+|\d+)?(px|%)?\s*\)/);
|
|
47
|
+
t && (c = i(t[1], t[2], e), l = i(t[3], t[4], e));
|
|
48
|
+
}
|
|
49
|
+
let { clientX: u, clientY: d } = o(t, n);
|
|
50
|
+
return {
|
|
51
|
+
x: u - a.left - c + e.scrollLeft,
|
|
52
|
+
y: d - a.top - l + e.scrollTop
|
|
53
|
+
};
|
|
54
|
+
}, o = (e, t = null) => {
|
|
55
|
+
let { clientX: r, clientY: i } = n(e) ? s(e) : e;
|
|
56
|
+
return {
|
|
57
|
+
clientX: r > 0 ? r : t ? t.x : r,
|
|
58
|
+
clientY: i > 0 ? i : t ? t.y : i
|
|
59
|
+
};
|
|
60
|
+
}, s = (e) => {
|
|
61
|
+
if (e.touches.length) {
|
|
62
|
+
let { clientX: t, clientY: n } = e.touches[0];
|
|
63
|
+
if (e.touches.length > 1) {
|
|
64
|
+
let r = e.touches[1];
|
|
65
|
+
t = (t + r.clientX) / 2, n = (n + r.clientY) / 2;
|
|
66
|
+
}
|
|
67
|
+
return {
|
|
68
|
+
clientX: t,
|
|
69
|
+
clientY: n
|
|
70
|
+
};
|
|
71
|
+
}
|
|
72
|
+
let t = e.changedTouches[0];
|
|
73
|
+
return {
|
|
74
|
+
clientX: t.clientX,
|
|
75
|
+
clientY: t.clientY
|
|
76
|
+
};
|
|
77
|
+
}, c = (e) => new Proxy(e, { get(e, t, n) {
|
|
78
|
+
let r = Reflect.get(e, t, n);
|
|
79
|
+
return r === void 0 ? (...e) => {} : r;
|
|
80
|
+
} }), l = (e, t, n) => e >= n.left && e <= n.right && t >= n.top && t <= n.bottom, u = (e, t, n, r, i, a) => {
|
|
81
|
+
let o = !1;
|
|
82
|
+
n && (o = l(e, t, a ? {
|
|
83
|
+
left: a.left + n.x,
|
|
84
|
+
right: a.left + n.x + n.width,
|
|
85
|
+
top: a.top + n.y,
|
|
86
|
+
bottom: a.top + n.y + n.height
|
|
87
|
+
} : {
|
|
88
|
+
left: n.x,
|
|
89
|
+
right: n.x + n.width,
|
|
90
|
+
top: n.y,
|
|
91
|
+
bottom: n.y + n.height
|
|
92
|
+
}));
|
|
93
|
+
let s = !1;
|
|
94
|
+
r && (s = l(e, t, a ? {
|
|
95
|
+
left: a.left + r.x,
|
|
96
|
+
right: a.left + r.x + r.width,
|
|
97
|
+
top: a.top + r.y,
|
|
98
|
+
bottom: a.top + r.y + r.height
|
|
99
|
+
} : {
|
|
100
|
+
left: r.x,
|
|
101
|
+
right: r.x + r.width,
|
|
102
|
+
top: r.y,
|
|
103
|
+
bottom: r.y + r.height
|
|
104
|
+
}));
|
|
105
|
+
let c = !1;
|
|
106
|
+
return i && (c = l(e, t, a ? {
|
|
107
|
+
left: a.left + i.x,
|
|
108
|
+
right: a.left + i.x + i.width,
|
|
109
|
+
top: a.top + i.y,
|
|
110
|
+
bottom: a.top + i.y + i.height
|
|
111
|
+
} : {
|
|
112
|
+
left: i.x,
|
|
113
|
+
right: i.x + i.width,
|
|
114
|
+
top: i.y,
|
|
115
|
+
bottom: i.y + i.height
|
|
116
|
+
})), o && !s && !c;
|
|
117
|
+
};
|
|
118
|
+
export { u as a, a as i, o as n, n as o, r, c as t };
|
package/browser-BhHw2H1M.mjs
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
const n=["language","browserLanguage","userLanguage","systemLanguage"],e=(n,e=!0)=>!n||n.length<2?"en":e?n.substring(0,2):n,g=(g=null,a=!1)=>{const r=window.navigator;if(g)return e(g,!a);if(Array.isArray(r.languages)&&r.languages.length>0)return e(r.languages[0],!a);for(let g=0,t=n.length;g<t;g++){const t=r[n[g]];if(t)return e(t,!a)}return"en"};export{g};
|
package/browser-CUgD7zyH.mjs
DELETED
|
@@ -1,21 +0,0 @@
|
|
|
1
|
-
const u = [
|
|
2
|
-
"language",
|
|
3
|
-
"browserLanguage",
|
|
4
|
-
"userLanguage",
|
|
5
|
-
"systemLanguage"
|
|
6
|
-
], a = (e, n = !0) => !e || e.length < 2 ? "en" : n ? e.substring(0, 2) : e, o = (e = null, n = !1) => {
|
|
7
|
-
const r = window.navigator;
|
|
8
|
-
if (e)
|
|
9
|
-
return a(e, !n);
|
|
10
|
-
if (Array.isArray(r.languages) && r.languages.length > 0)
|
|
11
|
-
return a(r.languages[0], !n);
|
|
12
|
-
for (let t = 0, s = u.length; t < s; t++) {
|
|
13
|
-
const g = r[u[t]];
|
|
14
|
-
if (g)
|
|
15
|
-
return a(g, !n);
|
|
16
|
-
}
|
|
17
|
-
return "en";
|
|
18
|
-
};
|
|
19
|
-
export {
|
|
20
|
-
o as g
|
|
21
|
-
};
|