@myop/sdk 0.3.32 → 0.3.33
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/dist/bundled-declarations.d.ts +135 -48
- package/dist/cjs/_IframeSDK.c7a53057.min.js +1 -0
- package/dist/cjs/{_IframeSDK.8ce25264.js → _IframeSDK.e5b2bc49.js} +201 -28
- package/dist/cjs/_IframeSDK.e5b2bc49.js.map +7 -0
- package/dist/cjs/_MyopHelpers.95610381.js.map +2 -2
- package/dist/cjs/{_MyopHelpers.172384f4.min.js → _MyopHelpers.ca1b3a3c.min.js} +1 -1
- package/dist/cjs/_WebComponentSDK.3a72ed95.min.js +1 -0
- package/dist/cjs/{_WebComponentSDK.1aa213d9.js → _WebComponentSDK.a7e660ab.js} +201 -28
- package/dist/cjs/_WebComponentSDK.a7e660ab.js.map +7 -0
- package/dist/cjs/_hostSDK.0529d5ed.min.js +1 -0
- package/dist/cjs/{_hostSDK.c7ca0fae.js → _hostSDK.1905850e.js} +201 -28
- package/dist/cjs/_hostSDK.1905850e.js.map +7 -0
- package/dist/cjs/myop_sdk.js +11 -11
- package/dist/cjs/myop_sdk.js.map +1 -1
- package/dist/cjs/myop_sdk.min.js +1 -1
- package/dist/cjs-bundled/myop_sdk.bundled.js +203 -29
- package/dist/cjs-bundled/myop_sdk.bundled.js.map +3 -3
- package/dist/cjs-bundled/myop_sdk.bundled.min.js +1 -1
- package/dist/module/Iframe/index.js +259 -29
- package/dist/module/Iframe/index.js.map +2 -2
- package/dist/module/SDK.js +260 -29
- package/dist/module/SDK.js.map +3 -3
- package/dist/module/common/index.d.ts +26 -0
- package/dist/module/common/index.js +1 -1
- package/dist/module/common/index.js.map +2 -2
- package/dist/module/embeddedSDK.js +1 -1
- package/dist/module/helpers/index.js +1 -1
- package/dist/module/helpers/index.js.map +2 -2
- package/dist/module/host/components/myopExtractedWebComponent.d.ts +1 -0
- package/dist/module/host/components/myopIframeComponent.d.ts +17 -0
- package/dist/module/host/embeddedSDK.js +1 -1
- package/dist/module/host/hostSDK.d.ts +15 -0
- package/dist/module/host/index.d.ts +1 -1
- package/dist/module/host/index.js +259 -29
- package/dist/module/host/index.js.map +2 -2
- package/dist/module/host/loaders/HTMLComponentLoader.d.ts +29 -1
- package/dist/module/webcomponent/index.js +259 -29
- package/dist/module/webcomponent/index.js.map +2 -2
- package/package.json +1 -1
- package/dist/cjs/_IframeSDK.07df88d3.min.js +0 -1
- package/dist/cjs/_IframeSDK.8ce25264.js.map +0 -7
- package/dist/cjs/_WebComponentSDK.1aa213d9.js.map +0 -7
- package/dist/cjs/_WebComponentSDK.92468fac.min.js +0 -1
- package/dist/cjs/_hostSDK.c7ca0fae.js.map +0 -7
- package/dist/cjs/_hostSDK.dc198afa.min.js +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
var $t=Object.defineProperty,wn=Object.defineProperties;var Sn=Object.getOwnPropertyDescriptors;var At=Object.getOwnPropertySymbols;var vn=Object.prototype.hasOwnProperty,En=Object.prototype.propertyIsEnumerable;var Ze=(s,n,t)=>n in s?$t(s,n,{enumerable:!0,configurable:!0,writable:!0,value:t}):s[n]=t,C=(s,n)=>{for(var t in n||(n={}))vn.call(n,t)&&Ze(s,t,n[t]);if(At)for(var t of At(n))En.call(n,t)&&Ze(s,t,n[t]);return s},P=(s,n)=>wn(s,Sn(n));var _n=(s,n)=>{for(var t in n)$t(s,t,{get:n[t],enumerable:!0})};var r=(s,n,t)=>Ze(s,typeof n!="symbol"?n+"":n,t);var Ee="__federation__",Kt="onLoad";var _e=(s,n)=>{window[Ee]&&window[Ee][s]&&window[Ee][s][Kt]&&window[Ee][s][Kt]({[s]:n})};var y={InitRequest:"InitRequest",InitResponse:"InitResponse",InitMessage:"InitMessage",DisposeMessage:"DisposeMessage",ChangeTextMessage:"ChangeTextMessage",BindClickMessage:"BindClickMessage",DetectMyopRefsMessage:"DetectMyopRefsMessage",ExecuteScriptMessage:"ExecuteScriptMessage",AddEventListenerMessage:"AddEventListenerMessage",SetAttributeMessage:"SetAttributeMessage",CreateRefComponentMessage:"CreateRefComponentMessage",EnvelopedMessage:"EnvelopedMessage",GetElementValueMessage:"GetElementValueMessage",GetAttributeMessage:"GetAttributeMessage",SetInnerHtml:"SetInnerHtml",ExecuteComponentMethod:"ExecuteComponentMethod",SetMutationObserverMessage:"SetMutationObserverMessage",SetResizeObserverMessage:"SetResizeObserverMessage",CleanupMessage:"CleanupMessage",In:{DetectedMyopRefsMessage:"DetectedMyopRefsMessage",ClickReplayMessage:"ClickReplayMessage",ExecuteScriptReplyMessage:"ExecuteScriptReplyMessage",EventListenerCallbackMessage:"EventListenerCallbackMessage",ElementValueReplayMessage:"ElementValueReplayMessage",GetAttributeReplayMessage:"GetAttributeReplayMessage",RefComponentCreatedMessage:"RefComponentCreatedMessage",EnvelopedMessage:"EnvelopedMessage",MutationObserverMessage:"MutationObserverMessage",CleanupReplayMessage:"CleanupReplayMessage",ResizeObserverMessage:"ResizeObserverMessage"}};var Te={};_n(Te,{AddEventListenerMessage:()=>st,BaseMyopMessage:()=>h,BindClickMessage:()=>nt,ChangeTextMessage:()=>ot,CleanupMessage:()=>Me,CleanupReplayMessage:()=>Ce,ClickReplayMessage:()=>de,CreateRefComponentMessage:()=>ge,CustomRefMessage:()=>V,DetectMyopRefsMessage:()=>pt,DetectedMyopRefsMessage:()=>he,DisposeMessage:()=>Ie,ElementValueReplayMessage:()=>me,EnvelopedMessage:()=>ye,EventListenerCallbackMessage:()=>le,ExecuteComponentMethod:()=>R,ExecuteScriptMessage:()=>_,ExecuteScriptReplyMessage:()=>ce,GetAttributeMessage:()=>dt,GetAttributeReplayMessage:()=>ct,GetElementValueMessage:()=>rt,InitMessage:()=>te,InitRequest:()=>ue,InitResponse:()=>fe,MessageDirection:()=>v,MutationObserverMessage:()=>mt,MyopBindMessage:()=>w,MyopBindReplayMessage:()=>x,MyopElementMessage:()=>tt,Ref:()=>W,RefComponentCreatedMessage:()=>ne,ResizeObserverMessage:()=>ut,SetAttributeMessage:()=>it,SetInnerHtml:()=>at,SetMutationObserverMessage:()=>lt,SetResizeObserverMessage:()=>ft,stripFunction:()=>Ut});var E=()=>"10000000-1000-4000-8000-100000000000".replace(/[018]/g,s=>(+s^crypto.getRandomValues(new Uint8Array(1))[0]&15>>+s/4).toString(16));var Tn=s=>{let n=[...s].map(t=>t.toString(16).padStart(2,"0")).join("");return[n.slice(0,8),n.slice(8,12),n.slice(12,16),n.slice(16,20),n.slice(20)].join("-")};var Rn=s=>{let n=s.replace(/-/g,"+").replace(/_/g,"/");for(;n.length%4;)n+="=";let t=atob(n);return Uint8Array.from(t,e=>e.charCodeAt(0))};var et=s=>{let n=Rn(s);if(n.length%16!==0)throw new Error("Invalid input length");let t=[];for(let e=0;e<n.length;e+=16)t.push(Tn(n.slice(e,e+16)));return t};var Wt=s=>new Promise(n=>setTimeout(n,s));var v=class{};r(v,"down","down"),r(v,"up","up");var h=class{constructor(){r(this,"id",E());r(this,"myop",!0);r(this,"content");r(this,"source");r(this,"destination");r(this,"route");r(this,"ref");r(this,"direction");r(this,"cleanable",!1)}static create(...n){return new this(...n)}isTypeof(n){return n.messageType===this.messageType}},tt=class extends h{constructor(t){super();this.ref=t}},x=class extends h{constructor(t){super();this.replayToHandler=t}},w=class extends h{constructor(t){super();this.handler=t;r(this,"handlerUniqueId",E())}},W=class s{constructor(n,t){this.refConfig=n;this.component=t;r(this,"myop",!0);r(this,"__nonProxied");this.__nonProxied=P(C({},this),{component:null})}static create(n,t,e){let o=t;return o||(o={id:"",name:"",description:"",selectorType:"id-attribute",selector:n,behavior:{type:"code"}}),new s(o,e)}};var Ft="ClickReplayMessage",nt=class extends w{constructor(t,e){super(e);this.ref=t;r(this,"replyMessageKey",Ft);r(this,"messageType","BindClickMessage");r(this,"cleanable",!0)}},de=class extends x{constructor(){super(...arguments);r(this,"messageType",Ft)}};var ot=class extends h{constructor(t,e){super();this.ref=t;r(this,"messageType","ChangeTextMessage");this.content=e}};var Nt="ExecuteScriptReplyMessage",kn=/(?:function\s*\w*\s*\([^)]*\)\s*\{([\s\S]*?)\}|(\([^)]*\)\s*=>\s*\{([\s\S]*?)\}))\s*$/,Hn=/\(\s*[^)]+\s*\)\s*=>\s*(.+)/,Ut=s=>{let n=s.match(kn);if(n)return n[1]||n[3];{let t=s.match(Hn);if(t)return t[1].trim()}},_=class extends w{constructor(t,e=()=>{},o){super(e);this.scriptInputs=o;r(this,"replyMessageKey",Nt);r(this,"messageType","ExecuteScriptMessage");r(this,"script","");this.script=t.toString(),this.content=t.toString(),this.content=Ut(this.content)}};r(_,"replierKey","send"),r(_,"completeStreamKey","completeStream");var ce=class extends x{constructor(t,e){super(t);this.replayToHandler=t;this.content=e;r(this,"messageType",Nt)}};var V=class extends _{constructor(t,e,o=()=>{}){super(({rootRef:i,elementId:a,_script:p,__scriptInputs:d})=>{let c=(i.shadowRoot||i.container).querySelectorAll("[myop-id='".concat(a,"']"));return c.length?(d.ref=c[0],new Function("return (".concat(p,")(...arguments)"))(d)):null},o);this.scriptInputs=e;this.scriptInputs=P(C({},e),{_script:t.toString()})}};var qt="EventListenerCallbackMessage",st=class extends w{constructor(t,e,o){super(o);this.ref=t;this.type=e;this.handler=o;r(this,"replyMessageKey",qt);r(this,"messageType","AddEventListenerMessage");r(this,"cleanable",!0);r(this,"serializableSkeleton",!1)}withSerializableSkeleton(t){return this.serializableSkeleton=t,this}},le=class extends x{constructor(t,e){super(t);this.replayToHandler=t;this.e=e;r(this,"messageType",qt);this.content={e}}};var it=class extends h{constructor(t,e,o){super();this.ref=t;this.name=e;this.value=o;r(this,"messageType","SetAttributeMessage")}};var Vt="ElementValueReplayMessage",rt=class extends w{constructor(t,e){super(e);this.ref=t;r(this,"replyMessageKey",Vt);r(this,"messageType","GetElementValueMessage")}},me=class extends x{constructor(t){super();this.content=t;r(this,"messageType",Vt)}};var at=class extends h{constructor(t,e){super();this.ref=t;r(this,"messageType","SetInnerHtml");this.content=e}};var te=class extends h{constructor(t){super();r(this,"messageType","InitMessage");this.content={id:t}}isTypeof(t){return t.messageType===this.messageType}},fe=class extends te{constructor(){super(...arguments);r(this,"messageType","InitResponse")}},ue=class extends h{constructor(){super(...arguments);r(this,"messageType","InitRequest")}};var jt="RefComponentCreatedMessage",ge=class extends w{constructor(t,e,o,i){super(i);this.refConfig=t;this.nestedComponentConfig=e;this.options=o;r(this,"replyMessageKey",jt);r(this,"messageType","CreateRefComponentMessage")}},ne=class extends x{constructor(t,e,o){super(t);this.replayToHandler=t;this.nestedRefs=e;this.failed=o;r(this,"messageType",jt)}};var ye=class extends h{constructor(t,e){super();this.destination=t;this.message=e;r(this,"messageType","EnvelopedMessage");let o=e;this.route=[t,...o.route?o.route:[]]}};var Gt="DetectedMyopRefsMessage",pt=class extends w{constructor(){super(...arguments);r(this,"messageType","DetectMyopRefsMessage");r(this,"replyMessageKey",Gt)}},he=class extends x{constructor(t,e){super(t);this.replayToHandler=t;r(this,"messageType",Gt);this.content=e}isTypeof(t){return t.messageType===this.messageType}};var Yt="GetAttributeReplayMessage",dt=class extends w{constructor(t,e,o){super(o);this.ref=t;this.name=e;r(this,"replyMessageKey",Yt);r(this,"messageType","GetAttributeMessage")}},ct=class extends x{constructor(t){super();this.content=t;r(this,"messageType",Yt)}};var R=class extends h{constructor(t){super();this.method=t;r(this,"messageType","ExecuteComponentMethod")}};var lt=class extends h{constructor(){super(...arguments);r(this,"messageType","SetMutationObserverMessage")}},mt=class extends h{constructor(){super(...arguments);r(this,"messageType","MutationObserverMessage")}};var Qt="CleanupReplayMessage",Me=class extends w{constructor(t,e){super(e);this.cleanupForMessageId=t;r(this,"replyMessageKey",Qt);r(this,"messageType","CleanupMessage")}},Ce=class extends x{constructor(t){super();this.customCleanup=t;r(this,"messageType",Qt)}};var Ie=class extends h{constructor(){super(...arguments);r(this,"messageType","DisposeMessage")}};var ft=class extends h{constructor(){super(...arguments);r(this,"cleanable",!0);r(this,"messageType","SetResizeObserverMessage")}},ut=class extends h{constructor(){super(...arguments);r(this,"messageType","ResizeObserverMessage")}};var D=class{constructor(n,t,e){this.componentDefinition=n;this.container=t;r(this,"id","");r(this,"messageHandlers",{});r(this,"element");r(this,"_markedForDisposed",!1);r(this,"bind",(n,t)=>{this.messageHandlers[n]||(this.messageHandlers[n]=[]),this.messageHandlers[n].includes(t)||this.messageHandlers[n].push(t)});r(this,"bindWhen",(n,t,e)=>{if(!e)throw new Error("can't use component.bindWhen without an handler");this.messageHandlers[n]||(this.messageHandlers[n]=[]);let o=this.messageHandlers[n],i=a=>t(a)?(e(a),!0):!1;return o.push(i),()=>{let a=o.indexOf(i);a>-1&&o.splice(a,1)}});r(this,"setInitiated",()=>{this.isInitiated=!0,this._whenInitiatedResolve&&this._whenInitiatedResolve()});r(this,"isInitiated",!1);r(this,"_whenInitiatedResolve");r(this,"_whenInitiatedReject");r(this,"_whenInitiated",new Promise((n,t)=>{this._whenInitiatedResolve=n,this._whenInitiatedReject=t}));r(this,"initiated",()=>this._whenInitiated);r(this,"props",{});r(this,"refs",{});this.id=(e==null?void 0:e.id)||F.Instance().assignId(n);let o=e!=null&&e.timeout?e==null?void 0:e.timeout:5*1e3;setTimeout(()=>{!this.isInitiated&&this._whenInitiatedReject&&!this._markedForDisposed&&this._whenInitiatedReject("timeout_".concat(o," ").concat(this.id))},o),this.initiated().then(()=>{window.myop.hostSDK.inspected&&this.inspect()})}get markedForDisposed(){return this._markedForDisposed}set markedForDisposed(n){if(this._markedForDisposed)throw new Error("InvalidOperationException: The component is already in the process of being disposed. Dispose operation cannot be performed again until the current disposal process is complete.");this._markedForDisposed=n}onMessageReceived(n){if(n.messageType===y.ExecuteComponentMethod){let e=n;return this[e.method]?this[e.method](e.content):console.log("method not found ".concat(e.method," on component"),this),!0}let t=this.messageHandlers[n.messageType];if(t&&t.length){let e=!1;return t.forEach(o=>{e=e||o(n)}),e}return!1}sendCleanupMessage(n){n.source=this.id,n.destination=this.id,n.direction=v.down;let t=this.bindWhen(n.replyMessageKey,o=>o.replayToHandler===n.handlerUniqueId,o=>{n.handler(o),t()}),e=n.handler;delete n.handler,this.send(n),n.handler=e}send(n){n.source||(n.source=this.id),n.destination||(n.destination=this.id),n.direction=v.down;let t;if(n.handler){let e=n;t=this.bindWhen(e.replyMessageKey,o=>o.replayToHandler===e.handlerUniqueId,e.handler),delete n.handler}return n.ref&&(n.ref=n.ref.__nonProxied||n.ref),n.cleanable?()=>{this.sendCleanupMessage(new Me(n.id,e=>{})),t&&t()}:()=>{}}dispose(){if(this.markedForDisposed=!0,!this.isInitiated)return;console.log("disposing component",this.id),this.send(new Ie);let n=this.messageHandlers.onDispose;n&&n.forEach(t=>{t(null)}),this.messageHandlers={},this.id+="_disposed",this.isInitiated=!1}};var Re=class{constructor(n,t,e,o,i){this.myopId=n;this.htmlTagName=t;this.BoundingRect=e;this.offsetTop=o;this.offsetLeft=i;r(this,"type","MyopElementRef")}};var Jt=async s=>{if(typeof s=="function")s();else if(s instanceof Promise){let n=await s;typeof n=="function"&&n()}},gt=class{constructor(n){this.messageToHost=n}},ke=class extends gt{constructor(t,e){super(t);this.messageToHost=t;this.context=e}};var yt=class{constructor(n,t){this.id=n;this.context=t;r(this,"send",n=>{})}},He=class{constructor(){r(this,"messageToHandleAfterInit",[]);r(this,"components",{});r(this,"alwaysPassEnvelopesToHost",!1);r(this,"messageCleanupCache",{})}handleIncomeMessages(n){let t=n.data?n.data:n.detail;if(!(!t||!t.myop)){let e=t;if(e.direction!==v.down)return;if(e.messageType===y.DisposeMessage){e.destination&&delete this.components[e.destination];return}if(e.messageType===y.InitMessage){let o=e.content.id;if(this.components[o])return;this.components[o]=new yt(o),this.messageToHost(new fe(o));return}if(e.messageType===y.EnvelopedMessage){let o=e,i=o.message;if(e=i,this.alwaysPassEnvelopesToHost||this.components[e.destination]){let a=myop.hostSDK.components.find(d=>d.id===i.destination);if(a){a.send(i);return}let p=myop.hostSDK.components.find(d=>d.id===o.destination);if(p){p.send(i);return}}else return}if(e.messageType){if(e.messageType===y.CleanupMessage){let i=e,a=this.messageCleanupCache[i.cleanupForMessageId],p=new Ce(!!a);p.destination=e.destination,a?(delete this.messageCleanupCache[i.cleanupForMessageId],Jt(a).then(()=>{this.messageToHost(p,i)}).catch(()=>{})):this.messageToHost(p,i);return}let o=!1;this.supportedHandlers.forEach(i=>{if(i.messageType===e.messageType){o=!0;let a=i.executor(e);if(e.cleanable&&a&&(this.messageCleanupCache[e.id]=a),a&&!e.cleanable)throw new Error("Cleanup handler generated for non-cleanable message. \nmessageType - ".concat(e.messageType,", handler executor was - ").concat(i.executor,"\n\nPlease review the message definition object & message handler.\nTo ensure cleanup properly set 'cleanable' true at message definition and return IMessageExecutorCleanup from your handlers."));if(!a&&e.cleanable)throw new Error("No cleanup handler generated for a cleanable message. \nmessageType - ".concat(e.messageType,", handler executor was - ").concat(i.executor,"\n\nPlease review the message definition object & message handler.\nTo ensure cleanup properly set 'cleanable' true at message definition and return IMessageExecutorCleanup from your handlers."))}})}else console.log("unsupported message type")}}};var O={IframeLoader:"IframeLoader",WebComponentLoader:"WebComponentLoader",HTMLLoader:"HTMLLoader",MinimizedLoader:"MinimizedLoader"};var j={open:"open",closed:"closed",none:"none",localFrame:"localFrame"};var se={message:"message",code:"code"},oe=class{};r(oe,"code","code"),r(oe,"component","component");var G={Segmented:"Segmented",Dedicated:"Dedicated",Default:"Default"},Be={Segment:"Segment",Promo:"Promo",AB:"AB"},De=class{constructor(n,t){this.container=n;this.shadowRoot=t;r(this,"getRootDiv",()=>(this.shadowRoot||this.container).querySelector("div"));r(this,"getRoot",()=>this.shadowRoot||this.container)}};var ht=s=>s!==Object(s),Dn=s=>typeof s=="function",Mt=s=>{if(ht(s))return!0;if(Dn(s)||Object.getPrototypeOf(s))return!1;for(let n in s){let t=s[n];if(typeof t=="object"){if(!Mt(t))return!1}else{if(ht(t))continue;return!1}}return!0},z=(s,n={},t=!0,e=new WeakMap)=>{if(ht(s))return s;if(Array.isArray(s)){if(e.has(s))return e.get(s);let o=[];e.set(s,o);for(let i=0;i<s.length;i++){let a=s[i];o[i]=z(a,n,t,e)}return o}if(s!==null&&typeof s=="object"){if(e.has(s))return e.get(s);let o={};e.set(s,o);for(let i in s){let a=typeof n=="boolean"?n:n[i];a&&(a===!0?(t?s[i]!==void 0:s[i])&&(o[i]=z(s[i],!0,t,e)):typeof a=="object"&&(o[i]=z(s[i],a,t,e)))}return o}return{}};var Xt={notSerializableRefCall:(s,n)=>{throw new Error("\nThe input provided to '".concat(s.toString(),"' is not serializable. Serialization is required to ensure that the data can be safely transferred to the skin implementation. \nThe following types of data are considered non-serializable and cannot be processed:\n\n- Functions\n- DOM elements\n- Class instances\n- Circular references\n- Symbols\n- BigInt values\n\nIn the following execution we detected :\n~~~~~~~~\n").concat(n," \n~~~~~~~~\nas not serializable.\n\nTo resolve this issue, please ensure that all inputs passed to '").concat(s.toString(),"' are in a serializable format.\nThis typically includes primitive types (strings, numbers, booleans), arrays, and plain objects. \nIf you need to include complex data types, consider converting them to a serializable structure before passing them to the function.\nOr use Myop message that support it: CustomRefMessage, AddEventListenerMessage or ExecuteScriptMessage.\n\nSuggested Fix:\n1. Remove or replace non-serializable values from your input.\n2. If using objects, ensure they do not contain any functions or circular references.\n3. Convert any class instances to plain objects or JSON-compatible formats.\n4. Use dedicated Myop message.\n\nFor more details on serialization and Myop message examples, refer to https://docs.myop.dev.\n\n"))}};var be=class extends D{constructor(t,e,o){super(t,e.container,o);this.componentDefinition=t;this.parent=e;r(this,"send",t=>{let e=t.handler,o=super.send(t);return this.parent.send(new ye(this.id,t)),t.handler=e,o});r(this,"dispose",()=>{this.isInitiated&&this.send(new R("dispose")),super.dispose()})}hide(){this.send(new R("hide"))}show(){this.send(new R("show"))}inspect(){return this.send(new R("inspect"))}setHeightBasedOnDocumentElement(){this.send(new R("setHeightBasedOnDocumentElement"))}setHeightBasedOnScrollHeight(){this.send(new R("setHeightBasedOnScrollHeight"))}onMessageReceived(t){return super.onMessageReceived(t)}};var Y=class extends D{constructor(t,e,o,i,a,p){super(t,o,p);this.container=o;this.customElement=i;this.tagName=a;r(this,"ctaCleanup");r(this,"_ctaHandler");r(this,"_ctaQueue",[]);r(this,"_ctaListener",t=>{let e=t.detail;e!=null&&e.action&&(this._ctaHandler&&!this.markedForDisposed?this._ctaHandler(e.action,e.payload):this._ctaHandler||this._ctaQueue.push({action:e.action,payload:e.payload}))});r(this,"cleanupInspect",()=>{});r(this,"send",t=>{let e=super.send(t);return console.debug("[MyopExtractedWebComponent] send() called - web components use direct API instead",t),e});r(this,"dispose",()=>{var t;this.ctaCleanup&&this.ctaCleanup(),super.dispose(),(t=this.customElement.parentNode)==null||t.removeChild(this.customElement)});this.element=i,this.customElement.addEventListener("myop-cta",this._ctaListener),this.ctaCleanup=()=>this.customElement.removeEventListener("myop-cta",this._ctaListener),this.setInitiated()}inspect(){return this.cleanupInspect=ie(this.id,"MyopExtractedWebComponent",0,this.container,this.customElement,this.componentDefinition),this.cleanupInspect}hide(){this.customElement.style.opacity="0",this.customElement.style.position="absolute",this.customElement.style.pointerEvents="none",this.customElement.style.visibility="hidden",this.customElement.style.height="0",this.customElement.style.width="0"}show(){this.customElement.style.opacity="1",this.customElement.style.position="unset",this.customElement.style.pointerEvents="all",this.customElement.style.visibility="visible",this.customElement.style.height="",this.customElement.style.width=""}initWithData(t){typeof this.customElement.myop_init_interface=="function"&&this.customElement.myop_init_interface(t)}getData(){if(typeof this.customElement.myop_init_interface=="function")return this.customElement.myop_init_interface()}setCtaHandler(t){if(this._ctaHandler=t,this._ctaQueue.length>0){let e=[...this._ctaQueue];this._ctaQueue=[],e.forEach(o=>{this.markedForDisposed||t(o.action,o.payload)})}}};var Bn=(s,n,t)=>{let e=document.createElement("a");return e.textContent=s,e.style.position="relative",e.style.padding="0 5px",e.style.fontSize="14px",e.style.top="0",e.style.top="".concat(n,"px"),e.style.transform="translateX(-50%)",e.target="_blank",e.href="https://dashboard.myop.dev/dashboard/component/".concat(t.id),e},ie=(s,n,t,e,o,i)=>{let a=Bn("".concat(i.name," : ").concat(n),t,i);return e.insertBefore(a,o),o.style.border="1px solid #007BFF",o.style.display="block",()=>{o.style.border="unset",e.removeChild(a)}},Zt=(s,n,t)=>s?!1:(console.error("Error: Undefined Prop\n\nIt looks like you've tried to use a prop that hasn't been defined.\nPlease check the prop name for any typos or ensure that it is properly defined in the component's prop list.\n\n"+"Prop Name: ".concat(n,"\n")+"Component: ".concat(t.componentDefinition.name,", ID: ").concat(t.componentDefinition.id,"\n\n")+"For more information, refer to the component page https://dashboard.myop.dev/dashboard/component/".concat(t.componentDefinition.id," or consult the developer guide.")),!0),en=(s,n,t)=>{console.error("Error: Code Prop Not Supported\n\nCurrently, code props are only supported in local frame components.\n\u26A0\uFE0F This is a work in progress feature \u2014 code props will be supported in upcoming versions.\n\nIn the meantime, you can use message props.\n\n"+"Prop Name: ".concat(n,"\n")+"Component: ".concat(t.componentDefinition.name,", ID: ").concat(t.componentDefinition.id,"\n\n")+"For more information, refer to the component page https://dashboard.myop.dev/dashboard/component/".concat(t.componentDefinition.id," or consult the developer guide."))},tn=(s,n,t)=>{let e=n.reduce((i,a)=>P(C({},i),{[a.name]:C({},a)}),{}),o={get:(i,a)=>{let p=e[a];if(Zt(p,a,s))return!1;if(p.behavior.type===se.code){if(s instanceof Y)return(p.behavior.remap||a)==="myop_init_interface"?m=>{if(m===void 0)return s.getData();s.initWithData(m)}:void 0;if(s instanceof A&&s.isolated)return(p.behavior.remap||a)==="myop_init_interface"?m=>{if(m===void 0)return s.getData();s.initWithData(m)}:void 0;if(t.loader.type===O.HTMLLoader&&t.loader.shadowRootMode===j.localFrame){let c=p.behavior;return s.element.contentWindow[c.remap||a]}return en(p,a,s),!1}return p.mode==="output"?new Promise(d=>{let c=[];p.behavior.ref&&c.push(W.create(p.behavior.ref)),c.push(u=>{d(u)}),p.behavior.params&&c.push(...p.behavior.params);let m=Te[p.behavior.message];s.send(new m(...c))}):null},set:(i,a,p)=>{let d=e[a];if(Zt(d,a,s))return!1;if(d.behavior.type===se.code){if(s instanceof Y){let m=d.behavior.remap||a;if(m==="myop_cta_handler")return s.setCtaHandler(p),!0;if(m==="myop_init_interface")return s.initWithData(p),!0}if(s instanceof A&&s.isolated){let m=d.behavior.remap||a;if(m==="myop_cta_handler")return s.setCtaHandler(p),!0;if(m==="myop_init_interface")return s.initWithData(p),!0}if(t.loader.type===O.HTMLLoader&&t.loader.shadowRootMode===j.localFrame){let m=d.behavior,u=s.element.contentWindow,g=m.remap||a;if(u[g]=p,g==="myop_cta_handler"&&u.__myop_cta_queue){let f=u.__myop_cta_queue;u.__myop_cta_queue=null,f.forEach(l=>{s.markedForDisposed||p(l.action,l.payload)})}return!0}return en(d,a,s),!1}else if(d.mode==="input")if(d.behavior.type==="message"){let c=[];d.behavior.ref&&c.push(W.create(d.behavior.ref)),c.push(p),d.behavior.params&&c.push(...d.behavior.params);let m=Te[d.behavior.message];return s.send(new m(...c)),!0}else throw new Error("Error: Unsupported Behavior\n\nThe 'behavior' field provided is not supported.\n"+"Component: ".concat(s.componentDefinition.name,", ID: ").concat(s.componentDefinition.id,"\n\n")+"Prop Name: ".concat(a,"\n")+"Behavior Field: ".concat(d.behavior.type,"\n\n")+"Check the documentation for valid behavior options.");return!1}};return s.props={},s.props=new Proxy(s.props,o),s},Ln=(s,n)=>new Proxy(s,{get(t,e){return t[e]?t[e]:(...i)=>new Promise(a=>{i.forEach(p=>{Mt(p)||Xt.notSerializableRefCall(e,p)}),n.send(new V(({ref:p,propName:d,functionArgs:c,makeSerializable:m})=>{if(p){let u=p[d];return m(typeof u=="function"?p[d](...c):u,!0)}return null},{elementId:t.refConfig.selector,propName:e,functionArgs:i},p=>{a(p.content)}))})},set(t,e,o){return n.send(new V(({ref:i,propName:a,propValue:p})=>{i&&(i[a]=p)},{elementId:t.refConfig.selector,propValue:o,propName:e},i=>{})),!0}}),Ct=async(s,n,t,e)=>{let o=s.component;if(!o)throw new Error("cant createRefComponent with detached ref");return new Promise(async(i,a)=>{let p=new be(n.type,o,e);t.push(p),await o.initiated();let d=setTimeout(()=>{a("timeout")},5e3);o.send(new ge(s.refConfig,n,P(C({},e||{}),{id:p.id,_hasParent:!0}),async c=>{if(clearTimeout(d),c.failed){a("CreateRefComponentMessage failed");return}let m=t.find(u=>u.id==p.id);if(m!==p){o.refs[s.refConfig.name]=m,i(m);return}else p.setInitiated(),o.refs[s.refConfig.name]=p;c.nestedRefs.forEach(u=>{let g=n.instance.resolvedNestedComponents.find(l=>l.type.id===u.componentDefinitionId).type,f=new be(g,p);f.setInitiated(),p.refs[u.refName]=f,t.push(f)});try{await It(p,n,t,!0),o.setHeightBasedOnScrollHeight&&o.setHeightBasedOnScrollHeight(),i(p)}catch(u){a(u)}}))})},It=async(s,n,t,e=!1)=>{s.refs||(s.refs={});let o=Object.values(s.componentDefinition.refs).map(i=>new Promise(async(a,p)=>{var d;if(i.behavior.type==oe.component){if(e){a();return}let c=i.behavior.componentId;c||(c=i.behavior.instance.componentId);let m=(d=n.instance.resolvedNestedComponents)==null?void 0:d.find(g=>g.type.id===c);if(!m)throw new Error("componentConfig provided without nestedComponentConfig check the config object");let u=W.create("",i,s);try{let g=await Ct(u,m,t);s.refs[i.name]=g,a()}catch(g){p(g)}}else try{let c=W.create("",i,s);s.refs[i.name]=Ln(c,s),a()}catch(c){}}));try{await Promise.all(o)}catch(i){throw i}};var A=class extends D{constructor(t,e,o,i,a){super(t,o,a);this.componentConfig=t;this.container=o;this.IframeElement=i;r(this,"_autoSizeCleanup");r(this,"_autoSizeOptions");r(this,"_autoSizeUpdate");r(this,"isolated",!1);r(this,"_lastData");r(this,"_ctaHandler");r(this,"_ctaQueue",[]);r(this,"_isoMsgHandler");r(this,"_isoSizeOpts");r(this,"_isoAutoSize",!1);r(this,"_isoLastSize");r(this,"sizeMeta");r(this,"cleanupInspect");r(this,"setHeightBasedOnDocumentElement",()=>{let t=this.send(new _(()=>window.document.documentElement.scrollHeight,e=>{this.IframeElement.style.height="".concat(e.content,"px"),t()}))});r(this,"observeSizeBasedOnDocumentElement",()=>this.send(new _(({send:e})=>{let{height:o,width:i}=document.documentElement.getBoundingClientRect(),a=new ResizeObserver(()=>{let{height:p,width:d}=document.documentElement.getBoundingClientRect();e({height:p,width:d})});return a.observe(document.documentElement),a.observe(document.body),{height:o,width:i}},e=>{this.IframeElement.style.width="".concat(e.content.width,"px"),this.IframeElement.style.height="".concat(e.content.height,"px")})));r(this,"observeAutoSize",t=>{if(this._autoSizeOptions=t,this.isolated)return this._isoSizeOpts=t,this._isoAutoSize=!0,this._isoLastSize&&this._applyIsoSize(this._isoLastSize.height,this._isoLastSize.width),()=>{this._isoAutoSize=!1,this._isoSizeOpts=void 0};if(this._autoSizeCleanup&&this._autoSizeUpdate)return this._autoSizeUpdate(),this._autoSizeCleanup;let e=this.IframeElement,o=e.contentDocument;if(!o)return console.warn("[MyopIframeComponent] Cannot observe auto size: contentDocument not accessible"),()=>{};let i=(f,l,T)=>l!==void 0&&f<l?l:T!==void 0&&f>T?T:f,a=f=>{if(f===void 0)return;if(typeof f=="number")return f;let l=parseFloat(f);return isNaN(l)?void 0:l},p=()=>{var Tt,Rt,kt,Ht,Dt,Bt,Lt,Pt;let f=e.contentDocument;if(!f)return;let l=this._autoSizeOptions,T=a(l==null?void 0:l.minWidth),H=a(l==null?void 0:l.maxWidth),q=a(l==null?void 0:l.minHeight),B=a(l==null?void 0:l.maxHeight),Qe=(Tt=l==null?void 0:l.loaderMinHeight)!=null?Tt:50,Je=((Rt=this.sizeMeta)==null?void 0:Rt.width)==="100%"?"100%":void 0,K=((kt=this.sizeMeta)==null?void 0:kt.height)==="100%"?"100%":void 0,I=(Dt=(Ht=l==null?void 0:l.explicitWidth)!=null?Ht:Je)!=null?Dt:"100%",M=(Bt=l==null?void 0:l.explicitHeight)!=null?Bt:K,S=I!==void 0,J=M!==void 0,X=this.container.getBoundingClientRect(),fn=X.width===0,un=X.height===0||X.height===Qe,Z=(l!=null&&l.forceAutoSize||fn)&&!S,ee=(l!=null&&l.forceAutoSize||un)&&!J;if(!Z&&!ee){e.style.width=typeof I=="number"?"".concat(I,"px"):"100%",e.style.height=typeof M=="number"?"".concat(M,"px"):"100%",(Lt=l==null?void 0:l.onSizeChange)==null||Lt.call(l,{width:typeof I=="number"?I:void 0,height:typeof M=="number"?M:void 0,autoSizingWidth:!1,autoSizingHeight:!1});return}let gn=e.style.transition,L=this.container,yn=L.style.transition;e.style.transition="none",L.style.transition="none";let xt=e.getBoundingClientRect().height,wt=e.getBoundingClientRect().width,St=Math.ceil(Math.max(f.documentElement.scrollHeight,f.body.scrollHeight,f.body.getBoundingClientRect().height)),vt=Math.ceil(Math.max(f.documentElement.scrollWidth,f.body.scrollWidth,f.body.getBoundingClientRect().width)),ae=vt,pe=St,hn=ee&&St>xt+1,Mn=Z&&vt>wt+1,we=ee&&!hn,Se=Z&&!Mn;if(we||Se){let bn=L.style.minHeight,xn=L.style.minWidth;we&&(L.style.minHeight="".concat(xt,"px")),Se&&(L.style.minWidth="".concat(wt,"px")),we&&(e.style.height="0px"),Se&&(e.style.width="0px"),ae=Math.ceil(Math.max(f.documentElement.scrollWidth,f.body.scrollWidth,f.body.getBoundingClientRect().width)),pe=Math.ceil(Math.max(f.documentElement.scrollHeight,f.body.scrollHeight,f.body.getBoundingClientRect().height));let Ot=we&&pe<2,zt=Se&&ae<2;if(Ot||zt){let ve=f.createElement("style");ve.id="__myop_measure";let Xe=[];Ot&&Xe.push("height: auto !important","min-height: 0 !important","max-height: none !important"),zt&&Xe.push("width: auto !important","min-width: 0 !important","max-width: none !important"),ve.textContent="*, *::before, *::after { ".concat(Xe.join("; "),"; flex-basis: auto !important; flex-grow: 0 !important; }"),f.head.appendChild(ve),ae=Math.ceil(Math.max(f.documentElement.scrollWidth,f.body.scrollWidth,f.body.getBoundingClientRect().width)),pe=Math.ceil(Math.max(f.documentElement.scrollHeight,f.body.scrollHeight,f.body.getBoundingClientRect().height)),ve.remove()}L.style.minHeight=bn,L.style.minWidth=xn}let Et=i(ae,T,H),_t=i(pe,q,B);Z?e.style.width="".concat(Et,"px"):e.style.width=typeof I=="number"?"".concat(I,"px"):"100%",ee?e.style.height="".concat(_t,"px"):e.style.height=typeof M=="number"?"".concat(M,"px"):"100%",e.offsetHeight,e.style.transition=gn,L.style.transition=yn;let Cn=Z&&H!==void 0&&ae>H,In=ee&&B!==void 0&&pe>B;f.documentElement.style.overflowX=Cn?"auto":"",f.documentElement.style.overflowY=In?"auto":"",(Pt=l==null?void 0:l.onSizeChange)==null||Pt.call(l,{width:Et,height:_t,autoSizingWidth:Z,autoSizingHeight:ee})};p(),this._autoSizeUpdate=p;let d,c=()=>{d===void 0&&(d=requestAnimationFrame(()=>{d=void 0,p()}))},m=new ResizeObserver(()=>c());m.observe(o.body),m.observe(o.documentElement);let u=new MutationObserver(()=>c());u.observe(o.body,{childList:!0,subtree:!0,characterData:!0,attributes:!0});let g=()=>{m.disconnect(),u.disconnect(),d!==void 0&&(cancelAnimationFrame(d),d=void 0),this._autoSizeUpdate=void 0,this._autoSizeCleanup=void 0};return this._autoSizeCleanup=g,g});r(this,"setSizeBasedOnDocumentElement",()=>{let t=this.send(new _(()=>{let{height:e,width:o}=document.documentElement.getBoundingClientRect();return{height:e,width:o}},e=>{this.IframeElement.style.width="".concat(e.content.width,"px"),this.IframeElement.style.height="".concat(e.content.height,"px"),t()}))});r(this,"setHeightBasedOnScrollHeight",()=>{let t=this.send(new _(()=>{let o=0;return o++,o--,Math.max(Math.max(window.document.body.clientHeight,window.document.body.scrollHeight),window.document.body.offsetHeight)+o+"px"},e=>{this.IframeElement.style.height=e.content,t()}))});r(this,"send",t=>{var i,a;let e=C({},t);if(e.messageType===y.ExecuteComponentMethod)return this[e.method](),()=>{};e.direction=v.down;let o=super.send(e);return(a=(i=this.IframeElement)==null?void 0:i.contentWindow)==null||a.postMessage(e,"*"),o});r(this,"dispose",()=>{this._autoSizeCleanup&&(this._autoSizeCleanup(),this._autoSizeCleanup=void 0),this._isoMsgHandler&&(window.removeEventListener("message",this._isoMsgHandler),this._isoMsgHandler=void 0),this.cleanupInspect&&this.cleanupInspect(),super.dispose(),this.IframeElement.parentNode.removeChild(this.IframeElement)});this.element=this.IframeElement,this._lastData=a==null?void 0:a.data}enableIsolation(){this.isolated=!0,this.setInitiated(),this._isoMsgHandler=t=>{if(t.source!==this.IframeElement.contentWindow)return;let e=t.data;!e||e.__myop!==!0||(e.type==="myop:cta"?this._ctaHandler&&!this.markedForDisposed?this._ctaHandler(e.action,e.payload):this._ctaHandler||this._ctaQueue.push({action:e.action,payload:e.payload}):e.type==="myop:size"&&this._applyIsoSize(e.height,e.width))},window.addEventListener("message",this._isoMsgHandler)}initWithData(t){var e,o;this._lastData=t,(o=(e=this.IframeElement)==null?void 0:e.contentWindow)==null||o.postMessage({__myop:!0,type:"myop:init",data:t},"*")}getData(){return this._lastData}setCtaHandler(t){if(this._ctaHandler=t,this._ctaQueue.length>0){let e=[...this._ctaQueue];this._ctaQueue=[],e.forEach(o=>{this.markedForDisposed||t(o.action,o.payload)})}}_applyIsoSize(t,e){var c;if(!t||Number.isNaN(t)||(this._isoLastSize={height:t,width:e},!this._isoAutoSize))return;let o=this._isoSizeOpts,i=m=>m===void 0?void 0:typeof m=="number"?m:isNaN(parseFloat(m))?void 0:parseFloat(m),a=i(o==null?void 0:o.minHeight),p=i(o==null?void 0:o.maxHeight),d=t;a!==void 0&&d<a&&(d=a),p!==void 0&&d>p&&(d=p),this.IframeElement.style.position="relative",this.IframeElement.style.inset="auto",this.IframeElement.style.height=d+"px",this.IframeElement.style.width="100%",(c=o==null?void 0:o.onSizeChange)==null||c.call(o,{width:e!=null?e:this.IframeElement.clientWidth,height:d,autoSizingWidth:!1,autoSizingHeight:!0})}inspect(){return this.cleanupInspect?this.cleanupInspect:(this.cleanupInspect=ie(this.id,"MyopIframeComponent",10,this.container,this.IframeElement,this.componentDefinition),()=>{this.cleanupInspect(),this.cleanupInspect=void 0})}hide(){this.IframeElement.style.opacity="0",this.IframeElement.style.position="absolute",this.IframeElement.style.pointerEvents="none",this.IframeElement.style.visibility="hidden"}show(){this.IframeElement.style.opacity="1",this.IframeElement.style.position="unset",this.IframeElement.style.pointerEvents="all",this.IframeElement.style.visibility="visible"}onMessageReceived(t){return t.messageType===y.In.MutationObserverMessage||t.messageType===y.In.ResizeObserverMessage?(this.setHeightBasedOnScrollHeight(),!0):super.onMessageReceived(t)}};var N=class{constructor(){r(this,"appendChild",(n,t,e)=>{var o;if(e!=null&&e.relative){if(e.relative.direction==="before")return n.insertBefore(t,e.relative.child);if(e.relative.direction==="after"){let i=(o=e.relative.child)==null?void 0:o.nextSibling;return n.insertBefore(t,i||null)}}else return n.appendChild(t)})}};var Pn=(s,n,t)=>{let e=new URL(s);return e.searchParams.append(n,t),e.toString()},Le=class extends N{constructor(){super(...arguments);r(this,"type",O.IframeLoader);r(this,"load",async(t,e,o,i)=>{let a,p=e.loader;if((o==null?void 0:o.nodeName)==="IFRAME")console.log("needs to load into an exsisting Iframe...",p.url,o),a=o,a.src=p.url;else{let d=E(),c="myop-comp-".concat(d);a=document.createElement("iframe"),a.id=c;let m="\n padding: 0;\n margin: 0;\n position: absolute;\n inset: 0;\n height: ".concat(p.autoHeight||!p.height?"100%":p.height,";\n width: 100%;\n overflow: hidden;\n border: none;\n opacity: ").concat(i!=null&&i.hidden?"0":"1",";\n pointer-events: ").concat(i!=null&&i.hidden?"none":"all",";\n ");a.style.cssText=m,i!=null&&i.elementAttributes&&Object.entries(i.elementAttributes).forEach(([g,f])=>{f===""||f===null||f===void 0?a.setAttribute(g,""):a.setAttribute(g,String(f))});let u=e.loader.url;i!=null&&i._hasParent&&(u=Pn(u,"_myop-comp",d)),a.src=u,o.querySelector('[id^="myop-comp-"]')||(o.innerHTML=""),a=this.appendChild(o,a,i)}return new A(t,e,o,a,i)})}};var Pe={webcomponent_message_key:"myop_webcomponent_message"};var re=class extends D{constructor(t,e,o,i,a){super(t,o,a);this.container=o;this.customElement=i;r(this,"cleanupInspect",()=>{});r(this,"send",t=>{let e=C({},t),o=super.send(e),i=new CustomEvent(Pe.webcomponent_message_key,{detail:e});try{this.customElement.dispatchEvent(i)}catch(a){console.log("error while trying to dispatchEvent",a)}return o});r(this,"dispose",()=>{var t;super.dispose(),(t=this.customElement.parentNode)==null||t.removeChild(this.customElement)});this.element=i}inspect(){return this.cleanupInspect=ie(this.id,"MyopWebComponent",0,this.container,this.customElement,this.componentDefinition),this.cleanupInspect}hide(){this.customElement.style.opacity="0",this.customElement.style.position="absolute",this.customElement.style.pointerEvents="none",this.customElement.style.visibility="hidden",this.customElement.style.height="0",this.customElement.style.width="0"}show(){this.customElement.style.opacity="1",this.customElement.style.position="unset",this.customElement.style.pointerEvents="all",this.customElement.style.visibility="visible",this.customElement.style.height="",this.customElement.style.width=""}};var bt={},Oe=class extends N{constructor(){super(...arguments);r(this,"type",O.WebComponentLoader);r(this,"load",async(t,e,o,i)=>{let a=e.loader;bt[a.url]?console.log("Module alreday loaded or in loading process"):bt[a.url]=new Promise((c,m)=>{let u=a.url,g=document.createElement("script");g.type="module",g.src=u,g.onload=()=>{c()},g.onerror=()=>{m()},document.head.appendChild(g)}),await bt[a.url],await Wt(1);let p="myop-comp-".concat(E()),d=document.createElement(a.tag);return o.querySelector('[id^="myop-comp-"]')||(o.innerHTML=""),d.id=p,i!=null&&i.hidden&&(d.style.opacity="0",d.style.position="absolute",d.style.height="0",d.style.width="0",d.style.pointerEvents="none",d.style.visibility="hidden"),i!=null&&i._environment&&(d._myopEnvironment=i==null?void 0:i._environment),this.appendChild(o,d,i),new re(t,e,o,d,i)})}};var nn="0.3.33";var b=class extends ke{constructor(t,e){super(t);this.context=e;r(this,"executor",t=>{if(t.destination){let e=t.destination;if(this.context[e].context){let o=(i,a)=>{this.messageToHost(P(C({},i),{source:t.destination?t.destination:t.source,destination:t.source?t.source:t.destination}),a)};return this.innerExecutor(t,this.context[e].context,o)}else debugger}else debugger})}};var $={id:"myop-id"};var k=(s,n)=>n.querySelectorAll("[".concat($.id,"='").concat(s.refConfig.selector,"']"));var ze=class extends b{constructor(){super(...arguments);r(this,"messageType",y.BindClickMessage);r(this,"innerExecutor",(t,e,o)=>{let i=k(t.ref,e.shadowRoot),a=[];return i.forEach(p=>{let d=()=>{o(new de(t.handlerUniqueId))};p.addEventListener("click",d),a.push(()=>{p.removeEventListener("click",d)})}),()=>{a.forEach(p=>p())}})}};var Ae=class extends b{constructor(){super(...arguments);r(this,"messageType",y.ChangeTextMessage);r(this,"innerExecutor",(t,e)=>{k(t.ref,e.shadowRoot).forEach(i=>{i.textContent=t.content})})}};var $e=class extends De{constructor(t,e){super(t,e);this.container=t;this.shadowRoot=e}};var Ke=class extends b{constructor(){super(...arguments);r(this,"innerExecutor",(t,e)=>{let o=e.shadowRoot.querySelectorAll("[".concat($.id,"]")),i=[];o.forEach(a=>{let p=a.getAttribute($.id);p&&i.push(new Re(p,a.tagName,a.getBoundingClientRect(),a.offsetTop,a.offsetLeft))}),this.messageToHost(new he(t.handlerUniqueId,i))});r(this,"messageType",y.DetectMyopRefsMessage)}};var We=class extends b{constructor(){super(...arguments);r(this,"messageType",y.SetAttributeMessage);r(this,"innerExecutor",(t,e)=>{k(t.ref,e.shadowRoot).forEach(i=>{i.setAttribute(t.name,t.value)})})}};var Fe=class extends b{constructor(){super(...arguments);r(this,"messageType",y.AddEventListenerMessage);r(this,"innerExecutor",(t,e,o)=>{let i=k(t.ref,e.shadowRoot),a=[];return i.forEach(p=>{let d=c=>{o(new le(t.handlerUniqueId,z(c,t.serializableSkeleton)))};p.addEventListener(t.type,d),a.push(()=>{p.removeEventListener(t.type,d)})}),()=>{a.forEach(p=>p())}})}};var Ne=class extends b{constructor(){super(...arguments);r(this,"messageType",y.CreateRefComponentMessage);r(this,"innerExecutor",(t,e,o)=>{(async()=>{let a=e.shadowRoot.querySelectorAll("[".concat($.id,"='").concat(t.refConfig.selector,"']"));if(a.length===1){let p=F.Instance(),d=p.components.find(g=>g.id===t.options.id);d&&d.dispose();let c=p.components.indexOf(d);c!==-1&&p.components.splice(c,1);let m=await p.loadComponent(t.nestedComponentConfig,a.item(0),t.options),u=[];Object.keys(m.refs).forEach(g=>{let f=m.refs[g];f=f.__nonProxied||f,f.componentDefinition&&u.push({refName:g,componentDefinitionId:f.componentDefinition.id})}),o(new ne(t.handlerUniqueId,u))}else{console.error("CreateRefComponentMessageHandler - DOM element not found"),this.messageToHost(new ne(t.handlerUniqueId,[],!0));debugger}})().then()})}};var on=(s,n,t)=>{let e=s.scriptInputs?s.scriptInputs:{};e.makeSerializable=z,e.send=n,e.rootRef=t,e.__scriptInputs=e;let i=new Function("return (".concat(s.script,")(...arguments)"))(e);n(i)};var Ue=class extends b{constructor(){super(...arguments);r(this,"messageType",y.ExecuteScriptMessage);r(this,"innerExecutor",(t,e,o)=>{on(t,a=>{o(new ce(t.handlerUniqueId,a))},e)})}};var sn=s=>{if(!s)return null;if(s.tagName==="FORM"){let n=new FormData(s),t={formData:{},unmappedData:[]},e=s.querySelectorAll("input, select, textarea"),o=-1;return e.forEach(i=>{if(typeof i.value=="string"){let a=i.getAttribute($.id),p=i.getAttribute("name"),d={id:i.id,name:p,value:sn(i),required:i.required,validity:z(i.validity,!0),myopId:a};p?t.formData[p]?t.formData[p].value?t.unmappedData.push(d):(t.unmappedData.push(t.formData[p]),t.formData[p]=d):t.formData[p]=d:t.unmappedData.push(d)}}),t}return s.type==="checkbox"||s.type==="radio"?s.checked?s.value:null:s.tagName==="INPUT"||s.tagName==="TEXTAREA"||s.tagName==="SELECT"?s.value:s.isContentEditable?s.innerText||s.textContent:null},qe=class extends b{constructor(){super(...arguments);r(this,"messageType",y.GetElementValueMessage);r(this,"innerExecutor",(t,e,o)=>{k(t.ref,e.shadowRoot).forEach(a=>{o(new me(sn(a)),t)})})}};var Ve=class extends b{constructor(){super(...arguments);r(this,"messageType",y.SetInnerHtml);r(this,"innerExecutor",(t,e)=>{k(t.ref,e.shadowRoot).forEach(i=>{i.innerHTML=t.content})})}};var xe=class extends He{constructor(){super(...arguments);r(this,"alwaysPassEnvelopesToHost",!0);r(this,"connectedCallback",(t,e)=>{t.addEventListener(Pe.webcomponent_message_key,o=>{let i=o.data?o.data:o.detail;if(!i||!i.myop){debugger;throw new Error("recvied webcomponent_message with wrong type")}else{let a=i;if(this.handleIncomeMessages(o),a.messageType===y.InitMessage){let p=a.content.id;this.components[p].context=new $e(t,e)}}}),setTimeout(()=>{this.messageToHost(new ue)},1)});r(this,"messageToHost",(t,e)=>{t.direction=v.up,!t.replayToHandler&&(e!=null&&e.handlerUniqueId)&&(t.replayToHandler=e.handlerUniqueId),window.myop.hostSDK.send(t)});r(this,"supportedHandlers",[new Ae(this.messageToHost,this.components),new Ve(this.messageToHost,this.components),new ze(this.messageToHost,this.components),new Ke(this.messageToHost,this.components),new We(this.messageToHost,this.components),new Fe(this.messageToHost,this.components),new Ue(this.messageToHost,this.components),new qe(this.messageToHost,this.components),new Ne(this.messageToHost,this.components)]);r(this,"init",()=>{})}};_e("WebComponentSDK",xe);var rn="";var On="<!-- myop-web-component -->",zn="myop-web-component",pn=new Set,dn=[],je,cn=async()=>(je||(je=new xe,je.init()),je);function An(s,n){return class extends HTMLElement{connectedCallback(){let t=n===j.open?"open":"closed",e=this.attachShadow({mode:t});cn().then(o=>{o.connectedCallback(this,e),e.innerHTML=s})}}}var $n=(s,n,t)=>{customElements.define(s,An(n,t)),console.log("define('".concat(s,"') was called, web component ready to use"))},Kn=s=>s.replace(/([a-z])([A-Z])/g,"$1-$2").replace(/(\d+)/g,"-$1").toLowerCase(),Wn=s=>(s=Kn(s),s.replace(/_/g,"-"));var Ge=class extends N{constructor(){super(...arguments);r(this,"type",O.HTMLLoader);r(this,"load",async(t,e,o,i)=>{let a=e.loader,p=this.isMyopWebComponent(a.HTML),{mode:d,isolate:c}=await this.resolveRenderMode(t,e,a,p,i);if(d===!1)throw new Error('[Myop] Rendering blocked by render policy for component "'.concat(t.id,'"'));if(p){if(d!=="webComponent")throw new Error('[Myop] Web-component rendering denied by render policy for component "'.concat(t.id,'"'));return this.loadExtractedWebComponent(t,e,o,a.HTML,i)}let m="myop-comp-".concat(E()),u;if(a.shadowRootMode===j.localFrame){let g=E(),f="myop-comp-".concat(g),l=document.createElement("iframe");l.id=f,c&&l.setAttribute("sandbox","allow-scripts allow-forms allow-popups"),l.style.cssText="\n display: block;\n padding: 0;\n margin: 0;\n position: absolute;\n inset: 0;\n overflow: hidden;\n border: none;\n opacity: ".concat(i!=null&&i.hidden?"0":"1",";\n width: 100%;\n height: 100%;\n pointer-events: ").concat(i!=null&&i.hidden?"none":"all",";\n "),o.querySelector('[id^="myop-comp-"]')||(o.innerHTML=""),l=this.appendChild(o,l,i);let T=[],H=c?{open(){},writeln(I){T.push(I)},close(){l.srcdoc=T.join("\n")}}:(()=>{let I=l.contentDocument||l.contentWindow.document;return I.open(),I})(),q=null;{let S=new DOMParser().parseFromString(a.HTML,"text/html").querySelector('meta[name="myop:size"]');if(S)try{q=JSON.parse(S.getAttribute("content")||"{}")}catch(J){}}let B=a.HTML;if(i!=null&&i._inspection){let M=new DOMParser().parseFromString(a.HTML,"text/html"),S=M.getElementById("myop_preview");S==null||S.removeAttribute("type");let J=M.implementation.createHTMLDocument();J.body.innerHTML="<script>\n const beforeKeysWindow = new Set(Object.keys(window));\n window.myopState = {\n beforeKeysWindow,\n };\n <\/script>";let X=J.body.firstChild;X&&M.head&&M.head.insertBefore(M.importNode(X,!0),M.head.firstChild),B="<!DOCTYPE html>"+M.documentElement.outerHTML}else if((i==null?void 0:i.data)!==void 0){let M=new DOMParser().parseFromString(a.HTML,"text/html"),S=M.getElementById("myop_preview");S&&(S.remove(),B="<!DOCTYPE html>"+M.documentElement.outerHTML)}if(i!=null&&i.injectCss){let M=new DOMParser().parseFromString(B,"text/html"),S=M.createElement("style");S.setAttribute("data-myop-injected","true"),S.textContent=i.injectCss.replace(/<\s*\/\s*style/gi,"<\\/style"),(M.head||M.documentElement).appendChild(S),B="<!DOCTYPE html>"+M.documentElement.outerHTML}H.writeln(B);let Qe='<script src="'.concat(window.myop.__ROOT_SDK_PUBLIC_URL__,'"><\/script>'),Je="<script>\n window.__federation__.__public_path__ = window.__federation__.__public_path__;\n const __myop_init = async () => {\n const {IframeSDK} = (await window.myop.rootSDK.getIframeModule());\n const sdk = new IframeSDK();\n sdk.init();\n }\n __myop_init().then();\n <\/script>";if(c||H.writeln("".concat(Qe).concat(Je)),!c&&(i==null?void 0:i.data)!==void 0){let I="<script>\n window.__myop_cta_queue = [];\n window.myop_cta_handler = function(action, payload) {\n window.__myop_cta_queue.push({action: action, payload: payload});\n };\n <\/script>",M=JSON.stringify(i.data).replace(/<\/script/gi,"\\u003c/script"),S='<script id="__myop_init_data_script">\n (function() {\n var data = '.concat(M,";\n var scriptEl = document.getElementById('__myop_init_data_script');\n\n var callInitInterface = function(fn) {\n var startTime = performance.now();\n // Mark as pre-injected data call for extension tracking\n window.__myop_init_preinjected = true;\n try {\n fn(data);\n } finally {\n window.__myop_init_preinjected = false;\n }\n var duration = performance.now() - startTime;\n\n // Notify extension via postMessage (init* = pre-injected)\n try {\n window.parent.postMessage({\n type: 'MYOP_PREINJECTED_INIT',\n payload: {\n data: data,\n duration: duration,\n timestamp: Date.now()\n }\n }, '*');\n } catch (e) {}\n\n // Cleanup: remove script tag and stored data\n if (scriptEl && scriptEl.parentNode) {\n scriptEl.parentNode.removeChild(scriptEl);\n }\n delete window.__myop_init_data;\n };\n\n if (typeof window.myop_init_interface === 'function') {\n // Function already exists - call immediately\n callInitInterface(window.myop_init_interface);\n } else {\n // Function not yet defined - store data and watch for definition\n window.__myop_init_data = data;\n\n var _original;\n Object.defineProperty(window, 'myop_init_interface', {\n configurable: true,\n enumerable: true,\n set: function(fn) {\n _original = fn;\n if (window.__myop_init_data !== undefined) {\n var storedData = window.__myop_init_data;\n delete window.__myop_init_data;\n callInitInterface(fn);\n }\n },\n get: function() {\n return _original;\n }\n });\n }\n })();\n <\/script>");H.writeln(I+S)}if(c){let I=(i==null?void 0:i.data)!==void 0?JSON.stringify(i.data).replace(/<\/script/gi,"\\u003c/script"):"undefined";H.writeln(this.buildIsolationBridge(I))}H.close();let K=new A(t,e,o,l,i);return c&&K.enableIsolation(),K.sizeMeta=q,K.initiated().then(()=>{if((i==null?void 0:i.autoSize)===!1)return;let I=!1;K.observeAutoSize({forceAutoSize:!0,onSizeChange:()=>{!I&&!(i!=null&&i.hidden)&&(I=!0,K.show())}})}),K}if(a.shadowRootMode===j.none){let g=document.createElement("template");g.innerHTML=a.HTML,u=g.content.firstElementChild,cn().then(f=>{f.connectedCallback(u,u)})}else{let g=Wn(t.name+e.id);dn.includes(g)||($n(g,a.HTML,a.shadowRootMode),dn.push(g)),u=document.createElement(g)}return o.querySelector('[id^="myop-comp-"]')||(o.innerHTML=""),u.id=m,i!=null&&i.hidden&&(u.style.opacity="0",u.style.position="absolute",u.style.height="0",u.style.width="0",u.style.pointerEvents="none",u.style.visibility="hidden"),this.appendChild(o,u,i),new re(t,e,o,u,i)})}isMyopWebComponent(t){return t.trimStart().startsWith(On)}async resolveRenderMode(t,e,o,i,a){var m,u,g,f;let p=i?"webComponent":o.isolation||a!=null&&a.isolation?"isolatedIframe":"iframe",d=(f=a==null?void 0:a.renderPolicy)!=null?f:(g=(u=(m=window==null?void 0:window.myop)==null?void 0:m.hostSDK)==null?void 0:u.getRenderPolicy)==null?void 0:g.call(u),c=d?await d({componentDefinition:t,skin:e,requestedMode:p,isWebComponent:i}):p;return{mode:c,isolate:c==="isolatedIframe"}}buildIsolationBridge(t){return"<script>\n (function () {\n var __initial = ".concat(t,";\n var __pending;\n // data-out (cta)\n window.myop_cta_handler = function (action, payload) {\n try { parent.postMessage({ __myop: true, type: 'myop:cta', action: action, payload: payload }, '*'); } catch (e) {}\n };\n function callInit(data) {\n if (typeof window.myop_init_interface === 'function') { window.myop_init_interface(data); return true; }\n return false;\n }\n // data-in (init updates)\n window.addEventListener('message', function (e) {\n var d = e.data;\n if (!d || d.__myop !== true) return;\n if (d.type === 'myop:init') { if (!callInit(d.data)) __pending = d.data; }\n });\n // first render: use a pending update if one arrived, else the baked initial data\n (function flushInitial() {\n var data = (__pending !== undefined) ? __pending : __initial;\n if (data === undefined) return;\n if (callInit(data)) { __pending = undefined; __initial = undefined; }\n else requestAnimationFrame(flushInitial);\n })();\n // resize (report content size)\n function contentHeight() {\n // Measure the BODY (content box). documentElement.scrollHeight includes\n // the iframe viewport \u2014 which we're driving \u2014 so it would report the\n // current frame height, not the content, and never shrink.\n var b = document.body;\n if (b) return Math.max(b.scrollHeight, b.offsetHeight);\n return document.documentElement.scrollHeight;\n }\n function postSize() {\n try {\n parent.postMessage({\n __myop: true, type: 'myop:size',\n height: contentHeight(),\n width: document.documentElement.scrollWidth\n }, '*');\n } catch (e) {}\n }\n // Observe the BODY (reflows with content) \u2014 not documentElement, whose box is\n // the iframe viewport and would feed back into a resize loop. A MutationObserver\n // catches content swaps (e.g. innerHTML re-render) that don't change body's box.\n if (window.ResizeObserver) {\n try { var __ro = new ResizeObserver(postSize); if (document.body) __ro.observe(document.body); } catch (e) {}\n }\n if (window.MutationObserver && document.body) {\n try { new MutationObserver(postSize).observe(document.body, { childList: true, subtree: true, attributes: true, characterData: true }); } catch (e) {}\n }\n window.addEventListener('load', postSize);\n postSize();\n })();\n <\/script>")}extractWebComponentScript(t){let i=new DOMParser().parseFromString(t,"text/html").getElementById(zn);return(i==null?void 0:i.textContent)||null}executeWebComponentScript(t,e){if(pn.has(e)){console.log("[MyopWebComponent] Script already executed for ".concat(e,", skipping"));return}let o=document.createElement("script");o.textContent=t,o.id="myop-extracted-".concat(e),document.head.appendChild(o),pn.add(e),console.log("[MyopWebComponent] Executed web component script: ".concat(e))}async loadExtractedWebComponent(t,e,o,i,a){let p=this.extractWebComponentScript(i);if(!p)throw new Error('[MyopWebComponent] No <script id="myop-web-component"> found in HTML');let d="".concat(t.id,"-").concat(e.id),c=window.__MYOP_TAG_NAME__;this.executeWebComponentScript(p,d);let m=window.__MYOP_TAG_NAME__;if(!m)throw new Error("[MyopWebComponent] Script did not set window.__MYOP_TAG_NAME__");c&&c!==m&&console.warn("[MyopWebComponent] __MYOP_TAG_NAME__ changed from ".concat(c," to ").concat(m));let u="myop-comp-".concat(E()),g=document.createElement(m);g.id=u,a!=null&&a.hidden&&(g.style.opacity="0",g.style.position="absolute",g.style.height="0",g.style.width="0",g.style.pointerEvents="none",g.style.visibility="hidden"),o.querySelector('[id^="myop-comp-"]')||(o.innerHTML=""),this.appendChild(o,g,a);let f=new Y(t,e,o,g,m,a);return(a==null?void 0:a.data)!==void 0&&f.initWithData(a.data),console.log("[MyopWebComponent] Loaded <".concat(m,"> into container")),f}};var Fn=s=>({instance:{id:"auto",componentId:s.componentId,componentName:s.name,skinSelector:{type:"Dedicated",skin:{id:"skin_auto_v2_converted"}}},type:{id:s.id,name:s.name,description:s.description,props:[{id:"in_auto_v2_converted",name:"myop_init_interface",type:"any",behavior:{type:se.code}},{id:"out_auto_v2_converted",name:"myop_cta_handler",type:"any",behavior:{type:se.code}}],refs:[],skins:[{id:"skin_auto_v2_converted",name:"auto_v2_converted",description:"",loader:s.consume_variant[0].loader}],defaultSkin:0},name:s.name}),Ye="__MYOP_CLOUD_REPOSITORY_MAIN__",Nn=()=>{if(typeof window<"u")return window[Ye];if(typeof globalThis<"u")return globalThis[Ye]},Un=s=>{typeof window<"u"&&(window[Ye]=s),typeof globalThis<"u"&&(globalThis[Ye]=s)},U=class U{constructor(n="https://cloud.myop.dev"){this._baseUrl=n;r(this,"variants",{});r(this,"preloadedComponents",{});r(this,"userFlows",{});r(this,"_defaultEnv","production");r(this,"_envExplicitlySet",!1);r(this,"_staticMode",!1);r(this,"_queryParams",{})}static get Main(){let n=Nn();return n||(U._main||(U._main=new U,Un(U._main)),U._main)}enableStaticMode(){this._staticMode=!0}setQueryParams(n){this._queryParams=n}setEnvironment(n){this._defaultEnv=n,this._envExplicitlySet=!0}getDefaultEnvironment(){return this._defaultEnv}isPreloaded(n,t,e){return t!==void 0||e!==void 0?"".concat(n,":").concat(t||this._defaultEnv,":").concat(e?"preview":"live")in this.variants:n in this.preloadedComponents}getPreloadedParams(n){return this.preloadedComponents[n]}async fetchComponentV2(n,t,e){let o=this.preloadedComponents[n],i=t!==void 0||e!==void 0,a,p;if(!i&&o)a=o.env,p=o.preview;else{a=t||this._defaultEnv;let c=t||this._envExplicitlySet;p=e===!0?!0:e===!1?!1:!c}let d="".concat(n,":").concat(a,":").concat(p?"preview":"live");return console.log("[CloudRepository] fetchComponentV2",{componentId:n.slice(0,8)+"...",env:a,usePreview:p,cacheKey:d,cached:d in this.variants}),this.variants[d]||(this.preloadedComponents[n]||(this.preloadedComponents[n]={env:a,preview:p}),this.variants[d]=new Promise(async(c,m)=>{try{let u;if(this._staticMode){let H=p?"preview":a;u="".concat(this._baseUrl,"/components/").concat(n,"/").concat(H,".json");let q=new URLSearchParams(this._queryParams).toString();q&&(u+="?".concat(q))}else u="".concat(this._baseUrl,"/consume?id=").concat(n,"&env=").concat(a),p&&(u+="&preview=true");let g=await fetch(u);if(!g.ok){m(new Error('Failed to load component "'.concat(n,'" (').concat(g.status).concat(this._staticMode?" from ".concat(u):"",")")));return}let l=(await g.json()).item;if(!l){m(new Error('Component "'.concat(n,'" not found')));return}if(!l.consume_variant||!l.consume_variant.length){m(new Error('Component "'.concat(n,'" has no implementation for environment "').concat(a,'"')));return}let T=Fn(l);this.variants[d].resolved=T,c(T)}catch(u){delete this.variants[d],m(u)}})),await this.variants[d]}getResolvedConfig(n,t,e){var c;let o=this.preloadedComponents[n],i=t!==void 0||e!==void 0,a,p;if(!i&&o)a=o.env,p=o.preview;else{a=t||this._defaultEnv;let m=t||this._envExplicitlySet;p=e===!0?!0:e===!1?!1:!m}let d="".concat(n,":").concat(a,":").concat(p?"preview":"live");return((c=this.variants[d])==null?void 0:c.resolved)||null}async fetchComponentV1(n,t){return t?(await this.fetchFlow(t)).components.find(o=>o.type.id===n):(await this.fetchAutoFlow(n)).components[0]}async fetchAutoFlow(n){return this.userFlows[n]||(this.userFlows[n]=new Promise(async(t,e)=>{try{let i=await(await fetch("".concat(this._baseUrl,"/flow?id=").concat(n,"&auto=true"))).json();t(i.item)}catch(o){delete this.userFlows[n],e(o)}})),await this.userFlows[n]}async fetchFlow(n){return this.userFlows[n]||(this.userFlows[n]=new Promise(async(t,e)=>{try{let i=await(await fetch("".concat(this._baseUrl,"/flow?id=").concat(n,"&resolve=components"))).json();t(i.item)}catch(o){delete this.userFlows[n],e(o)}})),await this.userFlows[n]}async fetchComponent(n,t){return this.fetchComponentV1(n,t)}};r(U,"_main",null);var Q=U;var pd=Q.Main;var ln=async s=>{try{let n=new URL(window.location.href),e=new URLSearchParams(n.search).get("myopOverride");if(e){let[o,...i]=et(e);switch(o){case"component":{let[a,p]=i,d=await Q.Main.fetchComponent(a);if(d&&d.type.skins.find(m=>m.id===p))return d.instance.skinSelector={type:G.Dedicated,skin:{id:p}},d}break;default:{let[a,p]=et(e),c=(await Q.Main.fetchFlow(a)).components.find(m=>m.type.id===s.type.id);if(c&&c.instance.skinSelector.type===G.Segmented&&c.instance.resolvedExperiences){let m=c.instance.resolvedExperiences.find(u=>u.id===p);if((m==null?void 0:m.type)===Be.Segment){let u=m,f=c.instance.skinSelector.segments.find(l=>l.segmentId===u.segment.id);if(f)return c.instance.skinSelector=f==null?void 0:f.skinSelector,c}}}break}}}finally{return null}};var mn="https://cdn.myop.dev/sdk/next/myop_sdk.min.js",F=class{constructor(){r(this,"components2init",[]);r(this,"components",[]);r(this,"componentsLoaders",[]);r(this,"_renderPolicy");r(this,"setRenderPolicy",n=>{this._renderPolicy=n});r(this,"getRenderPolicy",()=>this._renderPolicy);r(this,"initiated",!1);r(this,"version",nn);r(this,"type2InstanceCount",{});r(this,"assignId",n=>(this.type2InstanceCount[n.id]||(this.type2InstanceCount[n.id]=0),"".concat(n.id,"_").concat(++this.type2InstanceCount[n.id])));r(this,"inspected",!1);r(this,"inspect",()=>{this.inspected||(this.inspected=!0,this.components.forEach(n=>{n.inspect&&n.inspect()}))});r(this,"incomingMessageHandler",n=>{if(n.origin,document.location.origin,n.data.myop){if(n.data.direction!==v.up&&n.data.messageType!==y.EnvelopedMessage)return;let t=n.data;if(t.messageType===y.InitRequest){this.components2init.forEach(o=>{o.send(new te(o.id))});return}if(t.messageType===y.InitResponse){this.components2init=this.components2init.filter(i=>i.id!==t.content.id);let o=this.components.find(i=>{var a;return i.id===((a=t.content)==null?void 0:a.id)});o==null||o.setInitiated();return}if(t.messageType===y.EnvelopedMessage){let o=t,i=this.components.find(a=>a.id===o.destination);if(i){if(o.direction===v.down){o.message.messageType===R.name?i.onMessageReceived(o.message):(o.message.route=o.route,i.send(o.message));return}}else{let a=this.components.find(p=>p.id===o.message.destination);a&&a.send(o.message)}return}let e=this.components.find(o=>o.id===t.destination);if(!e){window.myop.IframeSDK&&window.myop.IframeSDK.messageToHost(t);return}if(e){if(e.onMessageReceived(t))return;window.myop.IframeSDK&&window.myop.IframeSDK.messageToHost(t)}}});r(this,"send",n=>{let t=new MessageEvent("",{data:n});this.incomingMessageHandler(t)});r(this,"init",n=>{if(this.initiated)throw new Error("hostSDK already initiated");let t=[new Le,new Oe,new Ge];if(this.componentsLoaders=[...t],n){let e={};n.forEach(o=>{let i=new o(this.componentsLoaders);e[i.type]=i}),this.componentsLoaders.forEach(o=>{e[o.type]||(e[o.type]=o)}),this.componentsLoaders=Object.values(e)}window.addEventListener("message",this.incomingMessageHandler,!1),console.log("myop hostSDK initiated",document.location.href),this.initiated=!0});r(this,"_getSkinIdBySkinSelector",async(n,t=[],e)=>{var i;async function o(a,p){for(let d of a)if(await p(d))return d}switch(n.type){case"DedicatedSkin":case G.Dedicated:return((i=n.skin)==null?void 0:i.id)||n.skins[0].id;case G.Segmented:{let p=await o(n.segments,async d=>{if(d.segmentId==="Default")return!0;let c=t.find(f=>f.type===Be.Segment?f.segment.id===d.segmentId:!1);if(!c)throw new Error("experience not found");let u=c.segment,g=(e||{})[u.function];return g?await g():(console.warn("segmentId:".concat(d.segmentId,", ").concat(u.function," function not provided !")),!1)});if(p)return this._getSkinIdBySkinSelector(p.skinSelector,t);debugger}break;default:debugger}return""});r(this,"runSkinSelector",async(n,t)=>{let e=await this._getSkinIdBySkinSelector(n.instance.skinSelector,n.instance.resolvedExperiences,t);return n.type.skins.find(o=>o.id===e)});r(this,"loaderHooks");r(this,"loadComponent",async(n,t,e)=>{var m,u,g,f;if(!t){debugger;throw new Error("no container was found for this component")}let o=await ln(n);o&&(n=o);let i=C(C({},(m=this.loaderHooks)!=null?m:{}),(u=e==null?void 0:e.hooks)!=null?u:{}),a=t;if(a.myop)if(a.component){n=C({},n),n.instance=C({},n.instance);let l=await this.runSkinSelector(n,i);if(!l)throw new Error("runSkinSelector failed to choose skin, check the provided config");return(g=e==null?void 0:e.hooks)!=null&&g.afterSkinSelected&&(l=await e.hooks.afterSkinSelected(C({},l))),n.instance.skinSelector={type:G.Dedicated,skin:l},e&&(e=C({},e),delete e.hooks),await Ct(a,n,this.components,e)}else throw new Error("load component got a detached ref.");t=t;let p=await this.runSkinSelector(n,i);if(!p)throw new Error("runSkinSelector failed to choose skin, check the provided config");(f=e==null?void 0:e.hooks)!=null&&f.afterSkinSelected&&(p=await e.hooks.afterSkinSelected(C({},p)));let d=this.componentsLoaders.find(l=>l.type===p.loader.type);if(!d){debugger;throw new Error('no loader "'.concat(p.loader.type,'" was found for component'))}let c=await d.load(n.type,p,t,e);c.isInitiated||this.components2init.push(c),c.bind("onDispose",()=>(this.components=this.components.filter(l=>l!==c),this.components2init=this.components2init.filter(l=>l!==c),!0)),this.components.push(c),(!e||e.connectProps!==!1)&&(c=tn(c,n.type.props,p));try{await It(c,n,this.components)}catch(l){throw l}return e!=null&&e.skipInit||await c.initiated(),c});r(this,"navigate",async(n,t,e)=>{if(n.parent)throw new Error("Navigating on remote ref components is not implemented yet");if(e!=null&&e.staged){let o=await this.loadComponent(t,n.container,C({hidden:!0,relative:{direction:"after",child:n.element}},e));return e.init&&await e.init(o),o.show(),n.dispose(),o}else{let o=n.element.nextSibling;return n.dispose(),this.loadComponent(t,n.container,C({relative:{direction:"before",child:o}},e))}})}};r(F,"Instance",()=>window.myop.hostSDK);window.myop||(window.myop={__ROOT_SDK_PUBLIC_URL__:mn});if(!window.myop.hostSDK){let s=new F;s.init(),window.myop||(window.myop={__ROOT_SDK_PUBLIC_URL__:mn}),window.myop.hostSDK=s}var qn=window.myop.hostSDK;_e("hostSDK",qn);export{F as HostSDK,qn as hostSDK};
|
|
@@ -1023,6 +1023,19 @@ var MyopExtractedWebComponent = class extends BaseMyopComponent {
|
|
|
1023
1023
|
__publicField(this, "ctaCleanup");
|
|
1024
1024
|
__publicField(this, "_ctaHandler");
|
|
1025
1025
|
__publicField(this, "_ctaQueue", []);
|
|
1026
|
+
// A single 'myop-cta' listener, attached at construction so CTAs a component
|
|
1027
|
+
// dispatches during its first initWithData() render — before the host attaches
|
|
1028
|
+
// a handler — are buffered (and flushed on setCtaHandler), matching the iframe
|
|
1029
|
+
// path's pre-handler CTA queue.
|
|
1030
|
+
__publicField(this, "_ctaListener", (e) => {
|
|
1031
|
+
const detail = e.detail;
|
|
1032
|
+
if (!(detail == null ? void 0 : detail.action)) return;
|
|
1033
|
+
if (this._ctaHandler && !this.markedForDisposed) {
|
|
1034
|
+
this._ctaHandler(detail.action, detail.payload);
|
|
1035
|
+
} else if (!this._ctaHandler) {
|
|
1036
|
+
this._ctaQueue.push({ action: detail.action, payload: detail.payload });
|
|
1037
|
+
}
|
|
1038
|
+
});
|
|
1026
1039
|
__publicField(this, "cleanupInspect", () => {
|
|
1027
1040
|
});
|
|
1028
1041
|
/**
|
|
@@ -1043,6 +1056,8 @@ var MyopExtractedWebComponent = class extends BaseMyopComponent {
|
|
|
1043
1056
|
(_a = this.customElement.parentNode) == null ? void 0 : _a.removeChild(this.customElement);
|
|
1044
1057
|
});
|
|
1045
1058
|
this.element = customElement;
|
|
1059
|
+
this.customElement.addEventListener("myop-cta", this._ctaListener);
|
|
1060
|
+
this.ctaCleanup = () => this.customElement.removeEventListener("myop-cta", this._ctaListener);
|
|
1046
1061
|
this.setInitiated();
|
|
1047
1062
|
}
|
|
1048
1063
|
inspect() {
|
|
@@ -1087,9 +1102,6 @@ var MyopExtractedWebComponent = class extends BaseMyopComponent {
|
|
|
1087
1102
|
* Called via props.myop_cta_handler = handler
|
|
1088
1103
|
*/
|
|
1089
1104
|
setCtaHandler(handler) {
|
|
1090
|
-
if (this.ctaCleanup) {
|
|
1091
|
-
this.ctaCleanup();
|
|
1092
|
-
}
|
|
1093
1105
|
this._ctaHandler = handler;
|
|
1094
1106
|
if (this._ctaQueue.length > 0) {
|
|
1095
1107
|
const queue = [...this._ctaQueue];
|
|
@@ -1100,24 +1112,6 @@ var MyopExtractedWebComponent = class extends BaseMyopComponent {
|
|
|
1100
1112
|
}
|
|
1101
1113
|
});
|
|
1102
1114
|
}
|
|
1103
|
-
const listener = (e) => {
|
|
1104
|
-
var _a;
|
|
1105
|
-
const customEvent = e;
|
|
1106
|
-
if ((_a = customEvent.detail) == null ? void 0 : _a.action) {
|
|
1107
|
-
if (this._ctaHandler && !this.markedForDisposed) {
|
|
1108
|
-
this._ctaHandler(customEvent.detail.action, customEvent.detail.payload);
|
|
1109
|
-
} else if (!this._ctaHandler) {
|
|
1110
|
-
this._ctaQueue.push({
|
|
1111
|
-
action: customEvent.detail.action,
|
|
1112
|
-
payload: customEvent.detail.payload
|
|
1113
|
-
});
|
|
1114
|
-
}
|
|
1115
|
-
}
|
|
1116
|
-
};
|
|
1117
|
-
this.customElement.addEventListener("myop-cta", listener);
|
|
1118
|
-
this.ctaCleanup = () => {
|
|
1119
|
-
this.customElement.removeEventListener("myop-cta", listener);
|
|
1120
|
-
};
|
|
1121
1115
|
}
|
|
1122
1116
|
};
|
|
1123
1117
|
|
|
@@ -1186,6 +1180,17 @@ var connectProps = (component, propsConfig, selectedSkin) => {
|
|
|
1186
1180
|
}
|
|
1187
1181
|
return void 0;
|
|
1188
1182
|
}
|
|
1183
|
+
if (component instanceof MyopIframeComponent && component.isolated) {
|
|
1184
|
+
const typedPropBehavior = propConfig.behavior;
|
|
1185
|
+
const propName = typedPropBehavior.remap || prop;
|
|
1186
|
+
if (propName === "myop_init_interface") {
|
|
1187
|
+
return (data) => {
|
|
1188
|
+
if (data === void 0) return component.getData();
|
|
1189
|
+
component.initWithData(data);
|
|
1190
|
+
};
|
|
1191
|
+
}
|
|
1192
|
+
return void 0;
|
|
1193
|
+
}
|
|
1189
1194
|
if (selectedSkin.loader.type === SkinLoaders.HTMLLoader) {
|
|
1190
1195
|
const typedLoader = selectedSkin.loader;
|
|
1191
1196
|
if (typedLoader.shadowRootMode === ShadowRootModeType.localFrame) {
|
|
@@ -1232,6 +1237,18 @@ var connectProps = (component, propsConfig, selectedSkin) => {
|
|
|
1232
1237
|
return true;
|
|
1233
1238
|
}
|
|
1234
1239
|
}
|
|
1240
|
+
if (component instanceof MyopIframeComponent && component.isolated) {
|
|
1241
|
+
const typedPropBehavior = propConfig.behavior;
|
|
1242
|
+
const propName = typedPropBehavior.remap || prop;
|
|
1243
|
+
if (propName === "myop_cta_handler") {
|
|
1244
|
+
component.setCtaHandler(value);
|
|
1245
|
+
return true;
|
|
1246
|
+
}
|
|
1247
|
+
if (propName === "myop_init_interface") {
|
|
1248
|
+
component.initWithData(value);
|
|
1249
|
+
return true;
|
|
1250
|
+
}
|
|
1251
|
+
}
|
|
1235
1252
|
if (selectedSkin.loader.type === SkinLoaders.HTMLLoader) {
|
|
1236
1253
|
const typedLoader = selectedSkin.loader;
|
|
1237
1254
|
if (typedLoader.shadowRootMode === ShadowRootModeType.localFrame) {
|
|
@@ -1437,6 +1454,7 @@ var connectRefs = async (component, componentConfig, components, withoutRefCompo
|
|
|
1437
1454
|
|
|
1438
1455
|
// src/host/components/myopIframeComponent.ts
|
|
1439
1456
|
var MyopIframeComponent = class extends BaseMyopComponent {
|
|
1457
|
+
// last reported size (for the enable race)
|
|
1440
1458
|
constructor(componentConfig, skin, container, IframeElement, options) {
|
|
1441
1459
|
super(componentConfig, container, options);
|
|
1442
1460
|
this.componentConfig = componentConfig;
|
|
@@ -1445,6 +1463,17 @@ var MyopIframeComponent = class extends BaseMyopComponent {
|
|
|
1445
1463
|
__publicField(this, "_autoSizeCleanup");
|
|
1446
1464
|
__publicField(this, "_autoSizeOptions");
|
|
1447
1465
|
__publicField(this, "_autoSizeUpdate");
|
|
1466
|
+
// ── Isolation (sandboxed cross-origin frame) — postMessage bridge, host side ──
|
|
1467
|
+
__publicField(this, "isolated", false);
|
|
1468
|
+
__publicField(this, "_lastData");
|
|
1469
|
+
// cached last-sent data (sync getData)
|
|
1470
|
+
__publicField(this, "_ctaHandler");
|
|
1471
|
+
__publicField(this, "_ctaQueue", []);
|
|
1472
|
+
__publicField(this, "_isoMsgHandler");
|
|
1473
|
+
__publicField(this, "_isoSizeOpts");
|
|
1474
|
+
__publicField(this, "_isoAutoSize", false);
|
|
1475
|
+
// bridge sizing only when auto-size is on
|
|
1476
|
+
__publicField(this, "_isoLastSize");
|
|
1448
1477
|
__publicField(this, "sizeMeta");
|
|
1449
1478
|
__publicField(this, "cleanupInspect");
|
|
1450
1479
|
__publicField(this, "setHeightBasedOnDocumentElement", () => {
|
|
@@ -1484,6 +1513,15 @@ var MyopIframeComponent = class extends BaseMyopComponent {
|
|
|
1484
1513
|
*/
|
|
1485
1514
|
__publicField(this, "observeAutoSize", (options) => {
|
|
1486
1515
|
this._autoSizeOptions = options;
|
|
1516
|
+
if (this.isolated) {
|
|
1517
|
+
this._isoSizeOpts = options;
|
|
1518
|
+
this._isoAutoSize = true;
|
|
1519
|
+
if (this._isoLastSize) this._applyIsoSize(this._isoLastSize.height, this._isoLastSize.width);
|
|
1520
|
+
return () => {
|
|
1521
|
+
this._isoAutoSize = false;
|
|
1522
|
+
this._isoSizeOpts = void 0;
|
|
1523
|
+
};
|
|
1524
|
+
}
|
|
1487
1525
|
if (this._autoSizeCleanup && this._autoSizeUpdate) {
|
|
1488
1526
|
this._autoSizeUpdate();
|
|
1489
1527
|
return this._autoSizeCleanup;
|
|
@@ -1686,12 +1724,73 @@ var MyopIframeComponent = class extends BaseMyopComponent {
|
|
|
1686
1724
|
this._autoSizeCleanup();
|
|
1687
1725
|
this._autoSizeCleanup = void 0;
|
|
1688
1726
|
}
|
|
1727
|
+
if (this._isoMsgHandler) {
|
|
1728
|
+
window.removeEventListener("message", this._isoMsgHandler);
|
|
1729
|
+
this._isoMsgHandler = void 0;
|
|
1730
|
+
}
|
|
1689
1731
|
if (this.cleanupInspect)
|
|
1690
1732
|
this.cleanupInspect();
|
|
1691
1733
|
super.dispose();
|
|
1692
1734
|
this.IframeElement.parentNode.removeChild(this.IframeElement);
|
|
1693
1735
|
});
|
|
1694
1736
|
this.element = this.IframeElement;
|
|
1737
|
+
this._lastData = options == null ? void 0 : options.data;
|
|
1738
|
+
}
|
|
1739
|
+
// ── Isolation bridge (host side) ─────────────────────────────────────────
|
|
1740
|
+
/** Attach the host-side postMessage listener for a sandboxed frame. */
|
|
1741
|
+
enableIsolation() {
|
|
1742
|
+
this.isolated = true;
|
|
1743
|
+
this.setInitiated();
|
|
1744
|
+
this._isoMsgHandler = (e) => {
|
|
1745
|
+
if (e.source !== this.IframeElement.contentWindow) return;
|
|
1746
|
+
const d = e.data;
|
|
1747
|
+
if (!d || d.__myop !== true) return;
|
|
1748
|
+
if (d.type === "myop:cta") {
|
|
1749
|
+
if (this._ctaHandler && !this.markedForDisposed) this._ctaHandler(d.action, d.payload);
|
|
1750
|
+
else if (!this._ctaHandler) this._ctaQueue.push({ action: d.action, payload: d.payload });
|
|
1751
|
+
} else if (d.type === "myop:size") {
|
|
1752
|
+
this._applyIsoSize(d.height, d.width);
|
|
1753
|
+
}
|
|
1754
|
+
};
|
|
1755
|
+
window.addEventListener("message", this._isoMsgHandler);
|
|
1756
|
+
}
|
|
1757
|
+
/** Data-in — unified with the extracted-WC API. Posts init over the bridge. */
|
|
1758
|
+
initWithData(data) {
|
|
1759
|
+
var _a, _b;
|
|
1760
|
+
this._lastData = data;
|
|
1761
|
+
(_b = (_a = this.IframeElement) == null ? void 0 : _a.contentWindow) == null ? void 0 : _b.postMessage({ __myop: true, type: "myop:init", data }, "*");
|
|
1762
|
+
}
|
|
1763
|
+
/** Data-in getter — returns the last data the host sent (cached, synchronous). */
|
|
1764
|
+
getData() {
|
|
1765
|
+
return this._lastData;
|
|
1766
|
+
}
|
|
1767
|
+
/** Data-out — unified with the extracted-WC API. Flushes CTAs queued pre-handler. */
|
|
1768
|
+
setCtaHandler(handler) {
|
|
1769
|
+
this._ctaHandler = handler;
|
|
1770
|
+
if (this._ctaQueue.length > 0) {
|
|
1771
|
+
const queue = [...this._ctaQueue];
|
|
1772
|
+
this._ctaQueue = [];
|
|
1773
|
+
queue.forEach((item) => {
|
|
1774
|
+
if (!this.markedForDisposed) handler(item.action, item.payload);
|
|
1775
|
+
});
|
|
1776
|
+
}
|
|
1777
|
+
}
|
|
1778
|
+
_applyIsoSize(height, width) {
|
|
1779
|
+
var _a;
|
|
1780
|
+
if (!height || Number.isNaN(height)) return;
|
|
1781
|
+
this._isoLastSize = { height, width };
|
|
1782
|
+
if (!this._isoAutoSize) return;
|
|
1783
|
+
const opts = this._isoSizeOpts;
|
|
1784
|
+
const toNum = (v) => v === void 0 ? void 0 : typeof v === "number" ? v : isNaN(parseFloat(v)) ? void 0 : parseFloat(v);
|
|
1785
|
+
const min = toNum(opts == null ? void 0 : opts.minHeight), max = toNum(opts == null ? void 0 : opts.maxHeight);
|
|
1786
|
+
let h = height;
|
|
1787
|
+
if (min !== void 0 && h < min) h = min;
|
|
1788
|
+
if (max !== void 0 && h > max) h = max;
|
|
1789
|
+
this.IframeElement.style.position = "relative";
|
|
1790
|
+
this.IframeElement.style.inset = "auto";
|
|
1791
|
+
this.IframeElement.style.height = h + "px";
|
|
1792
|
+
this.IframeElement.style.width = "100%";
|
|
1793
|
+
(_a = opts == null ? void 0 : opts.onSizeChange) == null ? void 0 : _a.call(opts, { width: width != null ? width : this.IframeElement.clientWidth, height: h, autoSizingWidth: false, autoSizingHeight: true });
|
|
1695
1794
|
}
|
|
1696
1795
|
inspect() {
|
|
1697
1796
|
if (this.cleanupInspect) {
|
|
@@ -1900,7 +1999,7 @@ var WebcomponentLoader = class extends BaseMyopLoader {
|
|
|
1900
1999
|
};
|
|
1901
2000
|
|
|
1902
2001
|
// version:myop-sdk-version
|
|
1903
|
-
var myop_sdk_version_default = "0.3.
|
|
2002
|
+
var myop_sdk_version_default = "0.3.33";
|
|
1904
2003
|
|
|
1905
2004
|
// src/webcomponent/messageHandlers/BaseWebComponentMessageHandler.ts
|
|
1906
2005
|
var BaseWebComponentMessageHandler = class extends BaseContextMessageHandler {
|
|
@@ -2293,7 +2392,15 @@ var HTMLComponentLoader = class extends BaseMyopLoader {
|
|
|
2293
2392
|
__publicField(this, "type", SkinLoaders.HTMLLoader);
|
|
2294
2393
|
__publicField(this, "load", async (componentDefinition, skin, container, options) => {
|
|
2295
2394
|
const loaderConfig = skin.loader;
|
|
2296
|
-
|
|
2395
|
+
const isWC = this.isMyopWebComponent(loaderConfig.HTML);
|
|
2396
|
+
const { mode, isolate } = await this.resolveRenderMode(componentDefinition, skin, loaderConfig, isWC, options);
|
|
2397
|
+
if (mode === false) {
|
|
2398
|
+
throw new Error('[Myop] Rendering blocked by render policy for component "'.concat(componentDefinition.id, '"'));
|
|
2399
|
+
}
|
|
2400
|
+
if (isWC) {
|
|
2401
|
+
if (mode !== "webComponent") {
|
|
2402
|
+
throw new Error('[Myop] Web-component rendering denied by render policy for component "'.concat(componentDefinition.id, '"'));
|
|
2403
|
+
}
|
|
2297
2404
|
return this.loadExtractedWebComponent(componentDefinition, skin, container, loaderConfig.HTML, options);
|
|
2298
2405
|
}
|
|
2299
2406
|
let domId = "myop-comp-".concat(uuidv4());
|
|
@@ -2303,12 +2410,28 @@ var HTMLComponentLoader = class extends BaseMyopLoader {
|
|
|
2303
2410
|
const domId2 = "myop-comp-".concat(uniqId);
|
|
2304
2411
|
let IframeElement = document.createElement("iframe");
|
|
2305
2412
|
IframeElement.id = domId2;
|
|
2413
|
+
if (isolate) {
|
|
2414
|
+
IframeElement.setAttribute("sandbox", "allow-scripts allow-forms allow-popups");
|
|
2415
|
+
}
|
|
2306
2416
|
IframeElement.style.cssText = "\n display: block;\n padding: 0;\n margin: 0;\n position: absolute;\n inset: 0;\n overflow: hidden;\n border: none;\n opacity: ".concat((options == null ? void 0 : options.hidden) ? "0" : "1", ";\n width: 100%;\n height: 100%;\n pointer-events: ").concat((options == null ? void 0 : options.hidden) ? "none" : "all", ";\n ");
|
|
2307
2417
|
if (!container.querySelector('[id^="myop-comp-"]'))
|
|
2308
2418
|
container.innerHTML = "";
|
|
2309
2419
|
IframeElement = this.appendChild(container, IframeElement, options);
|
|
2310
|
-
const
|
|
2311
|
-
doc
|
|
2420
|
+
const __srcParts = [];
|
|
2421
|
+
const doc = isolate ? {
|
|
2422
|
+
open() {
|
|
2423
|
+
},
|
|
2424
|
+
writeln(s) {
|
|
2425
|
+
__srcParts.push(s);
|
|
2426
|
+
},
|
|
2427
|
+
close() {
|
|
2428
|
+
IframeElement.srcdoc = __srcParts.join("\n");
|
|
2429
|
+
}
|
|
2430
|
+
} : (() => {
|
|
2431
|
+
const d = IframeElement.contentDocument || IframeElement.contentWindow.document;
|
|
2432
|
+
d.open();
|
|
2433
|
+
return d;
|
|
2434
|
+
})();
|
|
2312
2435
|
let parsedSizeMeta = null;
|
|
2313
2436
|
{
|
|
2314
2437
|
const _preParser = new DOMParser();
|
|
@@ -2348,22 +2471,29 @@ var HTMLComponentLoader = class extends BaseMyopLoader {
|
|
|
2348
2471
|
const _doc = parser.parseFromString(HTML2Render, "text/html");
|
|
2349
2472
|
const styleTag = _doc.createElement("style");
|
|
2350
2473
|
styleTag.setAttribute("data-myop-injected", "true");
|
|
2351
|
-
styleTag.textContent = options.injectCss;
|
|
2474
|
+
styleTag.textContent = options.injectCss.replace(/<\s*\/\s*style/gi, "<\\/style");
|
|
2352
2475
|
(_doc.head || _doc.documentElement).appendChild(styleTag);
|
|
2353
2476
|
HTML2Render = "<!DOCTYPE html>" + _doc.documentElement.outerHTML;
|
|
2354
2477
|
}
|
|
2355
2478
|
doc.writeln(HTML2Render);
|
|
2356
2479
|
const sdkScript = HAS_EMBEDDED_SDK ? "<script>".concat(EMBEDDED_SDK_CONTENT, "<\/script>") : '<script src="'.concat(window.myop.__ROOT_SDK_PUBLIC_URL__, '"><\/script>');
|
|
2357
2480
|
const initScript = HAS_EMBEDDED_SDK ? "<script>\n const __myop_init = async () => {\n const iframeModule = await MyopSDK.getIframeModule();\n const IframeSDK = iframeModule.IframeSDK;\n const sdk = new IframeSDK();\n sdk.init();\n }\n __myop_init().then();\n <\/script>" : "<script>\n window.__federation__.__public_path__ = window.__federation__.__public_path__;\n const __myop_init = async () => {\n const {IframeSDK} = (await window.myop.rootSDK.getIframeModule());\n const sdk = new IframeSDK();\n sdk.init();\n }\n __myop_init().then();\n <\/script>";
|
|
2358
|
-
|
|
2359
|
-
|
|
2481
|
+
if (!isolate) {
|
|
2482
|
+
doc.writeln("".concat(sdkScript).concat(initScript));
|
|
2483
|
+
}
|
|
2484
|
+
if (!isolate && (options == null ? void 0 : options.data) !== void 0) {
|
|
2360
2485
|
const ctaQueueScript = "<script>\n window.__myop_cta_queue = [];\n window.myop_cta_handler = function(action, payload) {\n window.__myop_cta_queue.push({action: action, payload: payload});\n };\n <\/script>";
|
|
2361
2486
|
const escapedData = JSON.stringify(options.data).replace(/<\/script/gi, "\\u003c/script");
|
|
2362
2487
|
const dataScript = '<script id="__myop_init_data_script">\n (function() {\n var data = '.concat(escapedData, ";\n var scriptEl = document.getElementById('__myop_init_data_script');\n\n var callInitInterface = function(fn) {\n var startTime = performance.now();\n // Mark as pre-injected data call for extension tracking\n window.__myop_init_preinjected = true;\n try {\n fn(data);\n } finally {\n window.__myop_init_preinjected = false;\n }\n var duration = performance.now() - startTime;\n\n // Notify extension via postMessage (init* = pre-injected)\n try {\n window.parent.postMessage({\n type: 'MYOP_PREINJECTED_INIT',\n payload: {\n data: data,\n duration: duration,\n timestamp: Date.now()\n }\n }, '*');\n } catch (e) {}\n\n // Cleanup: remove script tag and stored data\n if (scriptEl && scriptEl.parentNode) {\n scriptEl.parentNode.removeChild(scriptEl);\n }\n delete window.__myop_init_data;\n };\n\n if (typeof window.myop_init_interface === 'function') {\n // Function already exists - call immediately\n callInitInterface(window.myop_init_interface);\n } else {\n // Function not yet defined - store data and watch for definition\n window.__myop_init_data = data;\n\n var _original;\n Object.defineProperty(window, 'myop_init_interface', {\n configurable: true,\n enumerable: true,\n set: function(fn) {\n _original = fn;\n if (window.__myop_init_data !== undefined) {\n var storedData = window.__myop_init_data;\n delete window.__myop_init_data;\n callInitInterface(fn);\n }\n },\n get: function() {\n return _original;\n }\n });\n }\n })();\n <\/script>");
|
|
2363
2488
|
doc.writeln(ctaQueueScript + dataScript);
|
|
2364
2489
|
}
|
|
2490
|
+
if (isolate) {
|
|
2491
|
+
const escapedData = (options == null ? void 0 : options.data) !== void 0 ? JSON.stringify(options.data).replace(/<\/script/gi, "\\u003c/script") : "undefined";
|
|
2492
|
+
doc.writeln(this.buildIsolationBridge(escapedData));
|
|
2493
|
+
}
|
|
2365
2494
|
doc.close();
|
|
2366
2495
|
const comp = new MyopIframeComponent(componentDefinition, skin, container, IframeElement, options);
|
|
2496
|
+
if (isolate) comp.enableIsolation();
|
|
2367
2497
|
comp.sizeMeta = parsedSizeMeta;
|
|
2368
2498
|
comp.initiated().then(() => {
|
|
2369
2499
|
if ((options == null ? void 0 : options.autoSize) === false) {
|
|
@@ -2418,6 +2548,42 @@ var HTMLComponentLoader = class extends BaseMyopLoader {
|
|
|
2418
2548
|
isMyopWebComponent(html) {
|
|
2419
2549
|
return html.trimStart().startsWith(MYOP_WEB_COMPONENT_MARKER);
|
|
2420
2550
|
}
|
|
2551
|
+
/**
|
|
2552
|
+
* Resolve how this component should render, applying the host render policy.
|
|
2553
|
+
* Precedence: options.renderPolicy (per-call) fully replaces the global
|
|
2554
|
+
* hostSDK.setRenderPolicy — so an app can restrict globally and allow specifics.
|
|
2555
|
+
* With no policy set, behavior is unchanged from before (marker ⇒ web component).
|
|
2556
|
+
*/
|
|
2557
|
+
async resolveRenderMode(componentDefinition, skin, loaderConfig, isWebComponent, options) {
|
|
2558
|
+
var _a, _b, _c, _d;
|
|
2559
|
+
const requestedMode = isWebComponent ? "webComponent" : loaderConfig.isolation || (options == null ? void 0 : options.isolation) ? "isolatedIframe" : "iframe";
|
|
2560
|
+
const policy = (_d = options == null ? void 0 : options.renderPolicy) != null ? _d : (_c = (_b = (_a = window == null ? void 0 : window.myop) == null ? void 0 : _a.hostSDK) == null ? void 0 : _b.getRenderPolicy) == null ? void 0 : _c.call(_b);
|
|
2561
|
+
const mode = policy ? await policy({ componentDefinition, skin, requestedMode, isWebComponent }) : requestedMode;
|
|
2562
|
+
return { mode, isolate: mode === "isolatedIframe" };
|
|
2563
|
+
}
|
|
2564
|
+
/**
|
|
2565
|
+
* The in-frame bridge for isolated components. Runs inside the sandboxed
|
|
2566
|
+
* (opaque-origin) iframe, translating the same author-facing contract to/from
|
|
2567
|
+
* postMessage since the host has no same-origin access:
|
|
2568
|
+
* • data-in : parent posts {type:'myop:init'} → calls window.myop_init_interface
|
|
2569
|
+
* (plus a baked initial value for the first render)
|
|
2570
|
+
* • data-out: window.myop_cta_handler → parent.postMessage({type:'myop:cta'})
|
|
2571
|
+
* • resize : ResizeObserver → parent.postMessage({type:'myop:size'})
|
|
2572
|
+
*
|
|
2573
|
+
* TODO(dev-extension): the isolated path deliberately skips the same-origin
|
|
2574
|
+
* dataScript, so it never posts the `MYOP_PREINJECTED_INIT` message the Myop dev
|
|
2575
|
+
* extension listens for to log the INITIAL render (`init*`). Later init updates and
|
|
2576
|
+
* all CTAs are still tracked (the extension wraps `comp.props`, which our isolated
|
|
2577
|
+
* connectProps branch routes through), so only the first-render payload is missing
|
|
2578
|
+
* from the extension's activity log for isolated components. Closing this would be a
|
|
2579
|
+
* ~1-line `parent.postMessage({type:'MYOP_PREINJECTED_INIT', payload:{data}})` inside
|
|
2580
|
+
* flushInitial() below — intentionally NOT done for now to avoid adding extension-only
|
|
2581
|
+
* traffic to the component runtime. Web components have the same initial-init gap
|
|
2582
|
+
* (initWithData is called on the element, not via comp.props) and it predates this.
|
|
2583
|
+
*/
|
|
2584
|
+
buildIsolationBridge(initialDataLiteral) {
|
|
2585
|
+
return "<script>\n (function () {\n var __initial = ".concat(initialDataLiteral, ";\n var __pending;\n // data-out (cta)\n window.myop_cta_handler = function (action, payload) {\n try { parent.postMessage({ __myop: true, type: 'myop:cta', action: action, payload: payload }, '*'); } catch (e) {}\n };\n function callInit(data) {\n if (typeof window.myop_init_interface === 'function') { window.myop_init_interface(data); return true; }\n return false;\n }\n // data-in (init updates)\n window.addEventListener('message', function (e) {\n var d = e.data;\n if (!d || d.__myop !== true) return;\n if (d.type === 'myop:init') { if (!callInit(d.data)) __pending = d.data; }\n });\n // first render: use a pending update if one arrived, else the baked initial data\n (function flushInitial() {\n var data = (__pending !== undefined) ? __pending : __initial;\n if (data === undefined) return;\n if (callInit(data)) { __pending = undefined; __initial = undefined; }\n else requestAnimationFrame(flushInitial);\n })();\n // resize (report content size)\n function contentHeight() {\n // Measure the BODY (content box). documentElement.scrollHeight includes\n // the iframe viewport \u2014 which we're driving \u2014 so it would report the\n // current frame height, not the content, and never shrink.\n var b = document.body;\n if (b) return Math.max(b.scrollHeight, b.offsetHeight);\n return document.documentElement.scrollHeight;\n }\n function postSize() {\n try {\n parent.postMessage({\n __myop: true, type: 'myop:size',\n height: contentHeight(),\n width: document.documentElement.scrollWidth\n }, '*');\n } catch (e) {}\n }\n // Observe the BODY (reflows with content) \u2014 not documentElement, whose box is\n // the iframe viewport and would feed back into a resize loop. A MutationObserver\n // catches content swaps (e.g. innerHTML re-render) that don't change body's box.\n if (window.ResizeObserver) {\n try { var __ro = new ResizeObserver(postSize); if (document.body) __ro.observe(document.body); } catch (e) {}\n }\n if (window.MutationObserver && document.body) {\n try { new MutationObserver(postSize).observe(document.body, { childList: true, subtree: true, attributes: true, characterData: true }); } catch (e) {}\n }\n window.addEventListener('load', postSize);\n postSize();\n })();\n <\/script>");
|
|
2586
|
+
}
|
|
2421
2587
|
/**
|
|
2422
2588
|
* Extract the web component script content from HTML
|
|
2423
2589
|
*/
|
|
@@ -2867,6 +3033,13 @@ var HostSDK = class {
|
|
|
2867
3033
|
__publicField(this, "components2init", []);
|
|
2868
3034
|
__publicField(this, "components", []);
|
|
2869
3035
|
__publicField(this, "componentsLoaders", []);
|
|
3036
|
+
// Global render policy (allow/deny/mode gate). A per-call options.renderPolicy
|
|
3037
|
+
// takes precedence over this — see HTMLComponentLoader.resolveRenderMode.
|
|
3038
|
+
__publicField(this, "_renderPolicy");
|
|
3039
|
+
__publicField(this, "setRenderPolicy", (policy) => {
|
|
3040
|
+
this._renderPolicy = policy;
|
|
3041
|
+
});
|
|
3042
|
+
__publicField(this, "getRenderPolicy", () => this._renderPolicy);
|
|
2870
3043
|
__publicField(this, "initiated", false);
|
|
2871
3044
|
__publicField(this, "version", myop_sdk_version_default);
|
|
2872
3045
|
__publicField(this, "type2InstanceCount", {});
|