makethisbetter 1.26.0 → 1.26.1

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.
@@ -171,6 +171,6 @@ var MakeThisBetter=function(){"use strict";const Qe=`*,*:before,*:after{box-sizi
171
171
  </div>
172
172
  <div class="mtb-failure-title">${c(e.error.submit)}</div>
173
173
  ${n}
174
- `,t.append(this.el),r.onRetry&&this.el.querySelector(".mtb-failure-retry").addEventListener("click",r.onRetry),this.el.querySelector(".mtb-failure-close").addEventListener("click",r.onClose)}destroy(){this.el.remove()}}function un(){return{page_url:$(window.location.href),user_agent:navigator.userAgent,browser:bn(),os:mn(),screen_width:window.screen.width,screen_height:window.screen.height}}function bn(){const i=navigator.userAgent;return/Edg\//.test(i)?`Edge ${i.match(/Edg\/(\S+)/)?.[1]??""}`:/OPR\//.test(i)?`Opera ${i.match(/OPR\/(\S+)/)?.[1]??""}`:/Chrome\//.test(i)?`Chrome ${i.match(/Chrome\/(\S+)/)?.[1]??""}`:/Safari\//.test(i)&&/Version\//.test(i)?`Safari ${i.match(/Version\/(\S+)/)?.[1]??""}`:/Firefox\//.test(i)?`Firefox ${i.match(/Firefox\/(\S+)/)?.[1]??""}`:"Unknown"}function mn(){const i=navigator.userAgent;return/Windows NT 10/.test(i)?"Windows 10/11":/Windows NT/.test(i)?"Windows":/Mac OS X 10_15|macOS 1[56789]/.test(i)||/Mac OS X/.test(i)?"macOS":/Android/.test(i)?`Android ${i.match(/Android (\d+)/)?.[1]??""}`:/iPhone|iPad|iPod/.test(i)?"iOS":/Linux/.test(i)?"Linux":"Unknown"}function pn(i){const{description:t,pageContext:e,consoleErrors:r,annotation:n,user:s,recording:o,anonId:a,anonEmail:l,breadcrumbs:d}=i;return{...et({description:t,...e,page_url:$(e.page_url),console_errors:r,annotations:n?[n]:[],target_element:n?.targetSelector?{selector:n.targetSelector,text:n.targetText??"",name:n.targetName??""}:void 0,recording_events:o?.events,recording_duration:o?.duration,breadcrumbs:d}),user_id:s?.id,user_email:s?.email,user_name:s?.name,reporter_external_id:s?void 0:a,reporter_email:s?void 0:l}}const fn=300,gn=900;class yn{constructor(t,e){this.deps=t,this.host=e,this.activeSubmission=null,this.pendingSubmissionRequest=null,this.submissionAttempt=0,this.pendingBaseCapture=null,this.idleCaptureTimer=null,this.failure=null,this.screenshotEnabled=!0}isScreenshotEnabled(){return this.screenshotEnabled}resetScreenshotConsent(){this.screenshotEnabled=!0}setScreenshotEnabled(t){if(this.screenshotEnabled=t,t){this.beginBaseCapture();return}this.clearIdleCaptureTimer(),this.pendingBaseCapture=null}beginBaseCapture(){this.screenshotEnabled&&(this.pendingBaseCapture||(this.clearIdleCaptureTimer(),this.idleCaptureTimer=setTimeout(()=>{this.idleCaptureTimer=null,this.pendingBaseCapture??(this.pendingBaseCapture=oe())},gn)))}clearIdleCaptureTimer(){this.idleCaptureTimer!==null&&(clearTimeout(this.idleCaptureTimer),this.idleCaptureTimer=null)}start(t,e,r){const n=++this.submissionAttempt,s=this.createSubmission(t,e,r,n);return this.pendingSubmissionRequest=s,s}async createSubmission(t,e,r,n){if(await Pe(),n!==this.submissionAttempt)return null;this.clearIdleCaptureTimer();const s=this.screenshotEnabled?this.pendingBaseCapture??oe():null;this.pendingBaseCapture=null;const o=un(),a=await s;if(n!==this.submissionAttempt)return null;const l=a?await br(a,e?[e]:[],this.deps.brandColors):null;if(n!==this.submissionAttempt)return null;const d=pn({description:t,pageContext:o,consoleErrors:this.deps.consoleCollector.getErrors(),annotation:e,user:this.deps.user(),recording:r,anonId:ke(),anonEmail:Se(),breadcrumbs:this.deps.breadcrumbCollector.getBreadcrumbs()});try{const h=await this.deps.apiClient.createSubmissionSession(d,l);return n!==this.submissionAttempt?(await this.deps.apiClient.abandonSubmissionSession(h.id,h.token).catch(()=>{}),null):(this.activeSubmission=h,h)}catch{return null}}async finalize(){const t=this.submissionAttempt,e=this.host.isBackground(),r=this.activeSubmission??await(this.pendingSubmissionRequest??Promise.resolve(null));if(t!==this.submissionAttempt)return;if(!r){if(e)return this.showFinalizeFailure({canRetry:!1});throw new Error("No active submission session")}const n=e?Promise.resolve():new Promise(o=>setTimeout(o,fn));let s;try{s=await this.deps.apiClient.finalizeSubmissionSession(r.id,r.token)}catch(o){if(e)return this.showFinalizeFailure({canRetry:!0});throw o}await Promise.all([n,Pe()]),!(t!==this.submissionAttempt||this.activeSubmission!==r)&&(this.activeSubmission=null,this.pendingSubmissionRequest=null,this.host.onFinalized(s,r))}showFinalizeFailure(t){this.host.onReleaseForFailureCard(),this.failure?.destroy(),this.failure=new hn(this.deps.shadow(),this.deps.messages(),{onRetry:t.canRetry?()=>this.retryBackgroundFinalization():void 0,onClose:()=>this.dismissFinalizeFailure()})}retryBackgroundFinalization(){this.dismissFinalizeFailure(),this.host.onReenterBackground(),this.finalize().catch(()=>this.showFinalizeFailure({canRetry:!0}))}dismissFinalizeFailure(){this.failure?.destroy(),this.failure=null}abandon(){this.submissionAttempt+=1,this.clearIdleCaptureTimer(),this.pendingBaseCapture=null,this.resetScreenshotConsent();const t=this.activeSubmission;this.activeSubmission=null,this.pendingSubmissionRequest=null,t&&this.deps.apiClient.abandonSubmissionSession(t.id,t.token).catch(()=>{})}}function Pe(){return new Promise(i=>requestAnimationFrame(()=>setTimeout(i,0)))}function ct(i){i.preventDefault(),i.stopPropagation()}class S{constructor(t){this.host=t,this.launcherLit=!0,this.acceptsFrustrationPrompt=!1}enter(){}exit(){}handleOpen(){}handleClose(){this.host.exitAll()}handleEscape(t){}handleTabClick(){this.host.exitAll()}handleToolbarModeChange(t){}handleDrawStroke(){}}class dt extends S{constructor(){super(...arguments),this.kind="idle",this.launcherLit=!1,this.acceptsFrustrationPrompt=!0}handleOpen(){this.host.dismissFrustrationPrompt(),this.host.dismissSuccess(),this.host.transitionTo(new E(this.host))}handleClose(){}handleTabClick(){this.handleOpen()}}class E extends S{constructor(){super(...arguments),this.kind="annotating"}enter(){if(!this.host.hasAnnotationChrome()){this.host.mountAnnotationChrome();return}this.host.destroyRecordingManager(),this.host.teardownDrawBar(),this.host.ensureSession()}handleEscape(t){ct(t),this.host.exitAll()}handleToolbarModeChange(t){t==="record"?this.host.transitionTo(new Pt(this.host)):this.host.transitionTo(new E(this.host))}handleDrawStroke(){this.host.transitionTo(new vn(this.host,w()?"sheet":"bar"))}}class Pt extends S{constructor(){super(...arguments),this.kind="recording"}enter(){this.host.clearCurrentAnnotation(),this.host.teardownDrawBar(),this.host.destroySession(),this.host.startRecorder()}handleEscape(t){ct(t),this.host.stopRecordingIntoNote()}handleToolbarModeChange(t){t!=="record"&&this.host.transitionTo(new E(this.host))}}class vn extends S{constructor(t,e){super(t),this.surface=e,this.kind="drawing"}enter(){this.surface==="sheet"?this.host.mountDrawSheet():(this.host.mountDrawBar(),this.host.refreshDrawBar())}handleEscape(t){ct(t),this.host.cancelDraw()}handleToolbarModeChange(t){t==="record"?this.host.transitionTo(new Pt(this.host)):this.host.transitionTo(new E(this.host))}handleDrawStroke(){this.surface==="bar"&&this.host.refreshDrawBar()}}class Re extends S{constructor(t,e){super(t),this.opts=e,this.kind="popup"}enter(){this.host.mountNotePopup(this.opts)}handleEscape(t){ct(t),this.host.exitAll()}handleToolbarModeChange(t){t==="record"?this.host.transitionTo(new Pt(this.host)):(this.host.dismissNotePopup(),this.host.transitionTo(new E(this.host)))}}class wn extends S{constructor(t,e,r){super(t),this.pos=e,this.opts=r,this.kind="clarifying"}enter(){this.host.mountClarifyCard(this.pos,this.opts)}handleEscape(t){}handleToolbarModeChange(t){this.host.revertToolbarDuringClarify()}}class Ie extends S{constructor(){super(...arguments),this.kind="submitting",this.launcherLit=!1}enter(){this.host.releaseClarifyUi()}handleTabClick(){}}const xn=/^#[0-9a-f]{6}$/i;function kn(i){return i===void 0?void 0:typeof i!="object"||i===null||![i.primary,i.hover,i.active,i.onPrimary].every(e=>typeof e=="string"&&xn.test(e))?Me():{primary:i.primary.toLowerCase(),hover:i.hover.toLowerCase(),active:i.active.toLowerCase(),onPrimary:i.onPrimary.toLowerCase()}}function Me(){console.warn("[MakeThisBetter] brandColors requires primary, hover, active, and onPrimary as six-digit hex colors.")}function De(){const{hostname:i}=window.location;return i==="localhost"||i==="127.0.0.1"||i==="[::1]"||i.endsWith(".localhost")||i.endsWith(".local")||i.endsWith(".test")}class Sn{constructor(t){this.tab=null,this.toolbar=null,this.session=null,this.drawBar=null,this.dim=null,this.pageOffset=new oi,this.pinPopup=null,this.scrollLock=null,this.drawSheet=null,this.clarify=null,this.success=null,this.frustrationPrompt=null,this.frustrationDetector=null,this.state=new dt(this),this.via="pin",this.currentAnnotation=null,this.submittingUi=null,this.lastPopupPos=null,this.recordingManager=null,this.touchHintShown=!1,this.lastHandoff={},this.handleKeydown=e=>{e.key==="Escape"&&(I(e)||this.state.handleEscape(e))},this.stopRecordingIntoNote=()=>{this.recordingManager&&(this.recordingManager.stop(),this.via="record",this.transitionTo(new Re(this,{x:window.innerWidth/2,y:window.innerHeight/2,targetName:this.messages.record.timer_label})))},this.config=t,t.projectKey||console.warn("[MakeThisBetter] projectKey is missing. Feedback submission will be rejected."),this.brandColors=kn(t.brandColors),this.messages=Ce(t.locale??document.documentElement.lang??"en"),this.apiClient=new Gi({projectKey:t.projectKey,apiUrl:t.apiUrl,userToken:t.userToken,userTokenFn:t.userTokenFn}),this.consoleCollector=new Pr,this.consoleCollector.start(),this.breadcrumbCollector=new Hr,this.breadcrumbCollector.start(),this.lifecycle=new yn({apiClient:this.apiClient,consoleCollector:this.consoleCollector,breadcrumbCollector:this.breadcrumbCollector,brandColors:this.brandColors,shadow:()=>this.shadow,messages:()=>this.messages,user:()=>this.config.user},{isBackground:()=>this.state.kind==="submitting",onReleaseForFailureCard:()=>this.transitionTo(new dt(this)),onReenterBackground:()=>this.transitionTo(new Ie(this)),onFinalized:(e,r)=>this.handleFinalized(e,r)});try{this.buildUI()}catch(e){this.consoleCollector.stop(),this.breadcrumbCollector.stop(),console.warn("[MakeThisBetter] Widget failed to start:",e);return}t.frustrationDetection!==!1&&(this.frustrationDetector=new Lt(()=>this.handleFrustration()),this.frustrationDetector.start()),document.addEventListener("keydown",this.handleKeydown,!0)}transitionTo(t){const e=this.state;this.state=t,e.exit(),t.enter(),this.tab?.setActive(t.launcherLit)}buildUI(){if(this.shadow=new pt(this.config.theme??"auto",this.brandColors),this.config.entryMode==="api"){De()&&console.warn('[MakeThisBetter] entryMode: "api" renders no launcher. Call MakeThisBetter.open() from your own UI.');return}if(w()){De()&&console.warn("[MakeThisBetter] No launcher is rendered on touch devices. Call MakeThisBetter.open() from your own mobile UI.");return}this.mountTab()}mountTab(){this.tab||!this.shadow||(this.tab=new ei(this.shadow,this.messages,this.config.position??"right",()=>this.state.handleTabClick(),this.config.tabText,this.brandColors?void 0:this.config.tabColor))}open(){this.shadow&&this.state.handleOpen()}close(){this.state.handleClose()}showLauncher(){w()||(this.mountTab(),this.tab?.setActive(this.state.launcherLit))}hideLauncher(){this.tab?.destroy(),this.tab=null}setLocale(t){this.config.locale=t,this.messages=Ce(t),this.tab?.setMessages(this.messages)}handleFrustration(){!this.state.acceptsFrustrationPrompt||this.frustrationPrompt||$r()||(this.frustrationPrompt=new ri(this.shadow,this.messages,{onTell:()=>{this.dismissFrustrationPrompt(),this.state.handleOpen()},onDismiss:()=>{Br(),this.dismissFrustrationPrompt()},onAutoHide:()=>this.dismissFrustrationPrompt()}))}dismissSuccess(){this.success?.destroy(),this.success=null}dismissFrustrationPrompt(){this.frustrationPrompt?.destroy(),this.frustrationPrompt=null}hasAnnotationChrome(){return this.toolbar!==null}mountAnnotationChrome(){se(),this.engageScrollLock();const t=w();this.toolbar=new ui(this.shadow,this.messages,()=>this.exitAll(),e=>this.state.handleToolbarModeChange(e),this.config.position??"right",!t||!this.touchHintShown),t&&(this.touchHintShown=!0),this.ensureSession(),t&&this.toolbar&&this.pageOffset.reserve(this.toolbar.height())}ensureSession(){this.session||(this.session=new _i(this.shadow,this.messages,{onPin:(t,e)=>{this.currentAnnotation=t,this.via="pin",this.transitionTo(new Re(this,{x:t.x,y:t.y,targetName:e,targetRect:t.targetRect}))},onDrawStroke:()=>this.state.handleDrawStroke()}))}destroySession(){this.session?.destroy(),this.session=null}clearCurrentAnnotation(){this.currentAnnotation=null}startRecorder(){this.recordingManager=new dn,this.recordingManager.start(this.shadow,this.messages,this.stopRecordingIntoNote).catch(t=>{console.warn("[MakeThisBetter] Interaction replay unavailable, falling back to markup:",t),this.state.kind==="recording"&&(this.toolbar?.setMode("markup"),this.state.handleToolbarModeChange("markup"))})}destroyRecordingManager(){this.recordingManager?.destroy(),this.recordingManager=null}mountDrawBar(){this.drawBar=new Ii(this.shadow,{messages:this.messages,onUndo:()=>this.handleDrawUndoRedo("undo"),onRedo:()=>this.handleDrawUndoRedo("redo"),onCancel:()=>this.cancelDraw(),onSubmit:(t,e)=>this.handleDrawSubmit(t,e),onActivity:()=>this.lifecycle.beginBaseCapture()}),this.lifecycle.setScreenshotEnabled(!0),this.lifecycle.beginBaseCapture()}mountDrawSheet(){this.drawSheet=new Vt(this.shadow,{targetName:this.messages.annotation.drawing,x:window.innerWidth/2,y:window.innerHeight/2,messages:this.messages,onSubmit:(t,e)=>this.handleDrawSubmit(t,e),onClose:()=>this.cancelDraw(),onActivity:()=>this.lifecycle.beginBaseCapture(),position:this.config.position??"right"}),this.submittingUi=this.drawSheet,this.lifecycle.setScreenshotEnabled(!0),this.lifecycle.beginBaseCapture()}handleDrawUndoRedo(t){t==="undo"?this.session?.undoDraw():this.session?.redoDraw(),this.refreshDrawBar()}refreshDrawBar(){this.session&&this.drawBar?.setUndoRedo(this.session.canUndoDraw(),this.session.canRedoDraw())}cancelDraw(){this.session?.clearDraw(),this.teardownDrawBar(),this.drawSheet?.destroy(),this.drawSheet=null,this.dim?.destroy(),this.dim=null,this.submittingUi=null,this.transitionTo(new E(this))}teardownDrawBar(){this.drawBar?.destroy(),this.drawBar=null}handleDrawSubmit(t,e){const r=this.session?.getDrawAnnotation();if(!r){this.cancelDraw();return}this.currentAnnotation=r,this.via="draw",this.session?.dismissInteraction(),this.submittingUi=this.drawBar??this.drawSheet,this.handleSubmit(t||this.messages.annotation.drawing,e)}mountNotePopup({x:t,y:e,targetName:r,targetRect:n}){this.lastPopupPos={x:t,y:e},this.teardownDrawBar(),this.session?.dismissInteraction(),this.pinPopup?.destroy(),this.pinPopup=null,this.dim?.destroy(),this.dim=null,this.dim=new si(this.shadow,()=>this.exitAll());const s=this.recordingManager?.getRecording();s&&this.lifecycle.setScreenshotEnabled(!0),this.pinPopup=new Vt(this.shadow,{targetName:r,x:t,y:e,targetRect:n,messages:this.messages,onSubmit:(o,a)=>this.handleSubmit(o,a),onClose:()=>this.exitAll(),onActivity:()=>this.lifecycle.beginBaseCapture(),onMyFeedback:this.buildMyFeedbackHandler(),...s?{recordingSeconds:s.duration}:{onScreenshotToggle:o=>this.lifecycle.setScreenshotEnabled(o),screenshotEnabled:this.lifecycle.isScreenshotEnabled()},position:this.config.position??"right"}),this.submittingUi=this.pinPopup,this.engageScrollLock(),this.lifecycle.beginBaseCapture()}dismissNotePopup(){this.pinPopup?.destroy(),this.pinPopup=null,this.dim?.destroy(),this.dim=null,this.submittingUi=null,this.clearCurrentAnnotation(),this.destroySession()}engageScrollLock(){this.scrollLock||(this.scrollLock=di())}releaseScrollLock(){this.scrollLock?.release(),this.scrollLock=null}buildMyFeedbackHandler(){if(!this.config.user&&Qr())return async()=>{const t=await this.apiClient.createIdentityToken(ke());!t?.identity_token||!t.board_url||(Ee(t.board_url),window.open(`${t.board_url}?identity=${encodeURIComponent(t.identity_token)}`,"_blank"))}}handleSubmit(t,e){if(!this.submittingUi)return;const r=this.currentAnnotation,n=this.recordingManager?.getRecording()??void 0,s=this.teardownSubmittingUi(!0),o=()=>this.lifecycle.start(t,r,n);this.transitionTo(new wn(this,this.lastPopupPos,{element:s,pendingSession:o(),onRetrySubmission:o,initiatingKeydown:e}))}teardownSubmittingUi(t=!1){const e=this.pinPopup??this.drawSheet,r=t?e?.releaseElement():void 0;return this.teardownDrawBar(),r||e?.destroy(),this.releaseScrollLock(),this.pinPopup=null,this.drawSheet=null,this.dim?.destroy(),this.dim=null,this.session?.hideHighlight(),this.session?.destroy(),this.session=null,this.recordingManager?.destroy(),this.recordingManager=null,this.submittingUi=null,r}mountClarifyCard(t,e){this.clarify=new or(this.shadow,{apiClient:this.apiClient,messages:this.messages,element:e.element,position:this.config.position??"right",x:t?.x,y:t?.y,onFinalize:()=>this.lifecycle.finalize(),initiatingKeydown:e.initiatingKeydown,onSkip:()=>this.transitionTo(new Ie(this)),onCancel:()=>this.exitAll(),pendingSession:e.pendingSession,onRetrySubmission:e.onRetrySubmission})}revertToolbarDuringClarify(){this.toolbar?.setMode(this.via==="record"?"record":"markup")}releaseClarifyUi(){this.teardownToolbar(),this.currentAnnotation=null,this.clarify=null}handleFinalized(t,e){this.lastHandoff={feedbackId:t.id,boardUrl:t.board_url,identityToken:t.identity_token},t.board_url&&Ee(t.board_url),this.clarify?.destroy(),this.clarify=null,this.teardownToolbar(),this.lifecycle.resetScreenshotConsent(),this.showSuccess({skipFollowup:e.ai_clarify_available===!1})}showSuccess(t){this.lifecycle.dismissFinalizeFailure(),this.transitionTo(new dt(this)),this.success=new lr(this.shadow,this.messages,()=>{this.success?.destroy(),this.success=null},this.buildViewFeedbackHandler(),{...t,emailCapture:this.buildEmailCapture()})}buildEmailCapture(){if(this.config.user)return;const{feedbackId:t,identityToken:e}=this.lastHandoff;if(!(!t||!e)&&!Se())return{onSubmit:async r=>{const n=await this.apiClient.updateReporter(t,r,e);return n&&Zr(r),n}}}buildViewFeedbackHandler(){const{boardUrl:t,identityToken:e}=this.lastHandoff;if(t){if(e)return()=>{window.open(`${t}?identity=${encodeURIComponent(e)}`,"_blank")};if(this.config.userToken||this.config.userTokenFn)return async()=>{try{const r=await this.apiClient.resolveUserToken();r&&window.open(`${t}?identity=${encodeURIComponent(r)}`,"_blank")}catch{}}}}teardownToolbar(){this.pageOffset.release(),this.toolbar?.destroy(),this.toolbar=null}exitAll(){this.lifecycle.abandon(),this.via="pin",this.transitionTo(new dt(this)),this.teardownToolbar(),this.teardownDrawBar(),this.releaseScrollLock(),this.session?.hideHighlight(),this.session?.destroy(),this.session=null,this.dim?.destroy(),this.dim=null,this.pinPopup?.destroy(),this.pinPopup=null,this.drawSheet?.destroy(),this.drawSheet=null,this.clarify?.destroy(),this.clarify=null,this.currentAnnotation=null,this.submittingUi=null,this.recordingManager?.destroy(),this.recordingManager=null}destroy(){document.removeEventListener("keydown",this.handleKeydown,!0),this.exitAll(),this.consoleCollector.stop(),this.breadcrumbCollector.stop(),this.frustrationDetector?.stop(),this.dismissFrustrationPrompt(),this.clarify?.destroy(),this.success?.destroy(),this.lifecycle.dismissFinalizeFailure(),this.tab?.destroy(),this.recordingManager?.destroy(),this.shadow?.destroy()}}let T=null,L=null,A=null;function En(){A&&(document.removeEventListener("DOMContentLoaded",A),A=null)}function V(i){En(),T?.destroy(),T=i?new Sn(i):null}const Fe={init(i){typeof document>"u"||(V(),L=i,document.readyState==="loading"?(A=()=>{A=null,V(i)},document.addEventListener("DOMContentLoaded",A,{once:!0})):V(i))},destroy(){V(),L=null},setLocale(i){L&&(L.locale=i),T?.setLocale(i)},open(){T?.open()},close(){T?.close()},showLauncher(){T?.showLauncher()},hideLauncher(){T?.hideLauncher()}};typeof window<"u"&&(window.MakeThisBetter=Fe,document.addEventListener("turbo:load",()=>{const i=document.getElementById(k);L&&(!i||!i.shadowRoot)&&(i?.remove(),V(L))}));function Tn(i,t){if(i.match(/^[a-z]+:\/\//i))return i;if(i.match(/^\/\//))return window.location.protocol+i;if(i.match(/^[a-z]+:/i))return i;const e=document.implementation.createHTMLDocument(),r=e.createElement("base"),n=e.createElement("a");return e.head.appendChild(r),e.body.appendChild(n),t&&(r.href=t),n.href=i,n.href}const Cn=(()=>{let i=0;const t=()=>`0000${(Math.random()*36**4<<0).toString(36)}`.slice(-4);return()=>(i+=1,`u${t()}${i}`)})();function x(i){const t=[];for(let e=0,r=i.length;e<r;e++)t.push(i[e]);return t}let P=null;function He(i={}){return P||(i.includeStyleProperties?(P=i.includeStyleProperties,P):(P=x(window.getComputedStyle(document.documentElement)),P))}function ht(i,t){const r=(i.ownerDocument.defaultView||window).getComputedStyle(i).getPropertyValue(t);return r?parseFloat(r.replace("px","")):0}function _n(i){const t=ht(i,"border-left-width"),e=ht(i,"border-right-width");return i.clientWidth+t+e}function Ln(i){const t=ht(i,"border-top-width"),e=ht(i,"border-bottom-width");return i.clientHeight+t+e}function Rt(i,t={}){const e=t.width||_n(i),r=t.height||Ln(i);return{width:e,height:r}}function An(){let i,t;try{t=process}catch{}const e=t&&t.env?t.env.devicePixelRatio:null;return e&&(i=parseInt(e,10),Number.isNaN(i)&&(i=1)),i||window.devicePixelRatio||1}const p=16384;function Pn(i){(i.width>p||i.height>p)&&(i.width>p&&i.height>p?i.width>i.height?(i.height*=p/i.width,i.width=p):(i.width*=p/i.height,i.height=p):i.width>p?(i.height*=p/i.width,i.width=p):(i.width*=p/i.height,i.height=p))}function Rn(i,t={}){return i.toBlob?new Promise(e=>{i.toBlob(e,t.type?t.type:"image/png",t.quality?t.quality:1)}):new Promise(e=>{const r=window.atob(i.toDataURL(t.type?t.type:void 0,t.quality?t.quality:void 0).split(",")[1]),n=r.length,s=new Uint8Array(n);for(let o=0;o<n;o+=1)s[o]=r.charCodeAt(o);e(new Blob([s],{type:t.type?t.type:"image/png"}))})}function ut(i){return new Promise((t,e)=>{const r=new Image;r.onload=()=>{r.decode().then(()=>{requestAnimationFrame(()=>t(r))})},r.onerror=e,r.crossOrigin="anonymous",r.decoding="async",r.src=i})}async function In(i){return Promise.resolve().then(()=>new XMLSerializer().serializeToString(i)).then(encodeURIComponent).then(t=>`data:image/svg+xml;charset=utf-8,${t}`)}async function Mn(i,t,e){const r="http://www.w3.org/2000/svg",n=document.createElementNS(r,"svg"),s=document.createElementNS(r,"foreignObject");return n.setAttribute("width",`${t}`),n.setAttribute("height",`${e}`),n.setAttribute("viewBox",`0 0 ${t} ${e}`),s.setAttribute("width","100%"),s.setAttribute("height","100%"),s.setAttribute("x","0"),s.setAttribute("y","0"),s.setAttribute("externalResourcesRequired","true"),n.appendChild(s),s.appendChild(i),In(n)}const m=(i,t)=>{if(i instanceof t)return!0;const e=Object.getPrototypeOf(i);return e===null?!1:e.constructor.name===t.name||m(e,t)};function Dn(i){const t=i.getPropertyValue("content");return`${i.cssText} content: '${t.replace(/'|"/g,"")}';`}function Fn(i,t){return He(t).map(e=>{const r=i.getPropertyValue(e),n=i.getPropertyPriority(e);return`${e}: ${r}${n?" !important":""};`}).join(" ")}function Hn(i,t,e,r){const n=`.${i}:${t}`,s=e.cssText?Dn(e):Fn(e,r);return document.createTextNode(`${n}{${s}}`)}function $e(i,t,e,r){const n=window.getComputedStyle(i,e),s=n.getPropertyValue("content");if(s===""||s==="none")return;const o=Cn();try{t.className=`${t.className} ${o}`}catch{return}const a=document.createElement("style");a.appendChild(Hn(o,e,n,r)),t.appendChild(a)}function $n(i,t,e){$e(i,t,":before",e),$e(i,t,":after",e)}const Be="application/font-woff",Oe="image/jpeg",Bn={woff:Be,woff2:Be,ttf:"application/font-truetype",eot:"application/vnd.ms-fontobject",png:"image/png",jpg:Oe,jpeg:Oe,gif:"image/gif",tiff:"image/tiff",svg:"image/svg+xml",webp:"image/webp"};function On(i){const t=/\.([^./]*?)$/g.exec(i);return t?t[1]:""}function It(i){const t=On(i).toLowerCase();return Bn[t]||""}function Un(i){return i.split(/,/)[1]}function Mt(i){return i.search(/^(data:)/)!==-1}function zn(i,t){return`data:${t};base64,${i}`}async function Ue(i,t,e){const r=await fetch(i,t);if(r.status===404)throw new Error(`Resource "${r.url}" not found`);const n=await r.blob();return new Promise((s,o)=>{const a=new FileReader;a.onerror=o,a.onloadend=()=>{try{s(e({res:r,result:a.result}))}catch(l){o(l)}},a.readAsDataURL(n)})}const Dt={};function Nn(i,t,e){let r=i.replace(/\?.*/,"");return e&&(r=i),/ttf|otf|eot|woff2?/i.test(r)&&(r=r.replace(/.*\//,"")),t?`[${t}]${r}`:r}async function Ft(i,t,e){const r=Nn(i,t,e.includeQueryParams);if(Dt[r]!=null)return Dt[r];e.cacheBust&&(i+=(/\?/.test(i)?"&":"?")+new Date().getTime());let n;try{const s=await Ue(i,e.fetchRequestInit,({res:o,result:a})=>(t||(t=o.headers.get("Content-Type")||""),Un(a)));n=zn(s,t)}catch(s){n=e.imagePlaceholder||"";let o=`Failed to fetch resource: ${i}`;s&&(o=typeof s=="string"?s:s.message),o&&console.warn(o)}return Dt[r]=n,n}async function jn(i){const t=i.toDataURL();return t==="data:,"?i.cloneNode(!1):ut(t)}async function qn(i,t){if(i.currentSrc){const s=document.createElement("canvas"),o=s.getContext("2d");s.width=i.clientWidth,s.height=i.clientHeight,o?.drawImage(i,0,0,s.width,s.height);const a=s.toDataURL();return ut(a)}const e=i.poster,r=It(e),n=await Ft(e,r,t);return ut(n)}async function Wn(i,t){var e;try{if(!((e=i?.contentDocument)===null||e===void 0)&&e.body)return await bt(i.contentDocument.body,t,!0)}catch{}return i.cloneNode(!1)}async function Vn(i,t){return m(i,HTMLCanvasElement)?jn(i):m(i,HTMLVideoElement)?qn(i,t):m(i,HTMLIFrameElement)?Wn(i,t):i.cloneNode(ze(i))}const Yn=i=>i.tagName!=null&&i.tagName.toUpperCase()==="SLOT",ze=i=>i.tagName!=null&&i.tagName.toUpperCase()==="SVG";async function Kn(i,t,e){var r,n;if(ze(t))return t;let s=[];return Yn(i)&&i.assignedNodes?s=x(i.assignedNodes()):m(i,HTMLIFrameElement)&&(!((r=i.contentDocument)===null||r===void 0)&&r.body)?s=x(i.contentDocument.body.childNodes):s=x(((n=i.shadowRoot)!==null&&n!==void 0?n:i).childNodes),s.length===0||m(i,HTMLVideoElement)||await s.reduce((o,a)=>o.then(()=>bt(a,e)).then(l=>{l&&t.appendChild(l)}),Promise.resolve()),t}function Xn(i,t,e){const r=t.style;if(!r)return;const n=window.getComputedStyle(i);n.cssText?(r.cssText=n.cssText,r.transformOrigin=n.transformOrigin):He(e).forEach(s=>{let o=n.getPropertyValue(s);s==="font-size"&&o.endsWith("px")&&(o=`${Math.floor(parseFloat(o.substring(0,o.length-2)))-.1}px`),m(i,HTMLIFrameElement)&&s==="display"&&o==="inline"&&(o="block"),s==="d"&&t.getAttribute("d")&&(o=`path(${t.getAttribute("d")})`),r.setProperty(s,o,n.getPropertyPriority(s))})}function Gn(i,t){m(i,HTMLTextAreaElement)&&(t.innerHTML=i.value),m(i,HTMLInputElement)&&t.setAttribute("value",i.value)}function Jn(i,t){if(m(i,HTMLSelectElement)){const e=t,r=Array.from(e.children).find(n=>i.value===n.getAttribute("value"));r&&r.setAttribute("selected","")}}function Zn(i,t,e){return m(t,Element)&&(Xn(i,t,e),$n(i,t,e),Gn(i,t),Jn(i,t)),t}async function Qn(i,t){const e=i.querySelectorAll?i.querySelectorAll("use"):[];if(e.length===0)return i;const r={};for(let s=0;s<e.length;s++){const a=e[s].getAttribute("xlink:href");if(a){const l=i.querySelector(a),d=document.querySelector(a);!l&&d&&!r[a]&&(r[a]=await bt(d,t,!0))}}const n=Object.values(r);if(n.length){const s="http://www.w3.org/1999/xhtml",o=document.createElementNS(s,"svg");o.setAttribute("xmlns",s),o.style.position="absolute",o.style.width="0",o.style.height="0",o.style.overflow="hidden",o.style.display="none";const a=document.createElementNS(s,"defs");o.appendChild(a);for(let l=0;l<n.length;l++)a.appendChild(n[l]);i.appendChild(o)}return i}async function bt(i,t,e){return!e&&t.filter&&!t.filter(i)?null:Promise.resolve(i).then(r=>Vn(r,t)).then(r=>Kn(i,r,t)).then(r=>Zn(i,r,t)).then(r=>Qn(r,t))}const Ne=/url\((['"]?)([^'"]+?)\1\)/g,ts=/url\([^)]+\)\s*format\((["']?)([^"']+)\1\)/g,es=/src:\s*(?:url\([^)]+\)\s*format\([^)]+\)[,;]\s*)+/g;function is(i){const t=i.replace(/([.*+?^${}()|\[\]\/\\])/g,"\\$1");return new RegExp(`(url\\(['"]?)(${t})(['"]?\\))`,"g")}function rs(i){const t=[];return i.replace(Ne,(e,r,n)=>(t.push(n),e)),t.filter(e=>!Mt(e))}async function ns(i,t,e,r,n){try{const s=e?Tn(t,e):t,o=It(t);let a;return n||(a=await Ft(s,o,r)),i.replace(is(t),`$1${a}$3`)}catch{}return i}function ss(i,{preferredFontFormat:t}){return t?i.replace(es,e=>{for(;;){const[r,,n]=ts.exec(e)||[];if(!n)return"";if(n===t)return`src: ${r};`}}):i}function je(i){return i.search(Ne)!==-1}async function qe(i,t,e){if(!je(i))return i;const r=ss(i,e);return rs(r).reduce((s,o)=>s.then(a=>ns(a,o,t,e)),Promise.resolve(r))}async function R(i,t,e){var r;const n=(r=t.style)===null||r===void 0?void 0:r.getPropertyValue(i);if(n){const s=await qe(n,null,e);return t.style.setProperty(i,s,t.style.getPropertyPriority(i)),!0}return!1}async function os(i,t){await R("background",i,t)||await R("background-image",i,t),await R("mask",i,t)||await R("-webkit-mask",i,t)||await R("mask-image",i,t)||await R("-webkit-mask-image",i,t)}async function as(i,t){const e=m(i,HTMLImageElement);if(!(e&&!Mt(i.src))&&!(m(i,SVGImageElement)&&!Mt(i.href.baseVal)))return;const r=e?i.src:i.href.baseVal,n=await Ft(r,It(r),t);await new Promise((s,o)=>{i.onload=s,i.onerror=t.onImageErrorHandler?(...l)=>{try{s(t.onImageErrorHandler(...l))}catch(d){o(d)}}:o;const a=i;a.decode&&(a.decode=s),a.loading==="lazy"&&(a.loading="eager"),e?(i.srcset="",i.src=n):i.href.baseVal=n})}async function ls(i,t){const r=x(i.childNodes).map(n=>We(n,t));await Promise.all(r).then(()=>i)}async function We(i,t){m(i,Element)&&(await os(i,t),await as(i,t),await ls(i,t))}function cs(i,t){const{style:e}=i;t.backgroundColor&&(e.backgroundColor=t.backgroundColor),t.width&&(e.width=`${t.width}px`),t.height&&(e.height=`${t.height}px`);const r=t.style;return r!=null&&Object.keys(r).forEach(n=>{e[n]=r[n]}),i}const Ve={};async function Ye(i){let t=Ve[i];if(t!=null)return t;const r=await(await fetch(i)).text();return t={url:i,cssText:r},Ve[i]=t,t}async function Ke(i,t){let e=i.cssText;const r=/url\(["']?([^"')]+)["']?\)/g,s=(e.match(/url\([^)]+\)/g)||[]).map(async o=>{let a=o.replace(r,"$1");return a.startsWith("https://")||(a=new URL(a,i.url).href),Ue(a,t.fetchRequestInit,({result:l})=>(e=e.replace(o,`url(${l})`),[o,l]))});return Promise.all(s).then(()=>e)}function Xe(i){if(i==null)return[];const t=[],e=/(\/\*[\s\S]*?\*\/)/gi;let r=i.replace(e,"");const n=new RegExp("((@.*?keyframes [\\s\\S]*?){([\\s\\S]*?}\\s*?)})","gi");for(;;){const l=n.exec(r);if(l===null)break;t.push(l[0])}r=r.replace(n,"");const s=/@import[\s\S]*?url\([^)]*\)[\s\S]*?;/gi,o="((\\s*?(?:\\/\\*[\\s\\S]*?\\*\\/)?\\s*?@media[\\s\\S]*?){([\\s\\S]*?)}\\s*?})|(([\\s\\S]*?){([\\s\\S]*?)})",a=new RegExp(o,"gi");for(;;){let l=s.exec(r);if(l===null){if(l=a.exec(r),l===null)break;s.lastIndex=a.lastIndex}else a.lastIndex=s.lastIndex;t.push(l[0])}return t}async function ds(i,t){const e=[],r=[];return i.forEach(n=>{if("cssRules"in n)try{x(n.cssRules||[]).forEach((s,o)=>{if(s.type===CSSRule.IMPORT_RULE){let a=o+1;const l=s.href,d=Ye(l).then(h=>Ke(h,t)).then(h=>Xe(h).forEach(u=>{try{n.insertRule(u,u.startsWith("@import")?a+=1:n.cssRules.length)}catch(b){console.error("Error inserting rule from remote css",{rule:u,error:b})}})).catch(h=>{console.error("Error loading remote css",h.toString())});r.push(d)}})}catch(s){const o=i.find(a=>a.href==null)||document.styleSheets[0];n.href!=null&&r.push(Ye(n.href).then(a=>Ke(a,t)).then(a=>Xe(a).forEach(l=>{o.insertRule(l,o.cssRules.length)})).catch(a=>{console.error("Error loading remote stylesheet",a)})),console.error("Error inlining remote css file",s)}}),Promise.all(r).then(()=>(i.forEach(n=>{if("cssRules"in n)try{x(n.cssRules||[]).forEach(s=>{e.push(s)})}catch(s){console.error(`Error while reading CSS rules from ${n.href}`,s)}}),e))}function hs(i){return i.filter(t=>t.type===CSSRule.FONT_FACE_RULE).filter(t=>je(t.style.getPropertyValue("src")))}async function us(i,t){if(i.ownerDocument==null)throw new Error("Provided element is not within a Document");const e=x(i.ownerDocument.styleSheets),r=await ds(e,t);return hs(r)}function Ge(i){return i.trim().replace(/["']/g,"")}function bs(i){const t=new Set;function e(r){(r.style.fontFamily||getComputedStyle(r).fontFamily).split(",").forEach(s=>{t.add(Ge(s))}),Array.from(r.children).forEach(s=>{s instanceof HTMLElement&&e(s)})}return e(i),t}async function Je(i,t){const e=await us(i,t),r=bs(i);return(await Promise.all(e.filter(s=>r.has(Ge(s.style.fontFamily))).map(s=>{const o=s.parentStyleSheet?s.parentStyleSheet.href:null;return qe(s.cssText,o,t)}))).join(`
174
+ `,t.append(this.el),r.onRetry&&this.el.querySelector(".mtb-failure-retry").addEventListener("click",r.onRetry),this.el.querySelector(".mtb-failure-close").addEventListener("click",r.onClose)}destroy(){this.el.remove()}}function un(){return{page_url:$(window.location.href),user_agent:navigator.userAgent,browser:bn(),os:mn(),screen_width:window.screen.width,screen_height:window.screen.height}}function bn(){const i=navigator.userAgent;return/Edg\//.test(i)?`Edge ${i.match(/Edg\/(\S+)/)?.[1]??""}`:/OPR\//.test(i)?`Opera ${i.match(/OPR\/(\S+)/)?.[1]??""}`:/Chrome\//.test(i)?`Chrome ${i.match(/Chrome\/(\S+)/)?.[1]??""}`:/Safari\//.test(i)&&/Version\//.test(i)?`Safari ${i.match(/Version\/(\S+)/)?.[1]??""}`:/Firefox\//.test(i)?`Firefox ${i.match(/Firefox\/(\S+)/)?.[1]??""}`:"Unknown"}function mn(){const i=navigator.userAgent;return/Windows NT 10/.test(i)?"Windows 10/11":/Windows NT/.test(i)?"Windows":/Mac OS X 10_15|macOS 1[56789]/.test(i)||/Mac OS X/.test(i)?"macOS":/Android/.test(i)?`Android ${i.match(/Android (\d+)/)?.[1]??""}`:/iPhone|iPad|iPod/.test(i)?"iOS":/Linux/.test(i)?"Linux":"Unknown"}function pn(i){const{description:t,pageContext:e,consoleErrors:r,annotation:n,user:s,recording:o,anonId:a,anonEmail:l,breadcrumbs:d}=i;return{...et({description:t,...e,page_url:$(e.page_url),console_errors:r,annotations:n?[n]:[],target_element:n?.targetSelector?{selector:n.targetSelector,text:n.targetText??"",name:n.targetName??""}:void 0,recording_events:o?.events,recording_duration:o?.duration,breadcrumbs:d}),user_id:s?.id,user_email:s?.email,user_name:s?.name,reporter_external_id:s?void 0:a,reporter_email:s?void 0:l}}const fn=300,gn=900;class yn{constructor(t,e){this.deps=t,this.host=e,this.activeSubmission=null,this.pendingSubmissionRequest=null,this.submissionAttempt=0,this.pendingBaseCapture=null,this.idleCaptureTimer=null,this.failure=null,this.screenshotEnabled=!0}isScreenshotEnabled(){return this.screenshotEnabled}resetScreenshotConsent(){this.screenshotEnabled=!0}setScreenshotEnabled(t){if(this.screenshotEnabled=t,t){this.beginBaseCapture();return}this.clearIdleCaptureTimer(),this.pendingBaseCapture=null}beginBaseCapture(){this.screenshotEnabled&&(this.pendingBaseCapture||(this.clearIdleCaptureTimer(),this.idleCaptureTimer=setTimeout(()=>{this.idleCaptureTimer=null,this.pendingBaseCapture??(this.pendingBaseCapture=oe())},gn)))}clearIdleCaptureTimer(){this.idleCaptureTimer!==null&&(clearTimeout(this.idleCaptureTimer),this.idleCaptureTimer=null)}start(t,e,r){const n=++this.submissionAttempt,s=this.createSubmission(t,e,r,n);return this.pendingSubmissionRequest=s,s}async createSubmission(t,e,r,n){if(await Pe(),n!==this.submissionAttempt)return null;this.clearIdleCaptureTimer();const s=this.screenshotEnabled?this.pendingBaseCapture??oe():null;this.pendingBaseCapture=null;const o=un(),a=await s;if(n!==this.submissionAttempt)return null;const l=a?await br(a,e?[e]:[],this.deps.brandColors):null;if(n!==this.submissionAttempt)return null;const d=pn({description:t,pageContext:o,consoleErrors:this.deps.consoleCollector.getErrors(),annotation:e,user:this.deps.user(),recording:r,anonId:ke(),anonEmail:Se(),breadcrumbs:this.deps.breadcrumbCollector.getBreadcrumbs()});try{const h=await this.deps.apiClient.createSubmissionSession(d,l);return n!==this.submissionAttempt?(await this.deps.apiClient.abandonSubmissionSession(h.id,h.token).catch(()=>{}),null):(this.activeSubmission=h,h)}catch{return null}}async finalize(){const t=this.submissionAttempt,e=this.host.isBackground(),r=this.activeSubmission??await(this.pendingSubmissionRequest??Promise.resolve(null));if(t!==this.submissionAttempt)return;if(!r){if(e)return this.showFinalizeFailure({canRetry:!1});throw new Error("No active submission session")}const n=e?Promise.resolve():new Promise(o=>setTimeout(o,fn));let s;try{s=await this.deps.apiClient.finalizeSubmissionSession(r.id,r.token)}catch(o){if(e)return this.showFinalizeFailure({canRetry:!0});throw o}await Promise.all([n,Pe()]),!(t!==this.submissionAttempt||this.activeSubmission!==r)&&(this.activeSubmission=null,this.pendingSubmissionRequest=null,this.host.onFinalized(s,r))}showFinalizeFailure(t){this.host.onReleaseForFailureCard(),this.failure?.destroy(),this.failure=new hn(this.deps.shadow(),this.deps.messages(),{onRetry:t.canRetry?()=>this.retryBackgroundFinalization():void 0,onClose:()=>this.dismissFinalizeFailure()})}retryBackgroundFinalization(){this.dismissFinalizeFailure(),this.host.onReenterBackground(),this.finalize().catch(()=>this.showFinalizeFailure({canRetry:!0}))}dismissFinalizeFailure(){this.failure?.destroy(),this.failure=null}abandon(){this.submissionAttempt+=1,this.clearIdleCaptureTimer(),this.pendingBaseCapture=null,this.resetScreenshotConsent();const t=this.activeSubmission;this.activeSubmission=null,this.pendingSubmissionRequest=null,t&&this.deps.apiClient.abandonSubmissionSession(t.id,t.token).catch(()=>{})}}function Pe(){return new Promise(i=>requestAnimationFrame(()=>setTimeout(i,0)))}function ct(i){i.preventDefault(),i.stopPropagation()}class S{constructor(t){this.host=t,this.launcherLit=!0,this.acceptsFrustrationPrompt=!1}enter(){}exit(){}handleOpen(){}handleClose(){this.host.exitAll()}handleEscape(t){}handleTabClick(){this.host.exitAll()}handleToolbarModeChange(t){}handleDrawStroke(){}}class dt extends S{constructor(){super(...arguments),this.kind="idle",this.launcherLit=!1,this.acceptsFrustrationPrompt=!0}handleOpen(){this.host.dismissFrustrationPrompt(),this.host.dismissSuccess(),this.host.transitionTo(new E(this.host))}handleClose(){}handleTabClick(){this.handleOpen()}}class E extends S{constructor(){super(...arguments),this.kind="annotating"}enter(){if(!this.host.hasAnnotationChrome()){this.host.mountAnnotationChrome();return}this.host.destroyRecordingManager(),this.host.teardownDrawBar(),this.host.ensureSession()}handleEscape(t){ct(t),this.host.exitAll()}handleToolbarModeChange(t){t==="record"?this.host.transitionTo(new Pt(this.host)):this.host.transitionTo(new E(this.host))}handleDrawStroke(){this.host.transitionTo(new vn(this.host,w()?"sheet":"bar"))}}class Pt extends S{constructor(){super(...arguments),this.kind="recording"}enter(){this.host.clearCurrentAnnotation(),this.host.teardownDrawBar(),this.host.destroySession(),this.host.startRecorder()}handleEscape(t){ct(t),this.host.stopRecordingIntoNote()}handleToolbarModeChange(t){t!=="record"&&this.host.transitionTo(new E(this.host))}}class vn extends S{constructor(t,e){super(t),this.surface=e,this.kind="drawing"}enter(){this.surface==="sheet"?this.host.mountDrawSheet():(this.host.mountDrawBar(),this.host.refreshDrawBar())}handleEscape(t){ct(t),this.host.cancelDraw()}handleToolbarModeChange(t){t==="record"?this.host.transitionTo(new Pt(this.host)):this.host.transitionTo(new E(this.host))}handleDrawStroke(){this.surface==="bar"&&this.host.refreshDrawBar()}}class Re extends S{constructor(t,e){super(t),this.opts=e,this.kind="popup"}enter(){this.host.mountNotePopup(this.opts)}handleEscape(t){ct(t),this.host.exitAll()}handleToolbarModeChange(t){t==="record"?this.host.transitionTo(new Pt(this.host)):(this.host.dismissNotePopup(),this.host.transitionTo(new E(this.host)))}}class wn extends S{constructor(t,e,r){super(t),this.pos=e,this.opts=r,this.kind="clarifying"}enter(){this.host.mountClarifyCard(this.pos,this.opts)}handleEscape(t){}handleToolbarModeChange(t){this.host.revertToolbarDuringClarify()}}class Ie extends S{constructor(){super(...arguments),this.kind="submitting",this.launcherLit=!1}enter(){this.host.releaseClarifyUi()}handleTabClick(){}}const xn=/^#[0-9a-f]{6}$/i;function kn(i){return i===void 0?void 0:typeof i!="object"||i===null||![i.primary,i.hover,i.active,i.onPrimary].every(e=>typeof e=="string"&&xn.test(e))?Me():{primary:i.primary.toLowerCase(),hover:i.hover.toLowerCase(),active:i.active.toLowerCase(),onPrimary:i.onPrimary.toLowerCase()}}function Me(){console.warn("[MakeThisBetter] brandColors requires primary, hover, active, and onPrimary as six-digit hex colors.")}function De(){const{hostname:i}=window.location;return i==="localhost"||i==="127.0.0.1"||i==="[::1]"||i.endsWith(".localhost")||i.endsWith(".local")||i.endsWith(".test")}class Sn{constructor(t){this.tab=null,this.toolbar=null,this.session=null,this.drawBar=null,this.dim=null,this.pageOffset=new oi,this.pinPopup=null,this.scrollLock=null,this.drawSheet=null,this.clarify=null,this.success=null,this.frustrationPrompt=null,this.frustrationDetector=null,this.state=new dt(this),this.via="pin",this.currentAnnotation=null,this.submittingUi=null,this.lastPopupPos=null,this.recordingManager=null,this.touchHintShown=!1,this.lastHandoff={},this.handleKeydown=e=>{e.key==="Escape"&&(I(e)||this.state.handleEscape(e))},this.stopRecordingIntoNote=()=>{this.recordingManager&&(this.recordingManager.stop(),this.via="record",this.transitionTo(new Re(this,{x:window.innerWidth/2,y:window.innerHeight/2,targetName:this.messages.record.timer_label})))},this.config=t,t.projectKey||console.warn("[MakeThisBetter] projectKey is missing. Feedback submission will be rejected."),this.brandColors=kn(t.brandColors),this.messages=Ce(t.locale??document.documentElement.lang??"en"),this.apiClient=new Gi({projectKey:t.projectKey,apiUrl:t.apiUrl,userToken:t.userToken,userTokenFn:t.userTokenFn}),this.consoleCollector=new Pr,this.consoleCollector.start(),this.breadcrumbCollector=new Hr,this.breadcrumbCollector.start(),this.lifecycle=new yn({apiClient:this.apiClient,consoleCollector:this.consoleCollector,breadcrumbCollector:this.breadcrumbCollector,brandColors:this.brandColors,shadow:()=>this.shadow,messages:()=>this.messages,user:()=>this.config.user},{isBackground:()=>this.state.kind==="submitting",onReleaseForFailureCard:()=>this.transitionTo(new dt(this)),onReenterBackground:()=>this.transitionTo(new Ie(this)),onFinalized:(e,r)=>this.handleFinalized(e,r)});try{this.buildUI()}catch(e){this.consoleCollector.stop(),this.breadcrumbCollector.stop(),console.warn("[MakeThisBetter] Widget failed to start:",e);return}t.frustrationDetection!==!1&&(this.frustrationDetector=new Lt(()=>this.handleFrustration()),this.frustrationDetector.start()),document.addEventListener("keydown",this.handleKeydown,!0)}transitionTo(t){const e=this.state;this.state=t,e.exit(),t.enter(),this.tab?.setActive(t.launcherLit)}buildUI(){if(this.shadow=new pt(this.config.theme??"auto",this.brandColors),this.config.entryMode==="api"){De()&&console.warn('[MakeThisBetter] entryMode: "api" renders no launcher. Call MakeThisBetter.open() from your own UI.');return}if(w()){De()&&console.warn("[MakeThisBetter] No launcher is rendered on touch devices. Call MakeThisBetter.open() from your own mobile UI.");return}this.mountTab()}mountTab(){this.tab||!this.shadow||(this.tab=new ei(this.shadow,this.messages,this.config.position??"right",()=>this.state.handleTabClick(),this.config.tabText,this.brandColors?void 0:this.config.tabColor))}open(){this.shadow&&this.state.handleOpen()}close(){this.state.handleClose()}showLauncher(){w()||(this.mountTab(),this.tab?.setActive(this.state.launcherLit))}hideLauncher(){this.tab?.destroy(),this.tab=null}setLocale(t){this.config.locale=t,this.messages=Ce(t),this.tab?.setMessages(this.messages)}handleFrustration(){!this.state.acceptsFrustrationPrompt||this.frustrationPrompt||$r()||(this.frustrationPrompt=new ri(this.shadow,this.messages,{onTell:()=>{this.dismissFrustrationPrompt(),this.state.handleOpen()},onDismiss:()=>{Br(),this.dismissFrustrationPrompt()},onAutoHide:()=>this.dismissFrustrationPrompt()}))}dismissSuccess(){this.success?.destroy(),this.success=null}dismissFrustrationPrompt(){this.frustrationPrompt?.destroy(),this.frustrationPrompt=null}hasAnnotationChrome(){return this.toolbar!==null}mountAnnotationChrome(){se();const t=w();this.toolbar=new ui(this.shadow,this.messages,()=>this.exitAll(),e=>this.state.handleToolbarModeChange(e),this.config.position??"right",!t||!this.touchHintShown),t&&(this.touchHintShown=!0),this.ensureSession(),t&&this.toolbar&&this.pageOffset.reserve(this.toolbar.height())}ensureSession(){this.session||(this.session=new _i(this.shadow,this.messages,{onPin:(t,e)=>{this.currentAnnotation=t,this.via="pin",this.transitionTo(new Re(this,{x:t.x,y:t.y,targetName:e,targetRect:t.targetRect}))},onDrawStroke:()=>this.state.handleDrawStroke()}))}destroySession(){this.session?.destroy(),this.session=null}clearCurrentAnnotation(){this.currentAnnotation=null}startRecorder(){this.recordingManager=new dn,this.recordingManager.start(this.shadow,this.messages,this.stopRecordingIntoNote).catch(t=>{console.warn("[MakeThisBetter] Interaction replay unavailable, falling back to markup:",t),this.state.kind==="recording"&&(this.toolbar?.setMode("markup"),this.state.handleToolbarModeChange("markup"))})}destroyRecordingManager(){this.recordingManager?.destroy(),this.recordingManager=null}mountDrawBar(){this.engageScrollLock(),this.drawBar=new Ii(this.shadow,{messages:this.messages,onUndo:()=>this.handleDrawUndoRedo("undo"),onRedo:()=>this.handleDrawUndoRedo("redo"),onCancel:()=>this.cancelDraw(),onSubmit:(t,e)=>this.handleDrawSubmit(t,e),onActivity:()=>this.lifecycle.beginBaseCapture()}),this.lifecycle.setScreenshotEnabled(!0),this.lifecycle.beginBaseCapture()}mountDrawSheet(){this.engageScrollLock(),this.drawSheet=new Vt(this.shadow,{targetName:this.messages.annotation.drawing,x:window.innerWidth/2,y:window.innerHeight/2,messages:this.messages,onSubmit:(t,e)=>this.handleDrawSubmit(t,e),onClose:()=>this.cancelDraw(),onActivity:()=>this.lifecycle.beginBaseCapture(),position:this.config.position??"right"}),this.submittingUi=this.drawSheet,this.lifecycle.setScreenshotEnabled(!0),this.lifecycle.beginBaseCapture()}handleDrawUndoRedo(t){t==="undo"?this.session?.undoDraw():this.session?.redoDraw(),this.refreshDrawBar()}refreshDrawBar(){this.session&&this.drawBar?.setUndoRedo(this.session.canUndoDraw(),this.session.canRedoDraw())}cancelDraw(){this.session?.clearDraw(),this.releaseScrollLock(),this.teardownDrawBar(),this.drawSheet?.destroy(),this.drawSheet=null,this.dim?.destroy(),this.dim=null,this.submittingUi=null,this.transitionTo(new E(this))}teardownDrawBar(){this.drawBar?.destroy(),this.drawBar=null}handleDrawSubmit(t,e){const r=this.session?.getDrawAnnotation();if(!r){this.cancelDraw();return}this.currentAnnotation=r,this.via="draw",this.session?.dismissInteraction(),this.submittingUi=this.drawBar??this.drawSheet,this.handleSubmit(t||this.messages.annotation.drawing,e)}mountNotePopup({x:t,y:e,targetName:r,targetRect:n}){this.lastPopupPos={x:t,y:e},this.teardownDrawBar(),this.session?.dismissInteraction(),this.pinPopup?.destroy(),this.pinPopup=null,this.dim?.destroy(),this.dim=null,this.dim=new si(this.shadow,()=>this.exitAll());const s=this.recordingManager?.getRecording();s&&this.lifecycle.setScreenshotEnabled(!0),this.pinPopup=new Vt(this.shadow,{targetName:r,x:t,y:e,targetRect:n,messages:this.messages,onSubmit:(o,a)=>this.handleSubmit(o,a),onClose:()=>this.exitAll(),onActivity:()=>this.lifecycle.beginBaseCapture(),onMyFeedback:this.buildMyFeedbackHandler(),...s?{recordingSeconds:s.duration}:{onScreenshotToggle:o=>this.lifecycle.setScreenshotEnabled(o),screenshotEnabled:this.lifecycle.isScreenshotEnabled()},position:this.config.position??"right"}),this.submittingUi=this.pinPopup,this.engageScrollLock(),this.lifecycle.beginBaseCapture()}dismissNotePopup(){this.pinPopup?.destroy(),this.pinPopup=null,this.dim?.destroy(),this.dim=null,this.releaseScrollLock(),this.submittingUi=null,this.clearCurrentAnnotation(),this.destroySession()}engageScrollLock(){this.scrollLock||(this.scrollLock=di())}releaseScrollLock(){this.scrollLock?.release(),this.scrollLock=null}buildMyFeedbackHandler(){if(!this.config.user&&Qr())return async()=>{const t=await this.apiClient.createIdentityToken(ke());!t?.identity_token||!t.board_url||(Ee(t.board_url),window.open(`${t.board_url}?identity=${encodeURIComponent(t.identity_token)}`,"_blank"))}}handleSubmit(t,e){if(!this.submittingUi)return;const r=this.currentAnnotation,n=this.recordingManager?.getRecording()??void 0,s=this.teardownSubmittingUi(!0),o=()=>this.lifecycle.start(t,r,n);this.transitionTo(new wn(this,this.lastPopupPos,{element:s,pendingSession:o(),onRetrySubmission:o,initiatingKeydown:e}))}teardownSubmittingUi(t=!1){const e=this.pinPopup??this.drawSheet,r=t?e?.releaseElement():void 0;return this.teardownDrawBar(),r||e?.destroy(),this.releaseScrollLock(),this.pinPopup=null,this.drawSheet=null,this.dim?.destroy(),this.dim=null,this.session?.hideHighlight(),this.session?.destroy(),this.session=null,this.recordingManager?.destroy(),this.recordingManager=null,this.submittingUi=null,r}mountClarifyCard(t,e){this.clarify=new or(this.shadow,{apiClient:this.apiClient,messages:this.messages,element:e.element,position:this.config.position??"right",x:t?.x,y:t?.y,onFinalize:()=>this.lifecycle.finalize(),initiatingKeydown:e.initiatingKeydown,onSkip:()=>this.transitionTo(new Ie(this)),onCancel:()=>this.exitAll(),pendingSession:e.pendingSession,onRetrySubmission:e.onRetrySubmission})}revertToolbarDuringClarify(){this.toolbar?.setMode(this.via==="record"?"record":"markup")}releaseClarifyUi(){this.teardownToolbar(),this.currentAnnotation=null,this.clarify=null}handleFinalized(t,e){this.lastHandoff={feedbackId:t.id,boardUrl:t.board_url,identityToken:t.identity_token},t.board_url&&Ee(t.board_url),this.clarify?.destroy(),this.clarify=null,this.teardownToolbar(),this.lifecycle.resetScreenshotConsent(),this.showSuccess({skipFollowup:e.ai_clarify_available===!1})}showSuccess(t){this.lifecycle.dismissFinalizeFailure(),this.transitionTo(new dt(this)),this.success=new lr(this.shadow,this.messages,()=>{this.success?.destroy(),this.success=null},this.buildViewFeedbackHandler(),{...t,emailCapture:this.buildEmailCapture()})}buildEmailCapture(){if(this.config.user)return;const{feedbackId:t,identityToken:e}=this.lastHandoff;if(!(!t||!e)&&!Se())return{onSubmit:async r=>{const n=await this.apiClient.updateReporter(t,r,e);return n&&Zr(r),n}}}buildViewFeedbackHandler(){const{boardUrl:t,identityToken:e}=this.lastHandoff;if(t){if(e)return()=>{window.open(`${t}?identity=${encodeURIComponent(e)}`,"_blank")};if(this.config.userToken||this.config.userTokenFn)return async()=>{try{const r=await this.apiClient.resolveUserToken();r&&window.open(`${t}?identity=${encodeURIComponent(r)}`,"_blank")}catch{}}}}teardownToolbar(){this.pageOffset.release(),this.toolbar?.destroy(),this.toolbar=null}exitAll(){this.lifecycle.abandon(),this.via="pin",this.transitionTo(new dt(this)),this.teardownToolbar(),this.teardownDrawBar(),this.releaseScrollLock(),this.session?.hideHighlight(),this.session?.destroy(),this.session=null,this.dim?.destroy(),this.dim=null,this.pinPopup?.destroy(),this.pinPopup=null,this.drawSheet?.destroy(),this.drawSheet=null,this.clarify?.destroy(),this.clarify=null,this.currentAnnotation=null,this.submittingUi=null,this.recordingManager?.destroy(),this.recordingManager=null}destroy(){document.removeEventListener("keydown",this.handleKeydown,!0),this.exitAll(),this.consoleCollector.stop(),this.breadcrumbCollector.stop(),this.frustrationDetector?.stop(),this.dismissFrustrationPrompt(),this.clarify?.destroy(),this.success?.destroy(),this.lifecycle.dismissFinalizeFailure(),this.tab?.destroy(),this.recordingManager?.destroy(),this.shadow?.destroy()}}let T=null,L=null,A=null;function En(){A&&(document.removeEventListener("DOMContentLoaded",A),A=null)}function V(i){En(),T?.destroy(),T=i?new Sn(i):null}const Fe={init(i){typeof document>"u"||(V(),L=i,document.readyState==="loading"?(A=()=>{A=null,V(i)},document.addEventListener("DOMContentLoaded",A,{once:!0})):V(i))},destroy(){V(),L=null},setLocale(i){L&&(L.locale=i),T?.setLocale(i)},open(){T?.open()},close(){T?.close()},showLauncher(){T?.showLauncher()},hideLauncher(){T?.hideLauncher()}};typeof window<"u"&&(window.MakeThisBetter=Fe,document.addEventListener("turbo:load",()=>{const i=document.getElementById(k);L&&(!i||!i.shadowRoot)&&(i?.remove(),V(L))}));function Tn(i,t){if(i.match(/^[a-z]+:\/\//i))return i;if(i.match(/^\/\//))return window.location.protocol+i;if(i.match(/^[a-z]+:/i))return i;const e=document.implementation.createHTMLDocument(),r=e.createElement("base"),n=e.createElement("a");return e.head.appendChild(r),e.body.appendChild(n),t&&(r.href=t),n.href=i,n.href}const Cn=(()=>{let i=0;const t=()=>`0000${(Math.random()*36**4<<0).toString(36)}`.slice(-4);return()=>(i+=1,`u${t()}${i}`)})();function x(i){const t=[];for(let e=0,r=i.length;e<r;e++)t.push(i[e]);return t}let P=null;function He(i={}){return P||(i.includeStyleProperties?(P=i.includeStyleProperties,P):(P=x(window.getComputedStyle(document.documentElement)),P))}function ht(i,t){const r=(i.ownerDocument.defaultView||window).getComputedStyle(i).getPropertyValue(t);return r?parseFloat(r.replace("px","")):0}function _n(i){const t=ht(i,"border-left-width"),e=ht(i,"border-right-width");return i.clientWidth+t+e}function Ln(i){const t=ht(i,"border-top-width"),e=ht(i,"border-bottom-width");return i.clientHeight+t+e}function Rt(i,t={}){const e=t.width||_n(i),r=t.height||Ln(i);return{width:e,height:r}}function An(){let i,t;try{t=process}catch{}const e=t&&t.env?t.env.devicePixelRatio:null;return e&&(i=parseInt(e,10),Number.isNaN(i)&&(i=1)),i||window.devicePixelRatio||1}const p=16384;function Pn(i){(i.width>p||i.height>p)&&(i.width>p&&i.height>p?i.width>i.height?(i.height*=p/i.width,i.width=p):(i.width*=p/i.height,i.height=p):i.width>p?(i.height*=p/i.width,i.width=p):(i.width*=p/i.height,i.height=p))}function Rn(i,t={}){return i.toBlob?new Promise(e=>{i.toBlob(e,t.type?t.type:"image/png",t.quality?t.quality:1)}):new Promise(e=>{const r=window.atob(i.toDataURL(t.type?t.type:void 0,t.quality?t.quality:void 0).split(",")[1]),n=r.length,s=new Uint8Array(n);for(let o=0;o<n;o+=1)s[o]=r.charCodeAt(o);e(new Blob([s],{type:t.type?t.type:"image/png"}))})}function ut(i){return new Promise((t,e)=>{const r=new Image;r.onload=()=>{r.decode().then(()=>{requestAnimationFrame(()=>t(r))})},r.onerror=e,r.crossOrigin="anonymous",r.decoding="async",r.src=i})}async function In(i){return Promise.resolve().then(()=>new XMLSerializer().serializeToString(i)).then(encodeURIComponent).then(t=>`data:image/svg+xml;charset=utf-8,${t}`)}async function Mn(i,t,e){const r="http://www.w3.org/2000/svg",n=document.createElementNS(r,"svg"),s=document.createElementNS(r,"foreignObject");return n.setAttribute("width",`${t}`),n.setAttribute("height",`${e}`),n.setAttribute("viewBox",`0 0 ${t} ${e}`),s.setAttribute("width","100%"),s.setAttribute("height","100%"),s.setAttribute("x","0"),s.setAttribute("y","0"),s.setAttribute("externalResourcesRequired","true"),n.appendChild(s),s.appendChild(i),In(n)}const m=(i,t)=>{if(i instanceof t)return!0;const e=Object.getPrototypeOf(i);return e===null?!1:e.constructor.name===t.name||m(e,t)};function Dn(i){const t=i.getPropertyValue("content");return`${i.cssText} content: '${t.replace(/'|"/g,"")}';`}function Fn(i,t){return He(t).map(e=>{const r=i.getPropertyValue(e),n=i.getPropertyPriority(e);return`${e}: ${r}${n?" !important":""};`}).join(" ")}function Hn(i,t,e,r){const n=`.${i}:${t}`,s=e.cssText?Dn(e):Fn(e,r);return document.createTextNode(`${n}{${s}}`)}function $e(i,t,e,r){const n=window.getComputedStyle(i,e),s=n.getPropertyValue("content");if(s===""||s==="none")return;const o=Cn();try{t.className=`${t.className} ${o}`}catch{return}const a=document.createElement("style");a.appendChild(Hn(o,e,n,r)),t.appendChild(a)}function $n(i,t,e){$e(i,t,":before",e),$e(i,t,":after",e)}const Be="application/font-woff",Oe="image/jpeg",Bn={woff:Be,woff2:Be,ttf:"application/font-truetype",eot:"application/vnd.ms-fontobject",png:"image/png",jpg:Oe,jpeg:Oe,gif:"image/gif",tiff:"image/tiff",svg:"image/svg+xml",webp:"image/webp"};function On(i){const t=/\.([^./]*?)$/g.exec(i);return t?t[1]:""}function It(i){const t=On(i).toLowerCase();return Bn[t]||""}function Un(i){return i.split(/,/)[1]}function Mt(i){return i.search(/^(data:)/)!==-1}function zn(i,t){return`data:${t};base64,${i}`}async function Ue(i,t,e){const r=await fetch(i,t);if(r.status===404)throw new Error(`Resource "${r.url}" not found`);const n=await r.blob();return new Promise((s,o)=>{const a=new FileReader;a.onerror=o,a.onloadend=()=>{try{s(e({res:r,result:a.result}))}catch(l){o(l)}},a.readAsDataURL(n)})}const Dt={};function Nn(i,t,e){let r=i.replace(/\?.*/,"");return e&&(r=i),/ttf|otf|eot|woff2?/i.test(r)&&(r=r.replace(/.*\//,"")),t?`[${t}]${r}`:r}async function Ft(i,t,e){const r=Nn(i,t,e.includeQueryParams);if(Dt[r]!=null)return Dt[r];e.cacheBust&&(i+=(/\?/.test(i)?"&":"?")+new Date().getTime());let n;try{const s=await Ue(i,e.fetchRequestInit,({res:o,result:a})=>(t||(t=o.headers.get("Content-Type")||""),Un(a)));n=zn(s,t)}catch(s){n=e.imagePlaceholder||"";let o=`Failed to fetch resource: ${i}`;s&&(o=typeof s=="string"?s:s.message),o&&console.warn(o)}return Dt[r]=n,n}async function jn(i){const t=i.toDataURL();return t==="data:,"?i.cloneNode(!1):ut(t)}async function qn(i,t){if(i.currentSrc){const s=document.createElement("canvas"),o=s.getContext("2d");s.width=i.clientWidth,s.height=i.clientHeight,o?.drawImage(i,0,0,s.width,s.height);const a=s.toDataURL();return ut(a)}const e=i.poster,r=It(e),n=await Ft(e,r,t);return ut(n)}async function Wn(i,t){var e;try{if(!((e=i?.contentDocument)===null||e===void 0)&&e.body)return await bt(i.contentDocument.body,t,!0)}catch{}return i.cloneNode(!1)}async function Vn(i,t){return m(i,HTMLCanvasElement)?jn(i):m(i,HTMLVideoElement)?qn(i,t):m(i,HTMLIFrameElement)?Wn(i,t):i.cloneNode(ze(i))}const Yn=i=>i.tagName!=null&&i.tagName.toUpperCase()==="SLOT",ze=i=>i.tagName!=null&&i.tagName.toUpperCase()==="SVG";async function Kn(i,t,e){var r,n;if(ze(t))return t;let s=[];return Yn(i)&&i.assignedNodes?s=x(i.assignedNodes()):m(i,HTMLIFrameElement)&&(!((r=i.contentDocument)===null||r===void 0)&&r.body)?s=x(i.contentDocument.body.childNodes):s=x(((n=i.shadowRoot)!==null&&n!==void 0?n:i).childNodes),s.length===0||m(i,HTMLVideoElement)||await s.reduce((o,a)=>o.then(()=>bt(a,e)).then(l=>{l&&t.appendChild(l)}),Promise.resolve()),t}function Xn(i,t,e){const r=t.style;if(!r)return;const n=window.getComputedStyle(i);n.cssText?(r.cssText=n.cssText,r.transformOrigin=n.transformOrigin):He(e).forEach(s=>{let o=n.getPropertyValue(s);s==="font-size"&&o.endsWith("px")&&(o=`${Math.floor(parseFloat(o.substring(0,o.length-2)))-.1}px`),m(i,HTMLIFrameElement)&&s==="display"&&o==="inline"&&(o="block"),s==="d"&&t.getAttribute("d")&&(o=`path(${t.getAttribute("d")})`),r.setProperty(s,o,n.getPropertyPriority(s))})}function Gn(i,t){m(i,HTMLTextAreaElement)&&(t.innerHTML=i.value),m(i,HTMLInputElement)&&t.setAttribute("value",i.value)}function Jn(i,t){if(m(i,HTMLSelectElement)){const e=t,r=Array.from(e.children).find(n=>i.value===n.getAttribute("value"));r&&r.setAttribute("selected","")}}function Zn(i,t,e){return m(t,Element)&&(Xn(i,t,e),$n(i,t,e),Gn(i,t),Jn(i,t)),t}async function Qn(i,t){const e=i.querySelectorAll?i.querySelectorAll("use"):[];if(e.length===0)return i;const r={};for(let s=0;s<e.length;s++){const a=e[s].getAttribute("xlink:href");if(a){const l=i.querySelector(a),d=document.querySelector(a);!l&&d&&!r[a]&&(r[a]=await bt(d,t,!0))}}const n=Object.values(r);if(n.length){const s="http://www.w3.org/1999/xhtml",o=document.createElementNS(s,"svg");o.setAttribute("xmlns",s),o.style.position="absolute",o.style.width="0",o.style.height="0",o.style.overflow="hidden",o.style.display="none";const a=document.createElementNS(s,"defs");o.appendChild(a);for(let l=0;l<n.length;l++)a.appendChild(n[l]);i.appendChild(o)}return i}async function bt(i,t,e){return!e&&t.filter&&!t.filter(i)?null:Promise.resolve(i).then(r=>Vn(r,t)).then(r=>Kn(i,r,t)).then(r=>Zn(i,r,t)).then(r=>Qn(r,t))}const Ne=/url\((['"]?)([^'"]+?)\1\)/g,ts=/url\([^)]+\)\s*format\((["']?)([^"']+)\1\)/g,es=/src:\s*(?:url\([^)]+\)\s*format\([^)]+\)[,;]\s*)+/g;function is(i){const t=i.replace(/([.*+?^${}()|\[\]\/\\])/g,"\\$1");return new RegExp(`(url\\(['"]?)(${t})(['"]?\\))`,"g")}function rs(i){const t=[];return i.replace(Ne,(e,r,n)=>(t.push(n),e)),t.filter(e=>!Mt(e))}async function ns(i,t,e,r,n){try{const s=e?Tn(t,e):t,o=It(t);let a;return n||(a=await Ft(s,o,r)),i.replace(is(t),`$1${a}$3`)}catch{}return i}function ss(i,{preferredFontFormat:t}){return t?i.replace(es,e=>{for(;;){const[r,,n]=ts.exec(e)||[];if(!n)return"";if(n===t)return`src: ${r};`}}):i}function je(i){return i.search(Ne)!==-1}async function qe(i,t,e){if(!je(i))return i;const r=ss(i,e);return rs(r).reduce((s,o)=>s.then(a=>ns(a,o,t,e)),Promise.resolve(r))}async function R(i,t,e){var r;const n=(r=t.style)===null||r===void 0?void 0:r.getPropertyValue(i);if(n){const s=await qe(n,null,e);return t.style.setProperty(i,s,t.style.getPropertyPriority(i)),!0}return!1}async function os(i,t){await R("background",i,t)||await R("background-image",i,t),await R("mask",i,t)||await R("-webkit-mask",i,t)||await R("mask-image",i,t)||await R("-webkit-mask-image",i,t)}async function as(i,t){const e=m(i,HTMLImageElement);if(!(e&&!Mt(i.src))&&!(m(i,SVGImageElement)&&!Mt(i.href.baseVal)))return;const r=e?i.src:i.href.baseVal,n=await Ft(r,It(r),t);await new Promise((s,o)=>{i.onload=s,i.onerror=t.onImageErrorHandler?(...l)=>{try{s(t.onImageErrorHandler(...l))}catch(d){o(d)}}:o;const a=i;a.decode&&(a.decode=s),a.loading==="lazy"&&(a.loading="eager"),e?(i.srcset="",i.src=n):i.href.baseVal=n})}async function ls(i,t){const r=x(i.childNodes).map(n=>We(n,t));await Promise.all(r).then(()=>i)}async function We(i,t){m(i,Element)&&(await os(i,t),await as(i,t),await ls(i,t))}function cs(i,t){const{style:e}=i;t.backgroundColor&&(e.backgroundColor=t.backgroundColor),t.width&&(e.width=`${t.width}px`),t.height&&(e.height=`${t.height}px`);const r=t.style;return r!=null&&Object.keys(r).forEach(n=>{e[n]=r[n]}),i}const Ve={};async function Ye(i){let t=Ve[i];if(t!=null)return t;const r=await(await fetch(i)).text();return t={url:i,cssText:r},Ve[i]=t,t}async function Ke(i,t){let e=i.cssText;const r=/url\(["']?([^"')]+)["']?\)/g,s=(e.match(/url\([^)]+\)/g)||[]).map(async o=>{let a=o.replace(r,"$1");return a.startsWith("https://")||(a=new URL(a,i.url).href),Ue(a,t.fetchRequestInit,({result:l})=>(e=e.replace(o,`url(${l})`),[o,l]))});return Promise.all(s).then(()=>e)}function Xe(i){if(i==null)return[];const t=[],e=/(\/\*[\s\S]*?\*\/)/gi;let r=i.replace(e,"");const n=new RegExp("((@.*?keyframes [\\s\\S]*?){([\\s\\S]*?}\\s*?)})","gi");for(;;){const l=n.exec(r);if(l===null)break;t.push(l[0])}r=r.replace(n,"");const s=/@import[\s\S]*?url\([^)]*\)[\s\S]*?;/gi,o="((\\s*?(?:\\/\\*[\\s\\S]*?\\*\\/)?\\s*?@media[\\s\\S]*?){([\\s\\S]*?)}\\s*?})|(([\\s\\S]*?){([\\s\\S]*?)})",a=new RegExp(o,"gi");for(;;){let l=s.exec(r);if(l===null){if(l=a.exec(r),l===null)break;s.lastIndex=a.lastIndex}else a.lastIndex=s.lastIndex;t.push(l[0])}return t}async function ds(i,t){const e=[],r=[];return i.forEach(n=>{if("cssRules"in n)try{x(n.cssRules||[]).forEach((s,o)=>{if(s.type===CSSRule.IMPORT_RULE){let a=o+1;const l=s.href,d=Ye(l).then(h=>Ke(h,t)).then(h=>Xe(h).forEach(u=>{try{n.insertRule(u,u.startsWith("@import")?a+=1:n.cssRules.length)}catch(b){console.error("Error inserting rule from remote css",{rule:u,error:b})}})).catch(h=>{console.error("Error loading remote css",h.toString())});r.push(d)}})}catch(s){const o=i.find(a=>a.href==null)||document.styleSheets[0];n.href!=null&&r.push(Ye(n.href).then(a=>Ke(a,t)).then(a=>Xe(a).forEach(l=>{o.insertRule(l,o.cssRules.length)})).catch(a=>{console.error("Error loading remote stylesheet",a)})),console.error("Error inlining remote css file",s)}}),Promise.all(r).then(()=>(i.forEach(n=>{if("cssRules"in n)try{x(n.cssRules||[]).forEach(s=>{e.push(s)})}catch(s){console.error(`Error while reading CSS rules from ${n.href}`,s)}}),e))}function hs(i){return i.filter(t=>t.type===CSSRule.FONT_FACE_RULE).filter(t=>je(t.style.getPropertyValue("src")))}async function us(i,t){if(i.ownerDocument==null)throw new Error("Provided element is not within a Document");const e=x(i.ownerDocument.styleSheets),r=await ds(e,t);return hs(r)}function Ge(i){return i.trim().replace(/["']/g,"")}function bs(i){const t=new Set;function e(r){(r.style.fontFamily||getComputedStyle(r).fontFamily).split(",").forEach(s=>{t.add(Ge(s))}),Array.from(r.children).forEach(s=>{s instanceof HTMLElement&&e(s)})}return e(i),t}async function Je(i,t){const e=await us(i,t),r=bs(i);return(await Promise.all(e.filter(s=>r.has(Ge(s.style.fontFamily))).map(s=>{const o=s.parentStyleSheet?s.parentStyleSheet.href:null;return qe(s.cssText,o,t)}))).join(`
175
175
  `)}async function ms(i,t){const e=t.fontEmbedCSS!=null?t.fontEmbedCSS:t.skipFonts?null:await Je(i,t);if(e){const r=document.createElement("style"),n=document.createTextNode(e);r.appendChild(n),i.firstChild?i.insertBefore(r,i.firstChild):i.appendChild(r)}}async function Ze(i,t={}){const{width:e,height:r}=Rt(i,t),n=await bt(i,t,!0);return await ms(n,t),await We(n,t),cs(n,t),await Mn(n,e,r)}async function Y(i,t={}){const{width:e,height:r}=Rt(i,t),n=await Ze(i,t),s=await ut(n),o=document.createElement("canvas"),a=o.getContext("2d"),l=t.pixelRatio||An(),d=t.canvasWidth||e,h=t.canvasHeight||r;return o.width=d*l,o.height=h*l,t.skipAutoScale||Pn(o),o.style.width=`${d}`,o.style.height=`${h}`,t.backgroundColor&&(a.fillStyle=t.backgroundColor,a.fillRect(0,0,o.width,o.height)),a.drawImage(s,0,0,o.width,o.height),o}async function ps(i,t={}){const{width:e,height:r}=Rt(i,t);return(await Y(i,t)).getContext("2d").getImageData(0,0,e,r).data}async function fs(i,t={}){return(await Y(i,t)).toDataURL()}async function gs(i,t={}){return(await Y(i,t)).toDataURL("image/jpeg",t.quality||1)}async function ys(i,t={}){const e=await Y(i,t);return await Rn(e)}async function vs(i,t={}){return Je(i,t)}const ws=Object.freeze(Object.defineProperty({__proto__:null,getFontEmbedCSS:vs,toBlob:ys,toCanvas:Y,toJpeg:gs,toPixelData:ps,toPng:fs,toSvg:Ze},Symbol.toStringTag,{value:"Module"}));return Fe}();
176
176
  //# sourceMappingURL=makethisbetter.js.map