@usero/sdk 0.3.2 → 0.4.0

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