@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.
Files changed (45) hide show
  1. package/dist/bundled-declarations.d.ts +135 -48
  2. package/dist/cjs/_IframeSDK.c7a53057.min.js +1 -0
  3. package/dist/cjs/{_IframeSDK.8ce25264.js → _IframeSDK.e5b2bc49.js} +201 -28
  4. package/dist/cjs/_IframeSDK.e5b2bc49.js.map +7 -0
  5. package/dist/cjs/_MyopHelpers.95610381.js.map +2 -2
  6. package/dist/cjs/{_MyopHelpers.172384f4.min.js → _MyopHelpers.ca1b3a3c.min.js} +1 -1
  7. package/dist/cjs/_WebComponentSDK.3a72ed95.min.js +1 -0
  8. package/dist/cjs/{_WebComponentSDK.1aa213d9.js → _WebComponentSDK.a7e660ab.js} +201 -28
  9. package/dist/cjs/_WebComponentSDK.a7e660ab.js.map +7 -0
  10. package/dist/cjs/_hostSDK.0529d5ed.min.js +1 -0
  11. package/dist/cjs/{_hostSDK.c7ca0fae.js → _hostSDK.1905850e.js} +201 -28
  12. package/dist/cjs/_hostSDK.1905850e.js.map +7 -0
  13. package/dist/cjs/myop_sdk.js +11 -11
  14. package/dist/cjs/myop_sdk.js.map +1 -1
  15. package/dist/cjs/myop_sdk.min.js +1 -1
  16. package/dist/cjs-bundled/myop_sdk.bundled.js +203 -29
  17. package/dist/cjs-bundled/myop_sdk.bundled.js.map +3 -3
  18. package/dist/cjs-bundled/myop_sdk.bundled.min.js +1 -1
  19. package/dist/module/Iframe/index.js +259 -29
  20. package/dist/module/Iframe/index.js.map +2 -2
  21. package/dist/module/SDK.js +260 -29
  22. package/dist/module/SDK.js.map +3 -3
  23. package/dist/module/common/index.d.ts +26 -0
  24. package/dist/module/common/index.js +1 -1
  25. package/dist/module/common/index.js.map +2 -2
  26. package/dist/module/embeddedSDK.js +1 -1
  27. package/dist/module/helpers/index.js +1 -1
  28. package/dist/module/helpers/index.js.map +2 -2
  29. package/dist/module/host/components/myopExtractedWebComponent.d.ts +1 -0
  30. package/dist/module/host/components/myopIframeComponent.d.ts +17 -0
  31. package/dist/module/host/embeddedSDK.js +1 -1
  32. package/dist/module/host/hostSDK.d.ts +15 -0
  33. package/dist/module/host/index.d.ts +1 -1
  34. package/dist/module/host/index.js +259 -29
  35. package/dist/module/host/index.js.map +2 -2
  36. package/dist/module/host/loaders/HTMLComponentLoader.d.ts +29 -1
  37. package/dist/module/webcomponent/index.js +259 -29
  38. package/dist/module/webcomponent/index.js.map +2 -2
  39. package/package.json +1 -1
  40. package/dist/cjs/_IframeSDK.07df88d3.min.js +0 -1
  41. package/dist/cjs/_IframeSDK.8ce25264.js.map +0 -7
  42. package/dist/cjs/_WebComponentSDK.1aa213d9.js.map +0 -7
  43. package/dist/cjs/_WebComponentSDK.92468fac.min.js +0 -1
  44. package/dist/cjs/_hostSDK.c7ca0fae.js.map +0 -7
  45. 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.32";
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
- if (this.isMyopWebComponent(loaderConfig.HTML)) {
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 doc = IframeElement.contentDocument || IframeElement.contentWindow.document;
2311
- doc.open();
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
- doc.writeln("".concat(sdkScript).concat(initScript));
2359
- if ((options == null ? void 0 : options.data) !== void 0) {
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", {});