@usero/sdk 1.1.11 → 1.1.13

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.
@@ -1,4 +1,4 @@
1
- var Usero=(function(exports){'use strict';var Be={1:"\u{1F61E}",2:"\u{1F610}",3:"\u{1F60A}",4:"\u{1F929}"},ee={1:"Needs work",2:"It's okay",3:"Pretty good",4:"Amazing!"},Ne={1:"linear-gradient(135deg,#ff6b6b14,#ff6b6b1f)",2:"linear-gradient(135deg,#9ca3af0f,#9ca3af1a)",3:"linear-gradient(135deg,#3b82f614,#3b82f61f)",4:"linear-gradient(135deg,#f59e0b14,#f59e0b1f)"},K="https://usero.io",he={primary:"#2563eb",background:"#ffffff",text:"#374151",border:"#e5e7eb",shadow:"0 10px 15px -3px rgba(0, 0, 0, 0.1), 0 4px 6px -2px rgba(0, 0, 0, 0.05)"},te={primary:"#2563eb",background:"#1f2937",text:"#f9fafb",border:"#374151",shadow:"0 10px 15px -3px rgba(0, 0, 0, 0.3), 0 4px 6px -2px rgba(0, 0, 0, 0.2)"};function ut(t={}){return {...he,...t}}function ft(t){return typeof t=="object"&&t!==null&&"error"in t}function pt(t){if(typeof t!="object"||t===null)return {success:false,error:"Invalid response"};let n=t,o=n.success===true,s=typeof n.error=="string"?n.error:void 0,l=n.screenshot,i;if(typeof l=="object"&&l!==null){let a=l;typeof a.fileName=="string"&&typeof a.url=="string"&&typeof a.fileSize=="number"&&typeof a.mimeType=="string"&&(i={fileName:a.fileName,url:a.url,fileSize:a.fileSize,mimeType:a.mimeType,width:typeof a.width=="number"?a.width:void 0,height:typeof a.height=="number"?a.height:void 0});}return {success:o,error:s,screenshot:i}}var ne=class{constructor(n=K){this.baseUrl=n.replace(/\/$/,"");}async submitFeedback(n){try{let o=await fetch(`${this.baseUrl}/api/feedback`,{method:"POST",headers:{"Content-Type":"application/json",Accept:"application/json"},body:JSON.stringify(n),signal:AbortSignal.timeout(1e4)});if(!o.ok){let i=`HTTP ${o.status}: ${o.statusText}`;try{let a=await o.json();ft(a)&&typeof a.error=="string"&&(i=a.error);}catch{}throw new Error(i)}let s=await o.json(),l=typeof s=="object"&&s!==null&&"message"in s&&typeof s.message=="string"?s.message:"Feedback submitted successfully";return {success:!0,data:s,message:l}}catch(o){return {success:false,error:o instanceof Error?o.message:"An unexpected error occurred"}}}async uploadScreenshot(n,o){let s=new FormData;s.append("screenshot",n),s.append("clientId",o);let l=await fetch(`${this.baseUrl}/api/screenshots`,{method:"POST",body:s,signal:AbortSignal.timeout(3e4)}),i={success:false};try{let a=await l.json();i=pt(a);}catch{}if(!l.ok||!i.success||!i.screenshot){let a=i.error??`HTTP ${l.status}: ${l.statusText}`;throw new Error(a)}return i.screenshot}ping(){fetch(`${this.baseUrl}/api/ping`,{signal:AbortSignal.timeout(5e3)}).catch(()=>{});}};function gt(t){if(t.startsWith("#")||typeof document>"u")return t;let o=document.createElement("canvas").getContext("2d");return o?(o.fillStyle=t,o.fillStyle):t}function ye(t){let n=gt(t);if(!n.startsWith("#")||n.length<7)return n;let o=parseInt(n.slice(1,3),16),s=parseInt(n.slice(3,5),16),l=parseInt(n.slice(5,7),16),i=Math.max(0,o-60),a=Math.min(255,s+40),w=Math.min(255,l+20);return `#${[i,a,w].map(C=>C.toString(16).padStart(2,"0")).join("")}`}var xe="usero:anonymous-id",We="usero:session-replay:sdk-session-id",G=null,re=null,we=null,ve=null,oe=null;function Se(){if(typeof crypto<"u"&&typeof crypto.randomUUID=="function")return crypto.randomUUID();let t=new Uint8Array(16);if(typeof crypto<"u"&&typeof crypto.getRandomValues=="function")crypto.getRandomValues(t);else for(let o=0;o<t.length;o+=1)t[o]=Math.floor(Math.random()*256);let n="";for(let o of t)n+=o.toString(16).padStart(2,"0");return n}function mt(t){if(typeof window>"u")return null;try{return window.localStorage?.getItem(t)??null}catch{return null}}function _e(t,n){if(!(typeof window>"u"))try{window.localStorage?.setItem(t,n);}catch{}}function bt(t){if(typeof window>"u")return null;try{return window.sessionStorage?.getItem(t)??null}catch{return null}}function ht(t,n){if(!(typeof window>"u"))try{window.sessionStorage?.setItem(t,n);}catch{}}function ke(){if(G)return G;let t=mt(xe);if(t&&/^[a-z0-9-]{8,}$/i.test(t))return G=t,t;let n=Se();return _e(xe,n),G=n,n}function yt(){let t=Se();return G=t,_e(xe,t),oe=null,we=null,t}function je(){if(re)return re;let t=bt(We);if(t&&/^[a-z0-9-]{8,}$/i.test(t))return re=t,t;let n=Se();return ht(We,n),re=n,n}function qe(){return we}function Ke(t){ve===null&&(ve=t);}function Ge(){return ve}function xt(t,n){let o=n.traits??{},l=Object.keys(o).sort().map(i=>[i,o[i]??null]);return JSON.stringify([t,n.id,n.email??null,n.displayName??null,l])}async function Ve(t,n){let o=ke();we=n.id;let s=xt(o,n);if(s===oe)return false;let l=`${t.apiUrl.replace(/\/$/,"")}/api/identify`,i=JSON.stringify({clientId:t.clientId,anonymousId:o,externalUserId:n.id,email:n.email,displayName:n.displayName,traits:n.traits});if(typeof document<"u"&&document.visibilityState==="hidden"&&typeof navigator<"u"&&typeof navigator.sendBeacon=="function")try{let a=new Blob([i],{type:"application/json"});if(navigator.sendBeacon(l,a))return oe=s,!0}catch{}try{let a=await fetch(l,{method:"POST",headers:{"Content-Type":"application/json"},body:i,keepalive:!0});if(!a.ok)return !0;try{let w=await a.json();w&&w.accepted===!0&&(oe=s);}catch{}return !0}catch{return false}}function Je(){yt();}function Ye(t){let n=`[usero:${t}]`;return {debug:(...o)=>{typeof console<"u"&&console.debug(n,...o);},info:(...o)=>{typeof console<"u"&&console.info(n,...o);},warn:(...o)=>{typeof console<"u"&&console.warn(n,...o);},error:(...o)=>{typeof console<"u"&&console.error(n,...o);}}}function Xe(t){let n=[],o=t.rating!=null,s=!!t.comment?.trim();return !o&&!s&&n.push("Add rating or comment"),o&&t.rating!==void 0&&![1,2,3,4].includes(t.rating)&&n.push("Invalid rating"),s&&t.comment!==void 0&&(t.comment.length>1e3&&n.push("Comment too long"),/<script[^>]*>.*?<\/script>/gi.test(t.comment)&&n.push("Invalid comment")),{isValid:n.length===0,errors:n}}var Qe=`
1
+ var Usero=(function(exports){'use strict';var We={1:"\u{1F61E}",2:"\u{1F610}",3:"\u{1F60A}",4:"\u{1F929}"},ne={1:"Needs work",2:"It's okay",3:"Pretty good",4:"Amazing!"},je={1:"linear-gradient(135deg,#ff6b6b14,#ff6b6b1f)",2:"linear-gradient(135deg,#9ca3af0f,#9ca3af1a)",3:"linear-gradient(135deg,#3b82f614,#3b82f61f)",4:"linear-gradient(135deg,#f59e0b14,#f59e0b1f)"},G="https://usero.io",Se={primary:"#2563eb",background:"#ffffff",text:"#374151",border:"#e5e7eb",shadow:"0 10px 15px -3px rgba(0, 0, 0, 0.1), 0 4px 6px -2px rgba(0, 0, 0, 0.05)"},re={primary:"#2563eb",background:"#1f2937",text:"#f9fafb",border:"#374151",shadow:"0 10px 15px -3px rgba(0, 0, 0, 0.3), 0 4px 6px -2px rgba(0, 0, 0, 0.2)"};function mt(e={}){return {...Se,...e}}function bt(e){return typeof e=="object"&&e!==null&&"error"in e}function ht(e){if(typeof e!="object"||e===null)return {success:false,error:"Invalid response"};let n=e,o=n.success===true,s=typeof n.error=="string"?n.error:void 0,l=n.screenshot,i;if(typeof l=="object"&&l!==null){let a=l;typeof a.fileName=="string"&&typeof a.url=="string"&&typeof a.fileSize=="number"&&typeof a.mimeType=="string"&&(i={fileName:a.fileName,url:a.url,fileSize:a.fileSize,mimeType:a.mimeType,width:typeof a.width=="number"?a.width:void 0,height:typeof a.height=="number"?a.height:void 0});}return {success:o,error:s,screenshot:i}}var oe=class{constructor(n=G){this.baseUrl=n.replace(/\/$/,"");}async submitFeedback(n){try{let o=await fetch(`${this.baseUrl}/api/feedback`,{method:"POST",headers:{"Content-Type":"application/json",Accept:"application/json"},body:JSON.stringify(n),signal:AbortSignal.timeout(1e4)});if(!o.ok){let i=`HTTP ${o.status}: ${o.statusText}`;try{let a=await o.json();bt(a)&&typeof a.error=="string"&&(i=a.error);}catch{}throw new Error(i)}let s=await o.json(),l=typeof s=="object"&&s!==null&&"message"in s&&typeof s.message=="string"?s.message:"Feedback submitted successfully";return {success:!0,data:s,message:l}}catch(o){return {success:false,error:o instanceof Error?o.message:"An unexpected error occurred"}}}async uploadScreenshot(n,o){let s=new FormData;s.append("screenshot",n),s.append("clientId",o);let l=await fetch(`${this.baseUrl}/api/screenshots`,{method:"POST",body:s,signal:AbortSignal.timeout(3e4)}),i={success:false};try{let a=await l.json();i=ht(a);}catch{}if(!l.ok||!i.success||!i.screenshot){let a=i.error??`HTTP ${l.status}: ${l.statusText}`;throw new Error(a)}return i.screenshot}ping(){fetch(`${this.baseUrl}/api/ping`,{signal:AbortSignal.timeout(5e3)}).catch(()=>{});}};function yt(e){if(e.startsWith("#")||typeof document>"u")return e;let o=document.createElement("canvas").getContext("2d");return o?(o.fillStyle=e,o.fillStyle):e}function we(e){let n=yt(e);if(!n.startsWith("#")||n.length<7)return n;let o=parseInt(n.slice(1,3),16),s=parseInt(n.slice(3,5),16),l=parseInt(n.slice(5,7),16),i=Math.max(0,o-60),a=Math.min(255,s+40),S=Math.min(255,l+20);return `#${[i,a,S].map(O=>O.toString(16).padStart(2,"0")).join("")}`}var ie="usero:anonymous-id",se="usero:session-replay:sdk-session-id",D=null,M=null,le=null,ae=null,J=null;function ke(){if(typeof crypto<"u"&&typeof crypto.randomUUID=="function")return crypto.randomUUID();let e=new Uint8Array(16);if(typeof crypto<"u"&&typeof crypto.getRandomValues=="function")crypto.getRandomValues(e);else for(let o=0;o<e.length;o+=1)e[o]=Math.floor(Math.random()*256);let n="";for(let o of e)n+=o.toString(16).padStart(2,"0");return n}function xt(e){if(typeof window>"u")return null;try{return window.localStorage?.getItem(e)??null}catch{return null}}function qe(e,n){if(!(typeof window>"u"))try{window.localStorage?.setItem(e,n);}catch{}}function vt(e){if(typeof window>"u")return null;try{return window.sessionStorage?.getItem(e)??null}catch{return null}}function Ke(e,n){if(!(typeof window>"u"))try{window.sessionStorage?.setItem(e,n);}catch{}}function Ee(){if(D)return D;let e=xt(ie);if(e&&/^[a-z0-9-]{8,}$/i.test(e))return D=e,e;let n=ke();return qe(ie,n),D=n,n}function St(){let e=ke();return D=e,qe(ie,e),J=null,le=null,e}function Ve(e){return /^[a-z0-9-]{8,}$/i.test(e)}function Ue(){if(M)return M;let e=vt(se);if(e&&Ve(e))return M=e,e;let n=ke();return Ke(se,n),M=n,n}function Te(e){Ve(e)&&M!==e&&(M=e,Ke(se,e));}function Ge(){return le}function Je(e){ae===null&&(ae=e);}function Ye(){return ae}function wt(e,n){let o=n.traits??{},l=Object.keys(o).sort().map(i=>[i,o[i]??null]);return JSON.stringify([e,n.id,n.email??null,n.displayName??null,l])}async function Xe(e,n){let o=Ee();le=n.id;let s=wt(o,n);if(s===J)return false;let l=`${e.apiUrl.replace(/\/$/,"")}/api/identify`,i=JSON.stringify({clientId:e.clientId,anonymousId:o,externalUserId:n.id,email:n.email,displayName:n.displayName,traits:n.traits});if(typeof document<"u"&&document.visibilityState==="hidden"&&typeof navigator<"u"&&typeof navigator.sendBeacon=="function")try{let a=new Blob([i],{type:"application/json"});if(navigator.sendBeacon(l,a))return J=s,!0}catch{}try{let a=await fetch(l,{method:"POST",headers:{"Content-Type":"application/json"},body:i,keepalive:!0});if(!a.ok)return !0;try{let S=await a.json();S&&S.accepted===!0&&(J=s);}catch{}return !0}catch{return false}}function Qe(){St();}var Ze={ANON_STORAGE_KEY:ie,SDK_SESSION_STORAGE_KEY:se,reseatSdkSessionId:Te,getOrMintSdkSessionId:Ue,resetIdentityState:()=>{D=null,M=null,le=null,ae=null,J=null;}};function et(e){let n=`[usero:${e}]`;return {debug:(...o)=>{typeof console<"u"&&console.debug(n,...o);},info:(...o)=>{typeof console<"u"&&console.info(n,...o);},warn:(...o)=>{typeof console<"u"&&console.warn(n,...o);},error:(...o)=>{typeof console<"u"&&console.error(n,...o);}}}function tt(e){let n=[],o=e.rating!=null,s=!!e.comment?.trim();return !o&&!s&&n.push("Add rating or comment"),o&&e.rating!==void 0&&![1,2,3,4].includes(e.rating)&&n.push("Invalid rating"),s&&e.comment!==void 0&&(e.comment.length>1e3&&n.push("Comment too long"),/<script[^>]*>.*?<\/script>/gi.test(e.comment)&&n.push("Invalid comment")),{isValid:n.length===0,errors:n}}var nt=`
2
2
  @keyframes spin {
3
3
  0% { transform: rotate(0deg); }
4
4
  100% { transform: rotate(360deg); }
@@ -423,52 +423,52 @@ var Usero=(function(exports){'use strict';var Be={1:"\u{1F61E}",2:"\u{1F610}",3:
423
423
  .fb-el { font-size: 11px !important; }
424
424
  .fb-sub { padding: 12px 20px !important; font-size: 16px !important; }
425
425
  }
426
- `;function vt(){return typeof window>"u"||typeof window.matchMedia!="function"?te:window.matchMedia("(prefers-color-scheme: dark)").matches?te:window.matchMedia("(prefers-color-scheme: light)").matches?he:te}function Ee(t){let n=vt();return t?{...n,...t}:n}var Ze="feedback_user_email";function M(t){return t.replace(/[&<>"']/g,n=>{switch(n){case "&":return "&amp;";case "<":return "&lt;";case ">":return "&gt;";case '"':return "&quot;";case "'":return "&#x27;";default:return n}})}function wt(t,n){let o=t;for(let s of n){if(!s||typeof s!="object")continue;let{metadata:l,...i}=s;o={...o,...i},l&&typeof l=="object"&&(o.metadata={...o.metadata??{},...l});}return o}function St(){if(typeof window>"u")return "";try{return window.localStorage.getItem(Ze)??""}catch{return ""}}function kt(t){try{window.localStorage.setItem(Ze,t);}catch{}}function _t(t){if(typeof document>"u")return {destroy:()=>{},open:()=>{},close:()=>{},update:()=>{},whenReady:()=>Promise.resolve(),identify:()=>{}};let{clientId:n,baseUrl:o}=t;if(!n||n.length<3){let e=new Error("Invalid config. Contact admin.");return t.onError?.(e),{destroy:()=>{},open:()=>{},close:()=>{},update:()=>{},whenReady:()=>Promise.resolve(),identify:()=>{}}}let s=t.position??"right",l=t.theme,i=Ee(l),a=t.title??"Share Feedback",w=t.placeholder??"Tell us what you think... (optional)",C=t.showEmailOption??true,E=t.showScreenshotOption??true,Ue=t.environment,ie=t.metadata,Te=t.onSubmit,se=t.onError,$e=t.onOpen,Ie=t.onClose,V=t.getUser,J=t.user,ae=new ne(o),et={apiUrl:o??K,clientId:n},Y=null,le,de,ce;function D(e){let r=e??null;if(r){if(r.id===Y&&r.traits===le&&r.email===de&&r.displayName===ce)return;Ve(et,r),Y=r.id,le=r.traits,de=r.email,ce=r.displayName;}else Y!==null&&(Je(),Y=null,le=void 0,de=void 0,ce=void 0);}function ue(){if(V)try{D(V()??null);}catch{}}t.user!==void 0?D(t.user):V&&ue();let X=t.plugins??[],fe=new Map,Q=new Map,pe=[];for(let e of X){let r={clientId:n,baseUrl:o??K,logger:Ye(e.name),getStore:()=>fe.get(e.name),setStore:u=>{fe.set(e.name,u);},resolveUser:()=>{W||(J!==void 0?D(J):ue());},getSdkSessionId:()=>je(),getAnonymousId:()=>ke(),getUserId:()=>qe(),getReplayStartMs:()=>Ge(),publishReplayStartMs:u=>Ke(u)};if(Q.set(e.name,r),e.onInit){let u=(async()=>{try{await e.onInit?.(r);}catch(k){r.logger.error("onInit threw",k);}})();pe.push(u);}}let tt=pe.length===0?Promise.resolve():Promise.all(pe).then(()=>{}),b=false,Z=false,O,U="",T=false,F=St(),v=false,h=null,f=[],S=false,y=null,P=3,nt=10*1024*1024,R=document.createElement("div");R.setAttribute("data-usero-widget",""),R.style.cssText="all: initial;",document.body.appendChild(R);let z=R.attachShadow({mode:"open"});function rt(){ue();}function Me(e){try{window.dispatchEvent(new CustomEvent("usero:shadow-update",{detail:{host:R,root:z,reason:e}}));}catch{}}Me("mount");let Fe=document.createElement("style");Fe.textContent=Qe,z.appendChild(Fe);let $=document.createElement("button"),H=document.createElement("div"),c=document.createElement("div");z.appendChild($),z.appendChild(H),z.appendChild(c);function ot(e){h=e,x();}function Pe(){b||(b=true,Z=true,O=void 0,U="",T=false,h=null,f=[],y=null,S=false,ae.ping(),rt(),$e?.(),x(),Me("panel-open"));}async function it(e){if(y=null,!e.type.startsWith("image/")){y="Image files only",L();return}if(e.size>nt){y="Max 10MB",L();return}if(f.length>=P){y=`Max ${P} screenshots`,L();return}S=true,ge(),L();try{let r=await ae.uploadScreenshot(e,n);f=[...f,r];}catch(r){y=r instanceof Error?r.message:"Upload failed";}finally{S=false,ge(),L();}}function Re(e){f=f.filter((r,u)=>u!==e),ge(),L();}function B(){b&&(b=false,Ie?.(),x());}function Le(){return S?'<span class="fb-ups"></span> Uploading...':"\u{1F4F7} Add screenshot"}function st(){let e=f.length>=P,r=S||e;return `
426
+ `;var Kt=Ze;function kt(){return typeof window>"u"||typeof window.matchMedia!="function"?re:window.matchMedia("(prefers-color-scheme: dark)").matches?re:window.matchMedia("(prefers-color-scheme: light)").matches?Se:re}function Ie(e){let n=kt();return e?{...n,...e}:n}var rt="feedback_user_email";function F(e){return e.replace(/[&<>"']/g,n=>{switch(n){case "&":return "&amp;";case "<":return "&lt;";case ">":return "&gt;";case '"':return "&quot;";case "'":return "&#x27;";default:return n}})}function Et(e,n){let o=e;for(let s of n){if(!s||typeof s!="object")continue;let{metadata:l,...i}=s;o={...o,...i},l&&typeof l=="object"&&(o.metadata={...o.metadata??{},...l});}return o}function Ut(){if(typeof window>"u")return "";try{return window.localStorage.getItem(rt)??""}catch{return ""}}function Tt(e){try{window.localStorage.setItem(rt,e);}catch{}}function Vt(e){if(typeof document>"u")return {destroy:()=>{},open:()=>{},close:()=>{},update:()=>{},whenReady:()=>Promise.resolve(),identify:()=>{}};let{clientId:n,baseUrl:o}=e;if(!n||n.length<3){let t=new Error("Invalid config. Contact admin.");return e.onError?.(t),{destroy:()=>{},open:()=>{},close:()=>{},update:()=>{},whenReady:()=>Promise.resolve(),identify:()=>{}}}let s=e.position??"right",l=e.theme,i=Ie(l),a=e.title??"Share Feedback",S=e.placeholder??"Tell us what you think... (optional)",O=e.showEmailOption??true,E=e.showScreenshotOption??true,$e=e.environment,de=e.metadata,Me=e.onSubmit,ce=e.onError,Fe=e.onOpen,Pe=e.onClose,Y=e.getUser,X=e.user,ue=new oe(o),ot={apiUrl:o??G,clientId:n},Q=null,fe,pe,ge;function z(t){let r=t??null;if(r){if(r.id===Q&&r.traits===fe&&r.email===pe&&r.displayName===ge)return;Xe(ot,r),Q=r.id,fe=r.traits,pe=r.email,ge=r.displayName;}else Q!==null&&(Qe(),Q=null,fe=void 0,pe=void 0,ge=void 0);}function me(){if(Y)try{z(Y()??null);}catch{}}e.user!==void 0?z(e.user):Y&&me();let Z=e.plugins??[],be=new Map,ee=new Map,he=[];for(let t of Z){let r={clientId:n,baseUrl:o??G,logger:et(t.name),getStore:()=>be.get(t.name),setStore:d=>{be.set(t.name,d);},resolveUser:()=>{j||(X!==void 0?z(X):me());},getSdkSessionId:()=>Ue(),reseatSdkSessionId:d=>Te(d),getAnonymousId:()=>Ee(),getUserId:()=>Ge(),getReplayStartMs:()=>Ye(),publishReplayStartMs:d=>Je(d)};if(ee.set(t.name,r),t.onInit){let d=(async()=>{try{await t.onInit?.(r);}catch(k){r.logger.error("onInit threw",k);}})();he.push(d);}}let it=he.length===0?Promise.resolve():Promise.all(he).then(()=>{}),b=false,te=false,H,U="",T=false,P=Ut(),v=false,h=null,f=[],w=false,y=null,R=3,st=10*1024*1024,L=document.createElement("div");L.setAttribute("data-usero-widget",""),L.style.cssText="all: initial;",document.body.appendChild(L);let _=L.attachShadow({mode:"open"});function at(){me();}function Re(t){try{window.dispatchEvent(new CustomEvent("usero:shadow-update",{detail:{host:L,root:_,reason:t}}));}catch{}}Re("mount");let Le=document.createElement("style");Le.textContent=nt,_.appendChild(Le);let I=document.createElement("button"),B=document.createElement("div"),u=document.createElement("div");_.appendChild(I),_.appendChild(B),_.appendChild(u);function lt(t){h=t,x();}function Ae(){b||(b=true,te=true,H=void 0,U="",T=false,h=null,f=[],y=null,w=false,ue.ping(),at(),Fe?.(),x(),Re("panel-open"));}async function dt(t){if(y=null,!t.type.startsWith("image/")){y="Image files only",A();return}if(t.size>st){y="Max 10MB",A();return}if(f.length>=R){y=`Max ${R} screenshots`,A();return}w=true,ye(),A();try{let r=await ue.uploadScreenshot(t,n);f=[...f,r];}catch(r){y=r instanceof Error?r.message:"Upload failed";}finally{w=false,ye(),A();}}function Ce(t){f=f.filter((r,d)=>d!==t),ye(),A();}function N(){b&&(b=false,Pe?.(),x());}function De(){return w?'<span class="fb-ups"></span> Uploading...':"\u{1F4F7} Add screenshot"}function ct(){let t=f.length>=R,r=w||t;return `
427
427
  <input type="file" accept="image/*" data-role="screenshot-input" style="display:none;" aria-label="Choose screenshot" />
428
428
  <button type="button" class="fb-upb ${r?"fb-upb--dis":""}" data-role="screenshot-pick" ${r?"disabled":""} style="border:1px solid ${i.border};color:${i.text};">
429
- ${Le()}
429
+ ${De()}
430
430
  </button>
431
- `}function Ae(){let e=f.length>=P,r=f.map((m,g)=>`
431
+ `}function Oe(){let t=f.length>=R,r=f.map((m,g)=>`
432
432
  <div class="fb-sp">
433
- <img src="${M(m.url)}" alt="Screenshot ${g+1}" class="fb-si" />
433
+ <img src="${F(m.url)}" alt="Screenshot ${g+1}" class="fb-si" />
434
434
  <button type="button" class="fb-sr" data-role="screenshot-remove" data-index="${g}" aria-label="Remove screenshot">\u2715</button>
435
435
  </div>
436
- `).join(""),u=y?`<div class="fb-upe">\u26A0 ${M(y)}</div>`:"",k=e?`<div class="fb-sl">Max ${P}</div>`:"";return y||f.length>0||e?`<div class="fb-up-extras">${u}${f.length>0?`<div class="fb-ss">${r}</div>`:""}${k}</div>`:""}function ge(){if(!E)return;let e=c.querySelector('button[data-role="screenshot-pick"]');if(!e)return;let r=f.length>=P,u=S||r;e.disabled=u,e.classList.toggle("fb-upb--dis",u),e.innerHTML=Le();}function L(){if(!E)return;let e=c.querySelector(".fb-up");e&&(e.innerHTML=Ae(),e.querySelectorAll('button[data-role="screenshot-remove"]').forEach(r=>{r.addEventListener("click",()=>{let u=Number(r.dataset.index);Number.isInteger(u)&&Re(u);});}));}async function Ce(){if(v)return;v=true,h=null,x();let e={rating:O,comment:U.trim()||void 0,userEmail:T&&F.trim()?F.trim():void 0,screenshots:f.length>0?f:void 0,metadata:{pageUrl:window.location.href,pageTitle:document.title||"Untitled Page",referrer:document.referrer||void 0,timestamp:Date.now()}},r={clientId:n,rating:e.rating,comment:e.comment,userEmail:e.userEmail,pageUrl:e.metadata.pageUrl,pageTitle:e.metadata.pageTitle,referrer:e.metadata.referrer,environment:Ue};f.length>0&&(r.screenshots=f),ie!==void 0&&(r.metadata=ie);let u=Xe(r);if(!u.isValid){v=false,ot({type:"error",text:u.errors.join(", ")});return}let k=r;if(X.length>0){let m=X.map(async _=>{if(!_.onFeedbackSubmit)return;let I=Q.get(_.name);if(I)try{return await _.onFeedbackSubmit(I,r)}catch(me){I.logger.error("onFeedbackSubmit threw",me);return}}),g=await Promise.all(m);k=wt(r,g);}try{let m=await ae.submitFeedback(k);if(m.success)T&&F&&kt(F),Te?.(e),O=void 0,U="",T=!1,f=[],y=null,h={type:"success",text:"Thank you!"};else {let g=m.error??"Error occurred. Try again.";se?.(new Error(g)),h={type:"error",text:g};}}catch(m){let g=m instanceof Error?m.message:"Error occurred. Try again.";se?.(new Error(g)),h={type:"error",text:g};}finally{v=false,x();}}function at(){$.className=`fb-btn fb-btn--${s} ${b?"fb-btn--open":""}`,$.setAttribute("aria-label","Open feedback"),$.type="button",$.style.background=`linear-gradient(135deg, ${i.primary}, ${ye(i.primary)})`,$.innerHTML=b?'<span style="font-size:20px;">\u2715</span>':"";}function lt(){H.className="fb-backdrop",H.style.display=b?"block":"none",H.setAttribute("aria-label","Close modal");}function dt(){c.className=`fb-pnl-base fb-pnl--${s} ${b?"fb-pnl--open":"fb-pnl--closed"}`,c.style.backgroundColor=i.background,s==="right"?(c.style.borderLeft=`1px solid ${i.border}`,c.style.borderRight=""):(c.style.borderRight=`1px solid ${i.border}`,c.style.borderLeft=""),c.setAttribute("role","dialog"),c.setAttribute("aria-modal","true"),c.setAttribute("aria-labelledby","usero-feedback-title");let e=1e3-U.length,r=e<50,u=[1,2,3,4].map(d=>{let p=O===d,ct=Ne[d];return `
437
- <div class="${["fb-ec",p&&"fb-ec--sel"].filter(Boolean).join(" ")}" style="background:${ct}">
438
- <button type="button" class="fb-eb" data-rating="${d}" role="radio" aria-checked="${p}" aria-label="${d}: ${ee[d]}" style="color:${i.text}">
439
- <div class="fb-ei"><span role="img" aria-label="${ee[d]}">${Be[d]}</span></div>
440
- <div class="fb-el" style="color:${i.text}">${ee[d]}</div>
436
+ `).join(""),d=y?`<div class="fb-upe">\u26A0 ${F(y)}</div>`:"",k=t?`<div class="fb-sl">Max ${R}</div>`:"";return y||f.length>0||t?`<div class="fb-up-extras">${d}${f.length>0?`<div class="fb-ss">${r}</div>`:""}${k}</div>`:""}function ye(){if(!E)return;let t=u.querySelector('button[data-role="screenshot-pick"]');if(!t)return;let r=f.length>=R,d=w||r;t.disabled=d,t.classList.toggle("fb-upb--dis",d),t.innerHTML=De();}function A(){if(!E)return;let t=u.querySelector(".fb-up");t&&(t.innerHTML=Oe(),t.querySelectorAll('button[data-role="screenshot-remove"]').forEach(r=>{r.addEventListener("click",()=>{let d=Number(r.dataset.index);Number.isInteger(d)&&Ce(d);});}));}async function ze(){if(v)return;v=true,h=null,x();let t={rating:H,comment:U.trim()||void 0,userEmail:T&&P.trim()?P.trim():void 0,screenshots:f.length>0?f:void 0,metadata:{pageUrl:window.location.href,pageTitle:document.title||"Untitled Page",referrer:document.referrer||void 0,timestamp:Date.now()}},r={clientId:n,rating:t.rating,comment:t.comment,userEmail:t.userEmail,pageUrl:t.metadata.pageUrl,pageTitle:t.metadata.pageTitle,referrer:t.metadata.referrer,environment:$e};f.length>0&&(r.screenshots=f),de!==void 0&&(r.metadata=de);let d=tt(r);if(!d.isValid){v=false,lt({type:"error",text:d.errors.join(", ")});return}let k=r;if(Z.length>0){let m=Z.map(async q=>{if(!q.onFeedbackSubmit)return;let $=ee.get(q.name);if($)try{return await q.onFeedbackSubmit($,r)}catch(xe){$.logger.error("onFeedbackSubmit threw",xe);return}}),g=await Promise.all(m);k=Et(r,g);}try{let m=await ue.submitFeedback(k);if(m.success)T&&P&&Tt(P),Me?.(t),H=void 0,U="",T=!1,f=[],y=null,h={type:"success",text:"Thank you!"};else {let g=m.error??"Error occurred. Try again.";ce?.(new Error(g)),h={type:"error",text:g};}}catch(m){let g=m instanceof Error?m.message:"Error occurred. Try again.";ce?.(new Error(g)),h={type:"error",text:g};}finally{v=false,x();}}function ut(){I.className=`fb-btn fb-btn--${s} ${b?"fb-btn--open":""}`,I.setAttribute("aria-label","Open feedback"),I.type="button",I.style.background=`linear-gradient(135deg, ${i.primary}, ${we(i.primary)})`,I.innerHTML=b?'<span style="font-size:20px;">\u2715</span>':"";}function ft(){B.className="fb-backdrop",B.style.display=b?"block":"none",B.setAttribute("aria-label","Close modal");}function pt(){u.className=`fb-pnl-base fb-pnl--${s} ${b?"fb-pnl--open":"fb-pnl--closed"}`,u.style.backgroundColor=i.background,s==="right"?(u.style.borderLeft=`1px solid ${i.border}`,u.style.borderRight=""):(u.style.borderRight=`1px solid ${i.border}`,u.style.borderLeft=""),u.setAttribute("role","dialog"),u.setAttribute("aria-modal","true"),u.setAttribute("aria-labelledby","usero-feedback-title");let t=1e3-U.length,r=t<50,d=[1,2,3,4].map(c=>{let p=H===c,gt=je[c];return `
437
+ <div class="${["fb-ec",p&&"fb-ec--sel"].filter(Boolean).join(" ")}" style="background:${gt}">
438
+ <button type="button" class="fb-eb" data-rating="${c}" role="radio" aria-checked="${p}" aria-label="${c}: ${ne[c]}" style="color:${i.text}">
439
+ <div class="fb-ei"><span role="img" aria-label="${ne[c]}">${We[c]}</span></div>
440
+ <div class="fb-el" style="color:${i.text}">${ne[c]}</div>
441
441
  </button>
442
442
  </div>
443
- `}).join(""),k=h?`<div class="fb-msg fb-msg--header ${h.type==="success"?"fb-msg--ok":"fb-msg--err"}">${h.type==="success"?"\u2713":"\u26A0"} ${M(h.text)}</div>`:"",m=E?st():"",g=E?Ae():"",_=C?`
443
+ `}).join(""),k=h?`<div class="fb-msg fb-msg--header ${h.type==="success"?"fb-msg--ok":"fb-msg--err"}">${h.type==="success"?"\u2713":"\u26A0"} ${F(h.text)}</div>`:"",m=E?ct():"",g=E?Oe():"",q=O?`
444
444
  <div class="fb-email">
445
445
  <label class="fb-email-lbl" style="color:${i.text}">
446
446
  <input type="checkbox" class="fb-email-cb" data-role="share-email" ${T?"checked":""} aria-label="Share email" />
447
447
  <span>Share my email</span>
448
448
  </label>
449
- ${T?`<input type="email" class="fb-email-inp" data-role="email-input" value="${M(F)}" placeholder="your.email@example.com" aria-label="Email" maxlength="254" autocomplete="email" style="border:1px solid ${i.border};color:${i.text};background-color:${i.background};" />`:""}
449
+ ${T?`<input type="email" class="fb-email-inp" data-role="email-input" value="${F(P)}" placeholder="your.email@example.com" aria-label="Email" maxlength="254" autocomplete="email" style="border:1px solid ${i.border};color:${i.text};background-color:${i.background};" />`:""}
450
450
  </div>
451
- `:"",I=v,me=`background:linear-gradient(135deg, ${i.primary}, ${ye(i.primary)});color:#ffffff;${I?"opacity:0.6;cursor:not-allowed;":""}`;c.innerHTML=`
451
+ `:"",$=v,xe=`background:linear-gradient(135deg, ${i.primary}, ${we(i.primary)});color:#ffffff;${$?"opacity:0.6;cursor:not-allowed;":""}`;u.innerHTML=`
452
452
  <div class="fb-cnt">
453
453
  <div class="fb-hdr" style="border-bottom:1px solid ${i.border}">
454
- <h2 id="usero-feedback-title" class="fb-ttl" style="color:${i.text}">${M(a)}</h2>
454
+ <h2 id="usero-feedback-title" class="fb-ttl" style="color:${i.text}">${F(a)}</h2>
455
455
  ${k}
456
456
  <button class="fb-close-btn" data-role="close" style="color:${i.text}" aria-label="Close" type="button">\u2715</button>
457
457
  </div>
458
458
  <form data-role="form">
459
- <div class="fb-es" role="radiogroup" aria-label="Rate experience">${u}</div>
460
- <textarea class="fb-ta" data-role="comment" placeholder="${M(w)}" aria-label="Comments" maxlength="1000" rows="2" style="border:1px solid ${i.border};color:${i.text};background-color:${i.background};">${M(U)}</textarea>
459
+ <div class="fb-es" role="radiogroup" aria-label="Rate experience">${d}</div>
460
+ <textarea class="fb-ta" data-role="comment" placeholder="${F(S)}" aria-label="Comments" maxlength="1000" rows="2" style="border:1px solid ${i.border};color:${i.text};background-color:${i.background};">${F(U)}</textarea>
461
461
  <div class="fb-toolrow">
462
462
  ${m}
463
- <div class="fb-charcount${r?" fb-charcount--low":""}" data-role="charcount" style="color:${r?"#dc2626":i.text};opacity:${r?1:.6};">${e} chars remaining</div>
463
+ <div class="fb-charcount${r?" fb-charcount--low":""}" data-role="charcount" style="color:${r?"#dc2626":i.text};opacity:${r?1:.6};">${t} chars remaining</div>
464
464
  </div>
465
465
  ${E?`<div class="fb-up">${g}</div>`:""}
466
- ${_}
467
- <button class="fb-sub ${I?"fb-sub--dis":""}" type="submit" aria-label="Submit" ${I?"disabled":""} style="${me}">
466
+ ${q}
467
+ <button class="fb-sub ${$?"fb-sub--dis":""}" type="submit" aria-label="Submit" ${$?"disabled":""} style="${xe}">
468
468
  ${v?'<span class="fb-spin"></span>':""}
469
469
  ${v?"Submitting...":"Send Feedback \u{1F680}"}
470
470
  </button>
471
471
  </form>
472
472
  </div>
473
- `,c.querySelector('form[data-role="form"]')?.addEventListener("submit",d=>{d.preventDefault(),Ce();}),c.querySelector('button[data-role="close"]')?.addEventListener("click",B),c.querySelectorAll("button[data-rating]").forEach(d=>{d.addEventListener("click",()=>{let p=d.dataset.rating;(p==="1"||p==="2"||p==="3"||p==="4")&&(O=Number(p),Z=true,x());});});let j=c.querySelector('textarea[data-role="comment"]');j&&(Z&&(Z=false,requestAnimationFrame(()=>j.focus({preventScroll:true}))),j.addEventListener("input",()=>{if(j.value.length<=1e3){U=j.value;let d=c.querySelector('[data-role="charcount"]');if(d){let p=1e3-U.length;d.textContent=`${p} chars remaining`,d.style.color=p<50?"#dc2626":i.text,d.style.opacity=p<50?"1":"0.6";}}}));let He=c.querySelector('input[data-role="share-email"]');He?.addEventListener("change",()=>{T=He.checked,x();});let be=c.querySelector('input[data-role="email-input"]');be?.addEventListener("input",()=>{be.value.length<=254&&(F=be.value);});let q=c.querySelector('input[data-role="screenshot-input"]');c.querySelector('button[data-role="screenshot-pick"]')?.addEventListener("click",()=>{q?.click();}),q?.addEventListener("change",()=>{let d=q.files?.[0];d&&it(d).finally(()=>{q&&(q.value="");});}),c.querySelectorAll('button[data-role="screenshot-remove"]').forEach(d=>{d.addEventListener("click",()=>{let p=Number(d.dataset.index);Number.isInteger(p)&&Re(p);});});}function x(){at(),lt(),dt();}$.addEventListener("click",()=>{b?B():Pe();}),H.addEventListener("click",()=>{S||v||B();});let De=e=>{if(b){if(e.key==="Escape"){if(S||v)return;B();}e.key==="Enter"&&(e.metaKey||e.ctrlKey)&&(e.preventDefault(),Ce());}};document.addEventListener("keydown",De);let A=null,N=null;function Oe(){A&&N&&A.removeEventListener("change",N),A=null,N=null;}function ze(){A||typeof window>"u"||typeof window.matchMedia!="function"||(A=window.matchMedia("(prefers-color-scheme: dark)"),N=()=>{l===void 0&&(i=Ee(void 0),x());},A.addEventListener("change",N));}l===void 0&&ze(),x();let W=false;return {destroy:()=>{if(!W){W=true,document.removeEventListener("keydown",De),Oe();for(let e of X){if(!e.onDestroy)continue;let r=Q.get(e.name);if(r)try{e.onDestroy(r);}catch(u){r.logger.error("onDestroy threw",u);}}fe.clear(),Q.clear(),R.remove();}},open:Pe,close:B,whenReady:()=>tt,identify:e=>{W||(J=e,D(e));},update:e=>{if(W)return;let r=false;e.position!==void 0&&e.position!==s&&(s=e.position,r=true),"theme"in e&&(l=e.theme,i=Ee(l),l===void 0?ze():Oe(),r=true),e.title!==void 0&&e.title!==a&&(a=e.title,r=true),e.placeholder!==void 0&&e.placeholder!==w&&(w=e.placeholder,r=true),e.showEmailOption!==void 0&&e.showEmailOption!==C&&(C=e.showEmailOption,r=true),e.showScreenshotOption!==void 0&&e.showScreenshotOption!==E&&(E=e.showScreenshotOption,r=true),"environment"in e&&(Ue=e.environment),"metadata"in e&&(ie=e.metadata),"onSubmit"in e&&(Te=e.onSubmit),"onError"in e&&(se=e.onError),"onOpen"in e&&($e=e.onOpen),"onClose"in e&&(Ie=e.onClose),"getUser"in e&&(V=e.getUser),"user"in e&&(J=e.user,D(e.user)),r&&x();}}}exports.DARK_THEME=te;exports.DEFAULT_THEME=he;exports.initUseroFeedbackWidget=_t;exports.mergePluginPatches=wt;exports.mergeTheme=ut;exports.resolveTheme=Ee;return exports;})({});//# sourceMappingURL=usero.iife.js.map
473
+ `,u.querySelector('form[data-role="form"]')?.addEventListener("submit",c=>{c.preventDefault(),ze();}),u.querySelector('button[data-role="close"]')?.addEventListener("click",N),u.querySelectorAll("button[data-rating]").forEach(c=>{c.addEventListener("click",()=>{let p=c.dataset.rating;(p==="1"||p==="2"||p==="3"||p==="4")&&(H=Number(p),te=true,x());});});let K=u.querySelector('textarea[data-role="comment"]');K&&(te&&(te=false,requestAnimationFrame(()=>K.focus({preventScroll:true}))),K.addEventListener("input",()=>{if(K.value.length<=1e3){U=K.value;let c=u.querySelector('[data-role="charcount"]');if(c){let p=1e3-U.length;c.textContent=`${p} chars remaining`,c.style.color=p<50?"#dc2626":i.text,c.style.opacity=p<50?"1":"0.6";}}}));let Ne=u.querySelector('input[data-role="share-email"]');Ne?.addEventListener("change",()=>{T=Ne.checked,x();});let ve=u.querySelector('input[data-role="email-input"]');ve?.addEventListener("input",()=>{ve.value.length<=254&&(P=ve.value);});let V=u.querySelector('input[data-role="screenshot-input"]');u.querySelector('button[data-role="screenshot-pick"]')?.addEventListener("click",()=>{V?.click();}),V?.addEventListener("change",()=>{let c=V.files?.[0];c&&dt(c).finally(()=>{V&&(V.value="");});}),u.querySelectorAll('button[data-role="screenshot-remove"]').forEach(c=>{c.addEventListener("click",()=>{let p=Number(c.dataset.index);Number.isInteger(p)&&Ce(p);});});}function x(){ut(),ft(),pt();}I.addEventListener("click",()=>{b?N():Ae();}),B.addEventListener("click",()=>{w||v||N();});let He=t=>{if(b){if(t.key==="Escape"){if(w||v)return;N();}t.key==="Enter"&&(t.metaKey||t.ctrlKey)&&(t.preventDefault(),ze());}};document.addEventListener("keydown",He);let C=null,W=null;function _e(){C&&W&&C.removeEventListener("change",W),C=null,W=null;}function Be(){C||typeof window>"u"||typeof window.matchMedia!="function"||(C=window.matchMedia("(prefers-color-scheme: dark)"),W=()=>{l===void 0&&(i=Ie(void 0),x());},C.addEventListener("change",W));}l===void 0&&Be(),x();let j=false;return {destroy:()=>{if(!j){j=true,document.removeEventListener("keydown",He),_e();for(let t of Z){if(!t.onDestroy)continue;let r=ee.get(t.name);if(r)try{t.onDestroy(r);}catch(d){r.logger.error("onDestroy threw",d);}}be.clear(),ee.clear(),L.remove();}},open:Ae,close:N,whenReady:()=>it,identify:t=>{j||(X=t,z(t));},update:t=>{if(j)return;let r=false;t.position!==void 0&&t.position!==s&&(s=t.position,r=true),"theme"in t&&(l=t.theme,i=Ie(l),l===void 0?Be():_e(),r=true),t.title!==void 0&&t.title!==a&&(a=t.title,r=true),t.placeholder!==void 0&&t.placeholder!==S&&(S=t.placeholder,r=true),t.showEmailOption!==void 0&&t.showEmailOption!==O&&(O=t.showEmailOption,r=true),t.showScreenshotOption!==void 0&&t.showScreenshotOption!==E&&(E=t.showScreenshotOption,r=true),"environment"in t&&($e=t.environment),"metadata"in t&&(de=t.metadata),"onSubmit"in t&&(Me=t.onSubmit),"onError"in t&&(ce=t.onError),"onOpen"in t&&(Fe=t.onOpen),"onClose"in t&&(Pe=t.onClose),"getUser"in t&&(Y=t.getUser),"user"in t&&(X=t.user,z(t.user)),r&&x();}}}exports.DARK_THEME=re;exports.DEFAULT_THEME=Se;exports.__identityTest__=Kt;exports.initUseroFeedbackWidget=Vt;exports.mergePluginPatches=Et;exports.mergeTheme=mt;exports.resolveTheme=Ie;return exports;})({});//# sourceMappingURL=usero.iife.js.map
474
474
  //# sourceMappingURL=usero.iife.js.map