@mochabug/adapt-web 1.0.0-rc56 → 1.0.0-rc58
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/esm/index.js +20 -4
- package/dist/umd/adapt-web.js +16 -2
- package/dist/umd/adapt-web.min.js +2 -2
- package/package.json +2 -2
package/dist/esm/index.js
CHANGED
|
@@ -1369,12 +1369,12 @@ export class AdaptWebClient {
|
|
|
1369
1369
|
else {
|
|
1370
1370
|
this.updateSideBySideVisibility();
|
|
1371
1371
|
}
|
|
1372
|
+
// Fire synthetic STATUS_RUNNING immediately — subscribe() blocks on the
|
|
1373
|
+
// SSE stream for-await loop and won't resolve while the session is active
|
|
1374
|
+
handlers.onSession?.({ status: "STATUS_RUNNING" });
|
|
1372
1375
|
// Now reconnect the stream — if it fails, reset everything and fall through
|
|
1373
1376
|
try {
|
|
1374
1377
|
await this.client.subscribe(state.token, handlers);
|
|
1375
|
-
// Fire synthetic STATUS_RUNNING so consumers don't need to distinguish
|
|
1376
|
-
// hydration from a fresh start
|
|
1377
|
-
handlers.onSession?.({ status: "STATUS_RUNNING" });
|
|
1378
1378
|
}
|
|
1379
1379
|
catch {
|
|
1380
1380
|
this.clearState();
|
|
@@ -1609,6 +1609,23 @@ export class AdaptWebClient {
|
|
|
1609
1609
|
this.updateMainIframe();
|
|
1610
1610
|
}
|
|
1611
1611
|
handleForkUrl(url, token, fork) {
|
|
1612
|
+
// If this fork is already the current fork, update it in-place
|
|
1613
|
+
if (this.currentFork?.fork === fork) {
|
|
1614
|
+
this.currentFork.url = url;
|
|
1615
|
+
this.currentFork.token = token;
|
|
1616
|
+
this.currentFork.time = Date.now();
|
|
1617
|
+
this.updateForkIframe();
|
|
1618
|
+
return;
|
|
1619
|
+
}
|
|
1620
|
+
// If this fork is already queued, update in-place
|
|
1621
|
+
const queued = this.forkQueue.find((item) => item.fork === fork);
|
|
1622
|
+
if (queued) {
|
|
1623
|
+
queued.url = url;
|
|
1624
|
+
queued.token = token;
|
|
1625
|
+
queued.time = Date.now();
|
|
1626
|
+
return;
|
|
1627
|
+
}
|
|
1628
|
+
// New fork — add to queue
|
|
1612
1629
|
const depth = (fork.match(/\//g) || []).length;
|
|
1613
1630
|
const forkItem = {
|
|
1614
1631
|
url,
|
|
@@ -1623,7 +1640,6 @@ export class AdaptWebClient {
|
|
|
1623
1640
|
this.mainToken = token;
|
|
1624
1641
|
this.updateMainIframe();
|
|
1625
1642
|
}
|
|
1626
|
-
// Add to queue and activate if no current fork or current fork is completed.
|
|
1627
1643
|
this.forkQueue.push(forkItem);
|
|
1628
1644
|
if (!this.currentFork || this.currentFork.completed) {
|
|
1629
1645
|
this.currentFork = null;
|
package/dist/umd/adapt-web.js
CHANGED
|
@@ -7547,7 +7547,7 @@ var MbAdapt = (() => {
|
|
|
7547
7547
|
// src/index.ts
|
|
7548
7548
|
if (typeof window !== "undefined" && true && !window.CAP_CUSTOM_WASM_URL) {
|
|
7549
7549
|
window.CAP_CUSTOM_WASM_URL = new URL(
|
|
7550
|
-
"https://cdn.mochabug.com/adapt/web/1.0.0-
|
|
7550
|
+
"https://cdn.mochabug.com/adapt/web/1.0.0-rc58/cap_wasm.js",
|
|
7551
7551
|
window.location.href
|
|
7552
7552
|
).href;
|
|
7553
7553
|
}
|
|
@@ -8739,9 +8739,9 @@ cap-widget::part(attribution) {
|
|
|
8739
8739
|
} else {
|
|
8740
8740
|
this.updateSideBySideVisibility();
|
|
8741
8741
|
}
|
|
8742
|
+
handlers.onSession?.({ status: "STATUS_RUNNING" });
|
|
8742
8743
|
try {
|
|
8743
8744
|
await this.client.subscribe(state.token, handlers);
|
|
8744
|
-
handlers.onSession?.({ status: "STATUS_RUNNING" });
|
|
8745
8745
|
} catch {
|
|
8746
8746
|
this.clearState();
|
|
8747
8747
|
this.sessionToken = null;
|
|
@@ -8941,6 +8941,20 @@ cap-widget::part(attribution) {
|
|
|
8941
8941
|
this.updateMainIframe();
|
|
8942
8942
|
}
|
|
8943
8943
|
handleForkUrl(url, token, fork) {
|
|
8944
|
+
if (this.currentFork?.fork === fork) {
|
|
8945
|
+
this.currentFork.url = url;
|
|
8946
|
+
this.currentFork.token = token;
|
|
8947
|
+
this.currentFork.time = Date.now();
|
|
8948
|
+
this.updateForkIframe();
|
|
8949
|
+
return;
|
|
8950
|
+
}
|
|
8951
|
+
const queued = this.forkQueue.find((item) => item.fork === fork);
|
|
8952
|
+
if (queued) {
|
|
8953
|
+
queued.url = url;
|
|
8954
|
+
queued.token = token;
|
|
8955
|
+
queued.time = Date.now();
|
|
8956
|
+
return;
|
|
8957
|
+
}
|
|
8944
8958
|
const depth = (fork.match(/\//g) || []).length;
|
|
8945
8959
|
const forkItem = {
|
|
8946
8960
|
url,
|
|
@@ -138,7 +138,7 @@ to prevent this, set window.CAP_DONT_SKIP_REDEFINE to true`):customElements.defi
|
|
|
138
138
|
--mb-cap-font-size: 14px;
|
|
139
139
|
}
|
|
140
140
|
}
|
|
141
|
-
`,document.head.appendChild(t)}mountWidget(){this.widgetContainer=document.createElement("div"),this.widgetContainer.className="mb-adapt-cap";let t=document.createElement("div");if(t.className="mb-adapt-cap__container",this.widgetElement=document.createElement("cap-widget"),this.widgetElement.setAttribute("data-cap-api-endpoint",`/adapt-cap-${this.options.automationId}/`),this.options.workerCount&&this.widgetElement.setAttribute("data-cap-worker-count",String(this.options.workerCount)),this.options.i18n){let{i18n:n}=this.options;n.verifyingLabel&&this.widgetElement.setAttribute("data-cap-i18n-verifying-label",n.verifyingLabel),n.initialState&&this.widgetElement.setAttribute("data-cap-i18n-initial-state",n.initialState),n.solvedLabel&&this.widgetElement.setAttribute("data-cap-i18n-solved-label",n.solvedLabel),n.errorLabel&&this.widgetElement.setAttribute("data-cap-i18n-error-label",n.errorLabel)}this.widgetElement.addEventListener("solve",(n=>{if(this.destroyed)return;let r=n.detail?.token,o=n.detail?.expires,a=o?new Date(o):new Date;queueMicrotask(()=>this.destroy()),r?this.options.onSolve(r,a):this.options.onError?.(new Error("No token received from Cap.js"))})),this.widgetElement.addEventListener("error",(n=>{this.destroyed||(console.error("[AdaptCapWidget] Cap.js error:",n.detail),queueMicrotask(()=>this.destroy()),this.options.onError?.(new Error(n.detail?.message||"Cap.js error")))})),t.appendChild(this.widgetElement),this.widgetContainer.appendChild(t),this.containerElement.appendChild(this.widgetContainer)}setDarkMode(t){this.widgetContainer&&(t?this.widgetContainer.classList.add("mb-adapt-cap--dark"):this.widgetContainer.classList.remove("mb-adapt-cap--dark"))}destroy(){this.destroyed||(this.destroyed=!0,Za(),this.widgetContainer&&this.widgetContainer.parentNode&&this.widgetContainer.parentNode.removeChild(this.widgetContainer),this.widgetContainer=null,this.widgetElement=null)}};function Ft(e,t){return`${e}${t?`#mb_token=${encodeURIComponent(t)}`:""}`}var Vs=["automation-id","session-token","auth-token","transmitter","challenge-token","requires-challenge","inherit-token","fork-display-mode","side-by-side-split","dialog-backdrop-close","dialog-resize-to-content","dark-mode","auto-resizing","persist"],xs=typeof HTMLElement<"u"?HTMLElement:class{},Qe=class extends xs{constructor(){super();this._client=null}static get observedAttributes(){return Vs}get automationId(){return this.getAttribute("automation-id")}set automationId(n){n===null?this.removeAttribute("automation-id"):this.setAttribute("automation-id",n)}get darkMode(){return this.hasAttribute("dark-mode")}set darkMode(n){n?this.setAttribute("dark-mode",""):this.removeAttribute("dark-mode")}get autoResizing(){return this.hasAttribute("auto-resizing")}set autoResizing(n){n?this.setAttribute("auto-resizing",""):this.removeAttribute("auto-resizing")}get forkDisplayMode(){return this.getAttribute("fork-display-mode")==="dialog"?"dialog":"side-by-side"}set forkDisplayMode(n){this.setAttribute("fork-display-mode",n)}get dialogBackdropClose(){return this.hasAttribute("dialog-backdrop-close")}set dialogBackdropClose(n){n?this.setAttribute("dialog-backdrop-close",""):this.removeAttribute("dialog-backdrop-close")}get dialogResizeToContent(){return this.hasAttribute("dialog-resize-to-content")}set dialogResizeToContent(n){n?this.setAttribute("dialog-resize-to-content",""):this.removeAttribute("dialog-resize-to-content")}get persist(){return this.hasAttribute("persist")}set persist(n){n?this.setAttribute("persist",""):this.removeAttribute("persist")}async newSession(){this._client&&await this._client.newSession()}connectedCallback(){queueMicrotask(()=>this._tryInit())}disconnectedCallback(){this._destroyClient()}attributeChangedCallback(n,r,o){if(r!==o){if(n==="automation-id"||n==="persist"){this._destroyClient(),queueMicrotask(()=>this._tryInit());return}if(this._client)switch(n){case"fork-display-mode":this._client.setForkDisplayMode(this.forkDisplayMode);break;case"dialog-backdrop-close":this._client.setDialogBackdropClose(this.dialogBackdropClose);break;case"dialog-resize-to-content":this._client.setDialogResizeToContent(this.dialogResizeToContent);break;case"dark-mode":this._client.setDarkMode(this.darkMode);break;case"auto-resizing":this._client.setAutoResizing(this.autoResizing);break}}}_tryInit(){if(this._client||!this.isConnected)return;let n=this.automationId;if(!n)return;let r=this.getAttribute("session-token"),o=this.getAttribute("auth-token"),a=this.getAttribute("transmitter"),i=this.getAttribute("challenge-token"),s=this.hasAttribute("requires-challenge"),u=this.getAttribute("inherit-token"),m=this.getAttribute("side-by-side-split"),I;this.forkDisplayMode==="dialog"?I={mode:"dialog",backdropClose:this.dialogBackdropClose,resizeToContent:this.dialogResizeToContent}:I={mode:"side-by-side",...m!==null&&{split:Number(m)}};let f={container:this,id:n,forkDisplay:I,darkMode:this.darkMode,autoResizing:this.autoResizing,onSession:(l,c)=>{this.onSessionCallback?.(l,c),this.dispatchEvent(new CustomEvent("adapt-session",{detail:{status:l,fork:c},bubbles:!0}))},onOutput:l=>{this.onOutputCallback?.(l),this.dispatchEvent(new CustomEvent("adapt-output",{detail:{output:l},bubbles:!0}))},onForkActive:l=>{this.onForkActiveCallback?.(l),this.dispatchEvent(new CustomEvent("adapt-fork-active",{detail:{active:l},bubbles:!0}))}};r&&(f.sessionToken=r),o&&(f.authToken=o),a&&(f.transmitter=a),i&&(f.challengeToken=i),s&&(f.requiresChallenge=!0),u&&(f.inheritToken=u),this.signals!==void 0&&(f.signals=this.signals),this.capWidgetOptions!==void 0&&(f.capWidgetOptions=this.capWidgetOptions),this.inheritFrom!==void 0&&(f.inheritFrom=this.inheritFrom),this.classNames!==void 0&&(f.classNames=this.classNames),this.styles!==void 0&&(f.styles=this.styles),this.persistOptions!==void 0?f.persist=this.persistOptions:this.persist&&(f.persist=!0),this._client=new _e(f)}_destroyClient(){this._client&&(this._client.destroy(),this._client=null)}};if(typeof customElements<"u"&&!customElements.get("adapt-automation")){customElements.define("adapt-automation",Qe);let e="adapt-element-display";if(!document.getElementById(e)){let t=document.createElement("style");t.id=e,t.textContent="adapt-automation, adapt-cap { display: block; }",document.head.appendChild(t)}}var Ss=["automation-id","dark-mode","worker-count"],Xs=typeof HTMLElement<"u"?HTMLElement:class{},Oe=class extends Xs{constructor(){super();this._widget=null}static get observedAttributes(){return Ss}get client(){return this._client}set client(n){this._client=n,this._destroyWidget(),this._tryInit()}get automationId(){return this.getAttribute("automation-id")}set automationId(n){n===null?this.removeAttribute("automation-id"):this.setAttribute("automation-id",n)}get darkMode(){return this.hasAttribute("dark-mode")}set darkMode(n){n?this.setAttribute("dark-mode",""):this.removeAttribute("dark-mode")}connectedCallback(){this._tryInit()}disconnectedCallback(){this._destroyWidget()}attributeChangedCallback(n,r,o){if(r!==o){if(n==="automation-id"){this._destroyWidget(),this._tryInit();return}if(n==="dark-mode"){this._widget?.setDarkMode(this.darkMode);return}}}_tryInit(){if(this._widget||!this.isConnected)return;let n=this.automationId;if(!n||!this._client)return;let r=this.getAttribute("worker-count");this._widget=new ie({container:this,automationId:n,client:this._client,onSolve:(o,a)=>{this.onSolveCallback?.(o,a),this.dispatchEvent(new CustomEvent("adapt-cap-solve",{detail:{token:o,expires:a},bubbles:!0}))},onError:o=>{this.onErrorCallback?.(o),this.dispatchEvent(new CustomEvent("adapt-cap-error",{detail:{error:o},bubbles:!0}))},...r!==null&&{workerCount:Number(r)},...this.i18n!==void 0&&{i18n:this.i18n}}),this.darkMode&&this._widget.setDarkMode(!0)}_destroyWidget(){this._widget&&(this._widget.destroy(),this._widget=null)}};if(typeof customElements<"u"&&!customElements.get("adapt-cap")){customElements.define("adapt-cap",Oe);let e="adapt-element-display";if(!document.getElementById(e)){let t=document.createElement("style");t.id=e,t.textContent="adapt-automation, adapt-cap { display: block; }",document.head.appendChild(t)}}typeof window<"u"&&!window.CAP_CUSTOM_WASM_URL&&(window.CAP_CUSTOM_WASM_URL=new URL("https://cdn.mochabug.com/adapt/web/1.0.0-
|
|
141
|
+
`,document.head.appendChild(t)}mountWidget(){this.widgetContainer=document.createElement("div"),this.widgetContainer.className="mb-adapt-cap";let t=document.createElement("div");if(t.className="mb-adapt-cap__container",this.widgetElement=document.createElement("cap-widget"),this.widgetElement.setAttribute("data-cap-api-endpoint",`/adapt-cap-${this.options.automationId}/`),this.options.workerCount&&this.widgetElement.setAttribute("data-cap-worker-count",String(this.options.workerCount)),this.options.i18n){let{i18n:n}=this.options;n.verifyingLabel&&this.widgetElement.setAttribute("data-cap-i18n-verifying-label",n.verifyingLabel),n.initialState&&this.widgetElement.setAttribute("data-cap-i18n-initial-state",n.initialState),n.solvedLabel&&this.widgetElement.setAttribute("data-cap-i18n-solved-label",n.solvedLabel),n.errorLabel&&this.widgetElement.setAttribute("data-cap-i18n-error-label",n.errorLabel)}this.widgetElement.addEventListener("solve",(n=>{if(this.destroyed)return;let r=n.detail?.token,o=n.detail?.expires,a=o?new Date(o):new Date;queueMicrotask(()=>this.destroy()),r?this.options.onSolve(r,a):this.options.onError?.(new Error("No token received from Cap.js"))})),this.widgetElement.addEventListener("error",(n=>{this.destroyed||(console.error("[AdaptCapWidget] Cap.js error:",n.detail),queueMicrotask(()=>this.destroy()),this.options.onError?.(new Error(n.detail?.message||"Cap.js error")))})),t.appendChild(this.widgetElement),this.widgetContainer.appendChild(t),this.containerElement.appendChild(this.widgetContainer)}setDarkMode(t){this.widgetContainer&&(t?this.widgetContainer.classList.add("mb-adapt-cap--dark"):this.widgetContainer.classList.remove("mb-adapt-cap--dark"))}destroy(){this.destroyed||(this.destroyed=!0,Za(),this.widgetContainer&&this.widgetContainer.parentNode&&this.widgetContainer.parentNode.removeChild(this.widgetContainer),this.widgetContainer=null,this.widgetElement=null)}};function Ft(e,t){return`${e}${t?`#mb_token=${encodeURIComponent(t)}`:""}`}var Vs=["automation-id","session-token","auth-token","transmitter","challenge-token","requires-challenge","inherit-token","fork-display-mode","side-by-side-split","dialog-backdrop-close","dialog-resize-to-content","dark-mode","auto-resizing","persist"],xs=typeof HTMLElement<"u"?HTMLElement:class{},Qe=class extends xs{constructor(){super();this._client=null}static get observedAttributes(){return Vs}get automationId(){return this.getAttribute("automation-id")}set automationId(n){n===null?this.removeAttribute("automation-id"):this.setAttribute("automation-id",n)}get darkMode(){return this.hasAttribute("dark-mode")}set darkMode(n){n?this.setAttribute("dark-mode",""):this.removeAttribute("dark-mode")}get autoResizing(){return this.hasAttribute("auto-resizing")}set autoResizing(n){n?this.setAttribute("auto-resizing",""):this.removeAttribute("auto-resizing")}get forkDisplayMode(){return this.getAttribute("fork-display-mode")==="dialog"?"dialog":"side-by-side"}set forkDisplayMode(n){this.setAttribute("fork-display-mode",n)}get dialogBackdropClose(){return this.hasAttribute("dialog-backdrop-close")}set dialogBackdropClose(n){n?this.setAttribute("dialog-backdrop-close",""):this.removeAttribute("dialog-backdrop-close")}get dialogResizeToContent(){return this.hasAttribute("dialog-resize-to-content")}set dialogResizeToContent(n){n?this.setAttribute("dialog-resize-to-content",""):this.removeAttribute("dialog-resize-to-content")}get persist(){return this.hasAttribute("persist")}set persist(n){n?this.setAttribute("persist",""):this.removeAttribute("persist")}async newSession(){this._client&&await this._client.newSession()}connectedCallback(){queueMicrotask(()=>this._tryInit())}disconnectedCallback(){this._destroyClient()}attributeChangedCallback(n,r,o){if(r!==o){if(n==="automation-id"||n==="persist"){this._destroyClient(),queueMicrotask(()=>this._tryInit());return}if(this._client)switch(n){case"fork-display-mode":this._client.setForkDisplayMode(this.forkDisplayMode);break;case"dialog-backdrop-close":this._client.setDialogBackdropClose(this.dialogBackdropClose);break;case"dialog-resize-to-content":this._client.setDialogResizeToContent(this.dialogResizeToContent);break;case"dark-mode":this._client.setDarkMode(this.darkMode);break;case"auto-resizing":this._client.setAutoResizing(this.autoResizing);break}}}_tryInit(){if(this._client||!this.isConnected)return;let n=this.automationId;if(!n)return;let r=this.getAttribute("session-token"),o=this.getAttribute("auth-token"),a=this.getAttribute("transmitter"),i=this.getAttribute("challenge-token"),s=this.hasAttribute("requires-challenge"),u=this.getAttribute("inherit-token"),m=this.getAttribute("side-by-side-split"),I;this.forkDisplayMode==="dialog"?I={mode:"dialog",backdropClose:this.dialogBackdropClose,resizeToContent:this.dialogResizeToContent}:I={mode:"side-by-side",...m!==null&&{split:Number(m)}};let f={container:this,id:n,forkDisplay:I,darkMode:this.darkMode,autoResizing:this.autoResizing,onSession:(l,c)=>{this.onSessionCallback?.(l,c),this.dispatchEvent(new CustomEvent("adapt-session",{detail:{status:l,fork:c},bubbles:!0}))},onOutput:l=>{this.onOutputCallback?.(l),this.dispatchEvent(new CustomEvent("adapt-output",{detail:{output:l},bubbles:!0}))},onForkActive:l=>{this.onForkActiveCallback?.(l),this.dispatchEvent(new CustomEvent("adapt-fork-active",{detail:{active:l},bubbles:!0}))}};r&&(f.sessionToken=r),o&&(f.authToken=o),a&&(f.transmitter=a),i&&(f.challengeToken=i),s&&(f.requiresChallenge=!0),u&&(f.inheritToken=u),this.signals!==void 0&&(f.signals=this.signals),this.capWidgetOptions!==void 0&&(f.capWidgetOptions=this.capWidgetOptions),this.inheritFrom!==void 0&&(f.inheritFrom=this.inheritFrom),this.classNames!==void 0&&(f.classNames=this.classNames),this.styles!==void 0&&(f.styles=this.styles),this.persistOptions!==void 0?f.persist=this.persistOptions:this.persist&&(f.persist=!0),this._client=new _e(f)}_destroyClient(){this._client&&(this._client.destroy(),this._client=null)}};if(typeof customElements<"u"&&!customElements.get("adapt-automation")){customElements.define("adapt-automation",Qe);let e="adapt-element-display";if(!document.getElementById(e)){let t=document.createElement("style");t.id=e,t.textContent="adapt-automation, adapt-cap { display: block; }",document.head.appendChild(t)}}var Ss=["automation-id","dark-mode","worker-count"],Xs=typeof HTMLElement<"u"?HTMLElement:class{},Oe=class extends Xs{constructor(){super();this._widget=null}static get observedAttributes(){return Ss}get client(){return this._client}set client(n){this._client=n,this._destroyWidget(),this._tryInit()}get automationId(){return this.getAttribute("automation-id")}set automationId(n){n===null?this.removeAttribute("automation-id"):this.setAttribute("automation-id",n)}get darkMode(){return this.hasAttribute("dark-mode")}set darkMode(n){n?this.setAttribute("dark-mode",""):this.removeAttribute("dark-mode")}connectedCallback(){this._tryInit()}disconnectedCallback(){this._destroyWidget()}attributeChangedCallback(n,r,o){if(r!==o){if(n==="automation-id"){this._destroyWidget(),this._tryInit();return}if(n==="dark-mode"){this._widget?.setDarkMode(this.darkMode);return}}}_tryInit(){if(this._widget||!this.isConnected)return;let n=this.automationId;if(!n||!this._client)return;let r=this.getAttribute("worker-count");this._widget=new ie({container:this,automationId:n,client:this._client,onSolve:(o,a)=>{this.onSolveCallback?.(o,a),this.dispatchEvent(new CustomEvent("adapt-cap-solve",{detail:{token:o,expires:a},bubbles:!0}))},onError:o=>{this.onErrorCallback?.(o),this.dispatchEvent(new CustomEvent("adapt-cap-error",{detail:{error:o},bubbles:!0}))},...r!==null&&{workerCount:Number(r)},...this.i18n!==void 0&&{i18n:this.i18n}}),this.darkMode&&this._widget.setDarkMode(!0)}_destroyWidget(){this._widget&&(this._widget.destroy(),this._widget=null)}};if(typeof customElements<"u"&&!customElements.get("adapt-cap")){customElements.define("adapt-cap",Oe);let e="adapt-element-display";if(!document.getElementById(e)){let t=document.createElement("style");t.id=e,t.textContent="adapt-automation, adapt-cap { display: block; }",document.head.appendChild(t)}}typeof window<"u"&&!window.CAP_CUSTOM_WASM_URL&&(window.CAP_CUSTOM_WASM_URL=new URL("https://cdn.mochabug.com/adapt/web/1.0.0-rc58/cap_wasm.js",window.location.href).href);function Bs(e,t="both"){let n=`mb_adapt_${e}`;(t==="session"||t==="both")&&sessionStorage.removeItem(n),(t==="local"||t==="both")&&localStorage.removeItem(n)}var Ws=`
|
|
142
142
|
.mb-adapt {
|
|
143
143
|
width: 100%;
|
|
144
144
|
min-height: inherit;
|
|
@@ -673,4 +673,4 @@ cap-widget::part(attribution) {
|
|
|
673
673
|
background: var(--mb-adapt-banner-bg);
|
|
674
674
|
border: 1px solid var(--mb-adapt-banner-border);
|
|
675
675
|
}
|
|
676
|
-
`,_e=class e{constructor(t){this.rootElement=null;this.mainUrl=null;this.forkQueue=[];this.currentFork=null;this.sessionToken=null;this.isDragging=!1;this.responsiveShowMain=!1;this.wrapperElement=null;this.mainFrameElement=null;this.forkFrameElement=null;this.mainIframe=null;this.forkIframe=null;this.dragHandleElement=null;this.forkExpandButton=null;this.forkToolbarElement=null;this.mainContainer=null;this.dialogBackdrop=null;this.dialogElement=null;this.dialogExpandButton=null;this.mouseMoveHandler=null;this.mouseUpHandler=null;this.resizeObserver=null;this.messageHandler=null;this.backdropClickHandler=null;this.destroyed=!1;this.lastForkActive=null;this.stoppedPlaceholder=null;this.capWidgetInstance=null;this.options=t;let n=t.forkDisplay??{mode:"side-by-side"};n.mode==="dialog"?this.forkDisplay={...n,resizeToContent:n.resizeToContent??!0,backdropClose:n.backdropClose??!0}:this.forkDisplay=n,this.splitPercentage=this.forkDisplay.mode==="side-by-side"?this.forkDisplay.split??50:50,this.darkMode=t.darkMode??!1,this.autoResizing=t.autoResizing??!1;let r=typeof t.container=="string"?document.getElementById(t.container):t.container;if(!r)throw new Error(`Container with id '${t.container}' not found`);this.container=r;let o=Un({id:t.id});this.client=fa(o,t.id),this.injectDefaultStyles(),this.createRootElement(),this.createInitialStructure(),this.setupDragListeners(),this.setupResizeObserver(),this.setupMessageListener(),this.init()}static{this.COLLAPSE_THRESHOLD=15}static{this.RESPONSIVE_BREAKPOINT=900}static{this.DIALOG_FULLSCREEN_BREAKPOINT=639}createInitialStructure(){this.forkDisplay.mode==="dialog"?this.createDialogStructure():this.createSideBySideStructure()}setupResizeObserver(){this.rootElement&&(this.resizeObserver=new ResizeObserver(()=>{this.forkDisplay.mode==="side-by-side"&&this.currentFork&&this.updateSideBySideVisibility(),this.forkDisplay.mode==="dialog"&&this.dialogElement&&window.innerWidth<=e.DIALOG_FULLSCREEN_BREAKPOINT&&(this.dialogElement.style.height="")}),this.resizeObserver.observe(this.rootElement))}getOrigin(t){try{return new URL(t).origin}catch{return null}}isValidMessageOrigin(t){if(this.mainUrl){let n=this.getOrigin(this.mainUrl);if(n&&t===n)return!0}if(this.currentFork?.url){let n=this.getOrigin(this.currentFork.url);if(n&&t===n)return!0}return!1}setupMessageListener(){this.messageHandler=t=>{if(!this.isValidMessageOrigin(t.origin))return;let n=t.data;if(!n||typeof n!="object"||n.type!=="adapt-resize")return;let{height:r}=n;if(typeof r!="number"||!Number.isFinite(r)||r<1)return;let o=t.source;if(this.mainIframe?.contentWindow===o)this.autoResizing&&(this.mainIframe.style.height=`${r}px`);else if(this.forkIframe?.contentWindow===o&&(this.autoResizing&&(this.forkIframe.style.height=`${r}px`),this.forkDisplay.mode==="dialog"&&this.forkDisplay.resizeToContent&&this.dialogElement&&window.innerWidth>e.DIALOG_FULLSCREEN_BREAKPOINT)){let a=this.forkToolbarElement?.offsetHeight??36,u=Math.ceil(r)+a+24+2;this.dialogElement.style.height=`clamp(300px, ${u}px, 90vh)`}},window.addEventListener("message",this.messageHandler)}sendDarkModeToIframe(t){if(!t)return;let n=t.src,r=n?this.getOrigin(n):null;if(!r)return;let o={type:"adapt-darkMode",darkMode:this.darkMode};try{t.contentWindow?.postMessage(o,r)}catch{}}sendAutoResizingToIframe(t){if(!t)return;let n=t.src,r=n?this.getOrigin(n):null;if(!r)return;let o=this.autoResizing;t===this.forkIframe&&this.forkDisplay.mode==="dialog"&&this.forkDisplay.resizeToContent&&(o=!0);let a={type:"adapt-autoResizing",autoResizing:o};try{t.contentWindow?.postMessage(a,r)}catch{}}sendAutoResizingToForkIframe(t){if(!this.forkIframe)return;let n=this.forkIframe.src,r=n?this.getOrigin(n):null;if(!r)return;let o={type:"adapt-autoResizing",autoResizing:t};try{this.forkIframe.contentWindow?.postMessage(o,r)}catch{}}setDarkMode(t){this.darkMode!==t&&(this.darkMode=t,this.rootElement&&(t?this.rootElement.classList.add("mb-adapt--dark"):this.rootElement.classList.remove("mb-adapt--dark")),this.capWidgetInstance?.setDarkMode(t),this.sendDarkModeToIframe(this.mainIframe),this.sendDarkModeToIframe(this.forkIframe))}setAutoResizing(t){this.autoResizing!==t&&(this.autoResizing=t,this.sendAutoResizingToIframe(this.mainIframe),this.sendAutoResizingToIframe(this.forkIframe),t||(this.mainIframe&&(this.mainIframe.style.height=""),this.forkIframe&&(this.forkIframe.style.height="")))}setForkDisplayMode(t){this.forkDisplay.mode!==t&&(t==="side-by-side"?this.forkDisplay={mode:"side-by-side",split:this.splitPercentage}:this.forkDisplay={mode:"dialog",resizeToContent:!0,backdropClose:!0},this.mainIframe?.parentNode&&this.mainIframe.parentNode.removeChild(this.mainIframe),this.forkIframe?.parentNode&&this.forkIframe.parentNode.removeChild(this.forkIframe),this.rootElement&&(this.rootElement.innerHTML=""),this.wrapperElement=null,this.mainFrameElement=null,this.forkFrameElement=null,this.dragHandleElement=null,this.forkExpandButton=null,this.forkToolbarElement=null,this.mainContainer=null,this.dialogBackdrop=null,this.dialogElement=null,this.dialogExpandButton=null,this.backdropClickHandler=null,t==="dialog"?this.createDialogStructure():this.createSideBySideStructure(),t==="side-by-side"?this.updateSideBySideVisibility():this.updateDialogVisibility(),this.mainUrl&&this.mainIframe&&this.showIframe(this.mainIframe),this.currentFork&&this.forkIframe&&this.showIframe(this.forkIframe),this.autoResizing&&(this.sendAutoResizingToIframe(this.mainIframe),this.sendAutoResizingToIframe(this.forkIframe)),t==="side-by-side"&&!this.currentFork&&this.forkQueue.length>0&&this.activateNextFork())}setDialogBackdropClose(t){this.forkDisplay.mode==="dialog"&&this.forkDisplay.backdropClose!==t&&(this.forkDisplay={...this.forkDisplay,backdropClose:t},this.dialogBackdrop&&(this.backdropClickHandler&&(this.dialogBackdrop.removeEventListener("click",this.backdropClickHandler),this.backdropClickHandler=null),t&&(this.backdropClickHandler=()=>{this.handleForkMinimize()},this.dialogBackdrop.addEventListener("click",this.backdropClickHandler))))}setDialogResizeToContent(t){this.forkDisplay.mode==="dialog"&&this.forkDisplay.resizeToContent!==t&&(this.forkDisplay={...this.forkDisplay,resizeToContent:t},t?this.sendAutoResizingToForkIframe(!0):(this.dialogElement&&(this.dialogElement.style.height=""),this.autoResizing||this.sendAutoResizingToForkIframe(!1)))}setupDragListeners(){let t=this.splitPercentage,n=!1,r=a=>{if(!this.isDragging||!this.rootElement)return;let i=this.rootElement.getBoundingClientRect();if(i.width===0)return;t=(a.clientX-i.left)/i.width*100;let u=t,m=100-t;u<e.COLLAPSE_THRESHOLD?n||(n=!0,this.splitPercentage=0,this.updateSideBySideVisibility()):m<e.COLLAPSE_THRESHOLD?n||(n=!0,this.splitPercentage=100,this.updateSideBySideVisibility()):(n=!1,this.splitPercentage=Math.max(e.COLLAPSE_THRESHOLD,Math.min(100-e.COLLAPSE_THRESHOLD,t)),this.updateSideBySideWidths())},o=()=>{this.isDragging&&(this.isDragging=!1,n=!1,document.getElementById("mb-adapt-drag-overlay")?.remove(),this.rootElement?.querySelectorAll(".mb-adapt__iframe-overlay").forEach(a=>a.remove()),this.mainFrameElement&&(this.mainFrameElement.style.transition=""),this.forkFrameElement&&(this.forkFrameElement.style.transition=""),this.dragHandleElement&&(this.dragHandleElement.style.transition=""),this.splitPercentage!==0&&this.splitPercentage!==100&&t>=e.COLLAPSE_THRESHOLD&&100-t>=e.COLLAPSE_THRESHOLD&&(this.splitPercentage=t),t=this.splitPercentage,this.saveState())};this.mouseMoveHandler=r,this.mouseUpHandler=o,document.addEventListener("mousemove",this.mouseMoveHandler),document.addEventListener("mouseup",this.mouseUpHandler)}injectDefaultStyles(){if(document.getElementById("mb-adapt-styles"))return;let t=document.createElement("style");t.id="mb-adapt-styles",t.textContent=Ws,document.head.appendChild(t)}createRootElement(){this.rootElement=document.createElement("div"),this.rootElement.className=this.options.classNames?.root||"mb-adapt",this.darkMode&&this.rootElement.classList.add("mb-adapt--dark"),this.options.styles&&Object.assign(this.rootElement.style,this.options.styles),this.container.appendChild(this.rootElement)}parseInheritToken(){let t=this.options.inheritFrom;return t?"hash"in t?this.parseFromHash(t.hash):this.parseFromParam(t.param):null}parseFromHash(t){let n=window.location.hash.slice(1);if(!n)return null;let r=new URLSearchParams(n),o=r.get(t);if(!o)return null;r.delete(t);let a=r.toString(),i=window.location.pathname+window.location.search+(a?"#"+a:"");return history.replaceState(null,"",i),decodeURIComponent(o)}parseFromParam(t){let n=new URLSearchParams(window.location.search),r=n.get(t);if(!r)return null;n.delete(t);let o=n.toString(),a=window.location.pathname+(o?"?"+o:"")+window.location.hash;return history.replaceState(null,"",a),decodeURIComponent(r)}async init(){let t={onUrl:n=>this.onUrl(n),onSession:n=>{n.status==="STATUS_COMPLETED"&&!n.fork&&this.handleSessionComplete(),!n.fork&&(n.status==="STATUS_COMPLETED"||n.status==="STATUS_STOPPED"||n.status==="STATUS_ERRORED")&&this.clearState(),this.options.onSession&&this.options.onSession(n.status||"STATUS_UNSPECIFIED",n.fork)}};if(this.options.onOutput&&(t.onOutput=this.options.onOutput),!(!this.options.sessionToken&&this.resolvePersistOptions()&&await this.tryRestoreSession(t)))if(this.options.sessionToken)this.sessionToken=this.options.sessionToken,await this.client.subscribe(this.sessionToken,t);else{let n=this.parseInheritToken(),r=n||this.options.inheritToken;if(this.options.inheritFrom&&!n){let i="hash"in this.options.inheritFrom?`hash key '${this.options.inheritFrom.hash}'`:`param '${this.options.inheritFrom.param}'`;console.error(`[AdaptWebClient] No inherit token found in URL ${i}`);return}let o=this.options.challengeToken;if(this.options.requiresChallenge&&!o&&!r&&(o=await this.showCapWidgetAndSolve(),!o)){console.error("[AdaptWebClient] Failed to solve challenge");return}let a;if(r)a=await this.client.runInherit(r,t);else{let i={...t};this.options.transmitter!==void 0&&(i.transmitter=this.options.transmitter),this.options.signals!==void 0&&(i.signals=this.options.signals),this.options.authToken!==void 0&&(i.authToken=this.options.authToken),o!==void 0&&(i.challengeToken=o),a=await this.client.run(i)}this.sessionToken=a.sessionToken,this.sessionExpiresAt=a.expiresAt,this.saveState()}}async showCapWidgetAndSolve(){return new Promise(t=>{this.capWidgetInstance=new ie({container:this.rootElement,automationId:this.options.id,client:this.client.raw,...this.options.capWidgetOptions?.workerCount!==void 0&&{workerCount:this.options.capWidgetOptions.workerCount},...this.options.capWidgetOptions?.i18n&&{i18n:this.options.capWidgetOptions.i18n},onSolve:n=>{this.capWidgetInstance=null,t(n)},onError:n=>{console.error("[AdaptWebClient] Cap.js error:",n),this.capWidgetInstance=null,t(void 0)}}),this.darkMode&&this.capWidgetInstance.setDarkMode(!0)})}destroyCapWidget(){this.capWidgetInstance&&(this.capWidgetInstance.destroy(),this.capWidgetInstance=null)}resolvePersistOptions(){let t=this.options.persist;return t?t===!0?{storage:"session",ttl:3600}:{storage:t.storage??"session",ttl:t.ttl??3600}:null}getStorageKey(){return`mb_adapt_${this.options.id}`}getStorage(){let t=this.resolvePersistOptions();return t?t.storage==="local"?localStorage:sessionStorage:null}saveState(){let t=this.getStorage();if(!t||!this.sessionToken)return;let n=this.resolvePersistOptions(),r={v:1,token:this.sessionToken,expiresAt:this.sessionExpiresAt?this.sessionExpiresAt.toISOString():null,savedAt:Date.now(),ttl:n.ttl,mainUrl:this.mainUrl,mainToken:this.mainToken,currentFork:this.currentFork?{url:this.currentFork.url,token:this.currentFork.token,fork:this.currentFork.fork,depth:this.currentFork.depth,time:this.currentFork.time,completed:this.currentFork.completed}:null,forkQueue:this.forkQueue.map(o=>({url:o.url,token:o.token,fork:o.fork,depth:o.depth,time:o.time,completed:o.completed})),forkDisplayMode:this.forkDisplay.mode,splitPercentage:this.splitPercentage};t.setItem(this.getStorageKey(),JSON.stringify(r))}loadState(){let t=this.getStorage();if(!t)return null;let n=t.getItem(this.getStorageKey());if(!n)return null;let r;try{r=JSON.parse(n)}catch{return this.clearState(),null}if(r.v!==1)return this.clearState(),null;let o=Date.now(),a=3e4;if(o-r.savedAt>r.ttl*1e3+a)return this.clearState(),null;if(r.expiresAt){let i=new Date(r.expiresAt).getTime();if(o>i+a)return this.clearState(),null}return r}clearState(){let t=this.getStorage();t&&t.removeItem(this.getStorageKey())}async tryRestoreSession(t){let n=this.loadState();if(!n)return!1;if(this.sessionToken=n.token,this.sessionExpiresAt=n.expiresAt?new Date(n.expiresAt):void 0,this.mainUrl=n.mainUrl,this.mainToken=n.mainToken,this.forkQueue=n.forkQueue,this.currentFork=n.currentFork,n.forkDisplayMode===this.forkDisplay.mode&&this.forkDisplay.mode==="side-by-side"&&(this.splitPercentage=n.splitPercentage),this.mainUrl&&this.mainIframe){let r=Ft(this.mainUrl,this.mainToken);this.mainIframe.src!==r&&(this.mainIframe.src=r),this.showIframe(this.mainIframe)}this.currentFork&&this.forkIframe&&this.updateForkIframe(),this.forkDisplay.mode==="dialog"?this.updateDialogVisibility():this.updateSideBySideVisibility();try{await this.client.subscribe(n.token,t),t.onSession?.({status:"STATUS_RUNNING"})}catch{return this.clearState(),this.sessionToken=null,this.sessionExpiresAt=void 0,this.mainUrl=null,this.mainToken=void 0,this.forkQueue=[],this.currentFork=null,this.mainIframe&&(this.mainIframe.src="about:blank",this.mainIframe.classList.remove("mb-adapt__iframe--visible")),this.forkIframe&&(this.forkIframe.src="about:blank",this.forkIframe.classList.remove("mb-adapt__iframe--visible"),this.forkIframe.classList.add("mb-adapt__iframe--hidden")),this.forkDisplay.mode==="side-by-side"?this.updateSideBySideVisibility():this.updateDialogVisibility(),!1}return!0}async newSession(){this.clearState(),this.sessionToken&&this.client.stop(this.sessionToken).catch(()=>{}),await this.client.unsubscribe(),this.mainUrl=null,this.mainToken=void 0,this.forkQueue=[],this.currentFork=null,this.sessionToken=null,this.sessionExpiresAt=void 0,this.lastForkActive=null,this.mainIframe&&(this.mainIframe.src="about:blank",this.mainIframe.classList.remove("mb-adapt__iframe--visible")),this.forkIframe&&(this.forkIframe.src="about:blank",this.forkIframe.classList.remove("mb-adapt__iframe--visible"),this.forkIframe.classList.add("mb-adapt__iframe--hidden")),this.removeStoppedPlaceholder(),this.forkDisplay.mode==="side-by-side"?this.updateSideBySideVisibility():this.updateDialogVisibility(),await this.init()}async destroy(){this.destroyed=!0,this.destroyCapWidget(),this.sessionToken&&!this.loadState()&&this.client.stop(this.sessionToken).catch(()=>{}),await this.client.unsubscribe(),this.mouseMoveHandler&&document.removeEventListener("mousemove",this.mouseMoveHandler),this.mouseUpHandler&&document.removeEventListener("mouseup",this.mouseUpHandler),this.messageHandler&&window.removeEventListener("message",this.messageHandler),this.resizeObserver&&this.resizeObserver.disconnect(),this.rootElement?.parentNode?.removeChild(this.rootElement),this.mainUrl=null,this.mainToken=void 0,this.forkQueue=[],this.currentFork=null,this.sessionToken=null,this.lastForkActive=null,this.rootElement=null,this.wrapperElement=null,this.mainFrameElement=null,this.forkFrameElement=null,this.mainIframe=null,this.forkIframe=null,this.dragHandleElement=null,this.forkExpandButton=null,this.forkToolbarElement=null,this.mainContainer=null,this.dialogBackdrop=null,this.dialogElement=null,this.dialogExpandButton=null,this.mouseMoveHandler=null,this.mouseUpHandler=null,this.resizeObserver=null,this.messageHandler=null,this.backdropClickHandler=null,this.stoppedPlaceholder=null}onUrl(t){if(this.destroyed)return;let n=t.fork||"";if(t.stopped){this.handleStoppedMessage(n),this.saveState();return}if(t.done){this.handleDoneMessage(n),this.saveState();return}t.url&&(n?this.handleForkUrl(t.url,t.token,n):this.handleMainUrl(t.url,t.token),this.saveState())}handleSessionComplete(){this.currentFork=null,this.forkQueue=[],this.forkDisplay.mode==="side-by-side"?this.updateSideBySideVisibility():this.forkDisplay.mode==="dialog"&&this.updateDialogVisibility()}handleDoneMessage(t){t&&(this.forkQueue=this.forkQueue.filter(n=>n.fork!==t&&!n.completed),this.currentFork?.fork===t?this.forkQueue.length>0?(this.currentFork=null,this.activateNextFork()):this.currentFork.completed=!0:this.forkDisplay.mode==="dialog"&&this.updateDialogVisibility())}handleStoppedMessage(t){if(!t){this.mainUrl=null,this.mainToken=void 0,this.mainIframe&&(this.mainIframe.src="about:blank",this.mainIframe.classList.remove("mb-adapt__iframe--visible"),this.mainIframe.classList.add("mb-adapt__iframe--hidden")),this.showStoppedPlaceholder();return}this.forkQueue=this.forkQueue.filter(n=>n.fork!==t),this.currentFork?.fork===t?(this.currentFork=null,this.forkQueue.length>0?this.activateNextFork():(this.forkIframe&&(this.forkIframe.src="about:blank",this.forkIframe.classList.remove("mb-adapt__iframe--visible"),this.forkIframe.classList.add("mb-adapt__iframe--hidden")),this.forkDisplay.mode==="side-by-side"?this.updateSideBySideVisibility():this.updateDialogVisibility())):this.forkDisplay.mode==="dialog"&&this.updateDialogVisibility()}handleMainUrl(t,n){this.removeStoppedPlaceholder(),this.mainUrl=t,this.mainToken=n,this.updateMainIframe()}handleForkUrl(t,n,r){let o=(r.match(/\//g)||[]).length,a={url:t,token:n,fork:r,depth:o,time:Date.now()};this.mainUrl||(this.mainUrl=t,this.mainToken=n,this.updateMainIframe()),this.forkQueue.push(a),!this.currentFork||this.currentFork.completed?(this.currentFork=null,this.activateNextFork()):this.forkDisplay.mode==="side-by-side"&&(this.isResponsiveMode()&&this.responsiveShowMain?(this.responsiveShowMain=!1,this.updateSideBySideVisibility()):this.splitPercentage>=100&&(this.splitPercentage=this.forkDisplay.split??50,this.updateSideBySideVisibility()))}activateNextFork(){this.forkQueue.length!==0&&(this.forkQueue.sort((t,n)=>t.depth!==n.depth?n.depth-t.depth:n.time-t.time),this.currentFork=this.forkQueue.shift(),this.updateForkIframe(),this.forkDisplay.mode==="dialog"?this.updateDialogVisibility():(this.isResponsiveMode()?this.responsiveShowMain=!1:this.splitPercentage>=100&&(this.splitPercentage=this.forkDisplay.split??50),this.updateSideBySideVisibility()),this.saveState())}updateMainIframe(){if(!this.rootElement||!this.mainUrl||!this.mainIframe)return;let t=Ft(this.mainUrl,this.mainToken);this.mainIframe.src!==t&&(this.mainIframe.src=t),this.showIframe(this.mainIframe),this.forkDisplay.mode==="side-by-side"&&this.updateSideBySideVisibility()}updateForkIframe(){if(!this.currentFork||!this.forkIframe)return;let t=Ft(this.currentFork.url,this.currentFork.token),n=this.forkIframe.parentElement;if(n){let r=this.createHiddenIframe();n.replaceChild(r,this.forkIframe),this.forkIframe=r}this.forkIframe.src=t,this.showIframe(this.forkIframe)}createSideBySideStructure(){this.wrapperElement||(this.rootElement.innerHTML="",this.wrapperElement=document.createElement("div"),this.wrapperElement.className=this.options.classNames?.wrapper||"mb-adapt__wrapper",this.mainFrameElement=document.createElement("div"),this.mainFrameElement.className=this.options.classNames?.frameMain||`${this.options.classNames?.frame||"mb-adapt__frame"} mb-adapt__frame--main`,this.mainFrameElement.classList.add("mb-adapt__frame--hidden"),this.forkFrameElement=document.createElement("div"),this.forkFrameElement.className=this.options.classNames?.frameFork||`${this.options.classNames?.frame||"mb-adapt__frame"} mb-adapt__frame--fork`,this.forkFrameElement.classList.add("mb-adapt__frame--hidden"),this.mainIframe||(this.mainIframe=this.createHiddenIframe()),this.forkIframe||(this.forkIframe=this.createHiddenIframe()),this.forkIframe.style.borderRadius="",this.mainFrameElement.appendChild(this.mainIframe),this.forkToolbarElement=this.createForkToolbar(),this.forkFrameElement.classList.add("mb-adapt__frame--has-toolbar"),this.forkFrameElement.appendChild(this.forkToolbarElement),this.forkFrameElement.appendChild(this.forkIframe),this.dragHandleElement=document.createElement("div"),this.dragHandleElement.className=this.options.classNames?.dragHandle||"mb-adapt__drag-handle",this.dragHandleElement.classList.add("mb-adapt__frame--hidden"),this.dragHandleElement.style.transform="translateX(-50%)",this.dragHandleElement.addEventListener("mousedown",t=>{t.preventDefault(),this.isDragging=!0,this.mainFrameElement&&(this.mainFrameElement.style.transition="none"),this.forkFrameElement&&(this.forkFrameElement.style.transition="none"),this.dragHandleElement&&(this.dragHandleElement.style.transition="none");let n=document.createElement("div");n.className="mb-adapt__drag-overlay",n.id="mb-adapt-drag-overlay",this.rootElement.appendChild(n),[this.mainFrameElement,this.forkFrameElement].forEach(r=>{if(r){let o=document.createElement("div");o.className="mb-adapt__iframe-overlay",r.appendChild(o)}})}),this.forkExpandButton=document.createElement("button"),this.forkExpandButton.className=this.options.classNames?.expandButton||"mb-adapt__expand-button",this.forkExpandButton.classList.add("mb-adapt__expand-button--right"),this.forkExpandButton.innerHTML="\u2039",this.forkExpandButton.setAttribute("aria-label","Expand fork frame"),this.forkExpandButton.setAttribute("title","Expand fork frame"),this.forkExpandButton.addEventListener("click",()=>{this.isResponsiveMode()?this.responsiveShowMain=!1:this.splitPercentage=50,this.updateSideBySideVisibility(),this.saveState()}),this.wrapperElement.appendChild(this.mainFrameElement),this.wrapperElement.appendChild(this.forkFrameElement),this.wrapperElement.appendChild(this.dragHandleElement),this.wrapperElement.appendChild(this.forkExpandButton),this.rootElement.appendChild(this.wrapperElement))}isResponsiveMode(){return this.rootElement?this.rootElement.offsetWidth<e.RESPONSIVE_BREAKPOINT:!1}emitForkActive(){if(!this.options.onForkActive)return;let t;this.currentFork?this.forkDisplay.mode==="dialog"?t=!0:t=100-this.splitPercentage>=e.COLLAPSE_THRESHOLD&&!this.isResponsiveMode():t=!1,t!==this.lastForkActive&&(this.lastForkActive=t,this.options.onForkActive(t))}updateSideBySideVisibility(){if(!this.mainFrameElement||!this.forkFrameElement||!this.dragHandleElement)return;if(!this.currentFork){this.mainFrameElement.style.width="100%",this.mainFrameElement.classList.remove("mb-adapt__frame--hidden"),this.forkFrameElement.classList.add("mb-adapt__frame--hidden"),this.mainFrameElement.style.paddingRight="",this.dragHandleElement.classList.add("mb-adapt__frame--hidden"),this.forkExpandButton.classList.remove("mb-adapt__expand-button--visible"),this.emitForkActive();return}if(this.isResponsiveMode()){this.dragHandleElement.classList.add("mb-adapt__frame--hidden"),this.responsiveShowMain?(this.mainFrameElement.style.width="100%",this.mainFrameElement.classList.remove("mb-adapt__frame--hidden"),this.forkFrameElement.style.width="0%",this.forkFrameElement.classList.add("mb-adapt__frame--hidden"),this.forkExpandButton.classList.add("mb-adapt__expand-button--visible"),this.mainFrameElement.style.paddingRight="24px"):(this.mainFrameElement.style.width="0%",this.mainFrameElement.classList.add("mb-adapt__frame--hidden"),this.forkFrameElement.style.width="100%",this.forkFrameElement.classList.remove("mb-adapt__frame--hidden"),this.forkExpandButton.classList.remove("mb-adapt__expand-button--visible"),this.mainFrameElement.style.paddingRight=""),this.emitForkActive();return}this.responsiveShowMain=!1;let t=this.splitPercentage,n=100-this.splitPercentage,r=t<e.COLLAPSE_THRESHOLD,o=n<e.COLLAPSE_THRESHOLD;this.mainFrameElement.style.width=r?"0%":`${t}%`,r?this.mainFrameElement.classList.add("mb-adapt__frame--hidden"):this.mainFrameElement.classList.remove("mb-adapt__frame--hidden"),this.forkFrameElement.style.width=o?"0%":`${n}%`,o?this.forkFrameElement.classList.add("mb-adapt__frame--hidden"):this.forkFrameElement.classList.remove("mb-adapt__frame--hidden"),this.dragHandleElement.style.left=`${this.splitPercentage}%`,this.dragHandleElement.classList.remove("mb-adapt__frame--hidden"),r||o?this.dragHandleElement.classList.add("mb-adapt__drag-handle--disabled"):this.dragHandleElement.classList.remove("mb-adapt__drag-handle--disabled"),o?(this.forkExpandButton.classList.add("mb-adapt__expand-button--visible"),this.mainFrameElement.style.paddingRight="24px"):(this.forkExpandButton.classList.remove("mb-adapt__expand-button--visible"),this.mainFrameElement.style.paddingRight=""),this.emitForkActive()}updateSideBySideWidths(){if(!this.mainFrameElement||!this.forkFrameElement||!this.dragHandleElement)return;let t=this.splitPercentage,n=100-this.splitPercentage;this.mainFrameElement.style.width=`${t}%`,this.forkFrameElement.style.width=`${n}%`,this.dragHandleElement.style.left=`${this.splitPercentage}%`}createForkToolbar(){let t=document.createElement("div");t.className=this.options.classNames?.toolbar||"mb-adapt__toolbar";let n=document.createElement("div");n.className="mb-adapt__toolbar-actions";let r=document.createElement("button");r.className=this.options.classNames?.toolbarButton||"mb-adapt__toolbar-btn",r.setAttribute("aria-label","Minimize fork"),r.setAttribute("title","Minimize"),r.innerHTML='<svg viewBox="0 0 16 16"><line x1="3" y1="8" x2="13" y2="8"/></svg>',r.addEventListener("click",()=>{this.handleForkMinimize()});let o=document.createElement("button");return o.className=`${this.options.classNames?.toolbarButton||"mb-adapt__toolbar-btn"} mb-adapt__toolbar-btn--exit`,o.setAttribute("aria-label","Close fork"),o.setAttribute("title","Close"),o.innerHTML='<svg viewBox="0 0 16 16"><line x1="4" y1="4" x2="12" y2="12"/><line x1="12" y1="4" x2="4" y2="12"/></svg>',o.addEventListener("click",()=>{this.handleForkExit()}),n.appendChild(r),n.appendChild(o),t.appendChild(n),t}handleForkMinimize(){this.currentFork&&(this.forkDisplay.mode==="side-by-side"?(this.isResponsiveMode()&&(this.responsiveShowMain=!0),this.splitPercentage=100,this.updateSideBySideVisibility()):(this.forkQueue.unshift(this.currentFork),this.currentFork=null,this.updateDialogVisibility()),this.saveState())}handleForkExit(){if(!this.currentFork)return;let t=this.currentFork.fork;this.sessionToken&&this.client.stop(this.sessionToken,t).catch(()=>{}),this.forkQueue=this.forkQueue.filter(n=>n.fork!==t),this.currentFork=null,this.forkQueue.length>0?this.activateNextFork():(this.forkIframe&&(this.forkIframe.src="about:blank",this.forkIframe.classList.remove("mb-adapt__iframe--visible"),this.forkIframe.classList.add("mb-adapt__iframe--hidden")),this.forkDisplay.mode==="side-by-side"?this.updateSideBySideVisibility():this.updateDialogVisibility()),this.saveState()}createDialogStructure(){if(this.mainContainer)return;this.rootElement.innerHTML="",this.mainContainer=document.createElement("div"),this.mainContainer.className="mb-adapt__main-container",this.mainIframe||(this.mainIframe=this.createHiddenIframe()),this.mainContainer.appendChild(this.mainIframe),this.dialogExpandButton=document.createElement("button"),this.dialogExpandButton.className=this.options.classNames?.expandButton||"mb-adapt__expand-button",this.dialogExpandButton.classList.add("mb-adapt__expand-button--dialog"),this.dialogExpandButton.innerHTML="\u2304",this.dialogExpandButton.setAttribute("aria-label","Open fork dialog"),this.dialogExpandButton.setAttribute("title","Open fork dialog"),this.dialogExpandButton.addEventListener("click",()=>{this.activateNextFork()}),this.dialogBackdrop=document.createElement("div"),this.dialogBackdrop.className=this.options.classNames?.dialogBackdrop||"mb-adapt__dialog-backdrop",this.forkDisplay.mode==="dialog"&&this.forkDisplay.backdropClose&&(this.backdropClickHandler=()=>{this.handleForkMinimize()},this.dialogBackdrop.addEventListener("click",this.backdropClickHandler)),this.dialogElement=document.createElement("div"),this.dialogElement.className=this.options.classNames?.dialog||"mb-adapt__dialog",this.forkDisplay.mode==="dialog"&&this.forkDisplay.resizeToContent&&window.innerWidth>e.DIALOG_FULLSCREEN_BREAKPOINT&&(this.dialogElement.style.height="min(var(--mb-adapt-dialog-min-height), 90vh)"),this.forkToolbarElement=this.createForkToolbar(),this.dialogElement.appendChild(this.forkToolbarElement);let t=document.createElement("div");t.style.flex="1",t.style.overflow="auto",t.style.minHeight="0",t.style.padding="12px",this.forkIframe||(this.forkIframe=this.createHiddenIframe()),this.forkIframe.style.borderRadius="0",t.appendChild(this.forkIframe),this.dialogElement.appendChild(t),this.mainContainer.appendChild(this.dialogExpandButton),this.rootElement.appendChild(this.mainContainer),this.rootElement.appendChild(this.dialogBackdrop),this.rootElement.appendChild(this.dialogElement)}updateDialogVisibility(){if(!this.dialogExpandButton||!this.dialogBackdrop||!this.dialogElement)return;let t=this.forkQueue.length>0,n=this.currentFork!==null;!n&&t?(this.dialogExpandButton.classList.add("mb-adapt__expand-button--visible"),this.mainContainer.style.paddingTop="26px"):(this.dialogExpandButton.classList.remove("mb-adapt__expand-button--visible"),this.mainContainer.style.paddingTop=""),n?(this.dialogBackdrop.classList.add("mb-adapt__dialog-backdrop--visible"),this.dialogElement.classList.add("mb-adapt__dialog--visible")):(this.dialogBackdrop.classList.remove("mb-adapt__dialog-backdrop--visible"),this.dialogElement.classList.remove("mb-adapt__dialog--visible"),this.dialogElement.style.height=""),this.emitForkActive()}createHiddenIframe(){let t=document.createElement("iframe");return t.className=this.options.classNames?.iframe||"mb-adapt__iframe",t.setAttribute("sandbox","allow-downloads allow-same-origin allow-scripts allow-popups allow-forms allow-modals"),t.setAttribute("allow","geolocation; accelerometer; midi; microphone; camera; magnetometer; gyroscope; fullscreen; payment;"),t.src="about:blank",t.addEventListener("load",()=>{t.src&&t.src!=="about:blank"&&(this.sendDarkModeToIframe(t),this.sendAutoResizingToIframe(t))}),t}showStoppedPlaceholder(){if(!this.mainFrameElement&&!this.mainContainer)return;this.removeStoppedPlaceholder(),this.stoppedPlaceholder=document.createElement("div"),this.stoppedPlaceholder.className="mb-adapt__stopped-placeholder",this.stoppedPlaceholder.textContent="This session has been stopped",(this.mainFrameElement||this.mainContainer).appendChild(this.stoppedPlaceholder)}removeStoppedPlaceholder(){this.stoppedPlaceholder&&(this.stoppedPlaceholder.remove(),this.stoppedPlaceholder=null)}showIframe(t){t.classList.remove("mb-adapt__iframe--hidden"),t.offsetHeight,t.classList.add("mb-adapt__iframe--visible")}};return Ja(Es);})();
|
|
676
|
+
`,_e=class e{constructor(t){this.rootElement=null;this.mainUrl=null;this.forkQueue=[];this.currentFork=null;this.sessionToken=null;this.isDragging=!1;this.responsiveShowMain=!1;this.wrapperElement=null;this.mainFrameElement=null;this.forkFrameElement=null;this.mainIframe=null;this.forkIframe=null;this.dragHandleElement=null;this.forkExpandButton=null;this.forkToolbarElement=null;this.mainContainer=null;this.dialogBackdrop=null;this.dialogElement=null;this.dialogExpandButton=null;this.mouseMoveHandler=null;this.mouseUpHandler=null;this.resizeObserver=null;this.messageHandler=null;this.backdropClickHandler=null;this.destroyed=!1;this.lastForkActive=null;this.stoppedPlaceholder=null;this.capWidgetInstance=null;this.options=t;let n=t.forkDisplay??{mode:"side-by-side"};n.mode==="dialog"?this.forkDisplay={...n,resizeToContent:n.resizeToContent??!0,backdropClose:n.backdropClose??!0}:this.forkDisplay=n,this.splitPercentage=this.forkDisplay.mode==="side-by-side"?this.forkDisplay.split??50:50,this.darkMode=t.darkMode??!1,this.autoResizing=t.autoResizing??!1;let r=typeof t.container=="string"?document.getElementById(t.container):t.container;if(!r)throw new Error(`Container with id '${t.container}' not found`);this.container=r;let o=Un({id:t.id});this.client=fa(o,t.id),this.injectDefaultStyles(),this.createRootElement(),this.createInitialStructure(),this.setupDragListeners(),this.setupResizeObserver(),this.setupMessageListener(),this.init()}static{this.COLLAPSE_THRESHOLD=15}static{this.RESPONSIVE_BREAKPOINT=900}static{this.DIALOG_FULLSCREEN_BREAKPOINT=639}createInitialStructure(){this.forkDisplay.mode==="dialog"?this.createDialogStructure():this.createSideBySideStructure()}setupResizeObserver(){this.rootElement&&(this.resizeObserver=new ResizeObserver(()=>{this.forkDisplay.mode==="side-by-side"&&this.currentFork&&this.updateSideBySideVisibility(),this.forkDisplay.mode==="dialog"&&this.dialogElement&&window.innerWidth<=e.DIALOG_FULLSCREEN_BREAKPOINT&&(this.dialogElement.style.height="")}),this.resizeObserver.observe(this.rootElement))}getOrigin(t){try{return new URL(t).origin}catch{return null}}isValidMessageOrigin(t){if(this.mainUrl){let n=this.getOrigin(this.mainUrl);if(n&&t===n)return!0}if(this.currentFork?.url){let n=this.getOrigin(this.currentFork.url);if(n&&t===n)return!0}return!1}setupMessageListener(){this.messageHandler=t=>{if(!this.isValidMessageOrigin(t.origin))return;let n=t.data;if(!n||typeof n!="object"||n.type!=="adapt-resize")return;let{height:r}=n;if(typeof r!="number"||!Number.isFinite(r)||r<1)return;let o=t.source;if(this.mainIframe?.contentWindow===o)this.autoResizing&&(this.mainIframe.style.height=`${r}px`);else if(this.forkIframe?.contentWindow===o&&(this.autoResizing&&(this.forkIframe.style.height=`${r}px`),this.forkDisplay.mode==="dialog"&&this.forkDisplay.resizeToContent&&this.dialogElement&&window.innerWidth>e.DIALOG_FULLSCREEN_BREAKPOINT)){let a=this.forkToolbarElement?.offsetHeight??36,u=Math.ceil(r)+a+24+2;this.dialogElement.style.height=`clamp(300px, ${u}px, 90vh)`}},window.addEventListener("message",this.messageHandler)}sendDarkModeToIframe(t){if(!t)return;let n=t.src,r=n?this.getOrigin(n):null;if(!r)return;let o={type:"adapt-darkMode",darkMode:this.darkMode};try{t.contentWindow?.postMessage(o,r)}catch{}}sendAutoResizingToIframe(t){if(!t)return;let n=t.src,r=n?this.getOrigin(n):null;if(!r)return;let o=this.autoResizing;t===this.forkIframe&&this.forkDisplay.mode==="dialog"&&this.forkDisplay.resizeToContent&&(o=!0);let a={type:"adapt-autoResizing",autoResizing:o};try{t.contentWindow?.postMessage(a,r)}catch{}}sendAutoResizingToForkIframe(t){if(!this.forkIframe)return;let n=this.forkIframe.src,r=n?this.getOrigin(n):null;if(!r)return;let o={type:"adapt-autoResizing",autoResizing:t};try{this.forkIframe.contentWindow?.postMessage(o,r)}catch{}}setDarkMode(t){this.darkMode!==t&&(this.darkMode=t,this.rootElement&&(t?this.rootElement.classList.add("mb-adapt--dark"):this.rootElement.classList.remove("mb-adapt--dark")),this.capWidgetInstance?.setDarkMode(t),this.sendDarkModeToIframe(this.mainIframe),this.sendDarkModeToIframe(this.forkIframe))}setAutoResizing(t){this.autoResizing!==t&&(this.autoResizing=t,this.sendAutoResizingToIframe(this.mainIframe),this.sendAutoResizingToIframe(this.forkIframe),t||(this.mainIframe&&(this.mainIframe.style.height=""),this.forkIframe&&(this.forkIframe.style.height="")))}setForkDisplayMode(t){this.forkDisplay.mode!==t&&(t==="side-by-side"?this.forkDisplay={mode:"side-by-side",split:this.splitPercentage}:this.forkDisplay={mode:"dialog",resizeToContent:!0,backdropClose:!0},this.mainIframe?.parentNode&&this.mainIframe.parentNode.removeChild(this.mainIframe),this.forkIframe?.parentNode&&this.forkIframe.parentNode.removeChild(this.forkIframe),this.rootElement&&(this.rootElement.innerHTML=""),this.wrapperElement=null,this.mainFrameElement=null,this.forkFrameElement=null,this.dragHandleElement=null,this.forkExpandButton=null,this.forkToolbarElement=null,this.mainContainer=null,this.dialogBackdrop=null,this.dialogElement=null,this.dialogExpandButton=null,this.backdropClickHandler=null,t==="dialog"?this.createDialogStructure():this.createSideBySideStructure(),t==="side-by-side"?this.updateSideBySideVisibility():this.updateDialogVisibility(),this.mainUrl&&this.mainIframe&&this.showIframe(this.mainIframe),this.currentFork&&this.forkIframe&&this.showIframe(this.forkIframe),this.autoResizing&&(this.sendAutoResizingToIframe(this.mainIframe),this.sendAutoResizingToIframe(this.forkIframe)),t==="side-by-side"&&!this.currentFork&&this.forkQueue.length>0&&this.activateNextFork())}setDialogBackdropClose(t){this.forkDisplay.mode==="dialog"&&this.forkDisplay.backdropClose!==t&&(this.forkDisplay={...this.forkDisplay,backdropClose:t},this.dialogBackdrop&&(this.backdropClickHandler&&(this.dialogBackdrop.removeEventListener("click",this.backdropClickHandler),this.backdropClickHandler=null),t&&(this.backdropClickHandler=()=>{this.handleForkMinimize()},this.dialogBackdrop.addEventListener("click",this.backdropClickHandler))))}setDialogResizeToContent(t){this.forkDisplay.mode==="dialog"&&this.forkDisplay.resizeToContent!==t&&(this.forkDisplay={...this.forkDisplay,resizeToContent:t},t?this.sendAutoResizingToForkIframe(!0):(this.dialogElement&&(this.dialogElement.style.height=""),this.autoResizing||this.sendAutoResizingToForkIframe(!1)))}setupDragListeners(){let t=this.splitPercentage,n=!1,r=a=>{if(!this.isDragging||!this.rootElement)return;let i=this.rootElement.getBoundingClientRect();if(i.width===0)return;t=(a.clientX-i.left)/i.width*100;let u=t,m=100-t;u<e.COLLAPSE_THRESHOLD?n||(n=!0,this.splitPercentage=0,this.updateSideBySideVisibility()):m<e.COLLAPSE_THRESHOLD?n||(n=!0,this.splitPercentage=100,this.updateSideBySideVisibility()):(n=!1,this.splitPercentage=Math.max(e.COLLAPSE_THRESHOLD,Math.min(100-e.COLLAPSE_THRESHOLD,t)),this.updateSideBySideWidths())},o=()=>{this.isDragging&&(this.isDragging=!1,n=!1,document.getElementById("mb-adapt-drag-overlay")?.remove(),this.rootElement?.querySelectorAll(".mb-adapt__iframe-overlay").forEach(a=>a.remove()),this.mainFrameElement&&(this.mainFrameElement.style.transition=""),this.forkFrameElement&&(this.forkFrameElement.style.transition=""),this.dragHandleElement&&(this.dragHandleElement.style.transition=""),this.splitPercentage!==0&&this.splitPercentage!==100&&t>=e.COLLAPSE_THRESHOLD&&100-t>=e.COLLAPSE_THRESHOLD&&(this.splitPercentage=t),t=this.splitPercentage,this.saveState())};this.mouseMoveHandler=r,this.mouseUpHandler=o,document.addEventListener("mousemove",this.mouseMoveHandler),document.addEventListener("mouseup",this.mouseUpHandler)}injectDefaultStyles(){if(document.getElementById("mb-adapt-styles"))return;let t=document.createElement("style");t.id="mb-adapt-styles",t.textContent=Ws,document.head.appendChild(t)}createRootElement(){this.rootElement=document.createElement("div"),this.rootElement.className=this.options.classNames?.root||"mb-adapt",this.darkMode&&this.rootElement.classList.add("mb-adapt--dark"),this.options.styles&&Object.assign(this.rootElement.style,this.options.styles),this.container.appendChild(this.rootElement)}parseInheritToken(){let t=this.options.inheritFrom;return t?"hash"in t?this.parseFromHash(t.hash):this.parseFromParam(t.param):null}parseFromHash(t){let n=window.location.hash.slice(1);if(!n)return null;let r=new URLSearchParams(n),o=r.get(t);if(!o)return null;r.delete(t);let a=r.toString(),i=window.location.pathname+window.location.search+(a?"#"+a:"");return history.replaceState(null,"",i),decodeURIComponent(o)}parseFromParam(t){let n=new URLSearchParams(window.location.search),r=n.get(t);if(!r)return null;n.delete(t);let o=n.toString(),a=window.location.pathname+(o?"?"+o:"")+window.location.hash;return history.replaceState(null,"",a),decodeURIComponent(r)}async init(){let t={onUrl:n=>this.onUrl(n),onSession:n=>{n.status==="STATUS_COMPLETED"&&!n.fork&&this.handleSessionComplete(),!n.fork&&(n.status==="STATUS_COMPLETED"||n.status==="STATUS_STOPPED"||n.status==="STATUS_ERRORED")&&this.clearState(),this.options.onSession&&this.options.onSession(n.status||"STATUS_UNSPECIFIED",n.fork)}};if(this.options.onOutput&&(t.onOutput=this.options.onOutput),!(!this.options.sessionToken&&this.resolvePersistOptions()&&await this.tryRestoreSession(t)))if(this.options.sessionToken)this.sessionToken=this.options.sessionToken,await this.client.subscribe(this.sessionToken,t);else{let n=this.parseInheritToken(),r=n||this.options.inheritToken;if(this.options.inheritFrom&&!n){let i="hash"in this.options.inheritFrom?`hash key '${this.options.inheritFrom.hash}'`:`param '${this.options.inheritFrom.param}'`;console.error(`[AdaptWebClient] No inherit token found in URL ${i}`);return}let o=this.options.challengeToken;if(this.options.requiresChallenge&&!o&&!r&&(o=await this.showCapWidgetAndSolve(),!o)){console.error("[AdaptWebClient] Failed to solve challenge");return}let a;if(r)a=await this.client.runInherit(r,t);else{let i={...t};this.options.transmitter!==void 0&&(i.transmitter=this.options.transmitter),this.options.signals!==void 0&&(i.signals=this.options.signals),this.options.authToken!==void 0&&(i.authToken=this.options.authToken),o!==void 0&&(i.challengeToken=o),a=await this.client.run(i)}this.sessionToken=a.sessionToken,this.sessionExpiresAt=a.expiresAt,this.saveState()}}async showCapWidgetAndSolve(){return new Promise(t=>{this.capWidgetInstance=new ie({container:this.rootElement,automationId:this.options.id,client:this.client.raw,...this.options.capWidgetOptions?.workerCount!==void 0&&{workerCount:this.options.capWidgetOptions.workerCount},...this.options.capWidgetOptions?.i18n&&{i18n:this.options.capWidgetOptions.i18n},onSolve:n=>{this.capWidgetInstance=null,t(n)},onError:n=>{console.error("[AdaptWebClient] Cap.js error:",n),this.capWidgetInstance=null,t(void 0)}}),this.darkMode&&this.capWidgetInstance.setDarkMode(!0)})}destroyCapWidget(){this.capWidgetInstance&&(this.capWidgetInstance.destroy(),this.capWidgetInstance=null)}resolvePersistOptions(){let t=this.options.persist;return t?t===!0?{storage:"session",ttl:3600}:{storage:t.storage??"session",ttl:t.ttl??3600}:null}getStorageKey(){return`mb_adapt_${this.options.id}`}getStorage(){let t=this.resolvePersistOptions();return t?t.storage==="local"?localStorage:sessionStorage:null}saveState(){let t=this.getStorage();if(!t||!this.sessionToken)return;let n=this.resolvePersistOptions(),r={v:1,token:this.sessionToken,expiresAt:this.sessionExpiresAt?this.sessionExpiresAt.toISOString():null,savedAt:Date.now(),ttl:n.ttl,mainUrl:this.mainUrl,mainToken:this.mainToken,currentFork:this.currentFork?{url:this.currentFork.url,token:this.currentFork.token,fork:this.currentFork.fork,depth:this.currentFork.depth,time:this.currentFork.time,completed:this.currentFork.completed}:null,forkQueue:this.forkQueue.map(o=>({url:o.url,token:o.token,fork:o.fork,depth:o.depth,time:o.time,completed:o.completed})),forkDisplayMode:this.forkDisplay.mode,splitPercentage:this.splitPercentage};t.setItem(this.getStorageKey(),JSON.stringify(r))}loadState(){let t=this.getStorage();if(!t)return null;let n=t.getItem(this.getStorageKey());if(!n)return null;let r;try{r=JSON.parse(n)}catch{return this.clearState(),null}if(r.v!==1)return this.clearState(),null;let o=Date.now(),a=3e4;if(o-r.savedAt>r.ttl*1e3+a)return this.clearState(),null;if(r.expiresAt){let i=new Date(r.expiresAt).getTime();if(o>i+a)return this.clearState(),null}return r}clearState(){let t=this.getStorage();t&&t.removeItem(this.getStorageKey())}async tryRestoreSession(t){let n=this.loadState();if(!n)return!1;if(this.sessionToken=n.token,this.sessionExpiresAt=n.expiresAt?new Date(n.expiresAt):void 0,this.mainUrl=n.mainUrl,this.mainToken=n.mainToken,this.forkQueue=n.forkQueue,this.currentFork=n.currentFork,n.forkDisplayMode===this.forkDisplay.mode&&this.forkDisplay.mode==="side-by-side"&&(this.splitPercentage=n.splitPercentage),this.mainUrl&&this.mainIframe){let r=Ft(this.mainUrl,this.mainToken);this.mainIframe.src!==r&&(this.mainIframe.src=r),this.showIframe(this.mainIframe)}this.currentFork&&this.forkIframe&&this.updateForkIframe(),this.forkDisplay.mode==="dialog"?this.updateDialogVisibility():this.updateSideBySideVisibility(),t.onSession?.({status:"STATUS_RUNNING"});try{await this.client.subscribe(n.token,t)}catch{return this.clearState(),this.sessionToken=null,this.sessionExpiresAt=void 0,this.mainUrl=null,this.mainToken=void 0,this.forkQueue=[],this.currentFork=null,this.mainIframe&&(this.mainIframe.src="about:blank",this.mainIframe.classList.remove("mb-adapt__iframe--visible")),this.forkIframe&&(this.forkIframe.src="about:blank",this.forkIframe.classList.remove("mb-adapt__iframe--visible"),this.forkIframe.classList.add("mb-adapt__iframe--hidden")),this.forkDisplay.mode==="side-by-side"?this.updateSideBySideVisibility():this.updateDialogVisibility(),!1}return!0}async newSession(){this.clearState(),this.sessionToken&&this.client.stop(this.sessionToken).catch(()=>{}),await this.client.unsubscribe(),this.mainUrl=null,this.mainToken=void 0,this.forkQueue=[],this.currentFork=null,this.sessionToken=null,this.sessionExpiresAt=void 0,this.lastForkActive=null,this.mainIframe&&(this.mainIframe.src="about:blank",this.mainIframe.classList.remove("mb-adapt__iframe--visible")),this.forkIframe&&(this.forkIframe.src="about:blank",this.forkIframe.classList.remove("mb-adapt__iframe--visible"),this.forkIframe.classList.add("mb-adapt__iframe--hidden")),this.removeStoppedPlaceholder(),this.forkDisplay.mode==="side-by-side"?this.updateSideBySideVisibility():this.updateDialogVisibility(),await this.init()}async destroy(){this.destroyed=!0,this.destroyCapWidget(),this.sessionToken&&!this.loadState()&&this.client.stop(this.sessionToken).catch(()=>{}),await this.client.unsubscribe(),this.mouseMoveHandler&&document.removeEventListener("mousemove",this.mouseMoveHandler),this.mouseUpHandler&&document.removeEventListener("mouseup",this.mouseUpHandler),this.messageHandler&&window.removeEventListener("message",this.messageHandler),this.resizeObserver&&this.resizeObserver.disconnect(),this.rootElement?.parentNode?.removeChild(this.rootElement),this.mainUrl=null,this.mainToken=void 0,this.forkQueue=[],this.currentFork=null,this.sessionToken=null,this.lastForkActive=null,this.rootElement=null,this.wrapperElement=null,this.mainFrameElement=null,this.forkFrameElement=null,this.mainIframe=null,this.forkIframe=null,this.dragHandleElement=null,this.forkExpandButton=null,this.forkToolbarElement=null,this.mainContainer=null,this.dialogBackdrop=null,this.dialogElement=null,this.dialogExpandButton=null,this.mouseMoveHandler=null,this.mouseUpHandler=null,this.resizeObserver=null,this.messageHandler=null,this.backdropClickHandler=null,this.stoppedPlaceholder=null}onUrl(t){if(this.destroyed)return;let n=t.fork||"";if(t.stopped){this.handleStoppedMessage(n),this.saveState();return}if(t.done){this.handleDoneMessage(n),this.saveState();return}t.url&&(n?this.handleForkUrl(t.url,t.token,n):this.handleMainUrl(t.url,t.token),this.saveState())}handleSessionComplete(){this.currentFork=null,this.forkQueue=[],this.forkDisplay.mode==="side-by-side"?this.updateSideBySideVisibility():this.forkDisplay.mode==="dialog"&&this.updateDialogVisibility()}handleDoneMessage(t){t&&(this.forkQueue=this.forkQueue.filter(n=>n.fork!==t&&!n.completed),this.currentFork?.fork===t?this.forkQueue.length>0?(this.currentFork=null,this.activateNextFork()):this.currentFork.completed=!0:this.forkDisplay.mode==="dialog"&&this.updateDialogVisibility())}handleStoppedMessage(t){if(!t){this.mainUrl=null,this.mainToken=void 0,this.mainIframe&&(this.mainIframe.src="about:blank",this.mainIframe.classList.remove("mb-adapt__iframe--visible"),this.mainIframe.classList.add("mb-adapt__iframe--hidden")),this.showStoppedPlaceholder();return}this.forkQueue=this.forkQueue.filter(n=>n.fork!==t),this.currentFork?.fork===t?(this.currentFork=null,this.forkQueue.length>0?this.activateNextFork():(this.forkIframe&&(this.forkIframe.src="about:blank",this.forkIframe.classList.remove("mb-adapt__iframe--visible"),this.forkIframe.classList.add("mb-adapt__iframe--hidden")),this.forkDisplay.mode==="side-by-side"?this.updateSideBySideVisibility():this.updateDialogVisibility())):this.forkDisplay.mode==="dialog"&&this.updateDialogVisibility()}handleMainUrl(t,n){this.removeStoppedPlaceholder(),this.mainUrl=t,this.mainToken=n,this.updateMainIframe()}handleForkUrl(t,n,r){if(this.currentFork?.fork===r){this.currentFork.url=t,this.currentFork.token=n,this.currentFork.time=Date.now(),this.updateForkIframe();return}let o=this.forkQueue.find(s=>s.fork===r);if(o){o.url=t,o.token=n,o.time=Date.now();return}let a=(r.match(/\//g)||[]).length,i={url:t,token:n,fork:r,depth:a,time:Date.now()};this.mainUrl||(this.mainUrl=t,this.mainToken=n,this.updateMainIframe()),this.forkQueue.push(i),!this.currentFork||this.currentFork.completed?(this.currentFork=null,this.activateNextFork()):this.forkDisplay.mode==="side-by-side"&&(this.isResponsiveMode()&&this.responsiveShowMain?(this.responsiveShowMain=!1,this.updateSideBySideVisibility()):this.splitPercentage>=100&&(this.splitPercentage=this.forkDisplay.split??50,this.updateSideBySideVisibility()))}activateNextFork(){this.forkQueue.length!==0&&(this.forkQueue.sort((t,n)=>t.depth!==n.depth?n.depth-t.depth:n.time-t.time),this.currentFork=this.forkQueue.shift(),this.updateForkIframe(),this.forkDisplay.mode==="dialog"?this.updateDialogVisibility():(this.isResponsiveMode()?this.responsiveShowMain=!1:this.splitPercentage>=100&&(this.splitPercentage=this.forkDisplay.split??50),this.updateSideBySideVisibility()),this.saveState())}updateMainIframe(){if(!this.rootElement||!this.mainUrl||!this.mainIframe)return;let t=Ft(this.mainUrl,this.mainToken);this.mainIframe.src!==t&&(this.mainIframe.src=t),this.showIframe(this.mainIframe),this.forkDisplay.mode==="side-by-side"&&this.updateSideBySideVisibility()}updateForkIframe(){if(!this.currentFork||!this.forkIframe)return;let t=Ft(this.currentFork.url,this.currentFork.token),n=this.forkIframe.parentElement;if(n){let r=this.createHiddenIframe();n.replaceChild(r,this.forkIframe),this.forkIframe=r}this.forkIframe.src=t,this.showIframe(this.forkIframe)}createSideBySideStructure(){this.wrapperElement||(this.rootElement.innerHTML="",this.wrapperElement=document.createElement("div"),this.wrapperElement.className=this.options.classNames?.wrapper||"mb-adapt__wrapper",this.mainFrameElement=document.createElement("div"),this.mainFrameElement.className=this.options.classNames?.frameMain||`${this.options.classNames?.frame||"mb-adapt__frame"} mb-adapt__frame--main`,this.mainFrameElement.classList.add("mb-adapt__frame--hidden"),this.forkFrameElement=document.createElement("div"),this.forkFrameElement.className=this.options.classNames?.frameFork||`${this.options.classNames?.frame||"mb-adapt__frame"} mb-adapt__frame--fork`,this.forkFrameElement.classList.add("mb-adapt__frame--hidden"),this.mainIframe||(this.mainIframe=this.createHiddenIframe()),this.forkIframe||(this.forkIframe=this.createHiddenIframe()),this.forkIframe.style.borderRadius="",this.mainFrameElement.appendChild(this.mainIframe),this.forkToolbarElement=this.createForkToolbar(),this.forkFrameElement.classList.add("mb-adapt__frame--has-toolbar"),this.forkFrameElement.appendChild(this.forkToolbarElement),this.forkFrameElement.appendChild(this.forkIframe),this.dragHandleElement=document.createElement("div"),this.dragHandleElement.className=this.options.classNames?.dragHandle||"mb-adapt__drag-handle",this.dragHandleElement.classList.add("mb-adapt__frame--hidden"),this.dragHandleElement.style.transform="translateX(-50%)",this.dragHandleElement.addEventListener("mousedown",t=>{t.preventDefault(),this.isDragging=!0,this.mainFrameElement&&(this.mainFrameElement.style.transition="none"),this.forkFrameElement&&(this.forkFrameElement.style.transition="none"),this.dragHandleElement&&(this.dragHandleElement.style.transition="none");let n=document.createElement("div");n.className="mb-adapt__drag-overlay",n.id="mb-adapt-drag-overlay",this.rootElement.appendChild(n),[this.mainFrameElement,this.forkFrameElement].forEach(r=>{if(r){let o=document.createElement("div");o.className="mb-adapt__iframe-overlay",r.appendChild(o)}})}),this.forkExpandButton=document.createElement("button"),this.forkExpandButton.className=this.options.classNames?.expandButton||"mb-adapt__expand-button",this.forkExpandButton.classList.add("mb-adapt__expand-button--right"),this.forkExpandButton.innerHTML="\u2039",this.forkExpandButton.setAttribute("aria-label","Expand fork frame"),this.forkExpandButton.setAttribute("title","Expand fork frame"),this.forkExpandButton.addEventListener("click",()=>{this.isResponsiveMode()?this.responsiveShowMain=!1:this.splitPercentage=50,this.updateSideBySideVisibility(),this.saveState()}),this.wrapperElement.appendChild(this.mainFrameElement),this.wrapperElement.appendChild(this.forkFrameElement),this.wrapperElement.appendChild(this.dragHandleElement),this.wrapperElement.appendChild(this.forkExpandButton),this.rootElement.appendChild(this.wrapperElement))}isResponsiveMode(){return this.rootElement?this.rootElement.offsetWidth<e.RESPONSIVE_BREAKPOINT:!1}emitForkActive(){if(!this.options.onForkActive)return;let t;this.currentFork?this.forkDisplay.mode==="dialog"?t=!0:t=100-this.splitPercentage>=e.COLLAPSE_THRESHOLD&&!this.isResponsiveMode():t=!1,t!==this.lastForkActive&&(this.lastForkActive=t,this.options.onForkActive(t))}updateSideBySideVisibility(){if(!this.mainFrameElement||!this.forkFrameElement||!this.dragHandleElement)return;if(!this.currentFork){this.mainFrameElement.style.width="100%",this.mainFrameElement.classList.remove("mb-adapt__frame--hidden"),this.forkFrameElement.classList.add("mb-adapt__frame--hidden"),this.mainFrameElement.style.paddingRight="",this.dragHandleElement.classList.add("mb-adapt__frame--hidden"),this.forkExpandButton.classList.remove("mb-adapt__expand-button--visible"),this.emitForkActive();return}if(this.isResponsiveMode()){this.dragHandleElement.classList.add("mb-adapt__frame--hidden"),this.responsiveShowMain?(this.mainFrameElement.style.width="100%",this.mainFrameElement.classList.remove("mb-adapt__frame--hidden"),this.forkFrameElement.style.width="0%",this.forkFrameElement.classList.add("mb-adapt__frame--hidden"),this.forkExpandButton.classList.add("mb-adapt__expand-button--visible"),this.mainFrameElement.style.paddingRight="24px"):(this.mainFrameElement.style.width="0%",this.mainFrameElement.classList.add("mb-adapt__frame--hidden"),this.forkFrameElement.style.width="100%",this.forkFrameElement.classList.remove("mb-adapt__frame--hidden"),this.forkExpandButton.classList.remove("mb-adapt__expand-button--visible"),this.mainFrameElement.style.paddingRight=""),this.emitForkActive();return}this.responsiveShowMain=!1;let t=this.splitPercentage,n=100-this.splitPercentage,r=t<e.COLLAPSE_THRESHOLD,o=n<e.COLLAPSE_THRESHOLD;this.mainFrameElement.style.width=r?"0%":`${t}%`,r?this.mainFrameElement.classList.add("mb-adapt__frame--hidden"):this.mainFrameElement.classList.remove("mb-adapt__frame--hidden"),this.forkFrameElement.style.width=o?"0%":`${n}%`,o?this.forkFrameElement.classList.add("mb-adapt__frame--hidden"):this.forkFrameElement.classList.remove("mb-adapt__frame--hidden"),this.dragHandleElement.style.left=`${this.splitPercentage}%`,this.dragHandleElement.classList.remove("mb-adapt__frame--hidden"),r||o?this.dragHandleElement.classList.add("mb-adapt__drag-handle--disabled"):this.dragHandleElement.classList.remove("mb-adapt__drag-handle--disabled"),o?(this.forkExpandButton.classList.add("mb-adapt__expand-button--visible"),this.mainFrameElement.style.paddingRight="24px"):(this.forkExpandButton.classList.remove("mb-adapt__expand-button--visible"),this.mainFrameElement.style.paddingRight=""),this.emitForkActive()}updateSideBySideWidths(){if(!this.mainFrameElement||!this.forkFrameElement||!this.dragHandleElement)return;let t=this.splitPercentage,n=100-this.splitPercentage;this.mainFrameElement.style.width=`${t}%`,this.forkFrameElement.style.width=`${n}%`,this.dragHandleElement.style.left=`${this.splitPercentage}%`}createForkToolbar(){let t=document.createElement("div");t.className=this.options.classNames?.toolbar||"mb-adapt__toolbar";let n=document.createElement("div");n.className="mb-adapt__toolbar-actions";let r=document.createElement("button");r.className=this.options.classNames?.toolbarButton||"mb-adapt__toolbar-btn",r.setAttribute("aria-label","Minimize fork"),r.setAttribute("title","Minimize"),r.innerHTML='<svg viewBox="0 0 16 16"><line x1="3" y1="8" x2="13" y2="8"/></svg>',r.addEventListener("click",()=>{this.handleForkMinimize()});let o=document.createElement("button");return o.className=`${this.options.classNames?.toolbarButton||"mb-adapt__toolbar-btn"} mb-adapt__toolbar-btn--exit`,o.setAttribute("aria-label","Close fork"),o.setAttribute("title","Close"),o.innerHTML='<svg viewBox="0 0 16 16"><line x1="4" y1="4" x2="12" y2="12"/><line x1="12" y1="4" x2="4" y2="12"/></svg>',o.addEventListener("click",()=>{this.handleForkExit()}),n.appendChild(r),n.appendChild(o),t.appendChild(n),t}handleForkMinimize(){this.currentFork&&(this.forkDisplay.mode==="side-by-side"?(this.isResponsiveMode()&&(this.responsiveShowMain=!0),this.splitPercentage=100,this.updateSideBySideVisibility()):(this.forkQueue.unshift(this.currentFork),this.currentFork=null,this.updateDialogVisibility()),this.saveState())}handleForkExit(){if(!this.currentFork)return;let t=this.currentFork.fork;this.sessionToken&&this.client.stop(this.sessionToken,t).catch(()=>{}),this.forkQueue=this.forkQueue.filter(n=>n.fork!==t),this.currentFork=null,this.forkQueue.length>0?this.activateNextFork():(this.forkIframe&&(this.forkIframe.src="about:blank",this.forkIframe.classList.remove("mb-adapt__iframe--visible"),this.forkIframe.classList.add("mb-adapt__iframe--hidden")),this.forkDisplay.mode==="side-by-side"?this.updateSideBySideVisibility():this.updateDialogVisibility()),this.saveState()}createDialogStructure(){if(this.mainContainer)return;this.rootElement.innerHTML="",this.mainContainer=document.createElement("div"),this.mainContainer.className="mb-adapt__main-container",this.mainIframe||(this.mainIframe=this.createHiddenIframe()),this.mainContainer.appendChild(this.mainIframe),this.dialogExpandButton=document.createElement("button"),this.dialogExpandButton.className=this.options.classNames?.expandButton||"mb-adapt__expand-button",this.dialogExpandButton.classList.add("mb-adapt__expand-button--dialog"),this.dialogExpandButton.innerHTML="\u2304",this.dialogExpandButton.setAttribute("aria-label","Open fork dialog"),this.dialogExpandButton.setAttribute("title","Open fork dialog"),this.dialogExpandButton.addEventListener("click",()=>{this.activateNextFork()}),this.dialogBackdrop=document.createElement("div"),this.dialogBackdrop.className=this.options.classNames?.dialogBackdrop||"mb-adapt__dialog-backdrop",this.forkDisplay.mode==="dialog"&&this.forkDisplay.backdropClose&&(this.backdropClickHandler=()=>{this.handleForkMinimize()},this.dialogBackdrop.addEventListener("click",this.backdropClickHandler)),this.dialogElement=document.createElement("div"),this.dialogElement.className=this.options.classNames?.dialog||"mb-adapt__dialog",this.forkDisplay.mode==="dialog"&&this.forkDisplay.resizeToContent&&window.innerWidth>e.DIALOG_FULLSCREEN_BREAKPOINT&&(this.dialogElement.style.height="min(var(--mb-adapt-dialog-min-height), 90vh)"),this.forkToolbarElement=this.createForkToolbar(),this.dialogElement.appendChild(this.forkToolbarElement);let t=document.createElement("div");t.style.flex="1",t.style.overflow="auto",t.style.minHeight="0",t.style.padding="12px",this.forkIframe||(this.forkIframe=this.createHiddenIframe()),this.forkIframe.style.borderRadius="0",t.appendChild(this.forkIframe),this.dialogElement.appendChild(t),this.mainContainer.appendChild(this.dialogExpandButton),this.rootElement.appendChild(this.mainContainer),this.rootElement.appendChild(this.dialogBackdrop),this.rootElement.appendChild(this.dialogElement)}updateDialogVisibility(){if(!this.dialogExpandButton||!this.dialogBackdrop||!this.dialogElement)return;let t=this.forkQueue.length>0,n=this.currentFork!==null;!n&&t?(this.dialogExpandButton.classList.add("mb-adapt__expand-button--visible"),this.mainContainer.style.paddingTop="26px"):(this.dialogExpandButton.classList.remove("mb-adapt__expand-button--visible"),this.mainContainer.style.paddingTop=""),n?(this.dialogBackdrop.classList.add("mb-adapt__dialog-backdrop--visible"),this.dialogElement.classList.add("mb-adapt__dialog--visible")):(this.dialogBackdrop.classList.remove("mb-adapt__dialog-backdrop--visible"),this.dialogElement.classList.remove("mb-adapt__dialog--visible"),this.dialogElement.style.height=""),this.emitForkActive()}createHiddenIframe(){let t=document.createElement("iframe");return t.className=this.options.classNames?.iframe||"mb-adapt__iframe",t.setAttribute("sandbox","allow-downloads allow-same-origin allow-scripts allow-popups allow-forms allow-modals"),t.setAttribute("allow","geolocation; accelerometer; midi; microphone; camera; magnetometer; gyroscope; fullscreen; payment;"),t.src="about:blank",t.addEventListener("load",()=>{t.src&&t.src!=="about:blank"&&(this.sendDarkModeToIframe(t),this.sendAutoResizingToIframe(t))}),t}showStoppedPlaceholder(){if(!this.mainFrameElement&&!this.mainContainer)return;this.removeStoppedPlaceholder(),this.stoppedPlaceholder=document.createElement("div"),this.stoppedPlaceholder.className="mb-adapt__stopped-placeholder",this.stoppedPlaceholder.textContent="This session has been stopped",(this.mainFrameElement||this.mainContainer).appendChild(this.stoppedPlaceholder)}removeStoppedPlaceholder(){this.stoppedPlaceholder&&(this.stoppedPlaceholder.remove(),this.stoppedPlaceholder=null)}showIframe(t){t.classList.remove("mb-adapt__iframe--hidden"),t.offsetHeight,t.classList.add("mb-adapt__iframe--visible")}};return Ja(Es);})();
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@mochabug/adapt-web",
|
|
3
|
-
"version": "1.0.0-
|
|
3
|
+
"version": "1.0.0-rc58",
|
|
4
4
|
"description": "Browser client library for Adapt automation platform",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/esm/index.js",
|
|
@@ -48,6 +48,6 @@
|
|
|
48
48
|
},
|
|
49
49
|
"dependencies": {
|
|
50
50
|
"@cap.js/widget": "^0.1.41",
|
|
51
|
-
"@mochabug/adapt-core": "^1.0.0-
|
|
51
|
+
"@mochabug/adapt-core": "^1.0.0-rc51"
|
|
52
52
|
}
|
|
53
53
|
}
|