gotcha-feedback 1.0.10 → 1.0.11

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.mjs CHANGED
@@ -1,4 +1,4 @@
1
- import {createContext,useState,useMemo,useCallback,useRef,useEffect,useContext}from'react';import {jsx,jsxs,Fragment}from'react/jsx-runtime';import {createPortal}from'react-dom';var Ee="https://gotcha.cx/api/v1";var se={ANONYMOUS_ID:"gotcha_anonymous_id"},I={POSITION:"top-right",SIZE:"md",THEME:"light",SHOW_ON_HOVER:true,TOUCH_BEHAVIOR:"always-visible",SUBMIT_TEXT:"Submit",THANK_YOU_MESSAGE:"Thanks for your feedback!"};var j={MAX_RETRIES:2,BASE_DELAY_MS:500,MAX_DELAY_MS:5e3};function ke(){if(typeof window>"u")return `anon_${crypto.randomUUID()}`;let e=localStorage.getItem(se.ANONYMOUS_ID);if(e)return e;let s=`anon_${crypto.randomUUID()}`;return localStorage.setItem(se.ANONYMOUS_ID,s),s}var Q={maxRetries:j.MAX_RETRIES,baseDelayMs:j.BASE_DELAY_MS,maxDelayMs:j.MAX_DELAY_MS};async function ae(e,s,a=Q,n=false){let u=null;for(let c=0;c<=a.maxRetries;c++){try{n&&c>0&&console.log(`[Gotcha] Retry attempt ${c}/${a.maxRetries}`);let t=await fetch(e,s);if(t.status>=400&&t.status<500&&t.status!==429||t.ok)return t;u=new Error(`HTTP ${t.status}`);}catch(t){u=t,n&&console.log(`[Gotcha] Network error: ${u.message}`);}if(c<a.maxRetries){let t=Math.min(a.baseDelayMs*Math.pow(2,c),a.maxDelayMs);await new Promise(p=>setTimeout(p,t));}}throw u}function Re(e){let{apiKey:s,baseUrl:a=Ee,debug:n=false}=e,u={"Content-Type":"application/json",Authorization:`Bearer ${s}`};async function c(t,p,r){let d=`${a}${p}`,l=crypto.randomUUID();n&&console.log(`[Gotcha] ${t} ${p}`,r);let m=await ae(d,{method:t,headers:{...u,"Idempotency-Key":l},body:r?JSON.stringify(r):void 0},Q,n),o=await m.json();if(!m.ok){let f=o.error;throw n&&console.error(`[Gotcha] Error: ${f.code} - ${f.message}`),f}return n&&console.log("[Gotcha] Response:",o),o}return {async submitResponse(t){let p=t.user||{};p.id||(p.id=ke());let r={...t,user:p,context:{url:typeof window<"u"?window.location.href:void 0,userAgent:typeof navigator<"u"?navigator.userAgent:void 0}};return c("POST","/responses",r)},async checkExistingResponse(t,p){let r=`${a}/responses/check?elementId=${encodeURIComponent(t)}&userId=${encodeURIComponent(p)}`;n&&console.log("[Gotcha] GET /responses/check");let d=await ae(r,{method:"GET",headers:u},Q,n),l=await d.json();if(!d.ok){let m=l.error;throw n&&console.error(`[Gotcha] Error: ${m.code} - ${m.message}`),m}return l.exists?(n&&console.log("[Gotcha] Found existing response:",l.response),l.response):null},async updateResponse(t,p,r){let d=`${a}/responses/${t}${r?`?userId=${encodeURIComponent(r)}`:""}`;n&&console.log(`[Gotcha] PATCH /responses/${t}`,p);let l=await ae(d,{method:"PATCH",headers:u,body:JSON.stringify(p)},Q,n),m=await l.json();if(!l.ok){let o=m.error;throw n&&console.error(`[Gotcha] Error: ${o.code} - ${o.message}`),o}return n&&console.log("[Gotcha] Response updated:",m),m},getBaseUrl(){return a}}}var Ce=createContext(null);function Ye({apiKey:e,children:s,baseUrl:a,debug:n=false,disabled:u=false,defaultUser:c={}}){let[t,p]=useState(null),r=useMemo(()=>Re({apiKey:e,baseUrl:a,debug:n}),[e,a,n]),d=useCallback(o=>{p(o);},[]),l=useCallback(()=>{p(null);},[]),m=useMemo(()=>({client:r,disabled:u,defaultUser:c,debug:n,activeModalId:t,openModal:d,closeModal:l}),[r,u,c,n,t,d,l]);return jsx(Ce.Provider,{value:m,children:s})}function _(){let e=useContext(Ce);if(!e)throw new Error("useGotchaContext must be used within a GotchaProvider");return e}function Ie(e){let{client:s,defaultUser:a}=_(),[n,u]=useState(false),[c,t]=useState(false),[p,r]=useState(null),[d,l]=useState(null);return useEffect(()=>{let o=e.user?.id||a?.id;if(!o){l(null);return}let f=false;return (async()=>{t(true);try{let g=await s.checkExistingResponse(e.elementId,o);f||l(g);}catch{f||l(null);}finally{f||t(false);}})(),()=>{f=true;}},[s,e.elementId,e.user?.id,a?.id]),{submit:useCallback(async o=>{u(true),r(null);try{let f=e.user?.id||a?.id,i;return d&&f?i=await s.updateResponse(d.id,{content:o.content,title:o.title,rating:o.rating,vote:o.vote,pollSelected:o.pollSelected},f):i=await s.submitResponse({elementId:e.elementId,mode:e.mode,content:o.content,title:o.title,rating:o.rating,vote:o.vote,pollOptions:e.pollOptions,pollSelected:o.pollSelected,experimentId:e.experimentId,variant:e.variant,user:{...a,...e.user}}),e.onSuccess?.(i),i}catch(f){let i=f instanceof Error?f.message:"Something went wrong";throw r(i),e.onError?.(f instanceof Error?f:new Error(i)),f}finally{u(false);}},[s,a,e,d]),isLoading:n,isCheckingExisting:c,error:p,existingResponse:d,isEditing:!!d,clearError:()=>r(null)}}function Z(...e){return e.filter(Boolean).join(" ")}var D=()=>typeof window>"u"?false:"ontouchstart"in window||navigator.maxTouchPoints>0,Me=(e,s)=>{let a={sm:{desktop:24,mobile:32},md:{desktop:32,mobile:36},lg:{desktop:40,mobile:40}};return s?a[e].mobile:a[e].desktop};function Ke(){return typeof window>"u"?"light":window.matchMedia("(prefers-color-scheme: dark)").matches?"dark":"light"}function Pe({size:e,theme:s,customStyles:a,showOnHover:n,touchBehavior:u,onClick:c,isOpen:t,isParentHovered:p=false}){let[r,d]=useState(false),[l,m]=useState(false),[o,f]=useState(Ke);useEffect(()=>{d(D());let G=window.matchMedia("(prefers-color-scheme: dark)"),A=O=>f(O.matches?"dark":"light");return G.addEventListener("change",A),()=>G.removeEventListener("change",A)},[]);let i=t?true:!r&&n?p:r&&u==="tap-to-reveal"?l:true,g=()=>{if(r&&u==="tap-to-reveal"&&!l){m(true);return}c();},x=Me(e,r),h=(s==="auto"?o:s)==="dark",v={width:x,height:x,borderRadius:"50%",border:h?"1px solid rgba(255,255,255,0.15)":"none",cursor:"pointer",display:"flex",alignItems:"center",justifyContent:"center",background:h?"linear-gradient(180deg, rgba(255,255,255,0.16) 0%, rgba(255,255,255,0.04) 60%, rgba(0,0,0,0.05) 100%)":"linear-gradient(160deg, rgba(255,255,255,0.7) 0%, rgba(200,210,230,0.4) 40%, rgba(180,192,220,0.5) 100%)",backdropFilter:"blur(16px) saturate(170%)",WebkitBackdropFilter:"blur(16px) saturate(170%)",color:h?"rgba(255,255,255,0.88)":"rgba(0,0,0,0.75)",boxShadow:h?["0 4px 14px rgba(0,0,0,0.45)","0 1px 3px rgba(0,0,0,0.35)","inset 0 1px 2px rgba(255,255,255,0.1)","inset 0 -1px 2px rgba(0,0,0,0.08)"].join(", "):["0 3px 12px rgba(0,0,0,0.12)","0 0 1px rgba(0,0,0,0.2)","inset 0 4px 8px rgba(255,255,255,0.95)","inset 0 -4px 8px rgba(0,0,0,0.08)"].join(", "),transition:"all 0.2s cubic-bezier(0.4, 0, 0.2, 1)",opacity:i?1:0,transform:i?"scale(1)":"scale(0.6)",pointerEvents:i?"auto":"none",...a?.button};return jsx("button",{type:"button",onClick:g,style:v,className:Z("gotcha-button",t&&"gotcha-button--open"),"aria-label":"Give feedback on this feature","aria-expanded":t,"aria-haspopup":"dialog",children:jsx(je,{size:x*.65})})}var Ge="gotcha-carter-one";function Xe(){useEffect(()=>{if(document.getElementById(Ge))return;let e=document.createElement("link");e.id=Ge,e.rel="stylesheet",e.href="https://fonts.googleapis.com/css2?family=Carter+One&display=swap",document.head.appendChild(e);},[]);}function je({size:e}){return Xe(),jsx("span",{"aria-hidden":"true",style:{fontFamily:"'Carter One', cursive",fontSize:e,lineHeight:1,display:"flex",alignItems:"center",justifyContent:"center",marginTop:e*.05,marginRight:e*.05,userSelect:"none"},children:"G"})}function $({size:e=16,color:s="currentColor"}){return jsxs("svg",{width:e,height:e,viewBox:"0 0 24 24",fill:"none",style:{animation:"gotcha-spin 0.8s linear infinite"},children:[jsx("style",{children:`
1
+ import {createContext,useState,useMemo,useCallback,useRef,useEffect,useContext}from'react';import {jsx,jsxs,Fragment}from'react/jsx-runtime';import {createPortal}from'react-dom';var Ee="https://gotcha.cx/api/v1";var se={ANONYMOUS_ID:"gotcha_anonymous_id"},I={POSITION:"top-right",SIZE:"md",THEME:"light",SHOW_ON_HOVER:true,TOUCH_BEHAVIOR:"always-visible",SUBMIT_TEXT:"Submit",THANK_YOU_MESSAGE:"Thanks for your feedback!"};var j={MAX_RETRIES:2,BASE_DELAY_MS:500,MAX_DELAY_MS:5e3};function ke(){if(typeof window>"u")return `anon_${crypto.randomUUID()}`;let e=localStorage.getItem(se.ANONYMOUS_ID);if(e)return e;let s=`anon_${crypto.randomUUID()}`;return localStorage.setItem(se.ANONYMOUS_ID,s),s}var Q={maxRetries:j.MAX_RETRIES,baseDelayMs:j.BASE_DELAY_MS,maxDelayMs:j.MAX_DELAY_MS};async function ae(e,s,a=Q,n=false){let u=null;for(let c=0;c<=a.maxRetries;c++){try{n&&c>0&&console.log(`[Gotcha] Retry attempt ${c}/${a.maxRetries}`);let t=await fetch(e,s);if(t.status>=400&&t.status<500&&t.status!==429||t.ok)return t;u=new Error(`HTTP ${t.status}`);}catch(t){u=t,n&&console.log(`[Gotcha] Network error: ${u.message}`);}if(c<a.maxRetries){let t=Math.min(a.baseDelayMs*Math.pow(2,c),a.maxDelayMs);await new Promise(p=>setTimeout(p,t));}}throw u}function Re(e){let{apiKey:s,baseUrl:a=Ee,debug:n=false}=e,u={"Content-Type":"application/json",Authorization:`Bearer ${s}`};async function c(t,p,r){let d=`${a}${p}`,l=crypto.randomUUID();n&&console.log(`[Gotcha] ${t} ${p}`,r);let m=await ae(d,{method:t,headers:{...u,"Idempotency-Key":l},body:r?JSON.stringify(r):void 0},Q,n),o=await m.json();if(!m.ok){let f=o.error;throw n&&console.error(`[Gotcha] Error: ${f.code} - ${f.message}`),f}return n&&console.log("[Gotcha] Response:",o),o}return {async submitResponse(t){let p=t.user||{};p.id||(p.id=ke());let r={...t,user:p,context:{url:typeof window<"u"?window.location.href:void 0,userAgent:typeof navigator<"u"?navigator.userAgent:void 0}};return c("POST","/responses",r)},async checkExistingResponse(t,p){let r=`${a}/responses/check?elementId=${encodeURIComponent(t)}&userId=${encodeURIComponent(p)}`;n&&console.log("[Gotcha] GET /responses/check");let d=await ae(r,{method:"GET",headers:u},Q,n),l=await d.json();if(!d.ok){let m=l.error;throw n&&console.error(`[Gotcha] Error: ${m.code} - ${m.message}`),m}return l.exists?(n&&console.log("[Gotcha] Found existing response:",l.response),l.response):null},async updateResponse(t,p,r){let d=`${a}/responses/${t}${r?`?userId=${encodeURIComponent(r)}`:""}`;n&&console.log(`[Gotcha] PATCH /responses/${t}`,p);let l=await ae(d,{method:"PATCH",headers:u,body:JSON.stringify(p)},Q,n),m=await l.json();if(!l.ok){let o=m.error;throw n&&console.error(`[Gotcha] Error: ${o.code} - ${o.message}`),o}return n&&console.log("[Gotcha] Response updated:",m),m},getBaseUrl(){return a}}}var Ce=createContext(null);function Ye({apiKey:e,children:s,baseUrl:a,debug:n=false,disabled:u=false,defaultUser:c={}}){let[t,p]=useState(null),r=useMemo(()=>Re({apiKey:e,baseUrl:a,debug:n}),[e,a,n]),d=useCallback(o=>{p(o);},[]),l=useCallback(()=>{p(null);},[]),m=useMemo(()=>({client:r,disabled:u,defaultUser:c,debug:n,activeModalId:t,openModal:d,closeModal:l}),[r,u,c,n,t,d,l]);return jsx(Ce.Provider,{value:m,children:s})}function _(){let e=useContext(Ce);if(!e)throw new Error("useGotchaContext must be used within a GotchaProvider");return e}function Ie(e){let{client:s,defaultUser:a}=_(),[n,u]=useState(false),[c,t]=useState(false),[p,r]=useState(null),[d,l]=useState(null);return useEffect(()=>{let o=e.user?.id||a?.id;if(!o){l(null);return}let f=false;return (async()=>{t(true);try{let g=await s.checkExistingResponse(e.elementId,o);f||l(g);}catch{f||l(null);}finally{f||t(false);}})(),()=>{f=true;}},[s,e.elementId,e.user?.id,a?.id]),{submit:useCallback(async o=>{u(true),r(null);try{let f=e.user?.id||a?.id,i;return d&&f?i=await s.updateResponse(d.id,{content:o.content,title:o.title,rating:o.rating,vote:o.vote,pollSelected:o.pollSelected},f):i=await s.submitResponse({elementId:e.elementId,mode:e.mode,content:o.content,title:o.title,rating:o.rating,vote:o.vote,pollOptions:e.pollOptions,pollSelected:o.pollSelected,experimentId:e.experimentId,variant:e.variant,user:{...a,...e.user}}),e.onSuccess?.(i),i}catch(f){let i=f instanceof Error?f.message:"Something went wrong";throw r(i),e.onError?.(f instanceof Error?f:new Error(i)),f}finally{u(false);}},[s,a,e,d]),isLoading:n,isCheckingExisting:c,error:p,existingResponse:d,isEditing:!!d,clearError:()=>r(null)}}function Z(...e){return e.filter(Boolean).join(" ")}var D=()=>typeof window>"u"?false:"ontouchstart"in window||navigator.maxTouchPoints>0,Me=(e,s)=>{let a={sm:{desktop:24,mobile:32},md:{desktop:32,mobile:36},lg:{desktop:40,mobile:40}};return s?a[e].mobile:a[e].desktop};function Ke(){return typeof window>"u"?"light":window.matchMedia("(prefers-color-scheme: dark)").matches?"dark":"light"}function Pe({size:e,theme:s,customStyles:a,showOnHover:n,touchBehavior:u,onClick:c,isOpen:t,isParentHovered:p=false}){let[r,d]=useState(false),[l,m]=useState(false),[o,f]=useState(Ke);useEffect(()=>{d(D());let G=window.matchMedia("(prefers-color-scheme: dark)"),A=O=>f(O.matches?"dark":"light");return G.addEventListener("change",A),()=>G.removeEventListener("change",A)},[]);let i=t?true:!r&&n?p:r&&u==="tap-to-reveal"?l:true,g=()=>{if(r&&u==="tap-to-reveal"&&!l){m(true);return}c();},x=Me(e,r),h=(s==="auto"?o:s)==="dark",v={width:x,height:x,borderRadius:"50%",border:h?"1px solid rgba(255,255,255,0.15)":"none",cursor:"pointer",display:"flex",alignItems:"center",justifyContent:"center",background:h?"linear-gradient(180deg, rgba(255,255,255,0.16) 0%, rgba(255,255,255,0.04) 60%, rgba(0,0,0,0.05) 100%)":"linear-gradient(160deg, rgba(255,255,255,0.7) 0%, rgba(200,210,230,0.4) 40%, rgba(180,192,220,0.5) 100%)",backdropFilter:"blur(16px) saturate(170%)",WebkitBackdropFilter:"blur(16px) saturate(170%)",color:h?"rgba(255,255,255,0.88)":"rgba(0,0,0,0.75)",boxShadow:h?["0 4px 14px rgba(0,0,0,0.45)","0 1px 3px rgba(0,0,0,0.35)","inset 0 1px 2px rgba(255,255,255,0.1)","inset 0 -1px 2px rgba(0,0,0,0.08)"].join(", "):["0 3px 12px rgba(0,0,0,0.12)","0 0 1px rgba(0,0,0,0.2)","inset 0 4px 8px rgba(255,255,255,0.95)","inset 0 -4px 8px rgba(0,0,0,0.08)"].join(", "),transition:"all 0.2s cubic-bezier(0.4, 0, 0.2, 1)",opacity:i?1:0,transform:i?"scale(1)":"scale(0.6)",pointerEvents:i?"auto":"none",...a?.button};return jsx("button",{type:"button",onClick:g,style:v,className:Z("gotcha-button",t&&"gotcha-button--open"),"aria-label":"Give feedback on this feature","aria-expanded":t,"aria-haspopup":"dialog",children:jsx(je,{size:x*.65})})}var Ge="gotcha-carter-one";function Xe(){useEffect(()=>{if(document.getElementById(Ge))return;let e=document.createElement("link");e.id=Ge,e.rel="stylesheet",e.href="https://fonts.googleapis.com/css2?family=Carter+One&display=swap",document.head.appendChild(e);},[]);}function je({size:e}){return Xe(),jsx("span",{"aria-hidden":"true",style:{fontFamily:"'Carter One', cursive",fontSize:e,lineHeight:1,display:"flex",alignItems:"center",justifyContent:"center",marginTop:e*.05,marginRight:e*.05,userSelect:"none"},children:"G"})}function Y({size:e=16,color:s="currentColor"}){return jsxs("svg",{width:e,height:e,viewBox:"0 0 24 24",fill:"none",style:{animation:"gotcha-spin 0.8s linear infinite"},children:[jsx("style",{children:`
2
2
  @keyframes gotcha-spin {
3
3
  from { transform: rotate(0deg); }
4
4
  to { transform: rotate(360deg); }
@@ -8,5 +8,5 @@ import {createContext,useState,useMemo,useCallback,useRef,useEffect,useContext}f
8
8
  50% { stroke-dasharray: 40, 62; stroke-dashoffset: -12; }
9
9
  100% { stroke-dasharray: 1, 62; stroke-dashoffset: -62; }
10
10
  }
11
- `}),jsx("circle",{cx:"12",cy:"12",r:"10",stroke:s,strokeWidth:"2",strokeOpacity:"0.12"}),jsx("circle",{cx:"12",cy:"12",r:"10",stroke:s,strokeWidth:"2",strokeLinecap:"round",style:{animation:"gotcha-dash 1.2s ease-in-out infinite"}})]})}function De({theme:e,placeholder:s,submitText:a,isLoading:n,onSubmit:u,customStyles:c,initialValues:t,isEditing:p=false}){let[r,d]=useState(t?.content||""),[l,m]=useState(t?.rating??null),[o,f]=useState(false);useEffect(()=>{f(D());},[]),useEffect(()=>{t?.content!==void 0&&d(t.content||""),t?.rating!==void 0&&m(t.rating??null);},[t?.content,t?.rating]);let i=e==="dark",g=h=>{h.preventDefault(),!(!r.trim()&&l===null)&&u({content:r.trim()||void 0,rating:l??void 0});},x={width:"100%",padding:o?"12px 14px":"10px 12px",border:`1px solid ${i?"rgba(255,255,255,0.08)":"#e2e8f0"}`,borderRadius:8,backgroundColor:i?"rgba(55,65,81,0.5)":"#fafbfc",color:i?"#f9fafb":"#111827",fontSize:o?16:14,resize:"vertical",minHeight:o?100:80,fontFamily:"inherit",outline:"none",transition:"border-color 0.2s cubic-bezier(0.4, 0, 0.2, 1), box-shadow 0.2s cubic-bezier(0.4, 0, 0.2, 1)",lineHeight:1.5,...c?.input},E={width:"100%",padding:o?"14px 16px":"10px 16px",border:"none",borderRadius:8,backgroundColor:i?"#e2e8f0":"#1e293b",color:i?"#1e293b":"#ffffff",fontSize:o?16:14,fontWeight:500,cursor:n?"not-allowed":"pointer",transition:"all 0.2s cubic-bezier(0.4, 0, 0.2, 1)",letterSpacing:"0.01em",...c?.submitButton};return jsxs("form",{onSubmit:g,children:[jsx("div",{style:{marginBottom:o?16:12},children:jsx(qe,{value:l,onChange:m,isDark:i,isTouch:o})}),jsx("textarea",{value:r,onChange:h=>d(h.target.value),placeholder:s||"Share your thoughts...",style:x,disabled:n,"aria-label":"Your feedback",onFocus:h=>{h.currentTarget.style.borderColor="#1e293b",h.currentTarget.style.boxShadow="0 0 0 2px rgba(30,41,59,0.15)",h.currentTarget.style.backgroundColor=i?"rgba(55,65,81,0.7)":"#ffffff";},onBlur:h=>{h.currentTarget.style.borderColor=i?"rgba(255,255,255,0.08)":"#e2e8f0",h.currentTarget.style.boxShadow="none",h.currentTarget.style.backgroundColor=i?"rgba(55,65,81,0.5)":"#fafbfc";}}),jsxs("button",{type:"submit",disabled:n||!r.trim()&&l===null,style:{...E,marginTop:12,opacity:n?.8:1,backgroundColor:!r.trim()&&l===null?i?"#374151":"#e2e8f0":i?"#e2e8f0":"#1e293b",color:!r.trim()&&l===null?i?"#6b7280":"#94a3b8":i?"#1e293b":"#ffffff",display:"flex",alignItems:"center",justifyContent:"center",gap:8},onMouseEnter:h=>{h.currentTarget.disabled||(h.currentTarget.style.backgroundColor=i?"#cbd5e1":"#334155");},onMouseLeave:h=>{h.currentTarget.disabled||(h.currentTarget.style.backgroundColor=i?"#e2e8f0":"#1e293b");},children:[n&&jsx($,{size:o?18:16,color:i?"#1e293b":"#ffffff"}),n?p?"Updating...":"Submitting...":p?"Update":a]})]})}function qe({value:e,onChange:s,isDark:a,isTouch:n}){let[u,c]=useState(null),t=n?28:18,p=n?6:3;return jsx("div",{style:{display:"flex",gap:n?6:2},role:"group","aria-label":"Rating",children:[1,2,3,4,5].map(r=>{let d=(u??e??0)>=r;return jsx("button",{type:"button",onClick:()=>s(r),onMouseEnter:()=>c(r),onMouseLeave:()=>c(null),"aria-label":`Rate ${r} out of 5`,"aria-pressed":e===r,style:{background:"none",border:"none",cursor:"pointer",padding:p,color:d?"#f59e0b":a?"rgba(255,255,255,0.12)":"#e2e8f0",transition:"color 0.15s cubic-bezier(0.4, 0, 0.2, 1), transform 0.15s cubic-bezier(0.4, 0, 0.2, 1)",transform:u!==null&&u>=r?"scale(1.1)":"scale(1)"},children:jsx("svg",{width:t,height:t,viewBox:"0 0 24 24",fill:"currentColor",children:jsx("path",{d:"M12 2l3.09 6.26L22 9.27l-5 4.87 1.18 6.88L12 17.77l-6.18 3.25L7 14.14 2 9.27l6.91-1.01L12 2z"})})},r)})})}function Le({theme:e,isLoading:s,onSubmit:a,initialVote:n,isEditing:u=false}){let[c,t]=useState(false),[p,r]=useState(n||null),[d,l]=useState(n||null);useEffect(()=>{t(D());},[]),useEffect(()=>{n!==void 0&&(l(n),r(n));},[n]),useEffect(()=>{!s&&!u&&r(null);},[s,u]);let m=g=>{r(g),a({vote:g});},o=e==="dark",f=g=>{let x=d===g;return {flex:1,minWidth:0,overflow:"hidden",padding:c?"14px 18px":"10px 14px",border:`1px solid ${x?g==="up"?o?"rgba(16,185,129,0.3)":"rgba(16,185,129,0.25)":o?"rgba(239,68,68,0.3)":"rgba(239,68,68,0.25)":o?"rgba(255,255,255,0.08)":"#e2e8f0"}`,borderRadius:c?10:8,backgroundColor:x?g==="up"?o?"rgba(16,185,129,0.08)":"rgba(16,185,129,0.06)":o?"rgba(239,68,68,0.08)":"rgba(239,68,68,0.06)":o?"rgba(55,65,81,0.5)":"#fafbfc",color:x?g==="up"?"#10b981":"#ef4444":o?"#d1d5db":"#64748b",fontSize:c?28:24,cursor:s?"not-allowed":"pointer",transition:"background-color 0.2s, border-color 0.2s, color 0.2s, transform 0.2s, box-shadow 0.2s",display:"flex",alignItems:"center",justifyContent:"center",gap:c?10:8}},i=c?24:20;return jsxs("div",{style:{display:"flex",gap:c?12:10},role:"group","aria-label":"Vote",children:[jsx("button",{type:"button",onClick:()=>m("up"),disabled:s,style:f("up"),"aria-label":"Vote up - I like this","aria-pressed":d==="up",onMouseEnter:g=>{s||(g.currentTarget.style.transform="translateY(-1px)",g.currentTarget.style.boxShadow="0 2px 8px rgba(0,0,0,0.06)");},onMouseLeave:g=>{g.currentTarget.style.transform="translateY(0)",g.currentTarget.style.boxShadow="none";},children:s&&p==="up"?jsxs(Fragment,{children:[jsx($,{size:i,color:o?"#f9fafb":"#111827"}),jsx("span",{style:{fontSize:c?15:13,fontWeight:500,letterSpacing:"0.01em"},children:u?"Updating...":"Sending..."})]}):jsxs(Fragment,{children:[jsx(Ze,{size:i}),jsx("span",{style:{fontSize:c?15:13,fontWeight:500,letterSpacing:"0.01em"},children:d==="up"?"Liked":"Like"})]})}),jsx("button",{type:"button",onClick:()=>m("down"),disabled:s,style:f("down"),"aria-label":"Vote down - I don't like this","aria-pressed":d==="down",onMouseEnter:g=>{s||(g.currentTarget.style.transform="translateY(-1px)",g.currentTarget.style.boxShadow="0 2px 8px rgba(0,0,0,0.06)");},onMouseLeave:g=>{g.currentTarget.style.transform="translateY(0)",g.currentTarget.style.boxShadow="none";},children:s&&p==="down"?jsxs(Fragment,{children:[jsx($,{size:i,color:o?"#f9fafb":"#111827"}),jsx("span",{style:{fontSize:c?15:13,fontWeight:500,letterSpacing:"0.01em"},children:u?"Updating...":"Sending..."})]}):jsxs(Fragment,{children:[jsx(Je,{size:i}),jsx("span",{style:{fontSize:c?15:13,fontWeight:500,letterSpacing:"0.01em"},children:d==="down"?"Disliked":"Dislike"})]})})]})}function Ze({size:e=24}){return jsx("svg",{width:e,height:e,viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"1.75",strokeLinecap:"round",strokeLinejoin:"round",children:jsx("path",{d:"M14 9V5a3 3 0 0 0-3-3l-4 9v11h11.28a2 2 0 0 0 2-1.7l1.38-9a2 2 0 0 0-2-2.3zM7 22H4a2 2 0 0 1-2-2v-7a2 2 0 0 1 2-2h3"})})}function Je({size:e=24}){return jsx("svg",{width:e,height:e,viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"1.75",strokeLinecap:"round",strokeLinejoin:"round",children:jsx("path",{d:"M10 15v4a3 3 0 0 0 3 3l4-9V2H5.72a2 2 0 0 0-2 1.7l-1.38 9a2 2 0 0 0 2 2.3zm7-13h2.67A2.31 2.31 0 0 1 22 4v7a2.31 2.31 0 0 1-2.33 2H17"})})}function ge({mode:e,theme:s,customStyles:a,promptText:n,placeholder:u,submitText:c,thankYouMessage:t,isLoading:p,isSubmitted:r,error:d,existingResponse:l,isEditing:m=false,onSubmit:o,onClose:f,anchorRect:i}){let g=useRef(null),x=useRef(null),[E,h]=useState(false),[v,G]=useState(false),[A,O]=useState("light");useEffect(()=>{G(window.innerWidth<640);let y=window.matchMedia("(prefers-color-scheme: dark)");O(y.matches?"dark":"light");let w=R=>O(R.matches?"dark":"light");return y.addEventListener("change",w),()=>y.removeEventListener("change",w)},[]),useEffect(()=>{let y=requestAnimationFrame(()=>h(true));return ()=>cancelAnimationFrame(y)},[]);let L=s==="auto"?A:s,b=L==="dark",U=(i?window.innerHeight-i.bottom:window.innerHeight/2)<280+20;useEffect(()=>{let y=g.current;if(!y)return;x.current?.focus();let w=R=>{if(R.key==="Escape"){f();return}if(R.key==="Tab"){let C=y.querySelectorAll('button, [href], input, select, textarea, [tabindex]:not([tabindex="-1"])'),P=C[0],B=C[C.length-1];R.shiftKey&&document.activeElement===P?(R.preventDefault(),B?.focus()):!R.shiftKey&&document.activeElement===B&&(R.preventDefault(),P?.focus());}};return document.addEventListener("keydown",w),()=>document.removeEventListener("keydown",w)},[f]);let z=e==="vote"?"What do you think?":"What do you think of this feature?",W=v?20:16,N=b?"0 1px 2px rgba(0,0,0,0.2), 0 4px 12px rgba(0,0,0,0.3), 0 12px 32px rgba(0,0,0,0.2)":"0 1px 2px rgba(0,0,0,0.04), 0 4px 12px rgba(0,0,0,0.06), 0 12px 32px rgba(0,0,0,0.06)",K=v?{position:"fixed",left:"50%",top:"50%",width:"calc(100vw - 32px)",maxWidth:320,padding:W,borderRadius:12,backgroundColor:b?"#1f2937":"#ffffff",color:b?"#f9fafb":"#111827",boxShadow:N,border:`1px solid ${b?"rgba(255,255,255,0.06)":"rgba(0,0,0,0.06)"}`,zIndex:9999,transition:"opacity 0.25s cubic-bezier(0.4, 0, 0.2, 1), transform 0.25s cubic-bezier(0.4, 0, 0.2, 1)",opacity:E?1:0,transform:E?"translate(-50%, -50%) scale(1)":"translate(-50%, -50%) scale(0.96)",...a?.modal}:{position:"absolute",left:"50%",width:320,padding:W,borderRadius:10,backgroundColor:b?"#1f2937":"#ffffff",color:b?"#f9fafb":"#111827",boxShadow:N,border:`1px solid ${b?"rgba(255,255,255,0.06)":"rgba(0,0,0,0.06)"}`,zIndex:9999,...U?{bottom:"100%",marginBottom:8}:{top:"100%",marginTop:8},transition:"opacity 0.25s cubic-bezier(0.4, 0, 0.2, 1), transform 0.25s cubic-bezier(0.4, 0, 0.2, 1)",opacity:E?1:0,transform:E?"translateX(-50%) scale(1) translateY(0)":`translateX(-50%) scale(0.96) translateY(${U?"6px":"-6px"})`,...a?.modal};return jsxs("div",{ref:g,role:"dialog","aria-modal":"true","aria-labelledby":"gotcha-modal-title",style:K,className:Z("gotcha-modal",b&&"gotcha-modal--dark"),children:[jsx("button",{ref:x,type:"button",onClick:f,"aria-label":"Close feedback form",style:{position:"absolute",top:v?12:8,right:v?12:8,width:v?36:28,height:v?36:28,border:"none",background:"transparent",cursor:"pointer",color:b?"#6b7280":"#9ca3af",display:"flex",alignItems:"center",justifyContent:"center",borderRadius:6,transition:"all 0.15s cubic-bezier(0.4, 0, 0.2, 1)"},onMouseEnter:y=>{y.currentTarget.style.backgroundColor=b?"rgba(255,255,255,0.06)":"rgba(0,0,0,0.04)",y.currentTarget.style.color=b?"#9ca3af":"#6b7280";},onMouseLeave:y=>{y.currentTarget.style.backgroundColor="transparent",y.currentTarget.style.color=b?"#6b7280":"#9ca3af";},children:jsx("svg",{width:v?16:12,height:v?16:12,viewBox:"0 0 14 14",fill:"none",children:jsx("path",{d:"M1 1L13 13M1 13L13 1",stroke:"currentColor",strokeWidth:"1.5",strokeLinecap:"round"})})}),jsx("h2",{id:"gotcha-modal-title",style:{margin:"0 0 16px 0",fontSize:v?16:14,fontWeight:600,paddingRight:v?40:32,letterSpacing:"-0.01em",lineHeight:1.4},children:n||z}),r&&jsxs("div",{style:{textAlign:"center",padding:"24px 0",color:b?"#10b981":"#059669"},children:[jsx("div",{style:{width:44,height:44,borderRadius:"50%",backgroundColor:b?"rgba(16,185,129,0.1)":"rgba(5,150,105,0.08)",display:"flex",alignItems:"center",justifyContent:"center",margin:"0 auto 12px"},children:jsx("svg",{width:"22",height:"22",viewBox:"0 0 24 24",fill:"none",children:jsx("path",{d:"M20 6L9 17L4 12",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round"})})}),jsx("p",{style:{margin:0,fontSize:13,fontWeight:500,color:b?"#d1d5db":"#374151"},children:t})]}),d&&!r&&jsx("div",{style:{padding:"8px 10px",marginBottom:12,borderRadius:8,backgroundColor:b?"rgba(127,29,29,0.3)":"#fef2f2",border:`1px solid ${b?"rgba(254,202,202,0.1)":"rgba(220,38,38,0.1)"}`,color:b?"#fecaca":"#dc2626",fontSize:13,lineHeight:1.4},children:d}),!r&&jsxs(Fragment,{children:[e==="feedback"&&jsx(De,{theme:L,placeholder:u,submitText:c,isLoading:p,onSubmit:o,customStyles:a,initialValues:l?{content:l.content,rating:l.rating}:void 0,isEditing:m}),e==="vote"&&jsx(Le,{theme:L,isLoading:p,onSubmit:o,initialVote:l?.vote||void 0,isEditing:m})]}),jsxs("div",{"aria-live":"polite",className:"sr-only",style:{position:"absolute",left:-9999},children:[r&&"Thank you! Your feedback has been submitted.",d&&`Error: ${d}`]})]})}function nt({elementId:e,user:s,mode:a="feedback",experimentId:n,variant:u,options:c,allowMultiple:t=false,showResults:p=true,position:r=I.POSITION,size:d=I.SIZE,theme:l=I.THEME,customStyles:m,visible:o=true,showOnHover:f=I.SHOW_ON_HOVER,touchBehavior:i=I.TOUCH_BEHAVIOR,promptText:g,placeholder:x,submitText:E=I.SUBMIT_TEXT,thankYouMessage:h=I.THANK_YOU_MESSAGE,onSubmit:v,onOpen:G,onClose:A,onError:O}){let{disabled:L,activeModalId:b,openModal:ne,closeModal:V}=_(),[U,z]=useState(false),[W,N]=useState(false),[K,y]=useState(null),[w,R]=useState(false),C=useRef(null);useEffect(()=>{R(window.innerWidth<640);},[]);let P=b===e;useEffect(()=>{if(!f)return;let T=C.current;if(!T)return;let H=T.parentElement;if(!H)return;let ve=()=>N(true),Se=()=>N(false);return H.addEventListener("mouseenter",ve),H.addEventListener("mouseleave",Se),()=>{H.removeEventListener("mouseenter",ve),H.removeEventListener("mouseleave",Se);}},[f]);let{submit:B,isLoading:he,error:be,existingResponse:ye,isEditing:X}=Ie({elementId:e,mode:a,experimentId:n,variant:u,pollOptions:c,user:s,onSuccess:T=>{z(true),v?.(T),setTimeout(()=>{V(),z(false);},2500);},onError:T=>{O?.(T);}}),Ne=useCallback(()=>{C.current&&y(C.current.getBoundingClientRect()),ne(e),G?.();},[e,ne,G]),re=useCallback(()=>{V(),z(false),A?.();},[V,A]),xe=useCallback(T=>{B(T);},[B]);return L||!o?null:jsxs("div",{ref:C,style:{...{"top-right":{position:"absolute",top:0,right:0,transform:"translate(50%, -50%)"},"top-left":{position:"absolute",top:0,left:0,transform:"translate(-50%, -50%)"},"bottom-right":{position:"absolute",bottom:0,right:0,transform:"translate(50%, 50%)"},"bottom-left":{position:"absolute",bottom:0,left:0,transform:"translate(-50%, 50%)"},inline:{position:"relative",display:"inline-flex"}}[r],zIndex:P?1e4:"auto"},className:"gotcha-container","data-gotcha-element":e,children:[jsx(Pe,{size:d,theme:l,customStyles:m,showOnHover:f,touchBehavior:i,onClick:Ne,isOpen:P,isParentHovered:W}),P&&!w&&jsx(ge,{mode:a,theme:l,customStyles:m,promptText:g,placeholder:x,submitText:E,thankYouMessage:X?"Your feedback has been updated!":h,isLoading:he,isSubmitted:U,error:be,existingResponse:ye,isEditing:X,onSubmit:xe,onClose:re,anchorRect:K||void 0}),P&&w&&createPortal(jsx("div",{style:{position:"fixed",inset:0,zIndex:99999,backgroundColor:"rgba(0, 0, 0, 0.3)"},onClick:re,"aria-hidden":"true",children:jsx("div",{onClick:T=>T.stopPropagation(),children:jsx(ge,{mode:a,theme:l,customStyles:m,promptText:g,placeholder:x,submitText:E,thankYouMessage:X?"Your feedback has been updated!":h,isLoading:he,isSubmitted:U,error:be,existingResponse:ye,isEditing:X,onSubmit:xe,onClose:re,anchorRect:K||void 0})})}),document.body)]})}function st(){let{client:e,disabled:s,defaultUser:a,debug:n}=_();return {client:e,disabled:s,defaultUser:a,debug:n,submitFeedback:e.submitResponse.bind(e)}}export{nt as Gotcha,Ye as GotchaProvider,st as useGotcha};//# sourceMappingURL=index.mjs.map
11
+ `}),jsx("circle",{cx:"12",cy:"12",r:"10",stroke:s,strokeWidth:"2",strokeOpacity:"0.12"}),jsx("circle",{cx:"12",cy:"12",r:"10",stroke:s,strokeWidth:"2",strokeLinecap:"round",style:{animation:"gotcha-dash 1.2s ease-in-out infinite"}})]})}function De({theme:e,placeholder:s,submitText:a,isLoading:n,onSubmit:u,customStyles:c,initialValues:t,isEditing:p=false}){let[r,d]=useState(t?.content||""),[l,m]=useState(t?.rating??null),[o,f]=useState(false);useEffect(()=>{f(D());},[]),useEffect(()=>{t?.content!==void 0&&d(t.content||""),t?.rating!==void 0&&m(t.rating??null);},[t?.content,t?.rating]);let i=e==="dark",g=h=>{h.preventDefault(),!(!r.trim()&&l===null)&&u({content:r.trim()||void 0,rating:l??void 0});},x={width:"100%",padding:o?"12px 14px":"10px 12px",border:`1px solid ${i?"rgba(255,255,255,0.08)":"#e2e8f0"}`,borderRadius:8,backgroundColor:i?"rgba(55,65,81,0.5)":"#fafbfc",color:i?"#f9fafb":"#111827",fontSize:o?16:14,resize:"vertical",minHeight:o?100:80,fontFamily:"inherit",outline:"none",transition:"border-color 0.2s cubic-bezier(0.4, 0, 0.2, 1), box-shadow 0.2s cubic-bezier(0.4, 0, 0.2, 1)",lineHeight:1.5,...c?.input},E={width:"100%",padding:o?"14px 16px":"10px 16px",border:"none",borderRadius:8,backgroundColor:i?"#e2e8f0":"#1e293b",color:i?"#1e293b":"#ffffff",fontSize:o?16:14,fontWeight:500,cursor:n?"not-allowed":"pointer",transition:"all 0.2s cubic-bezier(0.4, 0, 0.2, 1)",letterSpacing:"0.01em",...c?.submitButton};return jsxs("form",{onSubmit:g,children:[jsx("div",{style:{marginBottom:o?16:12},children:jsx(qe,{value:l,onChange:m,isDark:i,isTouch:o})}),jsx("textarea",{value:r,onChange:h=>d(h.target.value),placeholder:s||"Share your thoughts...",style:x,disabled:n,"aria-label":"Your feedback",onFocus:h=>{h.currentTarget.style.borderColor="#1e293b",h.currentTarget.style.boxShadow="0 0 0 2px rgba(30,41,59,0.15)",h.currentTarget.style.backgroundColor=i?"rgba(55,65,81,0.7)":"#ffffff";},onBlur:h=>{h.currentTarget.style.borderColor=i?"rgba(255,255,255,0.08)":"#e2e8f0",h.currentTarget.style.boxShadow="none",h.currentTarget.style.backgroundColor=i?"rgba(55,65,81,0.5)":"#fafbfc";}}),jsxs("button",{type:"submit",disabled:n||!r.trim()&&l===null,style:{...E,marginTop:12,opacity:n?.8:1,backgroundColor:!r.trim()&&l===null?i?"#374151":"#e2e8f0":i?"#e2e8f0":"#1e293b",color:!r.trim()&&l===null?i?"#6b7280":"#94a3b8":i?"#1e293b":"#ffffff",display:"flex",alignItems:"center",justifyContent:"center",gap:8},onMouseEnter:h=>{h.currentTarget.disabled||(h.currentTarget.style.backgroundColor=i?"#cbd5e1":"#334155");},onMouseLeave:h=>{h.currentTarget.disabled||(h.currentTarget.style.backgroundColor=i?"#e2e8f0":"#1e293b");},children:[n&&jsx(Y,{size:o?18:16,color:i?"#1e293b":"#ffffff"}),n?p?"Updating...":"Submitting...":p?"Update":a]})]})}function qe({value:e,onChange:s,isDark:a,isTouch:n}){let[u,c]=useState(null),t=n?28:18,p=n?6:3;return jsx("div",{style:{display:"flex",gap:n?6:2},role:"group","aria-label":"Rating",children:[1,2,3,4,5].map(r=>{let d=(u??e??0)>=r;return jsx("button",{type:"button",onClick:()=>s(r),onMouseEnter:()=>c(r),onMouseLeave:()=>c(null),"aria-label":`Rate ${r} out of 5`,"aria-pressed":e===r,style:{background:"none",border:"none",cursor:"pointer",padding:p,color:d?"#f59e0b":a?"rgba(255,255,255,0.12)":"#e2e8f0",transition:"color 0.15s cubic-bezier(0.4, 0, 0.2, 1), transform 0.15s cubic-bezier(0.4, 0, 0.2, 1)",transform:u!==null&&u>=r?"scale(1.1)":"scale(1)"},children:jsx("svg",{width:t,height:t,viewBox:"0 0 24 24",fill:"currentColor",children:jsx("path",{d:"M12 2l3.09 6.26L22 9.27l-5 4.87 1.18 6.88L12 17.77l-6.18 3.25L7 14.14 2 9.27l6.91-1.01L12 2z"})})},r)})})}function Le({theme:e,isLoading:s,onSubmit:a,initialVote:n,isEditing:u=false}){let[c,t]=useState(false),[p,r]=useState(n||null),[d,l]=useState(n||null);useEffect(()=>{t(D());},[]),useEffect(()=>{n!==void 0&&(l(n),r(n));},[n]),useEffect(()=>{!s&&!u&&r(null);},[s,u]);let m=g=>{r(g),a({vote:g});},o=e==="dark",f=g=>{let x=d===g;return {flex:1,minWidth:0,overflow:"hidden",padding:c?"14px 18px":"10px 14px",border:`1px solid ${x?g==="up"?o?"rgba(16,185,129,0.3)":"rgba(16,185,129,0.25)":o?"rgba(239,68,68,0.3)":"rgba(239,68,68,0.25)":o?"rgba(255,255,255,0.08)":"#e2e8f0"}`,borderRadius:c?10:8,backgroundColor:x?g==="up"?o?"rgba(16,185,129,0.08)":"rgba(16,185,129,0.06)":o?"rgba(239,68,68,0.08)":"rgba(239,68,68,0.06)":o?"rgba(55,65,81,0.5)":"#fafbfc",color:x?g==="up"?"#10b981":"#ef4444":o?"#d1d5db":"#64748b",fontSize:c?28:24,cursor:s?"not-allowed":"pointer",transition:"background-color 0.2s, border-color 0.2s, color 0.2s, transform 0.2s, box-shadow 0.2s",display:"flex",alignItems:"center",justifyContent:"center",gap:c?10:8}},i=c?24:20;return jsxs("div",{style:{display:"flex",gap:c?12:10},role:"group","aria-label":"Vote",children:[jsx("button",{type:"button",onClick:()=>m("up"),disabled:s,style:f("up"),"aria-label":"Vote up - I like this","aria-pressed":d==="up",onMouseEnter:g=>{s||(g.currentTarget.style.transform="translateY(-1px)",g.currentTarget.style.boxShadow="0 2px 8px rgba(0,0,0,0.06)");},onMouseLeave:g=>{g.currentTarget.style.transform="translateY(0)",g.currentTarget.style.boxShadow="none";},children:s&&p==="up"?jsxs(Fragment,{children:[jsx(Y,{size:i,color:o?"#f9fafb":"#111827"}),jsx("span",{style:{fontSize:c?15:13,fontWeight:500,letterSpacing:"0.01em"},children:u?"Updating...":"Sending..."})]}):jsxs(Fragment,{children:[jsx(Ze,{size:i}),jsx("span",{style:{fontSize:c?15:13,fontWeight:500,letterSpacing:"0.01em"},children:d==="up"?"Liked":"Like"})]})}),jsx("button",{type:"button",onClick:()=>m("down"),disabled:s,style:f("down"),"aria-label":"Vote down - I don't like this","aria-pressed":d==="down",onMouseEnter:g=>{s||(g.currentTarget.style.transform="translateY(-1px)",g.currentTarget.style.boxShadow="0 2px 8px rgba(0,0,0,0.06)");},onMouseLeave:g=>{g.currentTarget.style.transform="translateY(0)",g.currentTarget.style.boxShadow="none";},children:s&&p==="down"?jsxs(Fragment,{children:[jsx(Y,{size:i,color:o?"#f9fafb":"#111827"}),jsx("span",{style:{fontSize:c?15:13,fontWeight:500,letterSpacing:"0.01em"},children:u?"Updating...":"Sending..."})]}):jsxs(Fragment,{children:[jsx(Je,{size:i}),jsx("span",{style:{fontSize:c?15:13,fontWeight:500,letterSpacing:"0.01em"},children:d==="down"?"Disliked":"Dislike"})]})})]})}function Ze({size:e=24}){return jsx("svg",{width:e,height:e,viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"1.75",strokeLinecap:"round",strokeLinejoin:"round",children:jsx("path",{d:"M14 9V5a3 3 0 0 0-3-3l-4 9v11h11.28a2 2 0 0 0 2-1.7l1.38-9a2 2 0 0 0-2-2.3zM7 22H4a2 2 0 0 1-2-2v-7a2 2 0 0 1 2-2h3"})})}function Je({size:e=24}){return jsx("svg",{width:e,height:e,viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"1.75",strokeLinecap:"round",strokeLinejoin:"round",children:jsx("path",{d:"M10 15v4a3 3 0 0 0 3 3l4-9V2H5.72a2 2 0 0 0-2 1.7l-1.38 9a2 2 0 0 0 2 2.3zm7-13h2.67A2.31 2.31 0 0 1 22 4v7a2.31 2.31 0 0 1-2.33 2H17"})})}function ge({mode:e,theme:s,customStyles:a,promptText:n,placeholder:u,submitText:c,thankYouMessage:t,isLoading:p,isSubmitted:r,error:d,existingResponse:l,isEditing:m=false,onSubmit:o,onClose:f,anchorRect:i}){let g=useRef(null),x=useRef(null),[E,h]=useState(false),[v,G]=useState(false),[A,O]=useState("light");useEffect(()=>{G(window.innerWidth<640);let y=window.matchMedia("(prefers-color-scheme: dark)");O(y.matches?"dark":"light");let w=R=>O(R.matches?"dark":"light");return y.addEventListener("change",w),()=>y.removeEventListener("change",w)},[]),useEffect(()=>{let y=requestAnimationFrame(()=>h(true));return ()=>cancelAnimationFrame(y)},[]);let L=s==="auto"?A:s,b=L==="dark",z=(i?window.innerHeight-i.bottom:window.innerHeight/2)<280+20;useEffect(()=>{let y=g.current;if(!y)return;x.current?.focus();let w=R=>{if(R.key==="Escape"){f();return}if(R.key==="Tab"){let C=y.querySelectorAll('button, [href], input, select, textarea, [tabindex]:not([tabindex="-1"])'),P=C[0],H=C[C.length-1];R.shiftKey&&document.activeElement===P?(R.preventDefault(),H?.focus()):!R.shiftKey&&document.activeElement===H&&(R.preventDefault(),P?.focus());}};return document.addEventListener("keydown",w),()=>document.removeEventListener("keydown",w)},[f]);let N=e==="vote"?"What do you think?":"What do you think of this feature?",W=v?20:16,B=b?"0 1px 2px rgba(0,0,0,0.2), 0 4px 12px rgba(0,0,0,0.3), 0 12px 32px rgba(0,0,0,0.2)":"0 1px 2px rgba(0,0,0,0.04), 0 4px 12px rgba(0,0,0,0.06), 0 12px 32px rgba(0,0,0,0.06)",K=v?{position:"fixed",left:"50%",top:"50%",width:"calc(100vw - 32px)",maxWidth:320,padding:W,borderRadius:12,backgroundColor:b?"#1f2937":"#ffffff",color:b?"#f9fafb":"#111827",boxShadow:B,border:`1px solid ${b?"rgba(255,255,255,0.06)":"rgba(0,0,0,0.06)"}`,zIndex:9999,transition:"opacity 0.25s cubic-bezier(0.4, 0, 0.2, 1), transform 0.25s cubic-bezier(0.4, 0, 0.2, 1)",opacity:E?1:0,transform:E?"translate(-50%, -50%) scale(1)":"translate(-50%, -50%) scale(0.96)",...a?.modal}:{position:"absolute",left:"50%",width:320,padding:W,borderRadius:10,backgroundColor:b?"#1f2937":"#ffffff",color:b?"#f9fafb":"#111827",boxShadow:B,border:`1px solid ${b?"rgba(255,255,255,0.06)":"rgba(0,0,0,0.06)"}`,zIndex:9999,...z?{bottom:"100%",marginBottom:8}:{top:"100%",marginTop:8},transition:"opacity 0.25s cubic-bezier(0.4, 0, 0.2, 1), transform 0.25s cubic-bezier(0.4, 0, 0.2, 1)",opacity:E?1:0,transform:E?"translateX(-50%) scale(1) translateY(0)":`translateX(-50%) scale(0.96) translateY(${z?"6px":"-6px"})`,...a?.modal};return jsxs("div",{ref:g,role:"dialog","aria-modal":"true","aria-labelledby":"gotcha-modal-title",style:K,className:Z("gotcha-modal",b&&"gotcha-modal--dark"),children:[jsx("button",{ref:x,type:"button",onClick:f,"aria-label":"Close feedback form",style:{position:"absolute",top:v?12:8,right:v?12:8,width:v?36:28,height:v?36:28,border:"none",background:"transparent",cursor:"pointer",color:b?"#6b7280":"#9ca3af",display:"flex",alignItems:"center",justifyContent:"center",borderRadius:6,transition:"all 0.15s cubic-bezier(0.4, 0, 0.2, 1)"},onMouseEnter:y=>{y.currentTarget.style.backgroundColor=b?"rgba(255,255,255,0.06)":"rgba(0,0,0,0.04)",y.currentTarget.style.color=b?"#9ca3af":"#6b7280";},onMouseLeave:y=>{y.currentTarget.style.backgroundColor="transparent",y.currentTarget.style.color=b?"#6b7280":"#9ca3af";},children:jsx("svg",{width:v?16:12,height:v?16:12,viewBox:"0 0 14 14",fill:"none",children:jsx("path",{d:"M1 1L13 13M1 13L13 1",stroke:"currentColor",strokeWidth:"1.5",strokeLinecap:"round"})})}),jsx("h2",{id:"gotcha-modal-title",style:{margin:"0 0 16px 0",fontSize:v?16:14,fontWeight:600,paddingRight:v?40:32,letterSpacing:"-0.01em",lineHeight:1.4},children:n||N}),r&&jsxs("div",{style:{textAlign:"center",padding:"24px 0",color:b?"#10b981":"#059669"},children:[jsx("div",{style:{width:44,height:44,borderRadius:"50%",backgroundColor:b?"rgba(16,185,129,0.1)":"rgba(5,150,105,0.08)",display:"flex",alignItems:"center",justifyContent:"center",margin:"0 auto 12px"},children:jsx("svg",{width:"22",height:"22",viewBox:"0 0 24 24",fill:"none",children:jsx("path",{d:"M20 6L9 17L4 12",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round"})})}),jsx("p",{style:{margin:0,fontSize:13,fontWeight:500,color:b?"#d1d5db":"#374151"},children:t})]}),d&&!r&&jsx("div",{style:{padding:"8px 10px",marginBottom:12,borderRadius:8,backgroundColor:b?"rgba(127,29,29,0.3)":"#fef2f2",border:`1px solid ${b?"rgba(254,202,202,0.1)":"rgba(220,38,38,0.1)"}`,color:b?"#fecaca":"#dc2626",fontSize:13,lineHeight:1.4},children:d}),!r&&jsxs(Fragment,{children:[e==="feedback"&&jsx(De,{theme:L,placeholder:u,submitText:c,isLoading:p,onSubmit:o,customStyles:a,initialValues:l?{content:l.content,rating:l.rating}:void 0,isEditing:m}),e==="vote"&&jsx(Le,{theme:L,isLoading:p,onSubmit:o,initialVote:l?.vote||void 0,isEditing:m})]}),jsxs("div",{"aria-live":"polite",className:"sr-only",style:{position:"absolute",left:-9999},children:[r&&"Thank you! Your feedback has been submitted.",d&&`Error: ${d}`]})]})}function nt({elementId:e,user:s,mode:a="feedback",experimentId:n,variant:u,options:c,allowMultiple:t=false,showResults:p=true,position:r=I.POSITION,size:d=I.SIZE,theme:l=I.THEME,customStyles:m,visible:o=true,showOnHover:f=I.SHOW_ON_HOVER,touchBehavior:i=I.TOUCH_BEHAVIOR,promptText:g,placeholder:x,submitText:E=I.SUBMIT_TEXT,thankYouMessage:h=I.THANK_YOU_MESSAGE,onSubmit:v,onOpen:G,onClose:A,onError:O}){let{disabled:L,activeModalId:b,openModal:ne,closeModal:U}=_(),[z,N]=useState(false),[W,B]=useState(false),[K,y]=useState(null),[w,R]=useState(false),C=useRef(null);useEffect(()=>{R(window.innerWidth<640);},[]);let P=b===e;useEffect(()=>{if(!f)return;let T=C.current;if(!T)return;let $=T.parentElement;if(!$)return;let ve=()=>B(true),Se=()=>B(false);return $.addEventListener("mouseenter",ve),$.addEventListener("mouseleave",Se),()=>{$.removeEventListener("mouseenter",ve),$.removeEventListener("mouseleave",Se);}},[f]);let{submit:H,isLoading:he,error:be,existingResponse:ye,isEditing:X}=Ie({elementId:e,mode:a,experimentId:n,variant:u,pollOptions:c,user:s,onSuccess:T=>{v?.(T);},onError:T=>{O?.(T);}}),Ne=useCallback(()=>{C.current&&y(C.current.getBoundingClientRect()),ne(e),G?.();},[e,ne,G]),re=useCallback(()=>{U(),N(false),A?.();},[U,A]),xe=useCallback(T=>{N(true),setTimeout(()=>{U(),N(false);},1500),H(T);},[H,U]);return L||!o?null:jsxs("div",{ref:C,style:{...{"top-right":{position:"absolute",top:0,right:0,transform:"translate(50%, -50%)"},"top-left":{position:"absolute",top:0,left:0,transform:"translate(-50%, -50%)"},"bottom-right":{position:"absolute",bottom:0,right:0,transform:"translate(50%, 50%)"},"bottom-left":{position:"absolute",bottom:0,left:0,transform:"translate(-50%, 50%)"},inline:{position:"relative",display:"inline-flex"}}[r],zIndex:P?1e4:"auto"},className:"gotcha-container","data-gotcha-element":e,children:[jsx(Pe,{size:d,theme:l,customStyles:m,showOnHover:f,touchBehavior:i,onClick:Ne,isOpen:P,isParentHovered:W}),P&&!w&&jsx(ge,{mode:a,theme:l,customStyles:m,promptText:g,placeholder:x,submitText:E,thankYouMessage:X?"Your feedback has been updated!":h,isLoading:he,isSubmitted:z,error:be,existingResponse:ye,isEditing:X,onSubmit:xe,onClose:re,anchorRect:K||void 0}),P&&w&&createPortal(jsx("div",{style:{position:"fixed",inset:0,zIndex:99999,backgroundColor:"rgba(0, 0, 0, 0.3)"},onClick:re,"aria-hidden":"true",children:jsx("div",{onClick:T=>T.stopPropagation(),children:jsx(ge,{mode:a,theme:l,customStyles:m,promptText:g,placeholder:x,submitText:E,thankYouMessage:X?"Your feedback has been updated!":h,isLoading:he,isSubmitted:z,error:be,existingResponse:ye,isEditing:X,onSubmit:xe,onClose:re,anchorRect:K||void 0})})}),document.body)]})}function st(){let{client:e,disabled:s,defaultUser:a,debug:n}=_();return {client:e,disabled:s,defaultUser:a,debug:n,submitFeedback:e.submitResponse.bind(e)}}export{nt as Gotcha,Ye as GotchaProvider,st as useGotcha};//# sourceMappingURL=index.mjs.map
12
12
  //# sourceMappingURL=index.mjs.map