@tekibo/feedpulse-sdk 0.6.1 → 0.7.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.
- package/dist/nuxt.js +20 -1
- package/dist/nuxt.mjs +516 -106
- package/dist/react.js +21 -2
- package/dist/react.mjs +449 -189
- package/dist/struggle-detector-BqTHgw95.mjs +73 -0
- package/dist/struggle-detector-DV52qDLp.js +1 -0
- package/package.json +1 -1
- package/templates/nuxt-bot-proxy.ts +56 -0
package/dist/nuxt.js
CHANGED
|
@@ -1 +1,20 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("vue"),
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("vue"),N=require("./index.js"),T=require("./struggle-detector-DV52qDLp.js"),S=Symbol("feedpulse");function B(){return e.inject(S,null)}const P={style:{width:"360px",height:"520px",background:"#111827",color:"#e5e7eb",borderRadius:"16px",border:"1px solid #374151",boxShadow:"0 20px 40px rgba(0,0,0,0.35)",display:"flex",flexDirection:"column",overflow:"hidden",animation:"fp-panel-open 300ms ease-out"}},D={style:{display:"flex",justifyContent:"space-between",alignItems:"center",padding:"12px 14px",borderBottom:"1px solid #374151",background:"#0f172a"}},$={style:{flex:1,overflowY:"auto",padding:"12px",display:"grid",gap:"10px"}},A={key:0,style:{display:"flex",gap:"8px"}},I=["onClick"],M=["onClick"],F={key:0,style:{display:"flex",alignItems:"center",gap:"5px",padding:"4px 0"}},_={key:1,style:{border:"1px solid #f59e0b",background:"#451a03",color:"#fde68a",borderRadius:"10px",padding:"10px",fontSize:"12px"}},R={style:{display:"flex",gap:"8px"}},q=["disabled"],Y=["disabled"],j=["href"],L=e.defineComponent({__name:"BotPanel",props:{botSessionId:{},config:{},unavailable:{type:Boolean}},emits:["close","helpful","escalated"],setup(r,{emit:u}){const i=r,o=u,a=e.ref({}),t=e.ref([]),n=e.ref(""),s=e.ref(!1),m=e.ref(!1),y=e.computed(()=>n.value.trim().length>0&&!s.value&&!i.unavailable&&!m.value);function x(){return t.value.map(l=>({role:l.role,content:l.content}))}async function f(l){if(l.preventDefault(),!y.value)return;const d=n.value.trim();n.value="",t.value.push({id:`user-${Date.now()}`,role:"user",content:d});const c=`assistant-${Date.now()}`;t.value.push({id:c,role:"assistant",content:""}),s.value=!0,m.value=!1;try{const v=await fetch("/api/bot/chat-proxy",{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify({botSessionId:i.botSessionId,config:i.config,messages:x()})});if(v.status===402){m.value=!0;const b=t.value.find(w=>w.id===c);b&&(b.content="Service temporarily unavailable.");return}if(!v.ok)throw new Error("Chat request failed");const E=v.body?.getReader();if(!E)throw new Error("Missing stream");const g=new TextDecoder;let p=!1;for(;!p;){const b=await E.read();if(p=b.done,b.value){const w=g.decode(b.value,{stream:!p}),C=t.value.find(z=>z.id===c);C&&(C.content+=w)}}}catch{const v=t.value.find(E=>E.id===c);v&&!v.content&&(v.content="Sorry, I couldn't process that. Please try again.")}finally{s.value=!1}}function h(l,d){a.value[l]=d,o("helpful",d)}function k(){o("escalated")}return e.watch(()=>i.botSessionId,()=>{a.value={},t.value=[],n.value="",m.value=!1}),(l,d)=>(e.openBlock(),e.createElementBlock("div",P,[e.createElementVNode("div",D,[d[2]||(d[2]=e.createElementVNode("div",{style:{display:"grid",gap:"2px"}},[e.createElementVNode("strong",{style:{fontSize:"14px",color:"#fff"}},"Pulse Bot"),e.createElementVNode("span",{style:{fontSize:"11px",color:"#94a3b8"}},"Powered by FeedPulse AI")],-1)),e.createElementVNode("button",{style:{border:"none",background:"transparent",color:"#cbd5e1",cursor:"pointer",fontSize:"18px",lineHeight:"1"},onClick:d[0]||(d[0]=c=>o("close"))}," × ")]),e.createElementVNode("div",$,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(t.value,c=>(e.openBlock(),e.createElementBlock("div",{key:c.id,style:e.normalizeStyle({display:"grid",justifyItems:c.role==="user"?"end":"start",gap:"6px"})},[e.createElementVNode("div",{style:e.normalizeStyle({maxWidth:"85%",padding:"9px 11px",borderRadius:c.role==="user"?"14px 14px 2px 14px":"14px 14px 14px 2px",background:c.role==="user"?"#4f46e5":"#1f2937",color:"#fff",fontSize:"13px",lineHeight:"1.4",whiteSpace:"pre-wrap"})},e.toDisplayString(c.content),5),c.role==="assistant"?(e.openBlock(),e.createElementBlock("div",A,[e.createElementVNode("button",{style:e.normalizeStyle({border:"1px solid #334155",background:a.value[c.id]===!0?"#16a34a":"#0f172a",color:"#e2e8f0",borderRadius:"8px",fontSize:"12px",padding:"4px 8px",cursor:"pointer"}),onClick:v=>h(c.id,!0)}," 👍 ",12,I),e.createElementVNode("button",{style:e.normalizeStyle({border:"1px solid #334155",background:a.value[c.id]===!1?"#dc2626":"#0f172a",color:"#e2e8f0",borderRadius:"8px",fontSize:"12px",padding:"4px 8px",cursor:"pointer"}),onClick:v=>h(c.id,!1)}," 👎 ",12,M)])):e.createCommentVNode("",!0)],4))),128)),s.value?(e.openBlock(),e.createElementBlock("div",F,[...d[3]||(d[3]=[e.createElementVNode("span",{style:{width:"8px",height:"8px",borderRadius:"999px",background:"#94a3b8",animation:"fp-dot 1s infinite 0ms"}},null,-1),e.createElementVNode("span",{style:{width:"8px",height:"8px",borderRadius:"999px",background:"#94a3b8",animation:"fp-dot 1s infinite 160ms"}},null,-1),e.createElementVNode("span",{style:{width:"8px",height:"8px",borderRadius:"999px",background:"#94a3b8",animation:"fp-dot 1s infinite 320ms"}},null,-1)])])):e.createCommentVNode("",!0),r.unavailable||m.value?(e.openBlock(),e.createElementBlock("div",_," Service temporarily unavailable. ")):e.createCommentVNode("",!0)]),e.createElementVNode("form",{style:{padding:"10px",borderTop:"1px solid #374151",display:"grid",gap:"8px"},onSubmit:f},[e.createElementVNode("div",R,[e.withDirectives(e.createElementVNode("input",{"onUpdate:modelValue":d[1]||(d[1]=c=>n.value=c),disabled:s.value||r.unavailable,style:{flex:1,borderRadius:"10px",border:"1px solid #475569",background:"#0f172a",color:"#fff",fontSize:"13px",padding:"8px 10px",outline:"none"},placeholder:"Ask a question..."},null,8,q),[[e.vModelText,n.value]]),e.createElementVNode("button",{type:"submit",disabled:!y.value,style:e.normalizeStyle({border:"none",borderRadius:"10px",background:y.value?"#6366f1":"#334155",color:"#fff",fontWeight:"600",fontSize:"12px",padding:"0 14px",cursor:y.value?"pointer":"not-allowed"})}," Send ",12,Y)]),r.config.escalateTo?(e.openBlock(),e.createElementBlock("a",{key:0,href:r.config.escalateTo.url,style:{color:"#c4b5fd",fontSize:"12px",textDecoration:"none"},onClick:k},e.toDisplayString(r.config.escalateTo.label),9,j)):e.createCommentVNode("",!0)],32)]))}}),H=e.defineComponent({__name:"FeedPulseBot",props:{faq:{},pageContext:{},systemPrompt:{},canNavigate:{type:Boolean},canHelpForms:{type:Boolean},escalateTo:{},initialMessage:{default:"👋 Need help?"},position:{default:"bottom-right"}},setup(r){const u=r,i=new N.CookieManager,o=e.ref(!1),a=e.ref(!1),t=e.ref(!1),n=e.ref(!1),s=e.ref(""),m=e.ref(null),y=e.ref(!1);let x=null,f=null;const h=e.computed(()=>({faq:u.faq||[],pageContext:u.pageContext||"",systemPrompt:u.systemPrompt||"",canNavigate:u.canNavigate??!1,canHelpForms:u.canHelpForms??!1,escalateTo:u.escalateTo})),k=e.computed(()=>({position:"fixed",bottom:"24px",zIndex:"10000",...u.position==="bottom-left"?{left:"24px"}:{right:"24px"}}));function l(){if(typeof document>"u"||document.getElementById("fp-bot-animations"))return;const g=document.createElement("style");g.id="fp-bot-animations",g.textContent=`
|
|
2
|
+
@keyframes fp-bubble-in {
|
|
3
|
+
0% { opacity: 0; transform: scale(0.8) translateY(6px); }
|
|
4
|
+
100% { opacity: 1; transform: scale(1) translateY(0); }
|
|
5
|
+
}
|
|
6
|
+
@keyframes fp-bounce {
|
|
7
|
+
0% { transform: translateY(0); }
|
|
8
|
+
50% { transform: translateY(-8px); }
|
|
9
|
+
100% { transform: translateY(0); }
|
|
10
|
+
}
|
|
11
|
+
@keyframes fp-panel-open {
|
|
12
|
+
0% { opacity: 0; transform: translateY(40px); }
|
|
13
|
+
100% { opacity: 1; transform: translateY(0); }
|
|
14
|
+
}
|
|
15
|
+
@keyframes fp-dot {
|
|
16
|
+
0% { opacity: 0.2; transform: translateY(0); }
|
|
17
|
+
50% { opacity: 1; transform: translateY(-3px); }
|
|
18
|
+
100% { opacity: 0.2; transform: translateY(0); }
|
|
19
|
+
}
|
|
20
|
+
`,document.head.appendChild(g)}async function d(g,p){const b=i.getAllData(!0);try{const w=await fetch("/api/bot/session-proxy",{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify({page:window.location.pathname,triggerScore:g,triggerReasons:p,sessionId:b.sessionId,visitorId:b.userId,device:navigator.userAgent})});if(!w.ok){w.status===402&&(n.value=!0);return}const C=await w.json().catch(()=>null);C?.botSessionId&&(s.value=C.botSessionId)}catch{}}function c(g,p){a.value=!0,o.value=!0,n.value=!1,m.value=null,y.value=!1,d(g,p),f&&clearTimeout(f),f=setTimeout(()=>{o.value=!1},8e3)}function v(){t.value=!0,o.value=!1}async function E(){if(t.value=!1,!!s.value)try{await fetch("/api/bot/session-end-proxy",{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify({botSessionId:s.value,wasHelpful:m.value,escalated:y.value})})}catch{}}return e.onMounted(()=>{l(),x=new T.StruggleDetector({onTrigger:(g,p)=>{c(g,p)}}),x.start()}),e.onBeforeUnmount(()=>{x?.stop(),f&&clearTimeout(f)}),(g,p)=>(e.openBlock(),e.createElementBlock("div",{style:e.normalizeStyle(k.value)},[o.value&&!t.value?(e.openBlock(),e.createElementBlock("div",{key:0,style:e.normalizeStyle({position:"absolute",bottom:"62px",right:r.position==="bottom-right"?"0":"auto",left:r.position==="bottom-left"?"0":"auto",background:"#fff",border:"2px solid #6366f1",color:"#1f2937",borderRadius:"12px 12px 0 12px",padding:"10px 12px",maxWidth:"240px",fontSize:"13px",boxShadow:"0 10px 22px rgba(0,0,0,0.16)",animation:"fp-bubble-in 300ms ease-out"})},[e.createTextVNode(e.toDisplayString(r.initialMessage)+" ",1),p[2]||(p[2]=e.createElementVNode("span",{style:{position:"absolute",right:"10px",bottom:"-12px",width:"0",height:"0",borderLeft:"10px solid transparent",borderTop:"12px solid #6366f1"}},null,-1)),p[3]||(p[3]=e.createElementVNode("span",{style:{position:"absolute",right:"11px",bottom:"-9px",width:"0",height:"0",borderLeft:"9px solid transparent",borderTop:"11px solid #fff"}},null,-1))],4)):e.createCommentVNode("",!0),a.value&&!t.value?(e.openBlock(),e.createElementBlock("button",{key:1,style:{width:"48px",height:"48px",borderRadius:"999px",border:"none",background:"#6366f1",boxShadow:"0 12px 26px rgba(79,70,229,0.45)",cursor:"pointer",display:"grid",placeItems:"center",animation:"fp-bounce 600ms ease-out"},onClick:v},[...p[4]||(p[4]=[e.createStaticVNode('<svg width="28" height="28" viewBox="0 0 24 24" fill="none" stroke="white" stroke-width="2"><rect x="3" y="8" width="18" height="13" rx="2"></rect><path d="M12 8V5"></path><circle cx="12" cy="4" r="1"></circle><circle cx="8" cy="13" r="1.5" fill="white" stroke="none"></circle><circle cx="16" cy="13" r="1.5" fill="white" stroke="none"></circle><path d="M9 17h6" stroke-linecap="round"></path></svg>',1)])])):e.createCommentVNode("",!0),t.value&&s.value?(e.openBlock(),e.createBlock(L,{key:2,"bot-session-id":s.value,config:h.value,unavailable:n.value,onClose:E,onHelpful:p[0]||(p[0]=b=>m.value=b),onEscalated:p[1]||(p[1]=b=>y.value=!0)},null,8,["bot-session-id","config","unavailable"])):e.createCommentVNode("",!0)],4))}}),O={key:0,style:{position:"fixed",bottom:"0",left:"0",right:"0","z-index":"99999",background:"#1a1a1a",color:"#fff",padding:"20px 24px","border-top":"1px solid #333","font-family":"sans-serif"}},U={style:{"max-width":"900px",margin:"0 auto"}},W={key:0,style:{"margin-bottom":"12px","font-size":"13px"}},J={style:{display:"flex","align-items":"center",gap:"8px","margin-bottom":"6px"}},K={style:{display:"flex","align-items":"center",gap:"8px"}},G={style:{display:"flex",gap:"8px","flex-wrap":"wrap","align-items":"center"}},V=e.defineComponent({__name:"consent-banner",emits:["consent"],setup(r,{emit:u}){const i=u,o=new N.CookieManager,a=e.ref(!1),t=e.ref(!1),n=e.ref(!1),s=e.ref(!1);function m(){a.value=!0,t.value=!0}e.onMounted(()=>{const k=o.getConsent();a.value=!k||o.isConsentExpired(),k&&(n.value=k.analytics,s.value=k.marketing),typeof window<"u"&&(window.addEventListener("feedpulse:open-consent",m),window.addEventListener("feedpulse:withdraw-consent",h))});function y(){o.setConsent({analytics:!0,marketing:!0,version:"1.0"}),i("consent",{analytics:!0,marketing:!0,action:"accept_all"}),a.value=!1}function x(){o.setConsent({analytics:!1,marketing:!1,version:"1.0"}),o.clearAnalyticsCookies(),i("consent",{analytics:!1,marketing:!1,action:"reject_all"}),a.value=!1}function f(){o.setConsent({analytics:n.value,marketing:s.value,version:"1.0"}),n.value||o.clearAnalyticsCookies(),i("consent",{analytics:n.value,marketing:s.value,action:"custom"}),a.value=!1}function h(){o.setConsent({analytics:!1,marketing:!1,version:"1.0"}),o.clearAnalyticsCookies(),n.value=!1,s.value=!1,i("consent",{analytics:!1,marketing:!1,action:"withdraw"}),a.value=!0}return e.onBeforeUnmount(()=>{typeof window<"u"&&(window.removeEventListener("feedpulse:open-consent",m),window.removeEventListener("feedpulse:withdraw-consent",h))}),(k,l)=>(e.openBlock(),e.createBlock(e.Teleport,{to:"body"},[a.value?(e.openBlock(),e.createElementBlock("div",O,[e.createElementVNode("div",U,[l[6]||(l[6]=e.createElementVNode("p",{style:{margin:"0 0 12px","font-size":"14px","line-height":"1.5"}},[e.createTextVNode(" We use cookies to improve reliability and understand usage. "),e.createElementVNode("a",{href:"/privacy",style:{color:"#818cf8"}},"Privacy Policy")],-1)),t.value?(e.openBlock(),e.createElementBlock("div",W,[l[5]||(l[5]=e.createElementVNode("label",{style:{display:"flex","align-items":"center",gap:"8px","margin-bottom":"6px",opacity:"0.75"}},[e.createElementVNode("input",{type:"checkbox",checked:"",disabled:""}),e.createTextVNode(" Necessary (always on) ")],-1)),e.createElementVNode("label",J,[e.withDirectives(e.createElementVNode("input",{"onUpdate:modelValue":l[0]||(l[0]=d=>n.value=d),type:"checkbox"},null,512),[[e.vModelCheckbox,n.value]]),l[3]||(l[3]=e.createTextVNode(" Analytics ",-1))]),e.createElementVNode("label",K,[e.withDirectives(e.createElementVNode("input",{"onUpdate:modelValue":l[1]||(l[1]=d=>s.value=d),type:"checkbox"},null,512),[[e.vModelCheckbox,s.value]]),l[4]||(l[4]=e.createTextVNode(" Marketing ",-1))])])):e.createCommentVNode("",!0),e.createElementVNode("div",G,[e.createElementVNode("button",{style:{width:"130px",padding:"9px 12px",background:"#4f46e5",color:"#fff",border:"1px solid #4f46e5","border-radius":"6px","font-size":"13px","font-weight":"600",cursor:"pointer"},onClick:y}," Accept All "),e.createElementVNode("button",{style:{width:"130px",padding:"9px 12px",background:"transparent",color:"#fff",border:"1px solid #555","border-radius":"6px","font-size":"13px","font-weight":"600",cursor:"pointer"},onClick:x}," Reject All "),e.createElementVNode("button",{style:{padding:"9px 16px",background:"transparent",color:"#aaa",border:"1px solid #333","border-radius":"6px","font-size":"13px",cursor:"pointer"},onClick:l[2]||(l[2]=d=>t.value?f():t.value=!0)},e.toDisplayString(t.value?"Save Preferences":"Customize"),1)])])])):e.createCommentVNode("",!0)]))}}),Q=e.defineComponent({__name:"FeedPulseProvider",props:{proxyEndpoint:{default:"/api/fp-proxy"},debug:{type:Boolean},consentRequired:{type:Boolean,default:!0}},setup(r){const u=r,i=new N.CookieManager,o=new N.FeedPulseTracker({proxyEndpoint:u.proxyEndpoint,debug:u.debug});e.provide(S,o);function a(t){const n=i.setConsent({analytics:t.analytics,marketing:t.marketing,version:"1.0"});t.analytics||i.clearAnalyticsCookies(),o.updateCookieData(i.getAllData(t.analytics)),o.track("consent","__consent__",{analytics:t.analytics,marketing:t.marketing,action:t.action,userAgent:navigator.userAgent,version:n.version})}return e.onMounted(()=>{const t=i.getConsent();u.consentRequired===!1?(i.setConsent({analytics:!0,marketing:!0,version:"1.0"}),o.updateCookieData(i.getAllData(!0))):t&&!i.isConsentExpired()?o.updateCookieData(i.getAllData(t.analytics)):o.updateCookieData(i.getAllData(!1)),o.init()}),e.onBeforeUnmount(()=>o.destroy()),(t,n)=>(e.openBlock(),e.createElementBlock(e.Fragment,null,[e.renderSlot(t.$slots,"default"),r.consentRequired!==!1?(e.openBlock(),e.createBlock(V,{key:0,onConsent:a})):e.createCommentVNode("",!0)],64))}}),X={key:1,style:{background:"#fff",border:"1px solid #e5e7eb","border-radius":"12px",padding:"16px",width:"280px","box-shadow":"0 10px 25px rgba(0,0,0,0.15)"}},Z={style:{margin:"0 0 12px","font-weight":"600",color:"#111"}},ee={style:{display:"flex",gap:"6px","margin-bottom":"12px"}},te=["onClick"],oe={key:1,style:{"text-align":"center",padding:"16px",color:"#111"}},ne=e.defineComponent({__name:"FeedPulseWidget",props:{id:{},placeholder:{},position:{default:"bottom-right"}},setup(r){const u=r,i=B(),o=e.ref(u.position==="inline"),a=e.ref(null),t=e.ref(""),n=e.ref(!1);function s(y){a.value=y}function m(){!a.value&&!t.value.trim()||(i?.trackFeedback(u.id??null,a.value,t.value||null),n.value=!0,setTimeout(()=>{o.value=u.position==="inline",n.value=!1,a.value=null,t.value=""},2e3))}return(y,x)=>(e.openBlock(),e.createElementBlock("div",{class:"feedpulse-widget",style:e.normalizeStyle(r.position!=="inline"?`position:fixed; ${r.position==="bottom-right"?"right:24px":"left:24px"}; bottom:24px; z-index:9999;`:"")},[r.position!=="inline"?(e.openBlock(),e.createElementBlock("button",{key:0,style:{background:"#6366f1",color:"#fff",border:"none","border-radius":"50%",width:"48px",height:"48px","font-size":"20px",cursor:"pointer"},onClick:x[0]||(x[0]=f=>o.value=!o.value)}," 💬 ")):e.createCommentVNode("",!0),o.value?(e.openBlock(),e.createElementBlock("div",X,[n.value?(e.openBlock(),e.createElementBlock("div",oe,[...x[2]||(x[2]=[e.createElementVNode("p",{style:{"font-size":"28px",margin:"0"}}," 🎉 ",-1),e.createElementVNode("p",{style:{margin:"8px 0 0","font-weight":"600"}}," Thanks for your feedback! ",-1)])])):(e.openBlock(),e.createElementBlock(e.Fragment,{key:0},[e.createElementVNode("p",Z,e.toDisplayString(r.placeholder??"How was your experience?"),1),e.createElementVNode("div",ee,[(e.openBlock(),e.createElementBlock(e.Fragment,null,e.renderList(5,f=>e.createElementVNode("button",{key:f,style:e.normalizeStyle({background:"none",border:"none",cursor:"pointer",fontSize:"24px",opacity:a.value!==null&&f<=a.value?1:.3}),onClick:h=>s(f)}," ⭐ ",12,te)),64))]),e.withDirectives(e.createElementVNode("textarea",{"onUpdate:modelValue":x[1]||(x[1]=f=>t.value=f),placeholder:"Tell us more (optional)...",rows:"3",style:{width:"100%",padding:"8px",border:"1px solid #d1d5db","border-radius":"8px",resize:"none","font-size":"14px"}},null,512),[[e.vModelText,t.value]]),e.createElementVNode("button",{style:{"margin-top":"10px",width:"100%",background:"#6366f1",color:"#fff",border:"none","border-radius":"8px",padding:"10px","font-weight":"600",cursor:"pointer"},onClick:m}," Submit Feedback ")],64))])):e.createCommentVNode("",!0)],4))}});exports.ConsentBanner=V;exports.FeedPulseBot=H;exports.FeedPulseProvider=Q;exports.FeedPulseWidget=ne;exports.useFeedPulse=B;
|